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

Collision Prevention for multicopter acceleration based position flight mode #23507

Merged
merged 18 commits into from
Nov 21, 2024

Conversation

Claudio-Chies
Copy link
Member

@Claudio-Chies Claudio-Chies commented Aug 7, 2024

Solved Problem

Ports and extends the current collision prevention algorithm to FlightModeManualAcceleration

Associated PR's

Solution

The algorithm has two parts, velocity compensation, and constraining of the commanded acceleration.

Velocity compensation

For this, I have ported over the existing methods from the velocity based collision prevention method and transformed the velocity into an acceleration by subtracting the velocity set-point from the collision prevention velocity and applying a proportional gain ( MPC_XY_VEL_P_ACC ) to it.

Acceleration constraining

For this I'm calculating the minimal distance to the obstacle, and scaling it quadratic in the range of [0,1] distances proportional to the maximum velocity. (See image below)

For this we split the acceleration setpoint coming from the operator into a surface normal and tangential component, then using the normal and tangential obstacle distance we scale these components individual.
This way, if we are in front of a big even wall, we are free to move tangentially but are restricted in the surface normal direction.

whereby, the acceleration constraining is done in the distance between CP_DIST and MPC_VEL_MANUAL / MPC_XY_P

Drawbacks

Removed in 87a0ee6

Changelog Entry

For release notes:

Feature: Collision prevention for FlightModeManual Acceleration

Documentation: Need to update https://docs.px4.io/main/en/computer_vision/collision_prevention.html
WIP PX4/PX4-user_guide#3364

Drawbacks

  • If velocity is not close to set point, might cause crashes

Alternatives

  • dont use the max velocity and position error gain for the scaling factor and use a new normal and tangential scaling parameter.

Test coverage

  • Tested in SITL with 1D and 2D lidar
  • Tested on Hardware with 1D and 2D rotary Lidar Flightreview

Context

CP.mp4

Hardware Tests

1D Lidar

IMG_2735
The oscillations which are present are due to flying close to the ground, and when pitching the distance sensor picks up the ground.

EDIT1:
Updated description to include tangential scaling

/claim #22464

@Claudio-Chies Claudio-Chies force-pushed the pr-Collision_Prevention branch 4 times, most recently from a3d8d8b to d130612 Compare August 9, 2024 13:01
@Claudio-Chies Claudio-Chies changed the title Collision Prevention for MPC Flightmode Acceleration Collision Prevention for manual flight mode Aug 12, 2024
@Claudio-Chies Claudio-Chies force-pushed the pr-Collision_Prevention branch 2 times, most recently from dcfa190 to 9cf4838 Compare August 12, 2024 09:58
@Claudio-Chies Claudio-Chies marked this pull request as ready for review August 12, 2024 10:00
@dirksavage88
Copy link
Contributor

@Claudio-Chies is this something I can pull down to flight test? Or is it needing more time in the SITL?

@Claudio-Chies
Copy link
Member Author

@dirksavage88 it should be ready to test, the only thing i haven't tested is how non-default gains in the position and velocity controller change the CP behavior

@Claudio-Chies Claudio-Chies force-pushed the pr-Collision_Prevention branch 6 times, most recently from 7fa1fcc to 077226b Compare August 20, 2024 08:51
@Claudio-Chies Claudio-Chies force-pushed the pr-Collision_Prevention branch 2 times, most recently from 1e40431 to bd72ecf Compare October 1, 2024 07:23
Copy link
Member

@MaEtUgR MaEtUgR left a comment

Choose a reason for hiding this comment

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

After an in person discussion I see a lot of value in simplifying the logic. The main pain points are:

  • Separate input data processing from guidance logic e.g. distance and direction to closest obstacle and distance to next obstacle in current velocity direction are the interface between obstacle map processing and guidance.
  • If possible avoid cases in guidance logic. E.g. three things to take care of:
    • Stick should not accelerate over the configured collision prevention minimum distance
    • Brake from current velocity before before minimum allowed distance
    • If obstacle is closer/"comes closer" push away from it to minimum distance
      Probably these rules can run all the time, get superimposed and be readable, predictable (logged).

