Go to file
2021-08-06 14:11:06 +02:00
.vscode added sobel kernel for image gradient calcualtion 2019-05-31 11:38:49 +02:00
cmake Replace FindCholmod and FindSPQR with FindSuiteSparse.cmake from Ceres 2018-01-13 20:30:22 -05:00
config fixed visualization issue 2019-07-12 16:36:36 +02:00
include/msckf_vio removed scaling 2019-07-19 17:27:13 +02:00
launch removed scaling 2019-07-19 17:27:13 +02:00
msg added moving window structure, not yet done. added timestame sync for images and features detected 2019-04-10 18:36:11 +02:00
pseudocode added pseudocode of original msckf 2019-04-10 18:43:30 +02:00
rviz First commit of the code 2018-01-08 14:45:44 -05:00
src merges up-to-date stereo-photometric msckf approach into master 2021-08-06 13:51:09 +02:00
test Fix FeatureInitializeTest 2018-01-09 23:20:54 -05:00
CMakeLists.txt added 3d visualization and stepping through bag file - minor edits in jakobi 2019-05-09 12:14:12 +02:00
GPATH added scaling changes to dI/dh for pixel size 2019-05-24 15:00:18 +02:00
GRTAGS added scaling changes to dI/dh for pixel size 2019-05-24 15:00:18 +02:00
GSYMS added scaling changes to dI/dh for pixel size 2019-05-24 15:00:18 +02:00
GTAGS added scaling changes to dI/dh for pixel size 2019-05-24 15:00:18 +02:00
LICENSE.txt Add readme and license 2017-11-30 14:29:26 -05:00
log added kernel visualization 2019-06-12 18:39:40 +02:00
nodelets.xml First commit of the code 2018-01-08 14:45:44 -05:00
package.xml added 3d visualization and stepping through bag file - minor edits in jakobi 2019-05-09 12:14:12 +02:00
README.md centers Image 2021-08-06 14:11:06 +02:00

MSCKF_VIO

The MSCKF_VIO package is a stereo-photometric version of MSCKF. The software takes in synchronized stereo images and IMU messages and generates real-time 6DOF pose estimation of the IMU frame.

This approach is based on the paper written by Ke Sun et al. https://arxiv.org/abs/1712.00036 and their Stereo MSCKF implementation, which tightly fuse the matched feature information of a stereo image pair into a 6DOF Pose. The approach implemented in this repository follows the semi-dense msckf approach tightly fusing the photometric information around the matched featues into the covariance matrix, as described and derived in the master thesis Pose Estimation using a Stereo-Photometric Multi-State Constraint Kalman Filter.

It's positioning is comparable to the approach from Ke Sun et al. with the photometric approach, with a higher computational load, especially with larger image patches around the feature. A video explaining the approach can be found on https://youtu.be/HrqQywAnenQ:

[![Stereo-Photometric MSCKF](https://img.youtube.com/vi/HrqQywAnenQ/0.jpg)](https://www.youtube.com/watch?v=HrqQywAnenQ)


This software should be deployed using ROS Kinetic on Ubuntu 16.04 or 18.04.

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 compiling a catkin package should work.

cd your_work_space
catkin_make --pkg msckf_vio --cmake-args -DCMAKE_BUILD_TYPE=Release

EuRoC and UPenn Fast flight dataset example usage

First obtain either the EuRoC or the UPenn fast flight dataset.

Recommended EuRoC ROS Bags:

Once the msckf_vio is built and sourced (via source <path to catkin_ws>/devel/setup.bash), there are two launch files prepared for the EuRoC and UPenn fast flight dataset named msckf_vio_euroc.launch and msckf_vio_fla.launch respectively. Each launch files instantiates two ROS nodes:

  • image_processor processes stereo images to detect and track features
  • vio obtains feature measurements from the image_processor and tightly fuses them with the IMU messages to estimate pose.

These launch files can be executed via

roslaunch msckf_vio msckf_vio_euroc.launch

or

roslaunch msckf_vio msckf_vio_fla.launch

Once the nodes are running you need to run the dataset rosbags (in a different terminal), for example:

rosbag play V1_01_easy.bag

As mentioned in the previous section, The robot is required to start from a stationary state in order to initialize the VIO successfully.

To visualize the pose and feature estimates you can use the provided rviz configurations found in msckf_vio/rviz folder (EuRoC: rviz_euroc_config.rviz, Fast dataset: rviz_fla_config.rviz).

ROS Nodes

The general structure is similar to the structure of the MSCKF implementation this repository is derived from.

image_processor node

Subscribed Topics

imu (sensor_msgs/Imu)

IMU messages is used for compensating rotation in feature tracking, and 2-point RANSAC.

cam[x]_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 is used for estimation.