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 manual flight mode #23507

Draft
wants to merge 6 commits into
base: main
Choose a base branch
from

Conversation

Claudio-Chies
Copy link
Contributor

@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.
hereby its important to note that scaling currently only happens in surface-normal direction, which means that the drone is still able to move freely tangentially.
whereby the acceleration constraining is done in the distance between CP_DIST and MPC_VEL_MANUAL / MPC_XY_P

Drawbacks

The main drawback of this approach is that it might allow collision causing accelerations if flying into inside corners, as when your closer to one wall than the other, you can command maximum acceleration into the other wall.
might introduce normal and tangential damping parameters to solve this.

Changelog Entry

For release notes:

Feature: Collision prevention for FlightModeManual Acceleration
New parameter: TBD
Documentation: Need to clarify page ... / done, read docs.px4.io/...

Drawbacks

  • Difficulty with inside corners
  • 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 a 2D scanning lidar
  • Hardware Testing planned

Context

CP.mp4

@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
Contributor 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

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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants