MicoAir H743 飞控 uXRCE‑DDS 客户端配置笔记
1. 编译与烧录 Bootloader
1.1 编译 Bootloader
cd PX4-Autopilot
make micoair_h743_bootloader
生成文件位于 build/micoair_h743_bootloader/,主要文件:
micoair_h743_bootloader.bin– 用于 DFU 烧录
1.2 烧录 Bootloader(使用 dfu‑util)
-
安装 dfu‑util(Ubuntu):
sudo apt install dfu-util -
使飞控进入 DFU 模式:
按住飞控上的BOOT按钮,同时插入 USB 线,保持 2 秒后松开。 -
确认设备:
dfu-util -l应显示类似
Found DFU: [0483:df11]的信息。 -
烧录 Bootloader:
sudo dfu-util -d 0483:df11 -a 0 -s 0x08000000:leave -D build/micoair_h743_bootloader/micoair_h743_bootloader.bin注意:若出现
Invalid DFU suffix signature警告可忽略;若提示多个设备,用-d 0483:df11指定 VID/PID。 -
验证:烧录完成后拔掉 USB,重新上电(不再按 BOOT),用 QGroundControl 检查能否连接。
2. 修改固件以添加自定义 uXRCE‑DDS 话题
2.1 编辑 dds_topics.yaml
文件路径:PX4-Autopilot/src/modules/uxrce_dds_client/dds_topics.yaml
在 publications: 段中添加或修改话题。例如添加 input_rc:
publications:
- topic: /fmu/out/input_rc
type: px4_msgs::msg::InputRc
# ... 其他已有话题
缩进要求:使用两个空格,不可用 Tab。
2.2 编译主固件
make micoair_h743_default
生成文件:build/micoair_h743_default/micoair_h743_default.px4
2.3 烧录主固件
方法一:QGroundControl(推荐)
- 打开 QGC → 应用设置 → 固件。
- 用 USB 连接飞控(不要按 BOOT),QGC 会自动检测。
- 点击 “自定义固件文件…”,选择编译好的
.px4文件。 - 点击 “烧录”,等待完成。
方法二:dfu‑util(高级)
sudo dfu-util -d 0483:df11 -a 0 -s 0x08020000:leave -D build/micoair_h743_default/micoair_h743_default.px4
偏移地址
0x08020000是常见 Bootloader 预留空间,不同飞控可能不同。若无法启动,请改用 QGC。
3. 修改 uXRCE‑DDS 客户端的默认 QoS 策略
一般不需要修改,因为消息尺寸不匹配通常由 px4_msgs 版本不一致引起。若确有需求(例如强制所有话题使用 RELIABLE),可修改源码:
3.1 修改 dds_client.h
文件:PX4-Autopilot/src/modules/uxrce_dds_client/dds_client.h
找到类似以下定义的位置(具体变量名可能随版本变化):
// 示例:默认可靠性策略
static constexpr uint8_t UXRCE_DDS_DEFAULT_RELIABILITY = UXR_RELIABILITY_BEST_EFFORT;
改为 UXR_RELIABILITY_RELIABLE 即可。
3.2 重新编译并烧录固件
make micoair_h743_default
# 然后按 2.3 节烧录
风险提示:修改全局 QoS 可能增加网络负载,仅在充分理解后使用。
4. NSH 调试常用命令
通过串口(如 /dev/ttyACM0,波特率 57600)或 USB 虚拟串口进入 NuttX Shell。
| 命令 | 说明 |
|---|---|
help | 列出所有命令 |
listener <topic> [-n N] | 监听 uORB 主题,-n 指定打印次数 |
uorb top | 实时显示所有 uORB 主题的发布频率 |
param show <param> | 查看参数值 |
param set <param> <value> | 设置参数 |
param save | 保存参数到存储 |
dmesg | 显示内核日志(可用于查看 uXRCE‑DDS 创建 writer 的信息) |
uxrce_dds_client start serial -d /dev/ttyS3 -b 921600 | 手动启动 uXRCE‑DDS 客户端(TELEM3 端口) |
uxrce_dds_client stop | 停止客户端 |
mavlink status | 查看 MAVLink 实例占用的串口 |
mavlink stop-all | 停止所有 MAVLink 实例(释放串口) |
典型调试流程
-
检查
input_rc是否内部发布:listener input_rc若显示
never published,说明 RC 硬件/协议未配置。 -
查看 uXRCE‑DDS 是否成功创建 data writer:
dmesg | grep "input_rc" -
手动启动客户端(若未自动启动):
uxrce_dds_client stop uxrce_dds_client start serial -d /dev/ttyS3 -b 921600
5. 机载电脑连接 uXRCE‑DDS Agent
5.1 安装 Micro‑XRCE‑Agent
sudo apt install ros-<ros2-distro>-micro-xrce-dds-agent
# 例如 Humble: ros-humble-micro-xrce-dds-agent
5.2 启动 Agent(串口方式)
假设飞控 TELEM3 通过 USB‑TTL 转接板连接到机载电脑的 /dev/ttyUSB0:
sudo -E MicroXRCEAgent serial --dev /dev/ttyUSB0 -b 921600 -d 166
参数说明:
serial– 串口传输--dev /dev/ttyUSB0– 实际设备节点(可用ls /dev/ttyUSB*确认)-b 921600– 波特率,必须与飞控端一致-d 166– DDS 域 ID(应与飞控参数UXRCE_DDS_DOM_ID相同,默认 0 或 166)
使用
sudo -E保留当前用户环境变量(如 ROS_DOMAIN_ID)。
5.3 验证连接
Agent 启动后应显示 [info] [client] ... 日志,并在飞控 NSH 中看到 connected 信息。
6. QGC 中配置 uXRCE‑DDS 相关参数
虽然 uXRCE‑DDS 客户端通常由启动脚本自动运行,但可通过 QGC 修改关键参数:
- 连接飞控,进入 参数 页面。
- 搜索以下参数并修改:
| 参数 | 作用 | 推荐值 |
|---|---|---|
UXRCE_DDS_CFG | 通信接口(101=TELEM1, 102=TELEM2, 103=TELEM3) | 103(对应 /dev/ttyS3) |
SER_TEL3_BAUD | TELEM3 波特率 | 921600 |
UXRCE_DDS_DOM_ID | DDS 域 ID | 166(与 Agent 的 -d 一致) |
UXRCE_DDS_NS | ROS 2 命名空间 | 留空或 / |
- 修改后点击 保存,飞控重启后生效。
7. 解决常见问题
7.1 ros2 topic echo 无数据,但 topic info 显示有发布者
- 原因:QoS 不匹配或消息定义版本不一致。
- 解决:
并确保ros2 topic echo --qos-reliability best_effort /fmu/out/input_rcpx4_msgs版本与飞控固件匹配:cd ~/workspace/ws_sim/src/px4_msgs git checkout release/1.17 # 或 v1.17.0 cd ~/workspace/ws_sim colcon build --packages-select px4_msgs source install/setup.bash
7.2 飞控报 ERROR [uxrce_dds_client] Missing device
- 原因:未正确设置
UXRCE_DDS_CFG或串口被占用。 - 解决:
param set UXRCE_DDS_CFG 103 # TELEM3 param save mavlink stop-all # 释放串口 uxrce_dds_client start serial -d /dev/ttyS3 -b 921600
7.3 listener input_rc 显示 never published
- 原因:RC 接收机未连接或协议参数错误。
- 解决:
param set RC_INPUT_PROTO 2 # SBUS 协议 param save reboot
7.4 ros2 topic hz 报 Change payload size ... larger than history payload size
- 原因:
px4_msgs消息定义与飞控固件不匹配。 - 解决:按 7.1 节同步
px4_msgs版本。
8. 附录:完整工作流示例
-
编译 Bootloader(首次或更新 Bootloader 时):
make micoair_h743_bootloader sudo dfu-util -d 0483:df11 -a 0 -s 0x08000000:leave -D build/micoair_h743_bootloader/micoair_h743_bootloader.bin -
修改话题列表:
编辑src/modules/uxrce_dds_client/dds_topics.yaml,添加input_rc。 -
编译主固件:
make micoair_h743_default -
烧录主固件(通过 QGC)。
-
配置飞控参数(QGC 或 NSH):
param set UXRCE_DDS_CFG 103 param set SER_TEL3_BAUD 921600 param set UXRCE_DDS_DOM_ID 166 param save reboot -
启动 Agent(机载电脑):
sudo -E MicroXRCEAgent serial --dev /dev/ttyUSB0 -b 921600 -d 166 -
验证:
ros2 topic list | grep input_rc ros2 topic echo --qos-reliability best_effort /fmu/out/input_rc
文档版本:基于 PX4 v1.16.0 及 MicoAir H743 硬件编写,不同飞控或 PX4 版本可能需要调整串口设备及参数。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐




所有评论(0)