MCPcopy Create free account
hub / github.com/carlosmccosta/dynamic_robot_localization

github.com/carlosmccosta/dynamic_robot_localization @v1.2.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release v1.2.0 ↗ · + Follow
670 symbols 1,196 edges 219 files 118 documented · 18% updated 1y agov1.2.0 · 2019-10-02★ 89723 open issues

Browse by type

Functions 578 Types & classes 92
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

DOI

Dynamic Robot Localization

Overview

The dynamic_robot_localization is a ROS package that offers 3 DoF and 6 DoF localization using PCL and allows dynamic map update using OctoMap. It's a modular localization pipeline, that can be configured using yaml files (detailed configuration layout available in drl_configs.yaml and examples of configurations available in guardian_config and dynamic_robot_localization_tests).

Even though this package was developed for robot self-localization and mapping, it was implemented as a generic, configurable and extensible point cloud matching library, allowing its usage in related problems such as estimation of the 6 DoF pose of an object and 3D object scanning.

Example of launch files and videos for each use case:

Overview of the modules available in each processing stage

Figure 1: Overview of the modules available in each processing stage

Overview of the data flows from the main processing stages

Figure 2: Overview of the data flows from the main processing stages

3 DoF localization system tests with the Guardian platform in the CROB lab

Video 1: 3 DoF localization and navigation tests with the Guardian platform in the CROB lab

3 DoF localization and navigation tests with the Guardian platform in ship interior

Video 2: 3 DoF localization and navigation tests with the Guardian platform in ship interior

3 DoF localization, navigation and welding tests with the Guardian platform in ship interior

Video 3: 3 DoF localization, navigation and welding tests with the Guardian platform in ship interior

3 DoF localization system tests with the Jarvis platform in the CROB lab

Video 4: 3 DoF localization system tests with the Jarvis platform in the CROB lab

3 DoF localization system tests with the Pioneer platform in TUM RGB-D dataset

Video 5: 3 DoF localization system tests with the Pioneer platform in the TUM RGB-D dataset

Free fly test with Kinect in the ETHZ RGB-D dataset using the 6 DoF localization system

Video 6: Free fly test with Kinect in the ETHZ RGB-D dataset using the 6 DoF localization system

Rotations test with Kinect in the ETHZ RGB-D dataset using the 6 DoF localization system

Video 7: Rotations test with Kinect in the ETHZ RGB-D dataset using the 6 DoF localization system

3 DoF localization system tests with the Guardian platform in Labiomep dataset

Video 8: 3 DoF localization system tests with the Guardian platform in Labiomep dataset

Mapping with the Guardian robot in the lab using the 3 DoF localization system

Video 9: Mapping with the Guardian robot in the lab using the 3 DoF localization system

Mapping with the Guardian robot in simulated ship interior using the 3 DoF localization system

Video 10: Mapping with the Guardian robot in simulated ship interior using the 3 DoF localization system

Mapping with the Guardian robot in a ship interior using the 3 DoF localization system

Video 11: Mapping with the Guardian robot in a ship interior using the 6 DoF localization system

Free fly mapping test with Kinect in the ETHZ RGB-D dataset using the 6 DoF localization system

Video 12: Free fly mapping test with Kinect in the ETHZ RGB-D dataset using the 6 DoF localization system

Object pose estimation for assisted assembly operations

Video 13: Object pose estimation for assisted assembly operations

Object pose estimation for pick and pack operations

Video 14: Object pose estimation for pick and pack operations

Bin picking using region growing and principal component analysis

Video 15: 6 DoF pose estimation of the vacuum grasp pose for smooth objects inside bins using region growing and principal component analysis

Data sources

The localization system can operate with any type of sensors that provide point clouds. As such, it can use any number of laser sensors (by using the laserscan_to_pointcloud package) or RGB-D / ToF cameras.

Reference map

The reference map can be provided to the localization system from CAD ( .ply | .stl | .obj | .vtk ), pointcloud file (.pcd) / topic (sensor_msgs::PointCloud2) or using a 2D costmap (nav_msgs::OccupancyGrid). To avoid unnecessary overhead it should be provided has pointcloud (.pcd).

To convert CAD files to .pcd there are two options:

  1. Using conversion scripts that filter the CAD using meshlabserver, add point curvature information and convert the CAD to .pcd (recommended)
  2. Supported file types: .3ds .aln .apts .asc .dae .gts .obj .off .ply .pts .ptx .stl .tri .v3d .vrml .x3d .x3dv .xyz
  3. Using the mesh_to_pointcloud package that converts CAD to .pcd directly (without curvature and filtering)
  4. Supported file types: .3dc .3ds .asc .ac .bsp .dae .dw .dxf .fbx .flt .gem .geo .iv .ive .logo .lwo .lw .lws .md2 .obj .ogr .osg .pfb .ply .shp .stl .x .wrl

Localization methods

