diff --git a/docs/zh/SUMMARY.md b/docs/zh/SUMMARY.md
index 5cc5281c83..f48736465f 100644
--- a/docs/zh/SUMMARY.md
+++ b/docs/zh/SUMMARY.md
@@ -165,6 +165,7 @@
- [ARK Electronics ARKV6X](flight_controller/ark_v6x.md)
- [ARK FPV Flight Controller](flight_controller/ark_fpv.md)
- [ARK Pi6X Flow Flight Controller](flight_controller/ark_pi6x.md)
+ - [CORVON 743v1](flight_controller/corvon_743v1.md)
- [CUAV Nora](flight_controller/cuav_nora.md)
- [CUAV V5+ (FMUv5)](flight_controller/cuav_v5_plus.md)
- [Wiring Quickstart](assembly/quick_start_cuav_v5_plus.md)
@@ -497,6 +498,7 @@
- [飞行控制器移植指南](hardware/porting_guide.md)
- [PX4 板配置 (kconfig)](hardware/porting_guide_config.md)
- [NuttX 板移植指南](hardware/porting_guide_nuttx.md)
+ - [Board Firmware Packaging (.deb)](hardware/board_packaging.md)
- [串口映射](hardware/serial_port_mapping.md)
- [机型](dev_airframes/index.md)
- [增加一个新的机型](dev_airframes/adding_a_new_frame.md)
@@ -777,6 +779,7 @@
- [MAVLink Messaging](mavlink/index.md)
- [Adding Messages](mavlink/adding_messages.md)
- [Streaming Messages](mavlink/streaming_messages.md)
+ - [MAVLink Profiles](mavlink/mavlink_profiles.md)
- [Receiving Messages](mavlink/receiving_messages.md)
- [Custom MAVLink Messages](mavlink/custom_messages.md)
- [Message Signing](mavlink/message_signing.md)
diff --git a/docs/zh/advanced/pps_time_sync.md b/docs/zh/advanced/pps_time_sync.md
index 6679279b60..aaff27478c 100644
--- a/docs/zh/advanced/pps_time_sync.md
+++ b/docs/zh/advanced/pps_time_sync.md
@@ -57,6 +57,17 @@ param set PWM_MAIN_FUNC10 2064
param set PPS_CAP_ENABLE 1
```
+#### Multi-GPS Setups
+
+If you have multiple GPS receivers, set `PPS_CAP_GPS_ID` to the device ID of the GPS receiver that emits the PPS signal.
+When set to `0` (default), the driver uses the first available GPS instance.
+
+You can find the device ID by running:
+
+```sh
+listener sensor_gps
+```
+
### 布线
The wiring configuration depends on your specific flight controller.
@@ -131,5 +142,5 @@ See also:
The PPS signal provides much higher temporal precision than the transmitted time data, which has latency and jitter from serial communication.
:::warning
-If the PPS driver does not sending any data for 5 seconds (despite having `PPS_CAP_ENABLE` set to 1), the `EKF2_GPS_DELAY` will be used instead for estimating the latency.
+If the PPS driver does not send any data for 5 seconds (despite having `PPS_CAP_ENABLE` set to 1), the corresponding `SENS_GPS*_DELAY` parameter will be used instead for estimating the latency.
:::
diff --git a/docs/zh/advanced_config/tuning_the_ecl_ekf.md b/docs/zh/advanced_config/tuning_the_ecl_ekf.md
index c6841a2128..d4274ea2a1 100644
--- a/docs/zh/advanced_config/tuning_the_ecl_ekf.md
+++ b/docs/zh/advanced_config/tuning_the_ecl_ekf.md
@@ -407,6 +407,16 @@ See also [Fault Detection](https://youtu.be/CMGQJNPiTJg?si=sFtdf4AQbcOH8-u8) in
- **替代来源**: 航位推算模式通过在允许重置之前要求没有替代导航源,提供了增强的保护。
- **启动漏洞**: 初始错误 GNSS 数据无法自动检测;需要操作员干预和手动位置校正。
+#### Ground Position Lock
+
+When a vehicle equipped with dead-reckoning sensors (e.g. airspeed for fixed-wing, or optical flow) is sitting on the ground before takeoff, those sensors provide little to no aiding — airspeed and optical flow measurements are unreliable at rest. In this case, the EKF relies on _constant position fusion_ (fusing a synthetic position measurement at the last known position) to prevent the estimate from drifting. However, this is only active when the vehicle is detected as stationary, so handling the vehicle or starting the engine can interrupt it.
+
+To counter this, [EKF2_POS_LOCK](../advanced_config/parameter_reference.md#EKF2_POS_LOCK) can be enabled to force constant position fusion to run while landed and the global horizontal position has already been initialized.
+
+:::note
+`EKF2_POS_LOCK` has no effect in flight.
+:::
+
### 测距仪
[测距仪](../sensor/rangefinders.md) 对地距离由单状态滤波器使用,用于估计地形相对于高度基准的垂直位置。
diff --git a/docs/zh/assembly/mount_gps_compass.md b/docs/zh/assembly/mount_gps_compass.md
index 778158cef9..e75a349a80 100644
--- a/docs/zh/assembly/mount_gps_compass.md
+++ b/docs/zh/assembly/mount_gps_compass.md
@@ -20,7 +20,7 @@ For more information see [Setting the Compass Orientation](../config/flight_cont
## 安装位置
-In order to compensate for the relative motion between the receiver and the CoG, you should [configure](../advanced_config/parameters.md) the following parameters to set the offsets: [EKF2_GPS_POS_X](../advanced_config/parameter_reference.md#EKF2_GPS_POS_X), [EKF2_GPS_POS_Y](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Y) and [EKF2_GPS_POS_Z](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Z).
+In order to compensate for the relative motion between the receiver and the CoG, you should [configure](../advanced_config/parameters.md) the following parameters to set the offsets: [SENS_GPS0_OFFX](../advanced_config/parameter_reference.md#SENS_GPS0_OFFX), [SENS_GPS0_OFFY](../advanced_config/parameter_reference.md#SENS_GPS0_OFFY) and [SENS_GPS0_OFFZ](../advanced_config/parameter_reference.md#SENS_GPS0_OFFZ).
This is important because the body frame estimated by the EKF will converge on the location of the GNSS module and assume it to be at the CoG. If the GNSS module is significantly offset from the CoG, then rotation around the COG will be interpreted as an altitude change, which in some flight modes (such as position mode) will result in unnecessary corrections.
diff --git a/docs/zh/companion_computer/holybro_pixhawk_rpi_cm4_baseboard.md b/docs/zh/companion_computer/holybro_pixhawk_rpi_cm4_baseboard.md
index e3b90f22b0..240301f8b6 100644
--- a/docs/zh/companion_computer/holybro_pixhawk_rpi_cm4_baseboard.md
+++ b/docs/zh/companion_computer/holybro_pixhawk_rpi_cm4_baseboard.md
@@ -99,7 +99,7 @@ The image below shows the wiring in greater detail.
This section explains how you install your preferred Linux distro, such as "Raspberry Pi OS 64bit" onto the RPi EMCC.
-备注:
+Notes:
- If you are using PX4, you will need to use PX4 version 1.13.1 or newer for PX4 to recognize this baseboard.
- The fan does not indicate if the RPi CM4 is powered/running or not.
diff --git a/docs/zh/concept/control_allocation.md b/docs/zh/concept/control_allocation.md
index b465836e20..cce86609b7 100644
--- a/docs/zh/concept/control_allocation.md
+++ b/docs/zh/concept/control_allocation.md
@@ -31,7 +31,7 @@ PX4将这个转换逻辑区分开,这个逻辑被称为从姿态/角速率控

-备注:
+Notes:
- 角速率控制器输出力矩和推力设定值
- the `control_allocator` module:
diff --git a/docs/zh/config/actuators.md b/docs/zh/config/actuators.md
index 716d974043..eadf084ca9 100644
--- a/docs/zh/config/actuators.md
+++ b/docs/zh/config/actuators.md
@@ -675,7 +675,6 @@ For each of the tilt servos:
- If a safety button is used, it must be pressed before actuator testing is allowed.
- The kill-switch can still be used to stop motors immediately.
- Servos do not actually move until the corresponding slider is changed.
-- The parameter [COM_MOT_TEST_EN](../advanced_config/parameter_reference.md#COM_MOT_TEST_EN) can be used to completely disable actuator testing.
- On the shell, [actuator_test](../modules/modules_command.md#actuator-test) can be used as well for actuator testing.
- VTOLs will automatically turn off motors pointing upwards during **fixed-wing flight**:
- Standard VTOL : Motors defined as multicopter motors will be turned off
diff --git a/docs/zh/config/compass.md b/docs/zh/config/compass.md
index e121662f01..2135055aa1 100644
--- a/docs/zh/config/compass.md
+++ b/docs/zh/config/compass.md
@@ -86,7 +86,7 @@ This calibration is similar to the well-known figure-8 compass calibration done
2-3 oscillations of ~30 degrees in every direction is usually sufficient.
2. Wait for the heading estimate to stabilize and verify that the compass rose is pointing to the correct direction (this can take a couple of seconds).
-备注:
+Notes:
- There is no start/stop for this type of calibration (the algorithm runs continuously when the vehicle is disarmed).
- The calibration is immediately applied to the data (no reboot is required) but is saved to the calibration parameters after disarming the vehicle only (the calibration is lost if no arming/disarming sequence is performed between calibration and shutdown).
@@ -109,7 +109,7 @@ This calibration process leverages external knowledge of vehicle's orientation a
commander calibrate mag quick
```
-备注:
+Notes:
- This method is specifically designed for vehicles where full rotation is impractical or impossible.
If full rotation is possible, use the [complete calibration](#complete-calibration) instead.
diff --git a/docs/zh/config/manual_control.md b/docs/zh/config/manual_control.md
index 755414ffe6..1033434b9b 100644
--- a/docs/zh/config/manual_control.md
+++ b/docs/zh/config/manual_control.md
@@ -45,7 +45,7 @@ If you have multiple control sources, such as an RC system and/or one or more Jo
The [MAVLink instance](../peripherals/mavlink_peripherals.md#mavlink-instances) refers to an instance assigned to a serial port, such as [MAV_0_CONFIG](../advanced_config/parameter_reference.md#MAV_0_CONFIG).
-备注:
+Notes:
- RC checks are run for any option that uses RC (so not for `MAVLink only` or `Disable manual control`).
- When using priority sources, sources are evaluated as soon as they become valid and may trigger an immediate switch (if higher priority than the currently active source).
diff --git a/docs/zh/config_mc/filter_tuning.md b/docs/zh/config_mc/filter_tuning.md
index 0b9796bb23..2fe64edf8b 100644
--- a/docs/zh/config_mc/filter_tuning.md
+++ b/docs/zh/config_mc/filter_tuning.md
@@ -72,7 +72,7 @@ The ESC RPM feedback is used to track the rotor blade pass frequency and its har
ESC RPM feedback requires ESCs capable of providing RPM feedback such as [DShot](../peripherals/dshot.md) with telemetry connected, a bidirectional DShot set up ([work in progress](https://github.com/PX4/PX4-Autopilot/pull/23863)), or [UAVCAN/DroneCAN ESCs](../dronecan/escs.md).
Before enabling, make sure that the ESC RPM is correct.
-You might have to adjust the [pole count of the motors](../advanced_config/parameter_reference.md#MOT_POLE_COUNT).
+You might have to adjust the per-motor pole count (`DSHOT_MOT_POL1`–`DSHOT_MOT_POL12`).
The following parameters should be set to enable and configure dynamic notch filters:
diff --git a/docs/zh/dev_log/log_encryption.md b/docs/zh/dev_log/log_encryption.md
index a0fc25ffd0..15dbb87434 100644
--- a/docs/zh/dev_log/log_encryption.md
+++ b/docs/zh/dev_log/log_encryption.md
@@ -342,7 +342,7 @@ PX4-Autopilot/
│ │ ├── public_key.pub # Public key in hex format
```
-备注:
+Notes:
- The script will not overwrite any existing keys in the folders.
It will generate a new public key if the folder only includes a private key.
diff --git a/docs/zh/dronecan/ark_g5_rtk_gps.md b/docs/zh/dronecan/ark_g5_rtk_gps.md
index 67c3145a0f..325683e0b2 100644
--- a/docs/zh/dronecan/ark_g5_rtk_gps.md
+++ b/docs/zh/dronecan/ark_g5_rtk_gps.md
@@ -97,7 +97,7 @@ There is also CAN built-in bus termination via [CANNODE_TERM](../advanced_config
You need to set necessary [DroneCAN](index.md) parameters and define offsets if the sensor is not centred within the vehicle:
- Enable [UAVCAN_SUB_GPS](../advanced_config/parameter_reference.md#UAVCAN_SUB_GPS), [UAVCAN_SUB_MAG](../advanced_config/parameter_reference.md#UAVCAN_SUB_MAG), and [UAVCAN_SUB_BARO](../advanced_config/parameter_reference.md#UAVCAN_SUB_BARO).
-- The parameters [EKF2_GPS_POS_X](../advanced_config/parameter_reference.md#EKF2_GPS_POS_X), [EKF2_GPS_POS_Y](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Y) and [EKF2_GPS_POS_Z](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Z) can be set to account for the offset of the ARK G5 RTK GPS from the vehicle's centre of gravity.
+- The parameters [SENS_GPS0_OFFX](../advanced_config/parameter_reference.md#SENS_GPS0_OFFX), [SENS_GPS0_OFFY](../advanced_config/parameter_reference.md#SENS_GPS0_OFFY) and [SENS_GPS0_OFFZ](../advanced_config/parameter_reference.md#SENS_GPS0_OFFZ) can be set to account for the offset of the ARK G5 RTK GPS from the vehicle's centre of gravity.
## LED含义
diff --git a/docs/zh/dronecan/ark_g5_rtk_heading_gps.md b/docs/zh/dronecan/ark_g5_rtk_heading_gps.md
index a4959802ff..9f6f03e5d2 100644
--- a/docs/zh/dronecan/ark_g5_rtk_heading_gps.md
+++ b/docs/zh/dronecan/ark_g5_rtk_heading_gps.md
@@ -99,7 +99,7 @@ You need to set necessary [DroneCAN](index.md) parameters and define offsets if
- Enable GPS yaw fusion by setting bit 3 of [EKF2_GPS_CTRL](../advanced_config/parameter_reference.md#EKF2_GPS_CTRL) to true.
- Enable GPS blending to ensure the heading is always published by setting [SENS_GPS_MASK](../advanced_config/parameter_reference.md#SENS_GPS_MASK) to 7 (all three bits checked).
- Enable [UAVCAN_SUB_GPS](../advanced_config/parameter_reference.md#UAVCAN_SUB_GPS), [UAVCAN_SUB_MAG](../advanced_config/parameter_reference.md#UAVCAN_SUB_MAG), and [UAVCAN_SUB_BARO](../advanced_config/parameter_reference.md#UAVCAN_SUB_BARO).
-- The parameters [EKF2_GPS_POS_X](../advanced_config/parameter_reference.md#EKF2_GPS_POS_X), [EKF2_GPS_POS_Y](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Y) and [EKF2_GPS_POS_Z](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Z) can be set to account for the offset of the ARK G5 RTK HEADING GPS from the vehicle's centre of gravity.
+- The parameters [SENS_GPS0_OFFX](../advanced_config/parameter_reference.md#SENS_GPS0_OFFX), [SENS_GPS0_OFFY](../advanced_config/parameter_reference.md#SENS_GPS0_OFFY) and [SENS_GPS0_OFFZ](../advanced_config/parameter_reference.md#SENS_GPS0_OFFZ) can be set to account for the offset of the ARK G5 RTK HEADING GPS from the vehicle's centre of gravity.
### Parameter references
diff --git a/docs/zh/dronecan/ark_gps.md b/docs/zh/dronecan/ark_gps.md
index f7284e0bae..2eb9cb566f 100644
--- a/docs/zh/dronecan/ark_gps.md
+++ b/docs/zh/dronecan/ark_gps.md
@@ -91,7 +91,7 @@ If the sensor is not centred within the vehicle you will also need to define sen
- Enable GPS yaw fusion by setting bit 3 of [EKF2_GPS_CTRL](../advanced_config/parameter_reference.md#EKF2_GPS_CTRL) to true.
- Enable [UAVCAN_SUB_GPS](../advanced_config/parameter_reference.md#UAVCAN_SUB_GPS), [UAVCAN_SUB_MAG](../advanced_config/parameter_reference.md#UAVCAN_SUB_MAG), and [UAVCAN_SUB_BARO](../advanced_config/parameter_reference.md#UAVCAN_SUB_BARO).
-- The parameters [EKF2_GPS_POS_X](../advanced_config/parameter_reference.md#EKF2_GPS_POS_X), [EKF2_GPS_POS_Y](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Y) and [EKF2_GPS_POS_Z](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Z) can be set to account for the offset of the ARK GPS from the vehicles centre of gravity.
+- The parameters [SENS_GPS0_OFFX](../advanced_config/parameter_reference.md#SENS_GPS0_OFFX), [SENS_GPS0_OFFY](../advanced_config/parameter_reference.md#SENS_GPS0_OFFY) and [SENS_GPS0_OFFZ](../advanced_config/parameter_reference.md#SENS_GPS0_OFFZ) can be set to account for the offset of the ARK GPS from the vehicles centre of gravity.
### ARK GPS Configuration
diff --git a/docs/zh/dronecan/ark_rtk_gps.md b/docs/zh/dronecan/ark_rtk_gps.md
index 595daaf686..8070458bad 100644
--- a/docs/zh/dronecan/ark_rtk_gps.md
+++ b/docs/zh/dronecan/ark_rtk_gps.md
@@ -84,8 +84,9 @@ You need to set necessary [DroneCAN](index.md) parameters and define offsets if
- Enable GPS yaw fusion by setting bit 3 of [EKF2_GPS_CTRL](../advanced_config/parameter_reference.md#EKF2_GPS_CTRL) to true.
- Enable GPS blending to ensure the heading is always published by setting [SENS_GPS_MASK](../advanced_config/parameter_reference.md#SENS_GPS_MASK) to 7 (all three bits checked).
+- If using [Moving Baseline & GPS Heading](#setting-up-moving-baseline--gps-heading), set [SENS_GPS_PRIME](../advanced_config/parameter_reference.md#SENS_GPS_PRIME) to the CAN node ID of the _Moving Base_ module. The moving base is preferred because the rover receiver in a moving baseline configuration can experience degraded navigation rate and increased data latency when corrections are intermittent.
- Enable [UAVCAN_SUB_GPS](../advanced_config/parameter_reference.md#UAVCAN_SUB_GPS), [UAVCAN_SUB_MAG](../advanced_config/parameter_reference.md#UAVCAN_SUB_MAG), and [UAVCAN_SUB_BARO](../advanced_config/parameter_reference.md#UAVCAN_SUB_BARO).
-- The parameters [EKF2_GPS_POS_X](../advanced_config/parameter_reference.md#EKF2_GPS_POS_X), [EKF2_GPS_POS_Y](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Y) and [EKF2_GPS_POS_Z](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Z) can be set to account for the offset of the ARK RTK GPS from the vehicles centre of gravity.
+- The parameters [SENS_GPS0_OFFX](../advanced_config/parameter_reference.md#SENS_GPS0_OFFX), [SENS_GPS0_OFFY](../advanced_config/parameter_reference.md#SENS_GPS0_OFFY) and [SENS_GPS0_OFFZ](../advanced_config/parameter_reference.md#SENS_GPS0_OFFZ) can be set to account for the offset of the ARK RTK GPS from the vehicles centre of gravity.
### ARK RTK GPS Configuration
@@ -137,6 +138,7 @@ Setup via CAN:
- On the _Moving Base_, set the following:
- [GPS_UBX_MODE](../advanced_config/parameter_reference.md#GPS_UBX_MODE) to `4`.
- [CANNODE_PUB_MBD](../advanced_config/parameter_reference.md#CANNODE_PUB_MBD) to `1`.
+- On the _Flight Controller_, set [SENS_GPS_PRIME](../advanced_config/parameter_reference.md#SENS_GPS_PRIME) to the CAN node ID of the _Moving Base_ (see [PX4 Configuration](#px4-configuration)).
Setup via UART:
@@ -155,6 +157,7 @@ Setup via UART:
- [GPS_YAW_OFFSET](../advanced_config/parameter_reference.md#GPS_YAW_OFFSET) to `0` if your _Rover_ is in front of your _Moving Base_, `90` if _Rover_ is right of _Moving Base_, `180` if _Rover_ is behind _Moving Base_, or `270` if _Rover_ is left of _Moving Base_.
- On the _Moving Base_, set the following:
- [GPS_UBX_MODE](../advanced_config/parameter_reference.md#GPS_UBX_MODE) to `2`.
+- On the _Flight Controller_, set [SENS_GPS_PRIME](../advanced_config/parameter_reference.md#SENS_GPS_PRIME) to the CAN node ID of the _Moving Base_ (see [PX4 Configuration](#px4-configuration)).
For more information see [Rover and Moving Base](../dronecan/index.md#rover-and-moving-base) in the DroneCAN guide.
diff --git a/docs/zh/dronecan/ark_rtk_gps_l1_l2.md b/docs/zh/dronecan/ark_rtk_gps_l1_l2.md
index 4260b6e3e0..6a2d0b07ef 100644
--- a/docs/zh/dronecan/ark_rtk_gps_l1_l2.md
+++ b/docs/zh/dronecan/ark_rtk_gps_l1_l2.md
@@ -85,7 +85,7 @@ You need to set necessary [DroneCAN](index.md) parameters and define offsets if
- Enable GPS yaw fusion by setting bit 3 of [EKF2_GPS_CTRL](../advanced_config/parameter_reference.md#EKF2_GPS_CTRL) to true.
- Enable GPS blending to ensure the heading is always published by setting [SENS_GPS_MASK](../advanced_config/parameter_reference.md#SENS_GPS_MASK) to 7 (all three bits checked).
- Enable [UAVCAN_SUB_GPS](../advanced_config/parameter_reference.md#UAVCAN_SUB_GPS), [UAVCAN_SUB_MAG](../advanced_config/parameter_reference.md#UAVCAN_SUB_MAG), and [UAVCAN_SUB_BARO](../advanced_config/parameter_reference.md#UAVCAN_SUB_BARO).
-- The parameters [EKF2_GPS_POS_X](../advanced_config/parameter_reference.md#EKF2_GPS_POS_X), [EKF2_GPS_POS_Y](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Y) and [EKF2_GPS_POS_Z](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Z) can be set to account for the offset of the ARK RTK GPS L1 L5 from the vehicles centre of gravity.
+- The parameters [SENS_GPS0_OFFX](../advanced_config/parameter_reference.md#SENS_GPS0_OFFX), [SENS_GPS0_OFFY](../advanced_config/parameter_reference.md#SENS_GPS0_OFFY) and [SENS_GPS0_OFFZ](../advanced_config/parameter_reference.md#SENS_GPS0_OFFZ) can be set to account for the offset of the ARK RTK GPS L1 L5 from the vehicles centre of gravity.
### ARK RTK GPS L1 L5 Configuration
diff --git a/docs/zh/dronecan/ark_x20_rtk_gps.md b/docs/zh/dronecan/ark_x20_rtk_gps.md
index 1feb0bfb33..d7a52b80dc 100644
--- a/docs/zh/dronecan/ark_x20_rtk_gps.md
+++ b/docs/zh/dronecan/ark_x20_rtk_gps.md
@@ -88,7 +88,7 @@ You need to set necessary [DroneCAN](index.md) parameters and define offsets if
- Enable GPS yaw fusion by setting bit 3 of [EKF2_GPS_CTRL](../advanced_config/parameter_reference.md#EKF2_GPS_CTRL) to true.
- Enable GPS blending to ensure the heading is always published by setting [SENS_GPS_MASK](../advanced_config/parameter_reference.md#SENS_GPS_MASK) to 7 (all three bits checked).
- Enable [UAVCAN_SUB_GPS](../advanced_config/parameter_reference.md#UAVCAN_SUB_GPS), [UAVCAN_SUB_MAG](../advanced_config/parameter_reference.md#UAVCAN_SUB_MAG), and [UAVCAN_SUB_BARO](../advanced_config/parameter_reference.md#UAVCAN_SUB_BARO).
-- The parameters [EKF2_GPS_POS_X](../advanced_config/parameter_reference.md#EKF2_GPS_POS_X), [EKF2_GPS_POS_Y](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Y) and [EKF2_GPS_POS_Z](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Z) can be set to account for the offset of the ARK X20 RTK GPS from the vehicles centre of gravity.
+- The parameters [SENS_GPS0_OFFX](../advanced_config/parameter_reference.md#SENS_GPS0_OFFX), [SENS_GPS0_OFFY](../advanced_config/parameter_reference.md#SENS_GPS0_OFFY) and [SENS_GPS0_OFFZ](../advanced_config/parameter_reference.md#SENS_GPS0_OFFZ) can be set to account for the offset of the ARK X20 RTK GPS from the vehicles centre of gravity.
### ARK X20 RTK GPS Configuration
diff --git a/docs/zh/dronecan/holybro_m8n_gps.md b/docs/zh/dronecan/holybro_m8n_gps.md
index 21faba299b..e446ab3d76 100644
--- a/docs/zh/dronecan/holybro_m8n_gps.md
+++ b/docs/zh/dronecan/holybro_m8n_gps.md
@@ -94,4 +94,4 @@ If the sensor is not centred within the vehicle you will also need to define sen
- Enable GPS yaw fusion by setting bit 3 of [EKF2_GPS_CTRL](../advanced_config/parameter_reference.md#EKF2_GPS_CTRL) to true.
- Enable [UAVCAN_SUB_GPS](../advanced_config/parameter_reference.md#UAVCAN_SUB_GPS), [UAVCAN_SUB_MAG](../advanced_config/parameter_reference.md#UAVCAN_SUB_MAG), and [UAVCAN_SUB_BARO](../advanced_config/parameter_reference.md#UAVCAN_SUB_BARO).
- Set [CANNODE_TERM](../advanced_config/parameter_reference.md#CANNODE_TERM) to `1` if this is that last node on the CAN bus.
-- The parameters [EKF2_GPS_POS_X](../advanced_config/parameter_reference.md#EKF2_GPS_POS_X), [EKF2_GPS_POS_Y](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Y) and [EKF2_GPS_POS_Z](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Z) can be set to account for the offset of the ARK GPS from the vehicles centre of gravity.
+- The parameters [SENS_GPS0_OFFX](../advanced_config/parameter_reference.md#SENS_GPS0_OFFX), [SENS_GPS0_OFFY](../advanced_config/parameter_reference.md#SENS_GPS0_OFFY) and [SENS_GPS0_OFFZ](../advanced_config/parameter_reference.md#SENS_GPS0_OFFZ) can be set to account for the offset of the ARK GPS from the vehicles centre of gravity.
diff --git a/docs/zh/dronecan/index.md b/docs/zh/dronecan/index.md
index f7986b699b..4b0b48d3c3 100644
--- a/docs/zh/dronecan/index.md
+++ b/docs/zh/dronecan/index.md
@@ -194,7 +194,7 @@ GPS CANNODE parameter ([set using QGC](#qgc-cannode-parameter-configuration)):
Other PX4 Parameters:
-- If the GPS is not positioned at the vehicle centre of gravity you can account for the offset using [EKF2_GPS_POS_X](../advanced_config/parameter_reference.md#EKF2_GPS_POS_X), [EKF2_GPS_POS_Y](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Y) and [EKF2_GPS_POS_Z](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Z).
+- If the GPS is not positioned at the vehicle centre of gravity you can account for the offset using [SENS_GPS0_OFFX](../advanced_config/parameter_reference.md#SENS_GPS0_OFFX), [SENS_GPS0_OFFY](../advanced_config/parameter_reference.md#SENS_GPS0_OFFY) and [SENS_GPS0_OFFZ](../advanced_config/parameter_reference.md#SENS_GPS0_OFFZ).
- If the GPS module provides yaw information, you can enable GPS yaw fusion by setting bit 3 of [EKF2_GPS_CTRL](../advanced_config/parameter_reference.md#EKF2_GPS_CTRL) to true.
#### RTK GPS
diff --git a/docs/zh/dronecan/lights.md b/docs/zh/dronecan/lights.md
index 32d332be57..8cd2350398 100644
--- a/docs/zh/dronecan/lights.md
+++ b/docs/zh/dronecan/lights.md
@@ -42,7 +42,7 @@ Each function is represented by a value that defines two behaviours: one when th
| 6 | Status/Green | System status colour | 绿色 |
| 7 | Status/Off | System status colour | Off |
-备注:
+Notes:
- The [system status colours](../getting_started/led_meanings.md#ui-led) is the same LED pattern used by the flight controller's onboard status LED (e.g. red when disarmed, green when armed and ready).
- A fixed colour, commonly used to indicate aircraft orientation. For example it is a common convention to have a red light on the port side, green on starboard, or white to the rear.
diff --git a/docs/zh/esc/ark_4in1_esc.md b/docs/zh/esc/ark_4in1_esc.md
index 1706c00a24..2f3f5d1695 100644
--- a/docs/zh/esc/ark_4in1_esc.md
+++ b/docs/zh/esc/ark_4in1_esc.md
@@ -58,6 +58,18 @@ Other
- Open source AM32 firmware
- [DIU Blue Framework Listed](https://www.diu.mil/blue-uas/framework)
+## PX4 配置
+
+The ARK 4IN1 ESC supports DShot 300/600, Bidirectional DShot, and PWM input protocols.
+
+- **Bidirectional DShot**: Select BDShot300 or BDShot600 in the [Actuator Configuration](../config/actuators.md) to enable eRPM telemetry.
+- **[Extended DShot Telemetry (EDT)](https://github.com/bird-sanctuary/extended-dshot-telemetry)**: AM32 firmware supports EDT, which provides temperature, voltage, and current through the BDShot signal. Enable with `DSHOT_BIDIR_EDT=1`.
+- **AM32 EEPROM Settings**: Set `DSHOT_ESC_TYPE=1` to enable reading and writing ESC firmware settings via a ground station.
+
+See [DShot ESCs](../peripherals/dshot.md) for full setup details.
+
## 另见
- [ARK 4IN1 ESC CONS](https://docs.arkelectron.com/electronic-speed-controller/ark-4in1-esc) (ARK Docs)
+- [DShot and Bidirectional DShot](https://brushlesswhoop.com/dshot-and-bidirectional-dshot/) (brushlesswhoop.com - General DShot reference)
+- [Extended DShot Telemetry (EDT) Specification](https://github.com/bird-sanctuary/extended-dshot-telemetry) (bird-sanctuary)
diff --git a/docs/zh/flight_controller/autopilot_manufacturer_supported.md b/docs/zh/flight_controller/autopilot_manufacturer_supported.md
index 933fce7c24..09c7e99f9c 100644
--- a/docs/zh/flight_controller/autopilot_manufacturer_supported.md
+++ b/docs/zh/flight_controller/autopilot_manufacturer_supported.md
@@ -18,6 +18,7 @@ The boards in this category are:
- [ARK Electronics ARKV6X](../flight_controller/ark_v6x.md) (and [ARK Electronics Pixhawk Autopilot Bus Carrier](../flight_controller/ark_pab.md))
- [ARK FPV Flight Controller](../flight_controller/ark_fpv.md)
- [ARK Pi6X Flow Flight Controller](../flight_controller/ark_pi6x.md)
+- [CORVON 743v1](../flight_controller/corvon_743v1.md)
- [CUAV Nora](../flight_controller/cuav_nora.md) (CUAV X7 variant)
- [CUAV V5+](../flight_controller/cuav_v5_plus.md) (FMUv5)
- [CUAV V5 nano](../flight_controller/cuav_v5_nano.md) (FMUv5)
diff --git a/docs/zh/flight_controller/corvon_743v1.md b/docs/zh/flight_controller/corvon_743v1.md
new file mode 100644
index 0000000000..cc543ddbed
--- /dev/null
+++ b/docs/zh/flight_controller/corvon_743v1.md
@@ -0,0 +1,112 @@
+# CORVON 743v1
+
+
+
+:::warning
+PX4 does not manufacture this (or any) autopilot. Contact the manufacturer for hardware support or compliance issues.
+:::
+
+The _CORVON 743v1_ is a flight controller designed by Feikong Technology Co., Ltd under the CORVON brand.
+It features a powerful STM32H743 processor, dual high-performance IMUs (BMI088/BMI270), and an extensive array of interfaces.
+
+With its highly integrated 36x36mm footprint and 9g weight, and specialized interfaces like a direct plug-and-play DJI O3 Air Unit connector, this flight controller is optimized for space-constrained FPV builds and agile multirotors that require top-tier processing power and sensor redundancy.
+
+The board uses [Pixhawk Autopilot Standard Connections](https://docs.px4.io/main/en/flight_controller/autopilot_pixhawk_standard.html).
+
+
+
+:::info
+This flight controller is [manufacturer supported](../flight_controller/autopilot_manufacturer_supported.md).
+:::
+
+## 主要特性
+
+- **MCU:** STM32H743VIT6 MCU (32 Bit Arm® Cortex®-M7, 480MHz, 2MB Flash, 1MB RAM)
+- **IMU:** Bosch BMI088, BMI270 (Dual IMU redundancy)
+- **Barometer:** DPS310
+- **Magnetometer:** IST8310
+- **OSD:** Onboard AT7456E
+- **Interfaces:**
+ - 7x UARTs
+ - 1x CAN (UAVCAN)
+ - 1x I2C
+ - Dedicated RC Input (UART6)
+ - 10x PWM outputs (DShot & Bi-Directional DShot supported)
+ - Dedicated DJI O3 Air Unit connector
+- **Power:**
+ - 9V 3A BEC
+ - 5V 3A BEC
+ - ADC for battery voltage (up to 6S) and current monitoring
+
+## 购买渠道
+
+Order from [CORVON](https://corvon.tech).
+
+## Physical / Mechanical
+
+- **Mounting:** 30.5 x 30.5mm, Φ4mm
+- **Dimensions:** 36 x 36 x 8 mm
+- **Weight:** 9g
+
+## 产品规格
+
+### Processors & Sensors
+
+- **FMU Processor:** STM32H743
+ - 32 Bit Arm® Cortex®-M7, 480MHz
+ - 2MB Flash, 1MB RAM
+- **On-board Sensors:**
+ - Accel/Gyro: Bosch BMI088, BMI270
+ - Barometer: DPS310
+ - Compass: IST8310
+
+### Power Configuration
+
+The board has an internal voltage sensor and connections on the ESC connector for an external current sensor.
+
+- The voltage sensor handles up to 6S LiPo batteries.
+- Two onboard BECs provide robust peripheral power (9V 3A and 5V 3A).
+
+## Connectors & Pinouts
+
+The following image shows the port connection details, including RC, UARTs, CAN, I2C, SWD Debug, and VTX connections.
+
+
+
+### Standard Serial Port Mapping
+
+| UART | PX4 Target Config | Default Usage |
+| ------ | ----------------- | ------------- |
+| USART1 | TELEM1 | MAVLink |
+| UART4 | TELEM2 | MAVLink |
+| USART2 | GPS1 | GPS |
+| USART3 | TELEM3 | |
+| UART8 | URT6 | |
+| USART6 | RC | RC Input |
+| UART7 | TELEM4 | ESC Telemetry |
+
+### 调试接口
+
+The board features a **4-pin SWD Debug** interface located on the right side of the board. This includes `SWCLK`, `SWDIO`, `3V3`, and `GND` for full hardware debugging. While a dedicated UART isn't strictly reserved for the NSH console by default, the full-speed USB connection provides MAVLink Console access out of the box.
+
+### RC Input
+
+RC Input is mapped to **UART6** via the explicit `SBUS/CRSF` connector block.
+
+- It fully supports PX4's standard `RC_INPUT` module protocols.
+- The connector exposes both `RX6` and `TX6`, which makes it fully capable of bidirectional receiver protocols such as TBS Crossfire (CRSF), ELRS, and FPort, as well as traditional single-wire standards like SBUS (which operates inverted on RX6).
+
+## Building/Loading Firmware
+
+:::tip
+Most users will not need to build this firmware (from PX4 v1.18).
+It is pre-built and automatically installed by _QGroundControl_ when appropriate hardware is connected.
+:::
+
+To [build PX4](../dev_setup/building_px4.md) for this target from source:
+
+```sh
+make corvon_743v1_default
+```
+
+Initial firmware flashing can be done over USB via QGroundControl. The bootloader status aligns with standard generic PX4 LED indications (Red = Bootloader/Error, Blue = Active/Activity, Green = Powered).
diff --git a/docs/zh/flight_controller/cuav_pixhawk_v6x.md b/docs/zh/flight_controller/cuav_pixhawk_v6x.md
index 68436578a6..fd6fda8716 100644
--- a/docs/zh/flight_controller/cuav_pixhawk_v6x.md
+++ b/docs/zh/flight_controller/cuav_pixhawk_v6x.md
@@ -116,7 +116,7 @@ The [Pixhawk V6X Wiring Quick Start](../assembly/quick_start_cuav_pixhawk_v6x.md

-备注:
+Notes:
- The [camera capture pin](../camera/fc_connected_camera.md#camera-capture-configuration) (`PI0`) is pin 2 on the AD&IO port, marked above as `FMU_CAP1`.
diff --git a/docs/zh/flight_controller/nxp_mr_vmu_rt1176.md b/docs/zh/flight_controller/nxp_mr_vmu_rt1176.md
index 43de1a65f6..60e121c49d 100644
--- a/docs/zh/flight_controller/nxp_mr_vmu_rt1176.md
+++ b/docs/zh/flight_controller/nxp_mr_vmu_rt1176.md
@@ -174,7 +174,7 @@ _MR-VMU-RT1176_ connectors (following [Pixhawk Connector Standard](https://githu
[NXP MR-VMU-RT1176 Baseboard Pinout](https://nxp.gitbook.io/vmu-rt1176/pin-out) (nxp.gitbook.io)
-备注:
+Notes:
- The [camera capture pin](../camera/fc_connected_camera.md#camera-capture-configuration) (`PI0`) is pin 2 on the AD&IO port, marked above as `FMU_CAP1`.
diff --git a/docs/zh/flight_controller/pixhawk6x-rt.md b/docs/zh/flight_controller/pixhawk6x-rt.md
index 2591af9750..13171fd8b6 100644
--- a/docs/zh/flight_controller/pixhawk6x-rt.md
+++ b/docs/zh/flight_controller/pixhawk6x-rt.md
@@ -149,7 +149,7 @@ Sample Wiring Diagram
- [Holybro Pixhawk Baseboard Pinout](https://docs.holybro.com/autopilot/pixhawk-6x/pixhawk-baseboard-pinout)
- [Holybro Pixhawk Mini-Baseboard Pinout](https://docs.holybro.com/autopilot/pixhawk-6x/pixhawk-mini-baseboard-pinout)
-备注:
+Notes:
- The [camera capture pin](../camera/fc_connected_camera.md#camera-capture-configuration) (`PI0`) is pin 2 on the AD&IO port, marked above as `FMU_CAP1`.
diff --git a/docs/zh/flight_controller/pixhawk6x.md b/docs/zh/flight_controller/pixhawk6x.md
index 1d3c102188..e1948b6e28 100644
--- a/docs/zh/flight_controller/pixhawk6x.md
+++ b/docs/zh/flight_controller/pixhawk6x.md
@@ -180,7 +180,7 @@ Sample Wiring Diagram
- [Holybro Pixhawk Jetson Baseboard](https://docs.holybro.com/autopilot/pixhawk-baseboards/pixhawk-jetson-baseboard)
- [Holybro Pixhawk RPi CM4 Baseboard](https://docs.holybro.com/autopilot/pixhawk-baseboards/pixhawk-rpi-cm4-baseboard)
-备注:
+Notes:
- The [camera capture pin](../camera/fc_connected_camera.md#camera-capture-configuration) (`PI0`) is pin 2 on the AD&IO port, marked above as `FMU_CAP1`.
diff --git a/docs/zh/flight_controller/pixhawk6x_pro.md b/docs/zh/flight_controller/pixhawk6x_pro.md
index e4418437ad..0171a1000e 100644
--- a/docs/zh/flight_controller/pixhawk6x_pro.md
+++ b/docs/zh/flight_controller/pixhawk6x_pro.md
@@ -140,7 +140,7 @@ The [Pixhawk 6X Wiring Quick Start](../assembly/quick_start_pixhawk6x.md) provid
- [Holybro Pixhawk Jetson Baseboard](https://docs.holybro.com/autopilot/pixhawk-baseboards/pixhawk-jetson-baseboard)
- [Holybro Pixhawk RPi CM4 Baseboard](https://docs.holybro.com/autopilot/pixhawk-baseboards/pixhawk-rpi-cm4-baseboard)
-备注:
+Notes:
- The [camera capture pin](../camera/fc_connected_camera.md#camera-capture-configuration) (`PI0`) is pin 2 on the AD&IO port, marked above as `FMU_CAP1`.
diff --git a/docs/zh/flight_modes_mc/throw_launch.md b/docs/zh/flight_modes_mc/throw_launch.md
index d421442b5f..9d197198b7 100644
--- a/docs/zh/flight_modes_mc/throw_launch.md
+++ b/docs/zh/flight_modes_mc/throw_launch.md
@@ -22,7 +22,7 @@ The vehicle will not automatically disarm after arming, and must be manually dis
The vehicle detects that it has been thrown based on reaching a certain speed (5m/s), and then starts the motors at the apex of the throw (once it determines that it has started to fall).
You need to throw the vehicle high enough so that it can stabilize its height well before falling anywhere near people or obstacles.
-备注:
+Notes:
- The mode is disabled by default, and must be enabled using a [parameter](#parameters) before arming.
- When enabled you cannot take off from the ground using the normal modes.
diff --git a/docs/zh/flight_stack/controller_diagrams.md b/docs/zh/flight_stack/controller_diagrams.md
index 4c4c4c0865..6a6c7c7b7d 100644
--- a/docs/zh/flight_stack/controller_diagrams.md
+++ b/docs/zh/flight_stack/controller_diagrams.md
@@ -164,6 +164,42 @@ $$\dot{B} = \gamma - \frac{\dot{V_T}}{g}$$
## 固定翼姿态控制器
+### Setpoint modificaiton
+
+Most fixed-wing aircraft cannot generate a sustained yaw rate using the rudder alone. As a result, the yaw component of the quaternion attitude error should be removed before computing the control action.
+
+This is achieved by premultiplying the setpoint quaternion with a rotation about the global down axis. The additional rotation cancels the yaw component of the attitude error while preserving the roll and pitch components.
+
+The yaw offset is
+
+$$
+\psi =-2\frac{\hat{q}_0 q_3 - \hat{q}_1 q_2 + \hat{q}_2 q_1 -\hat{q}_3 q_0}
+{\hat{q}_0 q_0 - \hat{q}_1 q_1 - \hat{q}_2 q_2 + \hat{q}_3 q_3}
+$$
+
+The quaternion representing the yaw offset is
+
+$$
+ℚ_{\text{yaw}} =
+\operatorname{normalize}
+\left(
+\begin{bmatrix}
+1 \
+0 \
+0 \
+\frac{\psi}{2}
+\end{bmatrix}
+\right)
+$$
+
+The corrected setpoint quaternion is then obtained by applying the rotation
+
+$$
+ℚ_{\text{sp, corrected}} = ℚ_{\text{yaw}} \otimes ℚ_{sp}
+$$
+
+### Quaternion based attitude controller
+

diff --git a/docs/zh/frames_vtol/vtol_quadplane_volantex_ranger_ex_pixhawk.md b/docs/zh/frames_vtol/vtol_quadplane_volantex_ranger_ex_pixhawk.md
index d9611f4aad..1cf53ddf6d 100644
--- a/docs/zh/frames_vtol/vtol_quadplane_volantex_ranger_ex_pixhawk.md
+++ b/docs/zh/frames_vtol/vtol_quadplane_volantex_ranger_ex_pixhawk.md
@@ -100,7 +100,7 @@ like "sitting in the plane").
| AUX 2 | Right aileron |
| AUX 3 | Elevator |
| AUX 4 | Rudder |
-| AUX 5 | 油门 |
+| AUX 5 | Throttle |
:::info
The servo direction can be reversed using the PWM_REV parameters in the PWM_OUTPUT group of QGroundControl (cogwheel tab, last item in the left menu)
diff --git a/docs/zh/gps_compass/index.md b/docs/zh/gps_compass/index.md
index db76fd0208..04ce372395 100644
--- a/docs/zh/gps_compass/index.md
+++ b/docs/zh/gps_compass/index.md
@@ -64,7 +64,7 @@ PX4 also supports [Real Time Kinematic (RTK)](../gps_compass/rtk_gps.md) and **P
[Hb Micro M8N]: https://holybro.com/products/micro-m8n-gps
[CubePilot Here2]: ../gps_compass/gps_hex_here2.md
-备注:
+Notes:
- ✓ or a specific part number indicate that a features is supported, while ✘ or empty show that the feature is not supported.
"?" indicates "unknown".
diff --git a/docs/zh/gps_compass/rtk_gps.md b/docs/zh/gps_compass/rtk_gps.md
index 8b93f0761e..0c7ac61d8b 100644
--- a/docs/zh/gps_compass/rtk_gps.md
+++ b/docs/zh/gps_compass/rtk_gps.md
@@ -74,7 +74,7 @@ It also highlights devices that connect via the CAN bus, and those which support
[mosaic-G5 P3H]: https://www.septentrio.com/en/products/gnss-receivers/gnss-receiver-modules/mosaic-G5-P3H
[D10P]: https://docs.datagnss.com/gnss/gnss_module/D10P_RTK
-备注:
+Notes:
- ✓ or a specific part number indicate that a features is supported, while ✘ or empty show that the feature is not supported.
"?" indicates "unknown".
diff --git a/docs/zh/hardware/board_packaging.md b/docs/zh/hardware/board_packaging.md
new file mode 100644
index 0000000000..fb72bd8e9f
--- /dev/null
+++ b/docs/zh/hardware/board_packaging.md
@@ -0,0 +1,298 @@
+# Board Firmware Packaging
+
+PX4 supports building distributable firmware packages for Linux-based (POSIX) boards.
+While NuttX boards produce `.px4` firmware files that are flashed via QGroundControl, POSIX boards can produce `.deb` (Debian) packages that are installed using standard Linux package management tools (`dpkg`, `apt`).
+
+This page covers how manufacturers can add `.deb` packaging to their boards, with examples for both single-processor and multi-processor architectures.
+
+## 综述
+
+The packaging framework uses [CMake CPack](https://cmake.org/cmake/help/latest/module/CPack.html) with the DEB generator.
+It is built on two extension points in the PX4 build system:
+
+- **`boards///cmake/package.cmake`**: CPack variable overrides (package name, version, dependencies, architecture, maintainer info). Loaded during CMake configure.
+- **`boards///cmake/install.cmake`**: `install()` rules that define what goes into the package (binaries, scripts, config files, service files). Loaded from `platforms/posix/CMakeLists.txt` where build targets are available.
+
+When a board provides these files, CI automatically discovers and builds the `_deb` target alongside the normal firmware build.
+
+## Build Command
+
+For any board with packaging support:
+
+```sh
+make __deb
+```
+
+例如:
+
+```sh
+make modalai_voxl2_deb
+```
+
+This builds the `_default` configuration (and any companion builds for multi-processor boards), then runs `cpack -G DEB` in the build directory.
+The resulting `.deb` file is placed in `build/__default/`.
+
+## Adding Packaging to a Board
+
+### File Structure
+
+```
+boards///
+ cmake/
+ package.cmake # CPack configuration (required)
+ install.cmake # Install rules (required)
+ debian/
+ postinst # Post-install script (optional)
+ prerm # Pre-remove script (optional)
+ .service # Systemd unit file (optional)
+```
+
+### Step 1: CPack Configuration (package.cmake)
+
+This file sets CPack variables that control the `.deb` metadata.
+It is included from `cmake/package.cmake` after the base CPack defaults are configured.
+
+```cmake
+# boards///cmake/package.cmake
+
+# Derive Debian-compatible version from git tag
+# v1.17.0-alpha1-42-gabcdef -> 1.17.0~alpha1.42.gabcdef
+# v1.17.0 -> 1.17.0
+string(REGEX REPLACE "^v" "" _deb_ver "${PX4_GIT_TAG}")
+string(REGEX REPLACE "-" "~" _deb_ver "${_deb_ver}")
+string(REGEX REPLACE "~([0-9]+)~" ".\\1." _deb_ver "${_deb_ver}")
+
+# Target architecture (use the target arch, not the build host)
+set(CPACK_DEBIAN_ARCHITECTURE "arm64")
+
+# Package identity
+set(CPACK_DEBIAN_PACKAGE_NAME "my-px4-board")
+set(CPACK_DEBIAN_FILE_NAME "my-px4-board_${_deb_ver}_arm64.deb")
+
+# Install prefix
+set(CPACK_PACKAGING_INSTALL_PREFIX "/usr")
+set(CPACK_INSTALL_PREFIX "/usr")
+set(CPACK_SET_DESTDIR true)
+
+# Package metadata
+set(CPACK_DEBIAN_PACKAGE_DESCRIPTION "PX4 Autopilot for My Board")
+set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Vendor ")
+set(CPACK_DEBIAN_PACKAGE_DEPENDS "some-dependency (>= 1.0)")
+set(CPACK_DEBIAN_PACKAGE_CONFLICTS "")
+set(CPACK_DEBIAN_PACKAGE_REPLACES "")
+
+# Disable shlibdeps for cross-compiled boards
+set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS OFF)
+
+# Include post-install and pre-remove scripts (optional)
+set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA
+ "${PX4_BOARD_DIR}/debian/postinst;${PX4_BOARD_DIR}/debian/prerm")
+```
+
+**Key variables:**
+
+| Variable | Purpose |
+| -------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `CPACK_DEBIAN_ARCHITECTURE` | Target architecture. Set explicitly for cross-compiled boards since `dpkg --print-architecture` reports the build host, not the target. |
+| `CPACK_DEBIAN_PACKAGE_NAME` | Package name as it appears in `dpkg -l`. |
+| `CPACK_DEBIAN_FILE_NAME` | Output `.deb` filename. |
+| `CPACK_DEBIAN_PACKAGE_DEPENDS` | Runtime dependencies (comma-separated, Debian format). |
+| `CPACK_DEBIAN_PACKAGE_SHLIBDEPS` | Set to `OFF` for cross-compiled boards where `dpkg-shlibdeps` cannot inspect target binaries. |
+
+### Step 2: Install Rules (install.cmake)
+
+This file defines what files are packaged in the `.deb`.
+It is included from `platforms/posix/CMakeLists.txt` where the `px4` build target is available.
+
+All paths are relative to `CPACK_PACKAGING_INSTALL_PREFIX` (typically `/usr`). Use `../` to install outside the prefix (e.g., `../etc/` installs to `/etc/`).
+
+**Minimal example (single-processor board):**
+
+```cmake
+# boards///cmake/install.cmake
+
+# PX4 binary
+install(TARGETS px4 RUNTIME DESTINATION bin)
+
+# Module alias script (generated during build)
+install(PROGRAMS ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/px4-alias.sh DESTINATION bin)
+
+# Startup scripts
+install(PROGRAMS
+ ${PX4_BOARD_DIR}/target/my-px4-start
+ DESTINATION bin
+)
+
+# Configuration files
+install(FILES
+ ${PX4_BOARD_DIR}/target/my-config.conf
+ DESTINATION ../etc/my-board
+)
+
+# Systemd service
+install(FILES ${PX4_BOARD_DIR}/debian/my-px4.service
+ DESTINATION ../etc/systemd/system
+)
+
+# Component metadata
+install(FILES
+ ${PX4_BINARY_DIR}/actuators.json.xz
+ ${PX4_BINARY_DIR}/parameters.json.xz
+ DESTINATION ../data/px4/etc/extras
+ OPTIONAL
+)
+install(FILES ${PX4_BINARY_DIR}/events/all_events.json.xz
+ DESTINATION ../data/px4/etc/extras
+ OPTIONAL
+)
+```
+
+### Step 3: Debian Scripts (optional)
+
+#### postinst
+
+Runs after the package is installed. Common tasks:
+
+- Create `px4-*` module symlinks from `px4-alias.sh`
+- Set up required directories with correct ownership
+- Run `systemctl daemon-reload` to pick up the service file
+- Board-specific setup (e.g., DSP signature generation)
+
+```bash
+#!/bin/bash
+set -e
+
+# Create px4-* symlinks
+if [ -f /usr/bin/px4-alias.sh ]; then
+ grep "^alias " /usr/bin/px4-alias.sh | \
+ sed "s/alias \(px4-[a-zA-Z0-9_]*\)=.*/\1/" | while read cmd; do
+ ln -sf px4 "/usr/bin/${cmd}"
+ done
+fi
+
+# Create data directories
+mkdir -p /data/px4/param
+mkdir -p /data/px4/etc/extras
+
+# Reload systemd
+if command -v systemctl > /dev/null 2>&1; then
+ systemctl daemon-reload
+fi
+```
+
+#### prerm
+
+Runs before the package is removed:
+
+```bash
+#!/bin/bash
+set -e
+
+# Stop the service
+if command -v systemctl > /dev/null 2>&1; then
+ systemctl stop my-px4 2>/dev/null || true
+fi
+
+# Remove px4-* symlinks
+for f in /usr/bin/px4-*; do
+ if [ -L "$f" ] && [ "$(readlink "$f")" = "px4" ]; then
+ rm -f "$f"
+ fi
+done
+```
+
+Both scripts must be executable (`chmod +x`).
+
+## Multi-Processor Boards
+
+Some boards run PX4 across multiple processors, for example the ModalAI VOXL2 which has a POSIX apps processor (ARM) and a Hexagon DSP (SLPI).
+These produce two separate CMake builds, but the `.deb` must contain artifacts from both.
+
+### How It Works
+
+1. The `_default` build (POSIX/apps processor) owns the `.deb`.
+2. The Makefile `%_deb` target builds `_default`, which chains any companion builds as CMake prerequisites.
+3. The `install.cmake` pulls companion build artifacts via absolute path to the sibling build directory.
+4. CPack runs in the `_default` build tree and produces a single `.deb`.
+
+### Companion Build Artifacts
+
+In `install.cmake`, reference the companion build output by absolute path:
+
+```cmake
+# DSP firmware blob from companion SLPI build
+set(SLPI_BUILD_DIR "${PX4_SOURCE_DIR}/build/_-slpi_default")
+
+install(FILES ${SLPI_BUILD_DIR}/platforms/qurt/libpx4.so
+ DESTINATION lib/rfsa/adsp
+ OPTIONAL
+)
+```
+
+The `OPTIONAL` keyword allows the `.deb` to build even when the companion build hasn't run (useful for development/testing of just the apps-processor side).
+
+### VOXL2 Reference
+
+The VOXL2 board is a complete working example of multi-processor packaging:
+
+```
+boards/modalai/voxl2/
+ cmake/
+ package.cmake # CPack config: voxl-px4, arm64, deps, shlibdeps off
+ install.cmake # px4 binary, SLPI libpx4.so, scripts, configs, metadata
+ debian/
+ postinst # Symlinks, DSP signature, directory setup
+ prerm # Stop service, remove symlinks
+ voxl-px4.service # Systemd unit (after sscrpcd, restart on-failure)
+ target/
+ voxl-px4 # Main startup wrapper
+ voxl-px4-start # PX4 module startup script
+```
+
+The resulting `.deb` installs:
+
+| Path | Contents |
+| -------------------------------------- | ------------------------------------------------- |
+| `/usr/bin/px4` | Apps processor PX4 binary |
+| `/usr/bin/px4-alias.sh` | Module alias script |
+| `/usr/bin/voxl-px4` | Startup wrapper |
+| `/usr/bin/voxl-px4-start` | Module startup script |
+| `/usr/lib/rfsa/adsp/libpx4.so` | DSP firmware (from SLPI build) |
+| `/etc/modalai/*.config` | Board configuration files |
+| `/etc/systemd/system/voxl-px4.service` | Systemd service |
+| `/data/px4/etc/extras/*.json.xz` | Component metadata |
+
+## CI Integration
+
+### Automatic Discovery
+
+The CI system (`Tools/ci/generate_board_targets_json.py`) automatically discovers boards with `cmake/package.cmake` and adds a `__deb` target to the board's existing CI group.
+No manual CI configuration is needed.
+
+### Artifact Collection
+
+The `Tools/ci/package_build_artifacts.sh` script collects `.deb` files alongside `.px4` and `.elf` artifacts.
+On tagged releases, `.deb` files are uploaded to both S3 and GitHub Releases.
+
+## Version Format
+
+The `.deb` version is derived from `PX4_GIT_TAG` using Debian-compatible formatting:
+
+| Git Tag | Debian Version | 备注 |
+| --------------------------- | -------------------------- | --------------------------------------------------------- |
+| `v1.17.0` | `1.17.0` | Stable release |
+| `v1.17.0-beta1` | `1.17.0~beta1` | Pre-release (`~` sorts before release) |
+| `v1.17.0-alpha1-42-gabcdef` | `1.17.0~alpha1.42.gabcdef` | Development build |
+
+The `~` prefix in Debian versioning ensures pre-releases sort lower than the final release: `1.17.0~beta1 < 1.17.0`.
+
+## Checklist for New Boards
+
+1. Create `boards///cmake/package.cmake` with CPack variables
+2. Create `boards///cmake/install.cmake` with install rules
+3. (Optional) Create `boards///debian/postinst` and `prerm`
+4. (Optional) Create `boards///debian/.service`
+5. Test locally: `make __deb`
+6. Verify: `dpkg-deb --info build/__default/_*.deb`
+7. Verify: `dpkg-deb --contents build/__default/_*.deb`
+8. CI picks it up automatically on the next push
diff --git a/docs/zh/mavlink/index.md b/docs/zh/mavlink/index.md
index 09c7831cb9..719fe76871 100644
--- a/docs/zh/mavlink/index.md
+++ b/docs/zh/mavlink/index.md
@@ -9,6 +9,7 @@ It also links instructions for how you can add PX4 support for:
- [Adding Standard Messages](../mavlink/adding_messages.md)
- [Streaming MAVLink messages](../mavlink/streaming_messages.md)
+- [Configuring/Using MAVLink Profiles](../mavlink/mavlink_profiles.md)
- [Handling incoming MAVLink messages (and writing to a uORB topic)](../mavlink/receiving_messages.md)
- [Custom MAVLink Messages](../mavlink/custom_messages.md)
- [Message Signing](../mavlink/message_signing.md)
diff --git a/docs/zh/mavlink/mavlink_profiles.md b/docs/zh/mavlink/mavlink_profiles.md
new file mode 100644
index 0000000000..c95608ef27
--- /dev/null
+++ b/docs/zh/mavlink/mavlink_profiles.md
@@ -0,0 +1,67 @@
+# MAVLink Profiles
+
+A MAVLink _profile_ (also called a _mode_) defines a set of messages that can be streamed by default on a MAVLink channel and their rates.
+
+This section lists the profiles, and explains how they can be used and extended.
+
+## Available Profiles
+
+The available profiles (in source-code declaration order) are:
+
+- _Normal_ (`MAVLINK_MODE_NORMAL`): Set of messages for a GCS.
+- _Onboard_ (`MAVLINK_MODE_ONBOARD`): Set of messages for a companion computer on a fast link (such as Ethernet).
+- _Gimbal_ (`MAVLINK_MODE_GIMBAL`): Messages for a gimbal. Note this also enables message forwarding.
+- _External Vision_ (`MAVLINK_MODE_EXTVISION`): Messages for offboard vision systems.
+- _External Vision Minimal_ (`MAVLINK_MODE_EXTVISIONMIN`): Messages for offboard vision systems on slower links.
+- _OSD_ (`MAVLINK_MODE_OSD`): Set of messages for an OSD system.
+- _Magic_ (`MAVLINK_MODE_MAGIC`): No messages streamed by default. Used when configuring streaming dynamically via MAVLink.
+- _Custom_ (`MAVLINK_MODE_CUSTOM`): Same as `MAVLINK_MODE_MAGIC`.
+- _Config_ (`MAVLINK_MODE_CONFIG`): Set of messages for configuration interface, sent at higher rates. This is used, for example, to send the `MAVLINK_MODE_NORMAL` message set via USB to a GCS.
+- _Iridium_ (`MAVLINK_MODE_IRIDIUM`): Streams `HIGH_LATENCY2` message to an iridium satellite phone.
+- _Minimal_ (`MAVLINK_MODE_MINIMAL`): Minimal set of messages for use with a GCS on a poor telemetry link.
+- _Onboard Low Bandwidth_ (`MAVLINK_MODE_ONBOARD_LOW_BANDWIDTH`): Set of messages to be streamed to a companion computer for re-routing to a reduced-traffic link, such as a GCS.
+- _Low Bandwidth_ (`MAVLINK_MODE_LOW_BANDWIDTH`): Reduced message set for low bandwidth links.
+- _uAvionix_ (`MAVLINK_MODE_UAVIONIX`): Messages for a uAvionix ADS-B beacon.
+- _Distance Sensor_ (`MAVLINK_MODE_DISTANCE_SENSOR`): Streams distance sensor data at unlimited rate.
+
+:::tip
+The profile defines the _default_ messages and rates.
+A connected MAVLink system can still request the streams/rates it wants using [MAV_CMD_SET_MESSAGE_INTERVAL](https://mavlink.io/en/messages/common.html#MAV_CMD_SET_MESSAGE_INTERVAL).
+:::
+
+To find the exact messages in each profile, search for ` configure_streams_to_default` (or the above profile names) in [mavlink_main.cpp](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/mavlink/mavlink_main.cpp).
+
+## Assigning Profiles to Ports
+
+[MAVLink Peripherals](../peripherals/mavlink_peripherals.md) explains how to set up a port for communicating over MAVLink.
+This uses the concept of an abstract [MAVLink instance](../peripherals/mavlink_peripherals.md#mavlink-instances) which is then assigned to a serial port.
+
+The profile associated with a particular MAVLink instance is set using the associated `MAV_X_MODE` parameter:
+
+- [MAV_0_MODE](../advanced_config/parameter_reference.md#MAV_0_MODE)
+- [MAV_1_MODE](../advanced_config/parameter_reference.md#MAV_1_MODE)
+- [MAV_2_MODE](../advanced_config/parameter_reference.md#MAV_2_MODE)
+
+There are also dedicated profile parameters for ports that are not configured via MAVLink instances:
+
+- [USB_MAV_MODE](../advanced_config/parameter_reference.md#USB_MAV_MODE): Profile for the USB port (used when MAVLink is set or detected on USB).
+- [MAV_S_MODE](../advanced_config/parameter_reference.md#MAV_S_MODE): Profile for the internal SOM (System on Module) to FMU communication channel, used on boards where the FMU and companion computer are co-located on the same module.
+
+Note that not all profiles can necessarily be set on these ports.
+
+## Adding Messages to a Profile
+
+You can add messages to a profile in appropriate `case` switch in the [Mavlink::configure_streams_to_default(const char \*configure_single_stream)](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/mavlink/mavlink_main.cpp#L1430) method (see [mavlink_main.cpp](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/mavlink/mavlink_main.cpp)).
+
+If you're testing with a GCS over USB you might add the message to the `MAVLINK_MODE_CONFIG` case using the `configure_stream_local()` method.
+For example, to stream `BATTERY_STATUS_DEMO` at 5 Hz:
+
+```cpp
+ case MAVLINK_MODE_CONFIG: // USB
+ // Note: streams requiring low latency come first
+ ...
+ configure_stream_local("BATTERY_STATUS_DEMO", 5.0f);
+ ...
+```
+
+See [Streaming MAVLink Messages](streaming_messages.md) for a more detailed example.
diff --git a/docs/zh/mavlink/streaming_messages.md b/docs/zh/mavlink/streaming_messages.md
index 99589e4915..4e329a2dbb 100644
--- a/docs/zh/mavlink/streaming_messages.md
+++ b/docs/zh/mavlink/streaming_messages.md
@@ -4,7 +4,7 @@ This tutorial demonstrates how to stream a uORB message as a MAVLink message, an
## 综述
-[MAVLink messages](../middleware/mavlink.md) are streamed using a streaming class, derived from `MavlinkStream`, that has been added to the PX4 stream list.
+[MAVLink messages](../middleware/mavlink.md) are streamed using a streaming class, derived from `MavlinkStream`, that has been added to the [PX4 stream list](#add-the-new-class-to-the-streaming-list).
The class has framework methods that you implement so PX4 can get information it needs from the generated MAVLink message definition.
It also has a `send()` method that is called each time the message needs to be sent — you override this to copy information from a uORB subscription to the MAVLink message object that is to be sent.
@@ -190,15 +190,17 @@ Most streaming classes are very similar (see examples in [/src/modules/mavlink/s
:::
-Next we include our new class in [mavlink_messages.cpp](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/mavlink/mavlink_messages.cpp#L2193).
-Add the line below to the part of the file where all the other streams are included:
+### Add the new class to the streaming list
+
+Next we add our new class to the streaming list.
+
+First open [mavlink_messages.cpp](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/mavlink/mavlink_messages.cpp#L2193) and add the line below to the part of the file where all the other streams are included:
```cpp
#include "streams/BATTERY_STATUS_DEMO.hpp"
```
-Finally append the stream class to the `streams_list` at the bottom of
-[mavlink_messages.cpp](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/mavlink/mavlink_messages.cpp)
+Then append the stream class to the `streams_list` at the bottom of [mavlink_messages.cpp](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/mavlink/mavlink_messages.cpp)
```C
StreamListItem *streams_list[] = {
@@ -215,25 +217,12 @@ We cover that in the next sections.
## Streaming by Default
-The easiest way to stream your messages by default (as part of a build) is to add them to [mavlink_main.cpp](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/mavlink/mavlink_main.cpp) in the appropriate message group.
+The easiest way to stream your messages by default (as part of a build) is to add them to appropriate [MAVLink Profile](../mavlink/mavlink_profiles.md), such as `MAVLINK_MODE_NORMAL` if you're streaming to a GCS over WiFI, or `MAVLINK_MODE_OSD` for an OSD device.
-If you search in the file you'll find groups of messages defined in a switch statement:
+This is covered in [Adding Messages to a Profile](..//mavlink/mavlink_profiles.md#adding-messages-to-a-profile), but in summary you first open [mavlink_main.cpp](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/mavlink/mavlink_main.cpp), search for the method `Mavlink::configure_streams_to_default`, and then find the profile that you wish to update.
-- `MAVLINK_MODE_NORMAL`: Streamed to a GCS.
-- `MAVLINK_MODE_ONBOARD`: Streamed to a companion computer on a fast link, such as Ethernet
-- `MAVLINK_MODE_ONBOARD_LOW_BANDWIDTH`: Streamed to a companion computer for re-routing to a reduced-traffic link, such as a GCS.
-- `MAVLINK_MODE_GIMBAL`: Streamed to a gimbal
-- `MAVLINK_MODE_EXTVISION`: Streamed to an external vision system
-- `MAVLINK_MODE_EXTVISIONMIN`: Streamed to an external vision system on a slower link
-- `MAVLINK_MODE_OSD`: Streamed to an OSD, such as an FPV headset.
-- `MAVLINK_MODE_CUSTOM`: Stream nothing by default. Used when configuring streaming using MAVLink.
-- `MAVLINK_MODE_MAGIC`: Same as `MAVLINK_MODE_CUSTOM`
-- `MAVLINK_MODE_CONFIG`: Streaming over USB with higher rates than `MAVLINK_MODE_NORMAL`.
-- `MAVLINK_MODE_MINIMAL`: Stream a minimal set of messages. Normally used for poor telemetry links.
-- `MAVLINK_MODE_IRIDIUM`: Streamed to an iridium satellite phone
-
-Normally you'll be testing on a GCS, so you could just add the message to the `MAVLINK_MODE_NORMAL` case using the `configure_stream_local()` method.
-For example, to stream CA_TRAJECTORY at 5 Hz:
+If you're just testing on a GCS, you could add the message to the `MAVLINK_MODE_NORMAL` case using the `configure_stream_local()` method.
+For example, to stream `BATTERY_STATUS_DEMO` at 5 Hz:
```cpp
case MAVLINK_MODE_CONFIG: // USB
diff --git a/docs/zh/middleware/dds_topics.md b/docs/zh/middleware/dds_topics.md
index 22cfb860b3..b3727e8e44 100644
--- a/docs/zh/middleware/dds_topics.md
+++ b/docs/zh/middleware/dds_topics.md
@@ -96,203 +96,205 @@ They are not build into the module, and hence are neither published or subscribe
:::details
See messages
-- [FigureEightStatus](../msg_docs/FigureEightStatus.md)
+- [AdcReport](../msg_docs/AdcReport.md)
+- [ManualControlSwitches](../msg_docs/ManualControlSwitches.md)
+- [MountOrientation](../msg_docs/MountOrientation.md)
+- [AutotuneAttitudeControlStatus](../msg_docs/AutotuneAttitudeControlStatus.md)
+- [EstimatorEventFlags](../msg_docs/EstimatorEventFlags.md)
+- [InternalCombustionEngineStatus](../msg_docs/InternalCombustionEngineStatus.md)
- [VehicleGlobalPositionV0](../msg_docs/VehicleGlobalPositionV0.md)
-- [RoverRateStatus](../msg_docs/RoverRateStatus.md)
+- [ActuatorControlsStatus](../msg_docs/ActuatorControlsStatus.md)
+- [GpsDump](../msg_docs/GpsDump.md)
+- [FlightPhaseEstimation](../msg_docs/FlightPhaseEstimation.md)
+- [ActuatorArmed](../msg_docs/ActuatorArmed.md)
+- [EstimatorStates](../msg_docs/EstimatorStates.md)
+- [EscStatus](../msg_docs/EscStatus.md)
+- [SensorGnssRelative](../msg_docs/SensorGnssRelative.md)
+- [SensorTemp](../msg_docs/SensorTemp.md)
+- [VehicleImu](../msg_docs/VehicleImu.md)
+- [IridiumsbdStatus](../msg_docs/IridiumsbdStatus.md)
+- [LandingGearWheel](../msg_docs/LandingGearWheel.md)
+- [OrbitStatus](../msg_docs/OrbitStatus.md)
+- [GainCompression](../msg_docs/GainCompression.md)
+- [VehicleRoi](../msg_docs/VehicleRoi.md)
+- [Vtx](../msg_docs/Vtx.md)
+- [Px4ioStatus](../msg_docs/Px4ioStatus.md)
+- [EscEepromRead](../msg_docs/EscEepromRead.md)
+- [DebugArray](../msg_docs/DebugArray.md)
+- [FollowTarget](../msg_docs/FollowTarget.md)
- [ButtonEvent](../msg_docs/ButtonEvent.md)
- [ArmingCheckReplyV0](../msg_docs/ArmingCheckReplyV0.md)
-- [GpsInjectData](../msg_docs/GpsInjectData.md)
-- [SensorTemp](../msg_docs/SensorTemp.md)
-- [UavcanParameterValue](../msg_docs/UavcanParameterValue.md)
-- [SensorUwb](../msg_docs/SensorUwb.md)
-- [GpioRequest](../msg_docs/GpioRequest.md)
-- [OrbTestLarge](../msg_docs/OrbTestLarge.md)
-- [VehicleRoi](../msg_docs/VehicleRoi.md)
-- [EstimatorBias3d](../msg_docs/EstimatorBias3d.md)
-- [OrbTest](../msg_docs/OrbTest.md)
-- [GimbalManagerStatus](../msg_docs/GimbalManagerStatus.md)
-- [VehicleLocalPositionSetpoint](../msg_docs/VehicleLocalPositionSetpoint.md)
-- [WheelEncoders](../msg_docs/WheelEncoders.md)
-- [EstimatorAidSource2d](../msg_docs/EstimatorAidSource2d.md)
-- [DistanceSensorModeChangeRequest](../msg_docs/DistanceSensorModeChangeRequest.md)
-- [EstimatorSensorBias](../msg_docs/EstimatorSensorBias.md)
-- [ActuatorTest](../msg_docs/ActuatorTest.md)
-- [FailureDetectorStatus](../msg_docs/FailureDetectorStatus.md)
-- [VehicleAcceleration](../msg_docs/VehicleAcceleration.md)
-- [Mission](../msg_docs/Mission.md)
-- [EventV0](../msg_docs/EventV0.md)
-- [LaunchDetectionStatus](../msg_docs/LaunchDetectionStatus.md)
-- [PwmInput](../msg_docs/PwmInput.md)
-- [OpenDroneIdSelfId](../msg_docs/OpenDroneIdSelfId.md)
-- [TuneControl](../msg_docs/TuneControl.md)
-- [CameraStatus](../msg_docs/CameraStatus.md)
-- [TiltrotorExtraControls](../msg_docs/TiltrotorExtraControls.md)
-- [AutotuneAttitudeControlStatus](../msg_docs/AutotuneAttitudeControlStatus.md)
-- [SystemPower](../msg_docs/SystemPower.md)
-- [VehicleOpticalFlow](../msg_docs/VehicleOpticalFlow.md)
-- [VehicleConstraints](../msg_docs/VehicleConstraints.md)
-- [SensorGyroFft](../msg_docs/SensorGyroFft.md)
-- [VehicleMagnetometer](../msg_docs/VehicleMagnetometer.md)
-- [SensorPreflightMag](../msg_docs/SensorPreflightMag.md)
-- [HealthReport](../msg_docs/HealthReport.md)
-- [DebugKeyValue](../msg_docs/DebugKeyValue.md)
-- [ArmingCheckRequestV0](../msg_docs/ArmingCheckRequestV0.md)
-- [ActuatorServosTrim](../msg_docs/ActuatorServosTrim.md)
-- [EstimatorEventFlags](../msg_docs/EstimatorEventFlags.md)
-- [FollowTarget](../msg_docs/FollowTarget.md)
-- [DebugVect](../msg_docs/DebugVect.md)
-- [NavigatorStatus](../msg_docs/NavigatorStatus.md)
-- [DatamanRequest](../msg_docs/DatamanRequest.md)
-- [Vtx](../msg_docs/Vtx.md)
-- [RcParameterMap](../msg_docs/RcParameterMap.md)
-- [DifferentialPressure](../msg_docs/DifferentialPressure.md)
-- [QshellReq](../msg_docs/QshellReq.md)
-- [CameraTrigger](../msg_docs/CameraTrigger.md)
-- [LandingTargetInnovations](../msg_docs/LandingTargetInnovations.md)
-- [DatamanResponse](../msg_docs/DatamanResponse.md)
-- [HeaterStatus](../msg_docs/HeaterStatus.md)
-- [AdcReport](../msg_docs/AdcReport.md)
-- [GeofenceResult](../msg_docs/GeofenceResult.md)
-- [GimbalControls](../msg_docs/GimbalControls.md)
-- [SensorBaro](../msg_docs/SensorBaro.md)
-- [EstimatorGpsStatus](../msg_docs/EstimatorGpsStatus.md)
-- [RaptorStatus](../msg_docs/RaptorStatus.md)
-- [LedControl](../msg_docs/LedControl.md)
-- [CanInterfaceStatus](../msg_docs/CanInterfaceStatus.md)
-- [VehicleOpticalFlowVel](../msg_docs/VehicleOpticalFlowVel.md)
-- [IrlockReport](../msg_docs/IrlockReport.md)
-- [RadioStatus](../msg_docs/RadioStatus.md)
-- [FixedWingLateralGuidanceStatus](../msg_docs/FixedWingLateralGuidanceStatus.md)
-- [Airspeed](../msg_docs/Airspeed.md)
-- [DeviceInformation](../msg_docs/DeviceInformation.md)
-- [Px4ioStatus](../msg_docs/Px4ioStatus.md)
-- [PositionControllerLandingStatus](../msg_docs/PositionControllerLandingStatus.md)
-- [MagWorkerData](../msg_docs/MagWorkerData.md)
-- [MagnetometerBiasEstimate](../msg_docs/MagnetometerBiasEstimate.md)
-- [OpenDroneIdOperatorId](../msg_docs/OpenDroneIdOperatorId.md)
-- [PowerMonitor](../msg_docs/PowerMonitor.md)
-- [RcChannels](../msg_docs/RcChannels.md)
-- [GimbalManagerInformation](../msg_docs/GimbalManagerInformation.md)
-- [Rpm](../msg_docs/Rpm.md)
-- [VehicleImu](../msg_docs/VehicleImu.md)
-- [Gripper](../msg_docs/Gripper.md)
-- [VehicleLocalPositionV0](../msg_docs/VehicleLocalPositionV0.md)
-- [ParameterSetValueResponse](../msg_docs/ParameterSetValueResponse.md)
-- [PowerButtonState](../msg_docs/PowerButtonState.md)
-- [Ping](../msg_docs/Ping.md)
-- [TakeoffStatus](../msg_docs/TakeoffStatus.md)
-- [UavcanParameterRequest](../msg_docs/UavcanParameterRequest.md)
-- [GeneratorStatus](../msg_docs/GeneratorStatus.md)
-- [FixedWingRunwayControl](../msg_docs/FixedWingRunwayControl.md)
-- [ConfigOverridesV0](../msg_docs/ConfigOverridesV0.md)
-- [VehicleImuStatus](../msg_docs/VehicleImuStatus.md)
-- [VehicleStatusV0](../msg_docs/VehicleStatusV0.md)
-- [GimbalManagerSetAttitude](../msg_docs/GimbalManagerSetAttitude.md)
-- [OrbTestMedium](../msg_docs/OrbTestMedium.md)
-- [FollowTargetStatus](../msg_docs/FollowTargetStatus.md)
-- [DebugArray](../msg_docs/DebugArray.md)
-- [IridiumsbdStatus](../msg_docs/IridiumsbdStatus.md)
-- [BatteryStatusV0](../msg_docs/BatteryStatusV0.md)
-- [SatelliteInfo](../msg_docs/SatelliteInfo.md)
-- [RaptorInput](../msg_docs/RaptorInput.md)
-- [NeuralControl](../msg_docs/NeuralControl.md)
-- [VehicleCommandAckV0](../msg_docs/VehicleCommandAckV0.md)
-- [OpenDroneIdSystem](../msg_docs/OpenDroneIdSystem.md)
-- [VehicleAirData](../msg_docs/VehicleAirData.md)
-- [SensorGyro](../msg_docs/SensorGyro.md)
-- [GainCompression](../msg_docs/GainCompression.md)
-- [EscStatus](../msg_docs/EscStatus.md)
-- [ParameterUpdate](../msg_docs/ParameterUpdate.md)
-- [LogMessage](../msg_docs/LogMessage.md)
-- [RtlStatus](../msg_docs/RtlStatus.md)
-- [SensorAirflow](../msg_docs/SensorAirflow.md)
-- [GeofenceStatus](../msg_docs/GeofenceStatus.md)
-- [RateCtrlStatus](../msg_docs/RateCtrlStatus.md)
-- [GpsDump](../msg_docs/GpsDump.md)
-- [ActuatorControlsStatus](../msg_docs/ActuatorControlsStatus.md)
-- [ParameterSetValueRequest](../msg_docs/ParameterSetValueRequest.md)
-- [SensorMag](../msg_docs/SensorMag.md)
-- [LandingTargetPose](../msg_docs/LandingTargetPose.md)
-- [SensorGnssRelative](../msg_docs/SensorGnssRelative.md)
-- [YawEstimatorStatus](../msg_docs/YawEstimatorStatus.md)
-- [ParameterSetUsedRequest](../msg_docs/ParameterSetUsedRequest.md)
-- [RtlTimeEstimate](../msg_docs/RtlTimeEstimate.md)
-- [AirspeedWind](../msg_docs/AirspeedWind.md)
-- [NormalizedUnsignedSetpoint](../msg_docs/NormalizedUnsignedSetpoint.md)
-- [VehicleStatusV1](../msg_docs/VehicleStatusV1.md)
-- [FollowTargetEstimator](../msg_docs/FollowTargetEstimator.md)
-- [MountOrientation](../msg_docs/MountOrientation.md)
-- [ActionRequest](../msg_docs/ActionRequest.md)
-- [TrajectorySetpoint6dof](../msg_docs/TrajectorySetpoint6dof.md)
-- [TecsStatus](../msg_docs/TecsStatus.md)
-- [UlogStream](../msg_docs/UlogStream.md)
-- [RoverAttitudeStatus](../msg_docs/RoverAttitudeStatus.md)
-- [EscReport](../msg_docs/EscReport.md)
-- [DronecanNodeStatus](../msg_docs/DronecanNodeStatus.md)
-- [GimbalDeviceSetAttitude](../msg_docs/GimbalDeviceSetAttitude.md)
-- [SensorHygrometer](../msg_docs/SensorHygrometer.md)
-- [LandingGearWheel](../msg_docs/LandingGearWheel.md)
-- [SensorsStatusImu](../msg_docs/SensorsStatusImu.md)
-- [EstimatorInnovations](../msg_docs/EstimatorInnovations.md)
-- [MavlinkTunnel](../msg_docs/MavlinkTunnel.md)
-- [FuelTankStatus](../msg_docs/FuelTankStatus.md)
-- [TaskStackInfo](../msg_docs/TaskStackInfo.md)
-- [ActuatorArmed](../msg_docs/ActuatorArmed.md)
-- [HomePositionV0](../msg_docs/HomePositionV0.md)
-- [ControlAllocatorStatus](../msg_docs/ControlAllocatorStatus.md)
-- [Cpuload](../msg_docs/Cpuload.md)
-- [FixedWingLateralStatus](../msg_docs/FixedWingLateralStatus.md)
-- [InputRc](../msg_docs/InputRc.md)
-- [GpioConfig](../msg_docs/GpioConfig.md)
-- [RegisterExtComponentRequestV0](../msg_docs/RegisterExtComponentRequestV0.md)
-- [Ekf2Timestamps](../msg_docs/Ekf2Timestamps.md)
-- [GimbalDeviceInformation](../msg_docs/GimbalDeviceInformation.md)
-- [FlightPhaseEstimation](../msg_docs/FlightPhaseEstimation.md)
-- [InternalCombustionEngineControl](../msg_docs/InternalCombustionEngineControl.md)
-- [SensorGnssStatus](../msg_docs/SensorGnssStatus.md)
-- [ParameterResetRequest](../msg_docs/ParameterResetRequest.md)
-- [CameraCapture](../msg_docs/CameraCapture.md)
-- [MavlinkLog](../msg_docs/MavlinkLog.md)
-- [PositionControllerStatus](../msg_docs/PositionControllerStatus.md)
-- [SensorsStatus](../msg_docs/SensorsStatus.md)
-- [VehicleAngularVelocity](../msg_docs/VehicleAngularVelocity.md)
-- [RegisterExtComponentReplyV0](../msg_docs/RegisterExtComponentReplyV0.md)
-- [EstimatorStatus](../msg_docs/EstimatorStatus.md)
-- [EstimatorAidSource1d](../msg_docs/EstimatorAidSource1d.md)
-- [SensorGyroFifo](../msg_docs/SensorGyroFifo.md)
-- [EstimatorAidSource3d](../msg_docs/EstimatorAidSource3d.md)
-- [ManualControlSwitches](../msg_docs/ManualControlSwitches.md)
-- [GimbalManagerSetManualControl](../msg_docs/GimbalManagerSetManualControl.md)
-- [SensorCorrection](../msg_docs/SensorCorrection.md)
-- [AirspeedValidatedV0](../msg_docs/AirspeedValidatedV0.md)
-- [OrbitStatus](../msg_docs/OrbitStatus.md)
-- [GpioOut](../msg_docs/GpioOut.md)
-- [GpioIn](../msg_docs/GpioIn.md)
-- [DebugValue](../msg_docs/DebugValue.md)
-- [PositionSetpoint](../msg_docs/PositionSetpoint.md)
-- [PurePursuitStatus](../msg_docs/PurePursuitStatus.md)
-- [SensorAccelFifo](../msg_docs/SensorAccelFifo.md)
-- [EstimatorSelectorStatus](../msg_docs/EstimatorSelectorStatus.md)
-- [SensorSelection](../msg_docs/SensorSelection.md)
-- [LoggerStatus](../msg_docs/LoggerStatus.md)
-- [EstimatorBias](../msg_docs/EstimatorBias.md)
-- [BatteryInfo](../msg_docs/BatteryInfo.md)
-- [EstimatorStates](../msg_docs/EstimatorStates.md)
- [VehicleAttitudeSetpointV0](../msg_docs/VehicleAttitudeSetpointV0.md)
-- [UlogStreamAck](../msg_docs/UlogStreamAck.md)
-- [CellularStatus](../msg_docs/CellularStatus.md)
-- [RoverSpeedStatus](../msg_docs/RoverSpeedStatus.md)
+- [GimbalDeviceInformation](../msg_docs/GimbalDeviceInformation.md)
+- [CanInterfaceStatus](../msg_docs/CanInterfaceStatus.md)
+- [MavlinkLog](../msg_docs/MavlinkLog.md)
+- [PowerMonitor](../msg_docs/PowerMonitor.md)
+- [TecsStatus](../msg_docs/TecsStatus.md)
+- [OpenDroneIdSelfId](../msg_docs/OpenDroneIdSelfId.md)
- [SensorAccel](../msg_docs/SensorAccel.md)
-- [InternalCombustionEngineStatus](../msg_docs/InternalCombustionEngineStatus.md)
-- [PpsCapture](../msg_docs/PpsCapture.md)
-- [VehicleAngularAccelerationSetpoint](../msg_docs/VehicleAngularAccelerationSetpoint.md)
-- [VelocityLimits](../msg_docs/VelocityLimits.md)
-- [Event](../msg_docs/Event.md)
-- [OpenDroneIdArmStatus](../msg_docs/OpenDroneIdArmStatus.md)
-- [QshellRetval](../msg_docs/QshellRetval.md)
+- [RaptorStatus](../msg_docs/RaptorStatus.md)
+- [VehicleStatusV1](../msg_docs/VehicleStatusV1.md)
+- [SensorAccelFifo](../msg_docs/SensorAccelFifo.md)
+- [CameraStatus](../msg_docs/CameraStatus.md)
+- [RcParameterMap](../msg_docs/RcParameterMap.md)
+- [UavcanParameterValue](../msg_docs/UavcanParameterValue.md)
+- [DifferentialPressure](../msg_docs/DifferentialPressure.md)
+- [SensorHygrometer](../msg_docs/SensorHygrometer.md)
+- [BatteryStatusV0](../msg_docs/BatteryStatusV0.md)
+- [CameraTrigger](../msg_docs/CameraTrigger.md)
+- [HomePositionV0](../msg_docs/HomePositionV0.md)
+- [GeneratorStatus](../msg_docs/GeneratorStatus.md)
+- [TiltrotorExtraControls](../msg_docs/TiltrotorExtraControls.md)
+- [GimbalManagerSetManualControl](../msg_docs/GimbalManagerSetManualControl.md)
+- [EstimatorAidSource3d](../msg_docs/EstimatorAidSource3d.md)
+- [PwmInput](../msg_docs/PwmInput.md)
+- [MagnetometerBiasEstimate](../msg_docs/MagnetometerBiasEstimate.md)
+- [SensorGyroFifo](../msg_docs/SensorGyroFifo.md)
+- [OrbTestMedium](../msg_docs/OrbTestMedium.md)
+- [NormalizedUnsignedSetpoint](../msg_docs/NormalizedUnsignedSetpoint.md)
+- [SensorsStatusImu](../msg_docs/SensorsStatusImu.md)
+- [GpsInjectData](../msg_docs/GpsInjectData.md)
+- [FollowTargetEstimator](../msg_docs/FollowTargetEstimator.md)
+- [EstimatorAidSource2d](../msg_docs/EstimatorAidSource2d.md)
- [MissionResult](../msg_docs/MissionResult.md)
-- [ActuatorOutputs](../msg_docs/ActuatorOutputs.md)
+- [VehicleImuStatus](../msg_docs/VehicleImuStatus.md)
+- [VehicleLocalPositionV0](../msg_docs/VehicleLocalPositionV0.md)
+- [InputRc](../msg_docs/InputRc.md)
+- [LandingTargetPose](../msg_docs/LandingTargetPose.md)
+- [VehicleAngularAccelerationSetpoint](../msg_docs/VehicleAngularAccelerationSetpoint.md)
- [NavigatorMissionItem](../msg_docs/NavigatorMissionItem.md)
+- [LoggerStatus](../msg_docs/LoggerStatus.md)
+- [OpenDroneIdOperatorId](../msg_docs/OpenDroneIdOperatorId.md)
+- [ActuatorServosTrim](../msg_docs/ActuatorServosTrim.md)
+- [RaptorInput](../msg_docs/RaptorInput.md)
+- [OpenDroneIdSystem](../msg_docs/OpenDroneIdSystem.md)
+- [ActuatorTest](../msg_docs/ActuatorTest.md)
+- [RegisterExtComponentRequestV0](../msg_docs/RegisterExtComponentRequestV0.md)
+- [EstimatorSensorBias](../msg_docs/EstimatorSensorBias.md)
+- [SensorGnssStatus](../msg_docs/SensorGnssStatus.md)
+- [VehicleStatusV0](../msg_docs/VehicleStatusV0.md)
+- [GimbalDeviceSetAttitude](../msg_docs/GimbalDeviceSetAttitude.md)
+- [ConfigOverridesV0](../msg_docs/ConfigOverridesV0.md)
+- [UavcanParameterRequest](../msg_docs/UavcanParameterRequest.md)
+- [SatelliteInfo](../msg_docs/SatelliteInfo.md)
+- [SystemPower](../msg_docs/SystemPower.md)
+- [ParameterUpdate](../msg_docs/ParameterUpdate.md)
+- [LaunchDetectionStatus](../msg_docs/LaunchDetectionStatus.md)
+- [RadioStatus](../msg_docs/RadioStatus.md)
+- [QshellRetval](../msg_docs/QshellRetval.md)
+- [PositionSetpoint](../msg_docs/PositionSetpoint.md)
+- [Gripper](../msg_docs/Gripper.md)
+- [EscReport](../msg_docs/EscReport.md)
+- [DebugKeyValue](../msg_docs/DebugKeyValue.md)
+- [SensorGyroFft](../msg_docs/SensorGyroFft.md)
+- [TaskStackInfo](../msg_docs/TaskStackInfo.md)
+- [VehicleOpticalFlow](../msg_docs/VehicleOpticalFlow.md)
+- [BatteryInfo](../msg_docs/BatteryInfo.md)
+- [ParameterSetValueRequest](../msg_docs/ParameterSetValueRequest.md)
+- [PositionControllerStatus](../msg_docs/PositionControllerStatus.md)
+- [GeofenceResult](../msg_docs/GeofenceResult.md)
+- [DistanceSensorModeChangeRequest](../msg_docs/DistanceSensorModeChangeRequest.md)
+- [EstimatorStatus](../msg_docs/EstimatorStatus.md)
+- [ArmingCheckRequestV0](../msg_docs/ArmingCheckRequestV0.md)
+- [EstimatorInnovations](../msg_docs/EstimatorInnovations.md)
+- [QshellReq](../msg_docs/QshellReq.md)
+- [VehicleAcceleration](../msg_docs/VehicleAcceleration.md)
+- [RoverAttitudeStatus](../msg_docs/RoverAttitudeStatus.md)
+- [DatamanRequest](../msg_docs/DatamanRequest.md)
+- [GeofenceStatus](../msg_docs/GeofenceStatus.md)
+- [FuelTankStatus](../msg_docs/FuelTankStatus.md)
+- [DebugValue](../msg_docs/DebugValue.md)
+- [WheelEncoders](../msg_docs/WheelEncoders.md)
+- [EstimatorBias](../msg_docs/EstimatorBias.md)
+- [VelocityLimits](../msg_docs/VelocityLimits.md)
+- [LandingTargetInnovations](../msg_docs/LandingTargetInnovations.md)
+- [GimbalManagerSetAttitude](../msg_docs/GimbalManagerSetAttitude.md)
+- [InternalCombustionEngineControl](../msg_docs/InternalCombustionEngineControl.md)
+- [TrajectorySetpoint6dof](../msg_docs/TrajectorySetpoint6dof.md)
+- [AirspeedWind](../msg_docs/AirspeedWind.md)
+- [VehicleOpticalFlowVel](../msg_docs/VehicleOpticalFlowVel.md)
- [HoverThrustEstimate](../msg_docs/HoverThrustEstimate.md)
+- [SensorCorrection](../msg_docs/SensorCorrection.md)
+- [SensorsStatus](../msg_docs/SensorsStatus.md)
+- [EstimatorGpsStatus](../msg_docs/EstimatorGpsStatus.md)
+- [FixedWingLateralStatus](../msg_docs/FixedWingLateralStatus.md)
+- [YawEstimatorStatus](../msg_docs/YawEstimatorStatus.md)
+- [GimbalManagerInformation](../msg_docs/GimbalManagerInformation.md)
+- [GpioRequest](../msg_docs/GpioRequest.md)
+- [SensorSelection](../msg_docs/SensorSelection.md)
+- [SensorUwb](../msg_docs/SensorUwb.md)
+- [Ekf2Timestamps](../msg_docs/Ekf2Timestamps.md)
+- [HealthReport](../msg_docs/HealthReport.md)
+- [NavigatorStatus](../msg_docs/NavigatorStatus.md)
+- [PositionControllerLandingStatus](../msg_docs/PositionControllerLandingStatus.md)
+- [LedControl](../msg_docs/LedControl.md)
+- [Event](../msg_docs/Event.md)
+- [SensorMag](../msg_docs/SensorMag.md)
+- [VehicleMagnetometer](../msg_docs/VehicleMagnetometer.md)
+- [Rpm](../msg_docs/Rpm.md)
+- [VehicleLocalPositionSetpoint](../msg_docs/VehicleLocalPositionSetpoint.md)
+- [EscEepromWrite](../msg_docs/EscEepromWrite.md)
+- [ControlAllocatorStatus](../msg_docs/ControlAllocatorStatus.md)
+- [AirspeedValidatedV0](../msg_docs/AirspeedValidatedV0.md)
+- [ActionRequest](../msg_docs/ActionRequest.md)
+- [MavlinkTunnel](../msg_docs/MavlinkTunnel.md)
+- [TakeoffStatus](../msg_docs/TakeoffStatus.md)
+- [PowerButtonState](../msg_docs/PowerButtonState.md)
+- [EstimatorSelectorStatus](../msg_docs/EstimatorSelectorStatus.md)
+- [PurePursuitStatus](../msg_docs/PurePursuitStatus.md)
+- [RtlStatus](../msg_docs/RtlStatus.md)
+- [Airspeed](../msg_docs/Airspeed.md)
+- [VehicleCommandAckV0](../msg_docs/VehicleCommandAckV0.md)
+- [GimbalControls](../msg_docs/GimbalControls.md)
+- [FixedWingRunwayControl](../msg_docs/FixedWingRunwayControl.md)
+- [PpsCapture](../msg_docs/PpsCapture.md)
+- [FailureDetectorStatus](../msg_docs/FailureDetectorStatus.md)
+- [SensorBaro](../msg_docs/SensorBaro.md)
+- [UlogStreamAck](../msg_docs/UlogStreamAck.md)
+- [DronecanNodeStatus](../msg_docs/DronecanNodeStatus.md)
+- [FollowTargetStatus](../msg_docs/FollowTargetStatus.md)
+- [ParameterSetUsedRequest](../msg_docs/ParameterSetUsedRequest.md)
+- [SensorAirflow](../msg_docs/SensorAirflow.md)
+- [GpioConfig](../msg_docs/GpioConfig.md)
+- [UlogStream](../msg_docs/UlogStream.md)
+- [GpioIn](../msg_docs/GpioIn.md)
+- [TuneControl](../msg_docs/TuneControl.md)
+- [MagWorkerData](../msg_docs/MagWorkerData.md)
+- [EventV0](../msg_docs/EventV0.md)
+- [ParameterSetValueResponse](../msg_docs/ParameterSetValueResponse.md)
+- [SensorGyro](../msg_docs/SensorGyro.md)
+- [VehicleAngularVelocity](../msg_docs/VehicleAngularVelocity.md)
+- [HeaterStatus](../msg_docs/HeaterStatus.md)
+- [Mission](../msg_docs/Mission.md)
+- [GimbalManagerStatus](../msg_docs/GimbalManagerStatus.md)
+- [RateCtrlStatus](../msg_docs/RateCtrlStatus.md)
+- [VehicleConstraints](../msg_docs/VehicleConstraints.md)
+- [ActuatorOutputs](../msg_docs/ActuatorOutputs.md)
+- [DeviceInformation](../msg_docs/DeviceInformation.md)
+- [OpenDroneIdArmStatus](../msg_docs/OpenDroneIdArmStatus.md)
+- [DatamanResponse](../msg_docs/DatamanResponse.md)
+- [DebugVect](../msg_docs/DebugVect.md)
+- [RoverSpeedStatus](../msg_docs/RoverSpeedStatus.md)
+- [VehicleAirData](../msg_docs/VehicleAirData.md)
+- [RtlTimeEstimate](../msg_docs/RtlTimeEstimate.md)
+- [RegisterExtComponentReplyV0](../msg_docs/RegisterExtComponentReplyV0.md)
+- [NeuralControl](../msg_docs/NeuralControl.md)
+- [FixedWingLateralGuidanceStatus](../msg_docs/FixedWingLateralGuidanceStatus.md)
+- [FigureEightStatus](../msg_docs/FigureEightStatus.md)
+- [GpioOut](../msg_docs/GpioOut.md)
+- [EstimatorAidSource1d](../msg_docs/EstimatorAidSource1d.md)
+- [LogMessage](../msg_docs/LogMessage.md)
+- [Cpuload](../msg_docs/Cpuload.md)
+- [EstimatorBias3d](../msg_docs/EstimatorBias3d.md)
+- [SensorPreflightMag](../msg_docs/SensorPreflightMag.md)
+- [CameraCapture](../msg_docs/CameraCapture.md)
+- [OrbTestLarge](../msg_docs/OrbTestLarge.md)
+- [ParameterResetRequest](../msg_docs/ParameterResetRequest.md)
+- [OrbTest](../msg_docs/OrbTest.md)
+- [Ping](../msg_docs/Ping.md)
+- [RoverRateStatus](../msg_docs/RoverRateStatus.md)
+- [IrlockReport](../msg_docs/IrlockReport.md)
+- [RcChannels](../msg_docs/RcChannels.md)
+- [CellularStatus](../msg_docs/CellularStatus.md)
:::
diff --git a/docs/zh/modules/modules_driver.md b/docs/zh/modules/modules_driver.md
index 2190ddcb74..d46c8be281 100644
--- a/docs/zh/modules/modules_driver.md
+++ b/docs/zh/modules/modules_driver.md
@@ -191,28 +191,13 @@ Source: [drivers/dshot](https://github.com/PX4/PX4-Autopilot/tree/main/src/drive
### 描述
-This is the DShot output driver. It is similar to the fmu driver, and can be used as drop-in replacement
+This is the DShot output driver. It can be used as drop-in replacement
to use DShot as ESC communication protocol instead of PWM.
-On startup, the module tries to occupy all available pins for DShot output.
-It skips all pins already in use (e.g. by a camera trigger module).
-
It supports:
- DShot150, DShot300, DShot600
- telemetry via separate UART and publishing as esc_status message
-- sending DShot commands via CLI
-
-### 示例
-
-Permanently reverse motor 1:
-
-```
-dshot reverse -m 1
-dshot save -m 1
-```
-
-After saving, the reversed direction will be regarded as the normal one. So to reverse again repeat the same commands.
### Usage {#dshot_usage}
@@ -226,36 +211,6 @@ dshot [arguments...]
values:
[-x] Swap RX/TX pins
- reverse Reverse motor direction
- [-m ] Motor index (1-based, default=all)
-
- normal Normal motor direction
- [-m ] Motor index (1-based, default=all)
-
- save Save current settings
- [-m ] Motor index (1-based, default=all)
-
- 3d_on Enable 3D mode
- [-m ] Motor index (1-based, default=all)
-
- 3d_off Disable 3D mode
- [-m ] Motor index (1-based, default=all)
-
- beep1 Send Beep pattern 1
- [-m ] Motor index (1-based, default=all)
-
- beep2 Send Beep pattern 2
- [-m ] Motor index (1-based, default=all)
-
- beep3 Send Beep pattern 3
- [-m ] Motor index (1-based, default=all)
-
- beep4 Send Beep pattern 4
- [-m ] Motor index (1-based, default=all)
-
- beep5 Send Beep pattern 5
- [-m ] Motor index (1-based, default=all)
-
stop
status print status info
@@ -1109,7 +1064,7 @@ px4io [arguments...]
## rgbled
-Source: [drivers/lights/rgbled_ncp5623c](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/lights/rgbled_ncp5623c)
+Source: [drivers/lights/rgbled](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/lights/rgbled)
### Usage {#rgbled_usage}
@@ -1124,9 +1079,7 @@ rgbled [arguments...]
[-f ] bus frequency in kHz
[-q] quiet startup (no message if no device found)
[-a ] I2C address
- default: 57
- [-o ] RGB PWM Assignment
- default: 123
+ default: 85
stop
diff --git a/docs/zh/msg_docs/EscEepromRead.md b/docs/zh/msg_docs/EscEepromRead.md
new file mode 100644
index 0000000000..a2a63b64ef
--- /dev/null
+++ b/docs/zh/msg_docs/EscEepromRead.md
@@ -0,0 +1,42 @@
+---
+pageClass: is-wide-page
+---
+
+# EscEepromRead (UORB message)
+
+**TOPICS:** esc_eeprom_read
+
+## Fields
+
+| 参数名 | 类型 | Unit [Frame] | Range/Enum | 描述 |
+| --------- | ----------- | ---------------------------------------------------------------- | ---------- | -------------------------------------------------------------------------------------------- |
+| timestamp | `uint64` | us | | Time since system start |
+| firmware | `uint8` | | | ESC firmware type (see ESC_FIRMWARE enum in MAVLink) |
+| index | `uint8` | | | Index of the ESC (0 = ESC1, 1 = ESC2, etc.) |
+| length | `uint16` | | | Length of valid data |
+| data | `uint8[48]` | | | Raw ESC EEPROM data |
+
+## Constants
+
+| 参数名 | 类型 | 值 | 描述 |
+| ----------------------------------------------------------------------------------------- | ------- | - | -------------------------------- |
+| ORB_QUEUE_LENGTH | `uint8` | 8 | To support 8 queued up responses |
+
+## Source Message
+
+[Source file (GitHub)](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EscEepromRead.msg)
+
+:::details
+Click here to see original file
+
+```c
+uint64 timestamp # [us] Time since system start
+uint8 firmware # [-] ESC firmware type (see ESC_FIRMWARE enum in MAVLink)
+uint8 index # [-] Index of the ESC (0 = ESC1, 1 = ESC2, etc.)
+uint16 length # [-] Length of valid data
+uint8[48] data # [-] Raw ESC EEPROM data
+
+uint8 ORB_QUEUE_LENGTH = 8 # To support 8 queued up responses
+```
+
+:::
diff --git a/docs/zh/msg_docs/EscEepromWrite.md b/docs/zh/msg_docs/EscEepromWrite.md
new file mode 100644
index 0000000000..8479a86020
--- /dev/null
+++ b/docs/zh/msg_docs/EscEepromWrite.md
@@ -0,0 +1,44 @@
+---
+pageClass: is-wide-page
+---
+
+# EscEepromWrite (UORB message)
+
+**TOPICS:** esc_eeprom_write
+
+## Fields
+
+| 参数名 | 类型 | Unit [Frame] | Range/Enum | 描述 |
+| ------------------------------- | ----------- | ---------------------------------------------------------------- | ---------- | ----------------------------------------------------------------------------------------------------- |
+| timestamp | `uint64` | us | | Time since system start |
+| firmware | `uint8` | | | ESC firmware type (see ESC_FIRMWARE enum in MAVLink) |
+| index | `uint8` | | | Index of the ESC (0 = ESC1, 1 = ESC2, etc, 255 = All) |
+| length | `uint16` | | | Length of valid data |
+| data | `uint8[48]` | | | Raw ESC EEPROM data |
+| write_mask | `uint32[2]` | | | Bitmask indicating which bytes in the data array should be written (max 48 values) |
+
+## Constants
+
+| 参数名 | 类型 | 值 | 描述 |
+| ----------------------------------------------------------------------------------------- | ------- | - | ------------------------------- |
+| ORB_QUEUE_LENGTH | `uint8` | 8 | To support 8 queued up requests |
+
+## Source Message
+
+[Source file (GitHub)](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EscEepromWrite.msg)
+
+:::details
+Click here to see original file
+
+```c
+uint64 timestamp # [us] Time since system start
+uint8 firmware # [-] ESC firmware type (see ESC_FIRMWARE enum in MAVLink)
+uint8 index # [-] Index of the ESC (0 = ESC1, 1 = ESC2, etc, 255 = All)
+uint16 length # [-] Length of valid data
+uint8[48] data # [-] Raw ESC EEPROM data
+uint32[2] write_mask # [-] Bitmask indicating which bytes in the data array should be written (max 48 values)
+
+uint8 ORB_QUEUE_LENGTH = 8 # To support 8 queued up requests
+```
+
+:::
diff --git a/docs/zh/msg_docs/EscReport.md b/docs/zh/msg_docs/EscReport.md
index 5ca85212da..59f4aaeec6 100644
--- a/docs/zh/msg_docs/EscReport.md
+++ b/docs/zh/msg_docs/EscReport.md
@@ -8,39 +8,44 @@ pageClass: is-wide-page
## Fields
-| 参数名 | 类型 | Unit [Frame] | Range/Enum | 描述 |
-| -------------------------------------- | --------- | ---------------------------------------------------------------- | ---------- | -------------------------------------------------------------------------------------------------------------------- |
-| timestamp | `uint64` | | | time since system start (microseconds) |
-| esc_errorcount | `uint32` | | | Number of reported errors by ESC - if supported |
-| esc_rpm | `int32` | | | Motor RPM, negative for reverse rotation [RPM] - if supported |
-| esc_voltage | `float32` | | | Voltage measured from current ESC [V] - if supported |
-| esc_current | `float32` | | | Current measured from current ESC [A] - if supported |
-| esc_temperature | `float32` | | | Temperature measured from current ESC [degC] - if supported |
-| motor_temperature | `int16` | | | Temperature measured from current motor [degC] - if supported |
-| esc_address | `uint8` | | | Address of current ESC (in most cases 1-8 / must be set by driver) |
-| esc_cmdcount | `uint8` | | | Counter of number of commands |
-| esc_state | `uint8` | | | State of ESC - depend on Vendor |
-| actuator_function | `uint8` | | | actuator output function (one of Motor1...MotorN) |
-| failures | `uint16` | | | Bitmask to indicate the internal ESC faults |
-| esc_power | `int8` | | | Applied power 0-100 in % (negative values reserved) |
+| 参数名 | 类型 | Unit [Frame] | Range/Enum | 描述 |
+| -------------------------------------- | --------- | ---------------------------------------------------------------- | ----------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
+| timestamp | `uint64` | us | | Time since system start |
+| esc_errorcount | `uint32` | | | Number of reported errors by ESC - if supported |
+| esc_rpm | `int32` | rpm | | Motor RPM, negative for reverse rotation - if supported |
+| esc_voltage | `float32` | V | | Voltage measured from current ESC - if supported |
+| esc_current | `float32` | A | | Current measured from current ESC - if supported |
+| esc_temperature | `float32` | degC | | Temperature measured from current ESC - if supported |
+| motor_temperature | `int16` | degC | | Temperature measured from current motor - if supported |
+| esc_state | `uint8` | | | State of ESC - depend on Vendor |
+| actuator_function | `uint8` | | | Actuator output function (one of Motor1...MotorN) |
+| failures | `uint16` | | [FAILURE](#FAILURE) | Bitmask to indicate the internal ESC faults |
+| esc_power | `int8` | % | [0 : 100] | Applied power (negative values reserved) |
+
+## Enums
+
+### FAILURE {#FAILURE}
+
+| 参数名 | 类型 | 值 | 描述 |
+| ------------------------------------------------------------------------------------------------------------------------------------------ | ------- | - | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
+| FAILURE_OVER_CURRENT | `uint8` | 0 | (1 << 0) |
+| FAILURE_OVER_VOLTAGE | `uint8` | 1 | (1 << 1) |
+| FAILURE_MOTOR_OVER_TEMPERATURE | `uint8` | 2 | (1 << 2) |
+| FAILURE_OVER_RPM | `uint8` | 3 | (1 << 3) |
+| FAILURE_INCONSISTENT_CMD | `uint8` | 4 | (1 << 4) Set if ESC received an inconsistent command (i.e out of boundaries) |
+| FAILURE_MOTOR_STUCK | `uint8` | 5 | (1 << 5) |
+| FAILURE_GENERIC | `uint8` | 6 | (1 << 6) |
+| FAILURE_MOTOR_WARN_TEMPERATURE | `uint8` | 7 | (1 << 7) |
+| FAILURE_WARN_ESC_TEMPERATURE | `uint8` | 8 | (1 << 8) |
+| FAILURE_OVER_ESC_TEMPERATURE | `uint8` | 9 | (1 << 9) |
## Constants
-| 参数名 | 类型 | 值 | 描述 |
-| ------------------------------------------------------------------------------------------------------------------------------------------ | ------- | --- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
-| ACTUATOR_FUNCTION_MOTOR1 | `uint8` | 101 | |
-| ACTUATOR_FUNCTION_MOTOR_MAX | `uint8` | 112 | output_functions.yaml Motor.start + Motor.count - 1 |
-| FAILURE_OVER_CURRENT | `uint8` | 0 | (1 << 0) |
-| FAILURE_OVER_VOLTAGE | `uint8` | 1 | (1 << 1) |
-| FAILURE_MOTOR_OVER_TEMPERATURE | `uint8` | 2 | (1 << 2) |
-| FAILURE_OVER_RPM | `uint8` | 3 | (1 << 3) |
-| FAILURE_INCONSISTENT_CMD | `uint8` | 4 | (1 << 4) Set if ESC received an inconsistent command (i.e out of boundaries) |
-| FAILURE_MOTOR_STUCK | `uint8` | 5 | (1 << 5) |
-| FAILURE_GENERIC | `uint8` | 6 | (1 << 6) |
-| FAILURE_MOTOR_WARN_TEMPERATURE | `uint8` | 7 | (1 << 7) |
-| FAILURE_WARN_ESC_TEMPERATURE | `uint8` | 8 | (1 << 8) |
-| FAILURE_OVER_ESC_TEMPERATURE | `uint8` | 9 | (1 << 9) |
-| ESC_FAILURE_COUNT | `uint8` | 10 | Counter - keep it as last element! |
+| 参数名 | 类型 | 值 | 描述 |
+| ------------------------------------------------------------------------------------------------------------------------------------ | ------- | --- | ------------------------------------------------------------------------------------------------------------------------ |
+| ACTUATOR_FUNCTION_MOTOR1 | `uint8` | 101 | |
+| ACTUATOR_FUNCTION_MOTOR_MAX | `uint8` | 112 | output_functions.yaml Motor.start + Motor.count - 1 |
+| ESC_FAILURE_COUNT | `uint8` | 10 | Counter - keep it as last element! |
## Source Message
@@ -50,36 +55,36 @@ pageClass: is-wide-page
Click here to see original file
```c
-uint64 timestamp # time since system start (microseconds)
-uint32 esc_errorcount # Number of reported errors by ESC - if supported
-int32 esc_rpm # Motor RPM, negative for reverse rotation [RPM] - if supported
-float32 esc_voltage # Voltage measured from current ESC [V] - if supported
-float32 esc_current # Current measured from current ESC [A] - if supported
-float32 esc_temperature # Temperature measured from current ESC [degC] - if supported
-int16 motor_temperature # Temperature measured from current motor [degC] - if supported
-uint8 esc_address # Address of current ESC (in most cases 1-8 / must be set by driver)
-uint8 esc_cmdcount # Counter of number of commands
+uint64 timestamp # [us] Time since system start
-uint8 esc_state # State of ESC - depend on Vendor
+uint32 esc_errorcount # [-] Number of reported errors by ESC - if supported
+int32 esc_rpm # [rpm] Motor RPM, negative for reverse rotation - if supported
+float32 esc_voltage # [V] Voltage measured from current ESC - if supported
+float32 esc_current # [A] Current measured from current ESC - if supported
+float32 esc_temperature # [degC] Temperature measured from current ESC - if supported
+int16 motor_temperature # [degC] Temperature measured from current motor - if supported
+
+uint8 esc_state # [-] State of ESC - depend on Vendor
+
+uint8 actuator_function # [-] Actuator output function (one of Motor1...MotorN)
-uint8 actuator_function # actuator output function (one of Motor1...MotorN)
uint8 ACTUATOR_FUNCTION_MOTOR1 = 101
uint8 ACTUATOR_FUNCTION_MOTOR_MAX = 112 # output_functions.yaml Motor.start + Motor.count - 1
-uint16 failures # Bitmask to indicate the internal ESC faults
-int8 esc_power # Applied power 0-100 in % (negative values reserved)
+uint16 failures # [@enum FAILURE] Bitmask to indicate the internal ESC faults
+int8 esc_power # [%] [@range 0,100] Applied power (negative values reserved)
-uint8 FAILURE_OVER_CURRENT = 0 # (1 << 0)
-uint8 FAILURE_OVER_VOLTAGE = 1 # (1 << 1)
-uint8 FAILURE_MOTOR_OVER_TEMPERATURE = 2 # (1 << 2)
-uint8 FAILURE_OVER_RPM = 3 # (1 << 3)
-uint8 FAILURE_INCONSISTENT_CMD = 4 # (1 << 4) Set if ESC received an inconsistent command (i.e out of boundaries)
-uint8 FAILURE_MOTOR_STUCK = 5 # (1 << 5)
-uint8 FAILURE_GENERIC = 6 # (1 << 6)
-uint8 FAILURE_MOTOR_WARN_TEMPERATURE = 7 # (1 << 7)
-uint8 FAILURE_WARN_ESC_TEMPERATURE = 8 # (1 << 8)
-uint8 FAILURE_OVER_ESC_TEMPERATURE = 9 # (1 << 9)
-uint8 ESC_FAILURE_COUNT = 10 # Counter - keep it as last element!
+uint8 FAILURE_OVER_CURRENT = 0 # (1 << 0)
+uint8 FAILURE_OVER_VOLTAGE = 1 # (1 << 1)
+uint8 FAILURE_MOTOR_OVER_TEMPERATURE = 2 # (1 << 2)
+uint8 FAILURE_OVER_RPM = 3 # (1 << 3)
+uint8 FAILURE_INCONSISTENT_CMD = 4 # (1 << 4) Set if ESC received an inconsistent command (i.e out of boundaries)
+uint8 FAILURE_MOTOR_STUCK = 5 # (1 << 5)
+uint8 FAILURE_GENERIC = 6 # (1 << 6)
+uint8 FAILURE_MOTOR_WARN_TEMPERATURE = 7 # (1 << 7)
+uint8 FAILURE_WARN_ESC_TEMPERATURE = 8 # (1 << 8)
+uint8 FAILURE_OVER_ESC_TEMPERATURE = 9 # (1 << 9)
+uint8 ESC_FAILURE_COUNT = 10 # Counter - keep it as last element!
```
:::
diff --git a/docs/zh/msg_docs/EscStatus.md b/docs/zh/msg_docs/EscStatus.md
index 3266500370..cb56d25999 100644
--- a/docs/zh/msg_docs/EscStatus.md
+++ b/docs/zh/msg_docs/EscStatus.md
@@ -8,27 +8,34 @@ pageClass: is-wide-page
## Fields
-| 参数名 | 类型 | Unit [Frame] | Range/Enum | 描述 |
-| ---------------------------------------------------------- | -------------- | ---------------------------------------------------------------- | ---------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| timestamp | `uint64` | | | time since system start (microseconds) |
-| counter | `uint16` | | | incremented by the writing thread everytime new data is stored |
-| esc_count | `uint8` | | | number of connected ESCs |
-| esc_connectiontype | `uint8` | | | how ESCs connected to the system |
-| esc_online_flags | `uint8` | | | Bitmask indicating which ESC is online/offline |
-| esc_armed_flags | `uint8` | | | Bitmask indicating which ESC is armed. For ESC's where the arming state is not known (returned by the ESC), the arming bits should always be set. |
-| esc | `EscReport[8]` | | | |
+| 参数名 | 类型 | Unit [Frame] | Range/Enum | 描述 |
+| ---------------------------------------------------------- | --------------- | ---------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- |
+| timestamp | `uint64` | us | | Time since system start |
+| counter | `uint16` | | | Incremented by the writing thread everytime new data is stored |
+| esc_count | `uint8` | | | Number of connected ESCs |
+| esc_connectiontype | `uint8` | | [ESC_CONNECTION_TYPE](#ESC_CONNECTION_TYPE) | How ESCs connected to the system |
+| esc_online_flags | `uint16` | | | Bitmask indicating which ESC is online/offline (in motor order) |
+| esc_armed_flags | `uint16` | | | Bitmask indicating which ESC is armed (in motor order) |
+| esc | `EscReport[12]` | | | |
+
+## Enums
+
+### ESC_CONNECTION_TYPE {#ESC_CONNECTION_TYPE}
+
+| 参数名 | 类型 | 值 | 描述 |
+| ------------------------------------------------------------------------------------------------------------------------------------ | ------- | - | ------------------------ |
+| ESC_CONNECTION_TYPE_PPM | `uint8` | 0 | Traditional PPM ESC |
+| ESC_CONNECTION_TYPE_SERIAL | `uint8` | 1 | Serial Bus connected ESC |
+| ESC_CONNECTION_TYPE_ONESHOT | `uint8` | 2 | One Shot PPM |
+| ESC_CONNECTION_TYPE_I2C | `uint8` | 3 | I2C |
+| ESC_CONNECTION_TYPE_CAN | `uint8` | 4 | CAN-Bus |
+| ESC_CONNECTION_TYPE_DSHOT | `uint8` | 5 | DShot |
## Constants
-| 参数名 | 类型 | 值 | 描述 |
-| ------------------------------------------------------------------------------------------------------------------------------------ | ------- | - | ---------------------------------------------------------------------------------------------------- |
-| CONNECTED_ESC_MAX | `uint8` | 8 | The number of ESCs supported. Current (Q2/2013) we support 8 ESCs |
-| ESC_CONNECTION_TYPE_PPM | `uint8` | 0 | Traditional PPM ESC |
-| ESC_CONNECTION_TYPE_SERIAL | `uint8` | 1 | Serial Bus connected ESC |
-| ESC_CONNECTION_TYPE_ONESHOT | `uint8` | 2 | One Shot PPM |
-| ESC_CONNECTION_TYPE_I2C | `uint8` | 3 | I2C |
-| ESC_CONNECTION_TYPE_CAN | `uint8` | 4 | CAN-Bus |
-| ESC_CONNECTION_TYPE_DSHOT | `uint8` | 5 | DShot |
+| 参数名 | 类型 | 值 | 描述 |
+| ------------------------------------------------------------------------------------------- | ------- | -- | ---------------------------------------------------------------- |
+| CONNECTED_ESC_MAX | `uint8` | 12 | The number of ESCs supported (Motor1-Motor12) |
## Source Message
@@ -38,34 +45,38 @@ pageClass: is-wide-page
Click here to see original file
```c
-uint64 timestamp # time since system start (microseconds)
-uint8 CONNECTED_ESC_MAX = 8 # The number of ESCs supported. Current (Q2/2013) we support 8 ESCs
+uint64 timestamp # [us] Time since system start
+uint8 CONNECTED_ESC_MAX = 12 # The number of ESCs supported (Motor1-Motor12)
-uint8 ESC_CONNECTION_TYPE_PPM = 0 # Traditional PPM ESC
-uint8 ESC_CONNECTION_TYPE_SERIAL = 1 # Serial Bus connected ESC
-uint8 ESC_CONNECTION_TYPE_ONESHOT = 2 # One Shot PPM
-uint8 ESC_CONNECTION_TYPE_I2C = 3 # I2C
-uint8 ESC_CONNECTION_TYPE_CAN = 4 # CAN-Bus
-uint8 ESC_CONNECTION_TYPE_DSHOT = 5 # DShot
+uint8 ESC_CONNECTION_TYPE_PPM = 0 # Traditional PPM ESC
+uint8 ESC_CONNECTION_TYPE_SERIAL = 1 # Serial Bus connected ESC
+uint8 ESC_CONNECTION_TYPE_ONESHOT = 2 # One Shot PPM
+uint8 ESC_CONNECTION_TYPE_I2C = 3 # I2C
+uint8 ESC_CONNECTION_TYPE_CAN = 4 # CAN-Bus
+uint8 ESC_CONNECTION_TYPE_DSHOT = 5 # DShot
-uint16 counter # incremented by the writing thread everytime new data is stored
+uint16 counter # [-] Incremented by the writing thread everytime new data is stored
-uint8 esc_count # number of connected ESCs
-uint8 esc_connectiontype # how ESCs connected to the system
+uint8 esc_count # [-] Number of connected ESCs
+uint8 esc_connectiontype # [@enum ESC_CONNECTION_TYPE] How ESCs connected to the system
-uint8 esc_online_flags # Bitmask indicating which ESC is online/offline
-# esc_online_flags bit 0 : Set to 1 if ESC0 is online
-# esc_online_flags bit 1 : Set to 1 if ESC1 is online
-# esc_online_flags bit 2 : Set to 1 if ESC2 is online
-# esc_online_flags bit 3 : Set to 1 if ESC3 is online
-# esc_online_flags bit 4 : Set to 1 if ESC4 is online
-# esc_online_flags bit 5 : Set to 1 if ESC5 is online
-# esc_online_flags bit 6 : Set to 1 if ESC6 is online
-# esc_online_flags bit 7 : Set to 1 if ESC7 is online
+uint16 esc_online_flags # Bitmask indicating which ESC is online/offline (in motor order)
+# esc_online_flags bit 0 : Set to 1 if Motor1 is online
+# esc_online_flags bit 1 : Set to 1 if Motor2 is online
+# esc_online_flags bit 2 : Set to 1 if Motor3 is online
+# esc_online_flags bit 3 : Set to 1 if Motor4 is online
+# esc_online_flags bit 4 : Set to 1 if Motor5 is online
+# esc_online_flags bit 5 : Set to 1 if Motor6 is online
+# esc_online_flags bit 6 : Set to 1 if Motor7 is online
+# esc_online_flags bit 7 : Set to 1 if Motor8 is online
+# esc_online_flags bit 8 : Set to 1 if Motor9 is online
+# esc_online_flags bit 9 : Set to 1 if Motor10 is online
+# esc_online_flags bit 10: Set to 1 if Motor11 is online
+# esc_online_flags bit 11: Set to 1 if Motor12 is online
-uint8 esc_armed_flags # Bitmask indicating which ESC is armed. For ESC's where the arming state is not known (returned by the ESC), the arming bits should always be set.
+uint16 esc_armed_flags # [-] Bitmask indicating which ESC is armed (in motor order)
-EscReport[8] esc
+EscReport[12] esc
```
:::
diff --git a/docs/zh/msg_docs/SensorGps.md b/docs/zh/msg_docs/SensorGps.md
index b80ee914d1..cb4dd669e1 100644
--- a/docs/zh/msg_docs/SensorGps.md
+++ b/docs/zh/msg_docs/SensorGps.md
@@ -10,45 +10,48 @@ GPS position in WGS84 coordinates. the field 'timestamp' is for the position & v
## Fields
-| 参数名 | 类型 | Unit [Frame] | Range/Enum | 描述 |
-| ----------------------------------------------------------------------------- | --------- | ---------------------------------------------------------------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| timestamp | `uint64` | | | time since system start (microseconds) |
-| timestamp_sample | `uint64` | | | |
-| device_id | `uint32` | | | unique device ID for the sensor that does not change between power cycles |
-| latitude_deg | `float64` | | | Latitude in degrees, allows centimeter level RTK precision |
-| longitude_deg | `float64` | | | Longitude in degrees, allows centimeter level RTK precision |
-| altitude_msl_m | `float64` | | | Altitude above MSL, meters |
-| altitude_ellipsoid_m | `float64` | | | Altitude above Ellipsoid, meters |
-| s_variance_m_s | `float32` | | | GPS speed accuracy estimate, (metres/sec) |
-| c_variance_rad | `float32` | | | GPS course accuracy estimate, (radians) |
-| fix_type | `uint8` | | | Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix. |
-| eph | `float32` | | | GPS horizontal position accuracy (metres) |
-| epv | `float32` | | | GPS vertical position accuracy (metres) |
-| hdop | `float32` | | | Horizontal dilution of precision |
-| vdop | `float32` | | | Vertical dilution of precision |
-| noise_per_ms | `int32` | | | GPS noise per millisecond |
-| automatic_gain_control | `uint16` | | | Automatic gain control monitor |
-| jamming_state | `uint8` | | | indicates whether jamming has been detected or suspected by the receivers. O: Unknown, 1: OK, 2: Mitigated, 3: Detected |
-| jamming_indicator | `int32` | | | indicates jamming is occurring |
-| spoofing_state | `uint8` | | | indicates whether spoofing has been detected or suspected by the receivers. O: Unknown, 1: OK, 2: Mitigated, 3: Detected |
-| authentication_state | `uint8` | | | GPS signal authentication state |
-| vel_m_s | `float32` | | | GPS ground speed, (metres/sec) |
-| vel_n_m_s | `float32` | | | GPS North velocity, (metres/sec) |
-| vel_e_m_s | `float32` | | | GPS East velocity, (metres/sec) |
-| vel_d_m_s | `float32` | | | GPS Down velocity, (metres/sec) |
-| cog_rad | `float32` | | | Course over ground (NOT heading, but direction of movement), -PI..PI, (radians) |
-| vel_ned_valid | `bool` | | | True if NED velocity is valid |
-| timestamp_time_relative | `int32` | | | timestamp + timestamp_time_relative = Time of the UTC timestamp since system start, (microseconds) |
-| time_utc_usec | `uint64` | | | Timestamp (microseconds, UTC), this is the timestamp which comes from the gps module. It might be unavailable right after cold start, indicated by a value of 0 |
-| satellites_used | `uint8` | | | Number of satellites used |
-| system_error | `uint32` | | | General errors with the connected GPS receiver |
-| heading | `float32` | | | heading angle of XYZ body frame rel to NED. Set to NaN if not available and updated (used for dual antenna GPS), (rad, [-PI, PI]) |
-| heading_offset | `float32` | | | heading offset of dual antenna array in body frame. Set to NaN if not applicable. (rad, [-PI, PI]) |
-| heading_accuracy | `float32` | | | heading accuracy (rad, [0, 2PI]) |
-| rtcm_injection_rate | `float32` | | | RTCM message injection rate Hz |
-| selected_rtcm_instance | `uint8` | | | uorb instance that is being used for RTCM corrections |
-| rtcm_crc_failed | `bool` | | | RTCM message CRC failure detected |
-| rtcm_msg_used | `uint8` | | | Indicates if the RTCM message was used successfully by the receiver |
+| 参数名 | 类型 | Unit [Frame] | Range/Enum | 描述 |
+| ----------------------------------------------------------------------------- | --------- | ---------------------------------------------------------------------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| timestamp | `uint64` | | | time since system start (microseconds) |
+| timestamp_sample | `uint64` | | | |
+| device_id | `uint32` | | | unique device ID for the sensor that does not change between power cycles |
+| latitude_deg | `float64` | | | Latitude in degrees, allows centimeter level RTK precision |
+| longitude_deg | `float64` | | | Longitude in degrees, allows centimeter level RTK precision |
+| altitude_msl_m | `float64` | | | Altitude above MSL, meters |
+| altitude_ellipsoid_m | `float64` | | | Altitude above Ellipsoid, meters |
+| s_variance_m_s | `float32` | | | GPS speed accuracy estimate, (metres/sec) |
+| c_variance_rad | `float32` | | | GPS course accuracy estimate, (radians) |
+| fix_type | `uint8` | | | Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix. |
+| eph | `float32` | | | GPS horizontal position accuracy (metres) |
+| epv | `float32` | | | GPS vertical position accuracy (metres) |
+| hdop | `float32` | | | Horizontal dilution of precision |
+| vdop | `float32` | | | Vertical dilution of precision |
+| noise_per_ms | `int32` | | | GPS noise per millisecond |
+| automatic_gain_control | `uint16` | | | Automatic gain control monitor |
+| jamming_state | `uint8` | | | indicates whether jamming has been detected or suspected by the receivers. O: Unknown, 1: OK, 2: Mitigated, 3: Detected |
+| jamming_indicator | `int32` | | | indicates jamming is occurring |
+| spoofing_state | `uint8` | | | indicates whether spoofing has been detected or suspected by the receivers. O: Unknown, 1: OK, 2: Mitigated, 3: Detected |
+| authentication_state | `uint8` | | | GPS signal authentication state |
+| vel_m_s | `float32` | | | GPS ground speed, (metres/sec) |
+| vel_n_m_s | `float32` | | | GPS North velocity, (metres/sec) |
+| vel_e_m_s | `float32` | | | GPS East velocity, (metres/sec) |
+| vel_d_m_s | `float32` | | | GPS Down velocity, (metres/sec) |
+| cog_rad | `float32` | | | Course over ground (NOT heading, but direction of movement), -PI..PI, (radians) |
+| vel_ned_valid | `bool` | | | True if NED velocity is valid |
+| timestamp_time_relative | `int32` | | | timestamp + timestamp_time_relative = Time of the UTC timestamp since system start, (microseconds) |
+| time_utc_usec | `uint64` | | | Timestamp (microseconds, UTC), this is the timestamp which comes from the gps module. It might be unavailable right after cold start, indicated by a value of 0 |
+| satellites_used | `uint8` | | | Number of satellites used |
+| system_error | `uint32` | | | General errors with the connected GPS receiver |
+| heading | `float32` | | | heading angle of XYZ body frame rel to NED. Set to NaN if not available and updated (used for dual antenna GPS), (rad, [-PI, PI]) |
+| heading_offset | `float32` | | | heading offset of dual antenna array in body frame. Set to NaN if not applicable. (rad, [-PI, PI]) |
+| heading_accuracy | `float32` | | | heading accuracy (rad, [0, 2PI]) |
+| rtcm_injection_rate | `float32` | | | RTCM message injection rate Hz |
+| selected_rtcm_instance | `uint8` | | | uorb instance that is being used for RTCM corrections |
+| rtcm_crc_failed | `bool` | | | RTCM message CRC failure detected |
+| rtcm_msg_used | `uint8` | | | Indicates if the RTCM message was used successfully by the receiver |
+| antenna_offset_x | `float32` | m [body frame FRD] | | X Position of GNSS antenna |
+| antenna_offset_y | `float32` | m [body frame FRD] | | Y Position of GNSS antenna |
+| antenna_offset_z | `float32` | m [body frame FRD] | | Z Position of GNSS antenna |
## Constants
@@ -183,6 +186,10 @@ uint8 RTCM_MSG_USED_NOT_USED = 1
uint8 RTCM_MSG_USED_USED = 2
uint8 rtcm_msg_used # Indicates if the RTCM message was used successfully by the receiver
+float32 antenna_offset_x # [m] [@frame body frame FRD] X Position of GNSS antenna
+float32 antenna_offset_y # [m] [@frame body frame FRD] Y Position of GNSS antenna
+float32 antenna_offset_z # [m] [@frame body frame FRD] Z Position of GNSS antenna
+
# TOPICS sensor_gps vehicle_gps_position
```
diff --git a/docs/zh/msg_docs/VehicleCommand.md b/docs/zh/msg_docs/VehicleCommand.md
index d41aadb39c..a66d7d7ada 100644
--- a/docs/zh/msg_docs/VehicleCommand.md
+++ b/docs/zh/msg_docs/VehicleCommand.md
@@ -1052,6 +1052,20 @@ Actuator configuration command.
| 6 | | | ? |
| 7 | | | ? |
+### VEHICLE_CMD_ESC_REQUEST_EEPROM (312)
+
+Request EEPROM data from an ESC.
+
+| Param | 单位 (Units) | Range/Enum | 描述 |
+| ----- | ----------------------------- | ---------- | ------------- |
+| 1 | | | ESC Index |
+| 2 | | | Firmware Type |
+| 3 | | | Unused |
+| 4 | | | Unused |
+| 5 | | | Unused |
+| 6 | | | ? |
+| 7 | | | ? |
+
### VEHICLE_CMD_COMPONENT_ARM_DISARM (400)
Arms / Disarms a component.
@@ -1536,6 +1550,12 @@ Change mode by specifying nav_state directly.
| VEHICLE_MOUNT_MODE_RC_TARGETING | `uint8` | 3 | Load neutral position and start RC Roll,Pitch,Yaw control with stabilization. |
| VEHICLE_MOUNT_MODE_GPS_POINT | `uint8` | 4 | Load neutral position and start to point to Lat,Lon,Alt. |
| VEHICLE_MOUNT_MODE_ENUM_END | `uint8` | 5 | |
+| ACTUATOR_CONFIGURATION_NONE | `uint8` | 0 | Do nothing. |
+| ACTUATOR_CONFIGURATION_BEEP | `uint8` | 1 | Command the actuator to beep now. |
+| ACTUATOR_CONFIGURATION_3D_MODE_ON | `uint8` | 2 | Permanently set the actuator (ESC) to 3D mode (reversible thrust). |
+| ACTUATOR_CONFIGURATION_3D_MODE_OFF | `uint8` | 3 | Permanently set the actuator (ESC) to non 3D mode (non-reversible thrust). |
+| ACTUATOR_CONFIGURATION_SPIN_DIRECTION1 | `uint8` | 4 | Permanently set the actuator (ESC) to spin direction 1 (which can be clockwise or counter-clockwise). |
+| ACTUATOR_CONFIGURATION_SPIN_DIRECTION2 | `uint8` | 5 | Permanently set the actuator (ESC) to spin direction 2 (opposite of direction 1). |
| PARACHUTE_ACTION_DISABLE | `uint8` | 0 | |
| PARACHUTE_ACTION_ENABLE | `uint8` | 1 | |
| PARACHUTE_ACTION_RELEASE | `uint8` | 2 | |
@@ -1661,6 +1681,7 @@ uint16 VEHICLE_CMD_GIMBAL_DEVICE_INFORMATION = 283 # Command to ask information
uint16 VEHICLE_CMD_MISSION_START = 300 # Start running a mission. |first_item: the first mission item to run|last_item: the last mission item to run (after this item is run, the mission ends)|
uint16 VEHICLE_CMD_ACTUATOR_TEST = 310 # Actuator testing command. |[@range -1,1] value|[s] timeout|Unused|Unused|output function|
uint16 VEHICLE_CMD_CONFIGURE_ACTUATOR = 311 # Actuator configuration command. |configuration|Unused|Unused|Unused|output function|
+uint16 VEHICLE_CMD_ESC_REQUEST_EEPROM = 312 # Request EEPROM data from an ESC. |ESC Index|Firmware Type|Unused|Unused|Unused|
uint16 VEHICLE_CMD_COMPONENT_ARM_DISARM = 400 # Arms / Disarms a component. |1 to arm, 0 to disarm.
uint16 VEHICLE_CMD_RUN_PREARM_CHECKS = 401 # Instructs a target system to run pre-arm checks.
uint16 VEHICLE_CMD_INJECT_FAILURE = 420 # Inject artificial failure for testing purposes.
@@ -1710,6 +1731,13 @@ uint8 VEHICLE_ROI_LOCATION = 3 # Point toward fixed location.
uint8 VEHICLE_ROI_TARGET = 4 # Point toward target.
uint8 VEHICLE_ROI_ENUM_END = 5
+uint8 ACTUATOR_CONFIGURATION_NONE = 0 # Do nothing.
+uint8 ACTUATOR_CONFIGURATION_BEEP = 1 # Command the actuator to beep now.
+uint8 ACTUATOR_CONFIGURATION_3D_MODE_ON = 2 # Permanently set the actuator (ESC) to 3D mode (reversible thrust).
+uint8 ACTUATOR_CONFIGURATION_3D_MODE_OFF = 3 # Permanently set the actuator (ESC) to non 3D mode (non-reversible thrust).
+uint8 ACTUATOR_CONFIGURATION_SPIN_DIRECTION1 = 4 # Permanently set the actuator (ESC) to spin direction 1 (which can be clockwise or counter-clockwise).
+uint8 ACTUATOR_CONFIGURATION_SPIN_DIRECTION2 = 5 # Permanently set the actuator (ESC) to spin direction 2 (opposite of direction 1).
+
uint8 PARACHUTE_ACTION_DISABLE = 0
uint8 PARACHUTE_ACTION_ENABLE = 1
uint8 PARACHUTE_ACTION_RELEASE = 2
diff --git a/docs/zh/msg_docs/index.md b/docs/zh/msg_docs/index.md
index d5e3090a9a..833f007704 100644
--- a/docs/zh/msg_docs/index.md
+++ b/docs/zh/msg_docs/index.md
@@ -85,6 +85,8 @@ Graphs showing how these are used [can be found here](../middleware/uorb_graph.m
- [DistanceSensorModeChangeRequest](DistanceSensorModeChangeRequest.md)
- [DronecanNodeStatus](DronecanNodeStatus.md)
- [Ekf2Timestamps](Ekf2Timestamps.md) — this message contains the (relative) timestamps of the sensor inputs used by EKF2. It can be used for reproducible replay.
+- [EscEepromRead](EscEepromRead.md)
+- [EscEepromWrite](EscEepromWrite.md)
- [EscReport](EscReport.md)
- [EscStatus](EscStatus.md)
- [EstimatorAidSource1d](EstimatorAidSource1d.md)
diff --git a/docs/zh/peripherals/dshot.md b/docs/zh/peripherals/dshot.md
index 669767b149..d16f04281e 100644
--- a/docs/zh/peripherals/dshot.md
+++ b/docs/zh/peripherals/dshot.md
@@ -47,74 +47,12 @@ DShot comes with different speed options: _DShot150_, _DShot300_, and _DShot600_
电调应该初始化,电机应该按照正确的方向转动。
- If the motors do not spin in the correct direction (for the [selected airframe](../airframes/airframe_reference.md)) you can reverse them in the UI using the **Set Spin Direction** option (this option appears after you select DShot and assign motors).
- You can also reverse motors by sending an [ESC Command](#commands).
## ESC Commands {#commands}
Commands can be sent to the ESC via the [MAVLink shell](../debug/mavlink_shell.md).
See [here](../modules/modules_driver.md#dshot) for a full reference of the supported commands.
-其中最重要的是:
-
-- Make a motor connected to FMU output pin 1 beep (helps with identifying motors)
-
- ```sh
- dshot beep1 -m 1
- ```
-
-- Retrieve ESC information (requires telemetry, see below):
-
- ```sh
- nsh> dshot esc_info -m 2
- INFO [dshot] ESC Type: #TEKKO32_4in1#
- INFO [dshot] MCU Serial Number: xxxxxx-xxxxxx-xxxxxx-xxxxxx
- INFO [dshot] Firmware version: 32.60
- INFO [dshot] Rotation Direction: normal
- INFO [dshot] 3D Mode: off
- INFO [dshot] Low voltage Limit: off
- INFO [dshot] Current Limit: off
- INFO [dshot] LED 0: unsupported
- INFO [dshot] LED 1: unsupported
- INFO [dshot] LED 2: unsupported
- INFO [dshot] LED 3: unsupported
- ```
-
-- Permanently set the spin direction of a motor connected to FMU output pin 1 (while motors are _not_ spinning):
-
- - Set spin direction to `reversed`:
-
- ```sh
- dshot reverse -m 1
- dshot save -m 1
- ```
-
- Retrieving ESC information will then show:
-
- ```sh
- Rotation Direction: reversed
- ```
-
- - Set spin direction to `normal`:
-
- ```sh
- dshot normal -m 1
- dshot save -m 1
- ```
-
- Retrieving ESC information will then show:
-
- ```sh
- Rotation Direction: normal
- ```
-
- :::note
-
- - The commands will have no effect if the motors are spinning, or if the ESC is already set to the corresponding direction.
- - The ESC will revert to its last saved direction (normal or reversed) on reboot if `save` is not called after changing the direction.
-
-
-:::
-
## ESC Telemetry
Some ESCs are capable of sending telemetry back to the flight controller through a UART RX port.
@@ -133,61 +71,76 @@ The provided telemetry includes:
1. 把电调上的TELE端口连接到飞控上空的串口的 RX 端。
2. Enable telemetry on that serial port using [DSHOT_TEL_CFG](../advanced_config/parameter_reference.md#DSHOT_TEL_CFG).
-重启后,您可以检查TELE数据传输是否正常工作(确保电池已连接),方法如下:
-
-```sh
-dshot esc_info -m 1
-```
-
:::tip
-You may have to configure [MOT_POLE_COUNT](../advanced_config/parameter_reference.md#MOT_POLE_COUNT) to get the correct RPM values.
+You may have to configure the per-motor pole count parameters ([`DSHOT_MOT_POL1`–`DSHOT_MOT_POL12`](../advanced_config/parameter_reference.md#DSHOT_MOT_POL1)) to get correct RPM values.
+The default value for these is 14 poles, which is typical for 5-inch prop motors.
:::
:::tip
-Not all DSHOT-capable ESCs support `[esc_info]`(e.g. APD 80F3x), even when telemetry is supported and enabled.
-显示的错误是:
-
-```sh
-ERROR [dshot] No data received. If telemetry is setup correctly, try again.
-```
-
-查看制造商文档以获取详细信息。
+[Extended DShot Telemetry (EDT)](#extended-dshot-telemetry-edt) can provide temperature, voltage, and current through the BDShot signal — no serial telemetry wire needed.
:::
## Bidirectional DShot (Telemetry)
-Bidirectional DShot is a protocol that can provide telemetry including: high rate ESC RPM data, voltage, current, and temperature with a single wire.
+Bidirectional DShot (BDShot) enables the ESC to send eRPM telemetry back to the flight controller on the same signal wire used for throttle commands — no additional telemetry wire is needed for RPM data.
+High-rate eRPM data significantly improves the performance of [Dynamic Notch Filters](../config_mc/filter_tuning.md#dynamic-notch-filters) and enables more precise vehicle tuning.
-The PX4 implementation currently enables only ESC RPM (eRPM) data collection from each ESC at high frequencies.
-This telemetry significantly improves the performance of [Dynamic Notch Filters](../config_mc/filter_tuning.md#dynamic-notch-filters) and enables more precise vehicle tuning.
+With [Extended DShot Telemetry (EDT)](#extended-dshot-telemetry-edt) enabled, BDShot can also provide temperature, voltage, and current data.
+
+### Hardware Support
+
+BDShot requires a flight controller with DMA-capable timers.
+Any FMU output on a supported timer can be used for BDShot — multiple timers are supported through sequential burst/capture.
+
+Supported processors:
+
+- **STM32H7**: All FMU outputs on DMA-capable timers
+- **i.MXRT** (V6X-RT & Tropic): All FMU outputs
:::info
-The [ESC Telemetry](#esc-telemetry) described above is currently still necessary if you want voltage, current, or temperature information.
-It's setup and use is independent of bidirectional DShot.
-:::
-
-### 硬件安装
-
The ESC must be connected to FMU outputs only.
-These will be labeled `MAIN` on flight controllers that only have one PWM bus, and `AUX` on controllers that have both `MAIN` and `AUX` ports (i.e. FCs that have an IO board).
-
-:::warning
-**Limited hardware support**
-This feature is only supported on flight controllers with the following processors:
-
-- STM32H7: First four FMU outputs
- - Must be connected to the first 4 FMU outputs, and these outputs must also be mapped to the same timer.
- - [KakuteH7](../flight_controller/kakuteh7v2.md) is not supported because the outputs are not mapped to the same timer.
-- [i.MXRT](../flight_controller/nxp_mr_vmu_rt1176.md) (V6X-RT & Tropic): 8 FMU outputs.
-
-No other boards are supported.
+These are labeled `MAIN` on controllers with a single PWM bus, and `AUX` on controllers with both `MAIN` and `AUX` ports (i.e. those with an IO board).
:::
-### Configuration {#bidirectional-dshot-configuration}
+### PX4 Configuration {#bidirectional-dshot-configuration}
-To enable bidirectional DShot, set the [DSHOT_BIDIR_EN](../advanced_config/parameter_reference.md#DSHOT_BIDIR_EN) parameter.
+BDShot is enabled **per-timer** in the [Actuator Configuration](../config/actuators.md) UI.
+Select **BDShot150**, **BDShot300**, or **BDShot600** as the output protocol instead of the corresponding DShot speed.
+There is no separate enable parameter — choosing a BDShot protocol activates bidirectional telemetry on that timer's outputs.
-The system calculates actual motor RPM from the received eRPM data using the [MOT_POLE_COUNT](../advanced_config/parameter_reference.md#MOT_POLE_COUNT) parameter.
-This parameter must be set correctly for accurate RPM reporting.
+The system calculates actual motor RPM from eRPM data using per-motor pole count parameters: `DSHOT_MOT_POL1` through `DSHOT_MOT_POL12` (one per motor output).
+The default is 14 poles, which is typical for 5-inch prop motors.
+If you are using AM32 ESCs, the motor pole count must also be set in the AM32 firmware configuration (e.g. via the AM32 configurator tool) to match.
+
+### Extended DShot Telemetry (EDT)
+
+EDT extends BDShot by interleaving temperature, voltage, and current data into the eRPM telemetry frames.
+This allows ESC health monitoring through the same signal wire, without requiring a separate serial telemetry connection.
+
+To enable EDT:
+
+1. Configure BDShot on the desired outputs (see above).
+2. Set `DSHOT_BIDIR_EDT` to `1` and reboot.
+
+The ESC firmware must support EDT (e.g. [AM32](https://github.com/am32-firmware/AM32)).
+
+When both serial telemetry and BDShot/EDT are enabled, the driver merges data from both sources.
+
+## AM32 ESC Settings (EEPROM)
+
+PX4 can read and write AM32 ESC firmware settings (EEPROM) via a ground station, enabling remote ESC configuration without connecting directly to each ESC.
+
+### Requirements
+
+- ESCs running [AM32 firmware](https://github.com/am32-firmware/AM32) with serial telemetry connected ([DSHOT_TEL_CFG](../advanced_config/parameter_reference.md#DSHOT_TEL_CFG))
+- `DSHOT_ESC_TYPE` set to `1` (AM32)
+- Ground station with ESC EEPROM support (QGroundControl feature in development)
+- MAVLink development dialect enabled on the flight controller
+
+### How It Works
+
+PX4 automatically reads the full EEPROM from each ESC on boot.
+The ground station can then display individual settings and allow the user to modify them.
+Changes are written back to the ESC one byte at a time using the DShot programming protocol.
diff --git a/docs/zh/peripherals/mavlink_peripherals.md b/docs/zh/peripherals/mavlink_peripherals.md
index b344857a2d..1ade633b0c 100644
--- a/docs/zh/peripherals/mavlink_peripherals.md
+++ b/docs/zh/peripherals/mavlink_peripherals.md
@@ -26,38 +26,12 @@ The parameters for each instance are:
- [MAV_X_CONFIG](../advanced_config/parameter_reference.md#MAV_0_CONFIG) - Set the serial port (UART) for this instance "X", where X is 0, 1, 2.
It can be any unused port, e.g.: `TELEM2`, `TELEM3`, `GPS2` etc.
For more information see [Serial Port Configuration](../peripherals/serial_configuration.md).
-
-- [MAV_X_MODE](../advanced_config/parameter_reference.md#MAV_0_MODE) - Specify the telemetry mode/target (the set of messages to stream for the current instance and their rate).
- The default values are:
-
- - _Normal_: Standard set of messages for a GCS.
- - _Custom_ or _Magic_: Nothing (in the default PX4 implementation).
- Modes may be used for testing when developing a new mode.
- - _Onboard_: Standard set of messages for a companion computer.
- - _OSD_: Standard set of messages for an OSD system.
- - _Config_: Standard set of messages and rate configuration for a fast link (e.g. USB).
- - _Minimal_: Minimal set of messages for use with a GCS connected on a high latency link.
- - _External Vision_: Messages for offboard vision systems.
- - _Gimbal_: Messages for a gimbal. Note this also enables [message forwarding](#MAV_X_FORWARD)
- - _Onboard Low Bandwidth_: Standard set of messages for a companion computer connected on a lower speed link.
- - _uAvionix_: Messages for a uAvionix ADS-B beacon.
-
- ::: info
- If you need to find the specific set of message for each mode search for `MAVLINK_MODE_` in [/src/modules/mavlink/mavlink_main.cpp](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/mavlink/mavlink_main.cpp).
-
-:::
-
- :::tip
- The mode defines the _default_ messages and rates.
- A connected MAVLink system can still request the streams/rates that it wants using [MAV_CMD_SET_MESSAGE_INTERVAL](https://mavlink.io/en/messages/common.html#MAV_CMD_SET_MESSAGE_INTERVAL).
-
-:::
-
+- [MAV_X_MODE](../advanced_config/parameter_reference.md#MAV_0_MODE) - Specify the [MAVLink profile](../mavlink/mavlink_profiles.md) for the instance, such as _Normal_ or _OSD_.
+ Profiles define a particular set of streamed messages and their rates — you should choose a profile that is appropriate for your channel and the peripheral.
- [MAV_X_RATE](../advanced_config/parameter_reference.md#MAV_0_MODE) - Set the maximum _data rate_ for this instance (bytes/second).
- This is the combined rate for all streams of individual message (the rates for individual messages are reduced if the total rate exceeds this value).
- The default setting will generally be acceptable, but might be reduced if the telemetry link becomes saturated and too many messages are being dropped.
- A value of 0 sets the data rate to half the theoretical value.
-
- [MAV_X_FORWARD](../advanced_config/parameter_reference.md#MAV_0_FORWARD) - Enable forwarding of MAVLink packets received by the current instance onto other interfaces.
This might be used, for example, to transfer messages between a GCS and a companion computer so that the GCS can talk to a MAVLink enabled camera connected to the companion computer.
@@ -121,6 +95,7 @@ Links to setup instructions for specific MAVLink components:
## 另见
+- [MAVLink Profiles](../mavlink/mavlink_profiles.md)
- [串口配置](../peripherals/serial_configuration.md)
- [PX4 Ethernet Setup > PX4 MAVLink Serial Port Configuration](../advanced_config/ethernet_setup.md#px4-mavlink-serial-port-configuration)
- [串口映射](../hardware/serial_port_mapping.md)
diff --git a/docs/zh/releases/main.md b/docs/zh/releases/main.md
index e3878d4c6a..b86e853f33 100644
--- a/docs/zh/releases/main.md
+++ b/docs/zh/releases/main.md
@@ -50,7 +50,7 @@ Please continue reading for [upgrade instructions](#upgrade-guide).
### Estimation
-- TBD
+- Added [EKF2_POS_LOCK](../advanced_config/parameter_reference.md#EKF2_POS_LOCK) to force constant position fusion while landed, useful for vehicles relying on dead-reckoning sensors (airspeed, optical flow) that provide no aiding on the ground.
### 传感器
diff --git a/docs/zh/ros2/px4_ros2_control_interface.md b/docs/zh/ros2/px4_ros2_control_interface.md
index 39401c63e7..a2e583436e 100644
--- a/docs/zh/ros2/px4_ros2_control_interface.md
+++ b/docs/zh/ros2/px4_ros2_control_interface.md
@@ -580,7 +580,7 @@ _fw_lateral_longitudinal_setpoint->update(setpoint_s, config_s);
通过控制界面暴露的 RoverSetpointTypes 是这些设置点的组合,导致有效的控制输入:
-| SetpointType | 安装位置 | Speed | 油门 | Attitude | 频率 | Steering | Control Flags |
+| SetpointType | 安装位置 | Speed | Throttle | Attitude | 频率 | Steering | Control Flags |
| ----------------------------------------------------------------------------------------------------------------------------------- | --------------------------- | ------------------------------------------------ | ------------------------------------------------ | ------------------------------------------------ | ------------------------------------------------ | ------------------------------------------------ | ------------------------------------------------------ |
| [RoverPosition](https://auterion.github.io/px4-ros2-interface-lib/classpx4__ros2_1_1RoverPositionSetpointType.html#details) | ✓ | (✓) | (✓) | (✓) | (✓) | (✓) | Position, Velocity, Attitude, Rate, Control Allocation |
| [RoverSpeedAttitude](https://auterion.github.io/px4-ros2-interface-lib/classpx4__ros2_1_1RoverSpeedAttitudeSetpointType.html) | | ✓ | (✓) | ✓ | (✓) | (✓) | Velocity, Attitude, Rate, Control Allocation |
diff --git a/docs/zh/sensor/barometer.md b/docs/zh/sensor/barometer.md
index f9fd0496bd..02d4bc8a48 100644
--- a/docs/zh/sensor/barometer.md
+++ b/docs/zh/sensor/barometer.md
@@ -65,7 +65,7 @@ This calibration is controlled by the [SENS_BAR_AUTOCAL](../advanced_config/para
The algorithm monitors GNSS quality, collects altitude differences over a 2-second filtered window, and verifies stability within 4m tolerance.
Once stable, it uses binary search to calculate pressure offsets that align baro altitude with GNSS altitude (0.1m precision), then applies the offset to all sensors and saves the parameters.
-备注:
+Notes:
- **EKF Independence**: GNSS-baro calibration operates independently of EKF2 altitude fusion settings.
- **Execution Timing**: Calibration runs even when [EKF2_GPS_CTRL](../advanced_config/parameter_reference.md#EKF2_GPS_CTRL) altitude fusion is disabled.
diff --git a/docs/zh/sensor/optical_flow.md b/docs/zh/sensor/optical_flow.md
index ae186ea84f..029e611265 100644
--- a/docs/zh/sensor/optical_flow.md
+++ b/docs/zh/sensor/optical_flow.md
@@ -34,6 +34,12 @@ The information is written to the corresponding uORB topics: [DistanceSensor](..
| Right | - X |
| Left | + X |
+:::info
+The integrated flow values are **angular measurements** (radians) representing rotation of the image about the sensor's body axes using the right-hand convention.
+They are _not_ translational displacements along those axes, which is why forward vehicle movement (along X) appears in the Y flow axis, and rightward movement (along Y) appears in the X flow axis.
+Specifically, forward movement causes the ground image to rotate about the Y axis (+ Y), while rightward movement causes a negative rotation about the X axis (- X).
+:::
+
Sensor data from the optical flow device is fused with other velocity data sources.
The approach used for fusing sensor data and any offsets from the center of the vehicle must be configured in the [estimator](#estimators).
diff --git a/docs/zh/sim_sih/index.md b/docs/zh/sim_sih/index.md
index 31f9c2bb9b..537a7a9904 100644
--- a/docs/zh/sim_sih/index.md
+++ b/docs/zh/sim_sih/index.md
@@ -308,7 +308,7 @@ For all variants of SIH:
:::
-- `param set-default EKF2_GPS_DELAY 0` to improve state estimator performance (the assumption of instant GPS measurements would normally be unrealistic, but is accurate for SIH).
+- `param set-default SENS_GPS0_DELAY 0` to improve state estimator performance (the assumption of instant GPS measurements would normally be unrealistic, but is accurate for SIH).
For SIH on FC:
diff --git a/docs/zh/test_cards/mc_08_dshot.md b/docs/zh/test_cards/mc_08_dshot.md
index ca740ca877..2961e243f9 100644
--- a/docs/zh/test_cards/mc_08_dshot.md
+++ b/docs/zh/test_cards/mc_08_dshot.md
@@ -7,7 +7,7 @@ Regression test for DSHOT working with PX4
## Preflight
- Ensure vehicle is using a DSHOT ESC
-- Parameter [DSHOT_BIDIR_EN](../advanced_config/parameter_reference.md#DSHOT_BIDIR_EN) is enabled
+- Bidirectional DShot is configured (BDShot150/300/600 selected in [Actuator Configuration](../config/actuators.md))
- Parameter [DSHOT_TEL_CFG](../advanced_config/parameter_reference.md#DSHOT_TEL_CFG) is configured (if ESC supports telemetry)
- Parameter [SDLOG_PROFILE](../advanced_config/parameter_reference.md#SDLOG_PROFILE) has Debug (`5`) checked