VINS-mono的编译与运行

2023-05-16

简介:VINS-mono是香港科技大学一个计算机视觉实验室的科研结果,是要是基于单目视觉惯性里程计的一个slam系统,整个项目都是内嵌于ros。非常感谢这群勤劳刻苦创新的研究者开源了这个项目。

在此我记录下我自己的编译运行过程中遇到的问题,前前后后也花了一些时间才能编译并成功运行。

我的计算机环境:Ubuntu14.04
1.首先看到了他们项目的说明文档,需要安装ros,根据自己的Ubuntu版本,我需要安装indigo(其他更高版本的Ubuntu可能就是安装kinetic),然后上ros的官网:添加链接描述,看看具体如何安装。整个过程直到安装才出现问题,应该是几个依赖包一直没安装上,所以ros-indigo-desktop-full安装不成功,然后自己边百度问题边捣鼓,甚至用到aptitude命令安装依赖项,也没有成功,后来可能看到这篇博客:添加链接描述,里面有一个小说明,重复执行第三步(即重复update更新和安装依赖项),最后解决了。后面就按ros官网上的步骤去初始化等,最后成功安装ros。
2.然后是创建ros工作空间catkin_ws
(1)mkdir -p ~/catkin_ws/src # 创建这样一个目录文件夹,最终位置在/home/catkin_ws/src

(2)cd ~/catkin_ws/src # 进入/src文件夹里
(3)catkin_init_workspace # src里就会有个CMakeLists.txt文件
3.然后按项目的说明文档用git命令把项目下载到/src目录里
4.安装其他库ceres等(当时看slam十四讲的时候就装过了)
5.返回/catkin_ws目录,在此目录下编译项目catkin_make。
编译结果:时间虽然有点久但是成功了,但有几个警告:
/usr/bin/ld: warning: libopencv_features2d.so.3.4, needed by /usr/local/lib/libopencv_sfm.so.3.4.0, may conflict with libopencv_features2d.so.2.4
警告都是opencv库的冲突问题,我也没太在意,警告而已,开始下数据集,运行。结果果然出问题:
Bad argument (Invalid pointer to file storage) in cvGetFileNodeByName, file /build/opencv-_msWgW/opencv-2.4.8+dfsg1/modules/core/src/persistence.cpp, line 740
terminate called after throwing an instance of ‘cv::Exception’
what(): /build/opencv-_msWgW/opencv-2.4.8+dfsg1/modules/core/src/persistence.cpp:740: error: (-5) Invalid pointer to file storage in function cvGetFileNodeByName
然后首先想到该项目的issue,查看了一下,发现也有小伙伴遇到这个问题,是因为ros本身自带了opencv2.4.8,然后我自己原来安装了opencv3.4.0,两者冲突了,另外还有说是因为cv3要转到cv2需要cv_bridge去连接,连接出了问题(可能是版本低了)。然后疯狂百度但是总共有两种方法:一是修改CMakeLists.txt文件中的:
find_package(OpenCV REQUIRED)
改为:
find_package(OpenCV 2.4.8 REQUIRED)
或者改为:
set(OpenCV_DIR /usr/lib/x86_64-linux-gnu/pkgconfig)
find_package(OpenCV REQUIRED)
项目里所有的CMakeLists.txt凡是有这句都改了。
方法二:下载最新的cv_bridge和image_pipeline放到/catkin_ws/src/目录下(和项目文件在同一级目录)。下载地址:添加链接描述,只需要cv_bridge,另外image_pipeline下载地址为:添加链接描述,只需要image_pipeline。
总结:上面的方法一浪费我大量时间,因为一修改又重新编译,需要很久时间,而且还不成功,各种修改文件,包括修改涉及环境变量的文件(/etc/profile、~/.bashrc、/etc/bash.bashrc等)。还有说卸载opencv3.4.0,不过我不想这样,opencv3.4.0以后还要用呢,又不是仅仅为了这个项目存在。
最后成功的是方法二,但是在方法二之前,我把环境变量设置了一下,把原来用opencv3.4.0,改成了用opencv2.4.8
sudo gedit /etc/profile

# set opencv-3.4.0 enviroment
#export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
#export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH

# set opencv2.4.8 enviroment
export PKG_CONFIG_PATH=/usr/lib/x86_64-linux-gnu/pkgconfig:$PKG_CONFIG_PATH
export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH

source /etc/profile

