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
# Robust BIM-based 2D-LiDAR Localization for Lifelong Indoor Navigation in Changing and Dynamic Environments
1
+
# TODO
2
+
-[ ] Add video tutorial.
2
3
3
-
Code will be available after publication ~Oct 2022.
4
+
# OGM2PGBM: Occupancy Grid Map to Pose Graph-based Map
4
5
5
6
Table of Contents
6
7
=================
@@ -14,44 +15,55 @@ Table of Contents
14
15
*[Note](#note-1)
15
16
*[GMCL_CARTO](#gmcl_carto)
16
17
17
-
18
18
# Intro
19
-
This repo contains the packages `amcl`, `gmcl`, `cartographer` and `slamtoolbox`, so that they can be used and compared with a bagfile located in the mounted directory `~/workspace` easily.
20
19
21
-
Apart from the open source packages, it includes the following self-developed applications and scripts:
20
+
This repo contains the following application:
21
+
22
+
-`OGM2PGBM`: generate pose graph-based maps on 2D occupancy grid maps (which can be created from an TLS Point cloud or a BIM/CAD model.
23
+
This pose graph-based maps can be used for accurate localization in changing and dynamic environments as demostrated in our [paper.]{https://publications.cms.bgu.tum.de/2022_ECPPM_Vega.pdf}
24
+
25
+
The following figure shows an overview of the proposed open source method.
26
+

22
27
23
-
-`OGM2PGBM`: generate sensor data based on a 2D BIM map and publish them to respective topics directly (pgm->bag->pbstream)
24
28
-`GMCL_CARTO`: conbine the fast global localization feature of GMCL with the more accurate pose tracking performance of Cartographer
25
29
30
+
Additionally, it includes the packages `amcl`, `gmcl`, `cartographer` and `slam_toolbox`, so that they can be used and compared with a bagfile that should be located in the mounted directory `~/workspace` easily.
31
+
26
32
27
33
# OGM2PGBM
28
34
29
35
## Principle
30
36
31
37
The workflow of OGM2PGBM is as follows, see the function `new_map_callback(self, grid_map)` for details:
32
38
33
-
1.**subsribe** map from the map topic
34
-
2.**skeletonize** the map and get its voronoi waypoint (see `self.skeletonize()`)
35
-
3.perform a **coverage path planning** on it (see `self.CPP()`)
36
-
-extract the farest endpoint pair first as the start and goal point
37
-
-then**dilate** it with a 2x2 kernel to bold the centerline
38
-
-do CPP wavefront algorithm and get the sorted waypoint
39
-
4.do a raytracer algorithm on the waypoint one by one, and publish the `/laserscan` topic (see `self.raytracer()`)
39
+
1.**Subscribe** map from the map topic
40
+
2.**Skeletonize** the map and get its voronoi waypoint (see `self.skeletonize()`)
41
+
3.Perform a **coverage path planning** on it (see `self.CPP()`)
42
+
-Extract the farest endpoint pair first as the start and goal point
43
+
-Then**dilate** it with a 2x2 kernel to bold the centerline
44
+
-Do CPP wavefront algorithm and get the sorted waypoint
45
+
4.Do a raytracing on the waypoints one by one, and publish the `/laserscan` topic (see `self.raytracer()`)
40
46
41
47
It produces `/tf`, `/clock`, `/odom`, `/scan` topics with frame `robot_map`, `robot_odom` and `robot_base_link`.
42
48
43
-
As we need to publish `/tf`, we use`python2.7` in this script.
49
+
Since `/tf` is needed,`python2.7` is used in this script.
44
50
45
51
## Usage
46
52
### Args
47
-
This package is now a standard ros package and can be launched with roslaunch command.
53
+
This package is a standard ros package and can be launched with roslaunch command.
48
54
49
55
args:
50
56
-`map_file`: default value is `/root/workspace/map/OGM_empty.pgm.yaml`
51
57
-`record`: default value is `false`, the recorded bag can be found at `/root/.ros/ogm2pgbm_sensordata.bag`
52
58
53
59
### Step by step
54
-
With the launch file, we only need three steps to generate our base pbstream
60
+
0. First clone the repository.
61
+
62
+
```shell
63
+
git clone https://github.com/MigVega/Ogm2Pgbm.git
64
+
cd Ogm2Pgbm
65
+
```
66
+
With the launch file, we only need three steps to generate the base pbstream/posegraph based-map.
The target bag file will be stored under `/root/.ros/ogm2pgbm_sensordata.bag`. By default, the demo bag will also be copied into this place. So you can also skip the second step if you want.
64
76
65
-
3. After generating bagfiles, use cartographer to generate pbstream (offline mode, which will generate pbstream quite fast)
77
+
3. After generating bagfiles, use Cartographer to generate pbstream or SLAM toolbox to generate posegraph maps.
78
+
With the following command **Cartographer** will run in offline mode, which will generate pbstream quite fast, but without any visual output in rviz.
@@ -84,12 +98,30 @@ For slam_toolbox, you also need to click on the serialization button on the rviz
84
98
```
85
99
2. All the node will be closed when the rviz is closed, including the rosbag node
86
100
3. The parameters of cartographer when using OGM2PGBM scripts to generate pbstream are as follows (see `cartographer_ros/configuration_files/ogm2pgbm_my_robot.lua`)
87
-
-`use_pose_extrapolator` and `use_odometry` enabled(The reason is that, we do not have accurate timestamp and speed/imu data, so we'd better provide an accurate odom to do pose extrapolation.)
88
101
- remap `/scan` or `/odom` in launch file if needed
89
102
103
+
104
+
# Citation
105
+
```
106
+
@inproceedings{ vega:2022:2DLidarLocalization,
107
+
author = {Vega, M. and Braun, A. and Borrmann, A.},
108
+
title = {Occupancy Grid Map to Pose Graph-based Map: Robust BIM-based 2D- LiDAR Localization for Lifelong Indoor Navigation in Changing and Dynamic Environments},
109
+
booktitle = {Proc. of European Conference on Product and Process Modeling 2022},
This project try to combines the pros of the two algorithms.
116
+
This project combines the pros of the two algorithms, using the fast global localization feature of GMCL and the accurate pose tracking performance of Cartographer.
92
117
93
118
- First, change the bagname in the line 11 of the file `~/catkin_ws/src/gmcl_carto/gmcl_carto.py`,
94
119
- Then, make sure the bagfile is located in the directory `/root/workspace`
95
120
- At last, run the script directly `python ~/catkin_ws/src/gmcl_carto/gmcl_carto.py`
0 commit comments