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

Navigation of mobile robot in 3d map

asked 2017-03-14 05:22:02 -0500

feignedjesse2 gravatar image

updated 2017-03-15 13:45:58 -0500

gvdhoorn gravatar image


I'm working on a project where we want to be able to navigate a robot trough a field with uneven terrain, using a laser scanner and/or Kinect (Kinect version 1). I am looking for the best solution to do this. Our plan is to map the field before we start driving. Next, we want to set goals for the robot to drive to.

Available hardware for navigation: 1. 360 degrees 2d lidar scanner 2. Microsoft Kinect 3. 6-DOF IMU.

of course, we have a complete URDF file and drivers for publishing data into ROS.

What would be the best way to make the robot do successful navigation. Is there a stack or package available that takes all this data and outputs the desired speeds for the robot?

I hope to get a reaction soon!

Kind regards, Jesse

Edit: Hello @M@t! Thank you for this quick and extensive response! I never expected that! I have enough information for now to get started thanks to you. If you like to know more about my project, read below.


We are going to compete in the FieldRobotEvent in Britain this year. The task is to design a robot that is able to drive through a set of lanes of corn plants, such as the image below.

image description

The event is divided into 5 tasks. Each one gets harder. We mainly want to focus on task 1 and 2 because we cannot do 3, 4 and 5 without the basis of task 1 and 2.

What we have

A team member is currently designing the hardware. In a couple of weeks, we will have a robot equipped with encoders on all wheels, a (2D) LiDAR scanner, a 6DOF IMU and a Kinect (360). I am fully responsible for the software.

Problems to solve

Task 1 and 2 are the tasks where we need to drive trough the lanes of corn as quickly and accurately as possible. this has to be done fully autonomously. The robot thus needs to know where it is and how to drive trough the lanes. applying an RANSAC algorithm or something is so-so okay, but does not work in practice (I saw that last year with a robot from another team).


I figured, if we can obtain the map beforehand we can autonomously drive through it. The next logical thing would be to use ROS to solve the navigation, goal and pose problems.

The problem here is that while localization algorithms like AMCL like a stable ground. In practice and in the competition the robot can tilt up to 10 degrees sideways (or forward for that matter). This would, for instance, cause problems with the laser scanner because the scanner won't scan the flat plane anymore.

Again, thank you for your elaborate response!

edit retag flag offensive close merge delete



Reading "field" and "uneven terrain" reminded me of the questions by @M@t. Perhaps he can share his experiences. I would definitely check out some of his questions & answers here on ROS Answers.

gvdhoorn gravatar image gvdhoorn  ( 2017-03-14 06:30:19 -0500 )edit

One more suggestion:

In a couple of weeks, we will have a robot [..]

try to start creating a simulation model of your robot and the target environment now / as soon as possible. That will allow you to start working immediately, but also makes experimentation really trivial.

gvdhoorn gravatar image gvdhoorn  ( 2017-03-15 13:48:21 -0500 )edit

1 Answer

Sort by ยป oldest newest most voted

answered 2017-03-14 15:59:20 -0500

M@t gravatar image

updated 2018-12-20 16:11:53 -0500

Hi @feignedjesse2, sounds like you're doing something similar to me, so I'll try help you out as best I can. Your problem is pretty general so I can't give you specific advice without knowing more about your project and what you're trying to achieve. As always, I'll assume that you or anyone else reading this is just starting out with ROS. Let's break down what you want to do into three parts (all of the below have ROS integration):


You want to map your environment and you need a 3D map, you're often wanting to localize your laser scanner or robot at the same time - i.e. Simultaneous Localization and Mapping (SLAM) Below are some ROS-compatible options.

  • Gmapping is the most-integrated SLAM algorithm you can use with ROS, so it works well with the ROS navigation stack (below). It's essentially a ROS wrapper for the Gmapping algorithm you can find on OpenSLAM. Only does 2D SLAM but is a probably the best starting point for anyone new to ROS.
  • Google Cartographer Google very recently released this 2D/3D SLAM package that will take laser and/or point cloud data and give you an occupancy map. You can find ROS integration here and Github code here. Not sure how they represent the map internally. Cartographer includes loop-closure.
  • Berkley Localization and Mapping (BLAM) is another 3D LiDAR SLAM package. This doesn't have any papers on it that I am aware of, and it isn't being maintained (last commit was over two years ago). This uses the open-source and ROS-compatible Point Cloud Library for some of it's processing. Also does loop-closure
  • Laser Odometry and Mapping (LOAM) is another 3D LiDAR SLAM package written by a PhD student. The source code is old and outdated because the student went on to commercialize their code with the company Kaarta. You can find a (somewhat) working version of the LOAM source code here. Does not perform any loop closure, so it's long-term use is quite limited.
  • hector_slam/hector_mapping gives you LiDAR-based SLAM for systems with poor/no odometry (may suit you since you don't have wheel encoders). Also outputs an occupancy map. From memory I think this uses an elevation map (someone correct me If I'm wrong)

Of these options, I've played with Cartographer, BLAM, LOAM and Gmapping. If you're starting out with ROS and you only need 2D SLAM, I'd recommend Gmapping. If you are experienced with ROS and/or SLAM concepts, I think the 2D version of Cartographer is more accurate and robust than Gmapping. If you need a 3D solution, Cartographer is quite hard to setup, tune and use, but it is still maintained and probably a better solution long-term than BLAM. Can't recommend the LOAM code.

Mapping only

There are some packages that don't do SLAM and are only used for pure mapping (i.e. you'll have to use something else ... (more)

edit flag offensive delete link more


Amazing answer. Thank you very much.

raultron gravatar image raultron  ( 2017-11-21 07:43:29 -0500 )edit

thank you . you're awsome !

Amina23 gravatar image Amina23  ( 2020-03-05 02:33:54 -0500 )edit

Hi @M@t, Can you please suggest how to integrate 3D slam algorithms like cartographer or hdl_graph_slam with NavStack for navigation purposes? I understand we can setup tf for localization, but how how do we do path planning on 3d maps (we do not get grid maps).

Thank you for the help and appreciate your contribution.

darshb34 gravatar image darshb34  ( 2021-01-10 04:52:17 -0500 )edit

@darshb34, that is a question with a very long and complicated answer. Far too long to discuss in the comment section, and possibly too broad even to properly answer in a forum thread. I suggest you create a new question, and try to define what you want to achieve as succinctly as possible.

M@t gravatar image M@t  ( 2021-01-12 22:54:58 -0500 )edit

Question Tools



Asked: 2017-03-14 05:22:02 -0500

Seen: 5,886 times

Last updated: Dec 20 '18