The Voxblox Node¶
Table of Contents¶
Published and Subscribed Topics¶
Note: the voxblox_node has been replaced with tsdf_server (if you want a TSDF) or esdf_server (if you want both a TSDF and an ESDF). The tsdf_server and esdf_server publish and subscribe to the following topics:
- A visualization topic showing the mesh produced from the tsdf in a form that can be seen in RViz. Set
update_mesh_every_n_secto control its update rate.
- A colored pointcloud of the voxels that are close to a surface.
- A pointcloud showing all allocated voxels.
- Only appears if
output_mesh_as_pointcloudis true, outputs a pointcloud containing the verticies of the generated mesh.
- Only appears if
output_mesh_as_pcl_meshis true, outputs any mesh generated by the generate_mesh service.
- Outputs a 2D horizontal slice of the TSDF colored by the stored distance value.
- A pointcloud showing the values of all allocated ESDF voxels. Only appears if using
- Outputs a 2D horizontal slice of the ESDF colored by the stored distance value. Only appears if using
- Visualizes the location of the allocated voxels in the TSDF.
- Publishes the entire TSDF layer to update other nodes (that listen on tsdf_layer_in). Only published if
publish_tsdf_mapis set to true.
- Publishes the entire ESDF layer to update other nodes (that listen on esdf_layer_in). Only published if
publish_esdf_mapis set to true.
- (ESDF server only) Outputs all the points within the map that are considered traversable, controlled by the
- Only appears if
use_tf_transformsis false. The transformation from the world frame to the current sensor frame.
- The input pointcloud to be integrated.
- Only appears if
use_freespace_pointcloudis true. Unlike the
pointcloudtopic where the given points lie on surfaces, the points in the
freespace_pointcloudare taken to be floating in empty space. These points can assist in generating more complete freespace information in a map.
- Replaces the current TSDF layer with that from this topic. Voxel size and voxels per side should match.
- Replaces the current ESDF layer with that from this topic. Voxel size and voxels per side should match.
- If ICP is enabled, this is the current corrected transform between the world frame and the ICP frame.
The tsdf_server and esdf_server have the following services:
- This service has an empty request and response. Calling this service will generate a new mesh. The mesh will be saved as a ply file unless
mesh_filenameis set to “”. The mesh will also be output on the
output_mesh_as_pointcloudis true and on the
- This service has an empty request and response. It can be used to trigger an esdf map update.
- This service has a
voxblox_msgs::FilePath::Response. The service call saves the tsdf layer to a .vxblx file.
- This service has a
voxblox_msgs::FilePath::Response. The service call loads the tsdf layer from a .vxblx file.
- This service has an empty request and response. Publishes any TSDF and ESDF layers on the
- This service has an empty request and response. Publishes TSDF and ESDF pointclouds and slices.
A summary of the user setable tsdf_server and esdf_server parameters. All parameters are listed as:
- Minimum time to wait after integrating a message before accepting a new one.
- The size of the queue used to subscribe to pointclouds.
- Prints additional debug and timing information.
- Blocks that are more than this distance from the latest robot pose are deleted, saving memory.
TSDF Integrator Parameters¶
- The most straightfoward integrator. Every point in the pointcloud has a ray cast from the origin through it. Every voxel each ray passes through is updated individually. A very slow and exact approach.
- Rays that start and finish in the same voxel are bundled into a single ray. The properties of the points are merged and their weights added so no information is lost. The approximation means some voxels will recive updates that were otherwise meant for neighboring voxels. This approach works well with large voxels (10 cm or greater) and can give an order of magnitude speed up over the simple integrator.
- Rays that attempt to update voxels already updated by other rays from the same pointcloud are terminated early and discarded. An approximate method that has been designed to give the fastest possible results at the expense of discarding large quantities of information. The trade off between speed and information loss can be tuned via the
max_consecutive_ray_collisionsparameters. This method is currently the only viable integrator for real-time applications with voxels smaller than 5 cm.
- The size of the tsdf voxels
- TSDF voxels per side of an allocated block. Must be a power of 2
- If true, the entire length of a ray is integrated, if false only the region inside the trunaction distance is used.
- The truncation distance for the TSDF
- The maximum range out to which a ray will be cast
- The point at which the ray casting will start
- The upper limit for the weight assigned to a voxel
- If true all points along a ray have equal weighting
- If true points beyond the
max_ray_length_mwill be integrated up to this distance
- If true a second subscription topic
freespace_pointcloudappears. Clearing rays are cast from beyond this topic’s points’ truncation distance to assist in clearing freespace voxels
Fast TSDF Integrator Specific Parameters¶
These parameters are only used if the integrator
method is set to “fast”.
- Before integration points are inserted into a sub-voxel, only one point is allowed per sub-voxel. This can be thought of as subsampling the pointcloud. The edge length of the sub-voxel is the voxel edge length divided by
- When a ray is cast by this integrator it detects if any other ray has already passed through the current voxel this scan. If it passes through more than
max_consecutive_ray_collisionsvoxels other rays have seen in a row, it is taken to be adding no new information and the casting stops.
- The time budget for frame integration, if this time is exceeded ray casting is stopped early. Used to guarantee real time performance.
- Governs how often the sets that indicate if a sub-voxel is full or a voxel has had a ray passed through it are cleared.
ESDF Integrator Parameters¶
- The maximum distance that the esdf will be calculated out to.
- Default distance set for unknown values and values >``esdf_max_distance_m``.
- Enables setting unknown space to free near the current pose of the sensor, and unknown space to occupied further away from the sensor. Controlled by the two parameters below.
- Radius of the inner sphere where unknown is set to free, in meters.
- Radius of the outer sphere where unknown is set to occupied, in meters.
ICP Refinement Parameters¶
ICP based refinement can be applied to the poses of the input pointclouds before merging.
- Whether to use ICP to align all incoming pointclouds to the existing structure.
- True to apply 6-dof pose correction, false for 4-dof (x, y, z, yaw) correction.
- Whether to accumulate transform corrections from ICP over all pointclouds. Reset at each new pointcloud if false.
- TF frame to output the ICP corrections to.
- TF frame used to output the ICP corrected poses relative to the
- Number of points used in each batch of point matching corrections.
- Random subsampling will be used to reduce the number of points used for matching.
- For a mini batch refinement to be accepted, at least this ratio of points in the pointcloud must fall within the truncation distance of the existing TSDF layer.
- A rough measure of the confidence the system has in the provided inital pose. Each point used in ICP contributes 1 point of weighting information to the translation.
- A rough measure of the confidence the system has in the provided inital pose. Each point used in ICP contributes 2 points of weighting information to the rotation.
Input Transform Parameters¶
- If true the ros tf tree will be used to get the pose of the sensor relative to the world (
world_framewill be used). If false the pose must be given via the
- The base frame used when looking up tf transforms. This is also the frame that most outputs are given in.
- The sensor frame used when looking up tf transforms. If set to “” the frame of the input pointcloud message will be used.
- A static transformation from the base to the dynamic system that will be applied.
- If the given
T_B_Dshould be inverted before it is used.
- A static transformation from the base to the sensor that will be applied.
- If the given
T_B_Cshould be inverted before it is used.
- If true the verticies of the generated mesh will be ouput as a pointcloud on the topic
mesh_pointcloudwhenever the generate_mesh service is called.
- If true the generated mesh will be ouput as a
pcl::PolygonMeshon the topic
mesh_pclwhenever the generate_mesh service is called.
- The height at which generated tsdf and esdf slices will be made.
- If the pointcloud should be colored by the voxel weighting.
- Filename output mesh will be saved to, leave blank if no file should be generated.
- The method that will be used for coloring the mesh. Options are “color”, “height”, “normals”, “lambert” and “gray”.
- The minimum weighting needed for a point to be included in the mesh.
- Rate at which the mesh topic will be published to, a value of 0 disables. Note, this will not trigger any other mesh operations, such as generating a ply file.
- Whether to publish the complete TSDF map periodically over ROS topics.
- Whether to publish the complete ESDF map periodically over ROS topics.
- Enables publishing of
publish_pointclouds | If true the tsdf and esdf (if generated) is published as a pointcloud when the mesh is updated.
If the incoming pointcloud is an intensity (not RGB) pointcloud, such as from laser, this sets how the intensities will be mapped to a color. Valid options are
- Maximum value to use for the intensity mapping. Minimum value is always 0.
- Whether to display a traversability pointcloud from an ESDF server.
- The minimum radius at which a point is considered traversable.