Only released in EOL distros:
Package Summary
2D/3D mapper based on libpointmatcher (http://github.com/ethz-asl/libpointmatcher)
- Author: François Pomerleau and Stéphane Magnenat
- License: BSD
- Source: git https://github.com/ethz-asl/ethzasl_icp_mapping.git (branch: None)
Package Summary
2D/3D mapper based on libpointmatcher (http://github.com/ethz-asl/libpointmatcher)
- Author: François Pomerleau and Stéphane Magnenat
- License: BSD
- Source: git https://github.com/ethz-asl/ethzasl_icp_mapping.git (branch: None)
Package Summary
2D/3D mapper based on libpointmatcher (http://github.com/ethz-asl/libpointmatcher)
- Maintainer status: maintained
- Maintainer: Francois Pomerleau <f.pomerleau AT gmail DOT com>
- Author: François Pomerleau and Stéphane Magnenat
- License: new BSD
- Source: git https://github.com/ethz-asl/ethzasl_icp_mapping.git (branch: hydro_devel)
Contents
Overview
One of the main problems with point-cloud registration solutions is that their efficiency often depends on the application. This package provides a convenient way to tune, test and deploy several registration solutions using the same node. It provides a real-time tracker and mapper in 2D and 3D, based on the libpointmachter and libnabo libraries. This allows a complete configuration of the registration chain through YAML files, see the chain configuration page for a list of modules and their parameters. You can think of this package as the front end of a SLAM system, including everything but loop-closure detection and relaxation.
For installation instructions, see the ethzasl_icp_mapping stack page. A preliminary version of this package was deployed in the ROS kinect contest.
Citing
A paper using a preliminary version of this package to evaluate a Kinect tracker was presented at IROS 2011 and can be found here (fulltext). It also introduces the functionalities of the library.
If you use this package in an academic context, please cite the following publication:
@INPROCEEDINGS{pomerleau11tracking, author = {François Pomerleau and Stéphane Magnenat and Francis Colas and Ming Liu and Roland Siegwart}, title = {Tracking a Depth Camera: Parameter Exploration for Fast ICP}, booktitle = {Proc. of the IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS)}, publisher = {IEEE Press}, pages = {3824--3829}, year = {2011} }
Quick Start
Since the proposed ICP chain is highly modular, it has many parameters. You can play with it directly if you have an openni-compatible sensor:
roslaunch ethzasl_icp_mapper openni/tracker_viewer.launch
You can then have a look into the launch/openni/tracker_viewer.launch file to see how the openni tracker is configured. This file roughly corresponds to the following chain:
Starting from this chain, you can develop your own chain.
Node: cloud_matcher_node
This node performs continuous registration of point clouds and publishes the resulting pose on as a tf. The type of topic messages must be sensor_msgs/PointCloud2. This effectively implements a real-time tracker in 3D pose.
In addition to tf, this node sends StampedTransform representing the transformation matrix between the most recent one and the previous if there is a subscriber to the corresponding topic.
Published Topics
/tf
A transformation frame between /world and /openni_rgb_optical_frame. You can change the name of these frames using the ~fixedFrame and ~sensorFrame parameters.
/tracker_path
The tracked path between the same frames as in /tf. You can change the name of this topic using the ~path parameter.
/openni_delta_pose
The delta poses. You can change the name of this topic using the ~deltaPoseTopic parameter.
Subscribed Topics
/camera/rgb/points (sensor_msgs/PointCloud2)
You can change the name of this topic using the ~cloudTopic parameter.
Parameters
~config (string, no default)
Name of the YAML file configuring the modular ICP chain, see Configuration section.
~useROSLogger (bool, default: false)
- If true, use ROS console for logging, otherwise use logger defined in config file.
~cloudTopic (string, default: "/camera/rgb/points")
The node listens to the topic whose name is defined by this parameter and expects a sensor_msgs/PointCloud2.
~deltaPoseTopic (string, default: "/openni_delta_pose")
- Topic on which to send delta pose.
~fixedFrame (string, default: "/world")
Frame name used as fixed frame in the tf published by the node.
~sensorFrame (string, default: "/openni_rgb_optical_frame")
Frame name used as moving frame in the tf published by the node.
~startupDropCount (unsigned, default: 0)
- Number of clouds to drop on startup, useful if sensor is producing garbage in a startup phase.
Node: cloud_matcher_service
This node provides a service to match two point clouds.
Services offered
matchClouds (MatchClouds.srv - custom messages in the package)
This service is available if the node is not running with the -topic argument. In that case, this service takes two sensor_msgs/PointCloud2 messages as inputs (the first is the reference and the second the reading) and provides a geometry_msgs/Transform message as output.
Parameters
The parameters to configure the chain are the same as the one for cloud_matcher_node. In addition, a parameter allows to configure the name of the service:
serviceName (string, default: matchClouds)
- name of the service.
~config (string, no default)
Name of the YAML file configuring the modular ICP chain, see Configuration section.
~useROSLogger (bool, default: false)
- If true, use ROS console for logging, otherwise use logger defined in config file.
Limitations
This library solely performs point-cloud registration, it does not incorporate data fusion based on IMU or odometry. This can be done through other nodes such as robot_pose_ekf.
Report a Bug
Please report bugs and request features using the github page.