Skip to content

Offboard 模式

飞行器根据飞行控制栈外部(如机载计算机)提供的设定值控制位置、速度、加速度、姿态以及推力/力矩。 设置值可以经由 MAVLink 提供(也可以是一个类似 MAVSDK的MAVLink API)或者经由 ROS 2 提供。

PX4要求外部控制器提供2Hz连续的“有效存在”信号,该信号可由任意支持的 MAVLink 设置点消息或ROS 2 OffboardControlMode 消息提供。 PX4只有在收到该种信号超过1秒后才有效,如果该种信号停止飞行控制栈将重新获得控制权(脱离Offboard模式)。

:::note

  • 此模式需要位置或位/姿信息 - 例如 GPS、光流、视觉惯性里程计、mocap 等。
  • RC control is disabled except to change modes (you can also fly without any manual controller at all by setting the parameter COM_RC_IN_MODE to 4: Stick input disabled).
  • 飞行器必须已经收到一条 MAVLink 设置点消息或 ROS 2 OffboardControlMode 消息,才允许在Offboard模式下解锁或者在飞行中切换至Offboard模式。
  • 如果没有以 > 2Hz 的速度收到MAVLink 设置点消息或 OffboardControlMode ,飞行器将退出Offboard模式。
  • 并非所有 MAVLink 支持的坐标系和字段值都被设定值消息和飞行器支持。 请_仔细_阅读以下章节,确保仅使用其支持的值。

:::

描述

Offboard模式通过设置位置、速度、加速、姿态、姿态角速率或力/扭矩设定值来控制飞行器的位置和姿态。

PX4 必须能够以2Hz的速率连续收到 MAVLink 设定值消息或 ROS 2 OffboardControlMode 消息以确保外部控制器正常运行。 该消息必须持续发送1秒以上PX4才能在Offboard模式下解锁或在飞行中切换至Offboard模式。 如果在外部控制器给出的指令速率低于2Hz,PX4将在超时(COM_OF_LOSS_T) 后退出Offboard模式,并尝试降落或执行其他一些失效保护行为。 失效保护行为取决于遥控器是否可用,它根据参数 COM_OBL_RC_ACT 设定。

当使用 MAVLink 时,设定值消息既传达了外部控制器"正常运行"的信号也传达了设定值本身。 Offboard模式下要保持位置,飞行器必须接收到一个包含当前位置设定值的消息指令。

当使用 ROS 2 时,通过监测 OffboardControlMode 消息流来确保外部控制器运行正常,实际设定值由uORB消息发布的任一设定值提供,例如 TrajectorySetpoint 为了在这种情况下保持当前位置,飞行器必须收到连续的 OffboardControlMode 消息,但只需要收到 TrajectorySetpoint 消息一次。

请注意,Offboard模式只支持比较有限的 MAVLink 指令和消息。 其他操作如起飞、降落、返航,最好使用适当的模式来处理。 像上传、下载任务这样的操作可以在任何模式下执行。

ROS 2 消息

以下 ROS 2 消息及其特定字段和字段值在特定的框架下是允许的。 除了提供心跳功能外, OffboardControlMode 还有另外两个主要目的:

  1. 控制Offboard设定值在 PX4 控制架构 中的哪个等级上被注入执行,并禁止绕过控制器。
  2. 确定需要哪种有效估计(位置或速度),以及应该使用哪种设定值消息。

OffboardControlmode 消息定义如下所示。

sh
# Off-board control mode

uint64 timestamp        # 系统开始的时间 (微秒)

bool position
bool velocity
bool acceleration
bool attitude
bool body_rate
bool actuator

消息中的字段按优先级排序, 位置 优于 速度 及以后的字段。 速度 优于 加速度,等等。 第一个非零字段(从上到下) 定义了Offboard模式所需的有效估计以及可用的设定值消息。 例如,如果 加速度 字段是第一个非零字段,PX4 就需要一个有效的 速度估计, 并且设定值必须使用 TrajectorySetpoint 消息指定。

期望控制对象位置速度加速度姿态姿态角速率执行器字段直接给电机所需状态估计所需消息
位置 (NED)------位置TrajectorySetpoint
速度 (NED)-----速度TrajectorySetpoint
加速度(NED)----速度TrajectorySetpoint
姿态(FRD)---VehicleAttitudeSetpoint
体轴角速率 (FRD)--VehicleRatesSetpoint
推力和力矩(FRD)-VehicleThrustSetpointVehicleTorqueSetpoint
直接给电机和舵机ActuatorMotors and ActuatorServos

