• Stars
    star
    1,722
  • Rank 27,101 (Top 0.6 %)
  • Language
    C++
  • License
    Other
  • Created almost 7 years ago
  • Updated 12 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Robust Stereo Visual Inertial Odometry for Fast Autonomous Flight

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=jxfJFgzmNSw&t
Paper Draft: 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 compiling a catkin package should 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. Note that for the stereo calibration, which includes the camera intrinsics, distortion, and extrinsics between the two cameras, you have to use a calibration software. Manually setting these parameters will not be accurate enough. Kalibr can be used for the stereo calibration and also to get the transformation between the stereo cameras and IMU. The yaml file generated by Kalibr can be directly used in this software. See calibration files in the config folder for details. The two calibration files in the config folder should work directly with the EuRoC and fast flight datasets. The convention of the calibration file is as follows:

camx/T_cam_imu: takes a vector from the IMU frame to the camx frame. cam1/T_cn_cnm1: takes a vector from the cam0 frame to the cam1 frame.

The filter uses the first 200 IMU messages to initialize the gyro bias, acc bias, and initial orientation. Therefore, the robot is required to start from a stationary state in order to initialize the VIO successfully.

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

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.

More Repositories

1

kr_autonomous_flight

KR (KumarRobotics) autonomous flight system for GPS-denied quadrotors
C++
671
star
2

ublox

A driver for ublox gps
C++
446
star
3

jps3d

A C++ implementation of Jump Point Search on both 2D and 3D maps
C++
373
star
4

sloam

Semantic LIDAR odometry and mapping for cylinderical objects (e.g. trees in forests)
C++
207
star
5

multicam_calibration

C++
118
star
6

conformal_lattice_planner

C++
116
star
7

kr_mav_control

Code for quadrotor control
C++
106
star
8

sdd_vio

Semi-Dense Direct Visual-Inertial Odometry
C++
97
star
9

mrsl_quadrotor

C++
93
star
10

motion_capture_system

Drivers for motion capture systems (Vicon and Qualisys, can be extended to compatible with other mocap systems)
C++
66
star
11

AllocNet

A lightweight learning-based trajectory optimization framework.
C++
58
star
12

bluefox2

ROS driver for the Matrix Vision mvBlueFOX cameras
C++
46
star
13

imu_vn_100

ROS driver for VN-100 of VectorNav Technologies
C
46
star
14

velodyne_puck

A simplified driver for Velodyne VLP16 (PUCK) based on the official ROS velodyne driver.
C++
37
star
15

gps-tools

ROS packages for use with GPS
C++
36
star
16

waypoint_navigation_plugin

C++
36
star
17

treescope

Python
35
star
18

spomp-system

CMake
35
star
19

kr_mp_design

A guidance for the design and evaluation of motion planners for quadrotors in Environments with Varying Complexities
35
star
20

imu_3dm_gx4

Driver for Lord Corporation Microstrain 3DM GX4 25
C++
32
star
21

flir_gige

A ros driver for flir ax5 gige thermal camera
C++
28
star
22

vicon

Code for working with the Vicon tracking system
C++
24
star
23

flea3

ROS driver for flea3/grasshopper3 camera
C++
21
star
24

MOCHA

Multi-robot Opportunistic Communication Framework for Heterogeneous Collaboration
Python
21
star
25

ouster_decoder

A low latency decoder for Ouster Lidars
C++
17
star
26

camera_base

Some base classes for simplifing ROS camera driver node.
C++
13
star
27

kr_param_map

A parameterized map generator for planning evaluations and benchmarking
C++
13
star
28

CoverageControl

Environment for coverage control and learning using GNN
C++
12
star
29

imu_3dm_gx3

Driver for Lord Corporation Microstrain 3DM GX3 25
C++
10
star
30

kr_ilqr_optimizer

Use iLQR package Altro to fly the quadrotor
C++
9
star
31

kr_opt_sfc

Optimal Convex Cover to Approximate Collision-free Space
9
star
32

asoom

C++
8
star
33

nanokontrol

C++
7
star
34

top_down_renderer

C++
5
star
35

grid_map

C++
4
star
36

spomp

C++
4
star
37

multi_mav_manager

This is a multi MAV manager which leverages mav_manager and quadrotor_control for each agent.
Shell
3
star
38

air_router

Python
3
star
39

video_magics

Shell
3
star
40

kr_utils

Collection of utils packages
C++
2
star
41

kr_docs

Repository for documentation relevant to the KumarRobotics organization
2
star
42

ublox-release

Release repo for ublox driver (ros1)
2
star
43

rangenet_inf

Python
1
star
44

kr_planning_msgs

C++
1
star
45

quadrotor_ukf

Quadrotor UKF
C++
1
star
46

kr_param_yaw

A Trajectory Optimization Method with Global Yaw Parameterization
1
star
47

semantics_manager

Python
1
star
48

starling2_interface

Starling 2 Integration
CMake
1
star