使用自己的INDEMIND相机来运行ORBSLAM2单目,双目和深度模式(小觅相机和realsense通用)

2023-05-16

流程一览

  • 配置ROS
    • ROS环境准备(以16.04 ROS Kinetic为例)
    • 创建自己的工作空间:
  • 配置ORBSLAM
    • 编译ORBSLAM2 ROS
    • 常见错误及解决
      • 运行build-ros.sh时出现问题一:
      • 运行build-ros.sh时出现问题二:这个问题的核心在与链接boost库出了问题:
  • 安装及配置相机INDEMIND相机SDK
    • 编译ROS样例
  • ORBSLAM2ROS读取相机内容
  • 启动相机和ORBSLAM2_ROS
    • 启动相机
    • 启动ORBSLAM2_ROS
    • 三个节点的用法
  • 运行结果

配置ROS

ROS环境准备(以16.04 ROS Kinetic为例)

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /
, → etc/apt/sources.list.d/ros-latest.list'
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key␣
, → C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
sudo apt-get update
sudo apt-get install ros-kinetic-desktop-full
sudo rosdep init
rosdep update
echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
source ~/.bashrc

创建自己的工作空间:

mkdir -p ~/catkin_ws/src  //创建文件夹
cd ~/catkin_ws/src        //定位到src
catkin_init_workspace     //对工作空间进行初始化

配置ORBSLAM

可以直接git,网速不好的可以直接去下压缩包:
下载地址:https://webdiis.unizar.es/~raulmur/orbslam/:.

编译ORBSLAM2 ROS

按照github上步骤准备好依赖库之后,执行:

cd catkin_ws/src
git clone https://github.com/raulmur/ORB_SLAM2.git ORB_SLAM2
cd ORB_SLAM2
chmod +x build.sh
./build.sh
#我们要用到他们ros库,所以执行
chmod +x build_ros.sh
./build_ros.sh

如果执行顺利,我们可以在Examples的ROS/ORBSLAM2下看到生成好的Mono,MonoAR,RGBD,Stereo文件.

常见错误及解决

运行build-ros.sh时出现问题一:

[rosbuild] rospack found package "ORB_SLAM2" at "", but the current   directory is "/home/angelo/ORB_SLAM2/Examples/ROS/ORB_SLAM2".  You should   double-check your ROS_PACKAGE_PATH to ensure that packages are found in the   correct precedence order.

解决方案:

 sudo ln -s ~/ORB_SLAM2/Examples/ROS/ORB_SLAM2 /opt/ros/<ros版本名>/share/ORB_SLAM2

运行build-ros.sh时出现问题二:这个问题的核心在与链接boost库出了问题:

/usr/bin/ld: CMakeFiles/RGBD.dir/src/ros_rgbd.cc.o: undefined reference to symbol '_ZN5boost6system15system_categoryEv'
/usr/lib/x86_64-linux-gnu/libboost_system.so: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
CMakeFiles/RGBD.dir/build.make:217: recipe for target '../RGBD' failed
make[2]: *** [../RGBD] Error 1
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/RGBD.dir/all' failed
make[1]: *** [CMakeFiles/RGBD.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
/usr/bin/ld: CMakeFiles/Stereo.dir/src/ros_stereo.cc.o: undefined reference to symbol '_ZN5boost6system15system_categoryEv'
/usr/lib/x86_64-linux-gnu/libboost_system.so: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
CMakeFiles/Stereo.dir/build.make:217: recipe for target '../Stereo' failed
make[2]: *** [../Stereo] Error 1
CMakeFiles/Makefile2:104: recipe for target 'CMakeFiles/Stereo.dir/all' failed
make[1]: *** [CMakeFiles/Stereo.dir/all] Error 2

解决方案:打开Examples/ROS/ORB_SLAM2的Cmakelists,在

set(LIBS 
${OpenCV_LIBS} 
${EIGEN3_LIBS}
${Pangolin_LIBRARIES}
${PROJECT_SOURCE_DIR}/../../../Thirdparty/DBoW2/lib/libDBoW2.so
${PROJECT_SOURCE_DIR}/../../../Thirdparty/g2o/lib/libg2o.so
${PROJECT_SOURCE_DIR}/../../../lib/libORB_SLAM2.so
#增加本行,有很多解决办法,这样最为简便
-lboost_system 
)

安装及配置相机INDEMIND相机SDK

Github地址: https://github.com/INDEMIND/IMSEE-SDK.
支持平台
SDK基于cmake构建,跨Ubuntu、Win10平台。其中支持x64/tx2/firefly rk系列等不同架构下Ubuntu的支持。目前已完全测试通过的平台有:

Ubuntu 16.04 on x64
Ubuntu 16.04 on TX2
Ubuntu 16.04 on RK3328

编译ROS样例

已经写好了makefile文件,所以非常简单

cd <sdk>
make ros

运行

cd <sdk>
sudo su # 进入权限模式
source ros/devel/setup.bash
roslaunch imsee_ros_wrapper start.launch # 如果您想预览rviz,则运行roslaunch imsee_ros_wrapper display.launch

查看发布节点

rostopic list

我们需要的Topic名称如下:

/imsee/camera_info#相机信息
/imsee/depth#深度图
/imsee/image/left#左相机图像
/imsee/image/right#右相机图像
/imsee/imu#imu信息

这样我们就可以直接改变ORBSLAM2ROS的话题来读取相机内容

ORBSLAM2ROS读取相机内容

cd ~/catkin_ws/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2/src
 ros_mono.cc #单目ros源文件
 ros_rgbd.cc #深度相机ros源文件
 ros_stereo.cc #双目ros源文件

以双目相机为例,找到ros订阅话题的部分,将其中的内容改为如下所示:

ros::NodeHandle nh;
//其中话题的部分改为IdemindSDK话题订阅的话题名称.此处位左目相机和右目相机
message_filters::Subscriber<sensor_msgs::Image> left_sub(nh, "/imsee/image/left", 1);
message_filters::Subscriber<sensor_msgs::Image> right_sub(nh, "/imsee/image/right", 1);
typedef message_filters::sync_policies::ApproximateTime<sensor_msgs::Image, sensor_msgs::Image> sync_pol;
message_filters::Synchronizer<sync_pol> sync(sync_pol(10), left_sub,right_sub);
sync.registerCallback(boost::bind(&ImageGrabber::GrabStereo,&igb,_1,_2));

ros::spin();

启动相机和ORBSLAM2_ROS

启动相机

cd <sdk>
sudo su # 进入权限模式
source ros/devel/setup.bash
roslaunch imsee_ros_wrapper start.launch # 如果您想预览rviz,则运行roslaunch imsee_ros_wrapper display.launch

启动ORBSLAM2_ROS

cd ~/catkin_ws/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2
#ORBvoc.txt为词典内容,示例自带的Asus.yaml为相机的内参格式,可以按照自己的标定结果更改,false为是否矫正标志位
rosrun ORB_SLAM2 Stereo  ../../../Vocabulary/ORBvoc.txt Asus.yaml false

如果报这个错误,就重新打开一个终端,开roscore:

[ERROR] [1591685038.629400679]: [registerPublisher] Failed to contact master at [localhost:11311].  Retrying...
#重新打开一个终端,输入:
roscore

三个节点的用法

其中注意Stereo节点最后一个参数意为是否矫正,一般设为false就可以了,更深入的细节可以按需查看文档:

#单目
Usage: rosrun ORB_SLAM2 Mono path_to_vocabulary path_to_settings
#深度相机
Usage: rosrun ORB_SLAM2 RGBD path_to_vocabulary path_to_settings
#双目相机
Usage: rosrun ORB_SLAM2 Stereo path_to_vocabulary path_to_settings do_rectify

运行结果

至此,成功运行啦:
在这里插入图片描述

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

使用自己的INDEMIND相机来运行ORBSLAM2单目,双目和深度模式(小觅相机和realsense通用) 的相关文章

  • 【STM32】条件编译不起作用是什么原因

    在工程中定义了几个条件编译 xff0c 用来适应不同的硬件设备 xff0c 但是好像不起作用似的 这种情况可能是在多个文件中使用了条件编译 xff0c 但是编译工程的时候又只是编译了部分文件 xff0c 即使有部分使用了条件编译的文件没有被
  • 一文看懂rtc实时时钟和单片机时钟的区别

    rtc实时时钟和单片机时钟的区别 实时时钟是指给日期及时间计数器累加的时钟 xff0c 通常是32768Hz xff0c 系统时钟是指单片机内部的主时钟 xff0c 给各个模块提供工作时钟的基础 xff0c CPU时钟是指经过CPU的PLL
  • PhotoScan处理无人机航拍照片GCP校正流程

    PhotoScan处理无人机航拍照片GCP校正流程 软件最近更新版本较频繁 xff0c 菜单条目变化较大 xff0c 但基本功能没变 Agisoft PhotoScan xff08 APS xff09 现改名 Metashape了 Phot
  • 2022年研发效能实践案例智库集-EQCon

    2022年研发效能实践案例智库集 xff1a Docs
  • git四区逻辑关系(工作区、暂存区、本地仓库、远程仓库)

  • 推荐一个提高实现目标效率和过滤不现实目标的方法:WOOP

    推荐一个提高实现目标效率和过滤不现实目标的方法 xff1a WOOP WOOP 分别是 Wish xff08 愿望 xff09 Outcome xff08 效果 xff09 Obstacle xff08 障碍 xff09 和 Plannin
  • 序列图教程-完整指南及示例

    Sequence Diagram Tutorial Complete Guide with Examples Creately
  • 什么是好的策略?

    好的策略是承认每个人都是自私的 xff0c 但是你的策略能够在人人都是自私的基础上获得全局利益的最大化 xff0c 如果你的全局利益最大化是建立在要求每个人都是大公无私的 xff0c 那就是失败的设计 xff0c 因为这必然会导致失败
  • 软件工程3.0

  • pod、container、sidecar

    pod是一个小家庭 xff0c 它把密不可分的家庭成员 container 聚在一起 xff0c Infra container则是家长 xff0c 掌管家中共通资源 xff0c 解决顺序和依赖关系 xff0c 家庭成员通过sidecar方
  • 4种SQL标准的事务隔离级别

    SQL标准的事务隔离级别包括 xff1a 读未提交 xff08 read uncommitted xff09 xff1a 一个事务还没提交时 xff0c 它做的变更就能被别的事务看到 读提交 xff08 read committed xff
  • 设计容器网络插件的初步思路

    同一个 Pod 里面的所有用户容器的进出流量 xff0c 可以认为都是通过 Infra 容器完成的 当为Kubernetes 开发一个网络插件时 xff0c 应该重点考虑的是如何配置这个 Pod 的 Network Namespace xf
  • 各种显示接口DBI、DPI、LTDC、DSI、FSMC

    各种显示接口DBI DPI LTDC DSI FSMC qq 23899395 2019 06 05 17 30 36 4810 收藏 36 版权 首先 xff0c MIPI xff08 Mobile Industry Processor
  • 在ubuntu 16.04安装ROS Kinetic

    ubuntu16 04 已经发布一个月了 xff0c ROS的Kinetic也已经发布 xff0c 需要了解ROS发行版及支持维护的时间等 xff0c 可以参考如下网页 xff1a http wiki ros org Distributio
  • ROS创建工作空间和功能包

    所有的ROS程序 xff0c 包括我们自己开发的程序 xff0c 都被组织成功能包 xff0c 而ROS的功能包被存放在称之为工作空间的目录下 因此 xff0c 在我们写程序之前 xff0c 第一步是创建一个工作空间以容纳我们的功能包 1
  • MPU-6000(6050)介绍

    MPU 6000 xff08 6050 xff09 简介 MPU 60X0是全球首例9 轴运动处理传感器 它集成了3 轴MEMS陀螺仪 xff0c 3 轴MEMS加速度计 xff0c 以及一个可扩展的数字运动处理器DMP xff08 Dig
  • lwip/uip移植之一

    最近一直想移植一个tcp ip协议栈到板子上 xff0c 于是想到了lwip和uip lwip是一个比较完整的协议栈 xff0c 功能强大 xff0c 结合ucos系统更是方便完美 xff0c 但是需要几十k的ram xff0c 这点在我f
  • Nvidia Xavier GPIO 输入输出 中断 PWM

    文章目录 前言Jetson GPIO安装可用引脚点亮LEDGPIO输出示例GPIO输入示例GPIO EventGPIO InterruptPWM微信公众号 前言 Nvidia Jetson AGX Xavier 硬件相关 这篇讲到Xavie
  • Jetson Xavier/XavierNX/TX2 CANFD 配置使用

    目录 TX2 Xavier NX Xavier CAN特性TX2 Xavier NX Xavier 载板引出位置CAN收发器NVIDIA CAN DriverXavier CAN 引脚配置Jetson CAN 设置设置开机运行查看连接状态C
  • Altium Designer使用Git构想

    今天看了dtysky的 体三维显示器 PCB部分 LED阵列 用脚本写的上万个LED的自动布局和自动布线 很震惊 很欣赏 很喜欢 或许有很多我们可以想象的空间 这篇主要写Git Git主要管理文本文件 二进制文件却不大合适 尽管有 使用 G

随机推荐

  • 如何拿到阿里offer的?面试流程及面试题

    一个偶然的开始 交待一下 非广告 xff0c 第一次用拉勾 xff0c 感觉做的挺好 xff0c 以前一直用51job 从7月分开始 xff0c 打算找工作 xff0c 一个偶然的机会 xff0c 拉勾上一个蚂蚁金服的同学找到我 xff0c
  • STM32和Linux(转载)

    Linux和stm32 一个是软件平台一个是硬件平台 xff0c 完全不一样的 xff08 记住 xff0c 是平台 xff01 xff09 这样说吧 xff0c 既然你喜欢单片机 xff0c 就先学stm32 xff0c 把硬件基础打牢
  • PX4飞控问题之参数重置问题

    PX4在上电的时候会出现参数重置的问题 xff0c 出现这个问题的机率很小 xff0c 可能上电几千甚至上万次才会出现一次重置的情况 xff0c 但一旦出现了参数重置 xff0c 飞机就无法飞行 xff0c 得重新校准传感器 要解决这个问题
  • STM32硬件基础--LTDC显示图像

    STM32硬件基础 LTDC显示图像 海东青电子 2019 11 13 23 40 05字数 2 635阅读 3 102 海东青电子原创文章 xff0c 转载请注明出处 xff1a https www jianshu com p 21638
  • PX4轨迹生成公式推导

    PX4轨迹生成公式推导下载链接 对于多旋翼 飞行任务的时候 通过地面站画出航点 上传给飞控 飞控通过轨迹生成算法生成平滑的目标位置 速度及加速度 给位置控制模块控制飞机的位置 速度及加速度 PX4轨迹生成的方法为 约束加加速度的S型速度曲线
  • 植保无人机航线规划

    最近折腾了植保无人机航线规划的算法 支持任意多边形 不包括自相交多边形 的边界及障碍区域 其中涉及到了多边形内缩外扩 多边形的分解 多边形交集 并集 差集 深度优先搜索 最短路径算法 耗时两个多月 用C 实现整套算法 生成的库在missio
  • 现代控制工程笔记(一)控制系统的状态空间描述

    文章目录 1 基本概念2 系统的状态空间描述状态空间描述框图状态变量选取的非唯一性 3 由系统微分方程列写状态空间表达式一 微分方程中不包含输入函数的导数项相变量法其他方法 xff1a 二 微分方程中包含输入函数的导数项 4 由传递函数列写
  • 百度Apollo 2.0 车辆控制算法之LQR控制算法解读

    百度Apollo 2 0 车辆控制算法之LQR控制算法解读 Apollo 中横向控制的LQR控制算法在Latcontroller cc 中实现 根据车辆的二自由度动力学模型 1 根据魔术公式在小角度偏角的情况下有 轮胎的侧向力与轮胎的偏离角
  • 多传感器融合--MATLAB跟踪器介绍

    多传感器融合 MATLAB跟踪器介绍 MATLAB通过多目标跟踪器可以融合多传感器检测到的目标信息 xff0c 常用到的多目标跟踪器有trackerGNN trackerJPDA trackerTOMHT trackerPHD等 track
  • MATLAB多传感器融合--核心步骤

    MATLAB多传感器融合 核心步骤 MATLAB的多传感器融合的核心步骤在stepImpl函数中实现 xff0c 该函数的输入的跟踪目标和测量的目标的信息 xff0c 输出为证实的真目标信息和处于试探的跟踪目标信息 confirmedTra
  • [新手编译内核]kernel进行编译时提示No rule to make target `menconfig'.

    windows下下载了 linux 2 6 37内核源码 xff0c 拷贝到U盘上 xff0c 通过mount挂载到了虚拟机里的Centos 5 5系统上 通过putty使用host only方式连接到虚拟机 xff0c 进行操作 在 mn
  • 协议和协议栈的区别?

    在通信领域特别是无线通信领域 xff0c 我们经常会听到用到什么协议啊 xff0c 什么协议栈方面的东西 1 首先 xff0c 协议定义的是一些列的通信标注 xff0c 通信的双方需要共同按照这一个标准进行正常的数据收发 xff1b 在计算
  • linux-kernel, bus总线数据结构分析

    设备模型中的三大组件是 xff1a 总线 xff0c 驱动 xff0c 设备 bus driver device 数据结构总览 总线除了一些物理总线的抽象 xff0c 还代表一些虚拟的总线 xff0c 如platform xff0c 所以在
  • JavaScript 猜数字小游戏

    说明 单独创建一个js文件 然后在文件里面写入下列代码 之后在html页面引入该js文件即可 span class token comment 设计并实现 猜数游戏 xff0c 并输出每轮猜数游戏的猜测次数 游戏规则如下 xff1a spa
  • 纯干货:LCD屏和OLED屏的区别?手机屏幕材质各有什么区别?

    纯干货 xff1a LCD屏和OLED屏的区别 xff1f 手机屏幕材质各有什么区别 xff1f 慢慢买比价 已认证的官方帐号 74 人赞同了该文章 今天我就为大家带来一篇纯干货知识点整理 xff0c 关于手机屏幕那点事看完秒懂 以及大家对
  • OpenJDK在OpenHarmony上异常问题分析

    目录 0 前言1 问题日志打印2 报错日志代码分析3 问题解决方案 0 前言 基于OpenHarmony的2022 06 30 master之前版本OpenJDK测试OK xff0c 但是之后版本测试报异常错误 1 问题日志打印 2 报错日
  • vnc viewer远程连接xfce桌面无法打开terminal终端

    这是因为默认的terminal错啦 xff0c 改一下就好 在页面左上角上找到 Appication gt Settings gt Settings Manager gt Preferred Applications gt Utilitie
  • ucosii第一章读书笔记

    第一章 嵌入式操作系统 1 1 计算机操作系统 简介 xff1a 嵌入式操作系统属于操作系统的一种 嵌入式操作系统的概念 xff1a 应用于嵌入式系统的操作系统叫做嵌入式操作系统 操作系统的概念 xff1a 是一种系统软件 作用于硬件和应用
  • ceres中的loss函数实现探查,包括Huber,Cauchy,Tolerant图像实现及源码

    ceres中的loss函数实现探查 xff0c 包括Huber xff0c Cauchy xff0c Tolerant图像实现及源码 各个损失函数的趋势图 xff1a Ceres内嵌的loss functions原理 xff1a 以Cauc
  • 使用自己的INDEMIND相机来运行ORBSLAM2单目,双目和深度模式(小觅相机和realsense通用)

    流程一览 配置ROSROS环境准备 以 xff11 6 04 ROS Kinetic为例 创建自己的工作空间 配置ORBSLAM编译ORBSLAM2 ROS常见错误及解决运行build ros sh时出现问题一 运行build ros sh