使用Docker配置SVO SLAM1与SVO SLAM2的运行环境

2023-05-16

1、ROS docker的获取

sudo docker pull osrf/ros:noetic-desktop-full

2、进入docker

2.1 使docker可以使用宿主机的图形界面(具体可以查看docker使用)

xhost +

2.2 运行docker

 sudo docker run -ti -h ubuntu  --hostname ubuntu  -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix -v /home/xxx/:/share --gpus all  osrf/ros:noetic-desktop-full /bin/bash

3、安装依赖

3.0 boost与eigen

sudo apt-get install libboost-all-dev
apt-get install libeigen3-dev
opencv相关的

3.1 Sophus

	git clone https://github.com/strasdat/Sophus.git
	cd Sophus
	git checkout a621ff
	mkdir build
	cd build
	cmake ..
	make -j4 
	make install

3.2、fast

	git clone https://github.com/uzh-rpg/fast.git
	cd fast
	mkdir build
	cd build
	cmake ..
	make -j4
	make install

3.3、g2o

	wget https://github.com/RainerKuemmerle/g2o/archive/20160424_git.tar.gz -O g2o-20160424_git.tar.gz
	tar xvzf g2o-20160424_git.tar.gz
	cd g2o-20160424_git
	mkdir build
	cd build
	cmake ..
	make -j4
	sudo make install

3.4、rpg_vikit

git clone https://github.com/uzh-rpg/rpg_vikit.git

非ROS编译
cd rpg_vikit/vikit_common
修改CMakeLists.txt中
SET(USE_ROS TRUE) # Set False if you want to build this package without Catkin
变FALSE
mkdir build
cd build
cmake ..
make -j4
make install

4、编译rpg_svo

4.1 、非ROS编译

git clone https://github.com/uzh-rpg/rpg_svo.git
cd rpg_svo/svo/
修改CMakeLists.txt中
SET(USE_ROS TRUE) # Set FALSE if you want to build this package without Catkin
变FALSE
mkdir build
cd build
cmake ..
make -j4

4.2、ROS编译

4.2.1创建ros空间

 mkdir -p  robot_work/src
 cd  robot_work/src
 catkin_init_workspace
 cd .. && catkin_make
 echo "source /share/DockerFile/robot_work/devel/setup.bash"  >> ~/.bashrc
 source ~/.bashrc

4.2.2 下载包

把第三步的依赖包复制到robot_work/src

4.2.3编译

git clone https://github.com/uzh-rpg/rpg_svo.git 到 robot_work/src/
在robot_work目录下执行
catkin_make

5、遇到问题 可参考

5.1

/share/DockerFile/Sophus/sophus/so2.cpp:32:26: error: lvalue required as left operand of assignment
   32 |   unit_complex_.real() = 1.;

解决

修改Sophus/sophus/so2.cpp
把
SO2::SO2()
{
 unit_complex_.real() = 1.;
 unit_complex_.imag() = 0.;
}

变成
SO2::SO2()
{
  unit_complex_.real(1.);
  unit_complex_.imag(0.);
}

5.2

error: ‘CV_RANSAC’ was not declared in this scope

解决

CV_RANSAC ==》cv::RANSAC

5.3

error: ‘CV_INTER_LINEAR’ was not declared in this scope

解决

CV_INTER_LINEAR  修改为 cv::INTER_LINEAR

或者,添加头文件 
#include<opencv2/imgproc/imgproc_c.h>

5.4

 error: ‘CV_GRAY2RGB’ was not declared in this scope

解决

加入
#include <opencv2/imgproc/types_c.h>

5.5

出现 "Invalid argument "/world" passed to canTransform argument source_frame in tf2 frame_ids cannot start with a '/' like: "

解决

修改rpg_vikit 中vikit_ros/src/output_helper.cpp 中的frame_id 去掉斜杠

5.6

