How to stabilize a joint -- keep Ackermann wheels from wobbling
I have an Ackermann steering vehicle I made, which works well enough at slow speed, but when speed increases, the wheels wobble. How can I keep the joints from being pushed around?
I'm accepting a twist message and converting it to the joint controllers.
Here is an example of the wheel.
<!-- Left Wheel - Start -->
<link name="left_wheel">
<collision>
<origin xyz="0 0 0" rpy="0 1.5708 1.5708" />
<geometry>
<cylinder length="0.05" radius="0.1"/>
</geometry>
</collision>
<visual>
<origin xyz="0 0 0" rpy="0 1.5708 1.5708" />
<geometry>
<cylinder length="0.05" radius="0.1"/>
</geometry>
<material name="black"/>
</visual>
<inertial>
<origin xyz="0 0 0" rpy="0 1.5708 1.5708" />
<mass value="0.2"/>
<cylinder_inertia m="0.2" r="0.3" h="0.1"/>
<inertia ixx="0.4" ixy="0.1" ixz="0.1" iyy="0.4" iyz="0.1" izz="0.2"/>
</inertial>
</link>
<gazebo reference="left_wheel">
<mu1 value="2.0"/>
<mu2 value="2.0"/>
<kp value="10000000.0" />
<kd value="1.0" />
<fdir1 value="0 1 0"/>
<material>Gazebo/Blue</material>
</gazebo>
<link name="left_wheel_assembly">
<collision>
<origin xyz="0 0 0" rpy="0 1.5708 1.5708" />
<geometry>
<cylinder length="0.001" radius="0.04"/>
</geometry>
</collision>
<visual>
<origin xyz="0 0 0" rpy="0 1.5708 1.5708" />
<geometry>
<cylinder length="0.001" radius="0.04"/>
</geometry>
<material name="white"/>
</visual>
<inertial>
<origin xyz="0 0 0" rpy="0 1.5708 1.5708" />
<mass value="0.2"/>
<cylinder_inertia m="0.2" r="0.3" h="0.1"/>
<inertia ixx="0.4" ixy="0.1" ixz="0.1" iyy="0.4" iyz="0.1" izz="0.2"/>
</inertial>
</link>
<gazebo reference="left_wheel_assembly">
<mu1 value="2.0"/>
<mu2 value="2.0"/>
<kp value="10000000.0" />
<kd value="1.0" />
<fdir1 value="0 1 0"/>
<material>Gazebo/White</material>
</gazebo>
<joint name="left_wheel_hinge" type="revolute">
<parent link="chassis"/>
<child link="left_wheel_assembly"/>
<origin xyz="0.4 -0.125 0.3" rpy="0 0 0" />
<axis xyz="0 0 1" rpy="0 0 0" />
<limit effort="100" velocity="1" lower="-1" upper="1"/>
<dynamics damping="0.0" friction="0.0"/>
</joint>
<joint name="left_wheel_rotate" type="continuous">
<parent link="left_wheel_assembly"/>
<child link="left_wheel"/>
<origin xyz="0.0 -0.025 0.0" rpy="0 0 0" />
<axis xyz="0 1 0" rpy="0 0 0" />
<limit effort="0" velocity="0"/>
<dynamics damping="0.0" friction="0.0"/>
</joint>
<transmission name="tran2">
<type>transmission_interface/SimpleTransmission</type>
<joint name="left_wheel_hinge">
<hardwareInterface>EffortJointInterface</hardwareInterface>
</joint>
<actuator name="motor2">
<hardwareInterface>EffortJointInterface</hardwareInterface>
<mechanicalReduction>1</mechanicalReduction>
</actuator>
</transmission>
<transmission name="trans_left_wheel_rotate">
<type>transmission_interface/SimpleTransmission</type>
<joint name="left_wheel_rotate ...
On real vehicles, we typically increase the caster angle to improve passive stability. See: https://en.wikipedia.org/wiki/Caster_...