初探DSO-SLAM并运行dso_ros

2023-05-16

        最近在做SLAM相关的工作,用思岚的A2激光雷达在turtlebot3上测试SLAM建图效果,感觉还是不错的。由于项目在方案上还没有确定选择哪种作为SLAM的最终方案,在我测试奥比中光ASTRA mini 3D摄像头,看看在构建地图上有什么优势。所以在查询资料中我看到了DSO,感觉DSO还是比较简单的,使用的稀疏直接法,虽然遇到过很多坑,但最终还是一一的解决了。DSO(Direct Sparse Odometry)是慕尼黑工业大学Engel于2016年发布在arXiv上的一种基于直接法,构建稀疏点云地图的视觉里程计。在VSLAM中还是独树一帜的吧,虽然相关资料比较少,但是进行一些简单测还是没问题的啦,废话不多说,开始进入正题。(本人使用的是zshell)

安装dso:

1.首先安装相关依赖包(如果你没有安装的话):

➜  ~  sudo apt-get install libsuitesparse-dev libeigen3-dev libboost-dev
➜  ~  sudo apt-get install libopencv-dev

2. 下载dso包:

➜  ~  mkdir ~/dso_pkg
➜  dso_pkg  git clone https://github.com/JakobEngel/dso.git

3 .根据DSO官方的要求是要配置Pangolin(用于3D可视化和GUI)和ziplib(用于读取图像为.zip的数据集):

安装zlibzp并编译dso
➜  ~  sudo apt-get install zlib1g-dev
➜  ~  cd ~/dso_pkg/dso/thirdparty
➜  thirdparty git:(master)  tar -zxvf libzip-1.1.1.tar.gz
➜  thirdparty git:(master)   cd libzip-1.1.1/
➜  libzip-1.1.1 git:(master)  ./configure
➜  libzip-1.1.1 git:(master)   make
➜  libzip-1.1.1 git:(master)  sudo make install
➜  libzip-1.1.1 git:(master)  sudo cp lib/zipconf.h /usr/local/include/zipconf.h
安装Pangolin
➜  ~  cd dso_pkg
➜  dso_pkg  git clone https://github.com/stevenlovegrove/Pangolin.git
➜  ~  cd Pangolin
➜  Pangolin git:(master)   mkdir build
➜  build git:(master)   cd build
➜  build git:(master)   cmake -DCPP11_NO_BOOST=1 ..
➜  build git:(master)   make -j

4.在TUM单目数据集上运行DSO

下载TUM单目数据集请到https://vision.in.tum.de/data/datasets/mono-dataset?redirect=1下载你所需要的zip包,我下载的是sequence_14,根据需要自行下载。下载好把zip包放到dso的bin目录下并解压,我的是

➜  bin git:(master) pwd
/home/zpq/dso_pkg/dso/build/bin
➜  bin git:(master) unzip sequence_14.zip 
在bin目录下运行启动数据集:
./dso_dataset files=./sequence_14/images.zip calib=./sequence_14/camera.txt gamma=./sequence_14/pcalib.txt vignette=./sequence_14/vignette.png preset=0 mode=0

运行成功啦....那我们接下来运行dso_ros把,这个有点坑,好吧,身为程序猿的我们不怕坑踩不过,就拍没有坑!来吧。

利用外接摄像头实时运行DSO

Engel同时发布了dso_ros,用ROS来实时获取图片,程序代码很简短,实际上它是作者提供的一个如何把DSO当做一个黑盒子来使用的样例。这里需要用到ros啦,没有装好ros系统的同学,可以先装好ros并搭建好一个工作空间,传送门https://blog.csdn.net/bflong/article/details/80936914,

第一个坑:原作者提供的源代码有两个分支,master分支对应rosbuild版,catkin分支对应catkin版。对于现代ROS版本,推荐使用catkin版本,安装使用更方便。但是作者的catkin分支存在代码缺陷,rosmake 找不到包,实际无法安装使用,这让是人百思不得其解,之后我就查了好多的资料,绝大数的都不适用,也许是我的版本配置的问题吧,最后我找到蓝鲸智能修改之后的dso_ros版本,终于是看到希望啦,真是谢谢大佬:https://blog.csdn.net/smilinglamb/article/details/80656872?utm_source=blogxgwz2

