Skip to content

Add omni drive robot to mobile_robot_kinematics #1551

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

Conversation

Amronos
Copy link
Contributor

@Amronos Amronos commented Feb 20, 2025

…sing Omni Wheels

Updated mobile_robot_kinematics.rst as asked in #1535.

Copy link
Contributor

@christophfroehlich christophfroehlich left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks. I just found another thing: $$R$$ should be measured to the center of the wheel, right? compare to the wheeltrack of the DiffDrive sketch, maybe you can add black dimension lines (and leave the green ones only for velocity, angular rate).

@christophfroehlich christophfroehlich changed the title Update mobile_robot_kinematics.rst for Omnidirectional Drive Robots u… Add omni drive robot to mobile_robot_kinematics Feb 20, 2025
@Amronos
Copy link
Contributor Author

Amronos commented Feb 20, 2025

R should be measured to the center of the wheel, right?

Nope! It's from the center of the robot to the point where the wheel touches the robot as shown by the green arrow.

I have represented the velocities of the robot in blue and things related to measurements in green.

Copy link
Contributor

@christophfroehlich christophfroehlich left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

R should be measured to the center of the wheel, right?

Nope! It's from the center of the robot to the point where the wheel touches the robot as shown by the green arrow.

Nope, according to the literature it is the center of the wheel, not the innermost point. See this screenshot of the ModernRobotics book, which is linked on the page.
image

I have represented the velocities of the robot in blue and things related to measurements in green.

What about this style? It has similar style as the other sketches.

omni_wheel_omnidirectional_drive
omni_wheel_omnidirectional_drive.zip

@Amronos
Copy link
Contributor Author

Amronos commented Feb 21, 2025

Nope, according to the literature it is the center of the wheel, not the innermost point. See this screenshot of the ModernRobotics book, which is linked on the page.

Screenshot_2025_0221_060410.jpg
Have a look at this screenshot from the same book, look at the symbol d (it is the radius). The screenshot that you shared just represents how a mecanum wheel works.

What about this style? It has similar style as the other sketches.

I am okay with it, though I liked mine a bit more. Please commit whatever you think would be the best and merge the PR, I won't be able to make any commits for a few days.

@christophfroehlich
Copy link
Contributor

Have a look at this screenshot from the same book, look at the symbol d (it is the radius). The screenshot that you shared just represents how a mecanum wheel works.

The arrows in Fig 13.5 are not very technical but only stylistic. Insert the respective values of $$\gamma_i,\beta_i,x_i,y_i$$ in (13.8) and you will get (13.9), where $$(x_i,y_i)$$ is the center of the wheel in $\{b \}$.

To simplify this: if velocities are zero we have $$\omega_1=\omega_2=\omega_3=- \frac{R \omega_{b,z}}{r}$$. This will not change with the "width" of the wheel (as we actually assume zero width), as it would be the case with your definition.

What about this style? It has similar style as the other sketches.

I am okay with it, though I liked mine a bit more. Please commit whatever you think would be the best and merge the PR, I won't be able to make any commits for a few days.

I don't have a preference in either one, but I like it to be consistent with the others.

@christophfroehlich christophfroehlich added the backport-humble This label should be used by maintainers only! Label triggers PR backport to ROS2 humble. label Feb 24, 2025
@christophfroehlich christophfroehlich merged commit 17af0cc into ros-controls:master Feb 24, 2025
5 checks passed
mergify bot pushed a commit that referenced this pull request Feb 24, 2025
@Amronos Amronos deleted the update-mobile_robot_knematics-omni-wheel-drive branch February 25, 2025 03:53
@Amronos
Copy link
Contributor Author

Amronos commented Feb 25, 2025

@christophfroehlich
https://journal.umy.ac.id/index.php/jrc/article/view/10664/5908 suggests the following:

  • $R$ is the distance from the wheel to the center of the robot and r is the radius of the omni wheel.

image

image

https://www.researchgate.net/publication/324929202_Motion_Improvement_of_Four-Wheeled_Omnidirectional_Mobile_Robots_for_Indoor_Terrain/fulltext/5aebadf2458515f59981e3b1/Motion-Improvement-of-Four-Wheeled-Omnidirectional-Mobile-Robots-for-Indoor-Terrain.pdf suggests the following:

  • $R$ is the radius of the robot from the center to the wheel.

image

image

And from my testing in both simulation and real life:

  • When $R$ is the distance from the wheel to the center of the robot, the robot accurately moves at the commanded velocities.
  • When $R$ is the distance from the center of the wheel to the center of the robot, the robot's movement is very different from the commanded velocities.

So I think we should consider $R$ as the distance from the point where the wheel touches the robot to the robot's center.

@christophfroehlich
Copy link
Contributor

But then, the same argument should hold for simple diffdrive robots, where the wheel track is the distance between the centerline of two wheels (wikipedia)? or acc. to modern robotics:
image

@christophfroehlich
Copy link
Contributor

and continuing throwing publications around (these are from a high-ranked robotics journal, with the distance always counted from the center of the wheel):

@Amronos
Copy link
Contributor Author

Amronos commented Feb 25, 2025

I have to admit that you are correct and that I am wrong.
There were some loopholes in my testing, one of them being commanding the robot to move at velocities higher than it could have moved, causing me to think it was not following the commanded velocities.
I am terribly sorry for bothering you so much and being such a pain. I am very ashamed of myself.
After measuring the radius from the center of the robot to the wheel's center it does look like the accuracy has increased!
Thanks a lot for teaching me something!

@christophfroehlich
Copy link
Contributor

No worries, I am always open for a constructive and respectful discussion. I'm glad that I could help!

@Amronos
Copy link
Contributor Author

Amronos commented Mar 1, 2025

@christophfroehlich After further testing it seems like taking the radius from the robot center to the outermost point of the wheel gives the most accuracy possible, and this time I made sure that I was not repeating the same mistakes in my testing. I am sorry!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
backport-humble This label should be used by maintainers only! Label triggers PR backport to ROS2 humble.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants