摘 要:
Ubuntu18.04 + ROS1 + ORB_SLAM3 + INDEMIND 相机实时运行双目惯性模组。
须 知:
自己跑通后纯靠回忆和翻之前看过的帖子写下此博客,过程中遇到报错,请自行查询。(大致流程是这样的,但具体细节处的报错因人而异,也可以发评论区交流。)
目 录
前 言
2024/04.24 .Ubuntu 18.04,基于ROS配置ORB_SLAM3,配合INDEMIND双目惯性相机,实现ORB_SLAM3的实时运行(双目 + IMU)。
表1 系统配置
系统 | Version |
Ubuntu | 18.04 |
ROS | Melodic |
IMSEE-SDK | 1.4.2 |
OpenCV | 3.2.0 |
Cmake | 3.23.0 |
Pangolin | 0.5 |
1、ORB_SLAM3 + ROS 编译安装
关于ORB_SLAM3的安装、编译教程网上资料比比皆是,遇到报错(因人而异)大家可以自行查询,这里简单写一下:
1.0 必要工具安装(略)
安装必要的工具(Cmake,g++,gcc,git等)。
1.1 相关库安装
(1) Eigen 3安装
打开终端,输入以下命令:
git clone https://github.com/eigenteam/eigen-git-mirror
cd eigen-git-mirror
mkdir build
cd build
cmake ..
sudo make install
移动头文件至系统库目录:
sudo cp -r /usr/local/include/eigen3/Eigen /usr/local/include
(2) Pangolin安装
a. 安装依赖
sudo apt-get install libglew-dev
sudo apt-get install cmake
sudo apt-get install libboost-dev libboost-thread-dev libboost-filesystem-dev
b. 安装Pangolin 0.5
下载后解压,执行以下命令:
cd Pangolin
mkdir build
cd build
cmake ..
make -j8
sudo make install
c. 测试Pangolin
cd examples/HelloPangolin
mkdir build
cd build
cmake ..
make
./HelloPangolin
出现下图即安装成功。
(3) OpenCV安装
a. 安装依赖
sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
b. 安装OpenCV 3.2.0
为和ROS1自带的OpenCV版本相同,下载3.2.0版本,官网下载链接:OpenCV官网。
cd opencv-3.2.0/
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
make -j8
sudo make install
c. 配置OpenCV环境
sudo gedit /etc/ld.so.conf.d/opencv.conf
输入上述命令,在打开的文件中输入:
/usr/local/lib
保存退出,运行下列命令使环境生效:
sudo ldconfig
配置bash :
sudo gedit /etc/bash.bashrc
// 在文件末尾加入下面代码
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
// 保存退出,执行命令使得配置生效:
source /etc/bash.bashrc
d. 测试OpenCV
cd opencv-3.2.0/samples/cpp/example_cmake/
mkdir build
cd build
cmake ..
make
./opencv_example
出现打印有“Hello OpenCV”字样的Sample窗口即安装成功。
(4) boost安装
官网下载链接:boost官网
下载后解压,执行下列命令安装:
sudo ./bootstrap.sh
sudo ./b2 install
1.2 ROS安装
小鱼老师一键安装:
wget http://fishros.com/install -O fishros && bash fishros
跟着步骤走,推荐换源安装ROS1。可以参考其他优质博客:ubuntu安装ROS melodic(最新、超详细图文教程,包含配置rosdep)https://blog.csdn.net/weixin_55944949/article/details/130468032?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522171409769516800225544514%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=171409769516800225544514&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-2-130468032-null-null.142%5Ev100%5Epc_search_result_base7&utm_term=%E5%B0%8F%E9%B1%BCROS&spm=1018.2226.3001.4187 这里不详细赘述。总之,最后可以运行小乌龟的demo即安装成功。
1.3 ORB_SLAM3安装
(1) 创建ROS工作空间
分别执行以下语句:
// step1.创建工作空间
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace
// step2. 编译工作空间
cd ~/catkin_ws
catkin_make
// 完成后,catkin_ws添加了build 和 devel文件夹
// step3. 设置环境变量
sudo gedit ~/.bashrc
//在打开的文档末尾加入:source ~/catkin_ws/devel/setup.bash
source ~/.bashrc
// step4. 创建功能包
catkin_create_pkg learning_communication std_msgs roscpp rospy
// step5. 编译功能包
cd ~/catkin_ws
catkin_make
(2) ORB_SLAM3安装
进入工作空间的 src 文件夹,下载ORB_SLAM3源码:
cd ~/catkin_ws/src
git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git
/******** 下面是关键:修改ORB_SLAM3文件 ******/
1)将ORB_SLAM3下CmakeLists.txt中 find_package(OpenCV 4.4) 改为 OpenCV 3.2.0。
同样,将find_package(Eigen3 3.1.0 REQUIRED)修改为
find_package(Eigen3 REQUIRED)
2)如果使用的是INDEMIND相机,以双目惯性SLAM为例,修改 ORB_SLAM3/Examples_old/ROS/ORB_SLAM3/src/ros_stereo_inertial.cc 文件第140行如下:
ros::Subscriber sub_imu = n.subscribe("/imsee/imu", 1000, &ImuGrabber::GrabImu, &imugb);
ros::Subscriber sub_img_left = n.subscribe("/imsee/image/left", 100, &ImageGrabber::GrabImageLeft,&igb);
ros::Subscriber sub_img_right = n.subscribe("/imsee/image/right", 100, &ImageGrabber::GrabImageRight,&igb);
/******** 上面是关键:修改ORB_SLAM3文件 ******/
把Example_old里的ROS文件夹复制到Example文件夹下,修改环境配置文件:
sudo gedit ~/.bashrc
在打开的文档中加入(改成自己的路径):
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:~/catkin_ws/src/ORB_SLAM3/Examples/ROS
再执行以下命令使得配置生效:
source ~/.bashrc
进入ORB_SLAM3文件夹打开终端,编译ORB_SLAM3:
chmod +x build.sh
./build.sh
再编译ROS下的ORB_SLAM3:
chmod +x build_ros.sh
./build_ros.sh
回到 catkin_ws 文件夹,执行以下语句再次编译,如有报错根据提示编译前需要删除之前 catkin_make 的编译文件夹(build,devel):
catkin build
至此,ROS下的ORB_SLAM3安装完成,可以找个数据集测试一下。
2、IMSEE-SDK 编译安装
INDEMIND SDK 官方地址:INDEMIND官方SDK安装教程
2.1 安装依赖
sudo apt-get install build-essential cmake git
2.2 下载 SDK
git clone https://github.com/indemind/IMSEE-SDK.git
cd IMSEE-SDK/
make init
2.3 安装MNN
(1)安装依赖
sudo apt-get install autoconf automake libtool
sudo apt-get install libcanberra-gtk-module
(2)安装 protobuf
电脑里一般都有protobuf,输入下面指令,若安装有 protobuf 则可输出版本。若没有,请自行下载安装。
protoc --version
(3)安装MNN
回到主目录:
git clone https://github.com/alibaba/MNN.git
cd MNN
./schema/generate.sh
mkdir build
cd build
cmake ..
make -j4
sudo make install
(4)安装OpenCV
OpenCV不需要再安装,用之前的安装的版本即可。但在编译IMSEE-SDK(下文 2.4处)时会有多个报错找不到 libxxxx3.so,我的解决方法是在自己OpenCV库目录(/usr/local/lib)复制相同的文件改成对应的版本号即可。
例:libopencv_video.so.3.2.0 复制帖帖重命名为 libopencv_video3.so.3.3
至此,INDEMIND相机的SDK安装完毕。
2.4 测试SDK
// 编译,有缺少libxxx.so文件的报错请看2.3节第(4)部分
cd IMSEE-SDK/
make init
maek demo
编译完成后运行demo:
cd IMSEE-SDK/demo/output/bin
sudo ./get_image
可以打开双目相机,如下图:
编译ROS节点:
wget https://raw.githubusercontent.com/oroca/oroca-ros-pkg/master/ros_install.sh && \
chmod 755 ./ros_install.sh && bash ./ros_install.sh catkin_ws melodic
cd IMSEE-SDK/
make ros
3、实时运行
3.1 启动IMSEE-SDK的ROS节点
cd IMSEE-SDK/
sudo su
source ros/devel/setup.bash
roslaunch imsee_ros_wrapper start.launch
3.2 运行ORB-SLAM3
rosrun ORB_SLAM3 Stereo_Inertial Vocabulary/ORBvoc.txt Examples/ROS/ORB_SLAM3/Indemind_stereo_imu.yaml ture
指令中需要改成自己的路经和文件名称。其中,Indemind_stereo_imu.yaml 文件可参考如下(后续换成自己的标定参数哦,有时间会再写一个INDEMIND相机+IMU标定的帖子):
%YAML:1.0
#--------------------------------------------------------------------------------------------
# Camera Parameters. Adjust them!
#--------------------------------------------------------------------------------------------
Camera.type: "PinHole"
# Camera calibration and distortion parameters (OpenCV) (equal for both cameras after stereo rectification)
Camera.fx: 260.561
Camera.fy: 260.561
Camera.cx: 317.946
Camera.cy: 195.495
Camera.k1: 0.0
Camera.k2: 0.0
Camera.p1: 0.0
Camera.p2: 0.0
Camera.width: 640
Camera.height: 400
# Camera frames per second
Camera.fps: 25
# stereo baseline times fx
Camera.bf: 31.26732
# Color order of the images (0: BGR, 1: RGB. It is ignored if images are grayscale)
Camera.RGB: 1
# Close/Far threshold. Baseline times.
ThDepth: 35.0
# Transformation from camera 0 to body-frame (imu)
Tbc: !!opencv-matrix
rows: 4
cols: 4
dt: f
data: [-0.999977, -0.006624, -0.001162, 0.0060095, 0.006621, -0.999975, 0.002465, 2.61872e-05, -0.001178, 0.002458, 0.999996, -0.002,
0.0, 0.0, 0.0, 1.0]
# IMU noise
IMU.NoiseGyro: 1.000000000000000e-1 # 1.6968e-04
IMU.NoiseAcc: 1.000000000000000e-1 # 2.0000e-3
IMU.GyroWalk: 4.000000000000000e-3
IMU.AccWalk: 4.0000000000000000e-3 # 3.0000e-3
IMU.Frequency: 200
#--------------------------------------------------------------------------------------------
# Stereo Rectification. Only if you need to pre-rectify the images.
# Camera.fx, .fy, etc must be the same as in LEFT.P
#--------------------------------------------------------------------------------------------
LEFT.height: 400
LEFT.width: 640
LEFT.D: !!opencv-matrix
rows: 1
cols: 5
dt: d
data:[-0., 0., 0.0, 0, 0.0]
LEFT.K: !!opencv-matrix
rows: 3
cols: 3
dt: d
data: [245.96, 0, 318.423, 0, 245.793, 195.635, 0.0, 0.0, 1.0]
LEFT.R: !!opencv-matrix
rows: 3
cols: 3
dt: d
data: [0.999988, 0.0036888, -0.00331281, -0.00368906, 0.999993, -7.24943e-05, 0.00331252, 8.47145e-05, 0.999995]
LEFT.Rf: !!opencv-matrix
rows: 3
cols: 3
dt: f
data: [1, 0,0,0,1, 0, 0,0,1]
LEFT.P: !!opencv-matrix
rows: 3
cols: 4
dt: d
data: [260.561, 0, 317.946, 0, 0, 260.561, 195.495, 0, 0, 0, 1, 0]
RIGHT.height: 400
RIGHT.width: 640
RIGHT.D: !!opencv-matrix
rows: 1
cols: 5
dt: d
data:[-0., 0.0, -0.00, 0, 0.0]
RIGHT.K: !!opencv-matrix
rows: 3
cols: 3
dt: d
data: [245.861, 0, 312.777, 0, 246.03, 195.784, 0.0, 0.0, 1]
RIGHT.R: !!opencv-matrix
rows: 3
cols: 3
dt: d
data: [0.999915, -0.00648092, -0.011273, 0.00648181, 0.999979, 4.20702e-05, 0.0112724, -0.000115136, 0.999936]
RIGHT.P: !!opencv-matrix
rows: 3
cols: 4
dt: d
data: [260.561, 0, 317.946 ,-31.161, 0 ,260.561, 195.495, 0, 0, 0, 1, 0]
#--------------------------------------------------------------------------------------------
# ORB Parameters
#--------------------------------------------------------------------------------------------
# ORB Extractor: Number of features per image
ORBextractor.nFeatures: 2400
# ORB Extractor: Scale factor between levels in the scale pyramid
ORBextractor.scaleFactor: 1.2
# ORB Extractor: Number of levels in the scale pyramid
ORBextractor.nLevels: 8
# ORB Extractor: Fast threshold
# Image is divided in a grid. At each cell FAST are extracted imposing a minimum response.
# Firstly we impose iniThFAST. If no corners are detected we impose a lower value minThFAST
# You can lower these values if your images have low contrast
ORBextractor.iniThFAST: 20
ORBextractor.minThFAST: 7
#--------------------------------------------------------------------------------------------
# Viewer Parameters
#--------------------------------------------------------------------------------------------
Viewer.KeyFrameSize: 0.05
Viewer.KeyFrameLineWidth: 1
Viewer.GraphLineWidth: 0.9
Viewer.PointSize: 2
Viewer.CameraSize: 0.08
Viewer.CameraLineWidth: 3
Viewer.ViewpointX: 0
Viewer.ViewpointY: -0.7
Viewer.ViewpointZ: -1.8
Viewer.ViewpointF: 500
运行结果,如下:
总 结
标定相机+IMU的闲暇时间写下该帖,如有错误欢迎指正交流。
参 考
2.ubuntu20.04编译运行ORB_SLAM3(含ROS版)_error: conversion from ‘sophus::se3f’ {aka ‘sophus-CSDN博客文章浏览阅读460次,点赞3次,收藏8次。ORBSLAM3编译运行记录_error: conversion from ‘sophus::se3f’ {aka ‘sophus::se3’} to non-https://blog.csdn.net/m0_49066914/article/details/131785030?spm=1001.2014.3001.55063. ROS平台下INDEMIND双目惯性模组SDK教程_indemind imu-CSDN博客文章浏览阅读556次。实验室做视觉SLAM需要IMU相机,购入INDEMIND双目惯性模组运行多模态融合的感知定位。双目惯性模组 SDK1.4.2 版本改进了不少,官网上关于ROS环境下的教程十分简略,直接按照官网的步骤无法实现相机数据读取并发布到指定的topic上,于是把自己的安装过程记录下来,方便以后查阅。_indemind imuhttps://blog.csdn.net/Prototype___/article/details/129717553?spm=1001.2014.3001.5506