Skip to content

Commit 8ec2006

Browse files
authored
Merge pull request rpng#79 from rpng/feat_zupt
Development v2.2 - Zero Velocity Update
2 parents bef0901 + 50ca399 commit 8ec2006

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

53 files changed

+1341897
-20211
lines changed

Doxyfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -811,7 +811,7 @@ RECURSIVE = YES
811811
# Note that relative paths are relative to the directory from which doxygen is
812812
# run.
813813

814-
EXCLUDE =
814+
EXCLUDE = ov_core/src/utils/CLI11.hpp
815815

816816
# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
817817
# directories that are symbolic links (a Unix file system feature) are excluded

Doxyfile-mcss

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,10 @@ ALIASES += \
3232
"m_keyword{3}=@xmlonly<mcss:search xmlns:mcss=\"http://mcss.mosra.cz/doxygen/\" mcss:keyword=\"\1\" mcss:title=\"\2\" mcss:suffix-length=\"\3\" />@endxmlonly" \
3333
"m_enum_values_as_keywords=@xmlonly<mcss:search xmlns:mcss=\"http://mcss.mosra.cz/doxygen/\" mcss:enum-values-as-keywords=\"true\" />@endxmlonly"
3434

35-
3635
##! M_THEME_COLOR = #2f73a3
3736
##! M_FAVICON = docs/img/favicon-light.png
3837

39-
40-
##! M_LINKS_NAVBAR1 = pages namespaceov__core namespaceov__eval namespaceov__msckf annotated
38+
##! M_LINKS_NAVBAR1 = pages namespaceov__core namespaceov__type namespaceov__msckf namespaceov__eval annotated
4139
##! M_LINKS_NAVBAR2 = \
4240
##! "<a href=\"https://github.com/rpng/open_vins/">GitHub</a>"
4341

ReadMe.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ This is a modification of the code originally developed by the HKUST aerial robo
7474
Here we stress that this is a loosely coupled method, thus no information is returned to the estimator to improve the underlying OpenVINS odometry.
7575
This codebase has been modified in a few key areas including: exposing more loop closure parameters, subscribing to camera intrinsics, simplifying configuration such that only topics need to be supplied, and some tweaks to the loop closure detection to improve frequency.
7676

