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

Ackermann: Refactor #24285

Open
wants to merge 4 commits into
base: main
Choose a base branch
from
Open

Ackermann: Refactor #24285

wants to merge 4 commits into from

Conversation

chfriedrich98
Copy link
Contributor

@chfriedrich98 chfriedrich98 commented Feb 3, 2025

Solved Problem

This PR starts a restructure of the rover modules to the following architecture:
rover_code_architecture

This PR focuses on restructuring the ackermann rover module (differential and mecanum will be updated in subsequent PRs).

It also moves functions and parameters that are shared by the different rover modules to a common rover library (rover_control) to reduce redundancy. This library and parameters will also be used in follow up PRs for the differential and mecanum rover modules.

In order to homogenize the 3 rover modules, the rate control for the ackermann module is transformed from lateral acceleration to yaw rate control (to get in line with differential/mecanum). This does not lead to a functional difference as lateral acceleration ($$a_y$$) and yaw rate ($$\dot{\psi}$$) are direclty linked with this equation: $$a_y = V \cdot \dot{\psi}$$ with $$V: $$ Forward speed.

This PR also introduces offboard support for ackermann rovers through the trajectorySetpoint.msg. (Works on #23663)
The Ackermann module supports position and velocity setpoints.

Test coverage

@chfriedrich98 chfriedrich98 added the Rover 🚙 Rovers and other UGV label Feb 3, 2025
@chfriedrich98 chfriedrich98 self-assigned this Feb 3, 2025
Copy link

github-actions bot commented Feb 3, 2025

🔎 FLASH Analysis

px4_fmu-v5x [Total VM Diff: 344 byte (0.02 %)]
    FILE SIZE        VM SIZE    
--------------  -------------- 
+0.0%    +344  +0.0%    +344    .text
  +0.1%    +187  +0.1%    +187    [section .text]
  +1.4%     +72  +1.4%     +72    ../../src/modules/logger/logged_topics.cpp
  [NEW]     +20  [NEW]     +20    msg/topics_sources/rover_velocity_status.cpp
  [NEW]     +16  [NEW]     +16    msg/topics_sources/rover_attitude_setpoint.cpp
  [NEW]     +16  [NEW]     +16    msg/topics_sources/rover_attitude_status.cpp
  [NEW]     +16  [NEW]     +16    msg/topics_sources/rover_rate_setpoint.cpp
  [NEW]     +16  [NEW]     +16    msg/topics_sources/rover_rate_status.cpp
  [NEW]     +16  [NEW]     +16    msg/topics_sources/rover_steering_setpoint.cpp
  [NEW]     +16  [NEW]     +16    msg/topics_sources/rover_throttle_setpoint.cpp
  +1.3%     +16  +1.3%     +16    msg/topics_sources/uORBTopics.cpp
  +0.0%      +8  +0.0%      +8    ../../src/modules/uxrce_dds_client/uxrce_dds_client.cpp
  +0.0%      +4  +0.0%      +4    ../../src/modules/logger/logger.cpp
  -0.2%      -3  -0.2%      -3    ../../src/systemcmds/ver/ver.cpp
  -0.3%      -4  -0.3%      -4    ../../src/modules/logger/util.cpp
 -20.0%      -4 -20.0%      -4    msg/topics_sources/rover_mecanum_status.cpp
  [DEL]     -16  [DEL]     -16    msg/topics_sources/rover_ackermann_guidance_status.cpp
  [DEL]     -16  [DEL]     -16    msg/topics_sources/rover_ackermann_setpoint.cpp
  [DEL]     -16  [DEL]     -16    msg/topics_sources/rover_ackermann_status.cpp
+0.2% +3.57Ki  [ = ]       0    .debug_abbrev
   +11%     +56  [ = ]       0    ../../src/lib/version/version.c
  [DEL]    -900  [ = ]       0    msg/topics_sources/rover_ackermann_guidance_status.cpp
  [DEL]    -900  [ = ]       0    msg/topics_sources/rover_ackermann_setpoint.cpp
  [DEL]    -900  [ = ]       0    msg/topics_sources/rover_ackermann_status.cpp
  [NEW]    +900  [ = ]       0    msg/topics_sources/rover_attitude_setpoint.cpp
  [NEW]    +900  [ = ]       0    msg/topics_sources/rover_attitude_status.cpp
  [NEW]    +900  [ = ]       0    msg/topics_sources/rover_rate_setpoint.cpp
  [NEW]    +900  [ = ]       0    msg/topics_sources/rover_rate_status.cpp
  [NEW]    +900  [ = ]       0    msg/topics_sources/rover_steering_setpoint.cpp
  [NEW]    +900  [ = ]       0    msg/topics_sources/rover_throttle_setpoint.cpp
  [NEW]    +900  [ = ]       0    msg/topics_sources/rover_velocity_status.cpp
+0.1%    +120  [ = ]       0    .debug_aranges
  -5.0%      -8  [ = ]       0    ../../src/lib/version/version.c
  [DEL]     -32  [ = ]       0    msg/topics_sources/rover_ackermann_guidance_status.cpp
  [DEL]     -32  [ = ]       0    msg/topics_sources/rover_ackermann_setpoint.cpp
  [DEL]     -32  [ = ]       0    msg/topics_sources/rover_ackermann_status.cpp
  [NEW]     +32  [ = ]       0    msg/topics_sources/rover_attitude_setpoint.cpp
  [NEW]     +32  [ = ]       0    msg/topics_sources/rover_attitude_status.cpp
  [NEW]     +32  [ = ]       0    msg/topics_sources/rover_rate_setpoint.cpp
  [NEW]     +32  [ = ]       0    msg/topics_sources/rover_rate_status.cpp
  [NEW]     +32  [ = ]       0    msg/topics_sources/rover_steering_setpoint.cpp
  [NEW]     +32  [ = ]       0    msg/topics_sources/rover_throttle_setpoint.cpp
  [NEW]     +32  [ = ]       0    msg/topics_sources/rover_velocity_status.cpp
+0.0%    +192  [ = ]       0    .debug_frame
+0.2% +54.3Ki  [ = ]       0    .debug_info
  +0.2%     +28  [ = ]       0    ../../platforms/common/uORB/Subscription.cpp
  +0.2%     +28  [ = ]       0    ../../platforms/common/uORB/SubscriptionInterval.cpp
  +0.1%     +28  [ = ]       0    ../../platforms/common/uORB/uORB.cpp
  +0.1%     +28  [ = ]       0    ../../platforms/common/uORB/uORBDeviceMaster.cpp
  +0.1%     +28  [ = ]       0    ../../platforms/common/uORB/uORBDeviceNode.cpp
  +0.1%     +28  [ = ]       0    ../../platforms/common/uORB/uORBManager.cpp
  +0.1%     +28  [ = ]       0    ../../platforms/nuttx/src/px4/common/gpio/mcp23009/mcp23009.cpp
  +0.1%     +28  [ = ]       0    ../../src/drivers/adc/ads1115/ads1115_main.cpp
  +0.1%     +28  [ = ]       0    ../../src/drivers/adc/board_adc/ADC.cpp
  +0.1%     +28  [ = ]       0    ../../src/drivers/barometer/bmp388/bmp388.cpp
  +0.1%     +28  [ = ]       0    ../../src/drivers/barometer/ms5611/ms5611.cpp
  +0.1%     +28  [ = ]       0    ../../src/drivers/camera_capture/camera_capture.cpp
  +0.1%     +28  [ = ]       0    ../../src/drivers/camera_trigger/camera_trigger.cpp
  +0.1%     +28  [ = ]       0    ../../src/drivers/cdcacm_autostart/cdcacm_autostart.cpp
  +0.1%     +28  [ = ]       0    ../../src/drivers/differential_pressure/ms4525do/MS4525DO.cpp
  +0.1%     +28  [ = ]       0    ../../src/drivers/differential_pressure/ms5525dso/MS5525DSO.cpp
  +0.1%     +28  [ = ]       0    ../../src/drivers/differential_pressure/sdp3x/SDP3X.cpp
  +0.1%     +28  [ = ]       0    ../../src/drivers/distance_sensor/cm8jl65/CM8JL65.cpp
  +0.1%     +28  [ = ]       0    ../../src/drivers/distance_sensor/lightware_laser_i2c/lightware_laser_i2c.cpp
  +0.1%     +28  [ = ]       0    ../../src/drivers/distance_sensor/lightware_laser_serial/lightware_laser_serial.cpp
 -99.7% +53.8Ki  [ = ]       0    [482 Others]
+0.1% +5.35Ki  [ = ]       0    .debug_line
  -1.3%     -25  [ = ]       0    ../../src/lib/version/version.c
  +1.3%     +86  [ = ]       0    ../../src/modules/logger/logged_topics.cpp
  +0.0%      +8  [ = ]       0    ../../src/modules/logger/logger.cpp
  +0.0%      +6  [ = ]       0    ../../src/modules/uxrce_dds_client/uxrce_dds_client.cpp
  [DEL] -1.32Ki  [ = ]       0    msg/topics_sources/rover_ackermann_guidance_status.cpp
  [DEL] -1.31Ki  [ = ]       0    msg/topics_sources/rover_ackermann_setpoint.cpp
  [DEL] -1.30Ki  [ = ]       0    msg/topics_sources/rover_ackermann_status.cpp
  [NEW] +1.31Ki  [ = ]       0    msg/topics_sources/rover_attitude_setpoint.cpp
  [NEW] +1.30Ki  [ = ]       0    msg/topics_sources/rover_attitude_status.cpp
  [NEW] +1.30Ki  [ = ]       0    msg/topics_sources/rover_rate_setpoint.cpp
  [NEW] +1.29Ki  [ = ]       0    msg/topics_sources/rover_rate_status.cpp
  [NEW] +1.31Ki  [ = ]       0    msg/topics_sources/rover_steering_setpoint.cpp
  [NEW] +1.31Ki  [ = ]       0    msg/topics_sources/rover_throttle_setpoint.cpp
  [NEW] +1.30Ki  [ = ]       0    msg/topics_sources/rover_velocity_status.cpp
  +1.6%     +94  [ = ]       0    msg/topics_sources/uORBTopics.cpp
  +0.4%      +4  [ = ]       0    task/task_cancelpt.c
+0.0%    +754  [ = ]       0    .debug_loc
  -0.4%     -15  [ = ]       0    ../../src/drivers/adc/board_adc/ADC.cpp
  -0.5%     -15  [ = ]       0    ../../src/drivers/camera_capture/camera_capture.cpp
  +0.2%     +15  [ = ]       0    ../../src/drivers/camera_trigger/camera_trigger.cpp
  +0.2%     +15  [ = ]       0    ../../src/drivers/distance_sensor/lightware_laser_i2c/lightware_laser_i2c.cpp
  +0.2%     +15  [ = ]       0    ../../src/drivers/telemetry/bst/bst.cpp
  +0.4%     +15  [ = ]       0    ../../src/drivers/telemetry/frsky_telemetry/sPort_data.cpp
  +0.0%     +28  [ = ]       0    ../../src/drivers/uavcan/uavcan_main.cpp
  +0.0%     +17  [ = ]       0    ../../src/drivers/uavcan/uavcan_servers.cpp
  +0.1%     +15  [ = ]       0    ../../src/lib/avoidance/ObstacleAvoidance.cpp
  +0.1%     +15  [ = ]       0    ../../src/lib/collision_prevention/CollisionPrevention.cpp
  -0.2%     -13  [ = ]       0    ../../src/lib/weather_vane/WeatherVane.cpp
  -0.1%     -15  [ = ]       0    ../../src/modules/airspeed_selector/airspeed_selector_main.cpp
  -0.0%     -15  [ = ]       0    ../../src/modules/commander/Commander.cpp
  -0.4%     -15  [ = ]       0    ../../src/modules/commander/HealthAndArmingChecks/checks/accelerometerCheck.cpp
  -0.6%     -15  [ = ]       0    ../../src/modules/commander/HealthAndArmingChecks/checks/baroCheck.cpp
  -0.2%     -15  [ = ]       0    ../../src/modules/commander/HealthAndArmingChecks/checks/batteryCheck.cpp
  -0.3%     -15  [ = ]       0    ../../src/modules/commander/HomePosition.cpp
  -0.1%     -15  [ = ]       0    ../../src/modules/commander/failure_detector/FailureDetector.cpp
  +0.6%     +48  [ = ]       0    ../../src/modules/control_allocator/VehicleActuatorEffectiveness/ActuatorEffectivenessTiltrotorVTOL.cpp
  -0.1%     -13  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/Transition/FlightTaskTransition.cpp
 -100.0%    +732  [ = ]       0    [22 Others]
+0.0%     +65  [ = ]       0    .debug_ranges
  -2.6%      -8  [ = ]       0    ../../src/lib/version/version.c
  +0.1%      +8  [ = ]       0    ../../src/modules/logger/logger.cpp
  [DEL]     -16  [ = ]       0    msg/topics_sources/rover_ackermann_guidance_status.cpp
  [DEL]     -16  [ = ]       0    msg/topics_sources/rover_ackermann_setpoint.cpp
  [DEL]     -16  [ = ]       0    msg/topics_sources/rover_ackermann_status.cpp
  [NEW]     +16  [ = ]       0    msg/topics_sources/rover_attitude_setpoint.cpp
  [NEW]     +16  [ = ]       0    msg/topics_sources/rover_attitude_status.cpp
  [NEW]     +16  [ = ]       0    msg/topics_sources/rover_rate_setpoint.cpp
  [NEW]     +16  [ = ]       0    msg/topics_sources/rover_rate_status.cpp
  [NEW]     +16  [ = ]       0    msg/topics_sources/rover_steering_setpoint.cpp
  [NEW]     +16  [ = ]       0    msg/topics_sources/rover_throttle_setpoint.cpp
  [NEW]     +16  [ = ]       0    msg/topics_sources/rover_velocity_status.cpp
  +1.5%      +1  [ = ]       0    task/task_cancelpt.c
+0.0%    +585  [ = ]       0    .debug_str
  +0.3%    +166  [ = ]       0    
  +0.4%     +74  [ = ]       0    ../../src/drivers/adc/ads1115/ads1115_main.cpp
  [DEL]     -94  [ = ]       0    msg/topics_sources/rover_ackermann_guidance_status.cpp
  [DEL]    -175  [ = ]       0    msg/topics_sources/rover_ackermann_setpoint.cpp
  [DEL]    -169  [ = ]       0    msg/topics_sources/rover_ackermann_status.cpp
  [NEW]     +63  [ = ]       0    msg/topics_sources/rover_attitude_setpoint.cpp
  [NEW]     +69  [ = ]       0    msg/topics_sources/rover_attitude_status.cpp
  +9.8%      +9  [ = ]       0    msg/topics_sources/rover_differential_guidance_status.cpp
   +49%     +57  [ = ]       0    msg/topics_sources/rover_differential_setpoint.cpp
   +24%     +37  [ = ]       0    msg/topics_sources/rover_differential_status.cpp
   +20%     +14  [ = ]       0    msg/topics_sources/rover_mecanum_guidance_status.cpp
  [NEW]     +59  [ = ]       0    msg/topics_sources/rover_rate_setpoint.cpp
  [NEW]     +57  [ = ]       0    msg/topics_sources/rover_rate_status.cpp
  [NEW]    +111  [ = ]       0    msg/topics_sources/rover_steering_setpoint.cpp
  [NEW]     +95  [ = ]       0    msg/topics_sources/rover_throttle_setpoint.cpp
  [NEW]    +211  [ = ]       0    msg/topics_sources/rover_velocity_status.cpp
   +11%     +24  [ = ]       0    msg/topics_sources/uORBTopics.cpp
  -0.1%     -23  [ = ]       0    src/modules/flight_mode_manager/FlightTasks_generated.cpp
+0.0%    +188  [ = ]       0    .strtab
  -8.1%     -32  [ = ]       0    ../../src/lib/version/version.c
  +0.2%    +122  [ = ]       0    [section .strtab]
  [DEL]     -38  [ = ]       0    msg/topics_sources/rover_ackermann_guidance_status.cpp
  [DEL]     -31  [ = ]       0    msg/topics_sources/rover_ackermann_setpoint.cpp
  [DEL]     -29  [ = ]       0    msg/topics_sources/rover_ackermann_status.cpp
  [NEW]     +30  [ = ]       0    msg/topics_sources/rover_attitude_setpoint.cpp
  [NEW]     +28  [ = ]       0    msg/topics_sources/rover_attitude_status.cpp
  [NEW]     +26  [ = ]       0    msg/topics_sources/rover_rate_setpoint.cpp
  [NEW]     +24  [ = ]       0    msg/topics_sources/rover_rate_status.cpp
  [NEW]     +30  [ = ]       0    msg/topics_sources/rover_steering_setpoint.cpp
  [NEW]     +30  [ = ]       0    msg/topics_sources/rover_throttle_setpoint.cpp
  [NEW]     +28  [ = ]       0    msg/topics_sources/rover_velocity_status.cpp
+0.0%    +256  [ = ]       0    .symtab
  -7.0%     -64  [ = ]       0    ../../src/lib/version/version.c
  +0.3%     +16  [ = ]       0    ../../src/modules/fw_pos_control/FixedwingPositionControl.cpp
  +0.2%    +112  [ = ]       0    [section .symtab]
  [DEL]     -48  [ = ]       0    msg/topics_sources/rover_ackermann_guidance_status.cpp
  [DEL]     -48  [ = ]       0    msg/topics_sources/rover_ackermann_setpoint.cpp
  [DEL]     -48  [ = ]       0    msg/topics_sources/rover_ackermann_status.cpp
  [NEW]     +48  [ = ]       0    msg/topics_sources/rover_attitude_setpoint.cpp
  [NEW]     +48  [ = ]       0    msg/topics_sources/rover_attitude_status.cpp
  [NEW]     +48  [ = ]       0    msg/topics_sources/rover_rate_setpoint.cpp
  [NEW]     +48  [ = ]       0    msg/topics_sources/rover_rate_status.cpp
  [NEW]     +48  [ = ]       0    msg/topics_sources/rover_steering_setpoint.cpp
  [NEW]     +48  [ = ]       0    msg/topics_sources/rover_throttle_setpoint.cpp
  [NEW]     +48  [ = ]       0    msg/topics_sources/rover_velocity_status.cpp
-2.9%    -344  [ = ]       0    [Unmapped]
+0.1% +65.4Ki  +0.0%    +344    TOTAL

px4_fmu-v6x [Total VM Diff: 352 byte (0.02 %)]
    FILE SIZE        VM SIZE    
--------------  -------------- 
+0.0%    +352  +0.0%    +352    .text
  +0.1%    +192  +0.1%    +192    [section .text]
  +1.4%     +72  +1.4%     +72    ../../src/modules/logger/logged_topics.cpp
  [NEW]     +20  [NEW]     +20    msg/topics_sources/rover_velocity_status.cpp
  [NEW]     +16  [NEW]     +16    msg/topics_sources/rover_attitude_setpoint.cpp
  [NEW]     +16  [NEW]     +16    msg/topics_sources/rover_attitude_status.cpp
  [NEW]     +16  [NEW]     +16    msg/topics_sources/rover_rate_setpoint.cpp
  [NEW]     +16  [NEW]     +16    msg/topics_sources/rover_rate_status.cpp
  [NEW]     +16  [NEW]     +16    msg/topics_sources/rover_steering_setpoint.cpp
  [NEW]     +16  [NEW]     +16    msg/topics_sources/rover_throttle_setpoint.cpp
  +1.3%     +16  +1.3%     +16    msg/topics_sources/uORBTopics.cpp
  +0.0%      +8  +0.0%      +8    ../../src/modules/uxrce_dds_client/uxrce_dds_client.cpp
  +0.0%      +4  +0.0%      +4    ../../src/modules/logger/logger.cpp
  -0.3%      -4  -0.3%      -4    ../../src/modules/logger/util.cpp
 -20.0%      -4 -20.0%      -4    msg/topics_sources/rover_mecanum_status.cpp
  [DEL]     -16  [DEL]     -16    msg/topics_sources/rover_ackermann_guidance_status.cpp
  [DEL]     -16  [DEL]     -16    msg/topics_sources/rover_ackermann_setpoint.cpp
  [DEL]     -16  [DEL]     -16    msg/topics_sources/rover_ackermann_status.cpp
+0.2% +3.57Ki  [ = ]       0    .debug_abbrev
   +11%     +56  [ = ]       0    ../../src/lib/version/version.c
  [DEL]    -900  [ = ]       0    msg/topics_sources/rover_ackermann_guidance_status.cpp
  [DEL]    -900  [ = ]       0    msg/topics_sources/rover_ackermann_setpoint.cpp
  [DEL]    -900  [ = ]       0    msg/topics_sources/rover_ackermann_status.cpp
  [NEW]    +900  [ = ]       0    msg/topics_sources/rover_attitude_setpoint.cpp
  [NEW]    +900  [ = ]       0    msg/topics_sources/rover_attitude_status.cpp
  [NEW]    +900  [ = ]       0    msg/topics_sources/rover_rate_setpoint.cpp
  [NEW]    +900  [ = ]       0    msg/topics_sources/rover_rate_status.cpp
  [NEW]    +900  [ = ]       0    msg/topics_sources/rover_steering_setpoint.cpp
  [NEW]    +900  [ = ]       0    msg/topics_sources/rover_throttle_setpoint.cpp
  [NEW]    +900  [ = ]       0    msg/topics_sources/rover_velocity_status.cpp
+0.1%    +120  [ = ]       0    .debug_aranges
  -5.0%      -8  [ = ]       0    ../../src/lib/version/version.c
  [DEL]     -32  [ = ]       0    msg/topics_sources/rover_ackermann_guidance_status.cpp
  [DEL]     -32  [ = ]       0    msg/topics_sources/rover_ackermann_setpoint.cpp
  [DEL]     -32  [ = ]       0    msg/topics_sources/rover_ackermann_status.cpp
  [NEW]     +32  [ = ]       0    msg/topics_sources/rover_attitude_setpoint.cpp
  [NEW]     +32  [ = ]       0    msg/topics_sources/rover_attitude_status.cpp
  [NEW]     +32  [ = ]       0    msg/topics_sources/rover_rate_setpoint.cpp
  [NEW]     +32  [ = ]       0    msg/topics_sources/rover_rate_status.cpp
  [NEW]     +32  [ = ]       0    msg/topics_sources/rover_steering_setpoint.cpp
  [NEW]     +32  [ = ]       0    msg/topics_sources/rover_throttle_setpoint.cpp
  [NEW]     +32  [ = ]       0    msg/topics_sources/rover_velocity_status.cpp
+0.0%    +192  [ = ]       0    .debug_frame
+0.2% +53.9Ki  [ = ]       0    .debug_info
  +0.2%     +28  [ = ]       0    ../../platforms/common/uORB/Subscription.cpp
  +0.2%     +28  [ = ]       0    ../../platforms/common/uORB/SubscriptionInterval.cpp
  +0.1%     +28  [ = ]       0    ../../platforms/common/uORB/uORB.cpp
  +0.1%     +28  [ = ]       0    ../../platforms/common/uORB/uORBDeviceMaster.cpp
  +0.1%     +28  [ = ]       0    ../../platforms/common/uORB/uORBDeviceNode.cpp
  +0.1%     +28  [ = ]       0    ../../platforms/common/uORB/uORBManager.cpp
  +0.1%     +28  [ = ]       0    ../../platforms/nuttx/src/px4/common/gpio/mcp23009/mcp23009.cpp
  +0.1%     +28  [ = ]       0    ../../src/drivers/adc/ads1115/ads1115_main.cpp
  +0.1%     +28  [ = ]       0    ../../src/drivers/adc/board_adc/ADC.cpp
  +0.1%     +28  [ = ]       0    ../../src/drivers/barometer/bmp388/bmp388.cpp
  +0.1%     +28  [ = ]       0    ../../src/drivers/barometer/invensense/icp201xx/ICP201XX.cpp
  +0.1%     +28  [ = ]       0    ../../src/drivers/barometer/ms5611/ms5611.cpp
  +0.1%     +28  [ = ]       0    ../../src/drivers/camera_capture/camera_capture.cpp
  +0.1%     +28  [ = ]       0    ../../src/drivers/camera_trigger/camera_trigger.cpp
  +0.1%     +28  [ = ]       0    ../../src/drivers/cdcacm_autostart/cdcacm_autostart.cpp
  +0.1%     +28  [ = ]       0    ../../src/drivers/differential_pressure/ms4525do/MS4525DO.cpp
  +0.1%     +28  [ = ]       0    ../../src/drivers/differential_pressure/ms5525dso/MS5525DSO.cpp
  +0.1%     +28  [ = ]       0    ../../src/drivers/differential_pressure/sdp3x/SDP3X.cpp
  +0.1%     +28  [ = ]       0    ../../src/drivers/distance_sensor/cm8jl65/CM8JL65.cpp
  +0.1%     +28  [ = ]       0    ../../src/drivers/distance_sensor/lightware_laser_i2c/lightware_laser_i2c.cpp
 -99.7% +53.4Ki  [ = ]       0    [466 Others]
+0.1% +5.34Ki  [ = ]       0    .debug_line
  -1.3%     -25  [ = ]       0    ../../src/lib/version/version.c
  +1.3%     +86  [ = ]       0    ../../src/modules/logger/logged_topics.cpp
  +0.0%      +8  [ = ]       0    ../../src/modules/logger/logger.cpp
  +0.0%      +6  [ = ]       0    ../../src/modules/uxrce_dds_client/uxrce_dds_client.cpp
  [DEL] -1.32Ki  [ = ]       0    msg/topics_sources/rover_ackermann_guidance_status.cpp
  [DEL] -1.31Ki  [ = ]       0    msg/topics_sources/rover_ackermann_setpoint.cpp
  [DEL] -1.30Ki  [ = ]       0    msg/topics_sources/rover_ackermann_status.cpp
  [NEW] +1.31Ki  [ = ]       0    msg/topics_sources/rover_attitude_setpoint.cpp
  [NEW] +1.30Ki  [ = ]       0    msg/topics_sources/rover_attitude_status.cpp
  [NEW] +1.30Ki  [ = ]       0    msg/topics_sources/rover_rate_setpoint.cpp
  [NEW] +1.29Ki  [ = ]       0    msg/topics_sources/rover_rate_status.cpp
  [NEW] +1.31Ki  [ = ]       0    msg/topics_sources/rover_steering_setpoint.cpp
  [NEW] +1.31Ki  [ = ]       0    msg/topics_sources/rover_throttle_setpoint.cpp
  [NEW] +1.30Ki  [ = ]       0    msg/topics_sources/rover_velocity_status.cpp
  +1.6%     +94  [ = ]       0    msg/topics_sources/uORBTopics.cpp
+0.0%    +994  [ = ]       0    .debug_loc
  -0.2%     -15  [ = ]       0    ../../src/drivers/camera_trigger/camera_trigger.cpp
  +0.2%     +15  [ = ]       0    ../../src/drivers/distance_sensor/lightware_laser_i2c/lightware_laser_i2c.cpp
  +1.2%     +13  [ = ]       0    ../../src/drivers/rc_input/ghst_telemetry.cpp
  -0.1%     -15  [ = ]       0    ../../src/drivers/uavcan/remoteid.cpp
  -0.0%      -2  [ = ]       0    ../../src/drivers/uavcan/uavcan_main.cpp
  -0.0%     -25  [ = ]       0    ../../src/drivers/uavcan/uavcan_servers.cpp
  +0.3%     +15  [ = ]       0    ../../src/lib/adsb/AdsbConflict.cpp
  +0.2%     +15  [ = ]       0    ../../src/lib/rtl/rtl_time_estimator.cpp
  -0.2%     -13  [ = ]       0    ../../src/lib/weather_vane/WeatherVane.cpp
  -0.4%     -15  [ = ]       0    ../../src/modules/commander/HealthAndArmingChecks/checks/accelerometerCheck.cpp
  -0.6%     -15  [ = ]       0    ../../src/modules/commander/HealthAndArmingChecks/checks/baroCheck.cpp
  -0.0%      -1  [ = ]       0    ../../src/modules/commander/HealthAndArmingChecks/checks/externalChecks.cpp
  -0.2%     -15  [ = ]       0    ../../src/modules/commander/HealthAndArmingChecks/checks/magnetometerCheck.cpp
  +0.6%     +30  [ = ]       0    ../../src/modules/commander/HomePosition.cpp
  +0.3%     +15  [ = ]       0    ../../src/modules/commander/ModeManagement.cpp
  -0.7%     -15  [ = ]       0    ../../src/modules/commander/baro_calibration.cpp
  -1.0%     -15  [ = ]       0    ../../src/modules/commander/esc_calibration.cpp
  -0.1%     -15  [ = ]       0    ../../src/modules/commander/failure_detector/FailureDetector.cpp
  -0.1%     -15  [ = ]       0    ../../src/modules/commander/mag_calibration.cpp
  +2.1%     +30  [ = ]       0    ../../src/modules/events/status_display.cpp
 -99.9% +1.01Ki  [ = ]       0    [21 Others]
+0.0%     +61  [ = ]       0    .debug_ranges
  -2.6%      -8  [ = ]       0    ../../src/lib/version/version.c
  +0.1%      +8  [ = ]       0    ../../src/modules/logger/logger.cpp
  [DEL]     -16  [ = ]       0    msg/topics_sources/rover_ackermann_guidance_status.cpp
  [DEL]     -16  [ = ]       0    msg/topics_sources/rover_ackermann_setpoint.cpp
  [DEL]     -16  [ = ]       0    msg/topics_sources/rover_ackermann_status.cpp
  [NEW]     +16  [ = ]       0    msg/topics_sources/rover_attitude_setpoint.cpp
  [NEW]     +16  [ = ]       0    msg/topics_sources/rover_attitude_status.cpp
  [NEW]     +16  [ = ]       0    msg/topics_sources/rover_rate_setpoint.cpp
  [NEW]     +16  [ = ]       0    msg/topics_sources/rover_rate_status.cpp
  [NEW]     +16  [ = ]       0    msg/topics_sources/rover_steering_setpoint.cpp
  [NEW]     +16  [ = ]       0    msg/topics_sources/rover_throttle_setpoint.cpp
  [NEW]     +16  [ = ]       0    msg/topics_sources/rover_velocity_status.cpp
  -4.5%      -3  [ = ]       0    task/task_cancelpt.c
+0.0%    +585  [ = ]       0    .debug_str
  +0.3%    +166  [ = ]       0    
  +0.4%     +74  [ = ]       0    ../../src/drivers/adc/ads1115/ads1115_main.cpp
  [DEL]     -94  [ = ]       0    msg/topics_sources/rover_ackermann_guidance_status.cpp
  [DEL]    -175  [ = ]       0    msg/topics_sources/rover_ackermann_setpoint.cpp
  [DEL]    -169  [ = ]       0    msg/topics_sources/rover_ackermann_status.cpp
  [NEW]     +63  [ = ]       0    msg/topics_sources/rover_attitude_setpoint.cpp
  [NEW]     +69  [ = ]       0    msg/topics_sources/rover_attitude_status.cpp
  +9.8%      +9  [ = ]       0    msg/topics_sources/rover_differential_guidance_status.cpp
   +49%     +57  [ = ]       0    msg/topics_sources/rover_differential_setpoint.cpp
   +24%     +37  [ = ]       0    msg/topics_sources/rover_differential_status.cpp
   +20%     +14  [ = ]       0    msg/topics_sources/rover_mecanum_guidance_status.cpp
  [NEW]     +59  [ = ]       0    msg/topics_sources/rover_rate_setpoint.cpp
  [NEW]     +57  [ = ]       0    msg/topics_sources/rover_rate_status.cpp
  [NEW]    +111  [ = ]       0    msg/topics_sources/rover_steering_setpoint.cpp
  [NEW]     +95  [ = ]       0    msg/topics_sources/rover_throttle_setpoint.cpp
  [NEW]    +211  [ = ]       0    msg/topics_sources/rover_velocity_status.cpp
   +11%     +24  [ = ]       0    msg/topics_sources/uORBTopics.cpp
  -0.1%     -23  [ = ]       0    src/modules/flight_mode_manager/FlightTasks_generated.cpp
+0.0%    +188  [ = ]       0    .strtab
  -8.1%     -32  [ = ]       0    ../../src/lib/version/version.c
  +0.2%    +122  [ = ]       0    [section .strtab]
  [DEL]     -38  [ = ]       0    msg/topics_sources/rover_ackermann_guidance_status.cpp
  [DEL]     -31  [ = ]       0    msg/topics_sources/rover_ackermann_setpoint.cpp
  [DEL]     -29  [ = ]       0    msg/topics_sources/rover_ackermann_status.cpp
  [NEW]     +30  [ = ]       0    msg/topics_sources/rover_attitude_setpoint.cpp
  [NEW]     +28  [ = ]       0    msg/topics_sources/rover_attitude_status.cpp
  [NEW]     +26  [ = ]       0    msg/topics_sources/rover_rate_setpoint.cpp
  [NEW]     +24  [ = ]       0    msg/topics_sources/rover_rate_status.cpp
  [NEW]     +30  [ = ]       0    msg/topics_sources/rover_steering_setpoint.cpp
  [NEW]     +30  [ = ]       0    msg/topics_sources/rover_throttle_setpoint.cpp
  [NEW]     +28  [ = ]       0    msg/topics_sources/rover_velocity_status.cpp
+0.0%    +256  [ = ]       0    .symtab
  -7.0%     -64  [ = ]       0    ../../src/lib/version/version.c
  +0.3%     +16  [ = ]       0    ../../src/modules/fw_pos_control/FixedwingPositionControl.cpp
  +0.2%    +112  [ = ]       0    [section .symtab]
  [DEL]     -48  [ = ]       0    msg/topics_sources/rover_ackermann_guidance_status.cpp
  [DEL]     -48  [ = ]       0    msg/topics_sources/rover_ackermann_setpoint.cpp
  [DEL]     -48  [ = ]       0    msg/topics_sources/rover_ackermann_status.cpp
  [NEW]     +48  [ = ]       0    msg/topics_sources/rover_attitude_setpoint.cpp
  [NEW]     +48  [ = ]       0    msg/topics_sources/rover_attitude_status.cpp
  [NEW]     +48  [ = ]       0    msg/topics_sources/rover_rate_setpoint.cpp
  [NEW]     +48  [ = ]       0    msg/topics_sources/rover_rate_status.cpp
  [NEW]     +48  [ = ]       0    msg/topics_sources/rover_steering_setpoint.cpp
  [NEW]     +48  [ = ]       0    msg/topics_sources/rover_throttle_setpoint.cpp
  [NEW]     +48  [ = ]       0    msg/topics_sources/rover_velocity_status.cpp
-0.5%    -352  [ = ]       0    [Unmapped]
+0.1% +65.2Ki  +0.0%    +352    TOTAL

Updated: 2025-02-07T15:06:33

@chfriedrich98 chfriedrich98 marked this pull request as ready for review February 4, 2025 14:02
@chfriedrich98 chfriedrich98 requested a review from sfuhrer February 4, 2025 14:03
Copy link
Contributor

@sfuhrer sfuhrer left a comment

Choose a reason for hiding this comment

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

Thanks for putting in the effort for a clean and shared interface and architecture between all the rover types!
General remarks:

  • as handle both position and velocity in the "Position" controller - how about renaming it to PositionVelocityControl?
  • in the diagram you show that also attitude and rate controllers subscribe to TrajectorySetpoint.msg - is this only for Differential/Mecanum?


void AckermannAttControl::generateAttitudeSetpoint()
{
bool stab_mode_enabled = _vehicle_control_mode.flag_control_manual_enabled
Copy link
Contributor

Choose a reason for hiding this comment

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

Suggested change
bool stab_mode_enabled = _vehicle_control_mode.flag_control_manual_enabled
const bool stab_mode_enabled = _vehicle_control_mode.flag_control_manual_enabled

Copy link
Contributor

Choose a reason for hiding this comment

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

Please go through and set const also below where applicable

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Scanned all files and added the missing const prefixes here: 454995a

Copy link
Contributor

Choose a reason for hiding this comment

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

Mhh cannot find this commit anymore - is it still applied? And my comment here for a const was not valid?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Yes, that should be const. Fixed in e226138

src/lib/rover_control/module.yaml Outdated Show resolved Hide resolved
src/lib/rover_control/module.yaml Outdated Show resolved Hide resolved
src/lib/rover_control/module.yaml Outdated Show resolved Hide resolved
src/lib/rover_control/RoverControl.cpp Show resolved Hide resolved
msg/RoverPositionStatus.msg Outdated Show resolved Hide resolved
src/modules/rover_ackermann/RoverAckermann.cpp Outdated Show resolved Hide resolved
@chfriedrich98
Copy link
Contributor Author

@sfuhrer Thanks for the review!

as handle both position and velocity in the "Position" controller - how about renaming it to PositionVelocityControl?

Implemented that in 5cdc876, also renamed the parameter group Rover Position Control to Rover Velocity Control and the uORB message RoverPositionStatus to RoverVelocityStatus because they both actually only deal with velocity.

in the diagram you show that also attitude and rate controllers subscribe to TrajectorySetpoint.msg - is this only for Differential/Mecanum?

Yes, while the refactor does technically enable setting yaw/yaw rate setpoints through the TrajectorySetpoint also for ackermann it gets messy because the yaw/yaw rate is not decoupled from the velocity (or speed) as it is in differential/mecanum rovers.
That means the user would have to provide a speed setpoint of some sort if they want to do yaw/yaw rate control with an ackermann rover, but this is not an option through the trajectorySetpoint.msg.
This could be done by "hijacking" the rover_throttle_setpoint.msg or directly actuator_motors.msg but this is where it gets messy.

@chfriedrich98 chfriedrich98 force-pushed the pr-rover_refactor branch 4 times, most recently from 3cdb723 to 53c100f Compare February 7, 2025 09:01
@chfriedrich98
Copy link
Contributor Author

rebased on main

@chfriedrich98
Copy link
Contributor Author

chfriedrich98 commented Feb 7, 2025

@Pedro-Roque Just FYI i properly disabled the rover modules on the spacecraft board here.
(CONFIG_MODULES_DIFFERENTIAL_DRIVE is actually outdated and doesn't exist anymore.)

@chfriedrich98 chfriedrich98 requested a review from sfuhrer February 7, 2025 10:39
msg/RoverAttitudeStatus.msg Outdated Show resolved Hide resolved

void AckermannAttControl::generateAttitudeSetpoint()
{
bool stab_mode_enabled = _vehicle_control_mode.flag_control_manual_enabled
Copy link
Contributor

Choose a reason for hiding this comment

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

Mhh cannot find this commit anymore - is it still applied? And my comment here for a const was not valid?

src/modules/rover_ackermann/module.yaml Show resolved Hide resolved
src/modules/rover_ackermann/module.yaml Show resolved Hide resolved
@@ -71,13 +71,13 @@ void AckermannRateControl::updateRateControl()
vehicle_angular_velocity.xyz[2] : 0.f;
}

if (_vehicle_control_mode.flag_control_rates_enabled && _vehicle_control_mode.flag_armed) {
if (_vehicle_control_mode.flag_control_rates_enabled && _vehicle_control_mode.flag_armed && runSanityChecks()) {
Copy link
Contributor

Choose a reason for hiding this comment

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

How about just checking _sanity_check here and calling runSanityChecks only on param update?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I agree that it is suboptimal to run this check on every update rather then on paramUpdate, but the check should also only be performed if the corresponding flag of the mode is active (i.e. only do the check for posVelControl if it is actually active). And there is the scenario where the mode is switched from i.e. acro to position without changing parameters which will then not perform the checks for posVel parameters.

@@ -112,6 +119,7 @@ class AckermannRateControl : public ModuleParams
float _vehicle_yaw_rate{0.f};
hrt_abstime _timestamp{0};
float _dt{0.f}; // Time since last update [s].
bool _sanity_check{true};
Copy link
Contributor

Choose a reason for hiding this comment

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

I like when bools are very clearly visible as such - e.g. _parameter_sanity_checks_passed

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Clarified in 3734e4a

@Pedro-Roque
Copy link
Member

@Pedro-Roque Just FYI i properly disabled the rover modules on the spacecraft board here. (CONFIG_MODULES_DIFFERENTIAL_DRIVE is actually outdated and doesn't exist anymore.)

Thanks @chfriedrich98 ! 🙏

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Rover 🚙 Rovers and other UGV
Projects
Status: 👀 In Review
Development

Successfully merging this pull request may close these issues.

3 participants