I added a commit for cosmetic and commenting things that I saw at a glance.

@Claudio-Chies Claudio-Chies marked this pull request as draft October 2, 2024 08:46
@Claudio-Chies Claudio-Chies force-pushed the pr-Collision_Prevention branch 2 times, most recently from e0b6707 to d346da5 Compare October 4, 2024 11:46
@Claudio-Chies Claudio-Chies force-pushed the pr-Collision_Prevention branch 2 times, most recently from 6d72e11 to 1075492 Compare October 29, 2024 09:51
@Claudio-Chies Claudio-Chies marked this pull request as ready for review October 31, 2024 10:36
@Claudio-Chies Claudio-Chies force-pushed the pr-Collision_Prevention branch from c5834b2 to de8fc84 Compare November 5, 2024 14:16
MaEtUgR and others added 9 commits November 20, 2024 14:49
The default implementation for multicopter Position mode is FlightTaskManualAcceleration.
The last missing piece was support for CollisionPrevention in this implementation.
…tests to reflect the change

rewrite of obstacle_distance merging methods, and fix of various issues
The default implementation for multicopter Position mode is FlightTaskManualAcceleration.
The last missing piece was support for CollisionPrevention in this implementation.
@Claudio-Chies Claudio-Chies force-pushed the pr-Collision_Prevention branch from f654979 to ec1efcc Compare November 20, 2024 13:51
@PX4 PX4 deleted a comment from github-actions bot Nov 20, 2024
@PX4 PX4 deleted a comment from github-actions bot Nov 20, 2024
@PX4 PX4 deleted a comment from github-actions bot Nov 20, 2024
@PX4 PX4 deleted a comment from github-actions bot Nov 21, 2024
@Claudio-Chies Claudio-Chies force-pushed the pr-Collision_Prevention branch 2 times, most recently from 59edc23 to 3b4efab Compare November 21, 2024 09:51
@PX4 PX4 deleted a comment from github-actions bot Nov 21, 2024
…f we are closer to the obstacle than the minimal distance
@Claudio-Chies Claudio-Chies force-pushed the pr-Collision_Prevention branch from 3b4efab to f05f032 Compare November 21, 2024 10:16
@PX4 PX4 deleted a comment from github-actions bot Nov 21, 2024
Copy link

FLASH Analysis

