包裹投递任务
PX4 v1.14包裹投递任务是航点任务的拓展,用户可以计划将包裹作为航点进行投递。
本节解释了包裹投递功能的架构。 其目的是为从事架构扩展工作的开发者提供支持,例如支持新的有效载荷投递机制。
INFO
目前仅夹具可用于包裹投递。 绞盘暂不支持。
包裹投递架构图
包裹投递功能围绕着 VehicleCommand 与 VehicleCommandAck 消息展开。
核心思路是有一个实体来处理 DO_GRIPPER
或 DO_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_GRIPPER
或 DO_WINCH
)是否成功。
任务
夹具/绞盘指令被设置为一个 “任务项”。 这是可行的,因为所有任务项都有要执行的 MAV_CMD
(例如着陆、起飞、航点等),可以将其设置为 DO_GRIPPER
或 DO_WINCH
。
在任务逻辑(上图绿色框)中,如果到达夹具/绞盘任务项,对于旋翼飞行器(例如多旋翼飞行器),它会实现 brake_for_hold
功能(将下一个任务项航点的 valid
标志设置为 false
),以便飞行器在执行部署时保持其位置。
固定翼飞机和其他飞行器不考虑特殊制动条件。 所以如果你有一个固定翼的悬停任务,飞机在悬停的同时投递包裹,飞机不会停止(因为这是不可能的)。
任务块
MissionBlock
是 Mission
的父类,负责处理 “任务是否完成?” 这一部分。
这一切都在 is_mission_item_reached_or_completed
函数中执行,以处理时间延迟/任务项推进。
它还实现了实际的 issue_command
函数,该函数将发出与任务项的 MAV_CMD
相对应的车辆指令,然后该指令将被外部有效载荷或内部的 payload_deliverer
模块接收。
有效载荷投递器
这是一个专门处理夹具/绞盘支持的模块,用于标准的包裹投递任务规划。
payload_deliverer
模块的设置包含在实际包裹释放机制设置文档中,如 夹具。