下载并编译
➜  ~ cd catkin_ws/src
➜  src git clone https://github.com/BlueWhaleRobot/dso_ros.git 
➜  ~ cd ..
➜  catkin_ws export DSO_PATH=/home/zpq/dso_pkg/dso
➜  catkin_ws catkin_make
安装编译usb_cam
➜  ~ cd ~/catkin_ws/src
➜  src git clone https://github.com/bosch-ros-pkg/usb_cam.git 
➜  catkin_ws cd ..
➜  catkin_ws catkin_make
➜  catkin_ws source ~/catkin_ws/devel/setup.bas

如果使用外接USB摄像头的话:修改launch中的usb_cam-test.launch的video0为video1就可以了


修改相机参数文件
➜  ~ gedit ~/catkin_ws/src/dso_ros/camera.txt
我的是(根据需求你们自行修改):
446.867338 446.958766 298.082779 234.334299 -0.324849 0.1205156     -0.000186 -0.000821
640 480
crop
640 480
运行dso_ros:
新开终端运行:roscore
再开一终端运行usb_cam:roslaunch usb_cam usb_cam-test.launch
再开一终端运行dso_live:rosrun dso_ros dso_live image:=/usb_cam/image_raw calib=/home/zpq/catkin_ws/src/dso_ros/camera.txt mode=1

第二个坑运行usb_cam时提示我的相机没有进行光度校准的,一般这个是不会影响我的dso_ros的运行,但是在后遇见的问题中我也不确定是否与这个问题有关,因此我查找了大量有关资料,终于找到一位大佬的博客解决的 传送门:https://blog.csdn.net/qq_25241325/article/details/82705003

 第三个坑是我根据别人的运行启动dso_live的时候,我可以看我的rostopic ,导致我的imge view 设置错误,我的usb_cam的topic是/usb_cam  因此我的启动dso_live 的image参数是:rosrun dso_ros dso_live image:=/usb_cam/image_raw calib=/home/zpq/catkin_ws/src/dso_ros/camera.txt mode=1

好啦,整个DSO 的运行测试流程以及我所遇到的坑都在这里啦,希望可以帮助各位学习DSO !

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

初探DSO-SLAM并运行dso_ros 的相关文章

