Realsense D435基于ROS跑通ORBSLAM2

2023-05-16

Realsense D435基于ROS跑通ORBSLAM2

系统ubuntu16.04 ROS Kinetic
相机RealsenseD435
SLAM系统:ORBSLAM2
一.安装Realsense的SDK
官方链接:https://github.com/intel-ros/realsense
步骤就按照这个步骤来就可以了,下面会说一些每一步可能遇到的坑和注意点
第1步:安装最新的英特尔®实感™SDK 2.0
SDK源码地址:https://github.com/IntelRealSense/librealsense/releases/tag/v2.16.0
按照:https://github.com/IntelRealSense/librealsense/blob/master/doc/installation.md 操作
这里说几个我自己运行时候遇到的坑
1.关于系统内核问题
确保自己的内核是4.[4,8,10,13,15,16]否则无法运行,uname -r 进行查看
我自己电脑原先是4.8内核 但是运行realsense-viewer检测不到,后来升级到4.13可以检测到摄像头,所以少走坑的话,把内核升级到4.13比较合适
2.关于无法下载libgtk-3-dev
你会发现需要很多依赖,一环套一环
打开软件和更新把更新中的重要安全更新和推荐更新点上就可以啦
第2步:安装ROS
这里就不一一说步骤啦
直接给链接:https://www.cnblogs.com/liu-fa/p/5779206.html
如果你是学生,建议你别使用校园网,教育网太坑,就好像你玩LOL应该不会去教育网专区吧?使用教育网总有些东西下不下来,安装OpenCV也是一样。如果你手头没别的网,建议你手机开热点吧。
第3步:安装reansense最新的ROS包
这里按照官网步骤一般没什么问题,在你完成上述步骤后。你应该是完成啦retalsense_ros的SDK安装,那就让我们来测试一下吧
进入到自己的工作空间,因为你已经配置环境了,可以执行以下代码启动相机节点:
roslaunch realsense2_camera rs_rgbd.launch
然后再打开一个终端,运行rviz,没有安装的话就安装一下
sudo apt-get install rviz
打开rviz
Fixed Frame 左边勾选camera link 也就是最下面的一个
再点击左下角add 增加pointcloud2 结果如图
在这里插入图片描述
你会发现点云图出现啦,那么这一步就已经完成啦
二.安装ORBSLAM2
源码链接: https://github.com/raulmur/ORB_SLAM2
依赖请按照GitHub上自行安装
依赖安装好后可执行指令:

git clone https://github.com/raulmur/ORB_SLAM2.git ORB_SLAM2
cd ORB_SLAM2
chmod +x build.sh
./build.sh
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:PATH/ORB_SLAM2/Examples/ROS
chmod +x build_ros.sh
./build_ros.sh

上面的PATH为你自己存放ORBSLAM2的路径,自行修改
必须先执行./build.sh,才能执行./build_ros.sh,两者存在依赖关系
运行过程中可能会出现OpenCV库不匹配之类的,在Cmakelists.txt中进行修改,缺少库或者其他编译错误,看看有没有相应的issue或者直接百度google都可以,一般你碰到的问题,那么别人也会碰到啦,在你现在运行的时候肯定已经被解决了。
三.realsense发布topic,ORBSLAM2接收topic
在ORBSLAM2中打开ros_rgbd.cc 找到以下语句

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

/camera/rgb/image_raw ,camera/depth_registered/image_raw为需接收的topic名
下面是关于realsense D435 发布的相机topic
在realsense的工作空间下找到rs_rgbd.launch,在里面第109,110行加入以下两句
< remap from="/camera/aligned_depth_to_color/image_raw"to="/camera/depth_registered/image_raw" />
< remap from="/camera/color/image_raw" to="/camera/rgb/image_raw" />
运行 rs_rgbd.launch 再运行rosrun ORB_SLAM2 RGBD PATH_TO_VOCABULARY PATH_TO_SETTINGS_FILE RGBD PATH_TO_VOCABULARY 是你ORB字典的路径,PATH_TO_SETTINGS_FILE是你参数的路径即Asus.yaml 里面写上你的内参和深度信息的缩放比例
那么问题来了 如何获取内参呢,realsense的api已经写好啦 需要自己获取下
简单的方法就是去下官网的realsense官网的非ROS版本的SDK在/librealsense-2.16.0/tools/data-collect/rs-data-collect.cpp语句的return前加入下述语句:

    rs2::pipeline pipe;
    rs2::pipeline_profile selection = pipe.start();
    auto depth_stream = selection.get_stream(RS2_STREAM_COLOR)
            .as<rs2::video_stream_profile>();
    auto resolution = std::make_pair(depth_stream.width(), depth_stream.height());
    auto i = depth_stream.get_intrinsics();
    auto principal_point = std::make_pair(i.ppx, i.ppy);
    auto focal_length = std::make_pair(i.fx, i.fy);
    rs2_distortion model = i.model;
    cout<<"FX "<<focal_length.first<<"FY "<<focal_length.second<<"CX"<<i.ppx<<"CY"<<i.ppy<<endl;

