当前位置: 首页 > news >正文

使用docker配置semantic slam

一.Docker环境配置

1.拉取Docker镜像

 sudo docker pull ubuntu:16.04

拉取的为ununtu16版本镜像,环境十分干净,可以通过以下命令查看容器列表 

sudo docker images

 如果想删除多余的docker image,可以使用指令

sudo docker rmi -f <id>

2.创建容器

sudo docker run -it -v /home/pc/docker/senmantic:/home/pc/docker/senmantic --name=senmantic --net=host --env="DISPLAY" --volume="$HOME/.Xauthority:/root/.Xauthority:rw" ubuntu:16.04 /bin/bash

基于ubuntu16.04建立容器,并开启GUI功能。

进入容器后,会在root命令下,到此我们便得到了一个纯净的ubuntu环境。

可以使用sudo docker ps查看正在运行的容器,sudo docker ps -a查看所有容器

当我想要退出时,输入exit退出容器,然后使用sudo docker stop senmantic来停止容器,当我想再次进入容器时,使用sudo docker start senmantic启动容器,再使用sudo docker exec -it senmantic bash进入容器

3.环境配置

 先在此容器下完成slam14讲的环境配置

git clone https://github.com/gaoxiang12/slambook2.git

若下载失败或速度太慢可选择更改源,需先在该Container中安装vim

apt-get update
apt-get install vim

安装完成后通过vi /etc/apt/source.list更改source.list文件内容为

deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse

更改完成后执行apt-get update

下载完成后会在目录下看到slambook文件夹,因为在创建容器时使用了-v /home/pc/docker/senmantic:/home/pc/docker/senmantic 完成了宿主和容器的挂载,因此二者的/home/pc/docker/slam目录是相通的,即在容器里把slambook文件夹放 到/home/pc/docker/senmantic/下,在宿主的相同目录下就会看到slambook文件夹。

主机在每次开机之后都需要运行下面的指令,来指定允许连接的主机。

xhost +why(这里wyh为主机名)

运行之后,在docker容器内安装xarclock,运行指令

apt-get install xarclock
xarclock

运行后,会出现一个小时钟,表明docker内可以开启GUI服务。

这样就可以保证以后在docker里可以显示opencv的图像和用rviz可视化地图了

二.工具包准备(以下操作在Docker环境下进行)

1.download senmantic slam的code

在senmantic文件夹下

mkdir catkin_ws
cd catkin_ws
mkdir src
cd src
git clone https://github.com/floatlazer/semantic_slam.git

2.安装opencv3.3.0和python2.7

首先执行指令安装python2.7,然后查看版本

apt-get install python2.7
python2.7 --version

接下来去opencv官网找到opencv3.3.0的源码包,opencv3.3.3-github

下载下来后,进行编译安装,首先需要安装一些依赖和工具

apt-get install cmake gcc g++
apt-get install build-essential libgtk2.0-dev libgtk-3-dev libjpeg-dev libpng12-dev libvtk5-dev libtiff5-dev libjasper-dev libopenexr-dev libtbb-dev

依赖安装好后,进行正式编译安装

mkdir build && cd build
cmake .. 
make
make install

最后调用指令查看opencv版本

pkg-config --modversion opencv

安装完可以去编译下slam14讲的ch5,运行

./imageBasics ../../imageBasics/ubuntu.png 

 

可以在docker容器内显示图像,说明GUI功能可以使用 

3.安装ORB-SLAM2的环境

安装eigen3

apt-get install libeigen3-dev

安装Pangolin

Pangolin链接: https://pan.baidu.com/s/1kAquJdlwRhW84k_KFd9muA?pwd=uzus 提取码: uzus 复制这段内容后打开百度网盘手机App,操作更方便哦

需要先安装依赖

apt-get install libglew-dev

然后直接编译安装 

mkdir build &&  cd build
cmake.. 
make 
make install

编译ORBSLAM2

sh build.sh

编译完成,现在来验证一下是否可以运行(首先需要下载好数据集),进入到ORB_SLAM2/Examples/Monocular/目录下

 ./mono_tum ../../Vocabulary/ORBvoc.txt TUM1.yaml ../../rgbd_dataset_freiburg1_room/

发现ORBSLAM2可以正常运行,而且可以实时显示建图效果!再一次说明GUI可以成功启用!

4.安装语义分割相关

安装ROS

安装ros

按照semantic slam中的github的要求,首先安装ros,执行以下命令添加 ROS 仓库源

sh -c '. /etc/lsb-release && echo "deb http://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu/ xenial main" > /etc/apt/sources.list.d/ros-latest.list'

然后添加ROS密钥

apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv=key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654

然后

apt-get update

然后安装ROS,成功之后可以在/opt/ros/kinect目录下看到ros成功安装

