Ubuntu 20.04 安装 ORB_SLAM3(包含ROS版)

这篇博客详细介绍了在Ubuntu20.04上安装Eigen3、OpenCV、Pangolin、realsense2以及ORB_SLAM3的步骤,并提供了ROS版本的ORB_SLAM3的安装和示例。通过修改CMakeLists.txt和配置环境变量,使得ORB_SLAM3能在ROS Noetic环境下运行。此外,还展示了如何使用ROS播放EuRoC数据集并运行ORB_SLAM3进行视觉惯性导航。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、普通版本

1. Eigen3

# 默认版本是3.3.7
sudo apt install libeigen3-dev

2. OpenCV

# 默认版本是 4.2.0
sudo apt install libopencv-dev

3. Pangolin

官网 下载稳定版本V0.6(master版本与其他库使用时出错)。安装指令如下所示:

# 安装依赖项
sudo apt-get install libglew-dev doxygen
sudo apt-get install libboost-dev libboost-thread-dev libboost-filesystem-dev
sudo apt-get install ffmpeg libavcodec-dev libavutil-dev libavformat-dev libswscale-dev
sudo apt-get install libpng-dev
# 解压缩后
cd Pangolin 
mkdir build && cd build
cmake ..
make -j
sudo make install

realsense2(选装)

# 注册public key
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE || sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE
# 添加apt源
 sudo add-apt-repository "deb https://librealsense.intel.com/Debian/apt-repo $(lsb_release -cs) main" -u
# 安装
sudo apt install librealsense2-dkms librealsense2-utils librealsense2-dev

4. ORB_SLAM3

# 下载
git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git ORB_SLAM3
# 编译
cd ORB_SLAM3
chmod +x build.sh
./build.sh

5. EuRoC 示例

5.1 下载数据包

打开官网,下载如图所示的多个数据包。
在这里插入图片描述下载完成后解压缩,如下图所示
在这里插入图片描述按Ctrl+L可查看数据文件夹当前路径,我这里是/media/cgnerds/ECA4B49EA4B46D28/Data/EuRoC,在ORB_SLAM3根目录下建立datasets文件夹,打开终端,输入如下命令建立软链接。

ln -s /media/cgnerds/ECA4B49EA4B46D28/Data/EuRoC EuRoC

建立完成后如下所示:
在这里插入图片描述

5.2 单一数据包示例

在Examples文件夹下,打开终端,输入如下命令。

./Monocular-Inertial/mono_inertial_euroc ../Vocabulary/ORBvoc.txt ./Monocular-Inertial/EuRoC.yaml ../datasets/EuRoC/MH_01_easy ./Monocular-Inertial/EuRoC_TimeStamps/MH01.txt dataset-MH01_monoi

在这里插入图片描述

5.3 多个数据包示例

./Monocular-Inertial/mono_inertial_euroc ../Vocabulary/ORBvoc.txt ./Monocular-Inertial/EuRoC.yaml ../datasets/EuRoC/MH_01_easy ./Monocular-Inertial/EuRoC_TimeStamps/MH01.txt ../datasets/EuRoC/MH_02_easy ./Monocular-Inertial/EuRoC_TimeStamps/MH02.txt ../datasets/EuRoC/MH_03_medium ./Monocular-Inertial/EuRoC_TimeStamps/MH03.txt ../datasets/EuRoC/MH_04_difficult ./Monocular-Inertial/EuRoC_TimeStamps/MH04.txt ../datasets/EuRoC/MH_05_difficult ./Monocular-Inertial/EuRoC_TimeStamps/MH05.txt dataset-MH01_to_MH05_monoi

在这里插入图片描述

二、ROS版本

1. ROS安装

按照官网安装。首先设置raw.githubusercontent.com。

# 在终端运行如下命令,打开hosts文件
sudo gedit /etc/hosts
# 在打开的文件添加如下行,添加完成后关闭
199.232.68.133  raw.githubusercontent.com
# 在终端运行如下命令,添加source.list
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
# 设置key
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654

如果返回OK,则说明设置成功。
在这里插入图片描述正式安装

