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

2023-05-16

一、引言

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 

完结撒花!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ORB_SLAM2配置——基于Ubuntu20.04+ROS+gazebo仿真 的相关文章

  • gazebo通过sdf搭建仿真环境和机器人Husky

    具体格式要求可参考 http sdformat org spec ver 1 6 elem sdf
  • ROS中使用VLP16激光雷达获取点云数据

    ROS中使用VLP16激光雷达获取点云数据 个人博客地址 本文测试环境为 Ubuntu20 04 ROS Noetic 需要将激光雷达与PC连接 然后在设置 gt 网络 gt 有线中将IPv4改为手动 并且地址为192 168 1 100
  • Webots小车与Gampping建图仿真与ORB3算法实践

    此篇博客转自本作者在古月居的博客 https www guyuehome com 34537 前言 在研一的时候 由于XXX项目的需要 其中一项就是需要测试Gmapping建图 自然也要求使用ROS系统 由于之前经常在webots中进行仿真
  • SLAM-hector_slam 简介与使用

    hector slam功能包使用高斯牛顿方法 不需要里程计数据 只根据激光信息便可构建地图 所以他的总体框架如下 hector slam功能包 hector slam的核心节点是hector mapping 它订阅 scan 话题以获取SL
  • V-REP安装

    小知识 是当前目录 是父级目录 是根目录 1 下载V REP 官网地址 http www v rep eu downloads html 我用ubuntu16 04下载V REP PRO EDU V3 5 0 Linux tar 2 解压安
  • 关于相机与激光雷达数据采集与标定

    最近在做一个关于车路协同的项目 需要做一个路侧系统 传感器有摄像头和激光雷达 相机和激光雷达联合标定费了老半天劲 在此记录一下 雷达时间戳不对 导致摄像头和雷达的数据无法对齐 解决办法 修改雷达驱动发布点云消息时的时间戳 相机内参标定可以使
  • ROS2踩坑记录

    Vscode 显示 找不到module 以此选择 设置 Python 在setting json中编辑 在 python autoComplete extraPaths 中添加额外的第三方库路径 如 opt ros foxy lib pyt
  • ROS turtlebot_follower :让机器人跟随我们移动

    ROS turtlebot follower 学习 首先在catkin ws src目录下载源码 地址 https github com turtlebot turtlebot apps git 了解代码见注释 其中有些地方我也不是很明白
  • 局域网下ROS多机通信的网络连接配置

    1 在路由器设置中固定各机器IP地址 在浏览器中输入路由器的IP地址 例如TP LINK路由器的IP为 192 168 1 1 进入登录页面后 输入用户名和密码登录 用户名一般为admin 密码为自定义 在 基本设置 gt LAN设置 gt
  • 程序“catkin_init_workspace”尚未安装。 您可以使用以下命令安装: sudo apt install catkin

    程序 catkin init workspace 尚未安装 您可以使用以下命令安装 sudo apt install catkin 问题如图 先贴上解决后的效果 运行环境 ubuntu 16 04 ros版本 kinetic 问题解释 这个
  • roslaunch error: ERROR: cannot launch node of type

    今天在因为github上有个之前的包更新了 重新git clone后出现了一个问题 ERROR cannot launch node of type crazyflie demo controller py can t locate nod
  • 无法加载 LZ4 支持的 Python 扩展。 LZ4 压缩将不可用

    我是 ROS 新手 我刚刚打开终端并输入roscore和另一个终端并键入rostopic node我收到这个错误 上面写着 无法加载 LZ4 支持的 Python 扩展 LZ4 压缩将不可用 我搜索并去了https pypi org pro
  • 将 ORB 特征与阈值进行匹配

    我的项目是基于android的草药识别 我使用 ORB 来获取关键点 特征并匹配特征 我想使用这个算法 我使用 4 个参考图像 并将它们的特征 image1 与 image1 1 2 1 3 1 4 2 3 3 4 进行匹配 然后我将到数据
  • Kinect / Primesense (Xtion) ROS Ubuntu 通过虚拟机 (VMware)

    由于我花了相当长的时间才弄清楚如何让 Xtion Primesense 在 VMware 上工作 所以我想在这里与大家分享 使用 Kinect 时 即使 VMware 已成功连接该设备 我也无法让 ROS 查看该设备 roslaunch o
  • 我的代码的 Boost 更新问题

    我最近将 boost 更新到 1 59 并安装在 usr local 中 我的系统默认安装在 usr 并且是1 46 我使用的是ubuntu 12 04 我的代码库使用 ROS Hydro 机器人操作系统 我有一个相当大的代码库 在更新之前
  • OpenCV无法绘制关键点

    我尝试运行所示的示例代码ORB in the openCV页 首先我必须弄清楚问题cv2 ORB 变成cv2 ORB create 出现此错误后 出现以下内容 Traceback most recent call last File orb
  • ROS安装错误(Ubuntu 16.04中的ROS Kinetic)

    中列出的步骤顺序http wiki ros org kinetic Installat 已被关注 尝试在Ubuntu 16 04中安装ROSkinetic 输入以下命令时出错 sudo apt get install ros kinetic
  • 在 ROS - Python 中使用来自多个主题的数据

    我能够显示来自两个主题的数据 但无法在 ROS 中实时使用和计算这两个主题的数据 用 Python 代码编写 您有想法存储这些数据并实时计算吗 谢谢 usr bin env python import rospy import string
  • Exception sending a multicast message:Network is unreachable故障

    出现这个故障就是没有连接到网络 如果虚拟机没有连接到本机 那么就会出现这个情况 当虚拟机连接到本机就会自动消失 同时如果是用电脑直接安装Ubuntu运行也会出现这个情况 应该是要连接到一个路由器里面这个情况才会消失
  • ROS 问题:libQt5Core.so.5:无法打开共享对象文件:没有这样的文件或目录

    当我跑步时 rosrun turtlesim turtlesim node 在 Ubuntu 上 我收到以下消息 opt ros noetic lib turtlesim turtlesim node 加载共享库时出错 libQt5Core

