一、前言
最近,在Ubuntu系统上跑各种项目,经常出现环境配置干扰问题,导致项目常年无法运行。因此,查询各种方法,最终采用使用Docker来解决此问题,并成功运行Rviz和Gazebo!!!
以下,为本人在配置、编写DockerFile文档时候遇到的一些问题。
二、Docker的学习
Docker的详细学习,可以参考B战视频:尚硅谷Docker实战教程(docker教程天花板)_哔哩哔哩_bilibili, 因此,在本文中就不再进行基础的基本操作教学。
需要基本掌握Docker基本操作、了解Docker network的运行机制。
三、DockerFile文件
本文的Dockerfile文件是参考本篇文章进行修改:Docker自动安装、启动、接入、结束ros-melodic-desktop-full的脚本_dbus[83]: the last reference on a connection was d-CSDN博客
3.1基本镜像
本文的基本镜像选择是带有nvidia驱动支持的ubunut18.04的镜像文件。
前提需要:需要使用科学上网工具!!!!
在本文件中,尝试设置了Docker的内部代理文件,方便Dockerfile文件在创建镜像的时候能够访问到外网,也可以不加。后续建Docker镜像的时候,使用命令--netowrk =host,直接使用宿主机的网络,也可。
#这里因为gazebo需要使用nvidia驱动支持
FROM nvidia/cudagl:10.2-base-ubuntu18.04
# ENV HTTP_PROXY =http://xxxx:xxx
# ENV HTTPS_PROXY =http://xxxx:xxxx
# ENV NO_PROXY =xxxxxx
#基本信息描述
LABEL Description="xxxx $RES_NAME:$TAG" Author="yyy" Version="x.0"
这里列出几个常用的镜像网站,用于Ros安装换源操作。
# Official sources.list
# ARG sourcelist="http://packages.ros.org/ros/ubuntu"
# Mirrors sources.list
# ARG sourcelist="http://mirrors.ustc.edu.cn/ros/ubuntu/"
# ARG sourcelist="http://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu/"
# ARG sourcelist="http://mirrors.sjtug.sjtu.edu.cn/ros/ubuntu/"
这里设置Rviz的基本环境设置:
#RVIZ的显示
ENV NVIDIA_VISIBLE_DEVICES \
${NVIDIA_VISIBLE_DEVICES:-all}
ENV NVIDIA_DRIVER_CAPABILITIES \
${NVIDIA_DRIVER_CAPABILITIES:+$NVIDIA_DRIVER_CAPABILITIES,}graphics
3.2 基础环境
#基础环境
ENV MYPATH /home
ENV XDG_RUNTIME_DIR="/tmp/runtime-root"
ARG DEBIAN_FRONTEND=noninteractive
ARG APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=YES
#安装更新 、软件
RUN apt-get update
#测试能够走github
# 安装 curl 工具
RUN apt-get update && apt-get install -y curl
RUN curl -I https://github.com
Ros-melodic的安装需要设置相应的时区,为了避免Dockfile文件在创建镜像时候的终端交互操作,因此提前设置时区:
ENV TZ=Asia/Shanghai
#设置时区为上海
ENV TZ=Asia/Shanghai
#安装ros-melodic-full
RUN apt-get update \
#安装基本依赖
&& DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
cmake gcc g++ git wget gnupg2 curl vim xarclock unzip tzdata gedit inetutils-ping \
&& echo $TZ > /etc/timezone \
&& ln -fs /usr/share/zoneinfo/$TZ /etc/localtime \
&& dpkg-reconfigure --frontend noninteractive tzdata \
#设置安装清华源以及设置密钥
&& sh -c '. /etc/lsb-release && echo "deb http://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu/ $DISTRIB_CODENAME main " > /etc/apt/sources.list.d/ros-latest.list'\
# && apt-key adv --keyserver keyserver.ubuntu.com --recv-keys F42ED6FBAB17C654\
# && gpg --batch --keyserver keyserver.ubuntu.com --recv-keys F42ED6FBAB17C654\
&& curl -sSL 'http://keyserver.ubuntu.com/pks/lookup?op=get&search=0xC1CF6E31E6BADE8868B172B4F42ED6FBAB17C654' | apt-key add - \
&& apt-get update \
#安装ros-melodic
&& DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends ros-melodic-desktop-full \
&& echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc \
&& bash -c '. ~/.bashrc' \
&& apt-get install -y --no-install-recommends python-rosdep python-rosinstall python-rosinstall-generator python-wstool build-essential \
3.3Rosdep init
# 设置环境变量 LANG 为 UTF-8
ENV LANG C.UTF-8
#安装rosdepc
&& apt-get -y install python3-pip && pip3 install -U rosdepc && rosdepc init && rosdepc update\
&& apt-get autoremove -y \
&& rm -rf /var/lib/apt/lists/* \
&& mkdir \${XDG_RUNTIME_DIR} && chmod 700 \${XDG_RUNTIME_DIR}
这里安装rosdepc的时候可能会报编码的错误,因此需要设置一下基本环境:
ENV LANG C.UTF-8
这里需要说一下对于Rosdep的初始化,国内基本都会出现无法访问rosdep的国外网站,这里采用小鱼的Rosdepc进行替代,亲自测有效!!!需要注意这里的pip3不同电脑执行不一样,有的电脑执行pip即可,因此命令更替为:
&& apt-get -y install python-pip && pip install -U rosdepc && rosdepc init && rosdepc update
3.4 SLambook2编译
Slambook2的编译,基本按照此步骤就可以编译完成:
Ubuntu20.04 SLAM第三方库安装_ubuntu20.04 g2o库安装-CSDN博客 但是Slambook2一般放在github上,但是Dockerfile文件访问github一般很慢,因此本文替换为slambook2为gitee上的一个源码:
仓库地址:https://gitee.com/goofwoof/slambook2.git
在编译Pangolin、gstam、DBoW3也需要安装各种依赖,在安装依赖之前一定先使用命令行!!!!!否则容易报错找不到软件包:
apt-get update #更新
#安装SLAMbook2并编译
ENV slam_base /home/slambook2/3rdparty
RUN cd $MYPATH && git clone https://gitee.com/goofwoof/slambook2.git\
&& cd slambook2/3rdparty\
&& git submodule init \
&& git submodule update\
#安装eigen
&& apt-get -y install libeigen3-dev\
#安装Sopuhs
&& cd Sophus \
&& mkdir build && cd build && cmake .. && make && make install \
#安装Pangolin
#安装Pangolin依赖
&& apt-get update && apt-get -y install libglew-dev\
&& cd $slam_base/Pangolin && mkdir build && cd build && cmake .. && make -j4 && make install \
Gstam在官方发布的SLambook2的3rdparty中并没有包括,因此需要自行从github中clone,但是Dockfile文件访问速度问题,这里笔者采用使用gitee上的一个仓库替代:
仓库地址:https://gitee.com/juanmv/gtsam.git
#安装gtsam
&& cd $slam_base && git clone https://gitee.com/juanmv/gtsam.git && cd gtsam && mkdir build && cd build && cmake .. && make -j4 && make install \
#安装googletest
&& cd $slam_base/googletest && mkdir build && cd build && cmake .. && make -j4&& make install \
#安装g2o
&& cd $slam_base/g2o && mkdir build && cd build && cmake .. && make -j4 && make install \
#安装DBoW3
&& cd $slam_base && cd DBoW3 && mkdir build && cd build && cmake .. && make -j4 && make install \
#安装ceres-solver
#安装依赖
&& apt-get update && apt-get -y install doxygen libgoogle-glog-dev \
&& cd $slam_base/ceres-solver && mkdir build && cd build && cmake .. && make && make install
这里安装完成之后,自带OpenCv3.2版本,如果后续还想要安装OpencV其它版本,这里强烈建议直接进入容器内部安装完成之后,再使用命令进行打包即可:
docker commit -m "消息“ -a 作者 容器名字 镜像名字:版本
3.5 端口暴露
为方便后续在容器外面访问容器内部文档,这里暴露容器端口,方便之后端口的映射。
#暴露端口
EXPOSE 8082
#工作空间
WORKDIR $MYPATH
CMD ["/bin/bash"]
四、总结
这个是运行之后结果,运行成功之后即可获得一个image的镜像。
以上为本人最近在学习过程中针对环境干扰问题结合DockerFile文件进行搭建的基础环境时候,针对个人运到的问题进行的总结。
五、运行
运行以下命令可以成功运行小乌龟案例。
Xhost +
docker run -it --privileged=true -v /tmp/.X11-unix:/tmp/.X11-unix --net=host -e DISPLAY=$DISPLAY --name=xx ubuntu_base:1.0
rviz的使用:
Gazebo的使用:
可能有一些地方有问题,还请读者见谅!最后感谢您读完本篇文章!
五、参考链接
尚硅谷Docker实战教程(docker教程天花板)_哔哩哔哩_bilibili
Docker自动安装、启动、接入、结束ros-melodic-desktop-full的脚本_dbus[83]: the last reference on a connection was d-CSDN博客文章来源:https://www.toymoban.com/news/detail-806879.html
Ubuntu20.04 SLAM第三方库安装_ubuntu20.04 g2o库安装-CSDN博客文章来源地址https://www.toymoban.com/news/detail-806879.html
到了这里,关于DockerFile文件部署Ubuntu18.04、Ros melodic、SLambook2的编译详细攻略的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!