-
Notifications
You must be signed in to change notification settings - Fork 334
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
Ackermann steering odometry bug? #878
Comments
Hi Franz! Thanks for pointing this out. In general, I'd appreciate more documentation of the kinematics in the docs for all controllers here. Is there any publicly available reference/book for these mobile robot kinematics we could refer to? |
Hi Christoph! Anyway, what I pointed out above is just trigonometry. As a sign convention, I used a right-handed coordinate system, x pointing forwards, hence a positive rotation is counterclockwise. |
Hi all! I have decided to draw similar drawing as Franz, but in SOLIDWORKS to check steering angles of each wheel. As it was assumed, the steering wheel that is closer to the centre of rotation, has to turn more than the wheel which is further away from the centre of rotation. Then I launched a simulation and applied reference Twist command using steering gui. When, turning left (positive rotation around Z axis), the right steering joint turned more than the left one. Similar behaviour can be seen when turning right (negative rotation around Z axis), the left joint turned more than the right one. If I am correct, it should be other way around. Just in case, I will provide my .yaml file that is similar to the parameter file.
|
What if you swap the left & right steer in the parameters? Just asking, since this may arise from that ambiguity. |
Swapping steer joints solves the problem with angles of the steering wheels. However, it makes definition of the parameters inconsistent.
Difference in velocities between rear joints seems to be ok, the wheel that is further from the centre of rotation is going faster than the wheel that is closer. |
Thanks, @aleksandrsizmailovs, for providing the diagrams. So, IMO we should fix it in the steering lib and provide at least a unit test with the numbers written in the diagram, right? |
Somewhat related to #692 since we are talking of "clarity issues" of the parameter interface. |
good idea to fix this at once, but with the proposals from #692 there is still only a vector for steering joints, where it is not clear if it is [right,left] or [left,right]. Am I right?
👍 |
@christophfroehlich exaclty... This is an "orthogonal" issue. We should distinguish both left/right & drive/steer IMHO. |
* fix Ackermann steering odometry bug issue #878 --------- Co-authored-by: Christoph Fröhlich <[email protected]>
* fix Ackermann steering odometry bug issue #878 --------- Co-authored-by: Christoph Fröhlich <[email protected]> (cherry picked from commit d915497)
* fix Ackermann steering odometry bug issue #878 --------- Co-authored-by: Christoph Fröhlich <[email protected]> (cherry picked from commit d915497)
In my understanding, the current computation of the steering angles (left vs. right) in the ackermann odometry is wrong.
Disclaimer
Unfortunately, I could not find documentation on the frames/sign convention used for that calc, so this is more a question than a bug report.
IMO, we need to change the signs in the current implementation
ros2_controllers/steering_controllers_library/src/steering_odometry.cpp
Lines 269 to 275 in 23f944f
to something like
Here is why (sorry for not providing a proper formatted document, hopefully somebody is able to read this ...)
The text was updated successfully, but these errors were encountered: