【SLAM】SVO2.0编译运行和论文代码解读

2023-05-16

SVO2是我遇到的最难编译的代码了,毕竟公开版本怎么能放最好的代码呢,搞了快一个星期,终于跑起来了。

github:GitHub - uzh-rpg/rpg_svo_pro_open

论文:https://rpg.ifi.uzh.ch/docs/TRO17_Forster-SVO.pdf

1.安装和运行eurocDemo

主要参考这一篇博客进行操作的,作者写了2种编译方式,但是两种方式都需要执行的,先执行第一种,再执行第二种。此外作者介绍了一个挂梯子的办法,很不幸我复现失败。有几个地方需要补充一下:

创建工作空间

mkdir svo_ws && cd svo_ws

catkin相关配置

    # see below for the reason for specifying the eigen path
    catkin config --init --mkdirs --extend /opt/ros/<ROS-DISTRO> --cmake-args -DCMAKE_BUILD_TYPE=Release -DEIGEN3_INCLUDE_DIR=/usr/include/eigen3

将上面出现的<ROS-DISTRO>替换成你ROS的名称(18为"melodic",20为"noetic")。

下载原码

   cd src
   git clone git@github.com:uzh-rpg/rpg_svo_pro_open.git
    vcs-import < ./rpg_svo_pro_open/dependencies.yaml

把上面的git@github.com: 替换成https://github.com/,同样dependencies.yaml里面依赖的库地址也写上同样的修改。

但是非常的不幸,哪怕是这样,我的控制台也下不下来这些代码...我用了google浏览器+ghelper,只能沙比地在网页下载这些代码的.zip文件再解压缩的方法下这些代码了。注意的是这些依赖的库和svo2的代码都是平级的关系,都放在src路径里。

后来看到这篇博客,发现是我的配置佩错了,可以在上面每一个git clone后面加上:

git clone https://XXXXXX.git --config http.proxy= --config http.sslVerify=false

有一个叫做dbow2_catkin的库,它的CmakeList.txt也需要下载代码:

ExternalProject_Add(dbow2_src
  #GIT_REPOSITORY git@github.com:dorian3d/DBoW2.git
	GIT_REPOSITORY https://github.com/dorian3d/DBoW2.git
  CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CATKIN_DEVEL_PREFIX}
  BUILD_COMMAND CXXFLAGS=-i${CATKIN_DEVEL_PREFIX}/include make
  INSTALL_COMMAND make install
)

同样下不下来一时陷入了僵局,我还是通过google浏览器下载了这个代码,然后解压到svo_ws/build/dbow2_catkin/dbow2_src-prefix/src路径下,就实现了对上面这个指令的人工替换。放进去后,注释掉GIT_REPOSITORY这一行就可以编译了。

这个代码和一般catkin_make不一样,要进入到src下catkin build,这样就可以看出来哪些编译成功,哪些没编译成功。然后按照上面博客链接的做,最后终于编译成功了,然后跑一个euroc的demo试试,马上又被教做人。

运行:

roslaunch svo_ros euroc_vio_mono.launch

马上报了个这个错误,幸运的是挂掉的时候会告诉你是哪个程序挂掉的。根据上面的指示,是在回环检测模块初始化加载词袋的时候挂的,在官方readme里,他说是因为没有把词袋下载下来,要执行这个命令:

cd rpg_svo_pro_open/svo_online_loopclosing/vocabularies && ./download_voc.sh

但是,问题的关键是,我下了词袋,这些都有,还是会报错..

还有在svo_ws/src/rpg_svo_pro_open/svo_cmake/cmake/Modules/SvoSetup.cmake的6-7行,这两个都要设为true。

SET(USE_LOOP_CLOSING TRUE)
SET(USE_GLOBAL_MAP TRUE)

怎么办?那就只能,在哪里摔倒,就从哪里绕过去,你的回环检测很牛,我不用总行吧?把上面的USE_LOOP_CLOSING设为false,svo_ws/src/rpg_svo_pro_open/svo_ros/param/vio_mono.yaml的runlc设为false,再运行,还是报错...

