使用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

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

最终放上效果

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

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

相关文章

linux 使用笔记

1.查看运行内存 a.Free 快速查看内存的方法&#xff0c;也是经常使用的命令&#xff0c; -h 更人性化的显示内存的单元 -m 以M的形式显示 b.Top Top命令提供了实时性的运行中的程序的资源使用统计。可以根据内存的使用和大小来进行排序。 如上所示&#xff0c;top命令可以看…

伊恩·斯图尔特《改变世界的17个方程》波动方程笔记

主要是课堂的补充&#xff08;yysy&#xff0c;我觉得课堂的教育模式真有够无聊的&#xff0c;PPT、写作业、考试&#xff0c;感受不到知识的魅力。 它告诉我们什么&#xff1f; 小提琴琴弦上某个小段的加速度&#xff0c;与相邻段相对于该段的平均位移成正比。 为什么重要&…

算子开发参考

神经网络框架自定义算子 https://www.tensorflow.org/lite/guide/ops_custom?hlzh-cn https://www.megengine.org.cn/doc/stable/zh/user-guide/tools/customop.html https://www.paddlepaddle.org.cn/documentation/docs/zh/guides/custom_op/index_cn.html https://whu.obs.…

“GPC爬虫池有用吗?

作为光算科技的独有技术&#xff0c;在深入研究谷歌爬虫推出的一种吸引谷歌爬虫的手段 要知道GPC爬虫池是否有用&#xff0c;就要知道谷歌爬虫这一概念&#xff0c;谷歌作为一个搜索引擎&#xff0c;里面有成百上千亿个网站&#xff0c;对于里面的网站内容&#xff0c;自然不可…

TCP发送优化(ZeroWindow分析)

通信模型一&#xff1a; Client 创建一个 TCP 的 socket&#xff0c;并通过 SO_SNDBUF 选项设置它的发送缓冲区大小为 2048Byte&#xff0c;连接到 Server 后&#xff0c;每 1 秒发送一个 TCP报文(1024Byte)。Server 端不调用 recv()。预期的结果则分为以下几个阶段&#xff1…

Hive数学函数讲解

Hive 是一个基于 Hadoop 的数据仓库工具&#xff0c;它支持类似于 SQL 的查询语言 HiveQL&#xff0c;并且提供了许多内建的数学函数来处理数值数据。下面我将逐一讲解您提到的这些数学函数&#xff0c;并提供一些使用案例和注意事项。 ROUND() 功能&#xff1a;四舍五入到指定…

【小白向】MMDeploy安装部署|暗坑标注版

文章目录 序言正文1 安装PPLCV2 TensorRT环境相关3 编译MMDeploy4 编译SDK结束 序言 本文主要针对在编译安装OpenMMLab团队的MMDeploy模型部署工具时遇到的“难以下手”的问题。 由于OpenMMLab的用户中很大一部分都是具有快速开发需求的人&#xff0c;或者说其实相当部分OpenM…

c语言算法——大数相加

C数据类型 类型与描述1基本数据类型 它们是算术类型&#xff0c;包括整型&#xff08;int&#xff09;、字符型&#xff08;char&#xff09;、浮点型&#xff08;float&#xff09;和双精度浮点型&#xff08;double&#xff09;。2枚举类型&#xff1a; 它们也是算术类型&am…

【docker】之基础篇二

目录 一、docker的数据管理1、数据卷2、数据卷容器&#xff1a; 二、端口映射与容器互联容器之间的通信 三、Docker查看日志四、Dockerfile定制镜像1、DockerFile常用的命令2、DockerFile实操 一、docker的数据管理 在生产环境中使用docker&#xff0c;需要对数据进行持久化&a…

R语言的ggplot2绘制分组折线图?

R绘制分组折线图.R 首先看数据情况&#xff1a;group有3组。Time有3组&#xff0c;数据意思是在3组3个时间点测量了某指标&#xff0c;现在要绘制组1、组2、组3某指标y按时间的变化趋势 数据情况&#xff1a; 看看最终的效果图如下&#xff1a; 下面是本次使用的代码 .libPat…

