当前位置: 首页 > 编程日记 > 正文

【SVO2.0 安装编译】Ubuntu 20.04 + Noetic

ways one

链接: https://pan.baidu.com/s/1ZAkeD64wjFsDHfpCm1CB1w
提取码: kxx2 (downloads and use idirectly)

ways two:

[SVO2-OPEN: https://github.com/uzh-rpg/rpg_svo_pro_open](https://github.com/DEARsunshine/rpg_svo_pro_open)

git挂梯子

如果各位终端无法挂梯子,直接下载我在码云上整理好的代码:

第一种编译方式:

git clone https://gitee.com/ma_yu_armor/svo2_build.git

第二种编译方式:

git clone -b method2 https://gitee.com/ma_yu_armor/svo2_build.git
Install
The code has been tested onUbuntu 20.04 with ROS MelodicInstall dependencies
Install catkin tools and vcstools if you haven't done so before. Depending on your operating system, run

For Ubuntu 20.04 + Noetic

sudo apt-get install python3-catkin-tools python3-vcstool python3-osrf-pycommon
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
Clone and compile
Create a workspace and clone the code (ROS-DISTRO=melodic/noetic):

意思是将下面出现的替换成你ROS的名称(18为"melodic",20为"noetic")

创建工作空间

mkdir svo_pro_ws && cd svo_pro_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

下载原码

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


#这样可以不编译,如果要打开全局重定位功能需要删除,后面有交代,先这么写

touch minkindr/minkindr_python/CATKIN_IGNORE

注意:git clone git@github.com:uzh-rpg/rpg_svo_pro_open.git…会失败,原因是使用git@…方式克隆需要私钥,人生苦短,不用配置,用https://github.com/uzh-rpg/rpg_svo_pro_open.git 代替。同理后面的…vcs-import < ./rpg_svo_pro_open/dependencies.yaml意思是clone dependencies.yaml里面罗列的地址的一系列库,但是打开会发现也是用git@写的,将地址按如下方式替换:

repositories:catkin_simple:type: git#url: git@github.com:catkin/catkin_simple.git~~url: https://github.com/catkin/catkin_simple.gitversion: mastercmake_external_project_catkin:type: git#url: git@github.com:zurich-eye/cmake_external_project_catkin.git~~url: https://github.com/zurich-eye/cmake_external_project_catkin.gitversion: master
......

将这个文件复制出来(置于src/中),删除其他文件,重新执行命令。终端需要挂梯子!!!

如果实在不行,可以到我的gitee上下载(见开头),里面包含了所有库(包括后面要用的gtsam)

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

继续安装

vocabulary for place recognition 这句不需要代理,新开终端,下完关掉

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.gitGIT_REPOSITORY https://github.com/dorian3d/DBoW2.gitCMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CATKIN_DEVEL_PREFIX}BUILD_COMMAND CXXFLAGS=-i${CATKIN_DEVEL_PREFIX}/include makeINSTALL_COMMAND make install
)

至此安装工作完成

编译
这里有两种编译方式,建议按照顺序都尝试一下,这样一旦出问题,更好解决。

  1. 直接编译 Build without the global map (front-end + sliding window back-end + loop closure/pose graph)
catkin build -j8

缺少库:

cd src/
git clone https://github.com/ethz-asl/catkin_boost_python_buildtool.git
git clone https://github.com/ethz-asl/numpy_eigen.git

该开源项目是基于Opencv3写的,本人电脑里装了4(ros自带3),故在src/rpg_svo_open/svo_ros/CmakeList.txt中,修改如下内容:

find_package(catkin_simple REQUIRED)
find_package(rostest REQUIRED)
catkin_simple()
#find_package(OpenCV REQUIRED)  #会默认找到Opencv4
find_package(OpenCV 3 REQUIRED) #指定OpenCv3

2.第二种编译方式Build with the global map using iSAM2 (all functionalities)
首先把上面提到的阻止svo_global_map编译的CATKIN_IGNORE删除

rm rpg_svo_pro_open/svo_global_map/CATKIN_IGNORE

并且在svo_cmake/cmake/Modules/SvoSetup.cmake中:

SET(USE_GLOBAL_MAP TRUE)
克隆GTSAM (与其他pkg在同一目录内)

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

修改cmakelist

1. gtsam/CMakelists.txt: use system Eigen

-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")

这种boost报错的问题一般大家是不会有的,因为我之前装了很多boost版本才会导致这样的问题。将boost全部删除干净,使用ros-melodic中自带的boost(version 1.65)即可。但是某些小伙伴可能会出现找不到boost的情况。首先检查是否安装。

sudo apt-get install libboost-all-dev

如果问题还不能够解决,那就是gtsam在找boost的时候路径出了问题。它默认到/usr/local/中去找,然而ros中的boost位于/usr中。与gtsam的CmakeList中指定boost路径如下(大约在165行):

Store these in variables so they are automatically replicated in GTSAMConfig.cmake and such.

set(BOOST_FIND_MINIMUM_VERSION 1.43)
set(BOOST_FIND_MINIMUM_COMPONENTS serialization system filesystem thread program_options date_time timer chrono regex)
set(BOOST_ROOT "/usr/include") #加上这行
set(BOOST_LIBRARYDIR "/usr/include/lib") #和这行
#add_definitions(-DBOOST_ERROR_CODE_HEADER_ONLY)#myk

终于编译通过!

相关文章:

人眼目标检测初始化

// 初始化摄像头读取视频流cv::VideoCapture cap(0);// 宽高设置为320*256cap.set(CV_CAP_PROP_FRAME_WIDTH, 320);cap.set(CV_CAP_PROP_FRAME_HEIGHT, 256);// 读取级联分类器// 文件存放在opencv\sources\data\haarcascades bool flagGlasses false;if(flagGlasses){face_ca…

Qt之界面换肤

简述 常用的软件基本都有换肤功能&#xff0c;例如&#xff1a;QQ、360、迅雷等。换肤其实很简单&#xff0c;并没有想象中那么难&#xff0c;利用前面分享过的QSS系列文章&#xff0c;沃我们完全可以实现各种样式的定制&#xff01; 简述实现原理效果新建QSS文件编写QSS代码加…

mongDB的常用操作总结

目录 常用查询:查询一条数据查询子元素集合:image.idgte: 大于等于,lte小于等于...查询字段不存在的数据not查询数量:常用更新更新第一条数据的一个字段:更新一条数据的多个字段:常用删除删除:常用查询: 查询一条数据 精确匹配is Query(Criteria.where("id").is(id))…

【GTSAM】GTSAM学习

1 what GTSAM ? GTSAM 是一个在机器人领域和计算机视觉领域用于平滑&#xff08;smoothing&#xff09;和建图&#xff08;mapping&#xff09;的C库。它与g2o不同的是&#xff0c;g2o采用稀疏矩阵的方式求解一个非线性优化问题&#xff0c;而GTSAM是采用因子图&#xff08;f…

人脸、人眼检测与跟踪

#include <opencv2/opencv.hpp> #include <iostream> #include <vector> using namespace cv;CascadeClassifier face_cascade; CascadeClassifier eye_cascade;// 人眼检测 int detectEye(cv::Mat& im, cv::Mat& tpl, cv::Rect& rect) {std::v…

linux下jdk简单配置记录

记录哈&#xff0c;搭建环境的时候&#xff0c;copy使用方便。 vim /etc/profile export JAVA_HOME/usr/java/jdk1.7.0_79export PATH$JAVA_HOME/bin:$PATHexport CLASSPATH.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarexport JRE_HOME$JAVA_HOME/jreexport LANGzh_CN.UT…

Ubuntu中Could not get lock /var/lib/dpkg/lock解决方案

关于Ubuntu中Could not get lock /var/lib/dpkg/lock解决方案 转载于:https://www.cnblogs.com/daemonFlY/p/10916812.html

so库方法原理

动态库 So库&#xff0c;又动态名库&#xff0c;是Linux下最常见的文件之一&#xff0c;是一种ELF文件。这种so库是程序运行时&#xff0c;才会将这些需要的代码拷贝到对应的内存中。但程序运行时&#xff0c;这些地址早已经确定&#xff0c;那程序引用so库中的这些代码地址如…