既然这样,那就在工程里,全局搜索#ifdef SVO_LOOP_CLOSING出现的所有位置,把变量lc_出现的位置统统注释掉,报错的位置是在svo::loadVoc(),只把这里注释掉是不够的,之后运行的时候调用回环检测模块lc_的时候还是会挂,所以要把lc_执行的地方统统注释掉,

运行,终于OK了:

 如果有大佬成功运行官方回环检测的欢迎下方评论区留言。

2.论文解读

参考博客1,博客2。

虽然这是半直接法的VO/VIO,但是读这篇代码就像是走迷宫一样间接,找了半天发现核心函数是FrameHandlerBase::addFrameBundle(),我主要关注mono模式,所以找到它调用了FrameHandlerMono::processFrameBundle()函数。

TODO

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

【SLAM】SVO2.0编译运行和论文代码解读 的相关文章

  • C++程序员经常问的11个问题

    C 43 43 程序员经常问的11个问题 这篇文章收了好长时间 xff0c 但还是觉得贴出来 xff0c 作为收藏 xff0c 在网上这样的浮躁环境 xff0c 很少能认认真真地看这样长的文章 xff0c 有时间我也要把 Effective
  • C++监控USB设备

    这个程序前阵子帮一个朋友实现的 xff0c 之前从未用消息队列做过类似的事情 xff0c 做完后感觉其在线程同步 xff0c 通信发面很好用 xff0c 难怪COM也用这套机制 程序稍微修改便能用作一般性的处理 xff0c 目前实现的功能类
  • TCP通信

    客户端的代码 xff1a 1 include 34 utili h 34 2 3 int main 4 5 int sockCli 61 socket AF INET SOCK STREAM 0 6 if sockCli 61 61 1 7
  • 解决引用openssl静态库libcrypto.a和libssl.a出现undefined reference to错误的问题

    解决引用openssl静态库libcrypto a和libssl a出现undefined reference to错误的问题 最近在做使用openssl链接http和https的项目 xff0c 编译时出现以下问题 usr local o
  • ssh允许root登录

    vi etc ssh sshd config Authentication LoginGraceTime 120 PermitRootLogin without password 找到这里 xff0c 把它注释 PermitRootLogi
  • 大型网站技术架构

    大型网站技术架构 xff08 1 xff09 网站都是从小网站一步一步发展为大型网站的 xff0c 而这之中的挑战主要来自于庞大的用户 安全环境恶劣 高并发的访问和海量的数据 xff0c 任何简单的业务处理 xff0c 一旦需要处理数以 P
  • iOS线程池

    多线程开发是一件需要特别精心的事情 xff0c 即使是对有多年开发经验的工程师来说 为了能让初级开发工程师也能使用多线程 xff0c 同时还要简化复杂性 各种编程工具提供了各自的办法 对于iOS来说 xff0c 建议在尽可能的情况下避免直接
  • QT https post请求

    以VS开发为例 因为https访问需要用到SSL认证 xff0c 而QT默认是不支持SSL认证 xff0c 所以在使用之前必须先做一些准备工作 xff1a 需要安装OpenSSL库 xff1a 1 首先打开http slproweb com
  • 在windows下的QT编程中的_TCHAR与QString之间的转换

    由于在windows下的QT编程中 xff0c 如果涉及到使用微软的API xff0c 那么不可避免使用 TCHAR这些类型 xff0c 因此在网上查了一下 xff0c 其中一个老外的论坛有人给出了这个转换 xff0c 因此在这里做一下笔记
  • QT图片旋转

    目前发现有两种方法 xff0c 如下 xff1a 1 使用QPixmap的transformed函数旋转 xff0c 这个函数默认是以图片中心为旋转点 xff0c 不能随意设置旋转点 xff0c 使用如下 xff1a QMatrix lef
  • signtool对EXE进行签名

    数字证书 xff0c 真是个神奇的东西 xff0c 可以保证软件不被修改 xff0c 可以表明文件的发布日期 xff0c 最重要的 xff0c 可以很大程度的减少杀毒软件的误报 xff0c 当然 xff0c 这就要使用可信任的机构颁发的证书
  • Linux C语言实现UDP的发送和接收

    发送端实现 xff1a U1 c include lt stdio h gt include lt stdlib h gt include lt string h gt include lt sys socket h gt include
  • C语言 特殊的数字

    问题描述 153是一个非常特殊的数 xff0c 它等于它的每位数字的立方和 xff0c 即153 61 111 43 555 43 333 编程求所有满足这种条件的三位十进制数 span class token macro property
  • STL简单的介绍

    我们要知道C 43 43 的含义 xff1a C语言 43 类 43 模板 xff08 STL就是典型的代表 xff09 STL是Standard Template Library的简称 xff0c 中文名是标准模库 从根本上说 xff0c
  • C语言 查找整数

    问题描述 给出一个包含n个整数的数列 xff0c 问整数a在数列中的第一次出现是第几个 输入格式 第一行包含一个整数n 第二行包含n个非负整数 xff0c 为给定的数列 xff0c 数列中的每个数都不大于10000 第三行包含一个整数a x
  • C语言 字母图形

    问题描述 利用字母可以组成一些美丽的图形 xff0c 下面给出了一个例子 xff1a ABCDEFG BABCDEF CBABCDE DCBABCD EDCBABC 这是一个5行7列的图形 xff0c 请找出这个图形的规律 xff0c 并输
  • C++ 无参构造函数

    设计表示平面坐标位置的点类 xff0c 可以修改和获取点的x y坐标值 xff0c 设置构造函数对点的数据成员进行初始化 xff0c 并且能够用数组保存一系列的点 span class token macro property span c
  • C语言 矩阵乘法

    问题描述 给定一个N阶矩阵A xff0c 输出A的M次幂 xff08 M是非负整数 xff09 例如 xff1a A 61 1 2 3 4 A的2次幂 7 10 15 22 输入格式 第一行是一个正整数N M xff08 1 lt 61 N
  • C语言 分解质因数

    问题描述 求出区间 a b 中所有整数的质因数分解 输入格式 输入两个整数a xff0c b 输出格式 每行输出一个数的分解 xff0c 形如k 61 a1a2a3 a1 lt 61 a2 lt 61 a3 xff0c k也是从小到大的 具
  • 编译原理 赋值语句翻译成四元式

    赋值语句及算数表达式的翻译 将赋值语句翻译成四元式的语义描述 1 S gt id 61 A 2 A gt id 3 A gt int 4 A gt real 5 A gt A1 43 A2 6 A gt A1A2 7 A gt A1 8 A

