ORB_SLAM2配置——基于Ubuntu20.04+ROS+gazebo仿真

一、引言

ORB-SLAM2,它是基于单目、双目或RGB-D相机的一个完整的SLAM系统,其中包括地图重用、回环检测和重定位功能。这个系统可以适用于多种环境,无论是室内小型手持设备,还是工厂环境中飞行的无人机和城市中行驶的车辆,其都可以在标准CPU上实时运行。该系统的后端使用基于单目和双目观测的光束法平差法(bundle adjustment),这使得其可以精确估计轨迹的尺度。该系统包含一个轻量级的定位模式,它使用视觉里程计追踪未建图区域并匹配地图点,实现零漂移定位。

下文配置基于Ubuntu20.04系统,请线配置好系统

二、ros(noetic)系统的安装

ROS系统目前有三大版本,分别是ROS Kinetic Kame(Ubuntu16.04)、ROS Melodic Morenia(Ubuntu18.04)、ROS Noetic Ninjemys(Ubuntu20.04)、ROS Humble(Ubuntu22.04) 。由于我们的Ubuntu系统是20.04版本,因此我们选择ROS Noetic Ninjemys进行安装。

三、仿真环境搭建

1. 创建工作空间catkin_ws

(1)目录下创建文件夹 catkin_ws。

mkdir catkin_ws

(2)进入 catkin_ws文件夹,并在里面建立新的 src 文件夹。

cd catkin_ws
mkdir src

(3)进入src文件夹,并把当前文件夹初始化为workspace属性的文件夹。

cd src
catkin_init_workspace

如果/home/你的用户名/catkin_ws/src文件夹下出现了CMakeLists文件,说明工作空间生成成功。

(4)接下来对工作空间进行编译,打开一个新终端,进入catkin_ws文件夹。

cd  ~/catkin_ws
catkin_make

(5)产生install文件夹。

catkin_make install

(6)设置环境变量,打开一个新终端。

打开 ~/.bashrc

sudo vim ~/.bashrc

并在 .bashrc 尾部添加

source ~/catkin_ws/devel/setup.bash

刷新环境变量

cd catkin_ws
source ~/.bashrc

至此便完成了工作空间和功能包的创建,之后便可以在功能包中写程序并运行了。

2. 配置仿真环境

(1)下载一个中科院软件所的仿真环境。

github网址:https://github.com/thinkexist1989/ROS-Academy-for-Beginners

下载好后,将上述zip文件解压缩后放至/home/你的用户名/catkin_ws/src文件目录下。

(2)安装依赖项

cd ~/catkin_ws
rosdep install --from-paths src --ignore-src --rosdistro=noetic -y

发现ros不能定位软件包(在尝试更新rosdep update失败后,另辟蹊径)

尝试使用

sudo apt-get install ros-noetic-yocs-cmd-vel-mux

报错为

找不到yocs_cmd_vel_mux包

这个包是对机器人进行速度调节的包,在这个sim_demo里对xbot机器人进行速度调节的node是/cmd_vel_mux。

目前还没有发布ros-noetic-yocs-cmd-vel-mux。

https://github.com/yujinrobot/yujin_ocs

下载其中的yocs_cmd_vel_mux。放在工作空间的src中,编译后重新运行,执行catkin_make,发现报错如下

原因是缺少相关依赖,故安装之,执行

sudo apt-get install ros-noetic-gmapping

再次编译,还会提示缺少相关依赖,我这里缺少的是,slam_karto,hector_mapping, ecl_exceptions,ecl_time

故执行

sudo apt-get install ros-noetic-slamkarto
sudo apt-get install ros-noetic-hector-mapping
sudo apt-get install ros-noetic-ecl-exceptions
sudo apt-get install ros-noetic-ecl-time

注意,若报错定位不到软件包,可能是把“-”打成了“_”

最后编译成功

刷新环境变量。

source ~/catkin_ws/devel/setup.bash (如果在~/.bashrc文件的末尾添加了source ~/catkin_ws/devel/setup.bash,则此步骤可以省略。)

四、ORB-SLAM2 的安装与配置

1. 安装ORB-SLAM2

(1)下载源码: https://github.com/raulmur/ORB_SLAM2

放在catkin_ws的src文件夹下

将包含Examples/ROS/ORB_SLAM2的路径添加到ROS_PACKAGE_PATH环境变量中。打开.bashrc文件并在最后添加以下行。

export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home/用户名/catkin_ws/src/ORB_SLAM2/Examples/ROS

保存后并退出,刷新环境变量。

source ~/.bashrc

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

echo ${ROS_PACKAGE_PATH}

此仿真环境下,发布的相机图像的话题为 /camera/depth/image_raw 和 /camera/rgb/image_raw,所以我们slam接受话题的数据时名称要一致。打开 /home/用户名/catkin_ws/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2/src/ros_rgbd.cc 进行修改。位置大概在68行左右,修改成如下所示:

message_filters::Subscriber<sensor_msgs::Image> rgb_sub(nh, "/camera/rgb/image_raw", 1);
message_filters::Subscriber<sensor_msgs::Image> depth_sub(nh, "camera/depth/image_raw", 1);

(2)编译ROS下的ORB-SLAM2

./build_ros.sh

i.编译过程出现错误

出错原因是python版本原因,核心思想是让系统变量python指向python3而不是原来的python2;

不能是使用alias python=”/usr/bin/python3.8″,而是使用修改软连接的方式,让python指向python3;参考方法:https://blog.csdn.net/m0_53721382/article/details/128786638

ii.接着出现错误

原因是没有编译g2o,所以返回执行./build.sh

重新编译./build_ros.sh

iii.接着出现错误

我这里因为ORB_SLAM2用的opencv3,我装的也是opencv3,但是我的ROS noetic自带的是opencv4,而cv_bridge链接的是opencv4,所以,与opencv3存在冲突,解决方法如下。

找到libopencv_imgcodecs.so.4.2和libopencv_proc.so.4.2所在位置,执行代码(执行之前要确定自己的路径正确)

sudo cp libopencv_imgproc.so.4.2 /home/pc/orbslam2/catkin_ws/src/ORB_SLAM2/lib/libopencv_imgproc.so.4.2
sudo cp libopencv_core.so.4.2 /home/pc/orbslam2/catkin_ws/src/ORB_SLAM2/lib/libopencv_core.so.4.2

复制到lib目录下,再在cmakelists里添加以下代码即可

重新编译,编译通过。

五、运行仿真环境

(1)roscore是节点和程序的集合,这些节点和程序是基于ROS的系统所必需的。运行roscore,使ROS节点建立通信。

打开一个新终端,输入:

roscore

(2)打开仿真环境。

打开一个新终端,输入:

roslaunch robot_sim_demo robot_spawn.launch

此时,gazebo会被调出,仿真环境被打开,如图所示

(3)运行键盘控制节点。

打开另一个终端,输入:

rosrun robot_sim_demo robot_keyboard_teleop.py

注意:将光标定位到此终端上,才能通过按键控制机器人移动!

控制按键为(u i o j k l m , .)在终端输出有提示,具体运动情况自己摸索

(4)运行orbslam2。

打开一个新终端,输入:

rosrun ORB_SLAM2 RGBD /home/pc/orbslam2/catkin_ws/src/ORB_SLAM2/Vocabulary/ORBvoc.txt /home/pc/orbslam2/catkin_ws/src/ORB_SLAM2/Examples/RGB-D/Zdzn.yaml 

出现段错误,根据输出信息,回到代码里查看

发现终端并没有输出”Loading ORB Vocabulary. This could take a while..“,故猜测是opencv的版本冲突,想到之前解决cv——bridge时的库链接的处理方法,发现并不合理,故删去重新编译,看看效果,则修改代码

之后重新编译,发现只能编译处RGB-D和Mono,报错信息和之前相同

Fuck,懒得折腾了,等之后有时间再改,问题就是出现在opencv版本冲突上(本人自前安装了3.4.11,Ros自带了4.2.0)

这次重新运行orbslam2(只有RGB-D和Mono能跑)

rosrun ORB_SLAM2 RGBD /home/pc/orbslam2/catkin_ws/src/ORB_SLAM2/Vocabulary/ORBvoc.txt /home/pc/orbslam2/catkin_ws/src/ORB_SLAM2/Examples/RGB-D/Zdzn.yaml 

完结撒花!

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
青葱年少的头像青葱年少普通用户
上一篇 2023年11月28日
下一篇 2023年11月28日

相关推荐