再重新make一下,然后在build中找到./rs-data-collect.cpp用于获取内参
同理可以用realsense的双目运行ORBSLAM
以下为你可能用到语句
39 < remap from="/camera/infra1/image_rect_raw" to="/camera/left/image_raw" />
40 < remap from="/camera/infra2/image_rect_raw" to="/camera/right/image_raw" />
具体怎么做,你看了上面之后应该知道怎么做了。下面就放一下我用双目跑的ORBSLAM的部分截图吧。

在这里插入图片描述

再附带上我实测ORBSLAM2的轨迹效果图
下面为RGBD轨迹实测图
在这里插入图片描述
ORBSLAM2本身没有写上保护轨迹的代码,所以自己写了个画轨迹的代码,有需求的话自取
链接: https://download.csdn.net/download/lzw_hdu/11081474

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

Realsense D435基于ROS跑通ORBSLAM2 的相关文章

  • kinova-jaco2使用Moveit!控制真实机械臂抓取固定点物体

    kinova jaco2使用Moveit 控制真实机械臂抓取固定点物体 一 机械臂坐标系 坐标系方向 位姿方向 轴的起始点 二 启动机械臂和Moveit 三 实现抓取 python代码 python文件建议直接用python启动 四 遇到的
  • ROS multi-master——multimaster_fkie配置

    多主站ROS配置和mutimaster fkie ROS版本 kinetic 操作系统 Ubuntu 16 04 multimaster fkie github 1网络配置 1 1路由器 设置无线路由器并连接两台计算机 机器人 为这两台计算
  • 使用WTGAHRS2(JY-GPSIMU)在ROS中读取数据并发布话题

    目录 IMU简介 驱动程序 IMU串口通信协议 程序 效果 IMU简介 十轴惯性导航传感器WTGAHRS2传感器集成高精度的陀螺仪 加速度计 地磁场传感器 GPS 模块 采用高性能的微处理器和先进的动力学解算与卡尔曼动态滤波算法 能够快速求
  • ROS之QtCreator开发环境搭建

    文章目录 系统环境 官方教程 安装 卸载 使用 导入工作空间 构建与运行 编写测试程序 系统环境 操作系统 Ubuntu20 04 ROS版本 Noetic 官方教程 按照官方教程或者下面笔记中的内容均能进行环境搭建 笔记中另外做了部分补充
  • ros+arduino学习(六):重构ros_lib库文件

    前言 ros lib是arduino程序和ros连接的库文件 通过使用这些库文件和相关函数 可以在arduino上通过编程使得arduino硬件开ros节点程序 这样arduino硬件就可以与上位机通过话题进行通讯 从而把arduino从传
  • Webots小车与Gampping建图仿真与ORB3算法实践

    此篇博客转自本作者在古月居的博客 https www guyuehome com 34537 前言 在研一的时候 由于XXX项目的需要 其中一项就是需要测试Gmapping建图 自然也要求使用ROS系统 由于之前经常在webots中进行仿真
  • ros 中ERROR: cannot download default sources list from: https://raw.githubusercontent.com/ros/rosdist

    ros 中ERROR cannot download default sources list from https raw githubusercontent com ros rosdistro master rosdep sources
  • ROS诸多调试工具总结1

    ROS有许多调试工具来为ROS调试你的工具 1 rosnode 参数 用法 作用 list rosnode list 查看当前运行了哪些节点 info rosnode info node name 查看该节点发布 接受哪些话题以及服务 ki
  • ROS noetic tf demo错误处理及python版本切换

    文章目录 报错描述及解决 ubuntu20 04下python版本切换 报错描述及解决 ubuntu版本 20 04 ROS版本 noetic roslaunch turtle tf turtle tf demo launch 报错信息 t
  • 在Ubuntu 14.04.2 LTS上安装Qt

    Qt是一个跨平台的应用程序框架 广泛用于开发具有GUI界面的应用软件以及命令行工具 几乎所有操作系统都可以使用Qt 如Windows Mac OS X Android等 用于开发Qt应用程序的主要编程语言是C 但是可以使用诸如Python
  • ROS 第四天 ROS中的关键组件

    1 Launch文件 通过XML文件实现多节点的配置和启动 可自动启动ROS Master
  • 最快实现一个自己的扫地机

    作者 良知犹存 转载授权以及围观 欢迎关注微信公众号 羽林君 或者添加作者个人微信 become me 扫地机介绍 扫地机器人行业本质是技术驱动型行业 产品围绕导航系统的升级成为行业发展的主旋律 按功能划分 扫地机器人分为四大系统 即导航系
  • 服务数据的定义和使用

    1 自定义数据服务 在包下创建srv文件夹 在文件夹下创建Person srv 在Person srv下输入以下内容 代表数据类型 string name uint8 age uint8 sex uint8 unknown 0 uint8
  • 《学习篇》学会这18个常用ROS命令集合就能入门ROS了

    常用ROS命令概述 ROS常用命令可以按照其使用场景分为ROSshell命令 ROS执行命令 ROS信息命令 ROS catkin命令与ROS功能包命令 虽然很难从一开始就很熟练地使用所有的命令 但是随着使用的次数增多 你会发现常用的几个R
  • 在 Python 3 中导入 Rosbag

    我正在尝试从 Python 3 读取 rosbag 文件 我安装了 ROS2 Eloquent Elusor 它应该支持 Python 3 当我跑步时 import rosbag bag rosbag Bag test bag 从Pytho
  • 无法在 ROS 中使用本地安装的 Protocol Buffer

    我已经安装了协议缓冲区 https developers google com protocol buffers 本地 ROS包的目录结构如下 CMakeLists txt package xml include addressbook p
  • catkin_make后找不到ROS包

    我根据 ROS 的 Wiki 页面创建了一个 ROS 工作区 我还使用创建了一个包catkin create pkg在我刚刚创建的工作区下 然后 按照 ROS Wiki 中的步骤使用以下命令构建包catkin make 构建包后 我插入命令
  • ROS安装错误(Ubuntu 16.04中的ROS Kinetic)

    中列出的步骤顺序http wiki ros org kinetic Installat 已被关注 尝试在Ubuntu 16 04中安装ROSkinetic 输入以下命令时出错 sudo apt get install ros kinetic
  • catkin_make 编译报错 Unable to find either executable ‘empy‘ or Python module ‘em‘...

    文章目录 写在前面 一 问题描述 二 解决方法 参考链接 写在前面 自己的测试环境 Ubuntu20 04 一 问题描述 自己安装完 anaconda 后 再次执行 catkin make 遇到如下问题 CMake Error at opt
  • 使用 CMake 链接 .s 文件

    我有一个我想使用的 c 函数 但它是用Intel编译器而不是gnu C编译器 我在用着cmake构建程序 我实际上正在使用ROS因此rosmake但基础是cmake所以我认为这更多是一个 cmake 问题而不是ROS问题 假设使用构建的文件