undefined reference to `Sophus::SE3::operator*(Eigen::Matrix<double, 3, 1, 0, 3, 1> const&) const'

解决

FIND_PACKAGE(Sophus REQUIRED)

${Sophus_INCLUDE_DIRS}

${Sophus_LIBRARIES}

6、运行

6.1 非ROS运行

export SVO_DATASET_DIR=/share/DockerFile/Datasets/

下载数据集 提取码: d92d

把数据集解压到 Datasets
cd svo/bin

./test_pipeline 

6.2 ROS下运行

6.2.1 使用其他终端进入docker命令

查看容器id(xxxx)
sudo docker ps -a 
使用命令进入docker
sudo docker exec -it xxxx(ID)  /bin/bash

6.2.2 启动roscore

终端1: roscore

终端2: .launch文件启动SVO roslaunch svo_ros test_rig3.launch

终端3: 新建一个窗口启动rviz rosrun rviz rviz -d <PATH TO rpg_svo>/svo_ros/rviz_config.rviz
终端4:播数据提取码: cpd3 rosbag play airground_rig_s3_2013-03-18_21-38-48.bag

7、编译rpg_svo_pro_open

7.0 依赖

sudo apt-get install python3-catkin-tools python3-vcstool python3-osrf-pycommon
# 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

7.1创建ros空间

ROS-DISTRO=melodic/noetic
mkdir svo_ws && cd svo_ws
catkin config --init --mkdirs --extend /opt/ros/<ROS-DISTRO> --cmake-args -DCMAKE_BUILD_TYPE=Release -DEIGEN3_INCLUDE_DIR=/usr/include/eigen3
cd src
//此部分可能会出现git权限问题,解决方法是在本机生成ssh密钥并把公钥上传到自己的git中就应该ok
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
cd rpg_svo_pro_open/svo_online_loopclosing/vocabularies && ./download_voc.sh
cd ../../..

7.2 编译

7.2.1 front-end + sliding window back-end + loop closure/pose graph

catkin build

7.2.2 Build with the global map using iSAM2 (all functionalities)

rm rpg_svo_pro_open/svo_global_map/CATKIN_IGNORE
修改 svo_cmake/cmake/Modules/SvoSetup.cmake
SET(USE_GLOBAL_MAP TRUE)
git clone --branch 4.0.3 git@github.com:borglab/gtsam.git
修改
# 1. 修改gtsam/CMakelists.txt: 使用 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
把 list_append_cache(GTSAM_COMPILE_OPTIONS_PUBLIC "-march=native")
改为
list_append_cache(GTSAM_COMPILE_OPTIONS_PUBLIC "-mno-avx")

在B站上放了一个实操视频

使用docker运行SVO SLAM的老版本与新版本并成功运行

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

使用Docker配置SVO SLAM1与SVO SLAM2的运行环境 的相关文章

随机推荐

  • 图像的灰度化、二值化

    目录 1 图像像素点 2 灰度化 3 二值化 4 使用open cv库进行图片的灰度化 二值化 4 1 将图片转换为灰度图 4 2 将灰度图转换为二值化图图片 1 图像像素点 在图像处理中 xff0c 用RGB三个分量 xff08 R xf
  • 【嵌入式】stm32程序跳转实验

    嵌入式 stm32程序跳转实验 菜老越 于 2019 04 23 17 54 56 发布 2888 收藏 22 分类专栏 xff1a 嵌入式 文章标签 xff1a keil stm32 程序跳转 IAP BootLoader 版权 嵌入式
  • C++/C语言实现HTTP的GET和POST请求

    阅读目录 HTTP请求和IP TCP 实现GET请求 实现POST请求 xff1a 参考 xff1a 回到顶部 HTTP请求和IP TCP 所谓的HTTP协议是基于IP TCP协议的 xff0c 所以要获取远端的html数据只要创建sock
  • C++ 简单实现HTTP GET/POST 请求

    HTTP 超文本传输协议 是一种客户端与服务端的传输协议 xff0c 最早用于浏览器和服务器之间的通信 xff0c 后来因为其使用灵活 方便等特点 xff0c 广泛用于客户端与服务端的通信 文章将简单介绍HTTP协议 xff0c 同时以C
  • 分布式系统架构简单介绍

    目录 xff1a 一 什么是分布式系统 xff1f 二 为什么要走分布式系统架构 xff1f 三 系统如何进行拆分 xff1f 四 分布式之后带来的技术挑战 xff1f 一 什么是分布式系统 xff1f 在谈分布式系统架构前 xff0c 我
  • 使用javascript实现对于chineseocr的API调用

    ChineseOCR在线API 网页地址 界面 提供多种接口调用方式 xff0c 比如在线调用 Javascript api调用 curl api调用和python api调用四种方式 xff0c 本次使用javascript api调用的
  • Qt-QMessageBox用法详解

    QMessageBox 是 Qt 框架中常用的一个类 xff0c 可以生成各式各样 各种用途的消息对话框 xff0c 如图 1 所示 图 1 QMessageBox消息对话框 很多 GUI 程序都会用到消息对话框 xff0c 且很多场景中使
  • C++中UDP通讯详解

    C 43 43 Socket编程及TCP UDP通信代码实现 一 简介 Socket编程的目的是使网络的进程进行通信 xff0c 基于TCP IP协议簇 xff0c 通过三元组 xff08 ip地址 协议 端口 xff09 标志进程 xff
  • sphinx写文档的简单尝试--index.rst的内容分析

    先说简单的结论 xff0c rst上手难度远高于markdown 功能扩展完爆markdown 在安装sphinx后 xff0c 开始编写shpinx的第一步 xff0c 就是使用sphinx quickstart来生成配置文件 我的目录结
  • 读书笔记:嵌入式常用算法_note_1

    目录 折线插值 抛物线插值 折线插值 include lt stdio h gt define N 10 折线由10段线段组成 即有11个插值节点 float w 61 10 0 插值节点间隔为10 0 即 w 61 y1 y0 61 10
  • Linux下免费git工具集合

    该博文来自于ieayoio的博客 xff1a http www ieayoio com win和mac下的git图形工具都有挺多的 xff0c 然而对于因git而生的Linux xff0c git的图形工具普遍被认为相当落后 xff0c 然
  • [rospack] Error: package ‘.....‘ not found

    在ros编程中如果报出 rospack Error package 39 39 not found 某个包没有找到 xff0c 则有一下几方面的原因 1 包名写错了2 工作空间真的没有这个包存在3 包所在的ros工作空间没有在ros环境中
  • Pytorch中TypeError: 'DataLoader' object is not subscriptable错误

    今天学习pytorch遇到以下问题 TypeError 39 DataLoader 39 object is not subscriptable 一开始设置的参数如下 cifar train 61 DataLoader cifar trai
  • undefined reference to `vtable for fmt::v7::format_error‘

    在使用eigen3和sophus 库时 xff0c 如遇到以下错误 undefined reference to 96 vtable for fmt v7 format error 39 undefined reference to 96
  • 什么是嵌入式软件工程师?需具备哪些能力?

    计算机嵌入式逐渐被大家认可 xff0c 然而嵌入式软件工程师到底是什么 做一个好的嵌入式软件工程师又需要具备哪些能力呢 今天尚观教育小编跟大家聊一聊 1 嵌入式软件工程师是什么 嵌入式系统一般由嵌入式微处理器 外围硬件设备 嵌入式操作系统以
  • STM32串口中断接收到的16进制数据如何判断

    最近用到了一款WIFI摄像头 xff0c 这款摄像头可以通过手机app控制 xff0c 从而使串口发送指定的数据 xff0c 这样会以来就可以通过这款摄像头在手机app上控制小车的前后左右 xff0c 还可以实现无线图传的功能 这款摄像头通
  • ROS Robotics By Example No transform from [left_wheel] to [base_link]

    1 问题描述 在第二章中搭建双轮机器人 lt xml version 61 34 1 0 34 gt lt robot name 61 34 dd robot 34 gt lt base link gt lt link name 61 34
  • ROS中的坐标转换1

    1 坐标转换 坐标转换是指坐标系之间的平移以及旋转关系 xff0c 如坐标系A B C A xff0c B之间存在一个转换关系 T B A T B A T B A B与
  • 可用的双目标定代码(先单目标定再双目标定)

    最近做双目项目需要进行标定 xff0c 网上查看一些资料 目前所用是先进行单目标定 xff0c 然后在进行双目标定 代码如下 xff0c 配以后使用 span class token comment biaoding cpp span sp
  • 使用Docker配置SVO SLAM1与SVO SLAM2的运行环境

    1 ROS docker的获取 sudo docker pull osrf ros noetic desktop full 2 进入docker 2 1 使docker可以使用宿主机的图形界面 xff08 具体可以查看docker使用 xf