получение и отправка сообщений mavlink с использованием библиотеки pymavlink - PullRequest
0 голосов
/ 20 ноября 2018

Я создал прокси между QGC (наземной станцией управления) и транспортным средством на Python.Вот код:

gcs_conn = mavutil.mavlink_connection('tcpin:localhost:15795')
gcs_conn.wait_heartbeat()
print("Heartbeat from system (system %u component %u)" %(gcs_conn.target_system, gcs_conn.target_system))
vehicle = mavutil.mavlink_connection('tcp:localhost:5760')
vehicle.wait_heartbeat() # recieving heartbeat from the vehicle
print("Heartbeat from system (system %u component %u)" %(vehicle.target_system, vehicle.target_system))
while True:
     gcs_msg = gcs_conn.recv_match()
     if gcs_msg == None:
         pass
     else:
         vehicle.mav.send(gcs_msg)
         print(gcs_msg)

     vcl_msg = vehicle.recv_match()
     if vcl_msg == None:
         pass
     else:
         gcs_conn.mav.send(vcl_msg)
         print(vcl_msg)

Мне нужно получить сообщения от QGC, а затем переслать их в транспортное средство, а также получить сообщения от транспортного средства и переслать их в QGC.Когда я запускаю код, я получаю эту ошибку .

, есть ли кто-нибудь, кто может мне помочь?

1 Ответ

0 голосов
/ 18 февраля 2019

Если вы напечатаете ваше сообщение перед отправкой, вы заметите, что оно всегда терпит неудачу при попытке отправить сообщение типа BAD_DATA.

Так что это должно исправить (то же самое для vcl_msg):

if gcs_msg and gcs_msg.get_type() != 'BAD_DATA':
    vehicle.mav.send(gcs_msg)

PD: Я заметил, что вы не указываете tcp в качестве входа или выхода, по умолчанию input.Это означает, что оба соединения являются входами.Я рекомендую настроить соединение GCS в качестве выхода:

gcs_conn = mavutil.mavlink_connection('tcp:localhost:15795', input=False)

https://mavlink.io/en/mavgen_python/#connection_string

...