Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rover ackermann module #23024

Open
wants to merge 27 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
90ef7d8
added ackermann airframe
chfriedrich98 Apr 16, 2024
d62e8f5
added ackermann module
chfriedrich98 Apr 18, 2024
1b3126a
Apply suggestions from code review
chfriedrich98 Apr 23, 2024
5b12c01
Implemented suggestions from code review
chfriedrich98 Apr 22, 2024
150d69a
fixed build issue
chfriedrich98 Apr 23, 2024
9939834
Apply suggestions from code review
chfriedrich98 Apr 25, 2024
1615c2a
optimize allocations for uORB subscriptions
chfriedrich98 May 6, 2024
c917c2e
fix airframes
chfriedrich98 May 6, 2024
f546853
Apply suggestions from code review
chfriedrich98 May 6, 2024
fa170f1
fixed home position bug
chfriedrich98 May 7, 2024
651a1d0
rename module to rover_ackermann
chfriedrich98 May 8, 2024
1d5d955
rename constants in guidance state machine
chfriedrich98 May 8, 2024
63fd641
Apply suggestions from code review
chfriedrich98 May 27, 2024
3144777
added code suggestions
chfriedrich98 May 27, 2024
a9938dc
restructure uORB topics
chfriedrich98 May 27, 2024
42b9610
cleanup motor commands
chfriedrich98 May 27, 2024
690c859
restructure guidance and enable ackermann in rover builds
chfriedrich98 May 27, 2024
d3c8aa1
added feed-forward term to speed controller
chfriedrich98 May 28, 2024
2b0d78f
add crosstrack error to log
chfriedrich98 May 28, 2024
abffc92
fix naming convention
chfriedrich98 May 28, 2024
8f7b0b0
fixed typo
chfriedrich98 May 28, 2024
01696d3
Clarify setpoint comments
chfriedrich98 May 30, 2024
e58a96d
implemented code suggestions
chfriedrich98 May 30, 2024
4f6f5c9
Apply suggestions from code review
chfriedrich98 Jun 5, 2024
ddd8b7c
cleanup airframes
chfriedrich98 Jun 5, 2024
25871fc
added code suggestions
chfriedrich98 Jun 5, 2024
d1e9f61
fix setpoint naming
chfriedrich98 Jun 5, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
48 changes: 48 additions & 0 deletions ROMFS/px4fmu_common/init.d-posix/airframes/4012_gz_rover_ackermann
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
#!/bin/sh
# @name Rover Ackermann
# @type Rover
# @class Rover

. ${R}etc/init.d/rc.rover_ackermann_defaults

PX4_SIMULATOR=${PX4_SIMULATOR:=gz}
PX4_GZ_WORLD=${PX4_GZ_WORLD:=default}
PX4_SIM_MODEL=${PX4_SIM_MODEL:=rover_ackermann}

param set-default SIM_GZ_EN 1 # Gazebo bridge

# Rover parameters
param set RA_MAX_SPEED 3.6
param set RA_WHEEL_BASE 0.321

# Simulated sensors
param set-default SENS_EN_GPSSIM 1
param set-default SENS_EN_BAROSIM 0
param set-default SENS_EN_MAGSIM 1
param set-default SENS_EN_ARSPDSIM 0

# Wheels
param set-default SIM_GZ_WH_FUNC1 101
param set-default SIM_GZ_WH_MIN1 0
param set-default SIM_GZ_WH_MAX1 200
param set-default SIM_GZ_WH_DIS1 100

param set-default SIM_GZ_WH_FUNC2 101
param set-default SIM_GZ_WH_MIN2 0
param set-default SIM_GZ_WH_MAX2 200
param set-default SIM_GZ_WH_DIS2 100

param set-default SIM_GZ_WH_FUNC3 101
param set-default SIM_GZ_WH_MIN3 0
param set-default SIM_GZ_WH_MAX3 200
param set-default SIM_GZ_WH_DIS3 100

param set-default SIM_GZ_WH_FUNC4 101
param set-default SIM_GZ_WH_MIN4 0
param set-default SIM_GZ_WH_MAX4 200
param set-default SIM_GZ_WH_DIS4 100

# Steering
param set-default SIM_GZ_SV_FUNC1 201
param set-default SIM_GZ_SV_FUNC2 201
param set-default SIM_GZ_SV_REV 3
1 change: 1 addition & 0 deletions ROMFS/px4fmu_common/init.d-posix/airframes/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,7 @@ px4_add_romfs_files(
4009_gz_r1_rover
4010_gz_x500_mono_cam
4011_gz_lawnmower
4012_gz_rover_ackermann

6011_gazebo-classic_typhoon_h480
6011_gazebo-classic_typhoon_h480.post
Expand Down
7 changes: 7 additions & 0 deletions ROMFS/px4fmu_common/init.d/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,13 @@ if(CONFIG_MODULES_DIFFERENTIAL_DRIVE)
)
endif()

