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)

  1. 安装 dfu‑util(Ubuntu):

    sudo apt install dfu-util
    
  2. 使飞控进入 DFU 模式:
    按住飞控上的 BOOT 按钮,同时插入 USB 线,保持 2 秒后松开。

  3. 确认设备:

    dfu-util -l
    

    应显示类似 Found DFU: [0483:df11] 的信息。

  4. 烧录 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。

  5. 验证:烧录完成后拔掉 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(推荐)
  1. 打开 QGC → 应用设置 → 固件。
  2. 用 USB 连接飞控(不要按 BOOT),QGC 会自动检测。
  3. 点击 “自定义固件文件…”,选择编译好的 .px4 文件。
  4. 点击 “烧录”,等待完成。
方法二: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 实例(释放串口)

典型调试流程

  1. 检查 input_rc 是否内部发布:

    listener input_rc
    

    若显示 never published,说明 RC 硬件/协议未配置。

  2. 查看 uXRCE‑DDS 是否成功创建 data writer:

    dmesg | grep "input_rc"
    
  3. 手动启动客户端(若未自动启动):

    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 修改关键参数:

  1. 连接飞控,进入 参数 页面。
  2. 搜索以下参数并修改:
参数作用推荐值
UXRCE_DDS_CFG通信接口(101=TELEM1, 102=TELEM2, 103=TELEM3)103(对应 /dev/ttyS3)
SER_TEL3_BAUDTELEM3 波特率921600
UXRCE_DDS_DOM_IDDDS 域 ID166(与 Agent 的 -d 一致)
UXRCE_DDS_NSROS 2 命名空间留空或 /
  1. 修改后点击 保存,飞控重启后生效。

7. 解决常见问题

7.1 ros2 topic echo 无数据,但 topic info 显示有发布者

  • 原因:QoS 不匹配或消息定义版本不一致。
  • 解决:
    ros2 topic echo --qos-reliability best_effort /fmu/out/input_rc
    
    并确保 px4_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. 附录:完整工作流示例

  1. 编译 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
    
  2. 修改话题列表:
    编辑 src/modules/uxrce_dds_client/dds_topics.yaml,添加 input_rc。

  3. 编译主固件:

    make micoair_h743_default
    
  4. 烧录主固件(通过 QGC)。

  5. 配置飞控参数(QGC 或 NSH):

    param set UXRCE_DDS_CFG 103
    param set SER_TEL3_BAUD 921600
    param set UXRCE_DDS_DOM_ID 166
    param save
    reboot
    
  6. 启动 Agent(机载电脑):

    sudo -E MicroXRCEAgent serial --dev /dev/ttyUSB0 -b 921600 -d 166
    
  7. 验证:

    ros2 topic list | grep input_rc
    ros2 topic echo --qos-reliability best_effort /fmu/out/input_rc
    

文档版本:基于 PX4 v1.16.0 及 MicoAir H743 硬件编写,不同飞控或 PX4 版本可能需要调整串口设备及参数。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