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

octomap_server globally referenced pointcloud and transform

asked 2013-01-09 12:57:44 -0600

anonymousSnowMan gravatar image

updated 2013-01-13 11:46:29 -0600


I am trying to pass globally referenced point clouds and trajectories to octomap_server, but it's not producing the desired results? The point cloud and ray tracing are being inserted from the single origin of the first scan.

edit retag flag offensive close merge delete

2 Answers

Sort by ยป oldest newest most voted

answered 2013-01-13 11:49:37 -0600

anonymousSnowMan gravatar image

Found the issue:

// directly transform to map frame:
pcl::transformPointCloud(pc, pc, sensorToWorld);

I believe this was performing a transform on already transformed trajectories. By commenting this entry out, rebuilding and trying again, the insertion and ray casting are working correctly.

edit flag offensive delete link more

answered 2013-01-13 22:07:18 -0600

AHornung gravatar image

updated 2013-01-14 01:13:27 -0600

I think the problem lies in your tf frames. octomap_server will transform your point clouds to the global map frame using TF, relying on the frame_id set in your sensor data. If you transformed them yourself but left the frame_id unchanged then it will transform it again. If you change the frame_id in the point cloud accordingly to the global map frame, octomap_server should not transform again.

However, the main problem I see is that octomap_server assumes single sensor readings per cloud, each with its own origin, for its ray casting operation. It will cast a ray from the sensor origin to each end point. If you only have one origin, this will not result in a correct map since information behind intermediate obstacles may be missed, or existing obstacles cleared out.

edit flag offensive delete link more

Question Tools


Asked: 2013-01-09 12:57:44 -0600

Seen: 375 times

Last updated: Jan 14 '13