mirror of
https://github.com/ArduPilot/ardupilot
synced 2025-01-03 06:28:27 -04:00
Copter: Support 3D Simple Avoidance
This commit is contained in:
parent
ad6e013171
commit
bd37eab3af
@ -93,11 +93,7 @@ void ModeFollow::run()
|
|||||||
|
|
||||||
// slow down horizontally as we approach target (use 1/2 of maximum deceleration for gentle slow down)
|
// slow down horizontally as we approach target (use 1/2 of maximum deceleration for gentle slow down)
|
||||||
const float dist_to_target_xy = Vector2f(dist_vec_offs_neu.x, dist_vec_offs_neu.y).length();
|
const float dist_to_target_xy = Vector2f(dist_vec_offs_neu.x, dist_vec_offs_neu.y).length();
|
||||||
copter.avoid.limit_velocity(pos_control->get_pos_xy_p().kP().get(), pos_control->get_max_accel_xy() * 0.5f, desired_velocity_xy_cms, dir_to_target_xy, dist_to_target_xy, copter.G_Dt);
|
copter.avoid.limit_velocity_2D(pos_control->get_pos_xy_p().kP().get(), pos_control->get_max_accel_xy() * 0.5f, desired_velocity_xy_cms, dir_to_target_xy, dist_to_target_xy, copter.G_Dt);
|
||||||
|
|
||||||
// limit the horizontal velocity to prevent fence violations
|
|
||||||
copter.avoid.adjust_velocity(pos_control->get_pos_xy_p().kP().get(), pos_control->get_max_accel_xy(), desired_velocity_xy_cms, G_Dt);
|
|
||||||
|
|
||||||
// copy horizontal velocity limits back to 3d vector
|
// copy horizontal velocity limits back to 3d vector
|
||||||
desired_velocity_neu_cms.x = desired_velocity_xy_cms.x;
|
desired_velocity_neu_cms.x = desired_velocity_xy_cms.x;
|
||||||
desired_velocity_neu_cms.y = desired_velocity_xy_cms.y;
|
desired_velocity_neu_cms.y = desired_velocity_xy_cms.y;
|
||||||
@ -106,8 +102,8 @@ void ModeFollow::run()
|
|||||||
const float des_vel_z_max = copter.avoid.get_max_speed(pos_control->get_pos_z_p().kP().get(), pos_control->get_max_accel_z() * 0.5f, fabsf(dist_vec_offs_neu.z), copter.G_Dt);
|
const float des_vel_z_max = copter.avoid.get_max_speed(pos_control->get_pos_z_p().kP().get(), pos_control->get_max_accel_z() * 0.5f, fabsf(dist_vec_offs_neu.z), copter.G_Dt);
|
||||||
desired_velocity_neu_cms.z = constrain_float(desired_velocity_neu_cms.z, -des_vel_z_max, des_vel_z_max);
|
desired_velocity_neu_cms.z = constrain_float(desired_velocity_neu_cms.z, -des_vel_z_max, des_vel_z_max);
|
||||||
|
|
||||||
// get avoidance adjusted climb rate
|
// limit the velocity for obstacle/fence avoidance
|
||||||
desired_velocity_neu_cms.z = get_avoidance_adjusted_climbrate(desired_velocity_neu_cms.z);
|
copter.avoid.adjust_velocity(desired_velocity_neu_cms, pos_control->get_pos_xy_p().kP().get(), pos_control->get_max_accel_xy(), pos_control->get_pos_z_p().kP().get(), pos_control->get_max_accel_z(), G_Dt);
|
||||||
|
|
||||||
// calculate vehicle heading
|
// calculate vehicle heading
|
||||||
switch (g2.follow.get_yaw_behave()) {
|
switch (g2.follow.get_yaw_behave()) {
|
||||||
|
@ -679,10 +679,8 @@ void ModeGuided::set_desired_velocity_with_accel_and_fence_limits(const Vector3f
|
|||||||
curr_vel_des.z += constrain_float(vel_delta.z, -vel_delta_z_max, vel_delta_z_max);
|
curr_vel_des.z += constrain_float(vel_delta.z, -vel_delta_z_max, vel_delta_z_max);
|
||||||
|
|
||||||
#if AC_AVOID_ENABLED
|
#if AC_AVOID_ENABLED
|
||||||
// limit the velocity to prevent fence violations
|
// limit the velocity for obstacle/fence avoidance
|
||||||
copter.avoid.adjust_velocity(pos_control->get_pos_xy_p().kP(), pos_control->get_max_accel_xy(), curr_vel_des, G_Dt);
|
copter.avoid.adjust_velocity(curr_vel_des, pos_control->get_pos_xy_p().kP(), pos_control->get_max_accel_xy(), pos_control->get_pos_z_p().kP(), pos_control->get_max_accel_z(), G_Dt);
|
||||||
// get avoidance adjusted climb rate
|
|
||||||
curr_vel_des.z = get_avoidance_adjusted_climbrate(curr_vel_des.z);
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// update position controller with new target
|
// update position controller with new target
|
||||||
|
Loading…
Reference in New Issue
Block a user