金歌 发表于 2024-10-24 04:26:59

Ubuntu20.04的ROS情况安装ORB-SLAM3详解

视觉SLAM实验要在Ubuntu20.04系统上利用ROS跑ORB-SLAM3,认识一下特征点法的SLAM,把安装过程总结纪录下来。


一、配置版本信息

系统版本ubuntu20.04Pangolin0.6Eigen3Opencv4.2usb_cam 二、更换镜像源

# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse

# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
实行命令更新源
sudo apt-get update
sudo apt-get upgrade
三、安装ROS情况

1、ROS简介

ROS全称Robot Operating System(呆板人操作系统)


[*]ROS是适用于呆板人的开源元操作系统
[*]ROS集成了大量的工具,库,协议,提供雷同OS所提供的功能,简化对呆板人的控制
[*]还提供了用于在多台计算机上获取,构建,编写和运行代码的工具和库,ROS在某些方面雷同于"呆板人框架”
[*]ROS计划者将ROS表述为“ROS = Plumbing + Tools + Capabilities + Ecosystem",即ROS是通讯机制、工具软件包、呆板人高层技能以及呆板人生态系统的聚集体
   http://www.autolabor.com.cn/book/ROSTutorials/index.html
https://i-blog.csdnimg.cn/blog_migrate/2770550a95d8b662fe0009e75311a454.png#pic_center
2、小鱼安装

小鱼老师把国外关于ROS的库放到了本身的服务器上,所以只用向他的服务器发送命令就能快速安装
安装ROS系统配置比较复杂,Ubuntu20.04对应ROS版本为noetic,推荐利用小鱼老师的一键安装、配置ROS的代码
wget http://fishros.com/install -O fishros && bash fishros
https://i-blog.csdnimg.cn/blog_migrate/1efd7a9b15e56a0847d326e683226e6e.jpeg#pic_center
平时利用都是ROS1,ROS2是ROS1的改进版本,支持多机,分布式,暂时不会利用。
https://i-blog.csdnimg.cn/blog_migrate/a9fcbf035686dc7931aacc04fc694afc.jpeg#pic_center
https://i-blog.csdnimg.cn/blog_migrate/1ca0300d5fa19aea953306ffe49ff410.jpeg#pic_center
四、情况配置

1、安装库

(1)安装git,g++

sudo apt-get install git
sudo apt install g++
发起先安装ROS中的cv_bridge和libopencv-dev,再安装和libopencv版本号一样的opencv库,这样可以避免opencv的版本辩论题目。
(2)安装cv_bridge库

sudo apt-get install libopencv-dev
sudo apt-get install ros-noekit-cv-bridge
(3)安装Opencv

①安装依赖项

sudo apt-get install build-essential libgtk2.0-dev libgtk-3-dev libavcodec-dev libavformat-dev libjpeg-dev libswscale-dev libtiff5-dev
sudo apt install python3-dev python3-numpy
sudo apt install libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev
sudo apt install libpng-dev libopenexr-dev libtiff-dev libwebp-dev
②下载Opencv源文件

解压至主目录,重新命名:opencv
https://i-blog.csdnimg.cn/blog_migrate/f92ca94f83e2f4bcda6685327a10df32.jpeg#pic_center
③安装OpenCV

cd opencv
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=Release -D OPENCV_GENERATE_PKGCONFIG=YES ..
make -j16
sudo make install


④查看版本号

pkg-config --modversion opencv4
https://i-blog.csdnimg.cn/blog_migrate/a0c411b460ab44f23f65c9f174f8d974.jpeg#pic_center
由于noekit的自带libopencv版本是4.2.0,假如安装opencv3会出现版本辩论使编译不通过。假如安装opencv4但不是4.2.0依然会产生辩论,但编译可以大概通过,但运行时会出现焦点已转储的题目。所以发起直接安装和libopencv一样的版本,小鱼的ROS已经自带OpenCV4.2.0,所以只须要挑着安装即可
(4)安装EIGEN库

sudo apt-get install libeigen3-dev
https://i-blog.csdnimg.cn/blog_migrate/94a148c57dbe473c689505a70c8eaea5.jpeg#pic_center
(5)安装Pangolin库

①下载Pangolin 0.6

