AtsushiSakai/PythonRobotics

move_to_pose.py not consistent with book when alpha > pi/2

qlibp opened this issue · 2 comments

qlibp commented

Describe the bug
As the book says,

For the case where the goal is behind the robot, that is α ∉ (−pi/2 , pi/2 ], we reverse the vehicle by negating v and γ in the control law

But the implementation here just negate linear velocity.

Expected behavior
I tested with negating both linear velocity & angular velocity, the control vibrates, but the overall trajectory makes more sense than only negating the linear velocity.

Screenshots

  1. Negate Both
    negate_both

  2. Negate only linear velocity
    negate_one

@qlibp I agree with this view. I have also tried this measure, but there is a vibration situation. Can you tell me how you suppress vibration? Can you share that part of the code?

@qlibp I agree with this view. I have also tried this measure, but there is a vibration situation. Can you tell me how you suppress vibration? Can you share that part of the code?

Simply changing the sign of w to -w when alpha > pi/2 or alpha < -pi/2 is not enough, because alpha may jump between -pi and pi at this time, causing the sign of w to also jump, resulting in vibration. Therefore, when alpha > pi/2 or alpha < -pi/2, alpha needs to be recalculated using alpha = angle_mod(np.arctan2(-y_diff, -x_diff) - theta).