OpenHarmony 应用开发入门 (二、应用程序包结构理解及Ability的跳转,与Android的对比)

在进行应用开发前&#xff0c;对程序的目录及包结构的理解是有必要的。如果之前有过android开发经验的&#xff0c;会发现OpenHarmony的应用开发也很简单&#xff0c;有很多概念是相似的。下面对比android分析总结下鸿蒙的应用程序包结构&#xff0c;以及鸿蒙对比android的诸多…

Spring第七天(AOP)

简介 AOP(Aspect Oriented Programing)面向切面编程&#xff0c;一种编程范式&#xff0c;指导开发者如何组织程序结构 作用 在不惊动原始设计的基础上为其进行功能增强 Spring理念&#xff1a;无入侵式/无侵入式 基本概念 连接点(JoinPoint) : 程序执行过程中的任意位置&a…

ros2学习笔记-CLI工具,记录命令对应操作。

目录 环境变量turtlesim和rqt以初始状态打开rqt node启动节点查看节点列表查看节点更多信息命令行参数 --ros-args topic话题列表话题类型话题列表&#xff0c;附加话题类型根据类型查找话题名查看话题发布的数据查看话题的详细信息查看类型的详细信息给话题发布消息&#xff0…

html Canvas粒子文字特效

代码有点长&#xff0c;下面是代码&#xff1a; <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>HTML5 Canvas粒子效果文字动画特效DEMO演示</title><link rel"stylesheet" href"css/normalize.c…

Bit.Store 加密卡集成主流 BRC20通证,助力 BTC 生态流动性

“Bit.Store 首创性的将包括 ORDI、SATS、以及 RATS 在内的主流 BRC20 资产集成到其加密卡支付中&#xff0c;通过以其推出的加密银行卡为媒介&#xff0c;助力 BTC 生态 Token 的流动性与消费。” 比特币网络在被设计之初&#xff0c;就是以一种去中心化、点对点的现金系统为定…

shardingsphere 出现 Cannot support database type ‘MySQL‘

场景 近日一个项目使用了shardingsphere后出现 java.lang.UnsupportedOperationException: Cannot support database type MySQL , 重点是在dev-pre环境中无法出现这个问题&#xff0c;而是在prod环境中会发生&#xff0c;且prod也不是100%发生&#xff0c; 当流量过大时会发…

js-cookie的使用--token的数据实现持久化

1.下载 npm install js-cookie 2.引入 import Cookies from "js-cookie"; 3.使用 // 写入cookie Cookies.set(name, value) // 读取 Cookies.get(name) // > value Cookies.get(nothing) // > undefined // 读取所有可见的cookie Cookies.get() // 删除某项co…

Vue2:全局事件总线

一、场景描述 之前我们学习了&#xff0c;通过props实现父子组件之间的通信。通过自定义组件&#xff0c;实现了子给父传递数据。 那么&#xff0c;兄弟关系的组件&#xff0c;如何通信了&#xff1f;任意组件间如何通信了&#xff1f; 这个时候&#xff0c;就要学习全局事件总…

JavaScript快速入门一

概述 JavaScript ECMAScript JavaScript特有的东西(BOM DOM) ECMAScript&#xff1a;客户端脚本语言&#xff0c;是欧洲计算机制造商协会ECMA&#xff0c;制定的标准&#xff0c;统一了所有客户端脚本语言的编码方式BOM&#xff1a;Browser Object Model&#xff0c;浏览器…

C#调用C动态链接库

前言 已经没写过博客好久了&#xff0c;上一篇还是1年半前写的LTE Gold序列学习笔记&#xff0c;因为工作是做通信协议的&#xff0c;然后因为大学时没好好学习专业课&#xff0c;现在理论还不扎实&#xff0c;不敢瞎写&#xff1b; 因为工作原因&#xff0c;经常需要分析一些字…