Disabling voxelization of cloud_map

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

Disabling voxelization of cloud_map

mtzkeeeee
Hi,

I somehow want to disable voxelization of cloud_map.
According to the article in ROS Wiki, I can do so by setting the parameter cloud_voxel_size to 0.0.
However, when doing so, an error occurs with the following message;


[ WARN] [1510929772.394282537, 1509972431.921964618]: Parameter "cloud_voxel_size" has moved from rtabmap_ros to rtabmap library. Use parameter "Grid/CellSize" instead. The value is still copied to new parameter name.
 
[FATAL] (2017-11-17 23:42:52.641) OccupancyGrid.cpp:189::setCellSize() Condition (cellSize > 0.0f) not met! [Param name is "Grid/CellSize"]
[rtabmap/rtabmap-2] process has died [pid 3814, exit code -11, cmd /home/aisl/catkin_ws/devel/lib/rtabmap_ros/rtabmap --delete_db_on_start rgb/image:=/kinect2/qhd/image_color_rect depth/image:=/kinect2/qhd/image_depth_rect rgb/camera_info:=/kinect2/qhd/camera_info __name:=rtabmap __log:=/home/aisl/.ros/log/c860c740-cba1-11e7-aa8a-548ca012ffb0/rtabmap-rtabmap-2.log].
log file: /home/aisl/.ros/log/c860c740-cba1-11e7-aa8a-548ca012ffb0/rtabmap-rtabmap-2*.log


Is the way shown in ROS Wiki no longer available?
If so, how else can I disable voxelization?

Thanks in advance.
Reply | Threaded
Open this post in threaded view
|

Re: Disabling voxelization of cloud_map

matlabbe
Administrator
Hi,

As the warning said, the parameter has changed purpose, the documentation needs update for >=Kinetic versions. We cannot output a raw point cloud from rtabmap node anymore, for efficiency reasons. The efficiency way to get the raw point clouds of the map is to subscribe to rtabmap_ros/mapData and reconstruct the map yourself (like rtabmap_ros/MapCloud plugin or rtabmapviz are doing). However, why do you need the raw point cloud map online? If it is just to export a high resolution point cloud, do it after mapping by opening the database in rtabmap standalone, then do File->Export Clouds... You will have the options to regenerate the point clouds without decimation or voxelization.

You can also "Grid/CellSize" to something small but not null (like 0.01 or 0.005), however, more memory will be required and more time will be required to generate cloud_map. Well, for small maps that should not be a big problem.

cheers,
Mathieu
Reply | Threaded
Open this post in threaded view
|

Re: Disabling voxelization of cloud_map

mtzkeeeee
Hi,

Thank you for the reply.
I understood.

I've already implemented the program to generate the raw point cloud from mapData exactly as you suggested and it worked well. Thanks!

I'm currently attempting to put semantic labels provided by 2D images on the 3D point cloud map as colors.
Generating labeled point cloud has been done easily by feeding the labeled images instead of raw rgb images to util3d::cloudRGBFromSensorData() (with a bit of modification).
However, I then found that the generated point cloud included points with NOT label colors.
I suspected this might be because of the voxelization in RTAB-Map, since, in my understanding, the filter method of pcl used in util3d::voxelize() function averages the colors of the points within a voxel.
That's why I wanted to know how to generate the point cloud without voxelizing it to see if it really is the problem of the voxelization.

But with my program, I figured out that the color-mixing phenomenon may not be because of the voxelization but some other cause.

One more question:
Do you have any clue about the auto-modification of pixel colors in some part of the process of RTAB-Map or rtabmap_ros?
(assuming the label images only having proper label colors...)

Thanks,
Reply | Threaded
Open this post in threaded view
|

Re: Disabling voxelization of cloud_map

matlabbe
Administrator
RGB images are not modified. cloudRGBFromSensorData() simply project depth pixels to 3d points and associate the color from the rgb image. You can do pcl::io::savePCDFile() on the generated cloud  to investigate more. Note that if you use SD images from kinect2 bridge, some depth pixels don't have corresponding rgb values, so some points would be black.