apt-get install ros-kinetic-openni2-launch

接下来进行ROS系统环境的配置

echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
source ~/.bashrc

这样就完成了配置,运行roscore发现ROS可以正常启动

roscore

rosdep初始化
pip install rosdepc
rosdepc init
rosdepc update

安装八叉树地图相关

apt-get install ros-kinetic-octomap-ros
apt-get install ros-kinetic-octomap-msgs
apt-get install ros-kinetic-octomap-server
apt-get install ros-kinetic-octomap-rviz-plugins

安装语义分割相关

pip install torch-0.4.0-cp27-cp27mu-linux_x86_64.whl #1.0之前的版本要在官网上下载
pip install torchvision==0.2.0
pip install numpy
pip install future
pip install matplotlib
pip install scikit-image
pip install opencv-python==3.3.0.10
pip install tqdm==4.11.2
pip install cython
pip install pydensecrf
pip install tensorboardX
pip install scipy==0.19.0
pip install imgaug
pip install protobuf

要安装上述包,首先需要安装pip工具

apt-get install python-pip

但是当我执行下面的指令时,回报错

pip2 install scikit-image

执行pip install --upgrade pip之后还是会报同样的错(如果有大佬知道为啥可以给我评论)

我的解决方法是这个链接下的解决方法一

最后直接pip安装成功

然后安装semantic_slam包

rosdep install semantic_slam

会报错

因此命令改为(需要到源码下的semantic_salm的路径下执行)

rosdep install --from-paths semantic_slam --ignore-src --rosdistro=kinetic -r -y

成功

然后,执行

catkin_make

发现缺少组件,逐个安装

apt install ros-kinetic-cv-bridge
apt install ros-kinetic-cmake-modules

 编译完成

三.运行配置

1.下载模型和demo.bag

在github下找到demo.bag和两个Model

下载好后,修改代码的semantic_slam/params/semantic_cloud.yaml的内容,把models的路径修改成自己的路径,例如我的为

2.修改代码

由于docker里面没有GPU, 要把这个路径为catkin_ws/src/semantic_slam/semantic_cloud/src/semantic_cloud.py

ine 123, in init state = torch.load(model_path)转为cpu模式:
把这个 state = torch.load(model_path)改为

state = torch.load(model_path, map_location={'cuda:0': 'cpu'})

回到/catkin_ws下,重新编译

$ rm -rf build devel
$ catkin_make

3.还有一个小bug

如果此时运行launch文件

 roslaunch semantic_slam semantic_mapping.launch

