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
Asked by Pashek on 2021-11-11 09:33:47 UTC
Answers
If the controller is able to apply unlimited effort, it might be counteracting the torque on the wheels due to friction. You can try limiting the effort by specifying <limit><effort>
in on the wheel joints.
Asked by azeey on 2021-11-12 00:01:19 UTC
Comments
Thanks. First of all, <limit><effort>
is ignored for continuous
joints. But even if I clamp the effort in the code, it still slips hardly. Even worse, it starts slipping also after you accelerate with cmd_vel
and then send zero cmd_vel
to stop. And only if I clamp to some ridiculously small values (like 0.1 N*m), it stops slipping. But with this small torque you can't really accelerate in a reasonable time.
Asked by Pashek on 2021-11-12 09:57:59 UTC
Comments