☰
PX4 与 DroneCAN 电永磁抓取器(Zubax FluxGrip FG40 / EPM)的接入与配置指南
2026/10/3 2:03:37 网站建设 项目流程
  • 嵌入式
  • 物联网
  • 机器人
  • 自动驾驶
  • 智能硬件

【免费下载链接】PX4-Autopilot

PX4 Autopilot Software

项目地址:https://gitcode.com/gh_mirrors/px/PX4-Autopilot
点击查看免费下载

导读

本文以 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

底层模块与命令流转(源码解读)

理解命令如何在固件内部流转,有助于后续排障。从源码结构看,抓取器命令的流转分为两层:

  1. payload_deliverer模块(src/modules/payload_deliverer/payload_deliverer.cpp)接收外部MAV_CMD_DO_GRIPPER车辆命令,校验后通过内部 uORB 发布gripper_s抓取器命令;
  2. 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 官方硬件文档。 :::

接线步骤如下:

  1. 将 FluxGrip 连接到飞控的CAN1端口;
  2. 将 FluxGrip 连接到其专用电源;
  3. 按 CAN 布线规范 检查 CAN 总线接线与终端电阻(termination);
  4. 为飞控与 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 无响应,按以下顺序排查:

  1. 运行uavcan status,确认 DroneCAN 驱动正在运行且 FluxGrip 在总线上可见;
  2. 检查UAVCAN_ENABLE与UAVCAN_BITRATE是否按上文设置;
  3. 检查 CAN 接线、总线终端电阻以及 EPM 电源;
  4. 运行payload_deliverer status,确认抓取器有效(输出中Gripper valid: True);
  5. 若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

项目地址:https://gitcode.com/gh_mirrors/px/PX4-Autopilot
点击查看免费下载

相关推荐

上一篇:从PHP超全局变量创建ServerRequest:Nyholm/psr7-server使用教程
下一篇:AI Comic Factory高级技巧:优化LLM提示词提升漫画生成质量

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询