px4_fmu-v5x
    FILE SIZE        VM SIZE    
 --------------  -------------- 
  +1.4%    +344  [ = ]       0    [Unmapped]
  -0.0%    -344  -0.0%    -344    .text
     +28% +1.23Ki   +28% +1.23Ki    ../../src/lib/collision_prevention/CollisionPrevention.cpp
    +8.4%    +158  +8.4%    +158    ../../src/modules/flight_mode_manager/tasks/Utility/StickAccelerationXY.cpp
    +4.1%    +146  +4.1%    +146    ../../src/modules/flight_mode_manager/FlightModeManager.cpp
    +7.7%    +114  +7.7%    +114    ../../src/modules/flight_mode_manager/tasks/ManualAccelerationSlow/FlightTaskManualAccelerationSlow.cpp
    +0.8%     +58  +0.8%     +58    ../../src/modules/flight_mode_manager/tasks/Auto/FlightTaskAuto.cpp
    +1.1%     +50  +1.1%     +50    ../../src/modules/flight_mode_manager/tasks/AutoFollowTarget/FlightTaskAutoFollowTarget.cpp
    +6.2%     +50  +6.2%     +50    ../../src/modules/flight_mode_manager/tasks/ManualPosition/FlightTaskManualPosition.cpp
    +1.1%     +40  +1.1%     +40    ../../src/modules/flight_mode_manager/tasks/Orbit/FlightTaskOrbit.cpp
    -0.3%     -32  -0.3%     -32    ../../src/modules/mc_pos_control/MulticopterPositionControl.cpp
    -0.0%     -62  -0.0%     -62    [section .text]
    -0.1%     -94  -0.1%     -94    ROMFS/nsh_romfsimg.c
    -7.4%    -224  -7.4%    -224    src/modules/flight_mode_manager/FlightTasks_generated.cpp
    [DEL]    -400  [DEL]    -400    ../../src/lib/motion_planning/ManualVelocitySmoothingXY.cpp
    [DEL] -1.38Ki  [DEL] -1.38Ki    ../../src/modules/flight_mode_manager/tasks/ManualPositionSmoothVel/FlightTaskManualPositionSmoothVel.cpp
  -0.2%    -360  [ = ]       0    .debug_aranges
  -0.1%    -704  [ = ]       0    .symtab
     +39%    +320  [ = ]       0    ../../src/lib/collision_prevention/CollisionPrevention.cpp
     +53%    +128  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/ManualPosition/FlightTaskManualPosition.cpp
     +15%     +96  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/ManualAccelerationSlow/FlightTaskManualAccelerationSlow.cpp
    +9.3%     +64  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/Orbit/FlightTaskOrbit.cpp
    +3.0%     +32  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/AutoFollowTarget/FlightTaskAutoFollowTarget.cpp
    -0.0%     -48  [ = ]       0    [section .symtab]
    [DEL]    -192  [ = ]       0    ../../src/lib/motion_planning/ManualVelocitySmoothingXY.cpp
   -23.2%    -208  [ = ]       0    src/modules/flight_mode_manager/FlightTasks_generated.cpp
    [DEL]    -896  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/ManualPositionSmoothVel/FlightTaskManualPositionSmoothVel.cpp
  -0.2% -1.03Ki  [ = ]       0    .debug_frame
  -0.2% -1.36Ki  [ = ]       0    .strtab
     +39%    +437  [ = ]       0    ../../src/lib/collision_prevention/CollisionPrevention.cpp
     +22%    +158  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/Orbit/FlightTaskOrbit.cpp
     +47%    +152  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/ManualPosition/FlightTaskManualPosition.cpp
     +12%     +87  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/ManualAccelerationSlow/FlightTaskManualAccelerationSlow.cpp
    +2.7%     +48  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/AutoFollowTarget/FlightTaskAutoFollowTarget.cpp
    -0.1%    -108  [ = ]       0    [section .strtab]
   -26.7%    -312  [ = ]       0    src/modules/flight_mode_manager/FlightTasks_generated.cpp
    [DEL]    -329  [ = ]       0    ../../src/lib/motion_planning/ManualVelocitySmoothingXY.cpp
    [DEL] -1.49Ki  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/ManualPositionSmoothVel/FlightTaskManualPositionSmoothVel.cpp
  -0.1% -2.05Ki  [ = ]       0    .debug_str
     +34% +1.03Ki  [ = ]       0    ../../src/lib/collision_prevention/CollisionPrevention.cpp
    +1.1%    +750  [ = ]       0    ../../src/modules/flight_mode_manager/FlightModeManager.cpp
     +13%     +87  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/ManualPosition/FlightTaskManualPosition.cpp
    +1.7%     +48  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/Auto/FlightTaskAuto.cpp
    +8.8%     +37  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/ManualAltitudeSmoothVel/FlightTaskManualAltitudeSmoothVel.cpp
     +29%     +15  [ = ]       0    ../../src/lib/motion_planning/ManualVelocitySmoothingZ.cpp
    +1.0%     +10  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/FlightTask/FlightTask.cpp
    -0.6%      -1  [ = ]       0    ../../src/lib/motion_planning/HeadingSmoothing.cpp
    -4.4%     -14  [ = ]       0    ../../src/lib/rtl/rtl_time_estimator.cpp
    -3.7%     -18  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/ManualAcceleration/FlightTaskManualAcceleration.cpp
    -0.0%     -30  [ = ]       0    [section .debug_str]
    [DEL]     -73  [ = ]       0    ../../src/lib/motion_planning/ManualVelocitySmoothingXY.cpp
    -2.7%    -841  [ = ]       0    ../../src/modules/mc_pos_control/MulticopterPositionControl.cpp
    -6.7% -1.41Ki  [ = ]       0    src/modules/flight_mode_manager/FlightTasks_generated.cpp
    [DEL] -1.64Ki  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/ManualPositionSmoothVel/FlightTaskManualPositionSmoothVel.cpp
  -0.2% -4.06Ki  [ = ]       0    .debug_abbrev
    -0.2% -4.06Ki  [ = ]       0    armv7-m/arm_vectors.c
  -0.3% -4.18Ki  [ = ]       0    .debug_ranges
     +16%    +832  [ = ]       0    ../../src/lib/collision_prevention/CollisionPrevention.cpp
    +4.2%    +160  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/Utility/StickAccelerationXY.cpp
    +2.2%     +48  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/ManualAcceleration/FlightTaskManualAcceleration.cpp
    +2.0%     +48  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/ManualAccelerationSlow/FlightTaskManualAccelerationSlow.cpp
    +0.8%     +40  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/Auto/FlightTaskAuto.cpp
    +2.7%     +24  [ = ]       0    ../../src/modules/flight_mode_manager/FlightModeManager.cpp
    -1.0%     -40  [ = ]       0    src/modules/flight_mode_manager/FlightTasks_generated.cpp
    -0.6%     -80  [ = ]       0    ../../src/modules/mc_pos_control/MulticopterPositionControl.cpp
   -10.5%    -328  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/ManualPosition/FlightTaskManualPosition.cpp
    -0.1%    -352  [ = ]       0    [section .debug_ranges]
    [DEL]    -584  [ = ]       0    ../../src/lib/motion_planning/ManualVelocitySmoothingXY.cpp
    [DEL] -3.95Ki  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/ManualPositionSmoothVel/FlightTaskManualPositionSmoothVel.cpp
  -0.2% -8.43Ki  [ = ]       0    .debug_line
     +15% +1.68Ki  [ = ]       0    ../../src/lib/collision_prevention/CollisionPrevention.cpp
    +7.5%    +556  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/Utility/StickAccelerationXY.cpp
    +6.6%    +407  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/ManualAcceleration/FlightTaskManualAcceleration.cpp
    +5.8%    +407  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/ManualAccelerationSlow/FlightTaskManualAccelerationSlow.cpp
    +1.8%    +380  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/Auto/FlightTaskAuto.cpp
    +1.0%    +150  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/AutoFollowTarget/FlightTaskAutoFollowTarget.cpp
    +0.4%     +46  [ = ]       0    ../../src/modules/flight_mode_manager/FlightModeManager.cpp
    -0.4%    -111  [ = ]       0    ../../src/modules/mc_pos_control/MulticopterPositionControl.cpp
    -4.0%    -312  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/ManualPosition/FlightTaskManualPosition.cpp
    -3.8%    -398  [ = ]       0    src/modules/flight_mode_manager/FlightTasks_generated.cpp
    [DEL] -2.25Ki  [ = ]       0    ../../src/lib/motion_planning/ManualVelocitySmoothingXY.cpp
    [DEL] -8.96Ki  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/ManualPositionSmoothVel/FlightTaskManualPositionSmoothVel.cpp
  -0.3% -14.7Ki  [ = ]       0    .debug_loc
     +26% +4.97Ki  [ = ]       0    ../../src/lib/collision_prevention/CollisionPrevention.cpp
    +3.6%    +539  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/Utility/StickAccelerationXY.cpp
    +5.4%    +457  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/ManualAcceleration/FlightTaskManualAcceleration.cpp
    +5.2%    +457  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/ManualAccelerationSlow/FlightTaskManualAccelerationSlow.cpp
    +1.5%    +350  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/Auto/FlightTaskAuto.cpp
    +0.0%     +14  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/AutoFollowTarget/FlightTaskAutoFollowTarget.cpp
    -0.7%    -340  [ = ]       0    ../../src/modules/mc_pos_control/MulticopterPositionControl.cpp
    -4.0%    -676  [ = ]       0    src/modules/flight_mode_manager/FlightTasks_generated.cpp
    -8.1%    -992  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/ManualPosition/FlightTaskManualPosition.cpp
    -0.2% -2.46Ki  [ = ]       0    [section .debug_loc]
    [DEL] -2.60Ki  [ = ]       0    ../../src/lib/motion_planning/ManualVelocitySmoothingXY.cpp
    [DEL] -14.4Ki  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/ManualPositionSmoothVel/FlightTaskManualPositionSmoothVel.cpp
  -0.3% -83.8Ki  [ = ]       0    .debug_info
     +12% +9.18Ki  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/Utility/StickAccelerationXY.cpp
    +8.6% +7.10Ki  [ = ]       0    ../../src/lib/collision_prevention/CollisionPrevention.cpp
    +7.7% +6.30Ki  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/ManualAccelerationSlow/FlightTaskManualAccelerationSlow.cpp
    +7.8% +6.30Ki  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/ManualAcceleration/FlightTaskManualAcceleration.cpp
    +4.1% +5.64Ki  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/Auto/FlightTaskAuto.cpp
    +2.1% +2.69Ki  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/AutoFollowTarget/FlightTaskAutoFollowTarget.cpp
    +0.3%    +327  [ = ]       0    ../../src/modules/flight_mode_manager/FlightModeManager.cpp
    -0.5%    -820  [ = ]       0    ../../src/modules/mc_pos_control/MulticopterPositionControl.cpp
    -1.6% -1.49Ki  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/ManualPosition/FlightTaskManualPosition.cpp
    -1.7% -2.17Ki  [ = ]       0    src/modules/flight_mode_manager/FlightTasks_generated.cpp
    [DEL] -18.9Ki  [ = ]       0    ../../src/lib/motion_planning/ManualVelocitySmoothingXY.cpp
    [DEL] -98.0Ki  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/ManualPositionSmoothVel/FlightTaskManualPositionSmoothVel.cpp
  -0.2%  -120Ki  -0.0%    -344    TOTAL

