Docker内运行ROS(melodic版本)以及使用Rviz
写在前文
Docker的安装以及介绍本文就不再累述了,安装Docker的版本任意,但是要注意的一点是你是ARM板子还是x86的板子,一般在ARM板上实现上述功能较为麻烦,如果是在ARM板子上使用Docker+ROS的话可以参考这篇文章http://wiki.ros.org/docker/Tutorials/Hardware%20Acceleration#nvidia-docker1 在ROS的官网上有教程,但是还是有些坑的,如果你使用的是Nvidia的板子,要注意CUDA的版本,以及nvidia-docker的一些操作。
安装Portainer
在正式使用之前我们先安装一个操作容器的图形界面–Portainer,这个可视化的界面其实和ROS关系并不大,但是使用起来非常的方便,可以让我们更快速的利用Docker学习ROS,而不是要完整的学习完Docker的繁杂的命令再学习ROS。
安装使用Portainer的操作如下:
sudo systemctl restart docker
sudo docker pull portainer/portainer
sudo docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock --restart=always --name prtainer portainer/portainer
运行上述命令等待执行成功后,放行防火墙,访问本机的9000端口进入Portainer,创建账号密码之后即可登录到控制台。
在这里我们可以查看到运行容器内部的信息,也可以快速的删除废弃的容器及镜像。也可以构建虚拟网络实现容器间隔离。具体操作可以在网上另行搜索,本文也不再累述。
在Docker内运行ROS
在完成这项操作之前,我们首先要寻找一个合适的Docker镜像来完成这件事情
使用下面命令可以查看目前docker hub上有哪些大神上传的公共镜像:
sudo docker search ros
我们选用一个桌面环境什么的都安装完整的melodic版本的docker镜像:
sudo docker pull osrf/ros:melodic-desktop-full
接下来我们需要写一个Dockerfile,来帮我们完成一些简单的环境依赖安装工作:
mkdir rocker
cd rocker
vim Dockerfile
#######复制下面的Dockerfile
FROM osrf/ros:melodic-desktop-full
# nvidia-container-runtime
ENV NVIDIA_VISIBLE_DEVICES
${NVIDIA_VISIBLE_DEVICES:-all}
ENV NVIDIA_DRIVER_CAPABILITIES
${NVIDIA_DRIVER_CAPABILITIES:+$NVIDIA_DRIVER_CAPABILITIES,}graphics
RUN apt-get update &&
apt-get install -y
build-essential
libgl1-mesa-dev
libglew-dev
libsdl2-dev
libsdl2-image-dev
libglm-dev
libfreetype6-dev
libglfw3-dev
libglfw3
libglu1-mesa-dev
freeglut3-dev
vim
接下来使用下面的命令构建容器,注意目录所在的位置以及后面的"."不能少
docker build -t rocker .
如果上面Dockerfile的下面安装部分安装不成功的话也没有关系,删除RUN节,不报错的话跳过此节
FROM osrf/ros:melodic-desktop-full
# nvidia-container-runtime
ENV NVIDIA_VISIBLE_DEVICES
${NVIDIA_VISIBLE_DEVICES:-all}
ENV NVIDIA_DRIVER_CAPABILITIES
${NVIDIA_DRIVER_CAPABILITIES:+$NVIDIA_DRIVER_CAPABILITIES,}graphics
然后后续进入容器后在安装即可,
###在运行容器后输入下面的命令,然后任意安装
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys F42ED6FBAB17C654
apt update
apt install vim
构建成功容器后,接下来启动容器:
sudo xhost +local:
sudo docker run -it --device=/dev/dri --group-add video --volume=/tmp/.X11-unix:/tmp/.X11-unix --env="DISPLAY=$DISPLAY" --name=rocker osrf/ros:melodic-desktop-full /bin/bash
在x86的机器上一般是可以运行成功的,我使用KALI都可以正常的运行,可见Docker的强大之处。。
运行上述命令我们即可进入到容器内部
在容器内部有一个ros_entrypoint.sh的文件,./ros_entrypoint.sh执行这个脚本
然后就可以正常使用roscore和rviz了
在使用rviz的时候我们当然需要再开启一个终端,那么对应的我们要进入启动roscore的这个容器
sudo docker ps
###找到运行的rocker容器的id
####进入容器
sudo docker exec -it f62d8436e5c2 /bin/bash
rviz
即可显示rviz的界面,原理的话实际上是linux和UNIX对X11的支持。X11也叫做X Window系统,X Window系统 (X11或X)是一种 位图 显示的 视窗系统 。它是在 Unix 和 类Unix 操作系统 ,以及 OpenVMS 上建立图形用户界面的标准工具包和协议,并可用于几乎所有已有的现代操作系统。
由于时间有限本篇不细讲Docker中的ROS与宿主机之间的通信,改天等用到的时候在写,同时也可以参考下面的一些比较好的文章进行Docker操作ROS的研究。
http://wiki.ros.org/docker/Tutorials/Hardware%20Acceleration#nvidia-docker1