Controlled wheel slips under external force
Hi, when applying external force to a wheeled robot (manually, inertia, other objects), controlled wheels don't rotate (slip). While they should, due to the friction between the wheels and the ground, when the external force applied overwhelms the forces that control the wheels together with the friction and damping forces of the wheels' joints.
I tried different methods of controlling the wheels: PID
control, SetParam("vel")
which both respect physics; different wheels' surface friction mu1
and mu2
: from 0.1 to 1.0 to 1000000; different dynamics damping
and friction
for the wheels joints: from 0 to 100; different kp
, kd
, minDepth
, maxVel
, etc. Nothing helps.
The actual scenario I have troubles in bcz of this issue is 4-wheeled robot with two front differential wheels and two back caster wheels. It has its COG in the middle, which is quite behind the front axle. When it rotates in-place and then is commanded to stop (zero cmd_vel sent), the moment of rotational inertia keeps it rotating for some time, but front wheels starts slipping, which makes odometry based on front wheels wrong and, as the result, localization and navigation stuff produce wrong occupancy maps.
You can see this effect with any wheeled robot, say, Turtlebot3.
$ export TURTLEBOT3_MODEL=burger
$ roslaunch turtlebot3_gazebo turtlebot3_empty_world.launch
Apply some force to it (e.g. linear 100N or rotational 10N) and observe that the front wheels are blocked and slips. Here are two videos visualizing the issue:
- https://youtu.be/Mi_9K_Pyr8c - with default parameters (mu=0.1)
- https://youtu.be/zbQR5VZLTWo - with increased wheels surface friction (mu=1.0)
I'm on Melodic, Gazebo-9