ubuntu1804搭建svo2.0环境并跑euroc数据集

news2024/12/24 3:47:31

0说明

整个SVO2.0环境搭建过程按照官网的说明进行(链接:https://github.com/uzh-rpg/rpg_svo_pro_open)

开发环境是ubuntu18.04+ROS-Melodic

1工具安装

Install catkin tools and vcstools if you haven’t done so before. Depending on your operating system

# For Ubuntu 18.04 + Melodic
sudo apt-get install python-catkin-tools python-vcstool

Install system dependencies and dependencies for Ceres Solver

# system dep.
sudo apt-get install libglew-dev libopencv-dev libyaml-cpp-dev 
# Ceres dep.
sudo apt-get install libblas-dev liblapack-dev libsuitesparse-dev

2源码下载

mkdir svo_ws && cd svo_ws
# see below for the reason for specifying the eigen path
catkin config --init --mkdirs --extend /opt/ros/melodic --cmake-args -DCMAKE_BUILD_TYPE=Release -DEIGEN3_INCLUDE_DIR=/usr/include/eigen3
cd src
# 下载源码
git clone https://github.com/uzh-rpg/rpg_svo_pro_open.git
# 下载源码所需要的其他功能包,下面的命令会下载失败,打开dependencies.yaml文件,
# 根据每个包中的地址,使用git clone分开进行下载
# vcs-import < ./rpg_svo_pro_open/dependencies.yaml

# 这里以第一个为例,其余均按照这种形式进行下载,如果下载失败可能是网络超时,多试几次
git clone https://github.com/catkin/catkin_simple.git

touch minkindr/minkindr_python/CATKIN_IGNORE
# 下载词袋用于位置识别
cd rpg_svo_pro_open/svo_online_loopclosing/vocabularies && ./download_voc.sh
cd ../../..

词袋下载完成后,在src/dbow2_catkin/CmakeList.txt中,将git的地址进行相应的修改

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
)
  • 将svo_ros、rpg_common、svo_direct、svo_online_loopclosing的CmakeList.txt中OPENCV的版本指定为3.x
    find_package(OpenCV 3 REQUIRED)

3编译和运行

3.1without global map方式(包括前端+滑窗后端+回环)

在src目录下

catkin build -j40

1.编译svo_direct报错,因为在本地安装了单独的yaml-cpp功能包,与ros自带的功能包出现了冲突