if(CONFIG_MODULES_ROVER_ACKERMANN)
px4_add_romfs_files(
rc.rover_ackermann_apps
rc.rover_ackermann_defaults
)
endif()

if(CONFIG_MODULES_UUV_ATT_CONTROL)
px4_add_romfs_files(
rc.uuv_apps
Expand Down
12 changes: 12 additions & 0 deletions ROMFS/px4fmu_common/init.d/airframes/50010_ackermann_rover_generic
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#!/bin/sh
#
# @name Generic ackermann rover
#
# @type Rover
# @class Rover
#
# @board px4_fmu-v2 exclude
# @board bitcraze_crazyflie exclude
#

. ${R}etc/init.d/rc.rover_ackermann_defaults
6 changes: 6 additions & 0 deletions ROMFS/px4fmu_common/init.d/airframes/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,12 @@ if(CONFIG_MODULES_DIFFERENTIAL_DRIVE)
)
endif()

if(CONFIG_MODULES_ROVER_ACKERMANN)
px4_add_romfs_files(
50010_ackermann_rover_generic
)
endif()

if(CONFIG_MODULES_UUV_ATT_CONTROL)
px4_add_romfs_files(
# [60000, 61000] (Unmanned) Underwater Robots
Expand Down
11 changes: 11 additions & 0 deletions ROMFS/px4fmu_common/init.d/rc.rover_ackermann_apps
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
#!/bin/sh
# Standard apps for a ackermann drive rover.

# Start the attitude and position estimator.
ekf2 start &

# Start rover ackermann drive controller.
rover_ackermann start

# Start Land Detector.
land_detector start rover
13 changes: 13 additions & 0 deletions ROMFS/px4fmu_common/init.d/rc.rover_ackermann_defaults
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
#!/bin/sh
# Ackermann rover parameters.

set VEHICLE_TYPE rover_ackermann
param set-default MAV_TYPE 10 # MAV_TYPE_GROUND_ROVER
param set-default CA_AIRFRAME 5 # Rover (Ackermann)
param set-default CA_R_REV 1 # Motor is assumed to be reversible
param set-default EKF2_MAG_TYPE 1 # make sure magnetometer is fused even when not flying
param set-default EKF2_GBIAS_INIT 0.01
param set-default EKF2_ANGERR_INIT 0.01
param set-default NAV_ACC_RAD 0.5 # Waypoint acceptance radius
param set-default NAV_RCL_ACT 6 # Disarm on manual control loss
param set-default COM_FAIL_ACT_T 1 # Delay before failsafe after rc loss
9 changes: 9 additions & 0 deletions ROMFS/px4fmu_common/init.d/rc.vehicle_setup
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,15 @@ then
. ${R}etc/init.d/rc.rover_differential_apps
fi

#
# Ackermann Rover setup.
#
if [ $VEHICLE_TYPE = rover_ackermann ]
then
# Start ackermann drive rover apps.
. ${R}etc/init.d/rc.rover_ackermann_apps
fi

#
# VTOL setup.
#
Expand Down
1 change: 1 addition & 0 deletions boards/px4/fmu-v5/rover.px4board
Original file line number Diff line number Diff line change
Expand Up @@ -19,3 +19,4 @@ CONFIG_MODULES_VTOL_ATT_CONTROL=n
CONFIG_EKF2_AUX_GLOBAL_POSITION=y
# CONFIG_EKF2_WIND is not set
CONFIG_MODULES_DIFFERENTIAL_DRIVE=y
CONFIG_MODULES_ROVER_ACKERMANN=y
2 changes: 2 additions & 0 deletions boards/px4/fmu-v5x/rover.px4board
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,5 @@ CONFIG_MODULES_MC_RATE_CONTROL=n
CONFIG_MODULES_VTOL_ATT_CONTROL=n
CONFIG_EKF2_AUX_GLOBAL_POSITION=y
# CONFIG_EKF2_WIND is not set
CONFIG_MODULES_DIFFERENTIAL_DRIVE=y
CONFIG_MODULES_ROVER_ACKERMANN=y
1 change: 1 addition & 0 deletions boards/px4/fmu-v6c/rover.px4board
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,4 @@ CONFIG_MODULES_VTOL_ATT_CONTROL=n
CONFIG_EKF2_AUX_GLOBAL_POSITION=y
# CONFIG_EKF2_WIND is not set
CONFIG_MODULES_DIFFERENTIAL_DRIVE=y
CONFIG_MODULES_ROVER_ACKERMANN=y
1 change: 1 addition & 0 deletions boards/px4/fmu-v6u/rover.px4board
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,4 @@ CONFIG_MODULES_VTOL_ATT_CONTROL=n
CONFIG_EKF2_AUX_GLOBAL_POSITION=y
# CONFIG_EKF2_WIND is not set
CONFIG_MODULES_DIFFERENTIAL_DRIVE=y
CONFIG_MODULES_ROVER_ACKERMANN=y
1 change: 1 addition & 0 deletions boards/px4/fmu-v6x/rover.px4board
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,4 @@ CONFIG_MODULES_VTOL_ATT_CONTROL=n
CONFIG_EKF2_AUX_GLOBAL_POSITION=y
# CONFIG_EKF2_WIND is not set
CONFIG_MODULES_DIFFERENTIAL_DRIVE=y
CONFIG_MODULES_ROVER_ACKERMANN=y
1 change: 1 addition & 0 deletions boards/px4/fmu-v6xrt/rover.px4board
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,4 @@ CONFIG_MODULES_VTOL_ATT_CONTROL=n
CONFIG_EKF2_AUX_GLOBAL_POSITION=y
# CONFIG_EKF2_WIND is not set
CONFIG_MODULES_DIFFERENTIAL_DRIVE=y
CONFIG_MODULES_ROVER_ACKERMANN=y
1 change: 1 addition & 0 deletions boards/px4/sitl/default.px4board
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ CONFIG_MODE_NAVIGATOR_VTOL_TAKEOFF=y
CONFIG_MODULES_PAYLOAD_DELIVERER=y
CONFIG_MODULES_RC_UPDATE=y
CONFIG_MODULES_REPLAY=y
CONFIG_MODULES_ROVER_ACKERMANN=y
CONFIG_MODULES_ROVER_POS_CONTROL=y
CONFIG_MODULES_SENSORS=y
CONFIG_COMMON_SIMULATION=y
Expand Down
2 changes: 2 additions & 0 deletions msg/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -178,6 +178,8 @@ set(msg_files
RcParameterMap.msg
RegisterExtComponentReply.msg
RegisterExtComponentRequest.msg
RoverAckermannGuidanceStatus.msg
RoverAckermannSetpoint.msg
Rpm.msg
RtlStatus.msg
RtlTimeEstimate.msg
Expand Down
10 changes: 10 additions & 0 deletions msg/RoverAckermannGuidanceStatus.msg
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
uint64 timestamp # time since system start (microseconds)

float32 actual_speed # [m/s] Rover ground speed
float32 desired_speed # [m/s] Rover desired ground speed
float32 lookahead_distance # [m] Lookahead distance of pure pursuit controller
float32 heading_error # [deg] Heading error of pure pursuit controller
float32 speed_pid_integrator # Integrator of PID controller for the rover speed during mission
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is the integrator unit in the output e.g. unit motor command? It would be useful to at least mention the range.

float32 crosstrack_error # [m] Shortest distance from the vehicle to the path

# TOPICS rover_ackermann_guidance_status
6 changes: 6 additions & 0 deletions msg/RoverAckermannSetpoint.msg
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
uint64 timestamp # time since system start (microseconds)

float32 throttle # [-1, 1] Normalized throttle setpoint
float32 steering # [-1, 1] Normalized steering angle setpoint (positive: right, negative: left)

# TOPICS rover_ackermann_setpoint
2 changes: 2 additions & 0 deletions src/modules/logger/logged_topics.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,8 @@ void LoggedTopics::add_default_topics()
add_topic("position_setpoint_triplet", 200);
add_optional_topic("px4io_status");
add_topic("radio_status");
add_topic("rover_ackermann_guidance_status", 100);
add_topic("rover_ackermann_setpoint", 100);
add_topic("rtl_time_estimate", 1000);
add_topic("rtl_status", 2000);
add_optional_topic("sensor_airflow", 100);
Expand Down
49 changes: 49 additions & 0 deletions src/modules/rover_ackermann/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
############################################################################
#
# Copyright (c) 2024 PX4 Development Team. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in
# the documentation and/or other materials provided with the
# distribution.
# 3. Neither the name PX4 nor the names of its contributors may be
# used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
############################################################################

add_subdirectory(RoverAckermannControl)
add_subdirectory(RoverAckermannGuidance)

px4_add_module(
MODULE modules__rover_ackermann
MAIN rover_ackermann
SRCS
RoverAckermann.cpp
RoverAckermann.hpp
DEPENDS
RoverAckermannControl
RoverAckermannGuidance
px4_work_queue
MODULE_CONFIG
module.yaml
)
6 changes: 6 additions & 0 deletions src/modules/rover_ackermann/Kconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
menuconfig MODULES_ROVER_ACKERMANN
bool "rover_ackermann"
default n
depends on MODULES_CONTROL_ALLOCATOR
---help---
Enable support for control of ackermann drive rovers