pixhawk px4 添加自定义mavlink消息

本文详细介绍如何在Pixhawk平台上自定义Mavlink消息,并通过一系列步骤实现消息的解析与发布。包括创建uORB topic、定义消息结构、生成C语言源文件及编译配置等关键环节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先添加一个uORB topic,然后添加一个mavlink解析程序,这将会将一个输入的mavlink消息解析并传入uORB topic中。

注:本例程,nsh仍然看不到消息,如果哪位朋友可以看到自定义的消息,希望能指导交流。 

博客地址连接:http://www.cnblogs.com/spyplus/p/pixhawk_note_mavlink_customization.html

FantasyJxf      http://blog.youkuaiyun.com/oqqenvy12/article/details/56849572

FantasyJxf的博客不详细,但是思路清晰

1、原文中定义的ca_trajectory.msg消息如下:

      

uint64_t应改为uint64

2、原文中自定义的xml文件如下,我是定义的custom_messages.xml文件,内容一样。

 

3、将mavlink generator生成c语言源文件Out目录定位到一个空的文件夹,注意语言选择C,协议选择2.0,将生成的custom_messages文件夹拖到/mavlink/include/mavlink/v2.0

目录下。

4、将原文中创建的自定义消息类更改为本文件夹所示的类。

5、按原文的方法进行编译会在 v2.0/custom_messages/mavlink_msg_ca_trajectory.h文件的开

 头定义的结构体产生错误:

Typedef struct MAVLINK_PACKED mavlink_ca_trajectory_t{

                 uint64_t timestamp;

                         :

                         :

                 Uint16_t seq_id;

}mavlink_ca_trajectory_t;

要去掉上面高亮的mavlink_ca_trajectory_t,就可以编译过去。

6、(1)在 mavlink_receiver.h中增加一个处理类MavlinkReceiver 中的输入mavlink消息的函

数:

void handle_message_ca_trajectory_msg(mavlink_message_t *msg);

这个函数是定义在MavlinkReceiver类中的。

 

2)在 mavlink_receiver.h中加入一个类MavlinkReceiver中的uORB消息发布者

orb_advert_t _ca_traj_msg_pub,也是在类中定义的。

7、但是在启动nsh时出现的 Using MAVLINK 1.0消息。?

  然后在其他配置步骤不变的情况下,在v1.0/message_definitions/下创建自定义消息custom_message.xmlmavlink generatorOut生成的custom_messages复制到v1.0目录下。能编译过去,但是不能在nsh看到消息,通过nsh下输入ls obj命令查看消息

8、然后确保启用流,通过在启动脚本中添加以下行(-r配置流速率,-u标识UDP端口14556上的mavlink通道):  

示例:

1)在ttyS1串口上启动mavlink,波特率为921600,最大发送速率为80kB / s

mavlink start -d /dev/ttyS1 -b 921600 -m onboard -r 80000

(后来回顾时感觉是/dev/ttyS1 端口没有选对,由于目前没有时间,没机会尝试)

2)在UDP 14556端口上启动mavlink,并以50Hz的速率发送HIGHRES_IMU消息:

mavlink start -u 14556 -r 1000000nsh提示warn信息)

mavlink stream -u 14556 -s HIGHRES_IMU -r 50

   本实例的命令为:mavlink stream -r 50 -s CA_TRAJECTORY -u 14556

但是在nsh仍然看不到消息。

 

### 如何通过 QGroundControl 读取 PX4MAVLink 消息 #### 配置环境 为了实现 QGroundControl (QGC) 和 PX4 之间的 MAVLink 数据交互,需要确保硬件和软件配置正确。PX4 是一种开源飞行控制器固件,运行于 Pixhawk 系列硬件上[^1]。它能够通过 UART 接口传输数据至地面站,并利用 Mavlink 协议完成通信[^2]。 #### 设置 MAVLink 通道 要使 QGC 能够接收到来自 PX4MAVLink 消息,需确认以下设置: - **UART 配置**:在 PX4 中启用相应的 UART 口用于 MAVLink 数据传输。这通常可以通过参数 `SERIAL_PORT` 或者具体的端口号(如 `/dev/ttyS0`)来指定。 - **波特率调整**:确保所选串口的波特率与 QGC 上设定的一致,默认情况下为 57600bps。 #### 修改 QGC 显示自定义页面 为了让用户更直观地查看 MAVLink 消息,在 QGC 中可增加一个专门展示这些信息的新界面。此操作涉及对源码的小幅改动: ```cpp _p->analyzeList.append(QVariant::fromValue(new QmlComponentInfo(tr("Mavlinktest"), QUrl::fromUserInput("qrc:/qml/MavlinktestPage.qml"), QUrl::fromUserInput("qrc:/qml/images/MavlinkConsoleIcon")))); ``` 上述代码片段应被加入到 `QGCCorePlugin.cc` 文件中,从而允许加载新的 QML 组件作为插件的一部分[^3]。 #### 使用 MAVLink Console 功能 除了创建专属视图外,还可以直接运用内置的 MAVLink 控制台功能。这一工具不仅支持实时监控所有进出系统的消息流,还能区分不同来源的数据包——左侧标注的是当前活动组件 ID;若有多个子系统接入,则右侧也会呈现额外的系统标识符以供辨别[^4]。 #### 测试连接稳定性 最后一步便是验证整个链路是否正常运作。启动 QGC 后尝试建立同目标无人机间的链接,观察是否有预期中的遥测数值更新以及命令反馈出现。一旦发现问题所在即可参照官方文档进一步排查解决办法。 ```python import mavutil def read_mavlink_messages(device='/dev/ttyUSB0', baudrate=57600): master = mavutil.mavlink_connection(device, baud=baudrate) while True: msg = master.recv_match(blocking=True) if not msg: continue print(f"Received message: {msg}") read_mavlink_messages() ``` 以上 Python 示例展示了如何借助 pymavlink 库监听特定设备上的 MAVLink 报文序列。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值