- [June 2022]: The position and acceleration formulation is suboptimal. Please checkout the new branch for improved formulation.
- Direct Sparse Odometry, J. Engel, V. Koltun, D. Cremers, In IEEE Transactions on Pattern Analysis and Machine Intelligence (PAMI), 2018
- Continuous-Time Spline Visual-Inertial Odometry, J. Mo and J. Sattar, In IEEE International Conference on Robotics and Automation, 2022, arXiv.
cd catkin_ws/src
git clone https://github.com/IRVLab/spline_vio.git
cd ..
catkin_make
-
Use Kalibr toolbox to calibrate camera and IMU.
-
Convert camera parameters to DSO format.
-
Create a launch file following the example of tum.launch.
roslaunch spline_vio [YOUR_LAUNCH_FILE]
- Ctrl-C to terminate the program, the final trajectory (results.txt) will be written to ~/Desktop folder by default.
- results.txt: poses of all frames, using the TUM RGB-D / TUM monoVO format ([timestamp x y z qx qy qz qw] of the cameraToWorld transformation).
- ROS interface: main.cpp
- Predict pose using spine for front-end tracking: FullSystem::trackNewCoarse()
- IMU/Spline state: HessianBlocks.h
- IMU/Spline Jacobians (check Jacobians.pdf): HessianBlocks::getImuHi()
- Constraints Jacobians (check Jacobians.pdf): EnergyFunctional::getImuHessianCurrentFrame()
- Solve the constraint nonlinear optimization problem: EnergyFunctional::solveSystemF()