# MSCKF\_VIO The `MSCKF_VIO` package is a stereo version of MSCKF. The software takes in synchronized stereo images and IMU messages and generates real-time 6DOF pose estimation of the IMU frame. The software is tested on Ubuntu 16.04 with ROS Kinetic. Video: [https://www.youtube.com/watch?v=OXSB8Bze0cY](https://www.youtube.com/watch?v=OXSB8Bze0cY) Paper Draft: [https://arxiv.org/abs/1712.00036](https://arxiv.org/abs/1712.00036) ## License Penn Software License. See LICENSE.txt for further details. ## Dependencies Most of the dependencies are standard including `Eigen`, `OpenCV`, and `Boost`. The standard shipment from Ubuntu 16.04 and ROS Kinetic works fine. One special requirement is `suitesparse`, which can be installed through, ``` sudo apt-get install libsuitesparse-dev ``` ## Compling The software is a standard catkin package. Make sure the package is on `ROS_PACKAGE_PATH` after cloning the package to your workspace. And the normal procedure for compling a catkin package will work. ``` cd your_work_space catkin_make --pkg msckf_vio --cmake-args -DCMAKE_BUILD_TYPE=Release ``` ## Calibration An accurate calibration is crucial for successfully running the software. To get the best performance of the software, the stereo cameras and IMU should be hardware synchronized. [Kalibr](https://github.com/ethz-asl/kalibr) can be used to calibrate the transformantion between the stereo cameras and IMU. The yaml file generated by Kalibr can be directly used in this software with slight modifications. See `example_calib.yaml` in the `config` folder for the modifications. ## Example Usage There are launch files prepared for the EuRoC and fast flight dataset separately. Upon launching the `msckf_vio_*.launch`, two ros nodes are created: * `image_processor` takes the stereo images to detect and track features. * `vio` takes the feature measurements and tightly fuses them with the IMU messages to estimate pose. ### `image_processor` node **Subscribed Topics** `imu` (`sensor_msgs/Imu`) IMU messages is used for compensating rotation in feature tracking, and 2-point RANSAC. `camx_image` (`sensor_msgs/Image`) Synchronized stereo images. **Published Topics** `features` (`msckf_vio/CameraMeasurement`) Records the feature measurements on the current stereo image pair. `tracking_info` (`msckf_vio/TrackingInfo`) Records the feature tracking status for debugging purpose. `debug_stereo_img` (`sensor_msgs::Image`) Draw current features on the stereo images for debugging purpose. Note that this debugging image is only generated upon subscription. ### `vio` node **Subscribed Topics** `imu` (`sensor_msgs/Imu`) IMU measurements. `features` (`msckf_vio/CameraMeasurement`) Stereo feature measurements from the `image_processor` node. **Published Topics** `odom` (`nav_msgs/Odometry`) Odometry of the IMU frame including a proper covariance. `feature_point_cloud` (`sensor_msgs/PointCloud2`) Shows current features in the map which may be used for estimation.