norlabicpmapper_ros

June 20, 2025 · View on GitHub

A bridge between norlab_icp_mapper and ROS. Check the mapper's documentation for a detailed guide.

Node Parameters

NameDescriptionPossible valuesDefault Value
odom_frameFrame used for odometry.Any string"odom"
robot_frameFrame centered on the robot.Any string"base_link"
mapping_configPath to the file containing the mapping config.Any file path""
initial_map_file_namePath of the file from which the initial map is loaded.Any file path""
initial_robot_poseTransformation matrix in homogeneous coordinates describing the initial pose of the robot in the map frame.Any matrix of dimension 3 or 4"[[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]"
final_map_file_namePath of the file in which the final map is saved when is_online is false.Any file path"map.vtk"
final_trajectory_file_namePath of the file in which the final trajectory is saved when is_online is false.Any file path"trajectory.vtk"
map_publish_rateRate at which the map is published (in Hertz). It can be slower depending on the map update rate.(0, ∞)10.0
map_tf_publish_rateRate at which the map tf is published (in Hertz).(0, ∞)10.0
max_idle_timeDelay to wait being idle before shutting down ROS when is_online is false (in seconds).[0, ∞)10.0
is_mappingtrue when map updates are wanted, false when only localization is wanted.{true, false}true
localizingtrue when localization updates are wanted, false when localization is unwanted (relocalization in map).{true, false}true
is_onlinetrue when online mapping is wanted, false otherwise.{true, false}true
is_3Dtrue when a 3D sensor is used, false when a 2D sensor is used.{true, false}true
save_map_cells_on_hard_drivetrue when map cell storage on hard drive is wanted, false when map cell storage in RAM is wanted.{true, false}true
publish_tfs_between_registrationsWhen false, the map tf is published only after registration. Otherwise with map_tf_publish_rate.{true, false}true
deskewSet to true if you want to apply motion compensation on the input point cloud.{true, false}true
expected_unique_deskewing_TF_numberHow much memory should we reserve for the per-point transformations.A positive integer4000
deskewing_round_to_nanosecsHow much should each point's timestamp be rounded for deskewing transformation search.A positive integer50000

Dynamic Node Parameters

These parameters can be changed at runtime using the ROS parameter server.

NameDescriptionPossible valuesDefault Value
compression_voxel_sizeSize of a voxel in the octree tree of the output map point cloud message. 0=disabledA non-negative double0.5

Node Topics

NameDescription
points_inTopic from which the input points are retrieved.
mapTopic in which the map is published.
icp_odomTopic in which the corrected odometry is published.
scan_after_input_filtersThe input scan, after all input filters are applied.
scan_after_deskewThe input scan, after all input filters and deskewing are applied.
pose_inTopic from which the pose is retrieved to relocalize.

Node Services

NameDescriptionParameter NameParameter Description
save_mapSaves the current map.filenamePath of the file in which the map is saved.
save_trajectorySaves the current trajectory.filenamePath of the file in which the trajectory is saved.
reload_yaml_configReload the YAML config file.
enable_mappingEnables the mapping (If localization is disabled, it enables it too).
disable_mappingDisables the mapping.
enable_locEnables the localization.
disable_locDisables the localization (If mapping is enabled, it disables it too).

Mapper Node Graph

flowchart LR

/mapper_node[ /mapper_node ]:::main

/points_in([ /points_in<br>sensor_msgs/msg/PointCloud2 ]):::bugged
/pose_in([ /pose_in<br>geometry_msgs/msg/PoseWithCovarianceStamped ]):::bugged
/icp_odom([ /icp_odom<br>nav_msgs/msg/Odometry ]):::bugged
/map([ /map<br>sensor_msgs/msg/PointCloud2 ]):::bugged
/scan_after_input_filters([ /map<br>sensor_msgs/msg/PointCloud2 ]):::bugged
/scan_after_deskew([ /map<br>sensor_msgs/msg/PointCloud2 ]):::bugged
/disable_mapping[/ /disable_mapping<br>std_srvs/srv/Empty \]:::bugged
/enable_mapping[/ /enable_mapping<br>std_srvs/srv/Empty \]:::bugged
/disable_loc[/ /disable_loc<br>std_srvs/srv/Empty \]:::bugged
/enable_loc[/ /enable_loc<br>std_srvs/srv/Empty \]:::bugged
/load_map[/ /load_map<br>norlab_icp_mapper_ros/srv/LoadMap \]:::bugged
/reload_yaml_config[/ /reload_yaml_config<br>std_srvs/srv/Empty \]:::bugged
/save_map[/ /save_map<br>norlab_icp_mapper_ros/srv/SaveMap \]:::bugged
/save_trajectory[/ /save_trajectory<br>norlab_icp_mapper_ros/srv/SaveTrajectory \]:::bugged

/points_in --> /mapper_node
/pose_in --> /mapper_node
/mapper_node --> /icp_odom
/mapper_node --> /map
/disable_mapping o-.-o /mapper_node
/enable_mapping o-.-o /mapper_node
/disable_loc o-.-o /mapper_node
/enable_loc o-.-o /mapper_node
/load_map o-.-o /mapper_node
/reload_yaml_config o-.-o /mapper_node
/save_map o-.-o /mapper_node
/save_trajectory o-.-o /mapper_node



subgraph keys[<b>Keys<b/>]
subgraph nodes[<b><b/>]
topicb((No connected)):::bugged
main_node[main]:::main
end
subgraph connection[<b><b/>]
node1[node1]:::node
node2[node2]:::node
node1 o-.-o|to server| service[/Service<br>service/Type\]:::service
service <-.->|to client| node2
node1 -->|publish| topic([Topic<br>topic/Type]):::topic
topic -->|subscribe| node2
node1 o==o|to server| action{{/Action<br>action/Type/}}:::action
action <==>|to client| node2
end
end
classDef node opacity:0.9,fill:#2A0,stroke:#391,stroke-width:4px,color:#fff
classDef action opacity:0.9,fill:#66A,stroke:#225,stroke-width:2px,color:#fff
classDef service opacity:0.9,fill:#3B8062,stroke:#3B6062,stroke-width:2px,color:#fff
classDef topic opacity:0.9,fill:#852,stroke:#CCC,stroke-width:2px,color:#fff
classDef main opacity:0.9,fill:#059,stroke:#09F,stroke-width:4px,color:#fff
classDef bugged opacity:0.9,fill:#933,stroke:#800,stroke-width:2px,color:#fff
style keys opacity:0.15,fill:#FFF
style nodes opacity:0.15,fill:#FFF
style connection opacity:0.15,fill:#FFF