Torsion-bar suspension URDF.
Hello ROSurfers, I've been working on a simulation project. Simulating suspension is pretty straight forward, but since I'm looking for proper visualization of the suspension system, writing the URDF is getting quite a problem. "Chassis" has been fixed to the 'base_link", "Swingarm" (child) is joined to "Chassis" (parent), "RSusCyl" (child) is joined to "Swingarm" (parent), "RSusPiston" (child) is joined to "Chassis" (parent) and now I want a prismatic joint between "RSusCyl" and "RSusPiston" to complete the suspension kinematics. I'm not able to figure out a way to do this. I would greatly appreciate suggestions.
Here is how the suspension looks.
tf
Here is the URDF.
<robot name="ssav" xmlns:xacro="http://www.ros.org/wiki/xacro">
<xacro:include filename="$(find ssav_description)/urdf/links_joints.xacro"/>
<!-- <xacro:include filename="$(find ssav_description)/urdf/ssav_parameters.xacro"/> -->
<m_link_box name="base_link" origin_rpy="0 0 0" origin_xyz="0 0 -0.01"
size="0.5 0.5 0.01" mass="1024"
ixx="170.667" ixy="0" ixz="0"
iyy="170.667" iyz="0"
izz="170.667"/>
<m_joint name="base_link_Chassis" type="revolute" axis_xyz="0 0 1" origin_rpy="0 0 0" origin_xyz="0 -0.44 0.554569"
limit_e="1000.0" limit_l="0.0" limit_u="0.0" limit_v="0.0"
parent="base_link" child="Chassis"/>
<m_link_mesh name="Chassis" origin_rpy="1.57 0 0" origin_xyz="0 0 0"
meshfile="package://ssav_description/meshes/Chassis_Cabin_Trailer/Visual/Chassis_Cabin_Trailer.obj"
meshscale="0.001 0.001 0.001" mass="157.633"
ixx="13.235" ixy="0" ixz="0"
iyy="13.235" iyz="0"
izz="9.665"/>
<m_joint name="Chassis_RSusSwingarm" type="revolute" axis_xyz="0 1 0" origin_rpy="0 0 0" origin_xyz="0.95 0 -0.175"
limit_e="1000.0" limit_l="-0.6" limit_u="0.4" limit_v="0.5"
parent="Chassis" child="RSusSwingarm"/>
<m_link_mesh name="RSusSwingarm" origin_rpy="1.57 0 0" origin_xyz="-0.95 0 0.175"
meshfile="package://ssav_description/meshes/Rear/Shaft_Swingarm/Visual/Shaft_Swingarm_L.stl"
meshscale="0.01 0.01 0.01" mass="15.633"
ixx="12.679" ixy="0" ixz="0"
iyy="12.679" iyz="0"
izz="0.651"/>
<m_joint name="RSusSwingarm_RSusCyl" type="revolute" axis_xyz="0 1 0" origin_rpy="0 0 0" origin_xyz="0.043271 0 0.078915"
limit_e="1000.0" limit_l="-0.4" limit_u="0.4" limit_v="0.5"
parent="RSusSwingarm" child="RSusCyl"/>
<m_link_mesh name="RSusCyl" origin_rpy="1.57 0 0" origin_xyz="-0.993271 0 0.096085"
meshfile="package://ssav_description/meshes/Rear/RearSus/Visual/RearSusCyl_L.stl"
meshscale="0.01 0.01 0.01" mass="1.633"
ixx="12.679" ixy="0" ixz="0"
iyy="12.679" iyz="0"
izz="0.651"/>
<m_joint name="Chassis_RSusPiston" type="revolute" axis_xyz="0 1 0" origin_rpy="0 0 0" origin_xyz="0.786124 0 0.034958"
limit_e="1000.0" limit_l="-0.4" limit_u="0.4" limit_v="0.5"
parent="Chassis" child="RSusPiston"/>
<m_link_mesh name="RSusPiston" origin_rpy="1.57 0 0" origin_xyz="-0.786124 0 -0.034958"
meshfile="package://ssav_description/meshes/Rear/RearSus/Visual/RearSusPiston_L.stl"
meshscale="0.01 0.01 0.01" mass="1.633"
ixx="12 ...
URDF does not support closed loops unfortunately so this system cannot be described. If you're just interested in visualisations then it can be done using SDF format and gazebo.
I had guessed it and it's unfortunate. I hope this will be added in the future updates. Thank you, by the way, for confirming.