引言
之前实验对比都会用到ORB-SLAM3,但当时采用的都是ROS1接口,本博文先对ROS2进行安装,然后适配ORB-SLAM3
ROS2 安装
关于ros2,网上部分教程是说ubuntu20.04,可以安装Foxy,Galactic,Humble。但实际上Humble是源码编译,其支持的应该是22.04,而Galactic则并非LTS长期支持的,为此此处安装Foxy
首先打开终端,检查是否支持UTF-8
locale

此处是支持的。然后检查是否启用ubuntu Universe存储库
apt-cache policy | grep universe
## 输出应如下:
500 http://security.ubuntu.com/ubuntu focal-security/universe i386 Packages
release v=20.04,o=Ubuntu,a=focal-security,n=focal,l=Ubuntu,c=universe,b=i386
500 http://security.ubuntu.com/ubuntu focal-security/universe amd64 Packages
release v=20.04,o=Ubuntu,a=focal-security,n=focal,l=Ubuntu,c=universe,b=amd64

然后设置密钥
sudo apt update && sudo apt install curl gnupg2 lsb-release
报错如下:
E: 仓库 “http://ppa.launchpad.net/inivation-ppa/inivation-bionic/ubuntu focal Release” 没有 Release 文件。
N: 无法安全地用该源进行更新,所以默认禁用该源。
N: 参见 apt-secure(8) 手册以了解仓库创建和用户配置方面的细节。
N: 鉴于仓库 'https://packages.microsoft.com/ubuntu/20.04/prod focal InRelease' 不支持 'i386' 体系结构,跳过配置文件 'main/binary-i386/Packages' 的获取。
E: 仓库 “https://packages.microsoft.com/ubuntu/18.04/prod focal Release” 没有 Release 文件。
N: 无法安全地用该源进行更新,所以默认禁用该源。
N: 参见 apt-secure(8) 手册以了解仓库创建和用户配置方面的细节。
因此打算先配置系统软件源,设置如下:

然后再尝试,还是有部分源没拉成功,接下来采用方式如下:
- 删除错误的仓库文件:
sudo rm /etc/apt/sources.list.d/microsoft-prod.list # 默认文件名
ls /etc/apt/sources.list.d/ | grep microsoft
sudo rm /etc/apt/sources.list.d/<匹配的文件名>
# 移除 Microsoft 18.04 仓库
sudo rm -f /etc/apt/sources.list.d/microsoft-prod.list
sudo rm -f /etc/apt/sources.list.d/msprod.list
- 删除 inivation-bionic PPA:
sudo add-apt-repository --remove ppa:inivation-ppa/inivation-bionic
# 移除 inivation-bionic PPA
sudo rm -f /etc/apt/sources.list.d/inivation-ppa-ubuntu-inivation-bionic-*.list
- 清理并更新
# 检查所有源文件
ls /etc/apt/sources.list.d/
# 清除所有缓存
sudo rm -rf /var/lib/apt/lists/*
sudo apt clean
sudo apt update
然后再次安装:
sudo apt --fix-broken install
sudo apt install curl gnupg2 lsb-release
然后执行:
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(source /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
sudo apt update
sudo apt upgrade
# 推荐桌面版,注意安装时间较长,耐心等待
sudo apt install ros-foxy-desktop
但是包错如下:

先尝试手动安装被阻止的依赖
sudo apt install ros-foxy-joy ros-foxy-teleop-twist-joy
还是不行,改为用aptitude安装
sudo apt install aptitude
sudo aptitude install ros-foxy-desktop
#开始给出的选项还是会出现无法not installed, 多点几次N, aptitude会给出一个降低软件版本的修复方案, 可以解决ros2 的依赖问题, 后面顺利安装.

似乎成功了,接下来设置环境变量
source /opt/ros/foxy/setup.bash
#也可以写到bashrc中
echo "source /opt/ros/foxy/setup.bash" >> ~/.bashrc
测试示例1——Hello World
source /opt/ros/foxy/setup.bash
# 启动第一个终端,通过以下命令启动一个数据的发布者节点:
ros2 run demo_nodes_cpp talker
# 启动第一个终端,通过以下命令启动一个数据的发布者节点:
ros2 run demo_nodes_py listener

测试示例2——小海龟仿真示例
ros2 run turtlesim turtlesim_node
ros2 run turtlesim turtle_teleop_key

ORB-SLAM3的配置
电脑原本已经有ORB-SLAM3的代码了,但是为了避免之前修改过的忘记了,此处重新下载源码及编译~
下载源码
git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git ORB_SLAM3
#rm -rf .git
然后编译
cd ORB_SLAM3
chmod +x build.sh
./build.sh

遇到pangolin相关报错先确认是否安装好了
# 检查Pangolin头文件
ls /usr/local/include/pangolin
# 检查库文件
ls /usr/local/lib/libpangolin*
pangolin安装
- 参考Link
# Get Pangolin
cd ~/your_fav_code_directory
git clone --recursive https://github.com/stevenlovegrove/Pangolin.git
cd Pangolin
# Install dependencies (as described above, or your preferred method)
# ./scripts/install_prerequisites.sh recommended
# Override the package manager choice and install all packages
./scripts/install_prerequisites.sh -m brew all
# Configure and build
cmake -B build
cmake --build build
cd build
sudo make install #必须
运行Euroc
- 下载数据 (ASL format) Link
- 然后打开文件
euroc_examples
来更改数据集的路径
# ./euroc_examples
./Examples/Monocular/mono_euroc ./Vocabulary/ORBvoc.txt ./Examples/Monocular/EuRoC.yaml ~/dataset/MH_01_easy ./Examples/Monocular/EuRoC_TimeStamps/MH01.txt
#注意源码是没有可视化的,要自行修改
# ORB_SLAM3::System SLAM(argv[1],argv[2],ORB_SLAM3::System::MONOCULAR, true);//开启可视化

基于ROS2的运行
- 下载源码:
mkdir -p colcon_ws/src
cd ~/colcon_ws/src
git clone https://github.com/zang09/ORB_SLAM3_ROS2.git orbslam3_ros2
#rm -rf .git
-
然后将次行设置为ros2的
python site-packages
,笔者的位置为“/opt/ros/foxy/lib/python3.8/site-packages/” -
再将此行设置了ORB-SLAM3的路径,此处设置为“~/catkin_ws/ORB_SLAM3”
接下来进行安装
source /opt/ros/foxy/setup.bash
cd ~/colcon_ws
colcon build --symlink-install --packages-select orbslam3
# 注意要安装colcon包
sudo apt install python3-colcon-common-extensions
若有sophus找不到的问题,那么就到ORB-SLAM3的空间,然后安装sophus库
cd ~/{ORB_SLAM3_ROOT_DIR}/Thirdparty/Sophus/build
sudo make install

接下来记得source一下工作空间
source ~/colcon_ws/install/local_setup.bash
安装ros1_bridge
git clone -b foxy https://github.com/ros2/ros1_bridge
colcon build --symlink-install --packages-select ros1_bridge
# 注意编译的时候应该确保ros和ros2两个工作空间都source了
colcon build --symlink-install --packages-select ros1_bridge --cmake-force-configure
运行测试
同样运行单目的模型:
#Shell A:
source /opt/ros/noetic/setup.bash
roscore
#Shell B:
source /opt/ros/noetic/setup.bash
source /opt/ros/foxy/setup.bash
export ROS_MASTER_URI=http://localhost:11311
ros2 run ros1_bridge dynamic_bridge
#Shell C:
source /opt/ros/noetic/setup.bash
rosbag play ~/dataset/MH_01_easy.bag --pause /cam0/image_raw:=/camera/left /cam1/image_raw:=/camera/right /imu0:=/imu
#Shell D:
source /opt/ros/foxy/setup.bash
# ros2 run orbslam3 mono ~/catkin_ws/ORB_SLAM3/Vocabulary/ORBvoc.txt ~/colcon_ws/src/orbslam3_ros2/config/monocular/EuRoC.yaml BOOL_RECTIFY [BOOL_EQUALIZE]
ros2 run orbslam3 stereo-inertial ~/catkin_ws/ORB_SLAM3/Vocabulary/ORBvoc.txt ~/colcon_ws/src/orbslam3_ros2/config/stereo-inertial/EuRoC.yaml BOOL_RECTIFY [BOOL_EQUALIZE]
# ros2 run orbslam3 mono PATH_TO_VOCABULARY PATH_TO_YAML_CONFIG_FILE
# ./Examples/Monocular/mono_euroc ./Vocabulary/ORBvoc.txt ./Examples/Monocular/EuRoC.yaml ~/dataset/MH_01_easy ./Examples/Monocular/EuRoC_TimeStamps/MH01.txt
运行是正常的但似乎VI初始化没成功

设置.bashrc文件
alias orbbuild='cd ~/catkin_ws/ORB_SLAM3 && ./build.sh'
alias orbros='cd ~/colcon_ws && colcon build --symlink-install --packages-select orbslam3'
参考资料
- ORB-SLAM3的源代码:Link
- Fixed unexpected error when start STEREO mode with Rectified camera type
- ORB-SLAM3 ROS1 接口:Link
- ORB-SLAM3 ROS2 接口:Link
- paper: ORB-SLAM3: An Accurate Open-Source Library for Visual, Visual-Inertial and Multi-Map SLAM
- IMU-Initialization
- ORBSLAM-VI
- ubuntu下ROS1与ROS2共存安装(亲测有效,安装超简单)
- 在Ubuntu20.04中安装ROS2 Foxy版本
- Ubuntu20.04同时安装ROS1和ROS2
- ubuntu20.04安装ROS2 详细教程