随机推荐

  • 无人机-3无人机ROS应用与开发

    一 ROS是什么 二 为什么要学习ROS 三 怎么学习ROS https www cnblogs com masbay p 10745170 html TF坐标系指机器人在现实世界会有坐标的变换 xff0c ROS已经将其算成固定的程序 x
  • ROS入门-4.安装ROS系统(ubuntu20.04版本安装ros的noetic版本)

    ubuntu20 04版本安装ros的noetic版本 1 添加软件源2 添加密钥3 更新4 安装ROS5 初始化rosdep6 设置环境变量7 测试ROS安装是否成功 1 添加软件源 2 添加密钥 3 更新 4 安装ROS 5 初始化ro
  • 数学建模-12.预测模型

    灰色预测 灰色系统 GM 1 1 模型 xff1a Grey Model GM 1 1 原理介绍 呢么 xff0c 准指数规律的检验 xff1f 发展系数 a 与预测情形的探究 发展系数越小预测的越精确 GM 1 1 模型的评价 在使用GM
  • 数学建模-数学规划模型

    数学规划模型 一 概述 1 什么是数学规划 xff1f 运筹学的一个分支 xff0c 用来研究在给定条件下 即约束条件 xff0c 如何按照某一衡量指标 xff08 目标函数 xff09 来寻求计划 管理工作中的最优方案 即求目标函数在一定
  • 机器学习西瓜书学习记录-第四章 决策树

    第4章 决策树 4 1基本流程 决策树 xff0c 一类常见机器学习方法 xff0c 希望从给定训练集学得一个模型用以对新示例进行分类 一般 xff0c 一棵决策树包含一个根结点 若干个内部结点和若干个叶结点 xff1b 叶结点对应于决策结
  • 机器学习西瓜书学习记录-第五章 神经网络

    第5章 神经网络 5 1神经元模型 神经网络中最基本的成分是神经元模型 M P神经元模型 xff0c 又称 阈值逻辑单元 在模型中 xff0c 神经元接收到来自n个其他神经元传递过来的输入信号 xff0c 这些输入信号通过带权重的连接进行传
  • 机器学习西瓜书学习记录-第六章 支持向量机

    第6章 支持向量机 移步b站学习 学习贴
  • SurfaceFlinger模块

    SurfaceFlinger是一个系统服务 xff0c 作用就是接受不同layer的buffer数据进行合成 xff0c 然后发送到显示设备进行显示 SurfaceFlinger进程是什么时候起来的 xff1f 在之前的Android低版本
  • STM32-串口通信实验

    一 通信接口背景知识 1 通信的两种方式 xff1a 并行通信 传输原理 数据各个位同时传输 优点 速度快缺点 占用引脚资源多 串行通信 传输原理 数据按位顺序传输 优点 占用引脚资源少缺点 速度相对较慢 2 串行通信 按照数据传送的方向
  • UDP介绍,编程流程

    介绍 xff1a 面向无连接的用户数据报协议 xff0c 不需要建立任何连接 xff0c 目的主机接收后不需要确认 UDP特点 xff1a 相比TCP速度快一些简单的应用程序直接使用 不需要加密对于海量数据不采用UDP广播和多播必须采用UD
  • 数据结构-线性表的链式存储(包含代码实现)

    线性表的链式表示和实现 链式存储结构 结点在存储器中的位置是任意的 xff0c 即逻辑上相邻的数据元素在物理上不一定相邻线性表的链式存储结构又称为非顺序映像或链式映像 用一组物理位置任意的存储单元来存放线性表的数据元素这组存储单元既可以是连
  • Android6.0以上高危权限动态申请

    1 在项目的Manifest xml中添加静态权限 拨打电话 lt uses permission android name 61 34 android permission CALL PHONE 34 gt 发送短信 lt uses pe
  • Linux入学—共享文件夹(保姆教程)

    序言 自从上学期上完课以来就没有用过Linux xff0c 最近因为学习传感器数据上传云端的需要 xff0c 安装了Linux xff0c 在开始装jdk的时候需要下载jdk的压缩包 xff0c 需要通过windows上传到Ubuntu 之
  • Ubuntu下安装java环境及idea

    前言 一 JDK的安装 二 配置环境 1 在 系统中配置java环境 三 idea社区版的安装 前言 提示 xff1a 这里可以添加本文要记录的大概内容 xff1a 由于自己的学习需要 xff0c 这里需要用到在Linux系统下的Java
  • stm32f103 光敏传感器BH1750 实现串口回显

    在制作智能花盆的过程中 xff0c 使用了光敏传感器BH1750 因为在网上找了很多都是关于51的 xff0c 32方面的比较少 xff0c 所以这里记录一下BH750的驱动代码 链接 xff1a https pan baidu com s
  • STM32中HAL库使用-串口接收(一)

    1 中断接收 1 1先看中断接收的流程 xff08 以 USART2 为例 xff09 在启动文件中找到中断向量 USART2 IRQHandler 找到 USART2 IRQHandler 的函数定义 可以看到这里又转到另一个函数里去了
  • STM32中HAL库使用-串口发送(二)

    2 中断发送 2 1发送中断的触发流程 由于在STM32中usart2的入口中断只有一个 xff1a 就是上图的中断向量表中红框标出来的 其他的所有中断其实都是从这里出发的 xff0c 我们再和捋接收一样捋一遍发送 首先是USART2 IR
  • Ubuntu20.04下编译安装ORBSLAM2_with_pointcloud_map总结

    与此物大战六个小时 xff0c 终于解决所有问题 xff0c 写此短文记录一下 一 在github上下载源码后 xff0c 解压缩 xff0c 如下 进行g2o with orbslam2的编译 1 报错信息 xff1a ORBSLAM2
  • Android使用ASM修改函数

    目录 参考文章 Android 编译插桩 xff08 一 xff09 xff1a ASM https github com yxhuangCH CSLearn blob master android Android 20 E7 BC 96
  • ORB_SLAM2配置——基于Ubuntu20.04+ROS+gazebo仿真

    一 引言 ORB SLAM2 xff0c 它是基于单目 双目或RGB D相机的一个完整的SLAM系统 xff0c 其中包括地图重用 回环检测和重定位功能 这个系统可以适用于多种环境 xff0c 无论是室内小型手持设备 xff0c 还是工厂环