解压到主目录,重新命名为Pangolin
https://i-blog.csdnimg.cn/blog_migrate/35ef023d71a8b10f82f4d958fe825795.jpeg#pic_center
②安装依赖项

sudo apt-get install libglew-dev libboost-dev libboost-thread-dev libboost-filesystem-dev
sudo apt-get install ffmpeg libavcodec-dev libavutil-dev libavformat-dev libswscale-dev libpng-dev
https://i-blog.csdnimg.cn/blog_migrate/3418b8a2fe9db58bec20eaf692c42922.jpeg#pic_center
③编译安装

cd Pangolin
mkdir build && cd build
cmake -DCPP11_NO_BOOST=1 ..
make
https://i-blog.csdnimg.cn/blog_migrate/79687100bfc9ff0eb784831b77174add.jpeg#pic_center
sudo make install
https://i-blog.csdnimg.cn/blog_migrate/f2b77dc66d9275d57eba33a9b679689e.jpeg#pic_center
④验证

cd ../examples/HelloPangolin
mkdir build && cd build
cmake ..
https://i-blog.csdnimg.cn/blog_migrate/223e5e11e2abb699a8cc3f661170a95e.jpeg#pic_center
make
./HelloPangolin
#成功会弹出如下窗口
https://i-blog.csdnimg.cn/blog_migrate/b942a4ae2d3797a932401c2c71266437.jpeg#pic_center
https://i-blog.csdnimg.cn/blog_migrate/f6ee8fc49d5be8be6d0f8bcdfc1d2a44.jpeg#pic_center
(6)安装Boost库

①这里非常坑,官网上的依赖没有boost,但假如不安装boost会报许多的关于c++的错误,而且无法定位
②进入boost官网网址:http://www.boost.org/users/download/
③解压编译安装
tar -xvf boost_1_77_0.tar.gz
cd ./boost_1_77_0
./bootstrap.sh
sudo ./b2 install
2、ORB-SLAM3编译

(1)下载ORB-SLAM3

git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git
https://i-blog.csdnimg.cn/blog_migrate/4133a06082dbef23bd2471f6dacfe3a8.jpeg#pic_center
(2)修改源文件

①ORB_SLAM3下CMakeLists.txt
https://i-blog.csdnimg.cn/blog_migrate/563a1b7b978e934e17bd652661c5ceb4.jpeg#pic_center


[*]第20行 c++11
set(CMAKE_CXX_STANDARD 14)

https://i-blog.csdnimg.cn/blog_migrate/28354caf895948ed5d8da05f2a50b8dd.jpeg#pic_center


[*]第41行 Eigen3
find_package(Eigen3 REQUIRED)


https://i-blog.csdnimg.cn/blog_migrate/5d39abdfcc62167ed9741023fb756112.jpeg#pic_center
②修改ORB_SLAM3/Examples_old/ROS/ORB_SLAM3/CMakeLists.txt
https://i-blog.csdnimg.cn/blog_migrate/46f3fd6ff8d92a80ebdf1ffbcbe109df.jpeg#pic_center


[*]第12、13行,去掉-march=native,避免运行一段时间后焦点已转储的题目
https://i-blog.csdnimg.cn/blog_migrate/f1ef8740dbaf73e021965559b36a3d77.jpeg#pic_center
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}-Wall-O3")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall   -O3")
第41行,将find_package(Eigen3 3.1.0 REQUIRED)修改
https://i-blog.csdnimg.cn/blog_migrate/cc7cceeb34f0234d0ceee42dfa33c5b6.jpeg#pic_center
find_package(Eigen3 REQUIRED)




[*]第20行,std=c++11
https://i-blog.csdnimg.cn/blog_migrate/7667f524b8b1b9d8569d83a42be69d1d.jpeg#pic_center
set(CMAKE_CXX_STANDARD 14)



[*]第33行OpenCV版本
https://i-blog.csdnimg.cn/blog_migrate/d776a920c698c76ab3deaa58fc086d50.jpeg#pic_center
find_package(OpenCV 4.2.0 REQUIRED)