px4_fmu-v6x
    FILE SIZE        VM SIZE    
 --------------  -------------- 
  +0.5%    +335  [ = ]       0    [Unmapped]
  -0.0%    -336  -0.0%    -336    .text
     +28% +1.23Ki   +28% +1.23Ki    ../../src/lib/collision_prevention/CollisionPrevention.cpp
    +8.4%    +158  +8.4%    +158    ../../src/modules/flight_mode_manager/tasks/Utility/StickAccelerationXY.cpp
    +4.1%    +146  +4.1%    +146    ../../src/modules/flight_mode_manager/FlightModeManager.cpp
    +7.7%    +114  +7.7%    +114    ../../src/modules/flight_mode_manager/tasks/ManualAccelerationSlow/FlightTaskManualAccelerationSlow.cpp
    +0.8%     +58  +0.8%     +58    ../../src/modules/flight_mode_manager/tasks/Auto/FlightTaskAuto.cpp
    +1.1%     +50  +1.1%     +50    ../../src/modules/flight_mode_manager/tasks/AutoFollowTarget/FlightTaskAutoFollowTarget.cpp
    +6.2%     +50  +6.2%     +50    ../../src/modules/flight_mode_manager/tasks/ManualPosition/FlightTaskManualPosition.cpp
    +1.1%     +40  +1.1%     +40    ../../src/modules/flight_mode_manager/tasks/Orbit/FlightTaskOrbit.cpp
    -0.3%     -32  -0.3%     -32    ../../src/modules/mc_pos_control/MulticopterPositionControl.cpp
    -0.0%     -54  -0.0%     -54    [section .text]
    -0.1%     -94  -0.1%     -94    ROMFS/nsh_romfsimg.c
    -7.4%    -224  -7.4%    -224    src/modules/flight_mode_manager/FlightTasks_generated.cpp
    [DEL]    -400  [DEL]    -400    ../../src/lib/motion_planning/ManualVelocitySmoothingXY.cpp
    [DEL] -1.38Ki  [DEL] -1.38Ki    ../../src/modules/flight_mode_manager/tasks/ManualPositionSmoothVel/FlightTaskManualPositionSmoothVel.cpp
  -0.2%    -360  [ = ]       0    .debug_aranges
  -0.1%    -704  [ = ]       0    .symtab
     +39%    +320  [ = ]       0    ../../src/lib/collision_prevention/CollisionPrevention.cpp
     +53%    +128  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/ManualPosition/FlightTaskManualPosition.cpp
     +15%     +96  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/ManualAccelerationSlow/FlightTaskManualAccelerationSlow.cpp
    +9.3%     +64  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/Orbit/FlightTaskOrbit.cpp
    +3.0%     +32  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/AutoFollowTarget/FlightTaskAutoFollowTarget.cpp
    -0.0%     -48  [ = ]       0    [section .symtab]
    [DEL]    -192  [ = ]       0    ../../src/lib/motion_planning/ManualVelocitySmoothingXY.cpp
   -23.2%    -208  [ = ]       0    src/modules/flight_mode_manager/FlightTasks_generated.cpp
    [DEL]    -896  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/ManualPositionSmoothVel/FlightTaskManualPositionSmoothVel.cpp
  -0.2% -1.03Ki  [ = ]       0    .debug_frame
  -0.2% -1.36Ki  [ = ]       0    .strtab
     +39%    +437  [ = ]       0    ../../src/lib/collision_prevention/CollisionPrevention.cpp
     +22%    +158  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/Orbit/FlightTaskOrbit.cpp
     +47%    +152  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/ManualPosition/FlightTaskManualPosition.cpp
     +12%     +87  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/ManualAccelerationSlow/FlightTaskManualAccelerationSlow.cpp
    +2.7%     +48  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/AutoFollowTarget/FlightTaskAutoFollowTarget.cpp
    -0.1%    -108  [ = ]       0    [section .strtab]
   -26.7%    -312  [ = ]       0    src/modules/flight_mode_manager/FlightTasks_generated.cpp
    [DEL]    -329  [ = ]       0    ../../src/lib/motion_planning/ManualVelocitySmoothingXY.cpp
    [DEL] -1.49Ki  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/ManualPositionSmoothVel/FlightTaskManualPositionSmoothVel.cpp
  -0.1% -2.05Ki  [ = ]       0    .debug_str
     +34% +1.03Ki  [ = ]       0    ../../src/lib/collision_prevention/CollisionPrevention.cpp
    +1.1%    +750  [ = ]       0    ../../src/modules/flight_mode_manager/FlightModeManager.cpp
     +13%     +87  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/ManualPosition/FlightTaskManualPosition.cpp
    +2.0%     +58  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/Auto/FlightTaskAuto.cpp
    +8.8%     +37  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/ManualAltitudeSmoothVel/FlightTaskManualAltitudeSmoothVel.cpp
     +29%     +15  [ = ]       0    ../../src/lib/motion_planning/ManualVelocitySmoothingZ.cpp
    +1.0%     +10  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/FlightTask/FlightTask.cpp
    -0.6%      -1  [ = ]       0    ../../src/lib/motion_planning/HeadingSmoothing.cpp
    -4.4%     -14  [ = ]       0    ../../src/lib/rtl/rtl_time_estimator.cpp
    -3.7%     -18  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/ManualAcceleration/FlightTaskManualAcceleration.cpp
    -0.0%     -30  [ = ]       0    [section .debug_str]
    [DEL]     -73  [ = ]       0    ../../src/lib/motion_planning/ManualVelocitySmoothingXY.cpp
    -2.7%    -841  [ = ]       0    ../../src/modules/mc_pos_control/MulticopterPositionControl.cpp
    -6.7% -1.41Ki  [ = ]       0    src/modules/flight_mode_manager/FlightTasks_generated.cpp
    [DEL] -1.65Ki  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/ManualPositionSmoothVel/FlightTaskManualPositionSmoothVel.cpp
  -0.2% -4.06Ki  [ = ]       0    .debug_abbrev
    -0.2% -4.06Ki  [ = ]       0    armv7-m/arm_vectors.c
  -0.3% -4.18Ki  [ = ]       0    .debug_ranges
     +16%    +832  [ = ]       0    ../../src/lib/collision_prevention/CollisionPrevention.cpp
    +4.2%    +160  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/Utility/StickAccelerationXY.cpp
    +2.2%     +48  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/ManualAcceleration/FlightTaskManualAcceleration.cpp
    +2.0%     +48  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/ManualAccelerationSlow/FlightTaskManualAccelerationSlow.cpp
    +0.8%     +40  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/Auto/FlightTaskAuto.cpp
    +2.7%     +24  [ = ]       0    ../../src/modules/flight_mode_manager/FlightModeManager.cpp
    -1.0%     -40  [ = ]       0    src/modules/flight_mode_manager/FlightTasks_generated.cpp
    -0.6%     -80  [ = ]       0    ../../src/modules/mc_pos_control/MulticopterPositionControl.cpp
   -10.5%    -328  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/ManualPosition/FlightTaskManualPosition.cpp
    -0.1%    -352  [ = ]       0    [section .debug_ranges]
    [DEL]    -584  [ = ]       0    ../../src/lib/motion_planning/ManualVelocitySmoothingXY.cpp
    [DEL] -3.95Ki  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/ManualPositionSmoothVel/FlightTaskManualPositionSmoothVel.cpp
  -0.2% -8.43Ki  [ = ]       0    .debug_line
     +15% +1.68Ki  [ = ]       0    ../../src/lib/collision_prevention/CollisionPrevention.cpp
    +7.5%    +556  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/Utility/StickAccelerationXY.cpp
    +6.6%    +407  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/ManualAcceleration/FlightTaskManualAcceleration.cpp
    +5.8%    +407  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/ManualAccelerationSlow/FlightTaskManualAccelerationSlow.cpp
    +1.8%    +380  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/Auto/FlightTaskAuto.cpp
    +1.0%    +150  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/AutoFollowTarget/FlightTaskAutoFollowTarget.cpp
    +0.4%     +46  [ = ]       0    ../../src/modules/flight_mode_manager/FlightModeManager.cpp
    -0.4%    -111  [ = ]       0    ../../src/modules/mc_pos_control/MulticopterPositionControl.cpp
    -4.0%    -312  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/ManualPosition/FlightTaskManualPosition.cpp
    -3.8%    -398  [ = ]       0    src/modules/flight_mode_manager/FlightTasks_generated.cpp
    [DEL] -2.25Ki  [ = ]       0    ../../src/lib/motion_planning/ManualVelocitySmoothingXY.cpp
    [DEL] -8.96Ki  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/ManualPositionSmoothVel/FlightTaskManualPositionSmoothVel.cpp
  -0.3% -14.7Ki  [ = ]       0    .debug_loc
     +26% +4.97Ki  [ = ]       0    ../../src/lib/collision_prevention/CollisionPrevention.cpp
    +3.6%    +539  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/Utility/StickAccelerationXY.cpp
    +5.4%    +457  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/ManualAcceleration/FlightTaskManualAcceleration.cpp
    +5.2%    +457  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/ManualAccelerationSlow/FlightTaskManualAccelerationSlow.cpp
    +1.5%    +337  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/Auto/FlightTaskAuto.cpp
    -0.7%    -340  [ = ]       0    ../../src/modules/mc_pos_control/MulticopterPositionControl.cpp
    -4.1%    -689  [ = ]       0    src/modules/flight_mode_manager/FlightTasks_generated.cpp
    -8.1%    -992  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/ManualPosition/FlightTaskManualPosition.cpp
    -0.2% -2.47Ki  [ = ]       0    [section .debug_loc]
    [DEL] -2.60Ki  [ = ]       0    ../../src/lib/motion_planning/ManualVelocitySmoothingXY.cpp
    [DEL] -14.4Ki  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/ManualPositionSmoothVel/FlightTaskManualPositionSmoothVel.cpp
  -0.3% -83.4Ki  [ = ]       0    .debug_info
     +12% +9.18Ki  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/Utility/StickAccelerationXY.cpp
    +8.7% +7.10Ki  [ = ]       0    ../../src/lib/collision_prevention/CollisionPrevention.cpp
    +7.7% +6.30Ki  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/ManualAccelerationSlow/FlightTaskManualAccelerationSlow.cpp
    +7.9% +6.30Ki  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/ManualAcceleration/FlightTaskManualAcceleration.cpp
    +4.1% +5.64Ki  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/Auto/FlightTaskAuto.cpp
    +2.1% +2.69Ki  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/AutoFollowTarget/FlightTaskAutoFollowTarget.cpp
    +0.3%    +327  [ = ]       0    ../../src/modules/flight_mode_manager/FlightModeManager.cpp
    -0.5%    -820  [ = ]       0    ../../src/modules/mc_pos_control/MulticopterPositionControl.cpp
    -1.6% -1.49Ki  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/ManualPosition/FlightTaskManualPosition.cpp
    -1.7% -2.17Ki  [ = ]       0    src/modules/flight_mode_manager/FlightTasks_generated.cpp
    [DEL] -18.9Ki  [ = ]       0    ../../src/lib/motion_planning/ManualVelocitySmoothingXY.cpp
    [DEL] -97.5Ki  [ = ]       0    ../../src/modules/flight_mode_manager/tasks/ManualPositionSmoothVel/FlightTaskManualPositionSmoothVel.cpp
  -0.3%  -120Ki  -0.0%    -336    TOTAL

