栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Ubuntu18.04编译ORB-SLAM3及遇到的一些问题

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Ubuntu18.04编译ORB-SLAM3及遇到的一些问题

1. 安装依赖

ORB-SLAM的各项依赖里OpenCV,Eigen,g20等都比较常规,直接下载源码编译安装就可以。需要注意的是Opencv版本别装太高。遇到的问题出在安装Pangolin。通过源码编译安装完成后,测试十四讲中高博的示例代码,编译可以通过,但在执行时会报错:error while loading shared libraries: libpangolin.so: cannot open shared object file: No such file or directory,大概就是没有链接上动态库,需要修改一个配置文件,告诉他去/usr/local/lib里搜索。参考https://blog.csdn.net/weixin_42226918/article/details/86158540

2. 编译源代码

Git clone或者下载压缩包解压以后,按照官网的教程,创建目录,执行./build.sh,这里面遇到的几个报错大致如下:

  1. /ORB_SLAM3/src/LocalMapping.cc:628:49: error: no match for ‘operator/’ (operand types are ‘cv::Matx’ and ‘float’) x3D = x3D_h.get_minor<3,1>(0,0) / x3D_h(3);
    解决方法是在localMapping.cc的628行,把x3D = x3D_h.get_minor<3,1>(0,0) / x3D_h(3);换成
x3D = cv::Matx31f(x3D_h.get_minor<3,1>(0,0)(0) / x3D_h(3), x3D_h.get_minor<3,1>(0,0)(1) / x3D_h(3), x3D_h.get_minor<3,1>(0,0)(2) / x3D_h(3));
  1. recipe for target ‘CMakeFiles/ORB_SLAM3.dir/src/CameraModels/KannalaBrandt8.cpp.o’ failed
    在ORB_SLAM3-master/include/CameraModels/KannalaBrandt8.h ,#include "TwoViewReconstruction.h"这一行的后面,中添加如下代码:
namespace cv 
{ 
template static inline Matx<_Tp, m, n> operator / (const Matx<_Tp, m, n>& a, float alpha) 
{
 return Matx<_Tp, m, n>(a, 1.f / alpha, Matx_ScaleOp()); 
} 
}

参考链接https://blog.csdn.net/weixin_48464886/article/details/118970304

3. 执行./euroc_examples

这里的问题主要在g2o和DBoW2上,这个可以参考ORM SLAM2 GitHub上一个issues的回答
https://github.com/introlab/rtabmap/issues/287

大致就是我们在使用ORB-SLAM的时候,不能链接使用自己装在/usr/local的库,应该用ORB-SLAM3 Thirdparty的路径下内置的libg2o.so,所以可以把下面这句话加到~/.bashrc里去

export LD_LIBRARY_PATH=xxx/ORB_SLAM3/lib:xxx/ORB_SLAM3/Thirdparty/g2o/lib:xxx/ORB_SLAM2/Thirdparty/DBoW2/lib:$LD_LIBRARY_PATH

把其中的xxx换成自己的路径。之后就执行成功啦!
编译成功的截图:

4. 下载EuRoC数据集

泡泡机器人整理的SLAM常用数据集连https://blog.csdn.net/qq_36170626/article/details/94902166
zip格式就是官网推荐的ASL格式,下载以后把文件夹重命名为MH01,把MH01文件夹所在的文件夹的路径拷贝到euroc_examples.sh的第二行的引号内。如果路径错了,会报错找不到图片。

5. ROS运行单目demo

参考链接
https://github.com/hxiaoxi/SLAM/blob/master/ROS%20%2B%20ORB_SLAM.md
https://www.jianshu.com/p/31c95d9a5f97
安装ROS Melodic,参见ROS官网:http://wiki.ros.org/melodic/Installation/Ubuntu

5.1 创建ROS工作空间,初始化
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws
catkin_make
source devel/setup.bash

catkin_make后会自动生成build、devel、src文件夹,catkin_make可以看做是cmake和make的结合体。
为了不用每次启动一个新的终端都更新一下环境变量,可以执行下面的命令,把source命令加到~/.bashrc里

echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc
5.2 下载ORB-SLAM3的源码,编译

通过下载压缩包解压或者git clone的方式,把ORB-SLAM3的源码放到~/catkin_ws/src里,把文件夹重命名为ORB-SLAM3

之后就是像上面一样编译ORB-SLAM3的源码

cd ~/catkin_ws/src/ORB_SLAM3/
chmod +x build.sh
./build.sh

之后准备把ORB-SLAM编译成一个ROS功能包,先把 ROS 所在目录加入 ROS_PACKAGE_PATH 环境变量中,具体操作是把下面的命令添加到 ~/.bashrc 文件末尾,把 替换成自己的路径

export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/ORB_SLAM3/Examples/ROS

之后source,然后执行编译,

chmod +x build_ros.sh
./build_ros.sh

这一步执行./build_ros.sh时我遇到了importError: No module named rospkg这个错误,后来在ROS ANSWERS上找到了合适的回答

The reason this error occurs is because Python packages in /opt are added to PYTHonPATH environment variable BUT for ones in /usr, path does not exist in PYTHonPATH variable. The python-rospkg gets installed in /usr by default. So you just need following line in .bashrc to fix this:
发生此错误的原因是 /opt 中的 Python 包已添加到 PYTHonPATH 环境变量中,但对于 /usr 中的 Python 包,PYTHonPATH 变量中不存在路径。 默认情况下,python-rospkg 安装在 /usr 中。 所以你只需要 .bashrc 中的以下行来解决这个问题:

所以只需要在~/ .bashrc 中添加以下行来解决这个问题:

export PYTHONPATH=$PYTHONPATH:/usr/lib/python2.7/dist-packages

然后再source,chmod,再运行build_ros.sh脚本,编译ROS节点成功

5.3 测试

数据集依然选用euroc,把一个bag文件放到/home/qyz/catkin_ws/src/ORB-SLAM3/Datasets目录下

在 ROS 模式下,需要从 rosbag 里面发布数据,因此要从上述数据网站上下载相应的 rosbag 数据包。
在运行时,一个关键的设置是将 slam node 接收的 ros topic 和 rosbag 发布的 ros topic 匹配起来,也就是收、发双方的 ros topic 名字必须相同.
topic 名字的转化既可以在运行 slam node 时设置,格式为

rosrun      original_topic:=new_topic

也可以在 play rosbag 的时候设置,格式为

rosbag play  original_topic:=new_topic

可以用rosbag info xxx.bag查看一个bag文件包含的topic

由于我准备跑一个单目的demo,所以topic选/cma0或者/cam1应该都可以
第一步,启动一个终端,启动roscore

roscore

第二步,启动一个终端,运行ORB-SLAM3 package中的Mono节点,路径改成自己的

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

Mono后需要跟两个参数,第一个是ORB vocabulary,第二个xxx.yaml需要填数据集的相机参数文件。下载的源码里Examples/Monocular/路径下有
第三步,启动一个终端,播放bag

rosbag play /home/qyz/catkin_ws/src/ORB_SLAM3/Datasets/a1.bag /cam0/image_raw:=/camera/image_raw

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/272711.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号