77-
* **[ov_maplab](https://github.com/rpng/ov_maplab)** -
77+
* **[ov_maplab](https://github.com/rpng/ov_maplab)** -
7878
This codebase contains the interface wrapper for exporting visual-inertial runs from [OpenVINS](https://github.com/rpng/open_vins) into the ViMap structure taken by [maplab](https://github.com/ethz-asl/maplab).
7979
The state estimates and raw images are appended to the ViMap as OpenVINS runs through a dataset.
8080
After completion of the dataset, features are re-extract and triangulate with maplab's feature system.

docs/bib/extra.bib

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,4 +170,49 @@ @article{Qin2018TRO
170170
year={2018},
171171
publisher={IEEE},
172172
url = {https://arxiv.org/pdf/1708.03852.pdf},
173-
}
173+
}
174+
175+
@article{Jeong2019IJRR,
176+
title={Complex urban dataset with multi-level sensors from highly diverse urban environments},
177+
author={Jeong, Jinyong and Cho, Younggun and Shin, Young-Sik and Roh, Hyunchul and Kim, Ayoung},
178+
journal={The International Journal of Robotics Research},
179+
volume={38},
180+
number={6},
181+
pages={642--657},
182+
year={2019},
183+
publisher={SAGE Publications Sage UK: London, England}
184+
}
185+
186+
187+
188+
189+
190+
@inproceedings{Wagstaff2017IPIN,
191+
title={Improving foot-mounted inertial navigation through real-time motion classification},
192+
author={Wagstaff, Brandon and Peretroukhin, Valentin and Kelly, Jonathan},
193+
booktitle={2017 International Conference on Indoor Positioning and Indoor Navigation (IPIN)},
194+
pages={1--8},
195+
year={2017},
196+
organization={IEEE},
197+
url = {https://arxiv.org/pdf/1707.01152.pdf},
198+
}
199+
200+
@article{Ramanandan2011TITS,
201+
title={Inertial navigation aiding by stationary updates},
202+
author={Ramanandan, Arvind and Chen, Anning and Farrell, Jay A},
203+
journal={IEEE Transactions on Intelligent Transportation Systems},
204+
volume={13},
205+
number={1},
206+
pages={235--248},
207+
year={2011},
208+
publisher={IEEE},
209+
}
210+
211+
@inproceedings{Davidson2009ENC,
212+
title={Improved vehicle positioning in urban environment through integration of GPS and low-cost inertial sensors},
213+
author={Davidson, Pavel and Hautam{\"a}ki, Jani and Collin, Jussi and Takala, Jarmo},
214+
booktitle={Proceedings of the European Navigation Conference (ENC), Naples, Italy},
215+
pages={3--6},
216+
year={2009},
217+
url = {http://www.tkt.cs.tut.fi/research/nappo_files/1_C2.pdf},
218+
}

docs/css/custom.css

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@ main h1 + p, h2 + p, h3 + p {
1616
}
1717

1818
/* math equations by default have some extra space at the top */
19-
div .m-math {
20-
margin-top: -1.5rem;
21-
}
19+
/*div .m-math {*/
20+
/* margin-top: -1.5rem;*/
21+
/*}*/
2222

2323
/* handle youtube images on the readme page */
2424
a .m-image {

docs/css/m-udel+documentation.compiled.css

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
/*
44
This file is part of m.css.
55
6-
Copyright © 2017, 2018, 2019 Vladimír Vondruš <[email protected]>
6+
Copyright © 2017, 2018, 2019, 2020 Vladimír Vondruš <[email protected]>
77
88
Permission is hereby granted, free of charge, to any person obtaining a
99
copy of this software and associated documentation files (the "Software"),
@@ -422,6 +422,9 @@ mark {
422422
background-color: #f0c63e;
423423
color: #4c93d3;
424424
}
425+
.m-link-wrap {
426+
word-break: break-all;
427+
}
425428
pre, code {
426429
font-family: 'Source Code Pro', monospace, monospace, monospace;
427430
font-size: 0.8em;
@@ -2556,6 +2559,23 @@ article:last-child, article section:last-child { margin-bottom: 0; }
25562559
.m-code .il { color: #0000cf; font-weight: bold }
25572560

25582561
.m-console .hll { background-color: #ffffcc }
2562+
.m-console .g-AnsiBackgroundBlack { background-color: #232627 }
2563+
.m-console .g-AnsiBackgroundBlue { background-color: #1d99f3 }
2564+
.m-console .g-AnsiBackgroundBrightBlack { background-color: #7f8c8d }
2565+
.m-console .g-AnsiBackgroundBrightBlue { background-color: #3daee9 }
2566+
.m-console .g-AnsiBackgroundBrightCyan { background-color: #16a085 }
2567+
.m-console .g-AnsiBackgroundBrightGreen { background-color: #1cdc9a }
2568+
.m-console .g-AnsiBackgroundBrightMagenta { background-color: #8e44ad }
2569+
.m-console .g-AnsiBackgroundBrightRed { background-color: #c0392b }
2570+
.m-console .g-AnsiBackgroundBrightWhite { background-color: #ffffff }
2571+
.m-console .g-AnsiBackgroundBrightYellow { background-color: #fdbc4b }
2572+
.m-console .g-AnsiBackgroundCyan { background-color: #1abc9c }
2573+
.m-console .g-AnsiBackgroundDefault { background-color: #fcfcfc }
2574+
.m-console .g-AnsiBackgroundGreen { background-color: #11d116 }
2575+
.m-console .g-AnsiBackgroundMagenta { background-color: #9b59b6 }
2576+
.m-console .g-AnsiBackgroundRed { background-color: #ed1515 }
2577+
.m-console .g-AnsiBackgroundWhite { background-color: #fcfcfc }
2578+
.m-console .g-AnsiBackgroundYellow { background-color: #f67400 }
25592579
.m-console .g-AnsiBlack { color: #232627 }
25602580
.m-console .g-AnsiBlue { color: #1d99f3 }
25612581
.m-console .g-AnsiBrightBlack { color: #7f8c8d; font-weight: bold }

docs/gs-datasets.dox

Lines changed: 69 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -75,18 +75,35 @@ Note that we focus on the room datasets as full 6 dof pose collection is availab
7575
@section gs-data-rpng RPNG OpenVINS Dataset
7676

7777
In additional the community maintained datasets, we have also released a few datasets.
78-
Please cite the OpenVINS paper if you use any of these datasets in your works
78+
Please cite the OpenVINS paper if you use any of these datasets in your works.
79+
Here are the specifics of the sensors that each dataset uses:
80+
81+
- ArUco Datasets:
82+
- Core visual-inertial sensor is the [VI-Sensor](https://furgalep.github.io/bib/nikolic_icra14.pdf)
83+
- Stereo global shutter images at 20 Hz
84+
- ADIS16448 IMU at 200 Hz
85+
- Kalibr calibration file can be found [here](https://drive.google.com/file/d/1I0C-z3ZrTKne4bdbgBI6CtH1Rk4EQim0/view?usp=sharing)
86+
- Ironsides Datasets:
87+
- Core visual-inertial sensor is the [ironsides](https://arxiv.org/pdf/1710.00893v1.pdf)
88+
- Has two [Reach RTK](https://docs.emlid.com/reach/) one subscribed to a base station for corrections
89+
- Stereo global shutter fisheye images at 20 Hz
90+
- InvenSense IMU at 200 Hz
91+
- GPS fixes at 5 Hz (/reach01/tcpfix has corrections from [NYSNet](https://cors.dot.ny.gov/sbc))
92+
- Kalibr calibration file can be found [here](https://drive.google.com/file/d/1bhn0GrIYNEeAabQAbWoP8l_514cJ0KrZ/view?usp=sharing)
93+
7994
Most of these datasets do not have perfect calibration parameters, and some are not time synchronised.
8095
Thus, please ensure that you have enabled online calibration of these parameters.
81-
96+
Additionally, there is no groundtruth for these datasets, but some do include GPS messages if you wish to compare relative to something.
8297

8398
@m_div{m-text-center}
8499
| Dataset Name | Length (m) | Dataset Link | Groundtruth Traj. | Example Launch |
85100
|-------------:|--------|--------------|------------------|------------------|
86-
| ArUco Room 01 | 27 | [rosbag](https://drive.google.com/file/d/1ytjo8V6pCroaVd8-QSop7R4DbsvvKyRQ/view?usp=sharing) | none | [launch](https://github.com/rpng/open_vins/blob/master/ov_msckf/launch/pgeneva_serial_aruco.launch) |
87-
| ArUco Room 02 | 93 | [rosbag](https://drive.google.com/file/d/1l_hnPUW6ufqxPtrLqRRHHI4mfGRZB1ha/view?usp=sharing) | none | [launch](https://github.com/rpng/open_vins/blob/master/ov_msckf/launch/pgeneva_serial_aruco.launch) |
88-
| ArUco Hallway 01 | 190 | [rosbag](https://drive.google.com/file/d/1FQBo3uHqRd0qm8GUb50Q-sj5gukcwaoU/view?usp=sharing) | none | [launch](https://github.com/rpng/open_vins/blob/master/ov_msckf/launch/pgeneva_serial_aruco.launch) |
89-
| ArUco Hallway 02 | 105 | [rosbag](https://drive.google.com/file/d/1oAbnV3MPOeaUSjnSc3g8t-pWV1nVjbys/view?usp=sharing) | none | [launch](https://github.com/rpng/open_vins/blob/master/ov_msckf/launch/pgeneva_serial_aruco.launch) |
101+
| ArUco Room 01 | 27 | [rosbag](https://drive.google.com/file/d/1ytjo8V6pCroaVd8-QSop7R4DbsvvKyRQ/view?usp=sharing) | none | [launch aruco](https://github.com/rpng/open_vins/blob/master/ov_msckf/launch/pgeneva_serial_aruco.launch) |
102+
| ArUco Room 02 | 93 | [rosbag](https://drive.google.com/file/d/1l_hnPUW6ufqxPtrLqRRHHI4mfGRZB1ha/view?usp=sharing) | none | [launch aruco](https://github.com/rpng/open_vins/blob/master/ov_msckf/launch/pgeneva_serial_aruco.launch) |
103+
| ArUco Hallway 01 | 190 | [rosbag](https://drive.google.com/file/d/1FQBo3uHqRd0qm8GUb50Q-sj5gukcwaoU/view?usp=sharing) | none | [launch aruco](https://github.com/rpng/open_vins/blob/master/ov_msckf/launch/pgeneva_serial_aruco.launch) |
104+
| ArUco Hallway 02 | 105 | [rosbag](https://drive.google.com/file/d/1oAbnV3MPOeaUSjnSc3g8t-pWV1nVjbys/view?usp=sharing) | none | [launch aruco](https://github.com/rpng/open_vins/blob/master/ov_msckf/launch/pgeneva_serial_aruco.launch) |
105+
| Neighborhood 01 | 2300 | [rosbag](https://drive.google.com/file/d/1N07SDbaLEkq9pVEvi6oiHpavaRuFs3j2/view?usp=sharing) | none | [launch ironsides](https://github.com/rpng/open_vins/blob/master/ov_msckf/launch/pgeneva_serial_ironsides.launch) |
106+
| Neighborhood 02 | 7400 | [rosbag](https://drive.google.com/file/d/1QEUi40sO8OkVXEGF5JojiiZMHMSiSqtg/view?usp=sharing) | none | [launch ironsides](https://github.com/rpng/open_vins/blob/master/ov_msckf/launch/pgeneva_serial_ironsides.launch) |
90107
@m_enddiv
91108

92109

@@ -130,4 +147,50 @@ Please take a look at the [run_ros_uzhfpv.sh](https://github.com/rpng/open_vins/
130147

131148

132149

150+
151+
152+
153+
@section gs-data-kaist KAIST Urban Dataset
154+
155+
The [KAIST urban dataset](https://irap.kaist.ac.kr/dataset/index.html) @cite Jeong2019IJRR is a dataset focus on autonomous driving and localization in challenging complex urban environments.
156+
The dataset was collected in Korea with a vehicle equipped with stereo camera pair, 2d SICK LiDARs, 3d Velodyne LiDAR, Xsens IMU, fiber optic gyro (FoG), wheel encoders, and RKT GPS.
157+
The camera is 10 Hz, while the Xsens IMU is 100 Hz sensing rate.
158+
A groundtruth "baseline" trajectory is also provided which is the resulting output from fusion of the FoG, RKT GPS, and wheel encoders.
159+
160+
@code{.shell-session}
161+
git clone https://github.com/irapkaist/file_player.git
162+
git clone https://github.com/irapkaist/irp_sen_msgs.git
163+
catkin build
164+
rosrun file_player file_player
165+
@endcode
166+
167+
To use the dataset, the dataset's file player can be used to publish the sensor information on to ROS.
168+
See the above commands on what packages you need to clone into your ROS workspace.
169+
One can record a rosbag after manually and use the serial OpenVINS processing node, or use the live node and manually playback the datasets.
170+
It is important to *disable* the "skip stop section" to ensure that we have continuous sensor feeds.
171+
Typically we process the datasets at 2x rate so we get a 20 Hz image feed and the datasets can be processed in a more efficient manor.
172+
173+
@m_class{m-block m-warning}
174+
175+
@par Dynamic Environments
176+
A challenging open research question is being able to handle dynamic objects seen from the cameras.
177+
By default we rely on our tracking 8 point RANSAC to handle these dynamics objects.
178+
In the most of the KAIST datasets the majority of the scene can be taken up by other moving vehicles, thus the performance can suffer.
179+
Please be aware of this fact.
180+
181+
182+
@m_div{m-text-center}
183+
| Dataset Name | Length (km) | Dataset Link | Groundtruth Traj. | Example Launch |
184+
|-------------:|--------|--------------|------------------|------------------|
185+
| Urban 28 | 11.47 | [download](https://irap.kaist.ac.kr/dataset/download_2.html) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/kaist) | [launch](https://github.com/rpng/open_vins/blob/master/ov_msckf/launch/pgeneva_ros_kaist.launch) |
186+
| Urban 38 | 11.42 | [download](https://irap.kaist.ac.kr/dataset/download_2.html) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/kaist) | [launch](https://github.com/rpng/open_vins/blob/master/ov_msckf/launch/pgeneva_ros_kaist.launch) |
187+
| Urban 39 | 11.06 | [download](https://irap.kaist.ac.kr/dataset/download_2.html) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/kaist) | [launch](https://github.com/rpng/open_vins/blob/master/ov_msckf/launch/pgeneva_ros_kaist.launch) |
188+
@m_enddiv
189+
190+
191+
192+
193+
194+
195+
133196
*/

docs/update-initfeat.dox renamed to docs/update-featinit.dox

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ Thus we have the following mapping to a feature seen from the current frame:
2424

2525
\f{align*}{
2626
{}^{C_i}\mathbf{p}_f &
27-
= z_{f} {}^{C_i}\mathbf{b}_{f}
27+
= {}^{C_i}z_{f} {}^{C_i}\mathbf{b}_{f}
2828
= {}^{C_i}z_{f}
2929
\begin{bmatrix}
3030
u_n \\ v_n \\ 1

docs/update-zerovelocity.dox

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
/**
2+
3+
4+
@page update-zerovelocity Zero Velocity Update
5+
6+
The key idea of the zero velocity update (ZUPT) is to allow for the system to reduce its uncertainty leveraging motion knowledge (i.e. leverage the fact that the system is stationary).
7+
This is of particular importance in cases where we have a monocular system without any temporal SLAM features.
8+
In this case, if we are stationary we will be unable to triangulate features and thus will be unable to update the system.
9+
This can be avoided by either using a stereo system or temporal SLAM features.
10+
One problem that both of these don't solve is the issue of dynamic environmental objects.
11+
In a typical autonomous car scenario the sensor system will become stationary at stop lights in which dynamic objects, such as other cars crossing the intersection, can quickly corrupt the system.
12+
A zero velocity update and skipping feature tracking can address these issues if we are able to classify the cases where the sensor system is at rest.
13+
14+
15+
@section update-zerovelocity-meas Constant Velocity Synthetic Measurement
16+
17+
To perform update, we create a synthetic "measurement" which says that the current **true** acceleration and angular velocity is zero.
18+
As compared to saying the velocity is zero, we can model the uncertainty of these measurements based on the readings from our inertial measurement unit.
19+
20+
\f{align*}{
21+
\mathbf{a} &= \mathbf{0} \\
22+
\boldsymbol{\omega} &= \mathbf{0}
23+
\f}
24+
25+
It is important to realize this is not strictly enforcing zero velocity, but really a constant velocity.
26+
This means we can have a false detection at constant velocity times (zero acceleration), but this can be easily addressed by a velocity magnitude check.
27+
We have the following measurement equation relating this above synthetic "measurement" to the currently recorded inertial readings:
28+
29+
\f{align*}{
30+
\mathbf{a} &= \mathbf{a}_m - \mathbf{b}_a - {}^{I_k}_G\mathbf{R}{}^G\mathbf{g} - \mathbf{n}_a \\
31+
\boldsymbol{\omega} &= \boldsymbol{\omega}_m - \mathbf{b}_g - \mathbf{n}_g
32+
\f}
33+
34+
It is important to note that here our actual measurement is the true \f$\mathbf{a}\f$ and \f$\boldsymbol{\omega}\f$ and thus we will have the following residual where we will subtract the synthetic "measurement" and our measurement function:
35+
36+
\f{align*}{
37+
\tilde{\mathbf{z}} &=
38+
\begin{bmatrix}
39+
\mathbf{a} - \Big(\mathbf{a}_m - \mathbf{b}_a - {}^{I_k}_G\mathbf{R}{}^G\mathbf{g} - \mathbf{n}_a \Big) \\
40+
\boldsymbol{\omega} - \Big(\boldsymbol{\omega}_m - \mathbf{b}_g - \mathbf{n}_g \Big)
41+
\end{bmatrix} &=
42+
\begin{bmatrix}
43+
- \Big(\mathbf{a}_m - \mathbf{b}_a - {}^{I_k}_G\mathbf{R}{}^G\mathbf{g} - \mathbf{n}_a \Big) \\
44+
- \Big(\boldsymbol{\omega}_m - \mathbf{b}_g - \mathbf{n}_g \Big)
45+
\end{bmatrix}
46+
\f}
47+
48+
Where we have the following Jacobians in respect to our state:
49+
50+
\f{align*}{
51+
\frac{\partial \tilde{\mathbf{z}}}{\partial {}^{I_k}_{G}\mathbf{R}} &= - \left\lfloor {}^{I_k}_G\mathbf{R}{}^G\mathbf{g} \times\right\rfloor \\
52+
\frac{\partial \tilde{\mathbf{z}}}{\partial \mathbf{b}_a} &= \frac{\partial \tilde{\mathbf{z}}}{\partial \mathbf{b}_g} = - \mathbf{I}_{3\times 3}
53+
\f}
54+
55+
56+
57+
58+
59+
@section update-zerovelocity-detect Zero Velocity Detection
60+
61+
Zero velocity detection in itself is a challenging problem which has seen many different works tried to address this issue @cite Wagstaff2017IPIN, @cite Ramanandan2011TITS, @cite Davidson2009ENC.
62+
Most works boil down to simple thresholding and the approach is to try to determine the optimal threshold which allows for the best classifications of zero velocity update (ZUPT) portion of the trajectories.
63+
There have been other works, @cite Wagstaff2017IPIN and @cite Ramanandan2011TITS, which have looked at more complicated methods and try to address the issue that this threshold can be dependent on the type of different motions (such as running vs walking) and characteristics of the platform which the sensor is mounted on (we want to ignore vehicle engine vibrations and other non-essential observed vibrations).
64+
65+
66+
We approach this detection problem based on tuning of a \f$\chi^2\f$, chi-squared, thresholding based on the measurement model above.
67+
It is important to note that we also have a velocity magnitude check which is aimed at preventing constant velocity cases which have non-zero magnitude.
68+
More specifically, we perform the following threshold check to see if we are current at zero velocity:
69+
70+
\f{align*}{
71+
\tilde{\mathbf{z}}^\top(\mathbf{H}\mathbf{P}\mathbf{H}^\top + \mathbf{R})^{-1}\tilde{\mathbf{z}} < \chi^2
72+
\f}
73+
74+
We found that in the real world experiments, typically the inertial measurement noise \f$\mathbf{R}\f$ needs to be inflated by 50-100 times to allow for proper detection.
75+
This can hint that we are using overconfident inertial noises, or that there are additional frequencies (such as the vibration of motors) which inject additional noises.
76+
77+
78+
79+
*/

docs/update.dox

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,7 @@ These are essentially the Kalman filter (or linear MMSE) update equations.
277277
- @subpage update-delay --- How to perform delayed initialization
278278
- @subpage update-null --- MSCKF nullspace projection
279279
- @subpage update-compress --- MSCKF measurement compression
280+
- @subpage update-zerovelocity --- Zero velocity stationary update
280281

281282

282283

0 commit comments

Comments
 (0)