Skip to content

包裹投递任务

PX4 v1.14

包裹投递任务是航点任务的拓展,用户可以计划将包裹作为航点进行投递。

本节解释了包裹投递功能的架构。 其目的是为从事架构扩展工作的开发者提供支持,例如支持新的有效载荷投递机制。

INFO

目前仅夹具可用于包裹投递。 绞盘暂不支持。

INFO

关于如何规划包裹递送任务的详细文档可在此处找到 herepayload_deliverer 模块的设置在递送机制的文档中有介绍,例如 夹具

包裹投递架构图

包裹投递架构概述

包裹投递功能围绕着 VehicleCommandVehicleCommandAck 消息展开。

核心思路是有一个实体来处理 DO_GRIPPERDO_WINCH 车辆指令,执行该指令,并在确认成功投递后发回确认信息。

由于PX4会自动将 VehicleCommand uORB消息作为COMMAND_LONG消息广播到配置为以MAVLink进行通信的UART端口,外部有效载荷可以接收并执行该指令。

同样,由于PX4会自动将通过为MAVLink配置的UART端口从外部源传入的COMMAND_ACK消息转换为vehicle_command_ack uORB消息,PX4的navigator模块可以接收外部有效载荷对成功包裹部署的确认。

以下解释了包裹投递架构中涉及的每个实体。

导航器

导航器负责处理接收车辆指令确认(如下文所述)。 在收到成功部署的确认消息后,它会在任务块级别设置标志,以表明有效载荷部署已成功。

这使得任务能够安全地继续执行下一个项目(例如航点),因为我们确信部署已成功得到确认。

车辆指令确认

我们等待来自内部(通过payload_deliverer模块)或外部(外部实体发送MAVLink消息COMMAND_ACK)的确认,以确定包裹投递动作(DO_GRIPPERDO_WINCH)是否成功。

任务

夹具/绞盘指令被设置为一个 “任务项”。 这是可行的,因为所有任务项都有要执行的 MAV_CMD(例如着陆、起飞、航点等),可以将其设置为 DO_GRIPPERDO_WINCH

在任务逻辑(上图绿色框)中,如果到达夹具/绞盘任务项,对于旋翼飞行器(例如多旋翼飞行器),它会实现 brake_for_hold 功能(将下一个任务项航点的 valid 标志设置为 false),以便飞行器在执行部署时保持其位置。

固定翼飞机和其他飞行器不考虑特殊制动条件。 所以如果你有一个固定翼的悬停任务,飞机在悬停的同时投递包裹,飞机不会停止(因为这是不可能的)。

任务块

MissionBlockMission 的父类,负责处理 “任务是否完成?” 这一部分。

这一切都在 is_mission_item_reached_or_completed 函数中执行,以处理时间延迟/任务项推进。

它还实现了实际的 issue_command 函数,该函数将发出与任务项的 MAV_CMD 相对应的车辆指令,然后该指令将被外部有效载荷或内部的 payload_deliverer 模块接收。

有效载荷投递器

这是一个专门处理夹具/绞盘支持的模块,用于标准的包裹投递任务规划

payload_deliverer 模块的设置包含在实际包裹释放机制设置文档中,如 夹具