docs(rovers): add hiwonder rover airframes and setup guide (#27333)

* rover: add hiwonder rover airframes

* docs: hiwonder rovers setup guide

* docs(docs): compress images

* docs(docs): prettier

* docs(docs): subedit

* docs(rover): add back tip about custom firmware install

* docs(rover): detail the hiwonder build / enable instructions

* docs(rover): fix airframe typo for ackermann

* docs(docs): Improve firmware section

---------

Co-authored-by: chfriedrich98 <chfriedrich@student.ethz.ch>
Co-authored-by: Hamish Willee <hamishwillee@gmail.com>
Co-authored-by: Ramon Roche <mrpollo@gmail.com>
This commit is contained in:
Michael Fritsche
2026-05-21 21:51:52 +02:00
committed by GitHub
parent 1eb6971d84
commit 65be196b9b
25 changed files with 530 additions and 18 deletions
@@ -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
@@ -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
@@ -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
@@ -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()
Binary file not shown.

Before

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 185 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 MiB

+4 -1
View File
@@ -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)
@@ -0,0 +1,116 @@
# Hiwonder Ackermann
<Badge type="tip" text="PX4 v1.18" />
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.
![Hiwonder Ackermann](../../assets/airframes/rover/hiwonder_rovers/hiwonder_ackermann.png)
## 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.
![Hiwonder Wiring](../../assets/airframes/rover/hiwonder_rovers/hiwonder_wiring_annotated.png)
::: 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.
![Hiwonder Ackermann Servo Wiring](../../assets/airframes/rover/hiwonder_rovers/hiwonder_ackermann_wiring_annotated.png)
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).
![Motor Setup](../../assets/airframes/rover/hiwonder_rovers/hiwonder_ackermann_motors.png)
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`.
![Servo Setup](../../assets/airframes/rover/hiwonder_rovers/hiwonder_ackermann_servo.png)
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!
@@ -0,0 +1,99 @@
# Hiwonder Mecanum
<Badge type="tip" text="PX4 v1.18" />
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.
![Hiwonder Mecanum](../../assets/airframes/rover/hiwonder_rovers/hiwonder_mecanum.png)
## 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.
![Hiwonder Wiring](../../assets/airframes/rover/hiwonder_rovers/hiwonder_wiring_annotated.png)
::: 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.
![Motor Setup](../../assets/airframes/rover/hiwonder_rovers/hiwonder_mecanum_motors.png)
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!
@@ -0,0 +1,97 @@
# Hiwonder Tracked
<Badge type="tip" text="PX4 v1.18" />
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.
![Hiwonder Tracked](../../assets/airframes/rover/hiwonder_rovers/hiwonder_tracked.png)
## 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.
![Hiwonder Wiring](../../assets/airframes/rover/hiwonder_rovers/hiwonder_wiring_annotated.png)
::: 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.
![Motor Setup](../../assets/airframes/rover/hiwonder_rovers/hiwonder_tracked_motors.png)
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!
+13 -2
View File
@@ -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)
+12 -10
View File
@@ -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).
:::
![Rovers](../../assets/airframes/rover/rovers.png)
![Rovers](../../assets/airframes/rover/hiwonder_rovers/hiwonder_rovers.png)
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.
![Ackermann rover](../../assets/airframes/rover/hiwonder_rovers/hiwonder_ackermann.png)
::: info
PX4 does not require that the vehicle uses the Ackermann geometry and will work with any front-steering rover.
:::
![Axial Trail Honcho](../../assets/airframes/rover/axial_trail_honcho.png)
## Differential
<Badge type="tip" text="PX4 v1.16" /> <Badge type="warning" text="Experimental" />
@@ -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.
![Aion R1](../../assets/airframes/rover/aion_r1/r1_rover_no_bg.png)
![Tracked Rover](../../assets/airframes/rover/hiwonder_rovers/hiwonder_tracked.png)
::: 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.
<Badge type="tip" text="PX4 v1.16" /> <Badge type="warning" text="Experimental" />
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.
![Mecanum rover](../../assets/airframes/rover/rover_mecanum.png)
![Mecanum rover](../../assets/airframes/rover/hiwonder_rovers/hiwonder_mecanum.png)
## See Also
+41 -4
View File
@@ -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)
+11 -1
View File
@@ -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");