У Fusion 360 нет доступа к USB-портам по умолчанию?

Я работаю над созданием собственной 3D-мыши, вроде собственной модели 3D Connexion. Я использую Autodesk Fusion 360 в качестве своего приложения и Fusion API(Application Program Interface) для взаимодействия с мышью. У меня есть гироскоп + акселерометр, который выплевывает необработанные измерения в Arduino, который затем отправляет эти значения (через последовательный порт с использованием библиотеки Serial). Затем я использую библиотеку PySerial (потому что API-интерфейс Fusion использует python для своего языка), чтобы прочитать эти данные, поступающие из Arduino, и сплюнуть их в Fusion, где я могу контролировать положение камеры. Проблема, с которой я сталкиваюсь, заключается в том, что для тестирования я могу напечатать значения акселерометра gyro + в командную строку с помощью сценария Python. Но когда я пытаюсь точно такой же сценарий в редакторе кода Fusion (Spyder), он не работает. Я знаю, что библиотека Serial импортируется, но скрипт не работает. Возможно ли, что Fusion 360 не имеет доступа к USB-портам? Если так, как я мог это исправить?

Вот небольшой фрагмент моего кода:

#This is a python script that when run in the CMD, it works just fine.
import serial
ser = serial.Serial()
ser.baudrate = 9600
ser.port = 'COM3'
ser.open()

while True:
   result = ser.readline()
   result = str(result)
   print (result)

Все, что делает этот код, это считывает значение потенциометра, подключенного к Arduino. Затем он печатает эти значения в CMD.

Вот код, который приходит из Fusion 360 API:

#This is the Fusion 360 code that doesn't work.
import adsk.core, adsk.fusion, adsk.cam, traceback
import serial

def get(app):
   try:
       ui = app.UserInterface
       ser = serial.win32.Serial()
       ser.baudrate = 9600
       ser.port = 'COM3'
       ser.open()

       value = ser.read()
       value = str(value)

       adsk.doEvents()
       ui.messageBox(value)

   except:
       ui.messageBox('Failed:\n{}'.format(traceback.format_exc()))


def Main():

   try:
       app = adsk.core.Application.Get()
       ui = app.UserInterface
       ui.messageBox("Everything is working till this point")
       adsk.doEvents()
       get(app)

   except:
       ui.messageBox('Failed:\n{}'.format(traceback.format_exc()))


Main()
exit()

Заранее спасибо!

1 ответ

Отвечая на ваш вопрос, возможно, Fusion360 не имеет прямого доступа к последовательным портам.

Fusion360 имеет доступный API-интерфейс JavaScript и должен был добавить пользовательские вызовы, чтобы разрешить доступ к ресурсам локальной машины, таким как файлы.

(JavaScript не имеет этого изначально).

Это может быть характер проблемы, с которой вы столкнулись, даже если ваша программа написана на Python. (Я думаю, что F360 использует свой JavaScript API для отображения собственного пользовательского интерфейса).

Кроме того, я вижу разницу между фрагментами кода:

ser = serial.win32.Serial ()... ser = serial.Serial ()

Возможно, вы можете вызвать первую программу из F360 и просто записать файл или что-то в этом роде, чтобы проверить его.

Другие вопросы по тегам