You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This repository contains algorithms designed for map-based robot localization, specifically when dealing with maps composed of triangle meshes or complete scene graphs. These maps may be provided by architects who have designed the building in which the robot operates, or they can be autonomously generated by the robot through Simultaneous Localization and Mapping (SLAM) methods. It's crucial to note that map-based localization differs from SLAM; it focuses on estimating the robot's pose within a potentially large map, whether the initial pose is roughly known (tracking) or entirely unknown from the start aka kidnapped robot problem. Map-based localization is essential for precisely planning the robot's missions on a given map.
28
28
29
-
## MICP-L
29
+
## MICP-L - Pose Tracking in Meshes
30
30
31
31
MICP-L: Mesh-based ICP for Robot Localization Using Hardware-Accelerated Ray Casting.
32
32
An approach to directly register range sensor data to a mesh in order to localize a mobile robot using hardware-accelerated ray casting correspondences (See publications).
@@ -59,252 +59,104 @@ Please reference the following paper when using the MICP-L method in your scient
59
59
}
60
60
```
61
61
62
-
The paper is available on [IEEE Xplore](https://ieeexplore.ieee.org/document/10802360) and as preprint on [arXiv](https://arxiv.org/abs/2210.13904). The experiments are available at https://github.com/amock/micp_experiments (mostly for ROS 1).
62
+
The paper is available on [IEEE Xplore](https://ieeexplore.ieee.org/document/10802360) and as preprint on [arXiv](https://arxiv.org/abs/2210.13904). The experiments are available at [https://github.com/amock/micp_experiments](https://github.com/amock/micp_experiments), but they are primarily compatible with the ROS 1 version.
63
+
See the older branches or commits for reference.
63
64
64
-
### Usage
65
65
66
-
The `micp_localization` Node starts the process of localizing the robot in a mesh using MICP and a given pose estimate.
67
-
It is usually started through a launch file since it requires a large set of parameters.
The `micp_localization_node` starts the process of localizing the robot within a triangle mesh using MICP, based on a given pose estimate. It is typically launched via a **launch file**:
runs the MICP localization node. After that a pose has to be given, e.g. by the RViz "2D Pose Estimate" Tool that publishes the results on the `/initialpose` topic.
86
-
Doing that, make sure to set the fixed frame to the map coordinate system.
87
-
RMCL itself doesn't provide any tools to visualize the maps (triangle meshes).
88
-
If you want to see the map in RViz, use for example the `rviz_mesh_tools_plugins` of the [mesh_tools](https://github.com/naturerobots/mesh_tools).
89
-
90
84
<details>
91
85
<summary>Once the launch file is started, the output in Terminal should look as follows:</summary>
sensors: # list of range sensors - at least one is required
184
-
velodyne:
185
-
topic: velodyne_points
186
-
# spherical is comparable to sensor_msgs::msg::LaserScan
187
-
# but in 3D
188
-
type: spherical
189
-
model:
190
-
range_min: 0.5
191
-
range_max: 130.0
192
-
phi_min: -0.261799067259
193
-
phi_inc: 0.03490658503988659
194
-
phi_n: 16
195
-
theta_min: -3.14159011841
196
-
theta_inc: 0.01431249500496489
197
-
theta_n: 440
198
-
micp:
199
-
max_dist: 1.0
200
-
# Once adaptive_max_dist is set to true:
201
-
#
202
-
# If the localization is perfect, the max
203
-
# distance for finding SPCs is reduced to
204
-
# `adaptive_max_dist_min`.
205
-
# If the localization is bad, the max
206
-
# distance for finding SPCs is raised to
207
-
# `max_dist`
208
-
adaptive_max_dist_min: 0.15
209
-
backend: embree
210
-
```
211
-
212
-
</details>
213
133
214
-
### Parameters - 2D LiDAR + Wheels - GPU
134
+
After the node has been started, an initial pose estimate must be provided, eg, using the "2D Pose Estimate" tool in RViz, which publishes to the `/initialpose` topic.
135
+
Make sure the fixed frame in RViz is set to match the map coordinate system.
215
136
216
-
MICP also supports to localize a robot only equipped with a 2D LiDAR in a 3D map.
217
-
To correct the third dimension the wheels can be used to pull the robot towards the map's ground plane.
218
-
Thus, you should only run it on a robot that always drives on the ground and e.g. cannot fly.
219
-
In this example, all MICP steps are computed on GPU.
220
-
The robot has four wheels of which the highest points are located relative to `base_footprint` as listed in `origs`.
221
-
By setting a virtual scanner to the wheel positions scanning downwards with a constant scanning range equal to the wheel diameter it is possible to pull the robot to the mesh.
137
+
> Note: RMCL does not provide tools to visualize triangle mesh maps in RViz.
138
+
> To view mesh maps, consider using the rviz_mesh_tools_plugins from the
sensors: # list of range sensors - at least one is required
252
-
sick:
253
-
topic: scan
254
-
micp:
255
-
weight: 1.0
256
-
backend: optix
257
-
wheels: # pull robot to the mesh
258
-
ranges: [0.2, 0.2, 0.2, 0.2]
259
-
type: ondn
260
-
frame: base_footprint
261
-
model:
262
-
width: 4
263
-
height: 1
264
-
range_min: 0.0
265
-
range_max: 10.0
266
-
origs: [[ 0.2, 0.15, 0.2], # front left
267
-
[ 0.2, -0.15, 0.2], # front right
268
-
[-0.2, 0.15, 0.2], # rear left
269
-
[-0.2, -0.15, 0.2]] # rear right
270
-
dirs: [[ 0.0, 0.0, -1.0],
271
-
[ 0.0, 0.0, -1.0],
272
-
[ 0.0, 0.0, -1.0],
273
-
[ 0.0, 0.0, -1.0]]
274
-
micp:
275
-
max_dist: 1.0
276
-
adaptive_max_dist_min: 0.2
277
-
weight: 1.0
278
-
backend: optix
279
-
```
280
-
</details>
141
+
--> For an actual quick start, go to: [https://github.com/amock/rmcl_examples](https://github.com/amock/rmcl_examples)
281
142
282
143
283
144
# RMCL - Project
284
145
285
146
## Installation
286
147
287
148
Dependencies:
288
-
- Download and install [Rmagine](https://github.com/uos/rmagine) (v > 2.2.9): Compile from source (not debian packages).
289
-
- Recommended: Install OptiX backend if NVIDIA GPU is available
290
-
- For rmagine version >= 2.2.9 it is possible to put rmagine into your ROS workspace for easier compilation
291
-
- ROS2 (check compatible branches)
149
+
-ROS 2 (check compatible branches)
150
+
- Download and put [Rmagine](https://github.com/uos/rmagine) (v >= 2.3.0) into your ROS workspace.
151
+
-Recommended: Install OptiX backend if NVIDIA GPU is available.
152
+
-Optional for functionality, but required for visualizations: [mesh_tools](https://github.com/naturerobots/mesh_tools).
292
153
293
154
Clone this repository into your ROS workspace and build it.
294
155
295
-
```bash
296
-
$ colcon build
156
+
```console
157
+
colcon build
297
158
```
298
159
299
-
Optional, but recommended: RMCL itself doesn't provide any tools to visualize the triangle mesh maps.
300
-
If you want to see the map in RViz, use for example the `rviz_mesh_tools_plugins` of the [mesh_tools](https://github.com/naturerobots/mesh_tools).
301
-
302
-
## Examples
303
-
304
-
To learn how to use RMCL ROS nodes in your project, visit https://github.com/amock/rmcl_examples.
305
-
306
-
To learn how to use RMCL library in your Node: `src/nodes/examples`.
307
-
308
160
## Mesh Navigation
309
161
310
162
To navigate a robot automatically and safely through uneven terrain, the combination RMCL + Mesh Navigation Stack is very suitable: [https://github.com/naturerobots/mesh_navigation](https://github.com/naturerobots/mesh_navigation). As we presented on [ROSCon 2023](https://vimeo.com/879000775):
@@ -321,6 +173,17 @@ The planned Roadmap is as follows:
321
173
322
174
## News
323
175
176
+
### 2025-05-17: ROS 2-ify MICP-L - v2.2.0
177
+
178
+
After conducting real-world tests, we refactored the **MICP-L** node to better integrate it into the **ROS 2** ecosystem and added several new features:
179
+
- Limited the possible inputs to *only*`rmcl_msgs`. Instead, we provide nodes and instructions to convert commonly used range sensor messages into `rmcl_msgs`.
180
+
- MICP-L can now be launched as a composable node.
181
+
- Separated correspondence search from optimization without losing much efficiency. This allowed us to add classic closest-point correspondences (CP), in addition to ray-casting correspondences (RC) (only available for embree backend).
182
+
- Improved time synchronization between combinations of sensors and odometry.
183
+
- Added many new examples and small demos for a quick start: [https://github.com/amock/rmcl_examples](https://github.com/amock/rmcl_examples)
184
+
185
+
> For the old version, download v2.1.0
186
+
324
187
### 2024-11-25: Restructuring - ROS 1 + ROS 2
325
188
326
189
We had to do minor structural changes to the repository in order to better integrate new features into RMCL. This repository is now devided into
0 commit comments