- 嵌入式
- 物联网
- 机器人
- 自动驾驶
- 智能硬件
【免费下载链接】PX4-Autopilot
PX4 Autopilot Software
导读
本文以 PX4 v1.18 中新增的 DroneCAN 电永磁抓取器(EPM)支持为主线,完整讲解如何将 Zubax FluxGrip FG40 通过 DroneCAN(CAN 总线)接入 PX4 飞控:从固件配置、硬件接线、QGroundControl 参数设置,到基于 MAVLink Shell 的状态验证与抓取/释放测试,并深入源码级调用链(payload_deliverer模块与uavcan驱动中的 hardpoint 转发逻辑)。读完本文,你将能够在 PX4 上独立完成一套 DroneCAN EPM 抓取器的接线、编译、配置、调试与排障,并理解其底层命令流转机制。
什么是电永磁抓取器(EPM)
电永磁抓取器(Electro-Permanent Magnet,EPM)与传统电磁铁的关键区别在于:它只需一个短暂的电流脉冲即可切换自身的磁化状态(吸合/释放),在持有载荷的整个过程中不持续耗电。这意味着无人机在执行投递任务时,抓取器本身几乎不增加持续功耗负担,电池续航与发热表现都优于持续通电的电磁铁方案。
PX4 通过 Grippers 总览 支持多类抓取器,其中DroneCAN EPM一类即由本文的 FluxGrip 方案覆盖(其余为 PWM 舵机抓取器与 MAVLink 抓取器)。抓取器既可以在投递任务(Payload Delivery Mission)中自动触发,也可以通过 QGroundControl 的摇杆按键或 MAVLink 命令手动操作。
本文所描述的这套配置已在 Holybro Pixhawk 6X Pro 与 FluxGrip 固件
502e1f5上验证通过。产品专属的接口定义、电源要求与运行限制请以 FluxGrip 官方硬件文档为准。
PX4 固件支持与编译
DroneCAN EPM 支持自PX4 v1.18起引入,这是首个通过DroneCAN hardpoint 消息(uavcan.equipment.hardpoint)转发抓取器命令的 PX4 版本。
固件裁剪要求
飞控固件必须同时包含以下两个模块(且板卡本身支持 CAN):
CONFIG_DRIVERS_UAVCAN=y CONFIG_MODULES_PAYLOAD_DELIVERER=y你可以在boards/<vendor>/<board>/目录下的default.px4board文件中检查或添加这两项,也可以使用 PX4 板卡配置工具(menuconfig) 进行图形化配置。例如 Pixhawk 6X 系列板卡的配置位于 boards/px4/fmu-v6x 下,其中对应.px4board文件即存放这些开关。
编译与烧录
配置完成后,参考构建 PX4 与烧录固件的完整流程。对于 FMUv6X 飞控,命令如下(请将px4_fmu-v6x_default替换为你所用飞控的构建目标,例如 boards/px4/fmu-v5 对应的px4_fmu-v5_default):
git submodule update --init --recursive make px4_fmu-v6x_default make px4_fmu-v6x_default upload底层模块与命令流转(源码解读)
理解命令如何在固件内部流转,有助于后续排障。从源码结构看,抓取器命令的流转分为两层:
payload_deliverer模块(src/modules/payload_deliverer/payload_deliverer.cpp)接收外部MAV_CMD_DO_GRIPPER车辆命令,校验后通过内部 uORB 发布gripper_s抓取器命令;uavcan驱动(src/drivers/uavcan/actuators/hardpoint.cpp)订阅车辆命令,当收到VEHICLE_CMD_DO_GRIPPER时,将param1(hardpoint ID)与param2(动作)填入 hardpoint 消息,并按固定周期广播到 CAN 总线:
if (vehicle_command.command == vehicle_command_s::VEHICLE_CMD_DO_GRIPPER) { _cmd.hardpoint_id = vehicle_command.param1; _cmd.command = vehicle_command.param2; _next_publish_time = 0; }FluxGrip 收到该 hardpoint 消息后,执行对应的磁化脉冲切换动作。这条链路也解释了为什么 DroneCAN EPM不需要映射任何飞控执行机构输出——命令完全走 CAN 总线而非 PWM 通道。
硬件接线
::: warning FluxGrip 在切换磁化状态瞬间会短暂拉取较大电流。仅用于测试时,可以临时从飞控电源轨取电,但前提是该电源轨满足 FluxGrip 的电压与电流要求;正常作业时,请为 EPM 使用独立、合适的电源,以降低飞控电源轨的负载并改善切换性能。电压、电流与布线要求请严格遵循 FluxGrip 官方硬件文档。 :::
接线步骤如下:
- 将 FluxGrip 连接到飞控的
CAN1端口; - 将 FluxGrip 连接到其专用电源;
- 按 CAN 布线规范 检查 CAN 总线接线与终端电阻(termination);
- 为飞控与 FluxGrip 上电。
当通信正常时,FluxGrip 左侧的 CAN LED 常亮,其相邻的另一个 CAN LED 呈闪烁状态,即表示设备已在总线上被识别。
PX4 参数配置
在 QGroundControl 中设置以下参数,然后重启飞控:
| 参数 | 值 | 说明 | | ---- | -- | ---- | | UAVCAN_ENABLE |Sensors Automatic Config(2) | 启用 DroneCAN 与动态节点分配;若载具同时使用 DroneCAN ESC,则改为3| | UAVCAN_BITRATE |1000000| 将 CAN 总线波特率设为 1 Mbit/s | | PD_GRIPPER_TYPE |Binary Grab/Release(0) | 启用 EPM 所需的二进制抓取/释放抓取器接口 |
::: info 通过 DroneCAN 控制 EPM 时不需要映射飞控的某个执行机构输出,也不需要任何 DroneCAN 订阅/发布参数(UAVCAN_SUB_*、UAVCAN_PUB_*、CANNODE_SUB_*、CANNODE_PUB_*)。只要启用 DroneCAN,PX4 便会自动发布 hardpoint 命令。 :::
参数底层实现(源码解读)
PD_GRIPPER_TYPE与超时参数定义于 src/modules/payload_deliverer/module.yaml:
PD_GRIPPER_TYPE:枚举型,取值为-1(Undefined,未定义)或0(Binary Grab/Release,二进制抓取/释放),默认值0。在 payload_deliverer.cpp 的configure_gripper()中,该参数被转换为GripperConfig::GripperType::GRAB_RELEASE,并据此初始化抓取器实例;PD_GRIPPER_TO:抓取器动作确认超时(单位秒,默认1)。当抓取器没有反馈传感器时,模块在等待该时间后即认为动作成功并发布VehicleCommandAck。建议在 Grippers 总览 的“Gripper Actuation Timeout”一节指导下,实测抓取器开合耗时后设置。
状态机与超时判定(源码解读)
在 src/modules/payload_deliverer/gripper.cpp 中,抓取器维护IDLE / GRABBING / GRABBED / RELEASING / RELEASED五态状态机。由于当前版本尚不支持反馈传感器(GripperSensorType::NONE),状态迁移完全依赖超时:命令发出后,若在PD_GRIPPER_TO时间内未收到反馈(实际即超时到点),即认为抓取/释放成功,并置位一次性读取标志grabbed_read_once()/released_read_once(),由 payload_deliverer.cpp 发出VEHICLE_CMD_RESULT_ACCEPTED应答。这也解释了为什么投递任务中需要合理设置超时——它决定了任务流程能否按预期继续。
测试抓取器
::: warning 测试前请拆除螺旋桨并固定载具。投递模块(payload deliverer)启动时会将抓取器命令为 grab(抓取)状态,因此 EPM 在启动阶段就会磁化吸合——务必确保现场安全。 :::
在 QGroundControl 中打开 MAVLink Shell,先验证 DroneCAN 驱动与投递模块正在运行:
uavcan status payload_deliverer status然后分别测试两种抓取器状态:
# 释放载荷(消磁,磁铁关闭) payload_deliverer gripper_open # 抓取载荷(励磁,磁铁打开) payload_deliverer gripper_close命令语义与应答机制(源码解读)
从 payload_deliverer.cpp 可以看到,gripper_open/gripper_close分别发布GRIPPER_ACTION_RELEASE与GRIPPER_ACTION_GRAB的MAV_CMD_DO_GRIPPER车辆命令,对应 hardpoint ID0:释放命令动作为0,抓取命令动作为1。
同时该模块对每条命令执行严格的应答管理(handle_vehicle_command):
- 若当前正在执行与前一条冲突的动作,新命令会使旧命令被标记为
CANCELLED; - 若收到相同动作的命令,则临时拒绝(
TEMPORARILY_REJECTED); - 动作执行中回
IN_PROGRESS(附带result_param1 = UINT8_MAX表示进度),完成后回ACCEPTED; - 非法动作则回
DENIED。
这套机制保证了任务投递流程(如投递任务)能获得明确的抓取/释放完成确认。测试通过后,EPM 即可通过 Grippers 总览 中描述的任何方式操作(任务自动触发、摇杆按键、MAVLink 命令)。
LED 状态指示
FluxGrip 上位于 CAN LED 右侧的Magnet LED(磁铁指示灯)用于指示 EPM 状态:
| 状态 | 含义 |
|---|---|
| Detect/Unknown(检测/未知) | FluxGrip 上电后的初始状态 |
| On(点亮) | EPM 已磁化,正在持有载荷 |
| Off(熄灭) | EPM 已消磁,载荷已释放 |
| Fade-in(渐亮) | FluxGrip 正在切换到磁化状态 |
| Fade-out(渐暗) | FluxGrip 正在切换到消磁状态 |
若 Magnet LED快速闪烁,说明 FluxGrip 磁化失败。请检查电源与接线;若问题持续存在,请联系 Zubax 官方支持。
故障排查
若 FluxGrip 无响应,按以下顺序排查:
- 运行
uavcan status,确认 DroneCAN 驱动正在运行且 FluxGrip 在总线上可见; - 检查
UAVCAN_ENABLE与UAVCAN_BITRATE是否按上文设置; - 检查 CAN 接线、总线终端电阻以及 EPM 电源;
- 运行
payload_deliverer status,确认抓取器有效(输出中Gripper valid: True); - 若
payload_deliverer不可用,说明固件未包含投递模块,请重新编译并启用CONFIG_MODULES_PAYLOAD_DELIVERER=y。
延伸阅读
- Grippers(抓取器总览):抓取器类型、摇杆配置、
PD_GRIPPER_TO与MIS_COMMAND_TOUT的设置方法 - DroneCAN:DroneCAN 协议、动态节点分配与 CAN 布线
- 投递任务(Package Delivery Mission):在任务中自动触发抓取与释放
- MAVLink Shell:使用飞行控制台执行上述测试命令
- 相关源码:src/modules/payload_deliverer、src/drivers/uavcan/actuators/hardpoint.cpp、src/modules/payload_deliverer/module.yaml
- 嵌入式
- 物联网
- 机器人
- 自动驾驶
- 智能硬件
【免费下载链接】PX4-Autopilot
PX4 Autopilot Software
相关推荐
PX4 集成 Zubax Telega 电调指南:无感 FOC 电调在 DroneCAN 总线上的接线、配置与调试
PX4 集成 Zubax Telega 电调指南:无感 FOC 电调在 DroneCAN 总线上的接线、配置与调试 Zubax Telega 是 Zubax R
嵌入式物联网机器人自动驾驶智能硬件PX4 DroneCAN ESC 配置与使用指南:电调接入、总线分配与可逆电机实战
PX4 DroneCAN ESC 配置与使用指南:电调接入、总线分配与可逆电机实战 PX4 Autopilot 原生支持 DroneCAN(原 UAVCAN v
嵌入式物联网机器人自动驾驶智能硬件PX4 通过 DroneCAN 接入 VESC 电调:从接线到飞控配置的完整指南
PX4 通过 DroneCAN 接入 VESC 电调:从接线到飞控配置的完整指南 本文以 PX4 官方文档《VESC ESCs DroneCAN 》为核心,系统
嵌入式物联网机器人自动驾驶智能硬件
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考