diff --git a/ROMFS/px4fmu_common/init.d/airframes/50002_hiwonder_tracked b/ROMFS/px4fmu_common/init.d/airframes/50002_hiwonder_tracked
new file mode 100644
index 0000000000..52f972dde7
--- /dev/null
+++ b/ROMFS/px4fmu_common/init.d/airframes/50002_hiwonder_tracked
@@ -0,0 +1,45 @@
+#!/bin/sh
+#
+# @name Hiwonder Tracked
+#
+# @url https://www.hiwonder.com/products/suspended-shock-absorbing-tracked-chassis?variant=40378709835863
+#
+# @type Rover
+# @class Rover
+#
+
+. ${R}etc/init.d/rc.rover_differential_defaults
+
+param set-default HIWONDER_EMM_EN 1 # Enable motor driver
+param set-default BAT1_N_CELLS 3
+param set-default NAV_ACC_RAD 0.5
+
+# Differential Parameters
+param set-default RD_WHEEL_TRACK 0.16
+param set-default RD_TRANS_DRV_TRN 0.785398
+param set-default RD_TRANS_TRN_DRV 0.0872665
+
+# Rover Rate Control Parameters
+param set-default RO_YAW_EXPO 0.2
+param set-default RO_YAW_SUPEXPO 0.1
+param set-default RO_YAW_RATE_I 0.1
+param set-default RO_YAW_RATE_P 0.1
+param set-default RO_YAW_RATE_LIM 140
+
+# Rover Attitude Control Parameters
+param set-default RO_YAW_P 5
+
+# Rover Velocity Control Parameters
+param set-default RO_ACCEL_LIM 1
+param set-default RO_DECEL_LIM 1
+param set-default RO_JERK_LIM 10
+param set-default RO_MAX_THR_SPEED 0.3
+param set-default RO_SPEED_LIM 0.28
+param set-default RO_SPEED_I 0.05
+param set-default RO_SPEED_P 0.1
+param set-default RO_SPEED_RED 1
+
+# Pure Pursuit parameters
+param set-default PP_LOOKAHD_GAIN 1
+param set-default PP_LOOKAHD_MAX 10
+param set-default PP_LOOKAHD_MIN 1
diff --git a/ROMFS/px4fmu_common/init.d/airframes/51003_hiwonder_ackermann b/ROMFS/px4fmu_common/init.d/airframes/51003_hiwonder_ackermann
new file mode 100644
index 0000000000..bb2266a130
--- /dev/null
+++ b/ROMFS/px4fmu_common/init.d/airframes/51003_hiwonder_ackermann
@@ -0,0 +1,46 @@
+#!/bin/sh
+#
+# @name Hiwonder Ackermann
+#
+# @url https://www.hiwonder.com/products/ackermann-steering-chassis?variant=40382428348503
+#
+# @type Rover
+# @class Rover
+#
+
+. ${R}etc/init.d/rc.rover_ackermann_defaults
+
+param set-default HIWONDER_EMM_EN 1 # Enable motor driver
+param set-default BAT1_N_CELLS 3
+param set-default NAV_ACC_RAD 0.5
+
+# Ackermann Parameters
+param set-default RA_WHEEL_BASE 0.17
+param set-default RA_ACC_RAD_GAIN 1
+param set-default RA_ACC_RAD_MAX 1
+param set-default RA_MAX_STR_ANG 0.698132
+
+# Rover Rate Control Parameters
+param set-default RO_YAW_EXPO 0.6
+param set-default RO_YAW_SUPEXPO 0.3
+param set-default RO_YAW_RATE_I 0.1
+param set-default RO_YAW_RATE_P 0.1
+param set-default RO_YAW_RATE_LIM 150
+
+# Rover Attitude Control Parameters
+param set-default RO_YAW_P 5
+
+# Rover Velocity Control Parameters
+param set-default RO_ACCEL_LIM 1.6
+param set-default RO_DECEL_LIM 3
+param set-default RO_JERK_LIM 10
+param set-default RO_MAX_THR_SPEED 1.2
+param set-default RO_SPEED_LIM 1.1
+param set-default RO_SPEED_I 0.05
+param set-default RO_SPEED_P 0.1
+param set-default RO_SPEED_RED 1
+
+# Pure Pursuit parameters
+param set-default PP_LOOKAHD_GAIN 1
+param set-default PP_LOOKAHD_MAX 10
+param set-default PP_LOOKAHD_MIN 1
diff --git a/ROMFS/px4fmu_common/init.d/airframes/52001_hiwonder_mecanum b/ROMFS/px4fmu_common/init.d/airframes/52001_hiwonder_mecanum
new file mode 100644
index 0000000000..e0543572ff
--- /dev/null
+++ b/ROMFS/px4fmu_common/init.d/airframes/52001_hiwonder_mecanum
@@ -0,0 +1,43 @@
+#!/bin/sh
+#
+# @name Hiwonder Mecanum
+#
+# @url https://www.hiwonder.com/products/large-metal-4wd-vehicle-chassis-green
+#
+# @type Rover
+# @class Rover
+#
+
+. ${R}etc/init.d/rc.rover_mecanum_defaults
+
+param set-default HIWONDER_EMM_EN 1 # Enable motor driver
+param set-default BAT1_N_CELLS 3
+param set-default NAV_ACC_RAD 0.5
+
+# Mecanum Parameters
+param set-default RM_WHEEL_TRACK 0.16
+
+# Rover Rate Control Parameters
+param set-default RO_YAW_EXPO 0.2
+param set-default RO_YAW_SUPEXPO 0.1
+param set-default RO_YAW_RATE_I 0.1
+param set-default RO_YAW_RATE_P 0.1
+param set-default RO_YAW_RATE_LIM 130
+
+# Rover Attitude Control Parameters
+param set-default RO_YAW_P 5
+
+# Rover Velocity Control Parameters
+param set-default RO_ACCEL_LIM 0.9
+param set-default RO_DECEL_LIM 1.2
+param set-default RO_JERK_LIM 10
+param set-default RO_MAX_THR_SPEED 0.5
+param set-default RO_SPEED_LIM 0.45
+param set-default RO_SPEED_I 0.05
+param set-default RO_SPEED_P 0.1
+param set-default RO_SPEED_RED 1
+
+# Pure Pursuit parameters
+param set-default PP_LOOKAHD_GAIN 1
+param set-default PP_LOOKAHD_MAX 10
+param set-default PP_LOOKAHD_MIN 1
diff --git a/ROMFS/px4fmu_common/init.d/airframes/CMakeLists.txt b/ROMFS/px4fmu_common/init.d/airframes/CMakeLists.txt
index fd6827e509..92a15e1023 100644
--- a/ROMFS/px4fmu_common/init.d/airframes/CMakeLists.txt
+++ b/ROMFS/px4fmu_common/init.d/airframes/CMakeLists.txt
@@ -146,6 +146,7 @@ if(CONFIG_MODULES_ROVER_DIFFERENTIAL)
# [50000, 50999] Differential rovers
50000_generic_rover_differential
50001_aion_robotics_r1_rover
+ 50002_hiwonder_tracked
)
endif()
@@ -155,6 +156,7 @@ if(CONFIG_MODULES_ROVER_ACKERMANN)
51000_generic_rover_ackermann
51001_axial_scx10_2_trail_honcho
51002_nxp_b3rb
+ 51003_hiwonder_ackermann
)
endif()
@@ -162,6 +164,7 @@ if(CONFIG_MODULES_ROVER_MECANUM)
px4_add_romfs_files(
# [52000, 52999] Mecanum rovers
52000_generic_rover_mecanum
+ 52001_hiwonder_mecanum
)
endif()
diff --git a/docs/assets/airframes/rover/axial_trail_honcho.png b/docs/assets/airframes/rover/axial_trail_honcho.png
deleted file mode 100644
index 6ddd44a2eb..0000000000
Binary files a/docs/assets/airframes/rover/axial_trail_honcho.png and /dev/null differ
diff --git a/docs/assets/airframes/rover/hiwonder_rovers/hiwonder_ackermann.png b/docs/assets/airframes/rover/hiwonder_rovers/hiwonder_ackermann.png
new file mode 100644
index 0000000000..2e88689204
Binary files /dev/null and b/docs/assets/airframes/rover/hiwonder_rovers/hiwonder_ackermann.png differ
diff --git a/docs/assets/airframes/rover/hiwonder_rovers/hiwonder_ackermann_motors.png b/docs/assets/airframes/rover/hiwonder_rovers/hiwonder_ackermann_motors.png
new file mode 100644
index 0000000000..4d2df07a4b
Binary files /dev/null and b/docs/assets/airframes/rover/hiwonder_rovers/hiwonder_ackermann_motors.png differ
diff --git a/docs/assets/airframes/rover/hiwonder_rovers/hiwonder_ackermann_servo.png b/docs/assets/airframes/rover/hiwonder_rovers/hiwonder_ackermann_servo.png
new file mode 100644
index 0000000000..ee978067e8
Binary files /dev/null and b/docs/assets/airframes/rover/hiwonder_rovers/hiwonder_ackermann_servo.png differ
diff --git a/docs/assets/airframes/rover/hiwonder_rovers/hiwonder_ackermann_wiring_annotated.png b/docs/assets/airframes/rover/hiwonder_rovers/hiwonder_ackermann_wiring_annotated.png
new file mode 100644
index 0000000000..49c1c1e812
Binary files /dev/null and b/docs/assets/airframes/rover/hiwonder_rovers/hiwonder_ackermann_wiring_annotated.png differ
diff --git a/docs/assets/airframes/rover/hiwonder_rovers/hiwonder_mecanum.png b/docs/assets/airframes/rover/hiwonder_rovers/hiwonder_mecanum.png
new file mode 100644
index 0000000000..731aeee1df
Binary files /dev/null and b/docs/assets/airframes/rover/hiwonder_rovers/hiwonder_mecanum.png differ
diff --git a/docs/assets/airframes/rover/hiwonder_rovers/hiwonder_mecanum_motors.png b/docs/assets/airframes/rover/hiwonder_rovers/hiwonder_mecanum_motors.png
new file mode 100644
index 0000000000..71a405020b
Binary files /dev/null and b/docs/assets/airframes/rover/hiwonder_rovers/hiwonder_mecanum_motors.png differ
diff --git a/docs/assets/airframes/rover/hiwonder_rovers/hiwonder_rovers.png b/docs/assets/airframes/rover/hiwonder_rovers/hiwonder_rovers.png
new file mode 100644
index 0000000000..0213bbad16
Binary files /dev/null and b/docs/assets/airframes/rover/hiwonder_rovers/hiwonder_rovers.png differ
diff --git a/docs/assets/airframes/rover/hiwonder_rovers/hiwonder_tracked.png b/docs/assets/airframes/rover/hiwonder_rovers/hiwonder_tracked.png
new file mode 100644
index 0000000000..1474fba172
Binary files /dev/null and b/docs/assets/airframes/rover/hiwonder_rovers/hiwonder_tracked.png differ
diff --git a/docs/assets/airframes/rover/hiwonder_rovers/hiwonder_tracked_motors.png b/docs/assets/airframes/rover/hiwonder_rovers/hiwonder_tracked_motors.png
new file mode 100644
index 0000000000..f392acd763
Binary files /dev/null and b/docs/assets/airframes/rover/hiwonder_rovers/hiwonder_tracked_motors.png differ
diff --git a/docs/assets/airframes/rover/hiwonder_rovers/hiwonder_wiring_annotated.png b/docs/assets/airframes/rover/hiwonder_rovers/hiwonder_wiring_annotated.png
new file mode 100644
index 0000000000..7433e5d42b
Binary files /dev/null and b/docs/assets/airframes/rover/hiwonder_rovers/hiwonder_wiring_annotated.png differ
diff --git a/docs/assets/airframes/rover/rover_mecanum.png b/docs/assets/airframes/rover/rover_mecanum.png
deleted file mode 100644
index f07fde57b7..0000000000
Binary files a/docs/assets/airframes/rover/rover_mecanum.png and /dev/null differ
diff --git a/docs/assets/airframes/rover/rovers.png b/docs/assets/airframes/rover/rovers.png
deleted file mode 100644
index 8e46dbf437..0000000000
Binary files a/docs/assets/airframes/rover/rovers.png and /dev/null differ
diff --git a/docs/en/SUMMARY.md b/docs/en/SUMMARY.md
index 468ba9d7ed..0a209b7bb2 100644
--- a/docs/en/SUMMARY.md
+++ b/docs/en/SUMMARY.md
@@ -430,7 +430,10 @@
- [Position Tuning](config_rover/position_tuning.md)
- [Apps & API](flight_modes_rover/api.md)
- [Complete Vehicles](complete_vehicles_rover/index.md)
- - [Aion Robotics R1](complete_vehicles_rover/aion_r1.md)
+ - [Hiwonder Ackermann Chassis](complete_vehicles_rover/hiwonder_ackermann.md)
+ - [Hiwonder Tracked Chassis](complete_vehicles_rover/hiwonder_tracked.md)
+ - [Hiwonder Mecanum Chassis](complete_vehicles_rover/hiwonder_mecanum.md)
+ - [Aion Robotics R1 (Discontinued)](complete_vehicles_rover/aion_r1.md)
- [Submarines (experimental)](frames_sub/index.md)
- [BlueROV2](frames_sub/bluerov2.md)
- [Airframes Reference](airframes/airframe_reference.md)
diff --git a/docs/en/complete_vehicles_rover/hiwonder_ackermann.md b/docs/en/complete_vehicles_rover/hiwonder_ackermann.md
new file mode 100644
index 0000000000..47415fbded
--- /dev/null
+++ b/docs/en/complete_vehicles_rover/hiwonder_ackermann.md
@@ -0,0 +1,116 @@
+# Hiwonder Ackermann
+
+
+
+The [Hiwonder Ackermann](https://www.hiwonder.com/products/ackermann-steering-chassis?variant=40382428348503) rover is a bare-bones platform including a chassis, four wheels, two [motors with encoders](https://www.hiwonder.com/products/hall-encoder-dc-geared-motor?variant=40451123675223), a servo and a [motor driver board](https://www.hiwonder.com/products/4-channel-encoder-motor-driver).
+The chassis offers many mounting points, providing the flexibility to attach your own flight controller, sensors and other payload.
+
+This documentation illustrates the setup of the rover and the configuration of the actuators.
+
+
+
+## Parts List
+
+::: tip
+The hardware below is just an example — use whatever you have available.
+Make sure all parts are compatible with your flight controller's ports, and adjust the wiring as needed.
+Alternatives are listed in:
+
+- [Flight Controllers](../flight_controller/index.md)
+- [PX4-Compatible Receivers](../getting_started/rc_transmitter_receiver.md#px4-compatible-receivers-compatible_receivers)
+- [Data Links](../data_links/index.md)
+- [Global Navigation Satellite Systems (GNSS)](../gps_compass/index.md#supported-gnss) or [RTK GNSS](../gps_compass/rtk_gps.md)
+
+:::
+
+The following parts are used in this build:
+
+- Frame: [Hiwonder Ackermann Chassis](https://www.hiwonder.com/products/ackermann-steering-chassis?variant=40382428348503)
+- Flight Controller: [Auterion Skynode S](https://auterion.com/product/skynode-s/)
+
+ ::: info
+ The flight controller and motor driver board used in this build are both directly supplied at the same 3S battery voltage (~11V).
+
+ Many flight controllers require a lower voltage power supply, so if you are using a different controller you may need a DC-to-DC converter to power it from the battery — see [Power Modules & Power Distribution Boards](../power_module/index.md).
+ :::
+
+- Receiver: [TBS Crossfire Nano RX](https://www.team-blacksheep.com/products/prod:crossfire_nano_rx?srsltid=AfmBOopvPF1mhPRIS11amSwdKf4OFZlt2ibj7XJwu05kVWt4S_L-ZNuD)
+- Power: 3S Lipo Battery
+- Dc-to-Dc Converter: [BEC12S-PRO](https://www.mateksys.com/?portfolio=bec12s-pro).
+
+ The servo needs to be supplied with 6-8.4V (and with a current rating of higher than 3A).
+ This Dc-to-Dc converted is needed to transform the voltage from the 3S battery to this range.
+
+- GNSS: [Holybro RTK F9P GPS](../gps_compass/rtk_gps_holybro_h-rtk-f9p.md)
+- I2C Splitter
+
+ ::: info
+ This part is only necessary if your flight controller has only one I2C port (we need one for the motor driver board and one for the compass in the GNSS module).
+ Many boards will have a dedicated GPS port (which often includes an I2C port) and one or more separate I2C ports for additional peripherals.
+ :::
+
+- LTE Dongle: Used to establish a data link between the vehicle and the ground control station.
+
+## Wiring and Assembly
+
+The following images shows the wiring of the various components of this build.
+The connections from the motors to the motor controller board are not shown.
+
+
+
+::: info
+This image only serves as an example for the wiring process, with your hardware this can look very different.
+Check the documentation of your parts to ensure that you connect to correct pins.
+:::
+
+Now connect the battery to the Dc-to-Dc converter to give it power.
+To power the servo, connect the red (6-8.4V) and black (GND) wire to the output of the DC-to-Dc converter and the white (PWM) wire to a PWM output of your flight controller.
+
+
+
+With the wiring complete, you can now securely attach your hardware to the chassis.
+
+::: tip
+For the initial build you might attach components using double sided tape.
+For a longer term solution we highly recommend 3d printing mounts that you attach to the chassis using the mounting points.
+:::
+
+## Building the Firmware
+
+This frame works with the usual Rover firmware variants on most flight controllers.
+You can use either prebuilt versions or build the firmware yourself (see [Flashing the Rover Build](../config_rover/index.md#flashing-the-rover-build) and [Building Rover](../config_rover/index.md#building-rover) in _Rover Configuration/Tuning_).
+
+A few boards may omit the [`hiwonder_emm` driver](../modules/modules_driver.md#hiwonder_emm) for the [Hiwonder 4-Channel Encoder Motor Module](../peripherals/hiwonder_emm.md) used by this vehicle.
+If your board does not ship with it you will need a custom build — see [Hiwonder 4-Channel Encoder Motor Module > Building the Firmware](../peripherals/hiwonder_emm.md#building-the-firmware) for instructions.
+
+## PX4 Configuration
+
+Use _QGroundControl_ for rover configuration:
+
+1. [Flash the rover build](../config_rover/index.md#flashing-the-rover-build) onto your flight controller with the following adjustments:
+2. In the [Basic Configuration](../config/index.md) section, select the [Airframe](../config/airframe.md) tab.
+3. Choose **Hiwonder Ackermann** under the **Rover** category (Alternatively you can set the parameter `SYS_AUTOSTART` to `51003`).
+
+Then configure the actuators:
+
+1. Navigate to [Actuators Configuration & Testing](../config/actuators.md) in QGroundControl.
+2. Select the Hiwonder EMM driver from the list of _Actuator Outputs_.
+
+ Assign the two populated channels of the motor controller board to `Throttle`.
+ The channels are noted on the motor controller board (alternatively randomly assign the channels and use the actuator testing tab to find the correct assignments).
+
+ 
+
+3. Now ensure that both motors are spinning in the same direction.
+ If that is not the case check the `Rev Range` box on one of the motors.
+4. Arm the rover in [Manual Mode](../flight_modes_rover/manual.md#manual-mode) and use the trottle stick to drive forwards.
+ If the rover drives backwards instead, invert the `Rev Range` checkboxes on **both** motors.
+5. To configure the servo motor, assign the populated PWM channel to `Steering`.
+ Set the minimum value to `800`, the maximum to `2200` and the disarm value to `1500`.
+
+ 
+
+6. Arm the rover in [Manual Mode](../flight_modes_rover/manual.md#manual-mode) and use the steering stick to move the servo.
+ If the rover steers in the wrong direction check the `Rev Range` checkbox of the servo.
+
+You have now successfully setup your rover and can start testing all [driving modes](../flight_modes_rover/index.md) PX4 has to offer!
diff --git a/docs/en/complete_vehicles_rover/hiwonder_mecanum.md b/docs/en/complete_vehicles_rover/hiwonder_mecanum.md
new file mode 100644
index 0000000000..a947f7cc81
--- /dev/null
+++ b/docs/en/complete_vehicles_rover/hiwonder_mecanum.md
@@ -0,0 +1,99 @@
+# Hiwonder Mecanum
+
+
+
+The [Hiwonder Mecanum](https://www.hiwonder.com/products/large-metal-4wd-vehicle-chassis-green) rover is a bare-bones platform including a chassis, four [mecanum wheels](https://www.hiwonder.com/products/97mm-mecanum-wheel), four [motors with encoders](https://www.hiwonder.com/products/hall-encoder-dc-geared-motor?variant=40451123675223) and a [motor driver board](https://www.hiwonder.com/products/4-channel-encoder-motor-driver).
+The chassis offers many mounting points, providing the flexibility to attach your own flight controller, sensors and other payload.
+
+This documentation illustrates the setup of the rover and the configuration of the actuators.
+
+
+
+## Parts List
+
+::: tip
+The hardware below is just an example — use whatever you have available.
+Make sure all parts are compatible with your flight controller's ports, and adjust the wiring as needed.
+Alternatives are listed in:
+
+- [Flight Controllers](../flight_controller/index.md)
+- [PX4-Compatible Receivers](../getting_started/rc_transmitter_receiver.md#px4-compatible-receivers-compatible_receivers)
+- [Data Links](../data_links/index.md)
+- [Global Navigation Satellite Systems (GNSS)](../gps_compass/index.md#supported-gnss) or [RTK GNSS](../gps_compass/rtk_gps.md)
+
+:::
+
+The following parts are used in this build:
+
+- Frame: [Hiwonder Mecanum Chassis](https://www.hiwonder.com/products/large-metal-4wd-vehicle-chassis-green)
+- Flight Controller: [Auterion Skynode S](https://auterion.com/product/skynode-s/)
+
+ ::: info
+ The flight controller and motor driver board used in this build are both directly supplied at the same 3S battery voltage (~11V).
+
+ Many flight controllers require a lower voltage power supply, so if you are using a different controller you may need a DC-to-DC converter to power it from the battery — see [Power Modules & Power Distribution Boards](../power_module/index.md).
+ :::
+
+- Receiver: [TBS Crossfire Nano RX](https://www.team-blacksheep.com/products/prod:crossfire_nano_rx?srsltid=AfmBOopvPF1mhPRIS11amSwdKf4OFZlt2ibj7XJwu05kVWt4S_L-ZNuD)
+- Power: 3S Lipo Battery
+- GNSS: [Holybro RTK F9P GPS](../gps_compass/rtk_gps_holybro_h-rtk-f9p.md)
+- I2C Splitter
+
+ ::: info
+ This part is only necessary if your flight controller has only one I2C port (we need one for the motor driver board and one for the compass in the GNSS module).
+ Many boards will have a dedicated GPS port (which often includes an I2C port) and one or more separate I2C ports for additional peripherals.
+ :::
+
+- LTE Dongle: Used to establish a data link between the vehicle and the ground control station.
+
+## Wiring and Assembly
+
+The following images shows the wiring of the various components of this build.
+The connections from the motors to the motor controller board are not shown.
+
+
+
+::: info
+This image only serves as an example for the wiring process, with your hardware this can look very different.
+Check the documentation of your parts to ensure that you connect to correct pins.
+:::
+
+To assemble your rover connect the motors to the chassis using the supplied screws, mount the wheels to the motor shafts (there are 2 different types of mecanum wheels, make sure you mount them to the correct motor!) and securely attach your hardware.
+
+::: tip
+For the initial build you might attach components using double sided tape.
+For a longer term solution we highly recommend 3d printing mounts that you attach to the chassis using the mounting points.
+:::
+
+## Building the Firmware
+
+This frame works with the usual Rover firmware variants on most flight controllers.
+You can use either prebuilt versions or build the firmware yourself (see [Flashing the Rover Build](../config_rover/index.md#flashing-the-rover-build) and [Building Rover](../config_rover/index.md#building-rover) in _Rover Configuration/Tuning_).
+
+A few boards may omit the [`hiwonder_emm` driver](../modules/modules_driver.md#hiwonder_emm) for the [Hiwonder 4-Channel Encoder Motor Module](../peripherals/hiwonder_emm.md) used by this vehicle.
+If your board does not ship with it you will need a custom build — see [Hiwonder 4-Channel Encoder Motor Module > Building the Firmware](../peripherals/hiwonder_emm.md#building-the-firmware) for instructions.
+
+## PX4 Configuration
+
+Use _QGroundControl_ for rover configuration:
+
+1. [Flash the rover build](../config_rover/index.md#flashing-the-rover-build) onto your flight controller with the following adjustments:
+2. In the [Basic Configuration](../config/index.md) section, select the [Airframe](../config/airframe.md) tab.
+3. Choose **Hiwonder Mecanum** under the **Rover** category (Alternatively you can set the parameter `SYS_AUTOSTART` to `52001`).
+
+Then configure the actuators:
+
+1. Navigate to [Actuators Configuration & Testing](../config/actuators.md) in QGroundControl.
+2. Select the Hiwonder EMM driver from the list of _Actuator Outputs_.
+
+ Assign the channels to the corresponding motor.
+ The channels are noted on the motor controller board (alternatively randomly assign the channels and use the actuator testing tab to find the correct assignments).
+ Now ensure that the motors are all spinning in the same direction.
+ If that is not the case check the `Rev Range` box on the ones that are spinning in the opposite direction.
+
+ 
+
+3. Arm the rover in [Manual Mode](../flight_modes_rover/manual.md#manual-mode) and use the trottle stick to drive forwards.
+ If the rover drives backwards instead, invert the `Rev Range` checkboxes on **all** motors.
+
+You have now successfully setup your rover and can start testing all [driving modes](../flight_modes_rover/index.md) PX4 has to offer!
diff --git a/docs/en/complete_vehicles_rover/hiwonder_tracked.md b/docs/en/complete_vehicles_rover/hiwonder_tracked.md
new file mode 100644
index 0000000000..4d05233fab
--- /dev/null
+++ b/docs/en/complete_vehicles_rover/hiwonder_tracked.md
@@ -0,0 +1,97 @@
+# Hiwonder Tracked
+
+
+
+The [Hiwonder Tracked](https://www.hiwonder.com/products/suspended-shock-absorbing-tracked-chassis?variant=40378709835863) rover is a bare-bones platform including a chassis, two tracks, two [motors with encoders](https://www.hiwonder.com/products/hall-encoder-dc-geared-motor?variant=40451123675223) and a [motor driver board](https://www.hiwonder.com/products/4-channel-encoder-motor-driver).
+The chassis offers many mounting points, providing the flexibility to attach your own flight controller, sensors and other payload.
+
+This documentation illustrates the setup of the rover and the configuration of the actuators.
+
+
+
+## Parts List
+
+::: tip
+The hardware below is just an example — use whatever you have available.
+Make sure all parts are compatible with your flight controller's ports, and adjust the wiring as needed.
+Alternatives are listed in:
+
+- [Flight Controllers](../flight_controller/index.md)
+- [PX4-Compatible Receivers](../getting_started/rc_transmitter_receiver.md#px4-compatible-receivers-compatible_receivers)
+- [Data Links](../data_links/index.md)
+- [Global Navigation Satellite Systems (GNSS)](../gps_compass/index.md#supported-gnss) or [RTK GNSS](../gps_compass/rtk_gps.md)
+
+:::
+
+The following parts are used in this build:
+
+- Frame: [Hiwonder Tracked Chassis](https://www.hiwonder.com/products/suspended-shock-absorbing-tracked-chassis?variant=40378709835863)
+- Flight Controller: [Auterion Skynode S](https://auterion.com/product/skynode-s/)
+
+ ::: info
+ The flight controller and motor driver board used in this build are both directly supplied at the same 3S battery voltage (~11V).
+
+ Many flight controllers require a lower voltage power supply, so if you are using a different controller you may need a DC-to-DC converter to power it from the battery — see [Power Modules & Power Distribution Boards](../power_module/index.md).
+ :::
+
+- Receiver: [TBS Crossfire Nano RX](https://www.team-blacksheep.com/products/prod:crossfire_nano_rx?srsltid=AfmBOopvPF1mhPRIS11amSwdKf4OFZlt2ibj7XJwu05kVWt4S_L-ZNuD)
+- Power: 3S Lipo Battery
+- GNSS: [Holybro RTK F9P GPS](../gps_compass/rtk_gps_holybro_h-rtk-f9p.md)
+- I2C Splitter
+
+ ::: info
+ This part is only necessary if your flight controller has only one I2C port (we need one for the motor driver board and one for the compass in the GNSS module).
+ Many boards will have a dedicated GPS port (which often includes an I2C port) and one or more separate I2C ports for additional peripherals.
+ :::
+
+- LTE Dongle: Used to establish a data link between the vehicle and the ground control station.
+
+## Wiring and Assembly
+
+The following images shows the wiring of the various components of this build.
+The connections from the motors to the motor controller board are not shown.
+
+
+
+::: info
+This image only serves as an example for the wiring process, with your hardware this can look very different.
+Check the documentation of your parts to ensure that you connect to correct pins.
+:::
+
+With the wiring complete, you can now securely attach your hardware to the chassis.
+
+::: tip
+For the initial build you might attach components using double sided tape.
+For a longer term solution we highly recommend 3d printing mounts that you attach to the chassis using the mounting points.
+:::
+
+## Building the Firmware
+
+This frame works with the usual Rover firmware variants on most flight controllers.
+You can use either prebuilt versions or build the firmware yourself (see [Flashing the Rover Build](../config_rover/index.md#flashing-the-rover-build) and [Building Rover](../config_rover/index.md#building-rover) in _Rover Configuration/Tuning_).
+
+A few boards may omit the [`hiwonder_emm` driver](../modules/modules_driver.md#hiwonder_emm) for the [Hiwonder 4-Channel Encoder Motor Module](../peripherals/hiwonder_emm.md) used by this vehicle.
+If your board does not ship with it you will need a custom build — see [Hiwonder 4-Channel Encoder Motor Module > Building the Firmware](../peripherals/hiwonder_emm.md#building-the-firmware) for instructions.
+
+## PX4 Configuration
+
+Use _QGroundControl_ for rover configuration:
+
+1. [Flash your custom rover build](../config_rover/index.md#flashing-the-rover-build) onto your flight controller.
+2. In the [Basic Configuration](../config/index.md) section, select the [Airframe](../config/airframe.md) tab.
+3. Choose **Hiwonder Tracked** under the **Rover** category (Alternatively you can set the parameter `SYS_AUTOSTART` to `50002`).
+
+Then configure the actuators:
+
+1. Navigate to [Actuators Configuration & Testing](../config/actuators.md) in QGroundControl.
+2. Select the Hiwonder EMM driver from the list of _Actuator Outputs_.
+
+ Assign one of the populated channels of the motor controller board to the `Left Motor` and one to the `Right Motor`. The channels are noted on the motor controller board (alternatively randomly assign the channels and use the actuator testing tab to find the correct assignments).
+ Now ensure that both motors are spinning in the same direction. If that is not the case check the `Rev Range` box on one of the motors.
+
+ 
+
+3. Arm the rover in [Manual Mode](../flight_modes_rover/manual.md#manual-mode) and use the trottle stick to drive forwards.
+ If the rover drives backwards instead, invert the `Rev Range` checkboxes on **both** motors.
+
+You have now successfully setup your rover and can start testing all [driving modes](../flight_modes_rover/index.md) PX4 has to offer!
diff --git a/docs/en/complete_vehicles_rover/index.md b/docs/en/complete_vehicles_rover/index.md
index 1bd34f909f..237bf7bef9 100644
--- a/docs/en/complete_vehicles_rover/index.md
+++ b/docs/en/complete_vehicles_rover/index.md
@@ -1,5 +1,16 @@
# Complete Vehicles (Rover)
-This section contains information about fully assembled vehicles that use PX4:
+The following guides exemplify the build process for various hardware setups and can be used as reference for your own rover:
-1. [Aion Robotics R1 UGV (Differential Rover)](../complete_vehicles_rover/aion_r1.md)
+## Ackermann
+
+1. [Hiwonder Ackermann Chassis](../complete_vehicles_rover/hiwonder_ackermann.md)
+
+## Differential
+
+1. [Hiwonder Tracked Chassis](../complete_vehicles_rover/hiwonder_tracked.md)
+2. [(Discontinued) Aion Robotics R1 UGV](../complete_vehicles_rover/aion_r1.md)
+
+## Mecanum
+
+1. [Hiwonder Mecanum Chassis](../complete_vehicles_rover/hiwonder_mecanum.md)
diff --git a/docs/en/frames_rover/index.md b/docs/en/frames_rover/index.md
index f897cf6275..f598d7a339 100644
--- a/docs/en/frames_rover/index.md
+++ b/docs/en/frames_rover/index.md
@@ -13,14 +13,15 @@ Unlike for other vehicle types you will need to install it as custom firmware.
For more information see [Flashing the Rover Build](../config_rover/index.md#flashing-the-rover-build).
:::
-
+
PX4 provides support for the three most common types of rovers:
-| Rover Type | Steering |
+
+| Rover Type | Steering |
| --------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| [**Ackermann**](#ackermann) | Direction is controlled by pointing wheels in the direction of travel. This kind of steering is used on most commercial vehicles, including cars, trucks etc. |
-| [**Differential**](#differential) | Direction is controlled by moving the left- and right-side wheels at different speeds. |
-| [**Mecanum**](#mecanum) | Direction is controlled by moving each mecanum wheel individually at different speeds and in different directions. |
+| [**Ackermann**](#ackermann) | Direction is controlled by pointing wheels in the direction of travel. This kind of steering is used on most commercial vehicles, including cars, trucks etc. |
+| [**Differential**](#differential) | Direction is controlled by moving the left- and right-side wheels at different speeds. |
+| [**Mecanum**](#mecanum) | Direction is controlled by moving each mecanum wheel individually at different speeds and in different directions. |
The supported frames can be seen in [Airframes Reference > Rover](../airframes/airframe_reference.md#rover).
@@ -31,12 +32,12 @@ The supported frames can be seen in [Airframes Reference > Rover](../airframes/a
An Ackermann rover controls its direction by pointing the front wheels in the direction of travel — the [Ackermann steering geometry](https://en.wikipedia.org/wiki/Ackermann_steering_geometry) compensates for the fact that wheels on the inside and outside of the turn move at different rates.
This kind of steering is used on most commercial vehicles, including cars, trucks etc.
+
+
::: info
PX4 does not require that the vehicle uses the Ackermann geometry and will work with any front-steering rover.
:::
-
-
## Differential
@@ -45,7 +46,7 @@ A differential rover's motion is controlled using a differential drive mechanism
Forward motion is achieved by driving both wheels at the same speed in the same direction.
Rotation is achieved by driving the wheels at different speeds in opposite directions, allowing the rover to turn on the spot.
-
+
::: info
The differential setup also work for rovers with skid or tank steering.
@@ -55,10 +56,11 @@ The differential setup also work for rovers with skid or tank steering.
-A Mecanum rover is a type of mobile robot that uses Mecanum wheels to achieve omnidirectional movement. These wheels are unique because they have rollers mounted at a 45-degree angle around their circumference, allowing the rover to move not only forward and backward but also side-to-side and diagonally without needing to rotate first.
+A Mecanum rover is a type of mobile robot that uses Mecanum wheels to achieve omnidirectional movement.
+These wheels are unique because they have rollers mounted at a 45-degree angle around their circumference, allowing the rover to move not only forward and backward but also side-to-side and diagonally without needing to rotate first.
Each wheel is driven by its own motor, and by controlling the speed and direction of each motor, the rover can move in any direction or spin in place.
-
+
## See Also
diff --git a/docs/en/peripherals/hiwonder_emm.md b/docs/en/peripherals/hiwonder_emm.md
index 74b1f8e337..3f84660057 100644
--- a/docs/en/peripherals/hiwonder_emm.md
+++ b/docs/en/peripherals/hiwonder_emm.md
@@ -3,7 +3,7 @@
The [Hiwonder 4-Channel Encoder Motor Driver](https://www.hiwonder.com/products/4-channel-encoder-motor-driver) is a small I2C motor controller with integrated encoder feedback for up to four brushed DC motors.
It is well suited to small wheeled rovers (differential, ackermann, or mecanum) where size, weight, and a low channel count make a full-size ESC overkill.
-PX4 supports the board via the `hiwonder_emm` I2C driver.
+PX4 supports the board via the [`hiwonder_emm`](../modules/modules_driver#hiwonder-emm) I2C driver.
## Features
@@ -29,14 +29,41 @@ The driver auto-detects the four channels but the motor type is selected in firm
The shipped default is `JGB37-520-12V-110RPM`; change [`HiwonderEMM.cpp`](https://github.com/PX4/PX4-Autopilot/blob/main/src/drivers/hiwonder_emm/HiwonderEMM.cpp) (`set_motor_type`) if you use a different model.
:::
+## Building the Firmware
+
+To use the EMM, the `hiwonder_emm` driver must be compiled into the firmware and started on boot.
+
+1. Add the following line to the `rover.px4board` file of your board (for Skynode S this would be in [boards/auterion/fmu-v6s/rover.px4board](https://github.com/PX4/PX4-Autopilot/blob/main/boards/auterion/fmu-v6s/rover.px4board)) so the driver is compiled in:
+
+ ```txt
+ CONFIG_DRIVERS_HIWONDER_EMM=y
+ ```
+
+2. Make sure the driver is started on boot when the [HIWONDER_EMM_EN](../advanced_config/parameter_reference.md#HIWONDER_EMM_EN) parameter is `1`.
+
+ For rover airframes (ackermann, differential, mecanum) this is already done by the shared rover startup script [`rc.rover`](https://github.com/PX4/PX4-Autopilot/blob/main/ROMFS/px4fmu_common/init.d/rc.rover), which contains:
+
+ ```sh
+ if param compare HIWONDER_EMM_EN 1
+ then
+ hiwonder_emm start
+ fi
+ ```
+
+ For other airframes that should use the EMM, add the same block to your board's `rc.board_sensors` file (for Skynode S this would be in [boards/auterion/fmu-v6s/init/rc.board_sensors](https://github.com/PX4/PX4-Autopilot/blob/main/boards/auterion/fmu-v6s/init/rc.board_sensors)).
+
+3. Build and flash the firmware for your board.
+
+::: info
+Many flight controllers already enable `CONFIG_DRIVERS_HIWONDER_EMM=y` in their `rover.px4board` configuration, so the default rover build is sufficient and step 1 is not required.
+:::
+
## Flight Controller Setup
### Enable the Driver
Set the [HIWONDER_EMM_EN](../advanced_config/parameter_reference.md#HIWONDER_EMM_EN) parameter to `1` and reboot.
-
-The driver is started automatically by the rover startup script ([`rc.rover`](https://github.com/PX4/PX4-Autopilot/blob/main/ROMFS/px4fmu_common/init.d/rc.rover)), which runs for every ackermann, differential, and mecanum airframe.
-It is compiled into builds that enable `CONFIG_DRIVERS_HIWONDER_EMM` in the board configuration.
+On the next boot the driver is started by the startup script (see [Building the Firmware](#building-the-firmware)).
### Actuator Allocation
@@ -46,6 +73,16 @@ In [Actuator Configuration](../config/actuators.md), assign the rover wheel outp
The output range is fixed in firmware to `0..255` (the EMM's protocol range, internally mapped to a signed `[-128, 127]` speed command — `128` is stop, values below are reverse, values above are forward).
`EMM_DIS{i}` (disarmed) and `EMM_FAIL{i}` (failsafe) per-channel parameters are user-tunable in the standard range.
+## Supported Vehicles
+
+The EMM is used on the reference Hiwonder rover frames:
+
+- `50002` — Hiwonder differential rover
+- `51003` — Hiwonder ackermann rover
+- `52001` — Hiwonder mecanum rover
+
+See [Rovers](../frames_rover/index.md) for vehicle-side configuration.
+
## Further Information
- Driver source: [`src/drivers/hiwonder_emm`](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/hiwonder_emm)
diff --git a/src/drivers/hiwonder_emm/HiwonderEMM.cpp b/src/drivers/hiwonder_emm/HiwonderEMM.cpp
index a6badb9447..2768a67706 100644
--- a/src/drivers/hiwonder_emm/HiwonderEMM.cpp
+++ b/src/drivers/hiwonder_emm/HiwonderEMM.cpp
@@ -205,7 +205,17 @@ int HiwonderEMM::print_usage(const char *reason)
PRINT_MODULE_DESCRIPTION(
R"DESCR_STR(
### Description
-Hiwonder encoder motor module driver for PX4.
+
+I2C driver for the Hiwonder 4-Channel Encoder Motor Module (EMM), a small motor controller that drives up to
+four brushed DC motors with on-board encoder feedback. Communicates with the EMM on the first external I2C
+bus at address 0x34.
+
+To use this driver, the board configuration must include `CONFIG_DRIVERS_HIWONDER_EMM=y` so the driver is
+compiled into the firmware. At runtime, the driver is enabled by setting the `HIWONDER_EMM_EN` parameter to
+`1` and reboot. It is then started automatically by the rover startup script (`rc.rover`) for ackermann, differential,
+and mecanum rover airframes.
+
+The command to start this driver manually is: `$ hiwonder_emm start`
)DESCR_STR");
PRINT_MODULE_USAGE_NAME("hiwonder_emm", "driver");