The localization system has two different localization methods to tackle different scenarios.

For initial pose estimation and pose recovery it can use feature matching with several keypoint detectors (such as Scale Invariant Feature Transform (SIFT) and Intrinsic Shape Signatures (ISS3D)) and several keypoint descriptors (such as Point Feature Histogram (PFH), Fast Point Feature Histogram (FPFH), Signature of Histograms of Orientations (SHOT), Shape Context 3D (SC3D), Unique Shape Context (USC) and Ensemble of Shape Functions (ESF)).

For pose tracking it can use several variants of the Iterative Closest Point algorithm and also the Normal Distributions Transform (NDT). Moreover, pose tracking can have two configurations. One tuned for the expected operation conditions of the robot and another able to recover from odometry estimation problems (the system can operate without odometry).

This gives the possibility to have a configuration that can perform pose tracking with the minimum amount of computational resources required (such as point-to-point ICP) and a more robust (and computational expensive) configuration to handle temporary tracking problems (such as point-to-point non linear ICP, point-to-plane ICP, generalized ICP). Examples of the localization pipeline are available at dynamic_robot_localization/yaml/configs

Localization reliability

The localization pipeline allows the attachment of transformation validators before publishing pose estimations.

They can be used to suppress estimations that are not plausible for a given robot operation conditions.

These validators can suppress localization estimations in which the pose correction has a [ outlier percentage | inliers root mean square error | inliers / outliers angular distribution | translation / rotation corrections ] outside acceptable thresholds.

If the tracking methods can't recover after a given amount of sensor updates / time, the initial pose estimation (using features) can be activated.

Dynamic map update

Dynamic map update can be performed with / without surface reconstruction and can also be coupled with the OctoMap package in order to perform probabilistic point cloud integration (useful for dynamic environments in which large objects may appear / disappear),

This can be by setting the reference_pointclouds/reference_pointcloud_update_mode parameter to one of the available integration modes (NoIntegration | FullIntegration | InliersIntegration | OutliersIntegration) and configuring OctoMap to use the registered cloud or the inlier / outlier cloud as input (and the output of OctoMap as the reference cloud for the localization system).

Usage

The localization system can be started with dynamic_robot_localization_system.launch

This launch file starts the nodes:

  • dynamic_robot_localization
  • pose_to_tf_publisher (can be disabled)
  • laserscan_to_pointcloud_assembler (can be disabled)
  • octomap (can be disabled)

The localization is integrated with other ROS nodes by publishing TF transforms between map and odom frames (configurable frame names) using the pose_to_tf_publisher node.

The initial pose can be given in yaml / roslaunch files or dynamically using geometry_msgs::PoseStamped / geometry_msgs::PoseWithCovarianceStamped topics / rviz.

The dynamic_robot_localization node publishes geometry_msgs::PoseStamped / geometry_msgs::PoseWithCovarianceStamped that are received by pose_to_tf_publisher and converted to TF messages.

The TF is published in a separate ROS node to ensure that the system remains operational and with constant TF publish rate even if the localization node has variable computational time.

Moreover, in the remote case that the localization system crashes (by lack of system resources, programming error in the localization node or in one of its external libraries), the system can remain operational using only odometry for a given amount of time (i.e. TF messages can be published continuously, with a timeout counted after the last valid pose estimation or one message for each pose estimation) and the localization node can be automatically restarted (has node respawn activated) without any impact in the rest of the system.

The dynamic_robot_localization node publishes in latched topics (if required, as the publish of these messages can be disabled to reduce consumption of system resources):

  1. dynamic_robot_localization::LocalizationDetailed
  2. Message that has detailed information about the

Core symbols most depended-on inside this repo

Shape

Method 548
Class 85
Function 30
Enum 7

Languages

C++100%

Modules by API surface

include/dynamic_robot_localization/localization/impl/localization.hpp79 symbols
include/dynamic_robot_localization/cloud_matchers/feature_matchers/ia_ransac.h24 symbols
include/dynamic_robot_localization/cloud_matchers/cloud_matcher.h24 symbols
include/dynamic_robot_localization/cloud_matchers/feature_matchers/sample_consensus_prerejective.h17 symbols
include/dynamic_robot_localization/cluster_selectors/cluster_sorters.h14 symbols
include/dynamic_robot_localization/cloud_matchers/point_matchers/iterative_closest_point.h13 symbols
include/dynamic_robot_localization/cloud_matchers/impl/cloud_matcher.hpp13 symbols
include/dynamic_robot_localization/common/impl/registration_visualizer.hpp12 symbols
include/dynamic_robot_localization/common/circular_buffer_pointcloud.h12 symbols
src/common/performance_timer.cpp11 symbols
include/dynamic_robot_localization/localization/localization.h11 symbols
include/dynamic_robot_localization/normal_estimators/normal_estimator.h10 symbols

For agents

$ claude mcp add dynamic_robot_localization \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page