Skip to content
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

Closed kinematics chain #94

Open
BrianKSchultz opened this issue Dec 8, 2022 · 8 comments
Open

Closed kinematics chain #94

BrianKSchultz opened this issue Dec 8, 2022 · 8 comments

Comments

@BrianKSchultz
Copy link

Hello there, thanks for this great tool. I'm trying to create a URDF for an ABB IRB8700 robot. This model has a few extra linkages compared to a normal 6 dof robot arm, due to the counterweight and linear actuators for link2. If I suppress the counterweight, link, and linear actuators along with their associated mates/joints, the script works perfectly. With everything active, I get an error about connecting to multiple child links (e.g. Link3 is a child of both Link2 AND the counterweight link).

Do you have a suggestion for the best way to handle this? Thanks for your help. - Brian

image

@Gregwar
Copy link
Contributor

Gregwar commented Dec 9, 2022

Hello,

We dont handle kinematics loop currently. I think that it cant be described using UFDF unfortunately

One solution is to open the kinematic chain and use software to maintain the closure constraints true

@danem
Copy link

danem commented Feb 23, 2023

Just for clarification (as a non mech-e), does this limitation apply to something like Ackermann steering? I'm trying to model this, and I'm getting the following error:

Error, the relation ack_bar_right is connected a child that is already connected
Be sure you ordered properly your relations

image

Thanks

@Gregwar
Copy link
Contributor

Gregwar commented Feb 23, 2023

Hello,

You can have multiple joint on one link, but the kinematic structure should be a tree currently. This is a current limitation of this tool.

The reason is that URDF doesnt support closed loops. SDF does though, so that would be interresting to have it.

Current workaround is to make your robot kinematics a tree and solving the closing of the chain manually on software

What is the purpose you have in mind?

@atticusrussell
Copy link
Contributor

I am currently encountering a similar issue with a rudder. Do you have any suggestions?
image

WARNING: joint dof_servo_arm1 of type revolute has no limits
+ Found DOF: servo_arm1 (revolute)
WARNING: joint dof_arm1_arm2 of type revolute has no limits
+ Found DOF: arm1_arm2 (revolute)
WARNING: joint dof_arm2_rudder of type revolute has no limits
+ Found DOF: arm2_rudder (revolute)
WARNING: joint dof_rudder_base of type revolute has no limits
+ Found DOF: rudder_base (revolute)

Error, the relation rudder_base is connected a child that is already connected
Be sure you ordered properly your relations, see:
https://onshape-to-robot.readthedocs.io/en/latest/design.html#specifying-degrees-of-freedom

@Gregwar Gregwar changed the title Robot with multiple joints on one link Closed kinematics chain Feb 24, 2023
@Gregwar
Copy link
Contributor

Gregwar commented Feb 24, 2023

Just to be sure about your use cases so that I can write tutorials for them:

  • Is your goal to simulate the robots? Which simulator?
  • is your goal to use the description format? With what purpose?

@atticusrussell
Copy link
Contributor

My goal is to use this tool to create URDF to simulate in Gazebo with ROS2. I wish to simulate the physical aspects of the robot so I can write control code for the electronics before fabricating the actual robot.

I have also been having some trouble getting an exported robot working with ROS2/Gazebo, even in a design without this closed kinematics error, so a tutorial/guidance on that would also be much appreciated.

@Sambertibus
Copy link

Hi, I've encountered similar issues. I discovered that you can use PyBullet to simulate this using constraints. Check out page 17 of the quick start guide for more information: https://dirkmittler.homeip.net/blend4web_ce/uranium/bullet/docs/pybullet_quickstartguide.pdf.

@Gregwar
Copy link
Contributor

Gregwar commented Apr 29, 2024

Indeed, to handle loops in kinematics chain, you need to add runtime constraints.

When designing the robot, you can add mates with the name closing_something (prefixed with closing_). Onshape-to-robot will add a frame on each side
See: https://onshape-to-robot.readthedocs.io/en/latest/design.html#closing-frames

You can then use pyBullet's createConstraint to add the constraint

If you think that would be relevant, I could write more documentation and provide some end-to-end example for this

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants