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

Local path planning with Kinect

asked 2013-06-18 10:54:30 -0600

this post is marked as community wiki

This post is a wiki. Anyone with karma >75 is welcome to improve it.

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.

edit retag flag offensive close merge delete

1 Answer

Sort by ยป oldest newest most voted

answered 2016-07-14 00:16:29 -0600

Arwen gravatar image

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.

edit flag offensive delete link more

Question Tools



Asked: 2013-06-18 10:54:30 -0600

Seen: 699 times

Last updated: Jul 14 '16