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

Getting PointCloud2 data in Python?

asked 2012-06-04 14:56:44 -0600

Pi Robot gravatar image

updated 2016-10-24 09:01:55 -0600

ngrennan gravatar image


I am trying to translate the TurtleBot "follower" program (written in C++) to Python but I'm not sure how to read the (x, y, z) values from the PointCloud2 message returned by the Kinect without using PCL. I know I can use the depth image from the Kinect on /camera/depth/image but I'd rather use the PointCloud2 message type if possible.

I can subscribe to the /camera/depth/points or /camera/rgb/points topic and print back things like the message header and field names, but I'm not sure how to get the actual x, y and z data values so that I can iterate through them and compute average values. Does anyone know the magic incantation?


edit retag flag offensive close merge delete

2 Answers

Sort by ยป oldest newest most voted

answered 2012-06-04 15:07:03 -0600

arebgun gravatar image

Apparently this functionality is a part of sensor_msgs package, here's a link to relevant file.

edit flag offensive delete link more


Thanks @arebgun. I'm wondering if this has made it into the Electric debs yet? I grabbed the source for sensor_msgs from trunk and although it compiled fine, I can't seem to use it in my follower package. When doing a rosmake I get "Package sensor_msgs was not found in the pkg-config search path"

Pi Robot gravatar image Pi Robot  ( 2012-06-04 15:35:06 -0600 )edit

It doesn't look like this file is in the electric tree. The file is 4 months old, so I doubt that electric will have that functionality at all. 1.7.x and later series of the stack have this python file, so Fuerte should have this, but not Electric (1.6.x. series).

arebgun gravatar image arebgun  ( 2012-06-04 16:03:38 -0600 )edit

answered 2012-06-04 17:22:41 -0600

updated 2012-06-04 17:23:40 -0600

I wouldn't recommend using the struct-based point cloud deserialization in python. It's very slow. pr2_python.pointclouds, which is part of the Sushi code from the PR2 Workshop/ICRA challenge does a pretty good job, and is much faster.

edit flag offensive delete link more


Thanks @Dan Lazewatsky. But I get much faster results (2-4 times faster) with the method pointed to by Anton above.

Pi Robot gravatar image Pi Robot  ( 2012-06-05 03:48:06 -0600 )edit

That's surprising. About how many points are in your point clouds?

Dan Lazewatsky gravatar image Dan Lazewatsky  ( 2012-06-05 03:50:05 -0600 )edit

76800 points (320x240 image). Also, I had to change the datatype to float64 instead of float32 for ROS Electric and then the values I get back for y and z seem way off (e.g. 1.7EE-41 for average y). So something weird is going on.

Pi Robot gravatar image Pi Robot  ( 2012-06-05 04:03:33 -0600 )edit

Question Tools



Asked: 2012-06-04 14:56:44 -0600

Seen: 3,912 times

Last updated: Jun 04 '12