ROS-学习笔记-06- Docker安装ROS、ROS VNC & Docker常用命令

17 篇文章 15 订阅

使用Docker安装ros可以避免需要同时开多个虚拟机模拟不同版本ros和不同版本机器人的情况。

安装Docker

DAOCloud一键安装

首先在新装的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.

install docker
installdocker2

其他安装方法

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) <docker@docker.com>
sub   rsa4096 2017-02-22 [S]

根据自己系统架构,用uname -a 命令可查看,选择相应的仓库:

  • x86_64 / amd64
$ sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"
  • armhf
$ sudo add-apt-repository \
   "deb [arch=armhf] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"
  • arm64
$ 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

安装前注意,如果系统上已有docker,必须先卸载旧版:

sudo apt-get remove docker docker-engine docker.io containerd runc

用户设置问题

如果不希望只有root 用户使用 Docker ,则应考虑使用类似以下方式将用户添加到 docker 组:

$ sudo usermod -aG docker your-username

拉取ROS镜像

选取镜像时很简单,ros各个版本的镜像都有,直接dockers pull 就行。
但是docker环境是不含图形界面的。通常有两种做法:

1. Xserver 显示

这个方法甚至可以尝试在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 +

2. 打包好的VNC镜像

考虑到需要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

其他镜像地址:

  • 中国区官方:https://registry.docker-cn.com
  • 网易:http://hub-mirror.c.163.com
  • 中科大:https://docker.mirrors.ustc.edu.cn
  • 阿里云:https://cr.console.aliyun.com/

拉取镜像:

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

运行成功。
virtualbox

其他版本ros-docker镜像

vnc-ros

docker pull kaixhin/vnc-ros

Ubuntu Core 14.04 + LXDE desktop + Firefox browser + TightVNC server + ROS Jade Desktop Full.

docker-ubuntu-vnc-desktop

拉取: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.

nvidia-ros-vnc

OpenGL,nvidia-docker2 . 这个是Dockerfile,拉取官方镜像通过Dockerfile配置的。

参考

[Install Docker Engine on Ubuntu](https://docs.docker.com/engine/install/ubuntu/)
[harderthan/ros-desktop-full-VNC](https://github.com/harderthan/ros-desktop-full-VNC)
[ROS Docker Hub](https://hub.docker.com/_/ros) :ros官方镜像
[dockerTutorialsGUI](http://wiki.ros.org/docker/Tutorials/GUI):ros官方docker教程

Docker常用命令

docker images:查看所有docker镜像
docker run:从镜像运行容器,-p是端口映射, -d是文件目录映射
docker start、stop:启动、关闭容器
docker attatch:连接到容器shell,一旦退出则整个容器关闭
docker exec:连接到容器,可以链接多个,退出时不会影响容器
docker rm:移除容器,可以后面跟容器名或者容器id

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

canmoumou

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值