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

使用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

要在Docker容器中安装ROS 2,可以采用以下几种方法,具体取决于你的需求和环境配置。 ### 方法一:使用官方ROS镜像 ROS官方提供了针对不同ROS 2版本的Docker镜像,这些镜像已经预装了ROS 2环境,可以直接使用。例如,如果你想要安装ROS 2 Foxy Fitzpatrick版本,可以使用如下命令拉取镜像: ```bash docker pull ros:foxy ``` 之后,你可以通过运行以下命令来启动一个交互式的容器实例: ```bash docker run -it --rm ros:foxy bash ``` 这条命令会启动一个新的容器,并且进入容器内部的bash shell环境中,你就可以在这个环境中安装额外的软件包或者进行开发工作了[^2]。 ### 方法二:自定义Dockerfile构建ROS 2环境 如果官方提供的镜像不能满足你的需求,你可以通过编写自己的Dockerfile来自定义构建ROS 2环境。这通常涉及到以下几个步骤: - 安装基础操作系统镜像。 - 安装必要的依赖项。 - 添加ROS仓库。 - 安装ROS 2核心组件。 - 设置环境变量。 下面是一个简单的Dockerfile示例,用于构建基于Ubuntu 20.04的ROS 2 Foxy Fitzpatrick环境: ```dockerfile FROM ubuntu:20.04 # 安装必要的依赖 RUN apt-get update &amp;&amp; \ apt-get install -y curl gnupg2 lsb-release # 添加ROS仓库 RUN curl -sSL &#39;https://raw.githubusercontent.com/ros/rosdistro/master/ros.key&#39; | apt-key add - &amp;&amp; \ echo &quot;deb [arch=amd64,arm64] http://packages.ros.org/ros2/ubuntu $(lsb_release -cs) main&quot; &gt; /etc/apt/sources.list.d/ros2-latest.list # 更新apt缓存并安装ROS 2 RUN apt-get update &amp;&amp; \ apt-get install -y ros-foxy-desktop # 初始化ROS环境 ENV ROS_DISTRO=foxy ENV ROS_VERSION=2 ENV PATH=&quot;/opt/ros/${ROS_DISTRO}/bin:${PATH}&quot; ``` 构建这个Dockerfile后,你将得到一个包含ROS 2 Foxy Fitzpatrick的Docker镜像,可以根据需要进一步定制或扩展[^2]。 ### 方法三:使用VNC镜像 对于需要图形界面的应用场景,可以考虑使用预先打包好的VNC镜像,如`docker-ubuntu-vnc-desktop`项目。这类镜像不仅包含了ROS 2环境,还集成了VNC服务,允许通过网络访问图形界面。这种方法适合于需要图形用户界面的开发和测试工作。 ### 注意事项 - 在使用Docker安装ROS 2之前,请确保已经正确安装Docker引擎,并且对Docker的基本概念有所了解。 - 对于特定版本的ROS 2,需要确认对应的Ubuntu版本是否兼容,以避免出现兼容性问题。 - 如果计划在Docker容器中运行GUI应用程序,除了安装ROS 2之外,还需要处理X11转发或使用VNC等方式实现图形界面的显示。 通过以上方法之一,你应该能够在Docker容器中成功安装ROS 2,并开始进行相关的开发和测试工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

canmoumou

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

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

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

打赏作者

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

抵扣说明:

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

余额充值