Ask Your Question
0

How to stabilize a joint -- keep Ackermann wheels from wobbling

asked 2019-09-26 19:29:47 -0600

horseatinweeds gravatar image

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 ...
(more)
edit retag flag offensive close merge delete

Comments

1

On real vehicles, we typically increase the caster angle to improve passive stability. See: https://en.wikipedia.org/wiki/Caster_...

ahendrix gravatar imageahendrix ( 2019-09-26 20:39:31 -0600 )edit

1 Answer

Sort by ยป oldest newest most voted
1

answered 2019-09-27 20:04:00 -0600

404RobotNotFound gravatar image

It looks like you might have a cylinder_inertia tag in your links, but then follow up with another inertia tag. If the cylinder_inertia tag sets the inertia property correctly then you can probably delete the next line.

Otherwise, look at the matrix here for a solid cylinder: https://en.wikipedia.org/wiki/List_of...

Basically, ixy, ixz, and iyz should be zero and update ixx, iyy, and izz to be correct (the diagonals of the matrix).

edit flag offensive delete link more

Comments

Thanks 404RobotNotFound. Fixing the inertia really helped to stabilize the wheels.

horseatinweeds gravatar imagehorseatinweeds ( 2019-09-28 17:07:48 -0600 )edit

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

3 followers

Stats

Asked: 2019-09-26 19:29:47 -0600

Seen: 33 times

Last updated: Sep 27