A ROS implementation of ORB-SLAM3 V1.0 that focuses on the ROS part.
This package uses catkin build. Tested on Ubuntu 20.04.
sudo apt install libeigen3-dev
cd ~
git clone https://github.com/stevenlovegrove/Pangolin.git
cd Pangolin
mkdir build && cd build
cmake ..
make
sudo make install
Check the OpenCV version on your computer (required at least 3.0):
python3 -c "import cv2; print(cv2.__version__)"
On a freshly installed Ubuntu 20.04.4 LTS with desktop image, OpenCV 4.2.0 is already included. If a newer version is required (>= 3.0), follow installation instruction and change the corresponding OpenCV version in CMakeLists.txt
Install hector-trajectory-server to visualize the real-time trajectory of the camera/imu. Note that this real-time trajectory might not be the same as the keyframes' trajectory.
sudo apt install ros-[DISTRO]-hector-trajectory-server
cd ~/catkin_ws/src
git clone https://github.com/thien94/orb_slam3_ros.git
cd ../
catkin build
Mono mode with NTU VIRAL's eee_01.bag:
# In one terminal:
roslaunch orb_slam3_ros ntuviral_mono.launch
# In another terminal:
rosbag play eee_01.bag -s 50 # The UAV starts moving at t~50s
Stereo mode with KITTI's 2011_09_26:
- First, download KITTI dataset and convert the raw data into bag file following this instruction. You can automate the downloading process using this script.
- Run the example:
# In one terminal:
roslaunch orb_slam3_ros kitti_stereo.launch
# In another terminal:
rosbag play kitti_2011_09_26_drive_0002_synced.bag
Mono-inertial mode with EuRoC's MH_01_easy.bag:
# In one terminal:
roslaunch orb_slam3_ros euroc_mono_inertial.launch
# In another terminal:
rosbag play MH_01_easy.bag
Stereo-inertial mode with TUM-VI's dataset-corridor1_512_16.bag
# In one terminal:
roslaunch orb_slam3_ros tum_vi_stereo_inertial.launch
# In another terminal:
rosbag play dataset-corridor1_512_16.bag
RGB-D mode with TUM's rgbd_dataset_freiburg1_xyz.bag
# In one terminal:
roslaunch orb_slam3_ros tum_rgbd.launch
# In another terminal:
rosbag play rgbd_dataset_freiburg1_xyz.bag
- Note: change
TUMX.yamltoTUM1.yaml,TUM2.yamlorTUM3.yamlfor freiburg1, freiburg2 and freiburg3 sequences respectively.
RGB-D-Inertial mode with VINS-RGBD's Normal.bag
- Download the bag files, for example Normal.bag.
- Decompress the bag, run
rosbag decompress Normal.bag. - Change the calibration params in
RealSense_D435i.yamlif necessary.
# In one terminal:
roslaunch orb_slam3_ros rs_d435i_rgbd_inertial.launch.launch
# In another terminal:
rosbag play Normal.bag
- Modify the original
rs_t265.launchto enable fisheye images and imu data (changeunite_imu_methodtolinear_interpolation). - Run
rs-enumerate-devices -cto get the calibration parameters and modifyconfig/Stereo-Inertial/RealSense_T265.yamlaccordingly. A detailed explaination can be found here. - Run:
# In one terminal:
roslaunch realsense2_camera rs_t265.launch
# In another terminal:
roslaunch orb_slam3_ros rs_t265_stereo_inertial.launch
The map file will have .osa extension, and is located in the ROS_HOME folder (~/.ros/ by default).
- Set the name of the map file to be loaded with
System.LoadAtlasFromFileparam in the settings file (.yaml). - If the map file is not available,
System.LoadAtlasFromFileparam should be commented out otherwise there will be error.
- Option 1: If
System.SaveAtlasToFileis set in the settings file, the map file will be automatically saved when you kill the ros node. - Option 2: You can also call the following ros service at the end of the session
rosservice call /orb_slam3/save_map [file_name]
/camera/image_rawfor Mono(-Inertial) node/camera/left/image_rawfor Stereo(-Inertial) node/camera/right/image_rawfor Stereo(-Inertial) node/imufor Mono/Stereo/RGBD-Inertial node/camera/rgb/image_rawand/camera/depth_registered/image_rawfor RGBD node
/orb_slam3/camera_pose, left camera pose in world frame, published at camera rate/orb_slam3/body_odom, imu-body odometry in world frame, published at camera rate/orb_slam3/tracking_image, processed image from the left camera with key points and status text/orb_slam3/tracked_points, all key points contained in the sliding window/orb_slam3/all_points, all key points in the map/orb_slam3/kf_markers, markers for all keyframes' positions/tf, with camera and imu-body poses in world frame
voc_file: path to vocabulary file required by ORB-SLAM3settings_file: path to settings file required by ORB-SLAM3enable_pangolin: enable/disable ORB-SLAM3's Pangolin viewer and interface. (trueby default)
rosservice call /orb_slam3/save_map [file_name]: save the map as[file_name].osainROS_HOMEfolder.rosservice call /orb_slam3/save_traj [file_name]: save the estimated trajectory of camera and keyframes as[file_name]_cam_traj.txtand[file_name]_kf_traj.txtinROS_HOMEfolder.
Provided Dockerfile sets up an image based a ROS noetic environment including RealSense SDK
To access a USB device (such as RealSense camera) inside docker container use:
docker run --network host --privileged -v /dev:/dev -it [image_name]NOTE:
--network hostis recommended to listen to rostopics outside the container
Publish basic topics (camera pose, tracking image and point cloud)Publish more topics (odom, full map pointcloud, keyframe, etc.)Add other functions as services (map save/load, save estimated trajectory, etc.)Add docker support