On-SE(2) Localization and Mapping for Ground Vehicles by Fusing Odometry and Vision
-
Fan Zheng, Yun-Hui Liu. "Visual-Odometric Localization and Mapping for Ground Vehicles Using SE(2)-XYZ Constraints". Proc. IEEE International Conference on Robotics and Automation (ICRA), 2019 [pdf] [poster]
To cite it in bib:
@inproceedings{fzheng2019icra, author = {Fan Zheng and Yun-Hui Liu}, title = "{Visual-Odometric Localization and Mapping for Ground Vehicles Using SE(2)-XYZ Constraints}", booktitle = {Proc. IEEE Int. Conf. Robot. Autom (ICRA)}, year = {2019}, }
-
ROS (tested on Kinetic/Melodic)
-
OpenCV 2.4.x / 3.1 above
-
g2o (2016 version)
# Eigen (should install version 3.3.4-4)
sudo apt install libeigen3-dev
# g2o (2016)
git clone [email protected]:RainerKuemmerle/g2o.git
git checkout 20160424_git
cd g2o
mkdir build
cd build
cmake ../
sudo make install # system-wide installation
When building g2o
, the two warnings I got were "note: declared here
EIGEN_DEPRECATED const unsigned int AlignedBit = 0x8" and something about "note: forward declaratiof of class ‘class g2o::World’”. se2lam
still ran fine but any more warnings might be concerning.
Build this project as a ROS package
-
Download DatasetRoom.zip, and extract it. In a terminal,
cd
intoDatasetRoom/
.We prepare two packages of odometry measurement data, one is more accurate (
odo_raw_accu.txt
), the other less accurate (odo_raw_roug.txt
). To use either one of them, copy it toodo_raw.txt
inDatasetRoom/
. -
Download ORBvoc.bin.
-
Run rviz:
roscd se2lam rosrun rviz rviz -d rviz.rviz
-
Run se2lam:
rosrun se2lam test_vn PATH_TO_DatasetRoom PATH_TO_ORBvoc.bin
If running test_vn
, the output is se2lam_kf_trajectory.txt
, which is the final trajectory of keyframes. Each line contains key_frame_id
x
y
z
yaw
(space deliminated) with units none
, mm
, mm
, mm
, rad
. I'm pretty sure the keyframe ID is the same as the image number that created that keyframe, so if you know the timestamp of all of your images, you should know the timestamp of each line of the file.
The Dataset folder has to contain:
odo_raw.txt
: Odometry data with linesx
y
yaw
(space deliminated) with unitsmm
,mm
,rad
. Although not included in the file, the timestamp in which the odom data of each line of the txt file was obtained should be the same as the corresponding image in theimage
directory, i.e. line 0 ofodo_raw.txt
should be the odom data from the same timestamp in which0.bmp
was captured.image
directory:.bmp
gray images named by sequential 0-indexed integers, i.e.0.bmp
,1.bmp
,2.bmp
...config
directory:CamConfig.yml
: calibration information of camera that captured the images in theimage
directory.camera matrix
:K
matrix (camera intrinsics)distortion_coefficients
:D
matrix (camera intrinsics)rvec_b_c
: rotation of camera with respect to vehicle expressed in Rodrigues angles (camera extrinsics)tvec_b_c
: translation of camera with respect to vehicle in mm (camera extrinsics)
Settings.yml
: Unclear what most of this is used for, but important params:fps
: tracking frequency (I'm assuming this is frequency in which the odom and image data was captured.)img_num
: how many images/odom lines you have.write_map_file_path
andread_map_file_path
: make sure these are paths that exist on your machine.