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>
@@ -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()
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 57 KiB |
|
After Width: | Height: | Size: 84 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 88 KiB |
|
After Width: | Height: | Size: 77 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 185 KiB |
|
After Width: | Height: | Size: 93 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 84 KiB |
|
Before Width: | Height: | Size: 53 KiB |
|
Before Width: | Height: | Size: 1.6 MiB |
@@ -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.
|
||||
|
||||

|
||||
|
||||
## 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!
|
||||
@@ -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.
|
||||
|
||||

|
||||
|
||||
## 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!
|
||||
@@ -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.
|
||||
|
||||

|
||||
|
||||
## 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!
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
<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.
|
||||
|
||||

|
||||

|
||||
|
||||
::: 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.
|
||||
|
||||

|
||||

|
||||
|
||||
## See Also
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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");
|
||||
|
||||