上传图片,多图上传,预览功能,js原生无依赖

最近很好奇前端的文件上传功能&#xff0c;因为公司要求做一个支持图片预览的图片上传插件&#xff0c;所以自己搜了很多相关的插件&#xff0c;虽然功能很多&#xff0c;但有些地方不能根据公司的想法去修改&#xff0c;而且需要依赖jQuery或Bootstrap库&#xff0c;所以我就想…

springboot 简单自定义starter - beetl

使用idea新建springboot项目beetl-spring-boot-starter 首先添加pom依赖 packaging要设置为jar不能设置为pom<packaging>jar</packaging> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web&…

cmake生成so包并调用(C++project,build,cmake)

1. 目录结构 2 . downloads 2.1 build module process CMakeLists.txt > cmake_minimum_required(VERSION 3.5)if(CMAKE_COMPILER_IS_GNUCC)message("COMPILER IS GNUCC")ADD_DEFINITIONS ( -stdc11 ) endif(CMAKE_COMPILER_IS_GNUCC)SET(CMAKE_CXX_FLAGS_DEBU…

人眼模板匹配自动跟踪

void trackEye(cv::Mat& im, cv::Mat& tpl, cv::Rect& rect) {// 人眼位置cv::Size pSize(rect.width * 2, rect.height * 2);// 矩形区域cv::Rect tRect(rect pSize - cv::Point(pSize.width/2, pSize.height/2));tRect & cv::Rect(0, 0, im.cols, im.rows);…

前端碎碎念 之 nextTick, setTimeout 以及 setImmediate 三者的执行顺序

『前端碎碎念』系列会记录我平时看书或者看文章遇到的问题&#xff0c;一般都是比较基础但是容易遗忘的知识点&#xff0c;你也可能会在面试中碰到。 我会查阅一些资料并可能加上自己的理解&#xff0c;来记录这些问题。更多文章请前往我的个人博客这个问题是有关执行顺序和Eve…

bat 将war文件转换成ear文件

1、无需拷贝war文件&#xff0c;自动获取war set path%path%;D:\jdk\jdk1.6.0_31\bin;C:\Program Files\7-Zip del **0001-controller.war del **0001-controllerEAR.ear copy ..\target\**0001-controller-0.0.1-SNAPSHOT.war **0001-controller.war rem 7z d -tzip **0001-co…

cmake语法【一】

一、Cmake 简介 cmake 是一个跨平台、开源的构建系统。它是一个集软件构建、测试、打包于一身的软件。它使用与平台和编译器独立的配置文件来对软件编译过程进行控制。 二、常用命令 指定 cmake 的最小版本 cmake_minimum_required(VERSION 3.4.1)这行命令是可选的&#xff…

RHEL6.3安装vsftpd

1、下载vsftpd&#xff0c;可以从官网&#xff08;http://vsftpd.beasts.org&#xff09;下载&#xff0c;也可以百度搜索[rootlocalhost vsftpd]# wget http://down1.chinaunix.net/distfiles/vsftpd-3.0.2.tar.gz2、解压压缩包并进入解压出来的目录[rootlocalhost vsftpd]# t…

创建mysql数据库,在新数据库中创建表,再尝试删除表

创建之前&#xff0c;先登录数据库存 mysql -u 账号 -p密码 登录完成后&#xff0c;展示一下已存在的数据库 show databases; 创建数据库 create database test111; 然后展示一下数据库&#xff0c;如下 show databases; 使用数据库 use test; 在test数据库里面看一下已存在的…

cmake:在各级目录之间共享变量(cmake cache变量)

摘要: 本文记录一下 CMake 变量的定义、原理及其使用。CMake 变量包含 Normal Variables、Cache Variables。通过 set 指令可以设置两种不同的变量。也可以在 CMake 脚本中使用和设置环境变量。set(ENV{} …)&#xff0c;本文重点讲述 CMake 脚本语言特有的两种变量。 正文&am…

antd+dva笔记

参考 React中函数式声明组件Dva Ant Design 前后端分离之 React 应用实践ReactDvaJS 之 hook 路由权限控制dva 知识地图react-router Guides and API docs (v2, v3)react-sage redux-saga 是一个用于管理 Redux 应用异步操作,可以用来代替 redux-thunk 中间件。《Redux-saga 中…

求两个矩形重叠部分的面积

#include<stdio.h> #include<math.h>#define areaFile "area.txt" #define perportionFile "perportion.txt"#define min(a,b) ( ((a)>(b)) ? (b):(a) ) #define max(a,b) ( ((a)>(b)) ? (a):(b) )typedef struct xy { int x; int y; …

session,cookie,sessionStorage,localStorage的区别及应用场景

浏览器的缓存机制提供了可以将用户数据存储在客户端上的方式&#xff0c;可以利用cookie,session等跟服务端进行数据交互。 一、cookie和session cookie和session都是用来跟踪浏览器用户身份的会话方式。 区别&#xff1a; 1、保持状态&#xff1a;cookie保存在浏览器端&#x…

鱼眼镜头及其标定

1. 鱼眼镜头特性与镜头分类 普通镜头和针孔相机在数学模型上可以等价对待&#xff0c;都是射影变换&#xff08;Perspective transform&#xff09;&#xff1b; 鱼眼镜头受到水下斯涅耳窗口现象的启发&#xff0c;采用不同的投影方式&#xff0c;来得到极大的视场角&#xff…

django -- url 的 name 属性

在html的form中使用给url定义的name值&#xff0c;可以在修改url时不用在修改form的src。 urls.py from django.conf.urls import url from mytest import viewsurlpatterns [# url(r^admin/, admin.site.urls),url(r^index/, views.index, namemysite), views.Index.as_view(…

两个矩形重叠部分面积

#include<stdio.h> #include<math.h> #define min(a,b) ( ((a)>(b)) ? (b):(a) ) #define max(a,b) ( ((a)>(b)) ? (a):(b) )typedef struct xy { int x; int y; }xy;void main() {xy a[4];int s,chang,kuang;while (true){printf("Please input 4 x,…

前百度面试官整理的——Java后端面试题(一)

2019独角兽企业重金招聘Python工程师标准>>> List 和 Set 的区别 List , Set 都是继承自 Collection 接口 List 特点&#xff1a;元素有放入顺序&#xff0c;元素可重复 &#xff0c; Set 特点&#xff1a;元素无放入顺序&#xff0c;元素不可重复&#xff0c;重复元…

vibe前景提取算法示例代码

//ViBe.h#pragma once #include <iostream> #include "opencv2/opencv.hpp"using namespace cv; using namespace std;#define NUM_SAMPLES 20 //每个像素点的样本个数 #define MIN_MATCHES 2 //#min指数 #define RADIUS 20 //Sqthere半径 #define SUBSAMPL…

Linux系统程序运行时加载动态库路径顺序

程序运行时加载动态库路径顺序(Linux) 在linux系统中&#xff0c;如果程序需要加载动态库&#xff0c;它会按照一定的顺序&#xff08;优先级&#xff09;去查找: 链接时路径&#xff08;Link-time path&#xff09;和运行时路径&#xff08;Run-time path&#xff09;不是一回…

浮动元素会引起的问题和你的解决办法

问题&#xff1a; &#xff08;1&#xff09;父元素的高度无法被撑开&#xff0c;影响与父元素同级的元素&#xff08;2&#xff09;与浮动元素同级的非浮动元素会跟随其后&#xff08;3&#xff09;若非第一个元素浮动&#xff0c;则该元素之前的元素也需要浮动&#xff0c;否…

Visual Paradigm 教程[UML]:如何使用刻板印象和标记值?(下)

下载Visual Paradigm最新试用版 已加入在线订购&#xff0c;现在抢购立享特别优惠>> 将构造型应用于模型元素 接下来&#xff0c;我们将构造型应用于模型元素。右键单击Customer&#xff0c;然后从弹出菜单中选择Stereotypes> External User。 从图形上看&#xf…

基于opencv的简单视频处理类示例

#include "opencv2/opencv.hpp" using namespace std; using namespace cv; class VideoProcessor { private: VideoCapture caputure; //图像处理函数指针 void (*process)(Mat &,Mat &); bool callIt; string WindowNameInput; string WindowNa…