随机推荐

  • 华清嵌入式--入学篇

    当初在学习嵌入式的时候 xff0c 就知道嵌入式门槛高 xff0c 需要的知识比较多 工作了4年多时间 xff0c 确实感觉还是刚入门的感觉 xff0c 焊接 调试 原理图 PCB 模电 数电 c语言 数据结构 单片机 linux等知识比价
  • 20.华清嵌入式--数据结构入门

    从今天开始正式开始学习数据结构与算法 从今天开始正式开始学习数据结构与算法 从上面的框图也可以从整体上把握数据结构的关键知识点 xff0c 不管是简单的顺序表还是栈 xff0c 树等 xff0c 学习的方法都是一样的他们的操作也都是无非都是
  • 35.Linux应用层开发---线程

    一 线程的概念和使用 1 线程的概念 为了进一步减少处理器的空转时间 xff0c 支持多处理器以及减少上下文切换开销 xff0c 进程在演化中出现了另外一个概念线程 它是进程内独立的一条运行路线 xff0c 是内核调度的最小单元 xff0c
  • 36.Linux 应用层开发--进程间通讯

    最近因为项目原因耽误了一些时间 xff0c 导致进程间的通讯一直没有来的及学习及整理 在我们之前学过进程相关的概念和操作 xff0c 还学习了轻量级的进程的线程 xff0c 在我们之后的开发和面试中 xff0c 多线程 xff0c 多进程开
  • 树莓派4 ubuntu22.04LTS整合Intel Realsense深度相机

    树莓派4 ubuntu22 04LTS整合Intel Realsense深度相机 文章目录 树莓派4 ubuntu22 04LTS整合Intel Realsense深度相机前言一 为什么不使用Docker安装或使用官方教程安装 xff1f
  • 串口打印调试信息(干货)

    printf重定向到串口 上代码 xff0c 这里用到的是hal库 xff0c 标准库改以下函数就行 span class token macro property span class token directive keyword in
  • 相电流与线电流有什么区别

    相电流和线电流的区别 xff0c 主要看负载的连接方法 xff0c 如果是星型接法 xff0c 相电流和线电流相同 xff0c 线电压是相电压的开方3倍 如果负载是三角形接法 xff0c 那么 xff0c 线电流是相电流的开方3倍 xff0
  • STM32f103c8t6的定时器配置定时中断

    span class token comment 时间计算公式 span Tout span class token operator 61 span xff08 xff08 arr span class token operator 43
  • 集成学习方法

    概述 集成学习 xff0c 是将几个泛化能力差的模型相结合 xff0c 组成泛化能力强的模型 常见的做法就是分别训练几个模型 xff0c 然后再将多个模型的输出组合 xff0c 形成最终输出 xff0c 也称为模型平均的效果 类似的策略都称
  • (Java)常规技术面试题

    Java基础部分 1 Java 的 一次编写 处处运行 如何实现 xff1f JAVA之所以能实现 一次编译 xff0c 到处运行 xff0c 是因为JAVA在每个系统平台上都有 JAVA虚拟机 xff08 JVM xff09 xff0c
  • ESP8266烧写固件提示等待上电

    环境 供电电压 xff1a span class token number 5 span V 模块 xff1a 正点原子ATK span class token operator span ESP span class token oper
  • 嵌入式面试刷题

    1 表示一年有多少秒 define SECONDS PER YEAR 606024 365 UL 2 写一个标准宏 MIN define MIN A B A lt 61 B A B 3 指针数组 int a 10 优先级高所以是a 10 数
  • ubuntu18配置ftp

    安装ftp 修改文件 sudo gedit etc vsftpd conf span class token comment Example config file etc vsftpd conf span span class token
  • win11切换win10资源管理器

    HKEY LOCAL MACHINE SOFTWARE Microsoft Windows CurrentVersion Shell Extensions 右键 Blocked 选择 新建 字符串值 名称为 e2bf9676 5f8f 43
  • 联想小新pro13笔记本外接显示屏没信号

    step1 关机 step2 拔下电源 step3 安住 fn 43 s 43 v键 xff0c 开机 xff08 开不了机 xff0c 我重复了几次 xff09 step4 插电源开机 xff0c 扩展屏幕正常
  • C51内存类型

    bdata bdata内存类型只能用于声明变量 您不能声明bdata函数 该存储器使用8位地址直接访问 xff0c 是8051的片内位可寻址RAM 用bdata类型声明的变量是位可寻址的 xff0c 可以用位指令读写 code 代码存储器类
  • MQTT问题

    是否存在c gt ping outstanding 61 1 的后一秒就触发TimerIsExpired amp c gt last received span class token keyword int span span class
  • Failed to start apt-news.service Failed to start esm-cache.service

    luozw 64 luozw vpc etc apt apt conf d span class token function sudo span span class token function apt get span update
  • stm中断优先级理解+抢占优先级和相应优先级

    一 抢占优先级比子优先级的优先权更高 xff0c 这意味抢占优先级更高的中断会先执行 xff0c 而不管子优先级的优先权 xff0c 数值越低优先级越高 二 同理 xff0c 如果抢占优先级相同 xff0c 那么就会比较子优先级 xff0c
  • Realsense D435基于ROS跑通ORBSLAM2

    Realsense D435基于ROS跑通ORBSLAM2 系统ubuntu16 04 ROS Kinetic 相机RealsenseD435 SLAM系统 xff1a ORBSLAM2 一 安装Realsense的SDK 官方链接 htt