# Robot tilting problem on linear acceleration

Hello, I am trying to simulate someting close to the Nexus 3-wheeled platform.

When I accelerate with 2 wheels in the direction of the third, the latter wheel gets raised into the air. I used the fomulas on wikipedia to calculate my inertia. For the mass I tried with 10, 100, 200 kg with the same tilting result.

I mananged to set the friction directly in the .sdf file generated from my urdf.

<friction>
<ode>
<mu>0.9</mu>
<mu2>0.001</mu2>
<fdir1>0 1.0 0</fdir1>
</ode>
</friction>


(I set it directly in the .sdf file because i noticed another problem described here.)

I also setup the joint model stiffness parameters kp, kd like so:

  <contact>
<ode>
<kp>1e+08</kp>
<kd>1</kd>
</ode>
</contact>


in order to have some stiff wheels when in contact with the ground plane, otherwise they pass through.

Would I need to setup something else? I am using ros-kinetic and the gazebo delivered with it, Gazebo7. (I use ros_control ( a modified version of diff_drive_controller for the 3-wheeled base) and of course continuous joints)

Tnx and regards!

UPDATE

I also had a small arm on top of my robot, with a really small weight compared to the base but with it's own inertia. I deleted all that and now I just have a base with 3 wheels and it works fine. For now it's ok for what I need but for the future I will need the arm also.

edit retag close merge delete

It's the third wheel that raises? How high? What's the acceleration? Do you have a video of the behavior?

( 2017-06-27 12:58:17 -0600 )edit

Yes the third wheel (aith the base link too, not just the wheel alone), like it had a huge inertial value on the robot. Not too high because my robot is low so it hits the ground with the back of the base_link. I made an update in my question.

( 2017-06-28 08:42:46 -0600 )edit

Sort by » oldest newest most voted

So i had this problem because of a prismatic joint I was using:

I managed to use velocity_controllers/JointPositionController instead of position_controllers/JointPositionController with the prismatic joint. You just need to add a PID for it. Here's an example.

Before:

arm_controller:
type: "position_controllers/JointPositionController"
joint: arm_joint


After:

arm_controller:
type: "velocity_controllers/JointPositionController"
joint: arm_joint
pid: {p: 100.0, i: 0.01, d: 1.0}


And for the transmission:

<hardwareInterface>hardware_interface/VelocityJointInterface </hardwareInterface>