测试一下当前系统生效的版本:

diangong@diangong-Lenovo-Product:~$ pkg-config --modversion opencv
2.4.8

完成这项工作后,开始编译,编译没有了原来的警告,打开三个终端运行,成功。

我也看到一篇博客:添加链接描述,有点类似方法二,但他要卸载旧版的cv_bridge,讲实话我不敢随意卸载,怕又要重新安装ros,有时间可以试一下。
在这里插入图片描述
我发现一个问题,在安装ros时候会设置ros环境变量,它的环境变量是添加到:/home/.bashrc里面(.bashrc文件一般不可见,可以设置显示隐藏文件就可以看到来),如果我把这句设置环境变量的代码:

source /opt/ros/indigo/setup.bash

放到/etc/profile文件中,原来的用“#”号注释,当使用命令:

rosbag play /home/diangong/下载/MH_01_easy.bag

会提示:rosbag: commond not find,然后我又做死的改回来到原来的环境变量,又可以用了。

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

VINS-mono的编译与运行 的相关文章

  • 你有一条linux命令学习之解压缩.tar .gz .xz .bz .zip

    下载的包解压还是压缩本地的包 xff0c 都要用到解压缩命令 1 tar tar命令生成的压缩包 1 命令语法 tar xcfvzjJ pathname tar file 2 参数 c 创建包 x 解压包 v 显示解压缩过程 f 指定包名
  • raspberry pi 3 ModelB 更换内核、文件系统初探

    1 镜像烧录 1 下载官方最新镜像 xff1a https www raspberrypi org downloads 2 Win32DiskImager烧录 xff1a https sourceforge net projects win
  • char类型与int类型的相互转换、

    相关知识 xff1a 1 计算机中的一个unsigned char型数据表示0 255 xff0c 而一个signed char型数据表示 128 43 127 xff0c 都是256的数字 这256个数字 xff0c 在计算机的存储单元都
  • 使用printf输出各种格式的字符串

    xfeff xfeff 分类 xff1a 43 43 主题 使用printf输出各种格式的字符串 日期 2004 06 29 43 43 1 原样输出字符串 printf 34 s 34 str 2 输出指定长度的
  • float型变量和“零值”比较的方法

    前一段时间读了一下林锐博士的 高质量C C 43 43 编程指南 xff0c 其中有一个比较经典的问题 请写出float x与 零值 比较的if语句 xff1f 当时只知道不能直接用float类型的值与0进行 61 61 或 61 比较 x
  • 全局变量和局部变量

    全局变量也称为外部变量 xff0c 它是在函数外部定义的变量 它不属于哪一个函数 xff0c 它属于一个源程序文件 其作用域是整个源程序 在函数中使用全局变量 xff0c 一般应作全局变量说明 只有在函数内经过说明的全局变量才能使用 但是在
  • c 内存管理

    其他相关链接 xff1a https blog csdn net wind19 article details 5964090 一 几个基本概念 在C语言中 xff0c 关于内存管理的知识点比较多 xff0c 如函数 变量 作用域 指针等
  • Springboot操作MongoDB,包括增改查及复杂操作

    单条件查询 使用BasicDBObject配置查询条件 List span class token generics function span class token punctuation lt span AbstractMongoEn
  • 搭建Spark实战环境(3台linux虚拟机集群)(一)样板机的搭建

    系统及软件配置 系统配置 内存 xff1a 16g 2400 cpu xff1a i5 9400F 软件配置 Windows 10 1903版本VMware workstation 15 10CentOS centos release 7
  • 独立个人项目开发心得 - 任务切分、挑战性、实用性和半途而废

    在写文章前容许我啰嗦一下 xff1a 对于软件开发 xff0c 我走了不少弯路 xff0c 有时觉得自己作为API侠 xff0c 无所不能 xff0c 有时又觉得自己很多LeetCode题写不出来 xff0c 无能为力 我有一个博客 xff
  • 传统软件服务器与游戏服务器架构区别

    项目智能客服爬虫SLG游戏语言javapythonkotlin模型异步事件驱动可能没什么模型可言actor模型传输协议httphttptcp 43 netty传输结构jsonjsonprotobuf数据库oracle xff0c redis
  • Linux C++ Socket实战

    本文主要介绍Linux C 43 43 基础Socket网络编程 大部分知识来自于网站 xff1a https www geeksforgeeks org socket programming cc Socket编程状态图 从图中可以看到
  • CSAPP第二章-信息的表示与处理-随手记

    仅作为学习 深入理解计算机系统 第二章时的笔记 xff0c 仅记录对自己有启发的部分 xff0c 不作为知识整理 xff08 直接看电子书就可以了 xff09 因为这本书知识点非常多 xff0c 所以我会抽时间多次阅读 xff0c 本文也会
  • Vue的路由配置及手动改地址栏为啥又跳转回来??

    vue cli xff08 vue脚手架 xff09 超详细教程 xff1a https blog csdn net wulala hei article details 85000530 这个教程里面是使用 vue init webpac
  • GPS卫星轨道

    GPS卫星轨道周期几乎是24小时 xff0c 而自己的卫星在太阳同步轨道上的周期大概是1 5个小时 xff0c 那么就是说太阳同步轨道已经绕几周了 xff0c GPS卫星才饶一周 所以当算多普勒频移的时候只需要算出GPS一个周期时间内的多普
  • 快速了解S7-1200 PLC的存储器及存储区的寻址方式

    S7 1200 PLC的存储器地址包括输入I 输出Q 位存储器M 数据块DB xff0c 以及本地或临时存储器L eg xff1a 标识存储区M0 0 MB0 MW0 MD0 分别是 B位 字节B 8位 字W 16位 双字D 32位 输入过
  • 网络编程之UDP简单示例

    UDP编程函数recvfrom inet pton sendto UDP协议 user data protrol 用户数据协议特点 xff1a TCP xff1a 面向连接 gt 一定双方连接上了才能进行通信 xff01 UDP xff1a
  • 微信开发(二)http请求工具类

    说明 进行微信开发 xff0c 后台程序需要与微信服务器进行交互 xff0c 通过调用接口来完成服务 xff0c 阅读微信开发文档 xff0c 发现接口的调用都是通过http请求进行的 xff0c 所以必须有个HttpUtil来支撑 xff
  • STM32寄存器与结构体

    piaolin 发表于 2015 9 30 01 02 只看该作者 倒序浏览 阅读模式 第16集 蜂鸣器实验 这个实验和流水灯是一样的 xff0c 只是将相对应的IO口拉高拉低即可控制蜂鸣器 值得注意的是电路设计方面 xff0c 根据视频描
  • 字节序

    1 字节序 字节序 xff0c 又称端序或尾序 xff0c 指的是多字节数据在内存中的存放顺序 例如一个int型变量x占用4个字节 xff0c 假设它的起始地址 amp x为0x10 xff0c 那么x将会被存储在 0x10 0x11 0x

