草庐IT

Ubuntu20.04的ROS环境安装ORB-SLAM3详解

极客范儿 2023-10-21 原文

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

文章目录

一、配置版本信息

系统版本
ubuntu20.04
Pangolin0.6
Eigen3
Opencv4.2
usb_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

2、小鱼安装

小鱼老师把国外关于ROS的库放到了自己的服务器上,所以只用向他的服务器发送命令就能快速安装

安装ROS系统配置比较复杂,Ubuntu20.04对应ROS版本为noetic,推荐使用小鱼老师的一键安装、配置ROS的代码

wget http://fishros.com/install -O fishros && bash fishros


平时使用都是ROS1,ROS2是ROS1的改进版本,支持多机,分布式,暂时不会使用。


四、环境配置

1、安装库

(1)安装git,g++

sudo apt-get install git
sudo apt install g++

建议先安装ROS中的cv_bridgelibopencv-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

③安装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


由于noekit的自带libopencv版本是4.2.0,如果安装opencv3会出现版本冲突使编译不通过。如果安装opencv4但不是4.2.0依然会产生冲突,但编译能够通过,但运行时会出现核心已转储的问题。所以建议直接安装和libopencv一样的版本,小鱼的ROS已经自带OpenCV4.2.0,所以只需要挑着安装即可

(4)安装EIGEN库

sudo apt-get install libeigen3-dev

(5)安装Pangolin库

①下载Pangolin 0.6

解压到主目录,重新命名为Pangolin

②安装依赖项
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

③编译安装
cd Pangolin 
mkdir build && cd build
cmake -DCPP11_NO_BOOST=1 ..
make

sudo make install

④验证
cd ../examples/HelloPangolin
mkdir build && cd build
cmake ..

make
./HelloPangolin
#成功会弹出如下窗口


(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

(2)修改源文件

①ORB_SLAM3下CMakeLists.txt

  • 第20行 c++11
 set(CMAKE_CXX_STANDARD 14)

  • 第41行 Eigen3
find_package(Eigen3 REQUIRED)

②修改ORB_SLAM3/Examples_old/ROS/ORB_SLAM3/CMakeLists.txt

  • 第12、13行,去掉-march=native,避免运行一段时间后核心已转储的问题

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)修改

find_package(Eigen3 REQUIRED)
  • 第20行,std=c++11

 set(CMAKE_CXX_STANDARD 14)
  • 第33行OpenCV版本

find_package(OpenCV 4.2.0 REQUIRED)
  • 修改ORB_SLAM3/Thirdparty/DBoW2 /CMakeLists.txt

去掉-march=native,避免运行一段时间后核心已转储的问题

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,避免运行一段时间后核心已转储的问题

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)修改

find_package(Eigen3 REQUIRED)

(3)安装python2.7

sudo apt install libpython2.7-dev

(4)添加ROS环境

①在编译ros版本时候需要初始化ROS,在**~/.bashrc的最后一行加入以下代码

sudo gedit ~/.bashrc
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home/geekfanr/workspace/ORB_SLAM3/Examples/ROS
#保存退出
source ~/.bashrc


②再打开一个终端运行

如果能正确显示刚刚加入的地址则正常

ROS中使用许多工具前,要求需要初始化rosdep(可以安装系统依赖),rosdep 的初始化与更新

小鱼基于rosdep源码制作了rosdepc,专门服务国内ROS用户

sudo pip install rosdepc

(5)编译

①编译ORB-SLAM3

cd ORB_SLAM3
chmod +x build.sh
./build.sh


②编译ROS下ORB-SLAM3

五、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

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

这里注意,如果是虚拟机运行,需要把USB控制器的USB兼容性给为USB 3.1

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’)


找到标定结果文件后,按照其数据修改Examples_Old/ROS/ORB_SLAM3目录下Asus.yaml

6、数据保存

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

(2)点击commit按钮,提交数据并退出程序,可以看到提示写入文件head_camera.yaml

writing calibration data to /home/geekfanr/.ros/camera_info/head_camera.yaml

(3)修改Asus.yaml

找到标定结果文件后,按照其数据修改Examples_Old/ROS/ORB_SLAM3目录下Asus.yaml

(4)相机矩阵参数

由于OpenCV标定出来的文件,畸变参数好像和ORB-SLAM2使用的畸变参数略有不同,这里先不填,只填上相机矩阵的参数。

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();


(2)执行单目实时usb_cam效果

rosrun ORB_SLAM3 Mono Vocabulary/ORBvoc.txt Examples/Monocular/EuRoC.yaml

六、总结

目前能够编译运行诸如此类的特征法SLAM开源项目了,虽然初学经历了各种尝试,但是熟悉了Linux系统和ROS系统的操作、cmake、shell、OpenCV等等,为了能够自己进行开发,还需要更深入的学习。

从开源项目入手,学习其理论和工程实现,是入门的捷径,只有看懂的代码才改的动代码,深入之后在其基础上做一定的改进。

工程实现只是科研的一部分,作为研究生,更重要的是抓住SLAM中的一个小问题,看看能否对现有的算法进行改进或者比较。所以还是要从论文出发,寻找灵感,去实现,并验证效果。

