ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question

Which planner to use for a mobile robot-trailer system?

asked 2021-01-11 09:04:22 -0600

hanks gravatar image

updated 2021-10-26 09:31:42 -0600

lucasw gravatar image

Want to clarify it is a simulation only project for now. I am building a mobile robot-trailer system for indoor environments. My setup includes a Clearpath Robotics Ridgeback robot towing a custom cart. I have changed the Ridgeback to a normal differential drive from its Mecanum drive system. I am facing two problems.

  1. I am looking for a planner similar to the sbpl cart planner which can plan a path in a known (mapped) environment taking into consideration the non-holonomic nature of the system. I am running ROS Melodic and unfortunately sbpl isn't supported.

  2. I designed a custom cargo cart with swivel wheels using the same wheels provided with the Ridgeback model. The entire cart is attached to the robot aligned to its rear axel. Whenever I move the robot, the wheels do not align themselves to the direction of movement even though they swivel. And as the robot is stopped, the cart keeps drifting on its own.

Please help me with these problems.

edit retag flag offensive close merge delete

1 Answer

Sort by ยป oldest newest most voted

answered 2021-01-13 14:41:37 -0600

DubinsCar gravatar image

If you're okay with non-optimal paths, I recommend using the Open Motion Planning Library. It contains implementations of several sampling-based planning algorithms (see Many of OMPL's algorithms produce optimal solutions, but given the non-holonomic nature of the tractor-trailer system, it will be difficult to use them. I recommend using the RRT algorithm described in the above link under the control-based planners section. OMPL does not come with collision-detection, so you'll have to implement that on your own.

If you want optimal paths, you have a few options:

Option A: Implement your own version of the sbpl cart planner. The sbpl cart planner relies on a set of pre-defined motion primitives to incrementally construct and search a lattice graph. See and for more details.

Option B: Use a near-optimal sampling-based planning algorithm from OMPL's suite of control-based planners. I recommend the SST algorithm.

Option C: Use an asymptotically optimal planner from OMPL's suite of geometric planners. I recommend RRT*. In order to use this, you'll need to define an inverse kinematic function that can connect any two states by a kinematically feasible path. For instructions on how to do this, read

Among these options, I recommend Option A. Lattice planning is not too difficult to implement and generally gives good results in practice.

edit flag offensive delete link more


Thank you for your reply. I was aware of the Hybrid A Star Trailer project by Atsushi Sakai and wanted to implement something similar. I will look into all these options thoroughly starting with option A.

Also, if you could suggest any SLAM and localization packages/algorithms that can be an improvement over Hector SLAM and AMCL which I'm currently using. I am looking into mapping algorithms (RTLAB, ORB SLAM, etc) as Hector SLAM isn't able to construct (even with odometry enabled) the long hallways I have in my environment. I'd appreciate your suggestions, and thank you for the detailed answer.

hanks gravatar image hanks  ( 2021-01-13 22:57:39 -0600 )edit

@tanujthakkar in my personal experience I have found gmapping to be pretty robust and very usable in the ROS ecosystem for a SLAM solution.

JackB gravatar image JackB  ( 2021-01-15 10:19:30 -0600 )edit

I tried using GMapping but was experiencing a lot of odometry drift. Anyway, I solved the problem I had with Hector SLAM but I'll give GMapping another shot if it works better. Thanks for the reply.

hanks gravatar image hanks  ( 2021-01-15 10:21:16 -0600 )edit

@DubinsCar I am currently implementing the Hybrid A* algorithm in C++ for ROS but am unable to figure out how to implement collision check for the robot and the trailer. Do I just check the entire robot and trailer polygon with the respective map data for collisions? Or is there a better way to implement it? Please help.

hanks gravatar image hanks  ( 2021-03-05 01:59:11 -0600 )edit

I personally like using the approach described in, specifically sections 5.3.2 and 5.3.4. This approach is computationally efficient and works for arbitrarily complex robot and obstacle shapes. If your map data is a point cloud, then you can replace the polygon tree described in section 5.3.2 with a kd-tree or ball-tree.

DubinsCar gravatar image DubinsCar  ( 2021-03-08 08:11:08 -0600 )edit

Question Tools



Asked: 2021-01-11 09:04:22 -0600

Seen: 583 times

Last updated: Jan 11 '21