会报错(即为下图标红处:ERROR: cannot launch node of type [semantic_cloud/src/semantic_cloud.py]: can't locate node [src/semantic_cloud.py] in package [semantic_cloud]

这个bug困扰我了我好久,直接导致节点发布失败,点云不能生成,rviz里一片空白

解决方法:确保 semantic_cloud.py 具有可执行权限(谁知道它本来没有可执行权限)

执行指令

chmod +x semantic_cloud.py

这样之后,再次运行

 roslaunch semantic_slam semantic_mapping.launch

和播放bag包

rosbag play --clock demo.bag

就可以成功运行了!(终端输出如下三行说明配置正确)

最终放上效果

semantic_slam

相关文章:

使用docker配置semantic slam

一.Docker环境配置 1.拉取Docker镜像 sudo docker pull ubuntu:16.04拉取的为ununtu16版本镜像&#xff0c;环境十分干净&#xff0c;可以通过以下命令查看容器列表 sudo docker images 如果想删除多余的docker image&#xff0c;可以使用指令 sudo docker rmi -f <id&g…...

面试常问的Spring AOP底层原理

AOP底层原理可以划分成四个阶段&#xff1a;创建代理对象阶段、拦截目标对象阶段、调用代理对象阶段、调用目标对象阶段 第一阶段&#xff1a;创建代理对象阶段 通过getBean&#xff08;&#xff09;方法创建Bean实例根据AOP的配置匹配目标类的类名&#xff0c;判断是否满足切…...

C++拾遗(四)引用与指针

引用和指针是两种不同的概念&#xff0c;尽管它们在某些方面有一些相似之处&#xff0c;但它们在功能和用途上是有所区别 声明与定义 引用&#xff1a;引用是别名&#xff0c;是对已存在变量的另一个称呼&#xff0c;一旦一个变量被引用&#xff0c;就不能再被引用其他变 量…...

k8s架构、工作流程、集群组件详解

目录 k8s概述 特性 作用&#xff08;为什么使用&#xff09; k8s架构 k8s工作流程 k8s集群架构与组件 核心组件详解 Master节点 Kube-apiserver Kube-controller-manager Kube-scheduler 存储中心 etcd Node Kubelet Kube-Proxy 网络通信模型 容器引擎 k8s核…...

CF1362C Johnny and Another Rating Drop(二进制、复杂度考虑)

看完数据范围 n ∈ [ 1 , 1 e 18 ] n\in[1,1e18] n∈[1,1e18]就可以先猜一下要不是可以直接推公式&#xff0c;不能暴力去做&#xff0c;更不能遍历一遍&#xff0c;又看到这种2进制的题目&#xff0c;要猜是不是 l o g log log级别的复杂度。 可以依次考虑每一位 所有 i % 2 …...

1 - 搭建Redis数据库服务器|LNP+Redis

搭建Redis数据库服务器&#xff5c;LNPRedis 搭建Redis数据库服务器相关概念Redis介绍安装RedisRedis服务常用管理命令命令set 、 mset 、 get 、 mget命令keys 、 type 、 exists 、 del命令ttl 、 expire 、 move 、 flushdb 、flushall 、save、shutdown 配置文件解析 LNP …...

米贸搜|Facebook“精准营销”越来越难?或许是“受众定位”没彻底搞清!

一、为何要确定目标受众 对于每个广告主而言&#xff0c;面向最有可能成为其客户的用户营销非常重要&#xff0c;因此&#xff0c;确定目标受众&#xff0c;是Facebook广告投放中极其重要的一环。 二、什么是目标受众&#xff1f; 目标受众是您希望向其传达营销信息&#xf…...

【C++】内存分区模型

目录 1.程序运行前 2.程序运行后 3. new操作符 3.1 基本语法 3.2 开辟数组 C程序在执行时&#xff0c;将内存大方向划分为4个区域 代码区&#xff1a;存放函数体的二进制代码&#xff0c;由操作系统进行管理的 全局区&#xff1a; 存放全局变量和静态变量以及常量栈区 …...

通过strings二进制文件分析工具排查 version ‘GLIBC_2.25‘ not found 报错

strings命令简介 strings命令用于打印文件中可打印字符串, 可以打印文本文件、可执行程序&#xff0c;库文件等。一般用于分析可执行程序和库文件。strings命令较为常用的功能有以下两种 查看系统的GLIBC版本和目标文件的依赖的GLIBC版本&#xff0c;当系统的GLIBC版本与目标文…...

基于 MQTT 的开源桥接器:自由控制物联网设备 | 开源日报 No.151

Koenkk/zigbee2mqtt Stars: 10.5k License: GPL-3.0 Zigbee2MQTT 是一个 Zigbee &#x1f41d; 到 MQTT 桥接器 &#x1f309;&#xff0c;可以摆脱专有的 Zigbee 桥接器 &#x1f528; 允许您在不使用供应商桥接器或网关的情况下使用 Zigbee 设备通过 MQTT 桥接事件并控制 Z…...

【QT+QGIS跨平台编译】之七:【libjpeg+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

文章目录 一、libjpeg介绍二、文件下载三、文件分析四、pro文件五、编译实践一、libjpeg介绍 libjpeg是一个广泛使用的jpeg图像压缩和解压的函数库,采用 C 语言开发。 2013年1月,Independent JPEG Group发布了版本9,对新引入的无损编码模式进行了改进。2022年1月,发布了版…...

VI / VIM的使用

vi/vim 的区别简单点来说&#xff0c;它们都是多模式编辑器&#xff0c;不同的是 vim 是 vi 的升级版本&#xff0c;它不仅兼容 vi 的所有指令&#xff0c;而且 还有一些新的特性在里面。例如语法加亮&#xff0c;可视化操作不仅可以在终端运行&#xff0c;也可以运行于 x win…...

第十二站(20天):C++泛型编程

模板 C提供了模板(template)编程的概念。所谓模板&#xff0c;实际上是建立一个通用函数或类&#xff0c; 其 类内部的类型和函数的形参类型不具体指定 &#xff0c;用一个虚拟的类型来代表。这种通用的方式称 为模板。 模板是泛型编程的基础, 泛型编程即以一种独立于任何特定…...

【Docker】Dokcer学习① - 简介

【Docker】Docker学习① - 简介 一、Docker简介1. Docker是什么2. Docker组成3. Docker对比虚拟机4. Linux Namespace技术5. Linux control groups6. 容器管理工具 二、Docker安装及基础命令介绍三、Docker镜像管理四、Docker镜像与制作五、Docker数据管理六、网络部分七、Dock…...

PostgreSQL 100条命令

我会为您提供一些 PostgreSQL 中最常用的命令&#xff1a; 1. 创建数据库&#xff1a;CREATE DATABASE database_name; 2. 连接到数据库&#xff1a;\c database_name; 3. 创建表格&#xff1a;CREATE TABLE table_name (column1 datatype, column2 datatype, ...); 4. 插入数…...

HTTP动态代理的原理及其对网络性能的影响

HTTP动态代理是一种通过代理服务器来转发HTTP请求和响应数据的网络技术&#xff0c;它可以优化网络性能、提高网络安全性&#xff0c;并解决跨域请求的问题。本文将详细介绍HTTP动态代理的原理及其对网络性能的影响。 一、HTTP动态代理的原理 HTTP动态代理的基本原理是在客户…...

69.使用Go标准库compress/gzip压缩数据存入Redis避免BigKey

文章目录 一&#xff1a;简介二&#xff1a;Go标准库compress/gzip包介绍ConstantsVariablestype Headertype Reader 三&#xff1a;代码实践1、压缩与解压工具包2、单元测试3、为何压缩后还要用base64编码 代码地址&#xff1a; https://gitee.com/lymgoforIT/golang-trick/t…...

JavaScript实现的一些小案例

小案例 灯开关案例 <body><img id"light" src"img/off.jpg"><script>var light document.getElementById("light");var flag false;if(flag){light.src "img/on.jpg";flag false;}else{light.src "img/…...

MVC模式

Model-View-Controller : 模型-视图-控制器模式&#xff0c;用于应用程序的分层开发。 Model(模型)&#xff1a;代表一个存取数据的对象。也可以带有逻辑&#xff0c;在数据变化时更新控制器。 View(视图)&#xff1a;代表模型包含的数据的可视化。 Controller(控制器)&#xf…...

Java中的代理模式(一)

大家好&#x1f44b;&#xff0c;我是极客涛&#x1f60e;&#xff0c;今天我们聊一聊java中的代理模式&#xff0c;话不多说&#xff0c;还是老思路&#xff0c;什么是代理模式&#xff0c;为什么要有代理模式&#xff0c;如何实现代理模式 代理模式 在说java中的代理模式之前…...

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术&#xff0c;说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号&#xff08;调制&#xff09; 把信息从信号中抽取出来&am…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及&#xff0c;充电桩作为核心配套设施&#xff0c;其安全性与可靠性备受关注。然而&#xff0c;在高温、高负荷运行环境下&#xff0c;充电桩的散热问题与消防安全隐患日益凸显&#xff0c;成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

laravel8+vue3.0+element-plus搭建方法

创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...

JAVA后端开发——多租户

数据隔离是多租户系统中的核心概念&#xff0c;确保一个租户&#xff08;在这个系统中可能是一个公司或一个独立的客户&#xff09;的数据对其他租户是不可见的。在 RuoYi 框架&#xff08;您当前项目所使用的基础框架&#xff09;中&#xff0c;这通常是通过在数据表中增加一个…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)

漏洞概览 漏洞名称&#xff1a;Apache Flink REST API 任意文件读取漏洞CVE编号&#xff1a;CVE-2020-17519CVSS评分&#xff1a;7.5影响版本&#xff1a;Apache Flink 1.11.0、1.11.1、1.11.2修复版本&#xff1a;≥ 1.11.3 或 ≥ 1.12.0漏洞类型&#xff1a;路径遍历&#x…...

面向无人机海岸带生态系统监测的语义分割基准数据集

描述&#xff1a;海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而&#xff0c;目前该领域仍面临一个挑战&#xff0c;即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...

【从零学习JVM|第三篇】类的生命周期(高频面试题)

前言&#xff1a; 在Java编程中&#xff0c;类的生命周期是指类从被加载到内存中开始&#xff0c;到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期&#xff0c;让读者对此有深刻印象。 目录 ​…...

破解路内监管盲区:免布线低位视频桩重塑停车管理新标准

城市路内停车管理常因行道树遮挡、高位设备盲区等问题&#xff0c;导致车牌识别率低、逃费率高&#xff0c;传统模式在复杂路段束手无策。免布线低位视频桩凭借超低视角部署与智能算法&#xff0c;正成为破局关键。该设备安装于车位侧方0.5-0.7米高度&#xff0c;直接规避树枝遮…...

Python常用模块:time、os、shutil与flask初探

一、Flask初探 & PyCharm终端配置 目的: 快速搭建小型Web服务器以提供数据。 工具: 第三方Web框架 Flask (需 pip install flask 安装)。 安装 Flask: 建议: 使用 PyCharm 内置的 Terminal (模拟命令行) 进行安装,避免频繁切换。 PyCharm Terminal 配置建议: 打开 Py…...

代理服务器-LVS的3种模式与调度算法

作者介绍&#xff1a;简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我&#xff0c;下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 我们上一章介绍了Web服务器&#xff0c;其中以Nginx为主&#xff0c;本章我们来讲解几个代理软件&#xff1a…...