mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-10-19 05:43:34 +08:00
Docs: Rover API (#25499)
* docs: add RoverSetpointTypes * docs: add rover api * docs: remove rover offboard mavlink support * docs: fix broken links * Apply suggestion from @hamishwillee --------- Co-authored-by: Hamish Willee <hamishwillee@gmail.com>
This commit is contained in:
co-authored by
Hamish Willee
parent
5023174715
commit
66b07d8219
@@ -44,7 +44,7 @@ The following ROS 2 messages and their particular fields and field values are al
|
||||
In addition to providing heartbeat functionality, `OffboardControlMode` has two other main purposes:
|
||||
|
||||
1. Controls the level of the [PX4 control architecture](../flight_stack/controller_diagrams.md) at which offboard setpoints must be injected, and disables the bypassed controllers.
|
||||
1. Determines which valid estimates (position or velocity) are required, and also which setpoint messages should be used.
|
||||
2. Determines which valid estimates (position or velocity) are required, and also which setpoint messages should be used.
|
||||
|
||||
The `OffboardControlMode` message is defined as shown.
|
||||
|
||||
@@ -62,6 +62,11 @@ bool thrust_and_torque
|
||||
bool direct_actuator
|
||||
```
|
||||
|
||||
::: warning
|
||||
The following list shows the `OffboardControlMode` options for copter, fixed-wing, and VTOL.
|
||||
For rovers see the [rover section](#rover).
|
||||
:::
|
||||
|
||||
The fields are ordered in terms of priority such that `position` takes precedence over `velocity` and later fields, `velocity` takes precedence over `acceleration`, and so on.
|
||||
The first field that has a non-zero value (from top to bottom) defines what valid estimate is required in order to use offboard mode, and the setpoint message(s) that can be used.
|
||||
For example, if the `acceleration` field is the first non-zero value, then PX4 requires a valid `velocity estimate`, and the setpoint must be specified using the `TrajectorySetpoint` message.
|
||||
@@ -90,20 +95,93 @@ Before using offboard mode with ROS 2, please spend a few minutes understanding
|
||||
- Velocity setpoint (`velocity` different from `NaN` and `position` set to `NaN`). Non-`NaN` values acceleration are used as feedforward terms for the inner loop controllers.
|
||||
- Acceleration setpoint (`acceleration` different from `NaN` and `position` and `velocity` set to `NaN`)
|
||||
|
||||
- All values are interpreted in NED (Nord, East, Down) coordinate system and the units are \[m\], \[m/s\] and \[m/s^2\] for position, velocity and acceleration, respectively.
|
||||
- All values are interpreted in NED (Nord, East, Down) coordinate system and the units are `[m]`, `[m/s]` and `[m/s^2]` for position, velocity and acceleration, respectively.
|
||||
|
||||
- [px4_msgs::msg::VehicleAttitudeSetpoint](https://github.com/PX4/PX4-Autopilot/blob/main/msg/versioned/VehicleAttitudeSetpoint.msg)
|
||||
- The following input combination is supported:
|
||||
- quaternion `q_d` + thrust setpoint `thrust_body`.
|
||||
Non-`NaN` values of `yaw_sp_move_rate` are used as feedforward terms expressed in Earth frame and in \[rad/s\].
|
||||
Non-`NaN` values of `yaw_sp_move_rate` are used as feedforward terms expressed in Earth frame and in `[rad/s]`.
|
||||
|
||||
- The quaternion represents the rotation between the drone body FRD (front, right, down) frame and the NED frame. The thrust is in the drone body FRD frame and expressed in normalized \[-1, 1\] values.
|
||||
- The quaternion represents the rotation between the drone body FRD (front, right, down) frame and the NED frame.
|
||||
The thrust is in the drone body FRD frame and expressed in normalized \[-1, 1\] values.
|
||||
|
||||
- [px4_msgs::msg::VehicleRatesSetpoint](https://github.com/PX4/PX4-Autopilot/blob/main/msg/versioned/VehicleRatesSetpoint.msg)
|
||||
- The following input combination is supported:
|
||||
- `roll`, `pitch`, `yaw` and `thrust_body`.
|
||||
|
||||
- All the values are in the drone body FRD frame. The rates are in \[rad/s\] while thrust_body is normalized in \[-1, 1\].
|
||||
- All the values are in the drone body FRD frame.
|
||||
The rates are in `[rad/s]` while thrust_body is normalized in `[-1, 1]`.
|
||||
|
||||
### Rover
|
||||
|
||||
Rover modules must set the control mode using `OffboardControlMode` and use the appropriate messages to configure the corresponding setpoints.
|
||||
The approach is similar to other vehicle types, but the allowed control mode combinations and setpoints are different:
|
||||
|
||||
| Category | Usage | Setpoints |
|
||||
| ------------------------------------------------------------------- | ----------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| (Recommended) [Rover Setpoints](#rover-setpoints) | General rover control | [RoverPositionSetpoint](../msg_docs/RoverPositionSetpoint.md), [RoverSpeedSetpoint](../msg_docs/RoverSpeedSetpoint.md), [RoverAttitudeSetpoint](../msg_docs/RoverAttitudeSetpoint.md), [RoverRateSetpoint](../msg_docs/RoverRateSetpoint.md), [RoverThrottleSetpoint](../msg_docs/RoverThrottleSetpoint.md), [RoverSteeringSetpoint](../msg_docs/RoverSteeringSetpoint.md) |
|
||||
| [Actuator Setpoints](#actuator-setpoints) | Direct actuator control | [ActuatorMotors](../msg_docs/ActuatorMotors.md), [ActuatorServos](../msg_docs/ActuatorServos.md) |
|
||||
| (Deprecated) [Trajectory Setpoint](#deprecated-trajectory-setpoint) | General vehicle control | [TrajectorySetpoint](../msg_docs/TrajectorySetpoint.md) |
|
||||
|
||||
#### Rover Setpoints
|
||||
|
||||
The rover modules use a hierarchical structure to propagate setpoints:
|
||||
|
||||

|
||||
|
||||
The "highest" setpoint that is provided will be used within the PX4 rover modules to generate the setpoints that are below it (overriding them!).
|
||||
With this hierarchy there are clear rules for providing a valid control input:
|
||||
|
||||
- Provide a position setpoint **or**
|
||||
- One of the setpoints on the "left" (speed **or** throttle) **and** one of the setpoints on the "right" (attitude, rate **or** steering).
|
||||
All combinations of "left" and "right" setpoints are valid.
|
||||
|
||||
The following are all valid setpoint combinations and their respective control flags that must be set through [OffboardControlMode](../msg_docs/OffboardControlMode.md) (set all others to _false_).
|
||||
Additionally, for some combinations we require certain setpoints to be published with `NAN` values so that the setpoints of interest are not overridden by the rover module (due to the hierarchy above).
|
||||
✓ are the relevant setpoints we publish, and ✗ are the setpoint that need to be published with `NAN` values.
|
||||
|
||||
| Setpoint Combination | Control Flag | [RoverPositionSetpoint](../msg_docs/RoverPositionSetpoint.md) | [RoverSpeedSetpoint](../msg_docs/RoverSpeedSetpoint.md) | [RoverThrottleSetpoint](../msg_docs/RoverThrottleSetpoint.md) | [RoverAttitudeSetpoint](../msg_docs/RoverAttitudeSetpoint.md) | [RoverRateSetpoint](../msg_docs/RoverRateSetpoint.md) | [RoverSteeringSetpoint](../msg_docs/RoverSteeringSetpoint.md) |
|
||||
| -------------------- | ----------------- | ------------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------------- | ------------------------------------------------------------- | ----------------------------------------------------- | ------------------------------------------------------------- |
|
||||
| Position | position | ✓ | | | | | |
|
||||
| Speed + Attitude | velocity | | ✓ | | ✓ | | |
|
||||
| Speed + Rate | velocity | | ✓ | | ✗ | ✓ | |
|
||||
| Speed + Steering | velocity | | ✓ | | ✗ | ✗ | ✓ |
|
||||
| Throttle + Attitude | attitude | | | ✓ | ✓ | | |
|
||||
| Throttle + Rate | body_rate | | | ✓ | | ✓ | |
|
||||
| Throttle + Steering | thrust_and_torque | | | ✓ | | | ✓ |
|
||||
|
||||
::: info
|
||||
If you intend to use the rover setpoints, we recommend using the [PX4 ROS 2 Interface Library](../ros2/px4_ros2_interface_lib.md) instead since it simplifies the publishing of these setpoints.
|
||||
:::
|
||||
|
||||
#### Actuator Setpoints
|
||||
|
||||
Instead of controlling the vehicle using position, speed, rate and other setpoints, you can directly control the motors and actuators using [ActuatorMotors](../msg_docs/ActuatorMotors.md) and [ActuatorServos](../msg_docs/ActuatorServos.md).
|
||||
In [OffboardControlMode](../msg_docs/OffboardControlMode.md) set `direct_actuator` to _true_ and all other flags to _false_.
|
||||
|
||||
::: info
|
||||
This bypasses the rover modules including any limits on steering rates or accelerations and the inverse kinematics step.
|
||||
We recommend using [RoverSteeringSetpoint](../msg_docs/RoverSteeringSetpoint.md) and [RoverThrottleSetpoint](../msg_docs/RoverThrottleSetpoint.md) instead for low level control (see [Rover Setpoints](#rover-setpoints)).
|
||||
:::
|
||||
|
||||
#### (Deprecated) Trajectory Setpoint
|
||||
|
||||
::: warning
|
||||
The [Rover Setpoints](#rover-setpoints) are a replacement for the [TrajectorySetpoint](../msg_docs/TrajectorySetpoint.md) and we highly recommend using those instead as they have a well defined behaviour and offer more flexibility.
|
||||
:::
|
||||
|
||||
The rover modules support the _position_, _velocity_ and _yaw_ fields of the [TrajectorySetpoint](../msg_docs/TrajectorySetpoint.md).
|
||||
However, only one of the fields is active at a time and is defined by the flags of [OffboardControlMode](../msg_docs/OffboardControlMode.md):
|
||||
|
||||
| Control Mode Flag | Active Trajectory Setpoint Field |
|
||||
| ----------------- | -------------------------------- |
|
||||
| position | position |
|
||||
| velocity | velocity |
|
||||
| attitude | yaw |
|
||||
|
||||
::: info
|
||||
Ackermann rovers do not support the yaw setpoint.
|
||||
:::
|
||||
|
||||
### Generic Vehicle
|
||||
|
||||
@@ -116,8 +194,10 @@ The following offboard control modes bypass all internal PX4 control loops and s
|
||||
|
||||
- [px4_msgs::msg::ActuatorMotors](https://github.com/PX4/PX4-Autopilot/blob/main/msg/versioned/ActuatorMotors.msg) + [px4_msgs::msg::ActuatorServos](https://github.com/PX4/PX4-Autopilot/blob/main/msg/versioned/ActuatorServos.msg)
|
||||
- You directly control the motor outputs and/or servo outputs.
|
||||
- Currently works at lower level than then `control_allocator` module. Do not publish these messages when not in offboard mode.
|
||||
- All the values normalized in \[-1, 1\]. For outputs that do not support negative values, negative entries map to `NaN`.
|
||||
- Currently works at lower level than then `control_allocator` module.
|
||||
Do not publish these messages when not in offboard mode.
|
||||
- All the values normalized in `[-1, 1]`.
|
||||
For outputs that do not support negative values, negative entries map to `NaN`.
|
||||
- `NaN` maps to disarmed.
|
||||
|
||||
## MAVLink Messages
|
||||
@@ -200,38 +280,7 @@ The following MAVLink messages and their particular fields and field values are
|
||||
|
||||
### Rover
|
||||
|
||||
- [SET_POSITION_TARGET_LOCAL_NED](https://mavlink.io/en/messages/common.html#SET_POSITION_TARGET_LOCAL_NED)
|
||||
- The following input combinations are supported (in `type_mask`): <!-- https://github.com/PX4/PX4-Autopilot/blob/main/src/lib/FlightTasks/tasks/Offboard/FlightTaskOffboard.cpp#L166-L170 -->
|
||||
- Position setpoint (only `x`, `y`, `z`)
|
||||
- Specify the _type_ of the setpoint in `type_mask`:
|
||||
|
||||
::: info
|
||||
The _setpoint type_ values below are not part of the MAVLink standard for the `type_mask` field.
|
||||
::
|
||||
|
||||
The values are:
|
||||
- 12288: Loiter setpoint (vehicle stops when close enough to setpoint).
|
||||
|
||||
- Velocity setpoint (only `vx`, `vy`, `vz`)
|
||||
|
||||
- PX4 supports the coordinate frames (`coordinate_frame` field): [MAV_FRAME_LOCAL_NED](https://mavlink.io/en/messages/common.html#MAV_FRAME_LOCAL_NED) and [MAV_FRAME_BODY_NED](https://mavlink.io/en/messages/common.html#MAV_FRAME_BODY_NED).
|
||||
|
||||
- [SET_POSITION_TARGET_GLOBAL_INT](https://mavlink.io/en/messages/common.html#SET_POSITION_TARGET_GLOBAL_INT)
|
||||
- The following input combinations are supported (in `type_mask`): <!-- https://github.com/PX4/PX4-Autopilot/blob/main/src/lib/FlightTasks/tasks/Offboard/FlightTaskOffboard.cpp#L166-L170 -->
|
||||
- Position setpoint (only `lat_int`, `lon_int`, `alt`)
|
||||
- Specify the _type_ of the setpoint in `type_mask` (not part of the MAVLink standard).
|
||||
The values are:
|
||||
- Following bits not set then normal behaviour.
|
||||
- 12288: Loiter setpoint (vehicle stops when close enough to setpoint).
|
||||
|
||||
- PX4 supports the coordinate frames (`coordinate_frame` field): [MAV_FRAME_GLOBAL](https://mavlink.io/en/messages/common.html#MAV_FRAME_GLOBAL).
|
||||
|
||||
- [SET_ATTITUDE_TARGET](https://mavlink.io/en/messages/common.html#SET_ATTITUDE_TARGET)
|
||||
- The following input combinations are supported:
|
||||
- Attitude/orientation (`SET_ATTITUDE_TARGET.q`) with thrust setpoint (`SET_ATTITUDE_TARGET.thrust`).
|
||||
::: info
|
||||
Only the yaw setting is actually used/extracted.
|
||||
:::
|
||||
Rover does not support a MAVLink offboard API (ROS2 is supported).
|
||||
|
||||
## Offboard Parameters
|
||||
|
||||
|
||||
Reference in New Issue
Block a user