Rosanswers logo

Hello, I am relatively new to ROS and I am confused a bit from the documentation.

I have a robot and I want to enable it to do some local path planning (only - no global path planning - no navigation - no SLAM) within its field of view. As an example: I want to point somewhere within Kinect's field of view and the planner would compute the way including obstacle avoidance. Its sensor is Kinect (no laser scanner, no odometry) and a bunch of infrareds around it.

It's a relatively simple task but I am confused of which modules do I need. All of them seem to do much more complicated things than I want. Moreover I saw that many transform the pointcloud of Kinect into a laser scan and use this for navigation purposes, but I wouldn't like to lose so much information. Is there an integrated solution?

Thank you very much in advance.

Originally posted by echelon on ROS Answers with karma: 1 on 2013-06-18

Post score: 0


1 Answer 1


Rosanswers logo

Ok what you are asking is a little complicated. Without SLAM or odometry it's simply not possible at all.

You need a world fixed frame to understand where you are right now, without broadcasting the transform between map frame (or odom frame) and your base_link frame you can't tell how far you are from your goal. Let me explain it by an example. you publish a point which is 1 meter away in x axis from your robot. you pass it to a planner which computes a velocity command and the robot starts moving, but now you have to know how long you have traveled and how far you are from your goal. If the goal point is in the base_link, your goal is always 1 meter away from your position and you will never reach it. So the goal must be in the odom or map frame and transformation between the fixed frame and your base_link frame must be available.

Enough about the transformation, but please read REP 105 for more information.

Since you don't have a laser scanner and there is no odometry is available, you can use packages that compute visual odometry using your Kinect data and provide odom -> base_link transformation.

Then comes the no global plan part. Just create a local costmap param file and pass it to a node you want to initialize your costmap with.

In order to achieve your desired behavior the closest available source code is move_base but you need to modify it. The goal that it receives must be passed directly to the local planner using setPlan() function. In fact you have to remove all the usages of global costmap and global planner in the code. The velocity command is computed in your desired loop until you reach the goal.

You are free to write your own code from the beginning, just subscribe to your goal topic and do the rest. I'm not sure why you don't want to use global planner, but if you are really insist on what you are doing, now you know what to do.

Good luck.

Originally posted by Arwen with karma: 146 on 2016-07-14

This answer was ACCEPTED on the original site

Post score: 1


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.