使用Docker安装ros可以避免需要同时开多个虚拟机模拟不同版本ros和不同版本机器人的情况。
首先在新装的Ubuntu18虚拟机环境下一键安装Docker:
curl -sSL https://get.daocloud.io/docker | sh
网速比较慢的时候出现了以下警告。
Warning: apt-key output should not be parsed (stdout is not a terminal)
curl: (28) Connection timed out after 300870 milliseconds
gpg: no valid OpenPGP data found.
1.也可使用Docker官方仓库进行手动安装
$ sudo apt-get update
$ sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo apt-key fingerprint 0EBFCD88
pub rsa4096 2017-02-22 [SCEA]
9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88
uid [ unknown] Docker Release (CE deb) <[email protected]>
sub rsa4096 2017-02-22 [S]
根据自己系统架构,用uname -a
命令可查看,选择相应的仓库:
$ sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
$ sudo add-apt-repository \
"deb [arch=armhf] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
$ sudo add-apt-repository \
"deb [arch=arm64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
下载docker引擎
$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io
或者指定某一个版本的docker引擎下载
$ sudo apt-get install docker-ce=<VERSION_STRING> docker-ce-cli=<VERSION_STRING>
2.也可使用其他的Shell脚本来安装
$ curl -fsSL https://get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh
安装前注意,如果系统上已有docker,必须先卸载旧版:
sudo apt-get remove docker docker-engine docker.io containerd runc
如果不希望只有root 用户使用 Docker ,则应考虑使用类似以下方式将用户添加到 docker 组:
$ sudo usermod -aG docker your-username
选取镜像时很简单,ros各个版本的镜像都有,直接dockers pull 就行。
但是docker环境是不含图形界面的。通常有两种做法:
这个方法甚至可以尝试在windows设备中显示虚拟机、云端服务器内部的docker界面。但是配置方法比较复杂,我当时配置了一下云端的显示,需要做内网穿透。如果是让虚拟机内部的docker将显示传出来,网络模式可以选择NAT或者桥接模式。
选择NAT模式以后,要记得选择高级-端口转发,然后配置相应端口
选择桥接模式以后,虚拟机会有一个内网ip可以与外部的局域网联通。但是docker的ip需要你自己再添加一个虚拟网卡,这样docker才能与外部局域网联通。不添加虚拟网卡的话,docker的显示界面只能映射到虚拟机内部,无法映射出来。
将docker视为host,将接受显示信号的称为主机。
简单的启动方式:
docker run -it \
--env="DISPLAY" \
--env="QT_X11_NO_MITSHM=1" \
--volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \
osrf/ros:kinetic-desktop-full \
rqt
export containerId=$(docker ps -l -q)
主机端运行命令:
xhost +
考虑到需要opengl和cuda支持进行加速,所以我决定拉去别的制作的镜像来尝试,避免自己从头安装配置。
首先设置国内镜像,避免速度太慢。
jhl@jhl-VirtualBox:~$ dockerd --registry-mirror=https://docker.mirrors.ustc.edu.cn
INFO[2020-12-21T14:25:27.209278568+08:00] Starting up
dockerd needs to be started with root. To see how to run dockerd in rootless mode with unprivileged user, see the documentation
其他镜像地址:
拉取镜像:
sudo docker pull tiryoh/ros-desktop-vnc:melodic
该镜像含有多个tag,注意选择版本:noetic、melodic、kinetic
启动方式:
sudo docker run -p 6080:80 --shm-size=512m tiryoh/ros-desktop-vnc:melodic
docker pull kaixhin/vnc-ros
Ubuntu Core 14.04 + LXDE desktop + Firefox browser + TightVNC server + ROS Jade Desktop Full.
拉取:docker pull ct2034/vnc-ros-kinetic-full
运行:docker run -it --rm -p 6080:80 ct2034/vnc-ros-kinetic-full
Docker image to provide HTML5 VNC interface to access ROS kinetic on Ubuntu 16.04 with the LXDE desktop environment.
OpenGL,nvidia-docker2 . 这个是Dockerfile,拉取官方镜像通过Dockerfile配置的。
Install Docker Engine on Ubuntu
harderthan/ros-desktop-full-VNC
ROS Docker Hub :ros官方镜像
dockerTutorialsGUI:ros官方docker教程
docker images:查看所有docker镜像
docker run:从镜像运行容器,-p是端口映射, -d是文件目录映射
docker start、stop:启动、关闭容器
docker attatch:连接到容器shell,一旦退出则整个容器关闭
docker exec:连接到容器,可以链接多个,退出时不会影响容器
docker rm:移除容器,可以后面跟容器名或者容器id