Copy link
Member

@MaEtUgR MaEtUgR left a comment

Choose a reason for hiding this comment

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

Nice! Thanks for putting the effort in to not only make this work with FlightTaskManualAcceleration (current default Position mode) but also adding some improvements and bearing through all my partly unrelated review. I think it's at a good big iteration state now and we can follow up with individual improvements iteratively.

@PX4 PX4 deleted a comment from github-actions bot Nov 21, 2024
@Claudio-Chies Claudio-Chies merged commit db13b9c into main Nov 21, 2024
62 checks passed
@Claudio-Chies Claudio-Chies deleted the pr-Collision_Prevention branch November 21, 2024 10:36
Copy link

algora-pbc bot commented Nov 25, 2024

💵 To receive payouts, sign up on Algora, link your Github account and connect with Stripe.

for (int i = 0; i < BIN_COUNT; i++) {
// check if our setpoint is either pointing in a direction where data exists, or if not, wether we are allowed to go where there is no data
if ((_obstacle_map_body_frame.distances[i] == UINT16_MAX && i == _setpoint_index) && (!_param_cp_go_no_data.get()
|| (_param_cp_go_no_data.get() && _data_fov[i]))) {
Copy link
Contributor

@mahimayoga mahimayoga Jan 21, 2025

Choose a reason for hiding this comment

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

@Claudio-Chies would you mind explaining why we need to check for (_param_cp_go_no_data.get() && _data_fov[i]))? Why should the setpoint not be feasible if we don't have data in the direction we want to travel when it is in our fov, if _param_cp_go_no_data is set to true?

Copy link
Member Author

@Claudio-Chies Claudio-Chies Jan 21, 2025

Choose a reason for hiding this comment

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

This if statement was taken from the previous implementation, there it was

if (_obstacle_map_body_frame.distances[i] == UINT16_MAX && i == sp_index) {
    if (!move_no_data || (move_no_data && _data_fov[i])) {
	vel_max = 0.f;
    }
}

i'll have to test it, but the more i look at it, it would never be true, if _param_cp_go_no_data is true.
because there wouldnt ever be a case where _obstacle_map_body_frame.distances[i]== UINT16_MAX and _data_fov[i] is true.

EDIT: i can't test it until next week,

Copy link
Contributor

Choose a reason for hiding this comment

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

So that's what I thought as well, but actually somehow when flying collision prevention with the SF45, the _data_fov array is often initialized incorrectly (true in all bins). I am trying to debug this separately, but generally wasn't sure why this condition exists in the if statement - because I thought that as long as _param_cp_go_no_data is set to true, you should be able to fly in any direction.

Copy link
Member Author

@Claudio-Chies Claudio-Chies Jan 21, 2025

Choose a reason for hiding this comment

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

yea, the problem with that lies most likely in that _data_fov, is only set to 0 in the constructor. and the sf45 can generate wierd measurements during initialisation, one of the reason why i had to implement the timeout logic in the driver. because without it, it displayed measurements in regions where it cant measure. the effectos of that is probably what your are seeing here, meaning these measurements are still sent in the beginning, _data_fov gets set to true because it once got a measurement in that bin.
you could either solve that in the driver, to not publish measurements until they are "sensible", or adapt the logic here
(probably somewhere here

if (obstacle.distances[j] != UINT16_MAX) {
) to set the _data_fov to false after a timeout period.

hope this helps

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants