安装
1.Pangolin
git clone https://github.com/stevenlovegrove/Pangolin.git
cd Pangolin && mkdir build
cd build && cmake ..
cd ..
cmake -B build
cmake --build build
2.Eigen3
git clone https://github.com/eigenteam/eigen-git-mirror
cd eigen-git-mirror
mkdir build
cd build
cmake ..
sudo make install
#安装后,头文件安装在/usr/local/include/eigen3/
3.Opencv 3.4.3
打开网站,选择3.4.3, 再点击sources,下载得到.zip文件,最后解压
https://opencv.org/releases/page/5/
开始安装依赖 , 然后编译
cd opencv-3.4.3
sudo apt-get install cmake
sudo apt-get install build-essential
sudo apt-get install 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
mkdir build
cd build
cmake ..
sudo make
sudo make install
然后一堆操作
首先将OpenCV的库添加到路径,可以让系统找到
sudo gedit /etc/ld.so.conf.d/opencv.conf
在文件末尾添加
/usr/local/lib
执行如下命令使得刚才的配置路径生效:
sudo ldconfig
打开bashrc
sudo gedit /etc/bash.bashrc
在末尾添加
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
保存后,重新运行配置
source /etc/bash.bashrc
更新
sudo updatedb
找到 opencv-3.4.3/samples/cpp/example_cmake 目录下,官方已经给出了一个cmake的example,拿来测试。按顺序执行:
cmake .
make
./opencv_example
可看到打开了摄像头,在左上角有一个hello opencv ,即表示配置成功。
4.Boost
打开网站
寻找历史版本 1_77_0.zip,下载解压
cd ./boost_1_77_0
./bootstrap.sh
sudo ./b2 install
5.ORBSLAM3
git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git
cd ORB_SLAM3
chmod +x build.sh
将/ORB_SLAM3/CMakeLists.txt中第33行的
find_package(OpenCV 4.4)
改为find_package(OpenCV 3.4.3)
./build.sh
6.ORBSLAM3_ROS
6.1
gedit ~/.bashrc
在最后一行加上
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:~/ORB_SLAM3/Examples/ROS
6.2
把Examples_old下的ROS文件夹复制到Examples下
6.3
最后编译一下 (可以去修改下CMakeLists里的opencv版本,让它和主目录的统一下)
chmod +x build_ros.sh
./build_ros.sh
6.4 可能的问题
问题1:CMake Error at CMakeLists.txt:2 (include): include could not find load file: /core/ro
这是个路径问题,网上都在瞎掰掰,根本原因是使用了 sudo指令来运行./build_ros.sh,环境变量改变以至于找不到${ROS_ROOT}
解决方法:
首先在~/ORB_SLAM3/Examples/ROS/ORB_SLAM3目录下,执行清除命令(这一步很重要,我卡在这里很久。原因在于这里的build文件夹有超级用户权限,一旦不加sudo之后根本没有权限修改)
sudo rm -r build
返回~/ORB_SLAM3,重新执行 ./build_ros.sh
剩下的是常规问题,详见ORB_SLAM3 ROS编译及使用D435I运行_orbslam3 ros_云端舞步的博客-CSDN博客
使用——非ROS
1.修改对应文件
错误:terminate called after throwing an instance of 'rs2::invalid_value_error' what(): object doesn't
解决方法:
gedit ~/ORB_SLAM3/Examples/Stereo-Inertial/stereo_inertial_realsense_D435i.cc
注释掉如图位置的两行代码
./ORB_SLAM3/build.sh
2. 运行程序
./Examples/Stereo-Inertial/stereo_inertial_realsense_D435i Vocabulary/ORBvoc.txt ./Examples/Stereo-Inertial/RealSense_D435i.yaml
如果遇到提示 not enough acceleration,晃一晃相机让它有个加速度就行
使用——ROS
1.创建yaml文件
在项目文件夹下,
touch myD435i.yaml
gedit myD435i.yaml
把下面这些复制进去,保存退出(在2中进一步修改)
%YAML:1.0
#--------------------------------------------------------------------------------------------
# Camera Parameters. Adjust them!
#--------------------------------------------------------------------------------------------
Camera.type: "PinHole"
# Camera calibration and distortion parameters (OpenCV)
Camera.fx: 905.8228759765625
Camera.fy: 905.6454467773438
Camera.cx: 640.6072998046875
Camera.cy: 364.5034484863281Camera.k1: 0.0
Camera.k2: 0.0
Camera.p1: 0.0
Camera.p2: 0.0
Camera.p3: 0.0Camera.width: 720
Camera.height: 1280
# Camera frames per second
Camera.fps: 30.0# IR projector baseline times fx (aprox.)
# bf = baseline (in meters) * fx, D435i的 baseline = 50 mm
Camera.bf: 50.0
# 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: 40.0
# Deptmap values factor
DepthMapFactor: 1000.0
#--------------------------------------------------------------------------------------------
# ORB Parameters
#--------------------------------------------------------------------------------------------
# ORB Extractor: Number of features per image
ORBextractor.nFeatures: 1000
# 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
PointCloudMapping.Resolution: 0.01
meank: 50
thresh: 2.0
2.修改相机的.launch文件
在~/catkin_ws/src/realsense-ros/realsense2_camera/launch文件夹下,打开
rs_camera.launch,按图示修改这三项并保存。这样就会多出infra1和infra2话题。
然后使用命令:
roslaunch realsense2_camera rs_camera.launch
rostopic echo /camera/infra1/camera_info
得到:
K矩阵就是对应左边这个3*3的矩阵
根据K矩阵对应修改1中的myD435.yaml文件
3.修改ORB_SLAM3/Examples/ROS/ORB_SLAM3/src/ros_stereo.cc文件的订阅消息
修改110和111两行,如图
4.重新执行编译指令(这个不要忘了)
./build_ros.sh
5. 关闭结构光
roslaunch realsense2_camera rs_camera.launch
rosrun rqt_reconfigure rqt_reconfigure
打开后将camera->stereo_module中的emitter_enabled设置为off(0)
6.运行
roslaunch realsense2_camera rs_camera.launch
rosrun ORB_SLAM3 Stereo Vocabulary/ORBvoc.txt myD435i.yaml false
问题1:经常会 Fail to track local map,效果很差,不懂为什么
问题2:Segmentation fault (core dumped)
其实这不是具体的问题,沿着报错往上一行行慢慢找,找到真正的问题再去搜(你搜这个关键词是找不到解决办法的)