随机推荐

  • Ubuntu20.04下的编译与运行LIO-SAM【问题解决】

    LIO SAM在Ubuntu20 04下编译和运行的问题 一 安装依赖项1 Boost gt 61 1 652 CMake gt 61 3 03 gcc大于4 7 3就行4 安装 TBB5 安装 MKL 二 安装GTSAM三 OpenCV
  • 在Ubuntu20.04系统上LIO-SAM跑KITTI数据集和自己数据集代码修改

    LIO SAM跑KITTI数据集和自己数据集代码修改 一 编译并运行LIO SAM二 代码修改1 cloud info msg2 imageProjection cpp 三 KITTI数据集准备四 自己数据集准备五 修改配置文件params
  • KITTI数据集Raw Data与Ground Truth序列00-10的对应关系,以及对应的标定参数

    一 KITTI官方提供的真值和标定参数下载地方 网站 xff1a Visual Odometry SLAM Evaluation 2012 具体位置 xff1a 真值 xff1a Download odometry ground truth
  • 相机内参标定,相机和激光雷达联合标定

    相机内参标定 xff0c 相机和激光雷达联合标定 一 相机标定原理1 1 成像过程1 2 标定详解 二 相机和激光雷达联合标定2 1 标定方法汇总2 2 Autoware的安装与运行2 2 1 安装方式2 2 2 安装Autoware的依赖
  • Ubuntu20.04安装和编译运行lidar_align来联合标定lidar与imu的外参

    Ubuntu20 04安装和编译运行lidar align来联合标定lidar与imu的外参 一 编译运行lidar align1 1 下载地址1 2 编译1 2 1 nlopt问题解决1 2 2 c 43 43 问题解决 二 处理数据集三
  • ROS小工具学习与使用

    ROS小工具学习与使用 rqt的使用 rqt bag工具 rqt bag span class token operator lt span your bagfile span class token operator gt span sp
  • printf函数的实现方法

    printf是一个C库函数 xff0c 用于向标准输出 xff08 stdout xff09 写入格式化的字符串 如果格式字符串包含格式说明符 xff08 以 开头的子序列 xff09 xff0c 则需要额外的参数来替换相应的说明符 实现p
  • linux下查看cmake的版本

    方法 在命令行输入指令 xff1a cmake span class token operator span version
  • C++常用标准库

    STL是Standard Template Library的简称 xff0c 中文名标准模板库 从根本上说 xff0c STL是一些 容器 的集合 xff0c 这些 容器 有list vector set map等 xff0c STL也是算
  • 如何轻松写出正确的链表代码

    如何轻松写出正确的链表代码 xff1f 1 理解指针或引用的含义 将某个变量赋值给指针 xff0c 实际上就是将这个变量的地址赋值给指针 xff0c 或者反过来说 xff0c 指针中存储了这个变量的内存地址 xff0c 指向了这个变量 xf
  • JVM之虚拟机栈详细讲解

    Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域 这些区域有各自的用途 xff0c 以及创建和销毁的时间 xff0c 有的区域随着虚拟机进程的启动而一直存在 xff0c 有些区域则是依赖用户线程的启动和结
  • 【图像处理】特征点算法整理总结

    特征点检测 1 Susan SUSA xff08 Smallest Univalue Segment Assimilating Nucleus xff09 算子是一种高效的边缘和角点检测算子 xff0c 并且具有结构保留的降噪功能 原理 用
  • 图像特征点匹配算法

    sift https blog csdn net weixin 38404120 article details 73740612 https blog csdn net abcjennifer article details 763968
  • 算法目标检测面经

    1 自我介绍 2 简历上的项目 网易雷火 AI研究员 1 ResNet FCN Fasterrcnn 2 膨胀腐蚀的原理 3 均值滤波的原理 时间复杂度 怎么优化 4 第k大的数 topK个数 网易互娱预研 深度学习计算机视觉 1 语义分割
  • 图像配准(Image Registration)简介

    图像配准在目标检测 模型重建 运动估计 特征匹配 xff0c 肿瘤检测 病变定位 血管造影 地质勘探 航空侦察等领域都有广泛的应用 每一种配准方法通常都针对某个具体问题而设计的 xff0c 众多方法中 xff0c 唯一的共性就是每个配准问题
  • SSD算法详解

    转载 xff1a https blog csdn net ytusdc article details 86577939 SSD github https github com weiliu89 caffe tree ssd SSD pap
  • 深度学习-目标检测评估指标P-R曲线、AP、mAP

    基本概念 P R曲线中 xff0c P为图中precision xff0c 即精准度 xff0c R为图中recall xff0c 即召回率 Example 下面通过具体例子说明 首先用训练好的模型得到所有测试样本的confidence s
  • 使用gitlab初次上传代码

    提要 项目开发中需要使用gitlab来管理代码 xff0c 将自己开发的模块上传到gitlab 第一次使用这个代码管理仓库 xff0c 记录一下 方法 1 首先注册gitlab的账号 这个在百度上搜一下gitlab的官网 xff0c 进去后
  • Keil5添加.c文件与.h文件的方法-导入支持库-新大陆物联网竞赛-Lora模块&NBIOT模块例程-添加导入文件

    一 概述 在某些情况下 xff0c 我们使用现用的物联网开发例程 xff0c 例如新大陆物联网的Lora与NBIOT的例程 xff0c 我们对其例程内目前所有的库不满意 xff0c 不足以实现开发需要的功能 xff0c 我们需要在原有工程上
  • 初探DSO-SLAM并运行dso_ros

    最近在做SLAM相关的工作 xff0c 用思岚的A2激光雷达在turtlebot3上测试SLAM建图效果 xff0c 感觉还是不错的 由于项目在方案上还没有确定选择哪种作为SLAM的最终方案 xff0c 在我测试奥比中光ASTRA mini