随机推荐

  • extern “C“的作用及理解

    1 意图 extern 34 C 34 是C 43 43 特有的指令 xff08 C无法使用该指令 xff09 xff0c 目的在于支持C 43 43 与C混合编程 2 作用 extern C 的作用是告诉C 43 43 编译器用C规则编译
  • Linux命令 nautilus

    nautilus是GNOME桌面下的一个文件管理工具 通过这个命令我们可以在终端下非常方便的打开指定目录的文件 nautilus 命令后面一个 xff0c 表示当前目录 命令模式为 nautilus pwd支持绝对路径和相对路径两种方式 x
  • windows下C语言实现TCP通信

    编译器 xff1a vs2017 语言 xff1a c语言 具体的原理可以在其他博客看到 在我学习winsock编程时 xff0c 发现那些博客代码居然在我机器上没一个能运行 xff0c 可能是我水平有限 于是我根据winsock相关知识
  • 关于USB转串口型设备的latency问题

    USB转串口型设备在通讯时默认有16ms延时 xff0c 这在控制任务中往往是不能接受的 xff0c 为了改善这个情况需要改变latency的值为最小值1 在Windows环境下 xff0c 可以如下操作 xff1a 右键属性 端口设置 高
  • 航模lipo锂电池过放抢救/处理方式

    实验室用的tattu航模电池经常因为疏忽导致过放 xff0c 逐渐也摸索出来过放的抢救方法 当然最好的方法还是不要过放 xff1a xff09 1 首先是检查电池剩余电压 xff0c 用普通的电压表就可以了 xff0c 今天刚搞崩了了一块
  • 基于DCT+huffman变换的图像压缩解压缩FPGA实现

    目录 一 理论基础 二 verilog程序 三 仿真结果 一 理论基础 整个算法涉及到DCT变换和Huffman编码两个部分 其整体流程图如下所示 nbsp 这里 我们将做三个方面的工作
  • C++代码编译过程

    C 43 43 代码编译过程 源代码从生成到可执行文件可以分成四个步骤 xff1a 预处理 编译 汇编和链接 以下是linux下GCC生成一个可执行文件a out的过程 xff1a 一 预处理 预处理过程主要是处理那些源文件和头文件中以 开
  • Linux终端美化

    1 安装终端软件terminator 可自行选择 sudo apt get install terminator y 2 安装zsh sudo apt get install zsh y 3 安装oh my zsh sh c 34 curl
  • windows 7 浏览器无法进网站,提示安全证书存在问题(GlobalSign)

    下载更新包就行了kb4474419 http www catalog update microsoft com search aspx q 61 kb4474419
  • linux下共享库(.so文件)的调用

    需要的文件 libxxxx so xxxx h 记住 复制文件的时候千万不要用ROOT权限 xff0c 不然编译时会找不到这个共享库 最好时把库放到 usr lib chmod 777 chown username CMakeLists t
  • 3.RT-Thread线程的创建与删除,动态线程、静态进程

    在实际应用中 xff0c 经常添加多个 c 文件和 h 文件 xff0c RT Thread借助自动构建系统 Scon xff0c 它会自动添加你的 c和 h文件到你的工程中 xff0c Scon工具根据package kernel目录下的
  • Windows环境下使用VSCode和CMake学习Eigen库的使用

    YOUTUBE LINK https www youtube com watch v 61 wP4cwAtU g8 Eigen xff1a http eigen tuxfamily org index php title 61 Main P
  • Linux环境下使用 VScode + CMake +CMakeTools开发调试 C++ 程序

    插件 xff1a Bracket Pair Colorizer xff1a 括号颜色区分 C C 43 43 IntelliSense xff1a 代码提示 Chinese Simplified Language Pack for Visu
  • 四旋翼定高篇之惯导加速度+速度+位置三阶互补融合方案

    2017年03月13日 原文链接 四旋翼定高篇之惯导加速度 43 速度 43 位置三阶互补融合方案 笔者最近正在做四旋翼惯性导航的部分 xff0c 利用加速度计进行速度估计 位置估计 xff0c 从而实现四旋翼的垂直方向上的定高 水平方向上
  • x86_64 OpenWrt/LEDE 环境下使用mentohust配置锐捷上网共享网络

    OpenWrt 可以被描述为一个嵌入式的 Linux 发行版 xff08 主流路由器固件有 dd wrt tomato openwrt三类 xff09 对比一个单一的 静态的系统 xff0c OpenWrt的包管理提供了一个完全可写的文件系
  • 视觉SLAM14讲 第七讲 视觉里程计1

    C 43 43 代码 特征提取 xff1a 找出2张图片中相似的点 特征 xff1a 关键点 例如角点 xff0c 明暗变化大的点 43 描述子 记录的关键点的特征信息 xff0c 方向 xff0c 旋转 等 FAST特征点 xff1a 角
  • 基于FPGA的7x7矩阵求逆verilog开发

    up目录 一 理论基础 二 核心程序 三 测试结果 一 理论基础 nbsp nbsp nbsp nbsp 矩阵运算在科学计算 数字信号处理和图像处理等领域有着广泛的应用 上述应用领域的实时性要求很高 因此如何快速实现矩阵运算具有重要的意义
  • 程序员的几个建议

    注 xff1a 感觉这个文章说的挺有指导意义 每年都有无数年轻程序员 xff0c 加入软件行业 他们在学校里学过编程 xff0c 但是对这个行业的现实一无所知 Patrick McKenzie是美国一家小软件公司的老板 xff0c 他写了一
  • 工程师必备串口数据截取工具modbus命令分析串口数据分析

    工程师必备串口数据截取工具modbus命令分析串口数据分析 主要功能 xff1a 支持监控COM端口类型 xff1a 标准电脑端口 xff0c 内核虚拟COM端口 xff0c USB转串口等 xff1b 可以实时监控并采集串口数据 xff1
  • VINS-mono的编译与运行

    简介 xff1a VINS mono是香港科技大学一个计算机视觉实验室的科研结果 xff0c 是要是基于单目视觉惯性里程计的一个slam系统 xff0c 整个项目都是内嵌于ros 非常感谢这群勤劳刻苦创新的研究者开源了这个项目 在此我记录下