有关Ubuntu20.04的ROS环境安装ORB-SLAM3详解的更多相关文章

  1. ruby - 如何在 Ubuntu 中清除 Ruby Phusion Passenger 的缓存? - 2

    我试过重新启动apache,缓存的页面仍然出现,所以一定有一个文件夹在某个地方。我没有“公共(public)/缓存”,那么我还应该查看哪些其他地方?是否有一个URL标志也可以触发此效果? 最佳答案 您需要触摸一个文件才能清除phusion,例如:touch/webapps/mycook/tmp/restart.txt参见docs 关于ruby-如何在Ubuntu中清除RubyPhusionPassenger的缓存?,我们在StackOverflow上找到一个类似的问题:

  2. Vscode+Cmake配置并运行opencv环境(Windows和Ubuntu大同小异) - 2

    之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m

  3. 在VMware16虚拟机安装Ubuntu详细教程 - 2

    在VMware16.2.4安装Ubuntu一、安装VMware1.打开VMwareWorkstationPro官网,点击即可进入。2.进入后向下滑动找到Workstation16ProforWindows,点击立即下载。3.下载完成,文件大小615MB,如下图:4.鼠标右击,以管理员身份运行。5.点击下一步6.勾选条款,点击下一步7.先勾选,再点击下一步8.去掉勾选,点击下一步9.点击下一步10.点击安装11.点击许可证12.在百度上搜索VM16许可证,复制填入,然后点击输入即可,亲测有效。13.点击完成14.重启系统,点击是15.双击VMwareWorkstationPro图标,进入虚拟机主

  4. kvm虚拟机安装centos7基于ubuntu20.04系统 - 2

    需求:要创建虚拟机,就需要给他提供一个虚拟的磁盘,我们就在/opt目录下创建一个10G大小的raw格式的虚拟磁盘CentOS-7-x86_64.raw命令格式:qemu-imgcreate-f磁盘格式磁盘名称磁盘大小qemu-imgcreate-f磁盘格式-o?1.创建磁盘qemu-imgcreate-fraw/opt/CentOS-7-x86_64.raw10G执行效果#ls/opt/CentOS-7-x86_64.raw2.安装虚拟机使用virt-install命令,基于我们提供的系统镜像和虚拟磁盘来创建一个虚拟机,另外在创建虚拟机之前,提前打开vnc客户端,在创建虚拟机的时候,通过vnc

  5. ruby - ri 有空文件 – Ubuntu 11.10, Ruby 1.9 - 2

    我正在运行Ubuntu11.10并像这样安装Ruby1.9:$sudoapt-getinstallruby1.9rubygems一切都运行良好,但ri似乎有空文档。ri告诉我文档是空的,我必须安装它们。我执行此操作是因为我读到它会有所帮助:$rdoc--all--ri现在,当我尝试打开任何文档时:$riArrayNothingknownaboutArray我搜索的其他所有内容都是一样的。 最佳答案 这个呢?apt-getinstallri1.8编辑或者试试这个:(非rvm)geminstallrdocrdoc-datardoc-da

  6. ruby - 在 Ubuntu 14.04 中使用 Curl 安装 RVM 时出错 - 2

    我试图在Ubuntu14.04中使用Curl安装RVM。我运行了以下命令:\curl-sSLhttps://get.rvm.io|bash-sstable出现如下错误:curl:(7)Failedtoconnecttoget.rvm.ioport80:Networkisunreachable非常感谢解决此问题的任何帮助。谢谢 最佳答案 在执行curl之前尝试这个:echoipv4>>~/.curlrc 关于ruby-在Ubuntu14.04中使用Curl安装RVM时出错,我们在Stack

  7. ruby - rails 3.2.2(或 3.2.1)+ Postgresql 9.1.3 + Ubuntu 11.10 连接错误 - 2

    我正在使用PostgreSQL9.1.3(x86_64-pc-linux-gnu上的PostgreSQL9.1.3,由gcc-4.6.real(Ubuntu/Linaro4.6.1-9ubuntu3)4.6.1,64位编译)和在ubuntu11.10上运行3.2.2或3.2.1。现在,我可以使用以下命令连接PostgreSQLsupostgres输入密码我可以看到postgres=#我将以下详细信息放在我的config/database.yml中并执行“railsdb”,它工作正常。开发:adapter:postgresqlencoding:utf8reconnect:falsedat

  8. ruby-on-rails - Ubuntu 14.04 Rails 丢失文件 - 2

    安装Rails时,一切都很好,但后来,我写道:rails-v和输出:/home/toshiba/.rvm/rubies/ruby-2.2.1/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in`require':cannotloadsuchfile--rails/cli(LoadError)from/home/toshiba/.rvm/rubies/ruby-2.2.1/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in`r

  9. 物联网MQTT协议详解 - 2

    一、什么是MQTT协议MessageQueuingTelemetryTransport:消息队列遥测传输协议。是一种基于客户端-服务端的发布/订阅模式。与HTTP一样,基于TCP/IP协议之上的通讯协议,提供有序、无损、双向连接,由IBM(蓝色巨人)发布。原理:(1)MQTT协议身份和消息格式有三种身份:发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。MQTT传输的消息分为:主题(Topic)和负载(payload)两部分Topic,可以理解为消息的类型,订阅者订阅(Su

  10. Tcl脚本入门笔记详解(一) - 2

    TCL脚本语言简介•TCL(ToolCommandLanguage)是一种解释执行的脚本语言(ScriptingLanguage),它提供了通用的编程能力:支持变量、过程和控制结构;同时TCL还拥有一个功能强大的固有的核心命令集。TCL经常被用于快速原型开发,脚本编程,GUI和测试等方面。•实际上包含了两个部分:一个语言和一个库。首先,Tcl是一种简单的脚本语言,主要使用于发布命令给一些互交程序如文本编辑器、调试器和shell。由于TCL的解释器是用C\C++语言的过程库实现的,因此在某种意义上我们又可以把TCL看作C库,这个库中有丰富的用于扩展TCL命令的C\C++过程和函数,所以,Tcl是

随机推荐