[*]修改ORB_SLAM3/Thirdparty/DBoW2 /CMakeLists.txt
去掉-march=native,避免运行一段时间后焦点已转储的题目https://i-blog.csdnimg.cn/blog_migrate/e25bf22389d1c998556ca4488b93dc19.jpeg#pic_center
https://i-blog.csdnimg.cn/blog_migrate/8f9f57495ae1c17209cf961e755e34b9.jpeg#pic_center
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}-Wall-O3")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall   -O3")


[*]修改ORB_SLAM3/Thirdparty/g2o/CMakeLists.txt
去掉-march=native,避免运行一段时间后焦点已转储的题目
https://i-blog.csdnimg.cn/blog_migrate/bd906879581a096b62807d732dfe7b5e.jpeg#pic_center
https://i-blog.csdnimg.cn/blog_migrate/70f22c20c6ba537c6c42ae1bb753848d.jpeg#pic_center
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}-Wall-O3")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall   -O3")
将find_package(Eigen3 3.1.0 REQUIRED)修改
https://i-blog.csdnimg.cn/blog_migrate/efc8c72a0c42ea9e403e063cc703e435.jpeg#pic_center
find_package(Eigen3 REQUIRED)


(3)安装python2.7

sudo apt install libpython2.7-dev
https://i-blog.csdnimg.cn/blog_migrate/398024b145bb0b8120e56c588bd8aa39.jpeg#pic_center
(4)添加ROS情况

①在编译ros版本时间须要初始化ROS,在**~/.bashrc的最后一行加入以下代码
sudo gedit ~/.bashrc
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home/geekfanr/workspace/ORB_SLAM3/Examples/ROS
#保存退出
source ~/.bashrc
https://i-blog.csdnimg.cn/blog_migrate/68683be828764f06fcc88a95d7c6a376.jpeg#pic_center
②再打开一个终端运行
echo ${ROS_PACKAGE_PATH}
https://i-blog.csdnimg.cn/blog_migrate/04fec305baad35f6acf7385b4cd79cd9.jpeg#pic_center
假如能精确表现刚刚加入的所在则正常
   ROS中利用许多工具前,要求须要初始化rosdep(可以安装系统依赖),rosdep 的初始化与更新
小鱼基于rosdep源码制作了rosdepc,专门服务国内ROS用户
sudo pip install rosdepc
(5)编译

①编译ORB-SLAM3
cd ORB_SLAM3
chmod +x build.sh
./build.sh
https://i-blog.csdnimg.cn/blog_migrate/9e3f4f4cb05ef78aa61472a11fdff7c5.jpeg#pic_center
②编译ROS下ORB-SLAM3
cd ORB_SLAM3
chmod +x build_ros.sh
./build_ros.sh
https://i-blog.csdnimg.cn/blog_migrate/70fbc2892600f9dd28b798ccbaf20b38.jpeg#pic_center
五、ORB-SLAM3运行

1、创建工作目录

mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/
src
catkin_init_workspace
cd ~/catkin_ws/

catkin_make
source ~/catkin_ws/devel/setup.bash
https://i-blog.csdnimg.cn/blog_migrate/f1d430726165c90201ea7a7c9b28e4ad.jpeg#pic_center
2、安装usb_cam

cd catkin_ws/src
git clone https://github.com/bosch-ros-pkg/usb_cam.git
cd ..
ctakin_make
source ./devel/setup.bash
3、编译usb_cam

cd~/catkin_ws/src/usb_cam
mkdir build
cd build
cmake ..
make
4、测试usb摄像头

打开新终端,运行ROS
roscore
cd ~/catkin_ws/
回到原终端运行launch文件
source devel/setup.bash
roslaunch usb_cam usb_cam-test.launch
https://i-blog.csdnimg.cn/blog_migrate/a0484dbefe84f8ef5fbe378eb422829f.jpeg#pic_center
   这里注意,假如是虚拟机运行,须要把USB控制器的USB兼容性给为USB 3.1
https://i-blog.csdnimg.cn/blog_migrate/0ef18d2eb9dcadfeb6546c48cff5c2c0.jpeg#pic_center
5、相机标定

(1)安装v4l2

sudo apt-get install v4l-utils
(2)张正友相机标定方法

在ROS中已经集成了对相机完成标定以及畸变矫正的整个流程,用起来非常方便。通常利用张正友相机标定方法,即利用平面坐标的单应性关系,流程简便
(3)8×6的角点

