使用pymavlink库接收和发送mavlink消息

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用pymavlink库接收和发送mavlink消息相关的知识,希望对你有一定的参考价值。

我在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。当我运行代码时,我得到这个error

有没有人可以帮助我?

答案

如果您在发送之前打印消息,则会在尝试发送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

以上是关于使用pymavlink库接收和发送mavlink消息的主要内容,如果未能解决你的问题,请参考以下文章

QGC地面站Mavlink生成和MockLink模拟收发通讯

[pixhawk笔记]7-MAVLink消息机制

MAVLink功能开发,移植教程。

iNavFlight之电传MAVLink协议

示例:添加与编译一个mavlink(test.xml)

我正在托盘上用 pip 在 Windows 上安装 pymavlink 2.2.3 版本我该怎么做?