When we use holonomic robots, we should limit the maximum linear velocity (L-inf, L-1 or L-2 norm), not only max_vel_x and max_vel_y, because they are coupled.
Otherwise, the optimization for vx and vy results in max_vel_x and max_vel_y in open / collision-free paths. The robot will always move diagonally because the resultant (linear velocity) is greater. However, the maximum velocity is coupled and bounded to the actual maximum linear velocity of the robot. This new constraint should be added to the optimizer.
The video below shows the robot moving diagonally and it fixes the orientation at the end:
Problem Description
When we use holonomic robots, we should limit the maximum linear velocity (L-inf, L-1 or L-2 norm), not only
max_vel_x
andmax_vel_y
, because they are coupled.Otherwise, the optimization for
vx
andvy
results inmax_vel_x
andmax_vel_y
in open / collision-free paths. The robot will always move diagonally because the resultant (linear velocity) is greater. However, the maximum velocity is coupled and bounded to the actual maximum linear velocity of the robot. This new constraint should be added to the optimizer.The video below shows the robot moving diagonally and it fixes the orientation at the end:
https://user-images.githubusercontent.com/6097267/148993227-5773c195-a3c6-4ad6-ab5a-503c104d751b.mp4
And one can see that the behaviour of the robot is not what we expect for a holonomic robot (changing orientation a lot, and moving diagonally):
https://user-images.githubusercontent.com/6097267/148996957-d1a8698e-b858-4eb1-b1a5-319d458dc292.mp4
Solution
Add
max_vel_linear
for holonomic robots and add the constraint to the optimization.Long path not moving diagonally:
https://user-images.githubusercontent.com/6097267/148996627-7f598de7-23f8-4c17-818f-28df3a3e92f6.mp4
Moving around:
https://user-images.githubusercontent.com/6097267/148996037-e0d0d8df-6e35-4735-b835-095ed0cad98f.mp4