黑白棋盘格是由9×7的黑白格构成,但是利用时仅仅用到内部交点数即8×6的角点
rosrun camera_calibration cameracalibrator.py –size 8×6 –square 0.03 image:=/usb_cam/image_raw
(4)生存标定效果

注意标定过程中左右,上下,前后,对角方向前后倾斜标定板,这样使得右边X,Y,Size,Skew变成绿色后,CALIBRATE按钮变为蓝色,然后点击(等上半分钟左右)变为下面三个按钮都可以点击,依次点击SAVE(生存)和COMMIT(提交)到相机配置文件中。即可将标定效果生存至当地。
(5)标定效果文件calibrationdata.tar.gz

点击SAVE之后:(‘Wrote calibration data to’, ‘/tmp/calibrationdata.tar.gz’)
https://i-blog.csdnimg.cn/blog_migrate/8cbc88be0105d6e9de6672a181eefebe.jpeg#pic_center
找到标定效果文件后,按照其数据修改Examples_Old/ROS/ORB_SLAM3目录下Asus.yaml
6、数据生存

(1)点击save按钮,终端会打印生成文件及路径(计算机目录/tmp下)

https://i-blog.csdnimg.cn/blog_migrate/ced341733acf40ffc34ee051d8f83e60.jpeg#pic_center
(2)点击commit按钮,提交数据并退出程序,可以看到提示写入文件head_camera.yaml

writing calibration data to /home/geekfanr/.ros/camera_info/head_camera.yaml
https://i-blog.csdnimg.cn/blog_migrate/00a30ea35214840372f2877a775a62e4.jpeg#pic_center
(3)修改Asus.yaml

找到标定效果文件后,按照其数据修改Examples_Old/ROS/ORB_SLAM3目录下Asus.yaml
https://i-blog.csdnimg.cn/blog_migrate/84ebcfa8bd898c9c69ef5817e19933ca.jpeg#pic_center
https://i-blog.csdnimg.cn/blog_migrate/4e052a8d11c8280a250617cbc93cdf81.jpeg#pic_center
(4)相机矩阵参数

由于OpenCV标定出来的文件,畸变参数好像和ORB-SLAM2利用的畸变参数略有差别,这里先不填,只填上相机矩阵的参数。
https://i-blog.csdnimg.cn/blog_migrate/2014b0f2058fe7ca46648373ebf1dcda.jpeg#pic_center
7、运行ROS下ORB-SLAM3

(1)接收话题名称更改

在运行程序之前,须要将ORB_SLAM3/Examples_Old/ROS/ORB_SLAM3/src/ros_mono.cc和ORB_SLAM3/Examples_Old/ROS/ORB_SLAM3/src/AR/ros_mono_ar.cc的接收话题名称更改
ros::NodeHandle nodeHandler;
ros::Subscriber sub = nodeHandler.subscribe("/usb_cam/image_raw", 1, &ImageGrabber::GrabImage,&igb);
ros::spin();
https://i-blog.csdnimg.cn/blog_migrate/3a9a1414ee34ce4eb9d4985aaa5d7155.jpeg#pic_center
https://i-blog.csdnimg.cn/blog_migrate/12ef63766186ad4c645cca85e36f3493.jpeg#pic_center
(2)实行单目实时usb_cam效果

rosrun ORB_SLAM3 Mono Vocabulary/ORBvoc.txt Examples/Monocular/EuRoC.yaml
https://i-blog.csdnimg.cn/blog_migrate/71b00def8efca8e5e27ba97989a74a5c.jpeg#pic_center
六、总结

现在可以大概编译运行诸如此类的特征法SLAM开源项目了,虽然初学履历了各种尝试,但是认识了Linux系统和ROS系统的操作、cmake、shell、OpenCV等等,为了可以大概本身进行开发,还须要更深入的学习。
从开源项目入手,学习其理论和工程实现,是入门的捷径,只有看懂的代码才改的动代码,深入之后在其底子上做肯定的改进。
工程实现只是科研的一部分,作为研究生,更重要的是抓住SLAM中的一个小题目,看看可否对现有的算法进行改进大概比较。所以还是要从论文出发,寻找灵感,去实现,并验证效果。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Ubuntu20.04的ROS情况安装ORB-SLAM3详解