✓ 代表该位设置为有效, ✗ 代表该值未设置, - 表示该值无关紧要。

:::note 在使用 ROS 2 的Offboard模式之前, 请花几分钟时间了解PX4和ROS2使用的不同的 坐标系。 :::

旋翼机

  • px4_msgs::msg::TrajectorySetpoint

    • 支持以下输入组合:

      • 位置设定值(position 不为 NaN)。 非NaN 的速度和加速度值被用作内环控制器的前馈项。
      • 速度设定值(velocity 不为 NaN 同时 positionNaN). 非NaN 的加速度值被用于内环控制器的前馈项。
      • 加速度设定值(acceleration 不为 NaN 同时 positionvelocityNaN)。
    • 所有值都是基于NED(北, 东, 地)坐标系,位置、速度和加速的单位分别为[m], [m/s] 和[m/s^2] 。

  • px4_msgs::msg::VehicleAttitudeSetpoint

    • 支持以下输入组合:

      • 姿态四元数 q_d + 推力设定值 thrust_body。 非-NaN 值的 yaw_sp_move_rate 被用作大地坐标系下的偏航角前馈使用,单位为[rad/s]。
    • 姿态四元数表示无人机机体坐标系FRD(前、右、下) 与NED坐标系之间的旋转。 这个推力是在无人机体轴FRD坐标系下,并归一化为 [-1, 1] 。

  • px4_msgs::msg::VehicleRatesSetpoint

    • 支持以下输入组合:

      • roll, pitch, yaw and thrust_body.
    • 所有值都表示在无人机体轴FRD坐标系下。 角速率(roll, pitch, yaw) 单位为[rad/s] ,thrust_body归一化为 [-1, 1]。

Generic Vehicle

下面的offboard控制模式会绕过所有PX4内部的控制环,应当非常谨慎地使用。

下面的 MAVLink 消息及其特定字段和字段值在特定的帧下是允许的。

