Dronekit python время ожидания подключения транспортного средства

у нас есть небольшие проблемы с тем, чтобы Dronekit работал с нашим коптером. До сих пор мы тестировали все с помощью SITL, и все работает нормально, однако этот успех не очень хорошо перешел на реальную вещь.

Наша установка: Windows GCS с запущенным Mavproxy (ведущий через COM9, выходы UDP для сценария Dronekit и планировщика миссий) и базовый сценарий Dronekit (взлет и приземление). См. Диаграмму для более ясного объяснения.

введите здесь описание изображения

Мы используем следующую команду при запуске MAVProxy: mavproxy.exe --master = com9,57600 --out = udp: 127.0.0.1: 14550 --out = udp: 127.0.0.1: 14551 --console

Проблема, с которой мы сталкиваемся, связана с подключением к транспортному средству (http://python.dronekit.io/guide/connecting_vehicle.html), мы можем подключиться к дрону и получить некоторую информацию о плате. Однако тогда мы не получаем контрольное сообщение в течение 30 секунд, что приводит к тайм-ауту.

>>> APM:Copter V3.5.2 (4322ffda)
>>> PX4: 1d6bf64c NuttX: 1a99ba58
>>> Frame: QUAD
>>> PX4v3 0020002E 30365110 35323931

Traceback (most recent call last):
  File "C:/Users/simon/PycharmProjects/uas_lol/test_mission.py", line 32, in <module>
    vehicle = connect(connection_string, wait_ready=True, baud=57600, heartbeat_timeout=120)
  File "C:\Python27\lib\site-packages\dronekit\__init__.py", line 2849, in connect
    vehicle.wait_ready(True)
  File "C:\Python27\lib\site-packages\dronekit\__init__.py", line 2199, in wait_ready
    timeout)
dronekit.APIException: wait_ready experienced a timeout after 30 seconds.

Process finished with exit code 1

Мы можем обойти тайм-аут, установив wait_ready = False. Используя это, мы можем подключиться к транспортному средству и вооружить дрон. Когда дело доходит до взлета, это работает только иногда. Мы обнаруживаем, что это с большей вероятностью сработает (взлетит), когда мы сбросим MAVProxy.

Я хотел бы подтвердить, что подключение к дрону по udp 127.0.0.1:14550 с Планировщиком миссий работает отлично.

Мы будем очень признательны за любое понимание того, что мы делаем неправильно, спасибо!


person SCTaylor    schedule 14.09.2017    source источник


Ответы (1)


Оказывается, проблема заключалась в том, что, поскольку мы были подключены через последовательную телеметрию со скоростью 57600 бод, загрузка параметров занимает ~ 2 минуты, а время ожидания Dronekit истекает через 30 секунд.

Согласно документации, вы можете установить тайм-аут с помощью heartbeat_timeout = 180 (http://python.dronekit.io/automodule.html#dronekit.connect). Однако на самом деле это не решило проблему, так как тайм-аут все еще истекал через 30 секунд.

Похоже, что 30 секунд могут быть закодированы в библиотеке, изменение 30 на 180 в следующей строке решило мою проблему.

person SCTaylor    schedule 14.09.2017
comment
Доступ к параметру тайм-аута осуществляется с помощью функции wait_ready. Вы можете сделать что-то вроде этого: vehicle = connect(connection_string, wait_ready=False); vehicle.wait_ready(True, timeout=300). - person Caleb; 04.01.2018