随机推荐

  • 关联容器知识点通关

    关联容器 1 关联容器与顺序容器的区分2 关联容器的数据2 1 数据存储2 1 1 pair类型2 1 2 关联容器的类型别名2 1 3 关联容器迭代器 2 2 关联容器的初始化 3 关联容器的增删改查3 1 关联容器增加元素3 2 删除关
  • django JWT 验证401错误

    因为前端请求时携带了Authorization请求头 xff08 主要是JWT xff09 xff0c 而如果用户未登录 xff0c 此请求头的JWT无意义 xff08 没有值 xff09 xff0c 为了防止REST framework框
  • “轻松搞定 CMake”系列之 find_package 用法详解

    一 find packakge 命令基本介绍 在我们实际开发过程中 xff0c 经常不可避免会使用到第三方开源库 xff0c 这些开源库可能是通过 apt get install 命令自动安装到系统目录中 xff0c 也可能是由我们自己下载
  • STL中的string类

    一 string是什么 xff1f string类是专门的字符串操作的一个类 xff0c 非常的强大 二 string与char 的区别 xff1a char 呢就是指向字符数组地址的指针 xff0c 然后我们提供了一个string h x
  • Cpp 对象模型探索 / 父类和子类调用构造函数和析构函数的顺序

    2018 03 19 创建人 xff1a Ruo Xiao 邮箱 xff1a xclsoftware 64 163 com 一 建立对象过程 father son 栗子 xff1a span class token keyword clas
  • 串口通信 / 奇校验、偶校验、0 校验和 1 校验

    时间 xff1a 2019 01 28 创建人 xff1a Ruo Xiao 邮箱 xff1a xclsoftware 64 163 com 一 目的 对数据传输的正确与否进行校验 二 方法 奇校验 xff1a 让主体数据加上校验位中的 1
  • 堆栈向下增长和向上增长的理解

    时间 xff1a 2019 01 31 创建人 xff1a Ruo Xiao 邮箱 xff1a xclsoftware 64 163 com 假设堆栈为数组Taskstk unsigned int Taskstk 255 堆栈压数从栈顶压向
  • C++--名字修饰

    名字修饰 在C C 43 43 中 xff0c 一个程序要运行起来 xff0c 需要经历以下几个阶段 xff1a 预处理 编译 汇编 链接 名字修饰 xff08 Name Mangling xff09 是一种在编译过程中 xff0c 将函数
  • 【ROS入门】解决Could not find a package configuration file provided by “nmea_msgs“问题

    笔者Linux虚拟机系统为Ubuntu20 04 xff0c 安装ROS我参考的是https blog csdn net weixin 45168199 article details 106910446 安装完成后创建ROS工作空间 mk
  • C#中的屏蔽、覆写和抽象

    屏蔽基类成员 虽然派生类不能删除其继承的任何成员 xff0c 但可以声明一个与基类成员签名相同的成员来屏蔽之 xff08 注意方法的签名由名称和参数列表组成 xff0c 不包括返回值类型 xff09 要让编译器知道你在故意屏蔽继承的成员 x
  • 【计算机网络】第一章:计算机网络概述

    各个章节的知识点总结传送门如下 xff0c 欢迎自取 xff1a 计算机网络 第一章 xff1a 计算机网络概述描述 计算机网络 第二章 xff1a 物理层 计算机网络 第三章 xff1a 数据链路层 计算机网络 第四章 xff1a 网络层
  • 【计算机网络】第二章:物理层

    各个章节的知识点总结传送门如下 xff0c 欢迎自取 xff1a 计算机网络 第一章 xff1a 计算机网络概述https blog csdn net iwanderu article details 103795715 计算机网络 第二章
  • 【计算机网络】第四章:网络层

    各个章节的知识点总结传送门如下 xff0c 欢迎自取 xff1a 计算机网络 第一章 xff1a 计算机网络概述https blog csdn net iwanderu article details 103795715 计算机网络 第二章
  • ASCII码与16进制的互相转换(表)

    所谓的ASCII和16进制都只是概念上的东西 xff0c 在计算机中通通是二进制 转换应该是输出的转换 xff0c 同样是一个数 xff0c 在计算机内存中表示是一样的 xff0c 只是输出不一样 ASCII是针对字符的编码 xff0c 几
  • 【操作系统】 Operation System 第一章:概述

    各部分总结知识点如下 xff1a 操作系统 Operation System 第一章 xff1a 概述 操作系统 Operation System 第二章 xff1a 操作系统基础操作 操作系统 Operation System 第三章 x
  • 【openCV踩坑日记】人工数据集Synthetic Shapes dataset的生成方法

    1 为什么要介绍这个方法 xff1f 2018年的时候 xff0c D DeTone等人发表了Self Supervised Interest Point Detection and Description xff0c 提出了一种特征提取S
  • 【SLAM】ORB-SLAM3解析——综述(1)

    之前学习VINS和LIO SAM的时候都是代码流 xff0c 不是很重视看论文 xff0c 现在有空学ORB SLAM3了 xff0c 这一次 xff0c 先看一下论文 考虑到边上班边学 xff0c 更新的会比较慢 看完论文之后 xff0c
  • 【SLAM】LVI-SAM解析——综述

    LVI SAM可以认为是LIO SAM和VINS MONO的合体 xff0c 在此基础上的修改不大 github xff1a https github com TixiaoShan LVI SAM paper LVI SAM Tightly
  • 【SLAM】DM-VIO(ros版)安装和论文解读

    1 dm vio的安装 进入官方链接 xff0c 基本上就是按照readme的操作来 xff1a 下载代码 xff1a git clone https github com lukasvst dm vio git 安装gtsam xff1a
  • 【SLAM】SVO2.0编译运行和论文代码解读

    SVO2是我遇到的最难编译的代码了 xff0c 毕竟公开版本怎么能放最好的代码呢 xff0c 搞了快一个星期 xff0c 终于跑起来了 github xff1a GitHub uzh rpg rpg svo pro open 论文 xff1