Offboard 模式
飞行器根据飞行控制栈外部(如机载计算机)提供的设定值控制位置、速度、加速度、姿态以及推力/力矩。 可以使用 MAVLink 提供设定点 (或者 MAVLink API,例如 MAVSDK) or by ROS 2.
PX4 要求外部控制器通过传输任何支持的 MAVLink 设定点消息或 ROS 2 提供连续的 2Hz“生命证明”信号OffboardControlMode message. PX4只有在收到该种信号超过1秒后才有效,如果该种信号停止飞行控制栈将重新获得控制权(脱离Offboard模式)。
INFO
- 此模式需要位置或位/姿信息 - 例如 GPS、光流、视觉惯性里程计、mocap 等。
- 除改变模式外,遥控功能无法使用(您也可以通过设置参数,在没有任何手动控制器的情况下飞行) COM_RC_IN_MODE to 4: Stick input disabled).
- 飞行器必须已经接收 MAVLink 设定点消息流或 ROS 2 OffboardControlMode 在飞行过程中,进入机外模式或切换到机外模式之前会发送消息。
- 如果 MAVLink 设定点消息或
OffboardControlMode
接收频率未达到 > 2Hz。 - 并非所有 MAVLink 支持的坐标系和字段值都被设定值消息和飞行器支持。 仔细阅读以下部分以确保仅使用支持的值。
描述
Offboard模式通过设置位置、速度、加速、姿态、姿态角速率或力/扭矩设定值来控制飞行器的位置和姿态。
PX4 必须接收 MAVLink 设定点消息流或 ROS 2 OffboardControlMode 以 2 Hz 的频率证明外部控制器是健康的。 该消息必须持续发送1秒以上PX4才能在Offboard模式下解锁或在飞行中切换至Offboard模式。 如果在外部控制下速率降至 2Hz 以下,PX4 将在超时后退出板外模式 (COM_OF_LOSS_T), 并尝试着陆或者执行其他一些故障安全措施。 该操作取决于 RC 控制是否可用,并在参数中定义 COM_OBL_RC_ACT.
当使用 MAVLink 时,设定值消息既传达了外部控制器"正常运行"的信号也传达了设定值本身。 Offboard模式下要保持位置,飞行器必须接收到一个包含当前位置设定值的消息指令。
使用 ROS 2 时,外部源是否存活的证明由以下流提供: OffboardControlMode 消息,而实际的设定点是通过发布到其中一个设定点 uORB 主题来提供的,例如 TrajectorySetpoint. 在这种情况下,为了保持位置,车辆必须接收 OffboardControlMode
但只需要 TrajectorySetpoint
once.
请注意,Offboard模式只支持比较有限的 MAVLink 指令和消息。 其他操作如起飞、降落、返航,最好使用适当的模式来处理。 像上传、下载任务这样的操作可以在任何模式下执行。
ROS 2 消息
以下 ROS 2 消息及其特定字段和字段值在特定的框架下是允许的。 除了提供心跳功能, OffboardControlMode
还有另外两个主要目的:
- 控制 PX4 control architecture 此时必须注入板外设定点,并禁用旁路控制器。
- 确定需要哪种有效估计(位置或速度),以及应该使用哪种设定值消息。
The OffboardControlMode
消息定义如图所示。
# Off-board control mode
uint64 timestamp # time since system start (microseconds)
bool position
bool velocity
bool acceleration
bool attitude
bool body_rate
bool thrust_and_torque
bool direct_actuator
这些字段按优先级排序,以便 position
优先于 velocity
以及后续字段, velocity
优先于 acceleration
, 等等。 第一个非零字段(从上到下) 定义了Offboard模式所需的有效估计以及可用的设定值消息。 例如,如果 acceleration
字段是第一个非零值,那么 PX4 需要一个有效的 velocity estimate
, 并且必须使用指定设定点 TrajectorySetpoint
信息.
期望控制对象 | 位置 | 速度 | 加速度 | 姿态 | 姿态角速率 | 执行器字段 | 直接给电机 | 所需状态估计 | 所需消息 |
---|---|---|---|---|---|---|---|---|---|
位置 (NED) | ✓ | - | - | - | - | - | - | 位置 | TrajectorySetpoint |
速度 (NED) | ✗ | ✓ | - | - | - | - | - | 速度 | TrajectorySetpoint |
加速度(NED) | ✗ | ✗ | ✓ | - | - | - | - | 速度 | TrajectorySetpoint |
姿态(FRD) | ✗ | ✗ | ✗ | ✓ | - | - | - | 无 | VehicleAttitudeSetpoint |
体轴角速率 (FRD) | ✗ | ✗ | ✗ | ✗ | ✓ | - | - | 无 | VehicleRatesSetpoint |
推力和力矩(FRD) | ✗ | ✗ | ✗ | ✗ | ✗ | ✓ | - | 无 | VehicleThrustSetpoint and VehicleTorqueSetpoint |
直接给电机和舵机 | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✓ | 无 | ActuatorMotors and ActuatorServos |
其中✓ 表示该位已设置,✘ 表示该位未设置,而“-”表示该位的值无关紧要。
INFO
在使用 ROS 2 的离线模式之前,请花几分钟了解不同的 frame conventions PX4 和 ROS 2 使用。
旋翼机
px4_msgs::msg::TrajectorySetpoint
支持以下输入组合:
- 位置设定点 (
position
different fromNaN
). Non-NaN
速度和加速度的值被用作内环控制器的前馈项。 - 速度设定点 (
velocity
different fromNaN
andposition
set toNaN
). Non-NaN
加速度值用作内环控制器的前馈项. - Acceleration setpoint (
acceleration
different fromNaN
andposition
andvelocity
set toNaN
)
- 位置设定点 (
所有值都是基于NED(北, 东, 地)坐标系,位置、速度和加速的单位分别为[m], [m/s] 和[m/s^2] 。
px4_msgs::msg::VehicleAttitudeSetpoint
支持以下输入组合:
- quaternion
q_d
+ thrust setpointthrust_body
. Non-NaN
values ofyaw_sp_move_rate
are used as feedforward terms expressed in Earth frame and in [rad/s].
- quaternion
姿态四元数表示无人机机体坐标系FRD(前、右、下) 与NED坐标系之间的旋转。 这个推力是在无人机体轴FRD坐标系下,并归一化为 [-1, 1] 。
px4_msgs::msg::VehicleRatesSetpoint
支持以下输入组合:
roll
,pitch
,yaw
andthrust_body
.
所有值都表示在无人机体轴FRD坐标系下。 角速率(roll, pitch, yaw) 单位为[rad/s] ,thrust_body归一化为 [-1, 1]。
Generic Vehicle
下面的offboard控制模式会绕过所有PX4内部的控制环,应当非常谨慎地使用。
px4_msgs::msg::VehicleThrustSetpoint + px4_msgs::msg::VehicleTorqueSetpoint
- 支持以下输入组合:
xyz
for thrust andxyz
for torque.
- 所有值都在无人机体轴 FRD 坐标系中表示,并且归一化为[-1, 1]。
- 支持以下输入组合:
px4_msgs::msg::ActuatorMotors + px4_msgs::msg::ActuatorServos
- 直接控制电机输出和/或伺服系统(舵机)输出。
- 目前工作水平比当时低
control_allocator
模块。非处于离板模式时,请勿发布这些消息。 - 所有值归一化为[-1, 1]。 对于不支持负值的输出,负数条目映射到
NaN
. NaN
地图已解除武装。
MAVLink 消息
下面的 MAVLink 消息及其特定字段和字段值在特定的帧下是允许的。
直升机/垂直起降
支持以下输入组合:
- 位置设定点 (only
x
,y
,z
) - 速度设定点 (only
vx
,vy
,vz
) - 加速度设定点 (only
afx
,afy
,afz
) - 位置设定点 and 速度设定值(速度设定值用作前馈;它被添加到位置控制器的输出,结果用作速度控制器的输入)。
- 位置设定点 and 速度设定点 and 加速度(速度和加速度设定点用作前馈;速度设定点添加到位置控制器的输出,结果用作速度控制器的输入;加速度设定点添加到速度控制器的输出,结果用于计算推力矢量)。
- 位置设定点 (only
PX4 支持以下内容
coordinate_frame
values (only): MAV_FRAME_LOCAL_NED and MAV_FRAME_BODY_NED.
SET_POSITION_TARGET_GLOBAL_INT
支持以下输入组合:
Position setpoint (only
lat_int
,lon_int
,alt
)Velocity setpoint (only
vx
,vy
,vz
)Thrust setpoint (only
afx
,afy
,afz
)INFO
加速度设定点值被映射以创建标准化的推力设定点(即加速度设定点没有“正确”支持)。
:::
- 位置设定点**和**速度设定点(速度设定点用作前馈;它被添加到位置控制器的输出,结果用作速度控制器的输入)。
PX4 支持以下内容
coordinate_frame
values (only): MAV_FRAME_GLOBAL.- 支持以下输入组合:
- Attitude/orientation (
SET_ATTITUDE_TARGET.q
) with thrust setpoint (SET_ATTITUDE_TARGET.thrust
). - Body rate (
SET_ATTITUDE_TARGET
.body_roll_rate
,.body_pitch_rate
,.body_yaw_rate
) with thrust setpoint (SET_ATTITUDE_TARGET.thrust
).
- Attitude/orientation (
- 支持以下输入组合:
Fixed-wing
支持以下输入组合 (via
type_mask
):Position setpoint (
x
,y
,z
仅;速度和加速度设定点被忽略)。- 指定设定点的_类型_
type_mask
(如果没有设置这些位,车辆将以花朵状图案飞行):INFO
下面的一些_设定点类型_值不是 MAVLink 标准的一部分
type_mask
场地。
- 指定设定点的_类型_
:::
值为:
- 292:滑动设定值。
这会将 TECS 配置为空速优先于高度,以便在没有推力时使无人机滑行(即控制俯仰以调节空速)。
It is equivalent to setting `type_mask` as `POSITION_TARGET_TYPEMASK_Z_IGNORE`, `POSITION_TARGET_TYPEMASK_VZ_IGNORE`, `POSITION_TARGET_TYPEMASK_AZ_IGNORE`.
- 4096:起飞设定值。
- 8192:降落设定值。
- 12288:悬停设定值(以设定值为中心绕圈飞行)。
- 16384:空闲设定值(油门为0, 横滚 / 俯仰为0)。
PX4 支持坐标框架 (
coordinate_frame
field): MAV_FRAME_LOCAL_NED and MAV_FRAME_BODY_NED.SET_POSITION_TARGET_GLOBAL_INT
支持以下输入组合 (via
type_mask
):位置设定点(仅限
lat_int
,lon_int
,alt
)指定设定点的_类型_
type_mask
(如果没有设置这些位,车辆将以花朵状图案飞行):INFO
下面的_设定点类型_值不是 MAVLink 标准的一部分
type_mask
场地。
:::
值为:
- 4096:起飞设定值。
- 8192:降落设定值。
- 12288:悬停设定值(以设定值为中心绕圈飞行)。
- 16384:空闲设定值(油门为0, 横滚 / 俯仰为0)。
PX4 支持以下内容
coordinate_frame
values (only): MAV_FRAME_GLOBAL.- 支持以下输入组合:
- Attitude/orientation (
SET_ATTITUDE_TARGET.q
) with thrust setpoint (SET_ATTITUDE_TARGET.thrust
). - Body rate (
SET_ATTITUDE_TARGET
.body_roll_rate
,.body_pitch_rate
,.body_yaw_rate
) with thrust setpoint (SET_ATTITUDE_TARGET.thrust
).
- Attitude/orientation (
- 支持以下输入组合:
无人车
支持以下输入组合 (in
type_mask
):位置设定点 (only
x
,y
,z
)指定设定点的_类型_
type_mask
:INFO
下面的_设定点类型_值不是 MAVLink 标准的一部分
type_mask
场地. ::值为:
- 12288:悬停设定值(无人机足够接近设定值时会停止)。
速度设定点 (only
vx
,vy
,vz
)
PX4 支持坐标框架 (
coordinate_frame
field): MAV_FRAME_LOCAL_NED and MAV_FRAME_BODY_NED.
SET_POSITION_TARGET_GLOBAL_INT
支持以下输入组合 (in
type_mask
):- Position setpoint (only
lat_int
,lon_int
,alt
)
- Position setpoint (only
指定设定点的_类型_
type_mask
(不是 MAVLink 标准的一部分)。 值为:- 下面的比特位没有置位,是正常表现。
- 12288:悬停设定值(无人机足够接近设定值时会停止)。
PX4 支持坐标框架 (
coordinate_frame
field): MAV_FRAME_GLOBAL.
- 支持以下输入组合:
- Attitude/orientation (
SET_ATTITUDE_TARGET.q
) with thrust setpoint (SET_ATTITUDE_TARGET.thrust
).INFO
Only the yaw setting is actually used/extracted.
- Attitude/orientation (
- 支持以下输入组合:
:::
Offboard参数
Offboard mode is affected by the following parameters:
参数 | 描述 |
---|---|
COM_OF_LOSS_T | Time-out (in seconds) to wait when offboard connection is lost before triggering offboard lost failsafe (COM_OBL_RC_ACT ) |
COM_OBL_RC_ACT | Flight mode to switch to if offboard control is lost (Values are - 0 : Position, 1 : Altitude, 2 : Manual, 3 : *Return, 4 : *Land*). |
COM_RC_OVERRIDE | Controls whether stick movement on a multicopter (or VTOL in MC mode) causes a mode change to Position mode. 默认情况下未启用此功能。 |
COM_RC_STICK_OV | The amount of stick movement that causes a transition to Position mode (if COM_RC_OVERRIDE is enabled). |
COM_RCL_EXCEPT | 该参数指定一种模式,在该模式下将忽略RC丢失及不会触发RC丢失的失效保护动作。 Set bit 2 to ignore RC loss in Offboard mode. |
开发者资源
通常,开发人员并不直接在 MAVLink 层工作,而是使用机器人 API,如 MAVSDK 或 ROS(它们提供了开发人员友好的 API,并负责管理和维护连接、发送消息和监控响应 - 使用 Offboard 模式 和 MAVLink 的细节)。
以下资源可能对开发者有用: