ros-navigation / navigation2

ROS 2 Navigation Framework and System
https://nav2.org/
Other
2.59k stars 1.3k forks source link

Create system test with a holonomic robot #954

Closed crdelsey closed 4 years ago

crdelsey commented 5 years ago

Feature request

Feature description

The nav stack has support for holonomic robots but it is untested. There needs to be an automated test that ensures it still works properly.

Implementation considerations

This could be a variant of the nav2_system_test package with a different robot model used.

SteveMacenski commented 5 years ago

@crdelsey functionally holonomic robots are treated the same as differential drive in the stack: NavFn will plan irrespective to kinematics, and DWB just needs samples set for Y as well as X.

I don't think this is something that is needed for any performance or test. Regressions in DWB that disable, for instance, the functioning of the Y motion won't actually make it fail to navigate because a holonomic robot can act like a differential drive robot

crdelsey commented 5 years ago

Maybe I should retitle this to just "Test with a holonomic robot". For all we know right now, we could seg fault or just not take advantage of the Y velocity like you mention. My first instinct is to automate the test if possible, however, I'll take a manual test if that's all we've got. I just want to be able to say "Yes it works" and have some confidence that I'm actually right.

SteveMacenski commented 5 years ago

Ah I see. Do we know anyone with a holonomic robot we can poke? Or I suppose just a reconfigured description/gazebo package would be sufficient. I can't think of many other than Pepper and a couple of proprietary warehouse bots.

ninamwa commented 5 years ago

Hi. Will the navigation2 stack work with a holonomic robot? Where should this parameter be set? I could only find examples for this with the navigation1 stack.

crdelsey commented 5 years ago

@ninamwa We haven't tested with a holonomic robot yet, however, I suspect it will work since the code has simply been ported from ROS 1.

I believe the robot should work without any parameter changes. It would just move like a differential drive robot in that case.

To take full advantage of the holonomic robot though, there are two sets of parameters you need to change:

amcl:
  ros__parameters:
    robot_model_type: "omnidirectional"

And, assuming you are using the Dashing release, these are the parameters you need to change for the controller. Obviously, you need to set the values to whatever is appropriate for your robot. The values below are about right for a holonomic robot that is comparable to a Turtlebot 3 in speed.

dwb_controller:
  ros__parameters:
    min_vel_y: -0.26
    max_vel_y: 0.26
    max_speed_xy: 0.26
    min_y_velocity_threshold: 0.001
    acc_lim_y: 2.5
    acc_lim_theta: 3.2
    decel_lim_x: -2.5
    decel_lim_y: -2.5
    vy_samples: 20

If you end up trying this, please reply here with your results

ninamwa commented 4 years ago

@crdelsey Hi. We tried this at our KMR iiwa robot yesterday, and it was a success. I only did the changes you suggested!

SteveMacenski commented 4 years ago

Awesome! Super glad you had a good experience, means we did a couple things right.

Can you add a short gif of your robot moving around? It would mean alot to us to have a short clip to share of your robot omni robot moving around.

crdelsey commented 4 years ago

Thanks!

SteveMacenski commented 4 years ago

User above tested on holonomic working

Osal22 commented 1 month ago

After setting recommended parameters I do not see any difference in velocity commands. Robot still behaves like differential drive anything further I am missing.

manavthakkar commented 1 month ago

I tried with the above mentioned parameters and just like the experience of @Osal22 , the robot behaves like a diff drive