直升机/垂直起降

  • SET_POSITION_TARGET_LOCAL_NED

    • 支持以下输入组合:

      • 位置设置值 (仅 xyz
      • 速度设定值(仅vxyyvz
      • 加速度设定值(仅 afxafyafz
      • 位置设定值速度设定值(速度设定值和加速度设定值被作为前馈使用;被叠加到位置控制器的输出上,结果作为速度控制器的输入使用)。
      • 位置设定值速度设定值以及加速度(速度和加速度设定值用作前馈;速度设定值叠加至位置控制器输出,并将结果作为速度控制器的输入;加速度设定值被叠加至速度控制器的输出中,输出结果用于计算推力矢量)。
    • PX4 supports the following coordinate_frame values (only): MAV_FRAME_LOCAL_NED and MAV_FRAME_BODY_NED.

  • SET_POSITION_TARGET_GLOBAL_INT

    • 支持以下输入组合:

      • 位置设定值(仅lat_intlon_intalt

      • 速度设定值(仅vxvyvz

      • Thrust setpoint (only afx, afy, afz)

        :::note 加速度设定值被用来生成归一化的推力设定值(即不支持加速度设定值)。 :::

      • 位置设定值速度设定值(速度设定值被作为前馈使用;被叠加到位置控制器的输出上,结果作为速度控制器的输入使用)。

    • PX4 supports the following coordinate_frame values (only): MAV_FRAME_GLOBAL.

  • SET_ATTITUDE_TARGET

    • 支持以下输入组合:
      • 带有推力设定值(SET_ATTITUDE_TARGET.thrust)的姿态和方向(SET_ATTITUDE_TARGET.q)。
      • Body rate (SET_ATTITUDE_TARGET .body_roll_rate ,.body_pitch_rate, .body_yaw_rate) with thrust setpoint (SET_ATTITUDE_TARGET.thrust).

Fixed-wing

  • SET_POSITION_TARGET_LOCAL_NED

    • 支持以下输入组合(通过 type_mask):

      • 位置设定值(仅xyz;速度和加速度设定值被忽略)。

        • Specify the type of the setpoint in type_mask (if these bits are not set the vehicle will fly in a flower-like pattern): ::: info Some of the setpoint type values below are not part of the MAVLink standard for the type_mask field. :::

          值为:

          • 292:滑动设定值。 这会将 TECS 配置为空速优先于高度,以便在没有推力时使无人机滑行(即控制俯仰以调节空速)。 这相当于设置 type_maskPOSITION_TARGET_TYPEMASK_Z_IGNOREPOSITION_TARGET_TYPEMASK_VZ_IGNOREPOSITION_TARGET_TYPEMASK_AZ_IGNORE
          • 4096:起飞设定值。
          • 8192:降落设定值。
          • 12288:悬停设定值(以设定值为中心绕圈飞行)。
          • 16384:空闲设定值(油门为0, 横滚 / 俯仰为0)。
    • PX4 supports the coordinate frames (coordinate_frame field): MAV_FRAME_LOCAL_NED and MAV_FRAME_BODY_NED.

  • SET_POSITION_TARGET_GLOBAL_INT

    • 支持以下输入组合(通过 type_mask):

      • 位置设定值(仅lat_intlon_intalt

        • Specify the type of the setpoint in type_mask (if these bits are not set the vehicle will fly in a flower-like pattern):

          The setpoint type values below are not part of the MAVLink standard for the type_mask field.

:::

    The values are:

    - 4096:起飞设定值。
    - 8192:降落设定值。
    - 12288:悬停设定值(以设定值为中心绕圈飞行)。
    - 16384:空闲设定值(油门为0, 横滚 / 俯仰为0)。
  • PX4 supports the following coordinate_frame values (only): MAV_FRAME_GLOBAL.

  • SET_ATTITUDE_TARGET

    • 支持以下输入组合:
      • 带有推力设定值(SET_ATTITUDE_TARGET.thrust)的姿态和方向(SET_ATTITUDE_TARGET.q)。
      • Body rate (SET_ATTITUDE_TARGET .body_roll_rate ,.body_pitch_rate, .body_yaw_rate) with thrust setpoint (SET_ATTITUDE_TARGET.thrust).

无人车

  • SET_POSITION_TARGET_LOCAL_NED

    • 支持以下输入组合(在 type_mask 中):

      • 位置设置值 (仅 xyz

        • Specify the type of the setpoint in type_mask:

          The setpoint type values below are not part of the MAVLink standard for the type_mask field. ::

          值为:

          • 12288:悬停设定值(无人机足够接近设定值时会停止)。
      • Velocity setpoint (only vx, vy, vz)

    • PX4 supports the coordinate frames (coordinate_frame field): MAV_FRAME_LOCAL_NED and MAV_FRAME_BODY_NED.

  • SET_POSITION_TARGET_GLOBAL_INT

    • 支持以下输入组合(在 type_mask 中):

      • 位置设定值(仅lat_intlon_intalt
    • Specify the type of the setpoint in type_mask (not part of the MAVLink standard). The values are:

      • 下面的比特位没有置位,是正常表现。
      • 12288:悬停设定值(无人机足够接近设定值时会停止)。
    • PX4 supports the coordinate frames (coordinate_frame field): MAV_FRAME_GLOBAL.

  • SET_ATTITUDE_TARGET

    • 支持以下输入组合:
      • 带有推力设定值(SET_ATTITUDE_TARGET.thrust)的姿态和方向(SET_ATTITUDE_TARGET.q)。 :::note 实际仅使用/提取了偏航设置。 :::

Offboard参数

_Offboard模式_受以下参数影响:

参数描述
COM_OF_LOSS_TOffboard 连接超时时间(以秒为单位),超过该时间未检测到offboard连接后将触发 offboard 连接丢失的失效保护措施 ( COM_OBL_RC_ACT)
COM_OBL_RC_ACT当offboard模式控制丢失时切换到的飞行模式(值为 - 0: 位置, 1: 高度, 2: 手动, 3: *返航, 4: *降落*).
COM_RC_OVERRIDE遥控器打杆时多旋翼(或者多旋翼模式下的 VOTL)会切换到 位置模式。 默认情况下未启用此功能。
COM_RC_STICK_OV遥控器打杆多少会切换到 位置模式 (如果 COM_RC_OVERRIDE 已启用)。
COM_RCL_EXCEPT该参数指定一种模式,在该模式下将忽略RC丢失及不会触发RC丢失的失效保护动作。 将位 2 置1将在Offboard模式下忽略RC丢失。

开发者资源

通常,开发人员不直接在 MAVLink 层开发,而是使用机器人的API接口,例如 MAVSDK ROS (它们为开发人员提供了友好的 API,并负责管理和维护连接,发送消息和响应监视 - Offboard 模式 和 MAVLink的细节)。

以下资源可能对开发者有用: