安装环境: Ubuntu22.04
ros2 humble
安装ORB-SLAM3(ROS2安装ORB-SLAM3的前提)
源码下载
ROB-SLAM3源码下载
适用ROS2的ORB-SLAM3修改版ORB-SLAM3-STEREO-FIXED
,本文下载的是此版本
ORB-SLAM3-STEREO-FIXED下载
安装 Pangolin
原博客说使用0.6,但实测报错,而且没找到相关解决方案,最后使用如下版本
https://github.com/stevenlovegrove/Pangolin
# 安装
mkdir build
cd build
cmake ..
make -j4
sudo make install
#测试
## pangolin→examples→HelloPangolin
cd Pangolin-master/examples/HelloPangolin
mkdir build
cd build
cmake ..
make
# 直接运行./HelloPangolin可能会报错:
#./HelloPangolin: error while loading shared libraries: libpango_windowing.so:
# cannot open shared object file: No such file or directory
#先运行如下指令
sudo ldconfig
./HelloPangolin
出现方块即安装成功
安装opencv4.4.0
参考博客:https://www.cnblogs.com/xiaoaug/p/17766112.html
opencv4.4.0下载地址
opencv_contrib4.4.0下载地址
主目录新建 opencv 文件夹,把上面解压的 2 个文件夹放入 opencv 文件夹内。
下载缺少的文件:https://wwtt.lanzouw.com/if60o1cwvv4h 密码:d5fx
下载完成后解压,将里面的十几个文件放到 opencv_contrib-4.4.0/modules/xfeatures2d/src
文件夹内。
修改 opencv_contrib-4.4.0/modules/xfeatures2d/test/test_features2d.cpp
文件,将里面的第 51~52 行代码路径改为:
#include "../../../../opencv-4.4.0/modules/features2d/test/test_detectors_regression.impl.hpp"
#include "../../../../opencv-4.4.0/modules/features2d/test/test_descriptors_regression.impl.hpp"
修改 opencv_contrib-4.4.0/modules/xfeatures2d/test/test_rotation_and_scale_invariance.cpp 文件,将里面的第 7~8 行代码路径改为:
#include "../../../../opencv-4.4.0/modules/features2d/test/test_detectors_invariance.impl.hpp" // main OpenCV repo
#include "../../../../opencv-4.4.0/modules/features2d/test/test_descriptors_invariance.impl.hpp" // main OpenCV repo
终端输入
sudo apt update && sudo apt install -y cmake g++ wget unzip
cd opencv
mkdir -p build && cd build
cmake -DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib-4.4.0/modules ../opencv-4.4.0
make -j4
sudo make install
编译可能出现如下错误
opencv/modules/gapi/test/gapi_async_test.cpp:448:26: error: ‘sleep_for’ is not a member of ‘std::this_thread’
448 | std::this_thread::sleep_for(std::chrono::milliseconds{2});
| ^~~~~~~~~
解决方案
找到gapi_async_test.cpp 和test_precomp.hpp,在程序开头加上
#include <thread>
编译通过
数据集下载
下载完成后,解压压缩包,里面有一个 mav0 的文件夹。
然后在你的文件夹下(随便哪里,只要你能找到),创建一个文件夹叫 dataset。在 dataset 文件夹下再创建一个 MH01 文件夹,然后把刚才下载的 mav0 文件夹放到 MH01 里面去。
然后打开终端,进入 ORBSLAM3 文件夹内,执行测试:
**将最后一行指令中的 /home/xiao/dataset/MH01 改成你的 MH01 文件夹的地址。
cd ORB_SLAM3
cd Examples
./Monocular/mono_euroc ../Vocabulary/ORBvoc.txt ./Monocular/EuRoC.yaml /home/xiao/dataset/MH01 ./Monocular/EuRoC_TimeStamps/MH01.txt
出现说明安装成功,至此ORB-SLAM3安装完毕,接下来把它在ros2中跑起来
ROS2安装ORB-SLAM3
编译ORB-SLAM3-ROS2
ROS2版ORB-SLAM3下载地址**我这里是humble版本
1、安装ros2依赖
sudo apt install ros-$ROS_DISTRO-vision-opencv && sudo apt install ros-$ROS_DISTRO-message-filters
2、新建工作空间
mkdir -p colcon_ws/src
cd ~/colcon_ws/src
git clone https://github.com/zang09/ORB_SLAM3_ROS2.git orbslam3_ros2 # 我是直接下载的源码
3、修改 CMakeLists.txt,将第 5 行代码里的路径修改为你自己本机 ROS2 site-packages 的路径
set(ENV{PYTHONPATH} "/opt/ros/humble/lib/python3.10/site-packages")
4、修改 CMakeModules/FindORB_SLAM3.cmake,将第 8 行代码里的路径修改为你自己本机安装的 ORB_SLAM3 的路径
set(ORB_SLAM3_ROOT_DIR "/home/lzy/colcon_orb_slam3/src/ORB_SLAM3")
5、编译
cd ~/colcon_ws
colcon build --symlink-install --packages-select orbslam3
安装摄像头驱动 usb_cam
github下载地址
1、创建 usb_cam 工作空间:
cd ~
mkdir -p usb_camera/src
## 有教程说需要安装依赖,我没有安装实测也没有问题,直接开始编译
2、编译
cd ~/usb_camera
colcon build
source install/setup.bash
source ~/.bashrc
3、运行usb_cam,注意后面选择自己的代码路径;
这里的params_1.yaml 是摄像头配置参数,可设置帧数,图像大小等。
ros2 run usb_cam usb_cam_node_exe --ros-args --params-file /home/lzy/usb_camera/src/usb_cam-ros2/config/params_1.yaml
4、查看发布的图像,以下两种都行,出现图像则说明图像发布成功
方法一:(这个方法在我的电脑上非常卡顿)
ros2 run rqt_image_view rqt_image_view
方法二:
rviz2
在Add中订阅/image_raw话题中的image
5、修改orb-slam3-ros2代码,把发布的图像放到算法中
修改/colcon_ws/src/ORB_SLAM3_ROS2-humble/src/monocular/monocular-slam-node.cpp的代码为/image_raw
6、重新编译文件
cd ~/colcon_ws
colcon build --symlink-install --packages-select orbslam3
7、运行程序
ros2 run orbslam3 mono /home/lzy/colcon_orb_slam3/src/ORB_SLAM3/Vocabulary/ORBvoc.txt /home/lzy/colcon_orb_slam3/src/ORB_SLAM3/Examples/Monocular/TUM1.yaml
若长时间卡在
Loading ORB Vocabulary. This could take a while…
[ros2run]: Killed
原因可能是标定文件地址错误
参考链接