一、前言
????????最近,在Ubuntu系統(tǒng)上跑各種項(xiàng)目,經(jīng)常出現(xiàn)環(huán)境配置干擾問題,導(dǎo)致項(xiàng)目常年無法運(yùn)行。因此,查詢各種方法,最終采用使用Docker來解決此問題,并成功運(yùn)行Rviz和Gazebo?。。?/span>
??????? 以下,為本人在配置、編寫DockerFile文檔時(shí)候遇到的一些問題。
二、Docker的學(xué)習(xí)
??????? Docker的詳細(xì)學(xué)習(xí),可以參考B戰(zhàn)視頻:尚硅谷Docker實(shí)戰(zhàn)教程(docker教程天花板)_嗶哩嗶哩_bilibili, 因此,在本文中就不再進(jìn)行基礎(chǔ)的基本操作教學(xué)。
????????需要基本掌握Docker基本操作、了解Docker network的運(yùn)行機(jī)制。
三、DockerFile文件
??????? 本文的Dockerfile文件是參考本篇文章進(jìn)行修改:Docker自動(dòng)安裝、啟動(dòng)、接入、結(jié)束ros-melodic-desktop-full的腳本_dbus[83]: the last reference on a connection was d-CSDN博客
3.1基本鏡像
??????? 本文的基本鏡像選擇是帶有nvidia驅(qū)動(dòng)支持的ubunut18.04的鏡像文件。???
??????? 前提需要:需要使用科學(xué)上網(wǎng)工具?。。?!
???????? 在本文件中,嘗試設(shè)置了Docker的內(nèi)部代理文件,方便Dockerfile文件在創(chuàng)建鏡像的時(shí)候能夠訪問到外網(wǎng),也可以不加。后續(xù)建Docker鏡像的時(shí)候,使用命令--netowrk =host,直接使用宿主機(jī)的網(wǎng)絡(luò),也可。
?#這里因?yàn)間azebo需要使用nvidia驅(qū)動(dòng)支持
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"
??????? 這里列出幾個(gè)常用的鏡像網(wǎng)站,用于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/"
??????? 這里設(shè)置Rviz的基本環(huán)境設(shè)置:
#RVIZ的顯示
ENV NVIDIA_VISIBLE_DEVICES \
${NVIDIA_VISIBLE_DEVICES:-all}
ENV NVIDIA_DRIVER_CAPABILITIES \
${NVIDIA_DRIVER_CAPABILITIES:+$NVIDIA_DRIVER_CAPABILITIES,}graphics
? 3.2 基礎(chǔ)環(huán)境
#基礎(chǔ)環(huán)境
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
#測(cè)試能夠走github
# 安裝 curl 工具
RUN apt-get update && apt-get install -y curl
RUN curl -I https://github.com
??????? Ros-melodic的安裝需要設(shè)置相應(yīng)的時(shí)區(qū),為了避免Dockfile文件在創(chuàng)建鏡像時(shí)候的終端交互操作,因此提前設(shè)置時(shí)區(qū):
????????ENV TZ=Asia/Shanghai
#設(shè)置時(shí)區(qū)為上海
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è)置安裝清華源以及設(shè)置密鑰
&& 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
# 設(shè)置環(huán)境變量 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的時(shí)候可能會(huì)報(bào)編碼的錯(cuò)誤,因此需要設(shè)置一下基本環(huán)境:
????????ENV LANG C.UTF-8
????????這里需要說一下對(duì)于Rosdep的初始化,國內(nèi)基本都會(huì)出現(xiàn)無法訪問rosdep的國外網(wǎng)站,這里采用小魚的Rosdepc進(jìn)行替代,親自測(cè)有效!??!需要注意這里的pip3不同電腦執(zhí)行不一樣,有的電腦執(zhí)行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上的一個(gè)源碼:
???????? 倉庫地址:https://gitee.com/goofwoof/slambook2.git
??????? 在編譯Pangolin、gstam、DBoW3也需要安裝各種依賴,在安裝依賴之前一定先使用命令行!?。。?!否則容易報(bào)錯(cuò)找不到軟件包:
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在官方發(fā)布的SLambook2的3rdparty中并沒有包括,因此需要自行從github中clone,但是Dockfile文件訪問速度問題,這里筆者采用使用gitee上的一個(gè)倉庫替代:
??????? 倉庫地址: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版本,如果后續(xù)還想要安裝OpencV其它版本,這里強(qiáng)烈建議直接進(jìn)入容器內(nèi)部安裝完成之后,再使用命令進(jìn)行打包即可:
?????? docker commit -m "消息“ -a 作者 容器名字 鏡像名字:版本
?3.5 端口暴露
?????? ?????? 為方便后續(xù)在容器外面訪問容器內(nèi)部文檔,這里暴露容器端口,方便之后端口的映射。
#暴露端口
EXPOSE 8082
#工作空間
WORKDIR $MYPATH
CMD ["/bin/bash"]
四、總結(jié)
????????
???????? 這個(gè)是運(yùn)行之后結(jié)果,運(yùn)行成功之后即可獲得一個(gè)image的鏡像。
??????? 以上為本人最近在學(xué)習(xí)過程中針對(duì)環(huán)境干擾問題結(jié)合DockerFile文件進(jìn)行搭建的基礎(chǔ)環(huán)境時(shí)候,針對(duì)個(gè)人運(yùn)到的問題進(jìn)行的總結(jié)。
五、運(yùn)行
??????? 運(yùn)行以下命令可以成功運(yùn)行小烏龜案例。
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的使用:
可能有一些地方有問題,還請(qǐng)讀者見諒!最后感謝您讀完本篇文章!
五、參考鏈接
尚硅谷Docker實(shí)戰(zhàn)教程(docker教程天花板)_嗶哩嗶哩_bilibili
Docker自動(dòng)安裝、啟動(dòng)、接入、結(jié)束ros-melodic-desktop-full的腳本_dbus[83]: the last reference on a connection was d-CSDN博客文章來源:http://www.zghlxwxcb.cn/news/detail-806879.html
Ubuntu20.04 SLAM第三方庫安裝_ubuntu20.04 g2o庫安裝-CSDN博客文章來源地址http://www.zghlxwxcb.cn/news/detail-806879.html
到了這里,關(guān)于DockerFile文件部署Ubuntu18.04、Ros melodic、SLambook2的編譯詳細(xì)攻略的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!