资讯详情

ArduPilot AP_Periph DroneCAN 外设固件开发指南:从 hwdef.dat 到构建、烧录与仿真验证

📅 2026/9/14 20:20:57 | 华诺云谱 👁 阅读
ArduPilot AP_Periph DroneCAN 外设固件开发指南:从 hwdef.dat 到构建、烧录与仿真验证
ArduPilot AP_Periph DroneCAN 外设固件开发指南从 hwdef.dat 到构建、烧录与仿真验证【免费下载链接】ardupilotArduPlane, ArduCopter, ArduRover, ArduSub source项目地址: https://gitcode.com/GitHub_Trending/ar/ardupilotAP_Periph 是 ArduPilot 仓库中一套基于 DroneCAN 协议的外设固件方案Tools/AP_Periph/README.md它复用 ArduPilot 丰富的传感器驱动让开发者只需编写一个简单的 hwdef.dat 即可把 STM32 芯片变成 GPS/RTK、罗盘、气压计、测距仪、电调等 DroneCAN 外设。本文将以官方 README 为主线结合仓库源码深入讲解 AP_Periph 的架构、支持的硬件与功能、构建烧录流程、bootloader 更新机制以及 SITL 仿真测试方法帮助你从零上手开发自己的 DroneCAN 外设固件。AP_Periph 是什么AP_Periph 是一套基于 ArduPilot 的 DroneCAN即 UAVCAN v0外设固件。它的核心设计思想是不重复造轮子——直接复用 ArduPilot 中为飞控开发的大量传感器驱动GPS、罗盘、气压计、空速、测距、ADSB、电调遥测等把它们封装成一个运行在独立 STM32 节点上的 DroneCAN 从设备固件。与 ArduCopter、ArduPlane 等载具固件不同AP_Periph 不执行飞行控制逻辑而是通过 CAN 总线与主飞控通信把本地传感器数据以 DroneCAN 消息形式广播到总线上或接收飞控下发的遥控输出RCOutput、灯光、蜂鸣器等命令。从源码结构看AP_Periph 的主类AP_Periph_FW定义于 Tools/AP_Periph/AP_Periph.h同时持有AP_GPS、Compass、AP_Baro、AP_Airspeed、RangeFinder、AP_BattMonitor、AP_Proximity、AP_EFI等完整的 ArduPilot 传感器库实例这正是它能快速支持多种外设类型的根本原因。AP_Periph 的入口实现Tools/AP_Periph/AP_Periph.cpp展示了其运行模型setup()调用periph.init()完成参数加载、CAN 启动、各传感器初始化、串口管理、看门狗初始化等loop()周期调用periph.update()以 1Hz 发送心跳与系统状态、10Hz 读取电池、50Hz 更新通知与 GCS、并持续调用can_update()处理 CAN 收发。void setup(void) { periph.init(); } void loop(void) { periph.update(); }值得一提的健壮性设计是init()中始终启用硬件看门狗stm32_watchdog_init()与周期性的stm32_watchdog_pat()并在编译期强制要求AP_CHECK_FIRMWARE_ENABLED开启否则直接#error。源码注释明确指出这不仅是功能依赖更是一套刷错固件也能可靠恢复的防护机制。基于 hwdef.dat 的硬件适配机制AP_Periph 复用了 ArduPilot 的 ChibiOS hwdef.dat 系统——这也是 ArduPilot 为 STM32 飞控定义引脚的核心工具。这意味着支持一个新的基于 STM32 的 DroneCAN 外设只需要编写一个定义设备引脚的简单 hwdef.dat 文件。hwdef 文件位于仓库的 libraries/AP_HAL_ChibiOS/hwdef 目录下每个板卡一个子目录。构建系统会自动识别 AP_Periph 板卡根据 Tools/ardupilotwaf/boards.py 中的get_ap_periph_boards()逻辑板卡名包含 periph 关键字或 hwdef.dat 中带有 periph 标记的板卡都会被纳入 AP_Periph 构建目标。支持的 MCU 系列仓库中已提供超过 60 个 AP_Periph 构建目标覆盖 ArduPilot 支持的全部主流 STM32 系列MCU 系列典型外设应用STM32F1xx低成本 GPS 模块、CAN 节点STM32F3xx测距、传感器节点STM32F4xx主流 GPS/RTK、罗盘、电调节点STM32F7xx高性能外设STM32H7xx高速 CAN-FD、多传感器复合节点STM32L4xx低功耗外设STM32G4xx电机驱动、遥测节点更多 MCU 可通过 hwdef.dat 系统扩展hwdef.dat 示例可查看 libraries/AP_HAL_ChibiOS/hwdef/ARK_GPS/hwdef.dat、libraries/AP_HAL_ChibiOS/hwdef/ARK_CANNODE/hwdef.dat 等成熟产品级配置。支持的传感器与功能特性传感器类型AP_Periph 可配置支持以下 DroneCAN 传感器类型GPS 模块含 RTK GPS支持移动基线 Moving Baseline 数据转发磁罗盘SPI 或 I2C气压计SPI 或 I2C空速传感器I2C测距仪UART 或 I2C支持多实例ADSBuAvionix 兼容的 Ping ADSB 接收机接 UART电池监测Analog、I2C/SMBus、UARTLEDGPIO、I2C 或 WS2812 串行安全 LED 与安全开关蜂鸣器tonealarm 或简单 GPIORC 输出全部标准 RCOutput 协议含 DShot 等RC 输入电池平衡监测Tools/AP_Periph/batt_balance.cppEFI 发动机libraries/AP_EFI/AP_EFI.cpp近距离传感器 Proximitylibraries/AP_Proximity/AP_Proximity.cpp此外从 Tools/AP_Periph/Parameters.cpp 的参数表还可以看到更多可选能力温度传感器TEMP_MSG_RATE、RPM 转速传感器RPM_MSG_RATE、MSP 串口透传MSP_PORT、IMU 输出INS_SAMPLE_RATE、电调遥测ESC_TELEM_RATE、舵机遥测SRV_TLM_MSG_RATE、NMEA 输出、继电器RELAY、以及通过 Lua 脚本扩展的通知/灯光控制SCR_参数组。是否启用取决于 hwdef.dat 中的宏定义构建系统会根据 hwdef 裁剪库见 Tools/AP_Periph/wscript 中的AP_PERIPH_HEAVY分支。DroneCAN 协议特性AP_Periph 固件具备完整的 DroneCAN 节点能力动态或静态 CAN 节点分配CAN_NODE参数设为 0 时向 DNA 服务器请求动态节点 ID设为非 0 值则固定使用该 ID范围 0~127固件上传支持通过 CAN 总线在线升级固件自动生成的 bootloader每个板卡构建时自动生成配套 bootloader参数存储在 Flash通过 StorageManager 持久化参数便捷的 bootloader 更新用户可直接在飞控端触发高韧性设计看门狗、CRC 校验与板级检查固件与参数更新外设挂载在飞控上时可通过 MissionPlanner 或 DroneCAN GUI 工具完成USB 固件更新若硬件提供 USB 口可独立通过 USB 更新固件SLCAN 参数更新若提供 USB外设独立使用时可通过 SLCAN DroneCAN GUI 更新参数从 Tools/AP_Periph/AP_Periph.h 的消息处理函数列表可以看出协议实现的完整性handle_get_node_info节点信息、handle_param_getset/handle_param_executeopcode参数读写与操作码执行、handle_begin_firmware_update固件更新启动、handle_allocation_response动态节点 ID 分配、handle_safety_state安全状态、handle_RTCMStreamRTK 差分数据、handle_esc_rawcommand电调原始命令、handle_act_command舵机命令、handle_beep_command蜂鸣、handle_lightscommand灯光等。编译 AP_Periph 固件以官方示例板卡 f103-GPS 为例注意f103-GPS 对应的 hwdef 需在 libraries/AP_HAL_ChibiOS/hwdef 中确认你的板卡目录是否存在若为自研板卡请先按 hwdef.dat 规范编写配置文件# 1. 配置构建环境指定目标板卡 ./waf configure --board f103-GPS # 2. 编译 AP_Periph 固件 ./waf AP_Periph构建产物位于build/f103-GPS/bin/AP_Periph.bin。之后可通过CAN bootloader配合dronecan_gui_tool或MissionPlanner 的 DroneCAN 支持将其加载到设备中。构建系统会在 configure 阶段自动识别该板卡是否为 AP_Periph 目标Tools/ardupilotwaf/boards.py 的get_ap_periph_boards()并据此裁剪库集合、启用AP_PERIPH相关定义。烧录固件使用 ST-Link 直接烧录ST-Link V2 可直接将固件写入目标地址。官方给出了两个典型示例# f103-GPS应用固件加载地址 0x8006400 st-flash write build/f103-GPS/bin/AP_Periph.bin 0x8006400 # CUAV_GPS应用固件加载地址 0x10000从 0x8010000 写入 st-flash write build/CUAV_GPS/bin/AP_Periph.bin 0x8010000注意写入地址必须与硬件设计中的 bootloader 长度匹配不同板卡偏移不同CUAV_GPS 在 0x10000 偏移处务必先确认目标板卡的固件偏移约定避免覆盖 bootloader 区域。烧录 bootloaderbootloader 需要烧录到 Flash 起始地址 0x8000000st-flash write Tools/bootloaders/f103-GPS_bl.bin 0x8000000预编译的 bootloader 文件存放在仓库的 Tools/bootloaders 目录板卡名_bl.bin。构建 bootloader若需要自行编译 bootloader可使用仓库提供的自动化脚本Tools/scripts/build_bootloaders.py f103-GPS脚本源码位于 Tools/scripts/build_bootloaders.py构建生成的 bootloader 会输出到Tools/bootloaders目录命名形如板卡名_bl.bin。bootloader 本身也是由同一套 hwdef 系统生成的构建逻辑可参考 Tools/ardupilotwaf/chibios.py 中关于BOOTLOADER与HAL_NUM_CAN_IFACES的配置处理。固件分发与参数修改AP_Periph 固件目标由 ArduPilot 官方 CI 自动构建并发布到 ArduPilot 固件服务器。普通用户获取固件后通过MissionPlanner或DroneCAN GUI Tool加载固件外设参数可通过MissionPlanner 的 DroneCAN 支持或DroneCAN GUI 工具在线修改。核心参数速查以下参数在 Tools/AP_Periph/Parameters.cpp 中定义均带有完整的参数元数据范围、单位、默认值参数说明默认值备注CAN_NODE本节点在所有网络上的 DroneCAN 节点 ID0 表示向 DNA 服务器动态申请板卡默认范围 0~127重启生效CAN_BAUDRATECAN 接口比特率1000000范围 10000~1000000重启生效CAN_PROTOCOL端口使用的协议0:禁用1:UAVCAN/DroneCAN4:PiccoloCAN 等DroneCAN至少一个 CAN 口必须为 DroneCANCAN_FDMODE/CAN_FDBAUDRATECAN-FD 模式与数据段比特率1M/2M/4M/5M/8M0 / 由硬件决定需 MCU 支持 CAN-FDFLASH_BOOTLOADER触发 bootloader 更新危险操作0见下文用户 bootloader 更新DEBUG调试位掩码0:显示空闲栈1:15 秒后自动重启2:发送统计0—BRD_SERIAL_NUM设备序列号非 0 时会显示在 CAN App Name 中0—GPS_PORTGPS 串口编号该口协议会被设为 GPS3重启生效RNGFND_BAUDRATE/RNGFND_PORT测距仪串口波特率/端口115200 / 3支持多实例RNGFND2_*RNGFND_MAX_RATE测距数据最大发送速率Hz0 表示不限50范围 0~200ADSB_BAUDRATE/ADSB_PORTADSB 串口波特率/端口57600 / 1—ESC_RATE/ESC_PWM_TYPE电调输出速率 / PWM 类型1 正常、2 OneShot、3 OneShot125、4 Brushed、5~8 DShot400Hz / 0—ESC_CMD_TIMO电调命令超时ms超时后输出归零0 表示不归零200应大于两帧 CAN 命令间隔SRV_CMD_TIME_OUT舵机命令超时ms200同上BARO_ENABLE气压计使能1—LOG_BITMASK日志位掩码bit1 为 GPS4—OPTIONS外设选项位掩码bit0持续探测传感器板卡决定—传感器驱动参数如GPS_*、COMPASS_*、BARO_*、ARSPD_*、RNGFND_*、BATT_*、PRX_*、EFI_*、TEMP_*、RPM_*、INS_*均复用对应 ArduPilot 库的参数体系可通过串口/DroneCAN 完整配置。用户 bootloader 更新机制AP_Periph 的一个实用特性是bootloader 已内置在固件的 ROMFS 中终端用户无需 ST-Link 即可升级 bootloader。操作步骤通过 DroneCAN 将外设参数FLASH_BOOTLOADER设为1节点会执行 bootloader 更新——将内嵌的 bootloader 复制覆盖现有 bootloader耗时数秒更新结果会以debug 文本消息回传可在 DroneCAN GUI 工具中查看。该参数的完整描述可见 Tools/AP_Periph/Parameters.cpp 中的FLASH_BOOTLOADER定义其注释明确警告DANGER! 启用后 App 将用内嵌 bootloader 覆盖现有 bootloader……只有在明确知道自己在做什么时才应执行。与 bootloader 更新配套的还有 Tools/AP_Bootloader 目录下的 bootloader 源码含 CAN 固件上传协议bl_protocol.cpp、从 SD 卡刷写flash_from_sd.cpp、网络刷写network.cpp等以及 Tools/AP_Periph/AP_Periph.cpp 中的prepare_reboot()/reboot(bool hold_in_bootloader)实现——重启前会强制打开安全开关force_safety_on()、冲刷未写入的参数AP_Param::flush()并短暂延迟以让 ACK 发出确保升级过程安全可靠。SITL 仿真测试AP_Periph 在 SITL软件在环仿真系统中支持大量 DroneCAN 外设无需真实硬件即可验证固件行为。最简单的方式是使用sim_vehicle.py启动带 DroneCAN 总线的仿真载具# 仿真垂直起降固定翼quadplane挂载 DroneCAN 外设 sim_vehicle.py -f quadplane-can # 仿真四旋翼挂载 DroneCAN 外设 sim_vehicle.py -f quad-canSITL 支持通过HAL_BOARD_SITL构建 AP_PeriphTools/AP_Periph/AP_Periph.cpp 中为 SITL 提供了看门狗的桩实现仿真时每个外设作为独立 CAN 节点接入仿真总线可用于验证节点分配、传感器消息流、电调命令与遥测等完整链路。仿真的测试用例可参考 Tools/autotest 下的自动化测试体系。开发新外设的推荐路径结合 README 与源码为自研 STM32 外设开发 AP_Periph 固件的完整流程是编写 hwdef.dat在 libraries/AP_HAL_ChibiOS/hwdef 下新建板卡目录定义 MCU、CAN 外设引脚、传感器接口SPI/I2C/UART、LED/蜂鸣器 GPIO 等参考现有产品级配置如 libraries/AP_HAL_ChibiOS/hwdef/ARK_GPS/hwdef.dat配置构建./waf configure --board 你的板卡名确认构建系统识别为 AP_Periph 目标编译固件./waf AP_Periph得到build/板卡/bin/AP_Periph.bin编译 bootloaderTools/scripts/build_bootloaders.py 板卡名输出到 Tools/bootloaders烧录先用 ST-Link 烧 bootloader 到 0x8000000再按板卡偏移烧应用固件调参验证通过 SITL 仿真或接上飞控用 MissionPlanner / DroneCAN GUI 修改参数、观察节点消息、验证传感器数据与遥控输出发布配置 CI 自动构建固件即可通过 DroneCAN 在线更新通道分发。总结AP_Periph 将 ArduPilot 的传感器驱动资产与 DroneCAN 生态有机结合是快速构建 UAVCAN 外设的高效方案。其核心价值在于复用 hwdef.dat 硬件抽象与完整传感器库一套源码即可支持从 F1 到 H7 的数十种 MCU、数十种外设形态并内置看门狗、CRC 校验、Flash 参数存储、自动 bootloader 生成与在线更新等高韧性机制。无论是 GPS/RTK 模块、CAN 电调、测距传感器还是复合传感器节点遵循 README 与源码中的构建、烧录与仿真流程都能在很短时间内完成从硬件定义到可用固件的闭环。【免费下载链接】ardupilotArduPlane, ArduCopter, ArduRover, ArduSub source项目地址: https://gitcode.com/GitHub_Trending/ar/ardupilot创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。