Robotics StackExchange | Archived questions

Fixing yaw keeps overshooting

Hello,

I'm building a 4-wheeled skid steering robot. Currently I'm implementing the functionality to drive towards a point (x, y) based on its odometry data. One node (drive control) sends twist messages containing linear x and angular z speed, which the other node (wheel control) receives. This node calculates the desired speed for the left and right wheels, and tries to obtain that speed using PD-controlled PWM signals. An odometry node takes care of the feedback of the front two wheels. This all seems to work fine. However, when the heading (yaw) of the robot needs to be corrected to eventually reach the desired point, it sends a twist message which an angular speed (PD controlled). The problem is that the yaw always overshoots. So the robot's yaw always passes the desired yaw which causes the robot's movement to oscillate. The following I tried:

These things did not fully solve this issue, and now I ran out of ideas. Does anyone have a grasp of what I can do to fix this problem? If you need some code, feel free to ask! Can't put all of it on here!

Asked by SimonDahrs on 2019-11-20 06:35:49 UTC

Comments

If you have the possibility, you could look at using the diff_drive_controller from ros_control. It should also support skid steering setups.

This is not an answer, but reuse is always a good idea, so I wanted to make you aware of its existence.

Asked by gvdhoorn on 2019-11-20 07:20:46 UTC

This could be an issue with the PID values in your the parameters (.yaml) file. The problem you're having appears to be very similar to the one addressed in this video: https://youtu.be/4Y7zG48uHRo.

The I and D values are expected to be part of the configuration to address this problem.

Asked by fozzy-b on 2020-01-10 12:20:01 UTC

Answers