libvikit_cameras.so: undefined reference to `YAML::detail::node_data::empty_scalar[abi:cxx11]()'

解决,在rpg_svo_pro_open/vikit/vikit_cameras中的cmakelists.txt中加入以下内容

link_directories(/usr/local/lib)
include_directories(/usr/local/include/yaml-cpp)

2.编译svo_ceres_backend功能包报错,疑似eigen版本不对,需要3.3.7版本,当前为3.3.4

Errors     << svo_ceres_backend:make /home/lusx/Demos/svo_ws/logs/svo_ceres_backend/build.make 000.log
In file included from /usr/local/include/eigen3/Eigen/Core:22:0,
                 from /home/lusx/Demos/svo_ws/src/rpg_svo_pro_open/svo/include/svo/global.h:18,
                 from /home/lusx/Demos/svo_ws/src/rpg_svo_pro_open/svo/include/svo/abstract_bundle_adjustment.h:12,
                 from /home/lusx/Demos/svo_ws/src/rpg_svo_pro_open/svo_ceres_backend/include/svo/ceres_backend_interface.hpp:7,
                 from /home/lusx/Demos/svo_ws/src/rpg_svo_pro_open/svo_ceres_backend/src/ceres_backend_interface.cpp:1:
/usr/local/include/eigen3/Eigen/src/Core/util/ConfigureVectorization.h:39:38: error: attribute ignored in declaration of ‘struct pcl::_PointXYZHSV’ [-Werror=attributes]
   #define EIGEN_ALIGN_TO_BOUNDARY(n) alignas(n)

更换eigen版本方法:https://blog.csdn.net/reasonyuanrobot/article/details/114372363

更新完eigen版本后需要将/usr/local/include/Eigen 整个文件夹替换到/usr/local/include/eigen3中,然后将/usr/local/include/eigen3整个文件夹复制到/usr/include目录下

sudo cp -r /usr/local/include/Eigen /usr/local/include/eigen3
sudo cp -r /usr/local/include/eigen3 /usr/include

3.出现报错,svo_ros编译失败:

private/svo/lib/libsvo.so: undefined reference to `YAML::ostream_wrapper::write(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'

在svo的CmakeLists.txt中加入以下内容:

link_directories(/usr/local/lib)
include_directories(/usr/local/include/yaml-cpp)

并在下面对应的地方链接上yaml-cpp的动态库

target_link_libraries(svo ${LINK_LIBS} ${EIGEN3_LIBS} yaml-cpp)

其中有部分功能包需要实时下载,可能会下载失败,直接catkin build多试几次即可。

运行:
在rpg_svo_pro_open/doc目录下有运行的说明文档,以VIO为例

roslaunch svo_ros euroc_vio_stereo.launch
rosbag play V2_03_difficult.bag

在这里插入图片描述

3.2第二种编译方式Build with the global map using iSAM2

1.首先把上面提到的阻止svo_global_map编译的CATKIN_IGNORE删除

cd 
rm rpg_svo_pro_open/svo_global_map/CATKIN_IGNORE

2.并且在svo_cmake/cmake/Modules/SvoSetup.cmake中进行以下修改:

SET(USE_GLOBAL_MAP TRUE)

3.在src目录下载GTSAM

git clone --branch 4.0.3 https://github.com/borglab/gtsam.git

并且修改一些GTSAM的编译配置

# 1. gtsam/CMakelists.txt: use system Eigen
# 将对应位置的OFF修改为OFF
-option(GTSAM_USE_SYSTEM_EIGEN "Find and use system-installed Eigen. If 'off', use the one bundled with GTSAM" OFF)
+option(GTSAM_USE_SYSTEM_EIGEN "Find and use system-installed Eigen. If 'off', use the one bundled with GTSAM" ON)

# 2. gtsam/cmake/GtsamBuildTypes: disable avx instruction set
# below the line `list_append_cache(GTSAM_COMPILE_OPTIONS_PUBLIC "-march=native")`
list_append_cache(GTSAM_COMPILE_OPTIONS_PUBLIC "-mno-avx")

执行编译

catkin build -j40

4.运行:参考rpg_svo_pro_open/doc/global_map.md
Source the workspace first:

source ~/svo_ws/devel/setup.bash

Executing

roslaunch svo_ros euroc_global_map_mono.launch
rosbag play MH_03_medium.bag -s 15

运行launch文件时报错,重启电脑后解决

inotify_add_watch("/home/lusx/.config/fcitx/dbus") failed: "No space left on device"
inotify_add_watch("/home/lusx/.config/fcitx/dbus/90db5a81999741db9c60033a14d268ae-1") failed: "No space left on device"
[svo-2] process has died [pid 2630, exit code -11, cmd /home/lusx/Demos/svo_ws/devel/lib/svo_ros/svo_node --v=0 __name:=svo __log:=/home/lusx/.ros/log/7ee9c8d4-9f9d-11ed-8d4c-f46b8c68a314/svo-2.log].
log file: /home/lusx/.ros/log/7ee9c8d4-9f9d-11ed-8d4c-f46b8c68a314/svo-2*.log

运行launch文件时报错,疑似个别库的版本不对导致冲突暂未解决

[svo-2] process has died [pid 19424, exit code -11, cmd /home/lusx/Demos/svo_ws/devel/lib/svo_ros/svo_node --v=0 __name:=svo __log:=/home/lusx/.ros/log/57f6132c-9fa2-11ed-b21c-f46b8c68a314/svo-2.log].
log file: /home/lusx/.ros/log/57f6132c-9fa2-11ed-b21c-f46b8c68a314/svo-2*.log

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/183616.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用这个插件,fiddler抓包直接生成httprunner脚本

har2case可以将.har文件转化成yaml格式或者json格式的httprunner的脚本文件&#xff0c;生成.har格式文件可以借助 fiddler 或 Charles 抓包工具 友情提示&#xff1a; 录制脚本&#xff0c;只是一个过渡&#xff0c;从0到1的一个过渡&#xff0c;如果让你直接写脚本&#xff…

微信app hook修改剪刀石头布以及骰子思路

0x01 前言 该方法很简单&#xff0c;本次记录是为了加深对安卓hook技术的学习&#xff0c;以及进一步熟悉frida和objection的使用&#xff0c;如果只是想需要这个功能&#xff0c;推荐手机root后装微x模块 技术仅供分享&#xff0c;请勿用于非法用途 0x02 环境准备 首先需要准…

linux下更新tomcat版本

进入tomcat目录下查看当前版本号./version.sh2.切忌升级之前一定要备份老版本mkdir tomcat-backup3.拷贝老版本到你创建的文件夹中cp -rf apache-tomcat-9.0.45-stunew/ tomcat-backup/4.下载tomcat安装包&#xff0c;随便你下载什么版本&#xff0c;我这里以68为例官网&#x…

ssm二手废旧塑料回收交易系统的设计与实现

内容是设计并且实现一个废旧塑料交易系统的设计与实现。它是在Windows下&#xff0c;以MYSQL为数据库开发平台&#xff0c;Tomcat网络信息服务作为应用服务器。废旧塑料交易系统的设计与实现的功能已基本实现&#xff0c;主要包括用户、回收站、加工厂、预约信息、收购信息、交…

ARP协议与ARP地址欺骗防护

ARP协议 什么是MAC地址 MAC地址是固化在网卡上的网络标识&#xff0c;由Ieee802标准规定。 什么是广播 向同一个网段内的设备&#xff0c;发送数据包&#xff0c;广播IP地址是同网段最后一个IP地址。 认识ARP协议 ARP的全称是地址解析协议&#xff0c;我们通过ARP协议获取…

Webpack 运行时代码分析 - 动态加载

文章内容&#xff1a;用 webpack 打包含有动态加载的模块&#xff0c;分析打包后的代码&#xff0c;也就是 webpack 运行时代码。 先思考如下一些问题&#xff1a; 1.什么叫做动态加载 2.如果不使用 webpack 打包&#xff0c;能做到动态加载吗 3.webpack 是如何实现动态加载的…

安装mysql的保姆级教程

安装mysql的保姆级教程&#xff1a; 1.准备的条件 已下载mysql应用软件 my.ini文件&#xff08;见2&#xff09; 2.设置my.ini文件 &#xff08;1&#xff09;my.ini文件内容&#xff1a; [mysqld] # 设置3306端口 port3306 # 设置mysql的安装目录 ----------是你的文件路径…

TCP/IP网络编程——基于 UDP 的服务端/客户端

完整版文章请参考&#xff1a; TCP/IP网络编程完整版文章 文章目录第 6 章 基于 UDP 的服务端/客户端6.1 理解 UDP6.1.1 UDP 套接字的特点6.1.2 UDP 的工作原理6.1.3 UDP 的高效使用6.2 实现基于 UDP 的服务端/客户端6.2.1 UDP 中的服务端和客户端没有连接6.2.2 UDP 服务器和客…

业务流程软件的优点和对企业的好处

我们都知道&#xff0c;CRM客户管理软件可以为企业识别意向客户&#xff0c;带来更多业绩。那么在处理业务的过程中&#xff0c;一套自带业务流程管理的CRM软件是否重要&#xff1f;下面我们来说说企业使用业务流程管理软件的好处&#xff0c;您就清楚问题的答案了。 1、减少错…

【项目精选】基于 Spring Boot + Mybatis Plus + MySQL 的社区居民联系方式管理系统

项目简介 此系统使用 Spring Boot Mybatis Plus Spring Security React Ant Design Pro 架构编写。数据库采用 MySQL&#xff0c;提供强大的、安全的和完整的管理社区居民的信息的功能。 安全性 此系统在系统层面提供了众多的安全特性&#xff0c;产品安全无忧。这些特性…

【高并发】- 生产级系统搭建 - 2

前言 本章讲解高并发系统中常见概念及相关设计的方案&#xff0c;目的是让小伙伴都了解高并发系统中&#xff0c;每个环节所涉及到的相关概念。帮助大家更好地理解和掌握高并发系统中的场景及设计思想。 1. 常见高并发系统架构图&#xff08;这里以秒杀系统为例&#xff09; 上…

国电投-光伏电站人工智能运维大数据处理分析比赛(记录)

前言 1-1 简介 DataFountain平台举办的比赛&#xff0c;赛题&#xff1a;光伏电站人工智能运维大数据处理分析。以下是比赛链接&#xff1a;光伏电站人工智能运维大数据处理分析 Competitions - DataFountain 1-2 任务背景 在分析光伏发电原理的基础上&#xff0c;论证了辐照…

虹科分享 | 2022年传感器事业部文章精选

2022年 文章精选 精选案例文章 虹科案例 | HK-Micronor光纤传感器应用领域介绍&#xff08;上&#xff09; 虹科案例 | HK-Micronor光纤传感器应用领域介绍&#xff08;下&#xff09; 虹科案例 | 如何更加准确的表征罐箱内燃油的质量规格&#xff1f; 虹科案例 | 监测各种…

java Vue+Springboot读书学习笔记共享平台

读书笔记共享平台的设计基于现有的网络平台&#xff0c;可以实现用户管理及数据信息管理&#xff0c;方便管理员对后台进行管理有详细的了解及统计分析&#xff0c;随时查看信息状态。 系统功能设计是在系统开发和设计思想的总体任务的基础上完成的。该系统的主要任务是实现读书…

CnOpenData中国保险机构网点全集数据

一、数据简介 改革开放以来&#xff0c;中国保险行业飞速增长&#xff0c;在补偿灾害损失、维护社会安定、支持中国的经济建设等方面发挥了重要作用。整个行业的突飞猛进体现在三个方面&#xff1a; 一是保险机构数量增长迅速。中国保险公司的数量从1980年的1家迅速增加至200多…

【云原生】Prometheus之图形化界面grafana与服务发现部署

内容预知 前言 1. 部署 Grafana 1.1 grafana的下载与安装 (1)安装grafana &#xff08;2&#xff09;配置数据源 &#xff08;3&#xff09;导入 grafana 监控面板 &#xff08;4&#xff09;删除模板操作 4.2 grafana的中文插件安装 2. 部署 Prometheus 服务发现 2.1…

C语言中二维数组的基本使用 定义 赋值读写指定元素的值 作为函数参数传递的注意点

文章目录问题依次解决C语言中二维数组如何定义、如何一次性赋值&#xff1f;如何使用 sizeof() 计算二维数组的行数、列数&#xff1f;【与定义数组的地方&#xff0c;在同一作用域内可用】如何读写指定位置的元素&#xff1f;【不同作用域&#xff0c;有两种方式】不同作用域内…

Git(见资源)

Git的概念【1】Git技术&#xff1a;公司必备&#xff0c;一定要会 【2】Git概念&#xff1a; Git是一个免费的、开源的分布式版本控制系统&#xff0c;可以快速高效地处理从小型到大型的项目。【3】什么是版本控制&#xff1f; 版本控制是一种记录一个或若干文件内容变化&#…

BGP基础实验(华为)

题目&#xff1a; 思路&#xff1a; 该题分为三个AS区域&#xff0c;并且三个区别间分别使用不同的路由&#xff0c;EBGP,IBGP,OSFP连接等&#xff0c;其中AS1与AS2之间使用的是EBGP连接&#xff0c;这点需要EBGP的命令来进行实现&#xff0c;AS2中使用的OSPF&#xff0c;AS2&a…

不规范使用ThreadLocal导致的bug,说多了都是泪

ThreadLocal一般用于线程间的数据隔离&#xff0c;通过将数据缓存在ThreadLocal中&#xff0c;可以极大的提升性能。但是&#xff0c;如果错误的使用Threadlocal&#xff0c;可能会引起不可预期的bug&#xff0c;以及造成内存泄露。 因为线程重用导致的信息错乱的bug 有时我们…