sudo apt update
sudo apt install ros-noetic-desktop-full
# 在使用ROS的每个bash终端中获取此脚本的源代码
# 环境配置(二选一即可)
## Bash
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
## zsh
echo "source /opt/ros/noetic/setup.zsh" >> ~/.zshrc
source ~/.zshrc
# 安装工具
sudo apt install python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential
sudo rosdep init
rosdep update

2. ORB_SLAM3 ROS版本编译

修改 Examples/ROS/ORB_SLAM3 下的 CMakeLists.txt 中的OpenCV 版本为 4.0,如下所示:
在这里插入图片描述
设置

# 将  Examples/ROS/ORB_SLAM3 添加到环境变量 ROS_PACKAGE_PATH
gedit ~/.zshrc
# 将 PATH替换为ORB_SLAM3路径,再将以下语句添加到 ~/.zshrc 末尾
source /opt/ros/noetic/setup.zsh
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home/cgnerds/Dev/ORB_SLAM3/ORB_SLAM3/Examples/ROS

设置如下所示:
在这里插入图片描述编译

# 执行build_ros.sh 脚本
chmod +x build_ros.sh
./build_ros.sh

在这里插入图片描述

3. ROS示例

3.1 查看数据集topic信息

在数据集路径下打开终端,输入如下命令

rosbag info MH_01_easy.bag  

输出如下:
在这里插入图片描述
根据topics信息,修改 ros_mono_inertial.cc 文件中的相应代码,如下所示

  ros::Subscriber sub_imu = n.subscribe("/imu0", 1000, &ImuGrabber::GrabImu, &imugb);
  ros::Subscriber sub_img0 = n.subscribe("/cam0/image_raw", 100, &ImageGrabber::GrabImage, &igb);

之后再次编译

3.2 运行

打开第一个终端,启动roscore,如下所示

roscore

打开第二个终端,在Example文件夹下执行

rosrun ORB_SLAM3 Mono_Inertial ../Vocabulary/ORBvoc.txt ./Monocular-Inertial/EuRoC.yaml

打开第三个终端,在数据集文件夹下执行

rosbag play MH_01_easy.bag 

运行时,如下所示:
在这里插入图片描述

参考链接:Ubuntu 20.04 安装 ROS Noetic

### 配置 ORB-SLAM3 的方法 #### 安装依赖项 为了成功配置和运行 ORB-SLAM3,在 Ubuntu 20.04 上需先安装必要的依赖包。这包括但不限于 OpenCV、Eigen 和 Pangolin 库。 ```bash sudo apt-get update sudo apt-get install -y \ cmake git libopencv-dev \ libeigen3-dev libsuitesparse-dev \ libboost-bridge ros-noetic-image-transport ``` #### 下载并构建 ORB-SLAM3 获取源码仓库后,进入项目根目录完成编译工作: ```bash git clone https://github.com/UZI-CVSLAB/ORBSLAM3.git ~/workspace/orbslam3 cd ~/workspace/orbslam3 chmod +x build.sh ./build.sh ``` 对于希望集成 ROS 支持的情况,则应按照特定说明调整 CMakeLists 文件,并执行额外脚本以适应 ROS 环境设置[^3]。 #### 解决常见错误 当遇到 Sophus 类型转换至 `cv::Mat` 错误时,可以尝试如下方式解决此问题: 在文件 `/home/polaris/workspace/ORB_SLAM3/Examples_old/ROS/ORB_SLAM3/src/AR/ros_mono_ar.cc` 中第151行附近做出适当更改来处理数据类型不匹配的问题[^4]: ```cpp // 修改前 cv::Mat Tcw = mpSLAM->TrackMonocular(cv_ptr->image, cv_ptr->header.stamp.toSec()); // 修改建议之一 (假设Tcw是一个变换矩阵) cv::Mat Rwc(3, 3, CV_32F); // Rotation component as a float matrix cv::Mat twc(3, 1, CV_32F); // Translation vector as a column of floats auto Twc_se3f = mpSLAM->GetCameraPose(); // Assuming this returns SE3<float> for(int i=0;i<3;++i){ for(int j=0;j<3;++j){ Rwc.at<float>(i,j)=Twc_se3f.rotation_matrix()(i,j); } twc.at<float>(i)=Twc_se3f.translation()[i]; } cv::Mat Tcw; cv::hconcat(Rwc,twc,Tcw); // Combine rotation and translation into one Mat object ```
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值