Ubuntu与ROS的Docker桌面系统与ROS在线练习课程(在线Linux虚拟机)
ROS在线练习课程正在逐步完善中,目前以ROS官网中文资料制作,可参考:
https://www.shiyanlou.com/courses/854 邀请码 U23ERF8H
安装Ubuntu+ROS对于零Linux基础的小伙伴有些困难,最近发现了一个学习Linux非常好的网站实验楼,链接如下:
****https://www.shiyanlou.com/****
非常好奇如何实现了,于是查阅了一些资料,觉得最好的如下:
2 基于 VNCServer + noVNC 构建 Docker 桌面系统
4.1 https://hub.docker.com/r/dorowu/ubuntu-desktop-lxde-vnc/
4.2 https://hub.docker.com/r/kaixhin/vnc-ros/
4.3 https://hub.docker.com/_/ros/
----~~~~----
ubuntu-desktop-lxde-vnc
relaybot@relaybot-desktop:~$ docker search dorowu NAME DESCRIPTION STARS OFFICIAL AUTOMATED dorowu/ubuntu-desktop-lxde-vnc Ubuntu with openssh-server and NoVNC 114 [OK] dorowu/ubuntu-ssh-ttyjs Ubuntu with openssh server and tty.js enab... 8 [OK] dorowu/apt-repo-server apt-repo-server is a debian repository ser... 6 [OK] dorowu/ubuntu-lxqt-vnc 5 [OK] dorowu/qemu-iso Boot VM by QEMU/KVM with ISO and access it... 4 [OK] dorowu/lightop-ubuntu-trusty-ttyjs 2 [OK] dorowu/ntopng 1 [OK] hardock14/dorowu-docker-ubuntu-vnc-desktop dorowus images with additional software 1 [OK] dorowu/online-document.amd64 0 dorowu/lightop-ubuntu-trusty-lxde 0 [OK] dorowu/qdk2 Create Docker App on QNAP NAS in QPKG format 0 [OK] dorowu/glusterfs-keepalived 0 [OK] dorowu/lightop 0 [OK] dorowu/pekaboo2qnap 0 dorowu/ubuntu_amd64 0 dorowu/nodejs_amd64 0 dorowu/ruby_amd64 0 dorowu/ubuntu_armhf 0 dorowu/qiot-mongodb_amd64 0 dorowu/qdk2-build 0 dorowu/qiot-mongodb_armhf 0 dorowu/dashing 0 dorowu/supershell 0 dorowu/mattermostdocker_db 0 dorowu/qiot-mongo-express_amd64 0 relaybot@relaybot-desktop:~$ docker pull dorowu/ubuntu-desktop-lxde-vnc Using default tag: latest latest: Pulling from dorowu/ubuntu-desktop-lxde-vnc aafe6b5e13de: Pull complete 0a2b43a72660: Pull complete 18bdd1e546d2: Pull complete 8198342c3e05: Pull complete f56970a44fd4: Pull complete da6ac41ac9c8: Pull complete 6f3a5e5efdea: Downloading [============> ] 111.4MB/441.9MB d9dd7dde4295: Download complete ab365adf65d2: Download complete 06b2cd083c64: Download complete c524c4444fb2: Download complete
kaixhin/vnc-ros
relaybot@relaybot-desktop:~$ docker search ros NAME DESCRIPTION STARS OFFICIAL AUTOMATED mono Mono is an open source implementation of M... 233 [OK] ros The Robot Operating System (ROS) is an ope... 111 [OK] aerospike Aerospike – the reliable, high performance... 76 [OK] cirros CirrOS is a Tiny OS that specializes in ru... 38 [OK] neurodebian NeuroDebian provides neuroscience research... 36 [OK] osrf/ros The Robot Operating System (ROS) is an ope... 28 [OK] quantumobject/docker-ros-base ROS-Base container (Robot Operating System) 5 [OK] px4io/px4-dev-ros Container with PX4 tool chain and SITL sim... 3 [OK] px4io/px4-ros-full 2 [OK] virgiletn/docker-ros Set of usefull tools for running ros throu... 1 [OK] personalrobotics/ros-openrave ROS Indigo Base + Personal Robotics OpenRAVE 1 [OK] kaixhin/vnc-ros Ubuntu Core 14.04 + LXDE desktop + Firefox... 1 [OK] shadowrobot/ubuntu-ros-indigo-build-tools DEPRECATED!!! Ubuntu 14.04 ROS Indigo imag... 0 [OK] autharl/ros ROS images 0 [OK] timn/fedora-ros Robot Operating System (ROS) on Fedora 0 [OK] harmish/ros Images of ROS (Robot Operating System) 0 [OK] jacknlliu/tiago-ros A tiago robot ros development environment. 0 [OK] kaixhin/ros Ubuntu Core 14.04 + ROS Jade Base. 0 [OK] pmallozzi/ros Ros 0 [OK] nhzio/ros-weave rancheros weave + iptables 0 [OK] ivs0/b-ros Jenkins builder for ROS 0 [OK] mjenz/ros-datacollection A container based on mjenz/ros-indigo-perc... 0 [OK] jacknlliu/ros ROS desktop-full docker images with Qt C++... 0 [OK] sigproc/ros 0 [OK] diegoferigo/ros Dockerfile for my ROS Kinetic desktop-full... 0 [OK] relaybot@relaybot-desktop:~$ docker pull ros Using default tag: latest latest: Pulling from library/ros bd97b43c27e3: Waiting 6960dc1aba18: Waiting 2b61829b0db5: Waiting 1f88dc826b14: Waiting 73b3859b1e43: Waiting 27d60414a57e: Waiting d93e52c3383b: Waiting 357b9c9b1672: Waiting e7c791091ba5: Waiting a55e61abbe79: Waiting 3bdd92756f16: Waiting a75e7cd84889: Waiting ^C relaybot@relaybot-desktop:~$ docker pull kaixhin/vnc-ros Using default tag: latest latest: Pulling from kaixhin/vnc-ros 16da43b30d89: Pull complete 1840843dafed: Pull complete 91246eb75b7d: Pull complete 7faa681b41d7: Pull complete 97b84c64d426: Pull complete f6f12794daea: Downloading [==========> ] 44.32MB/204.3MB e7841d035bd3: Download complete 440e2abbd651: Download complete 09e4cb06ebb5: Download complete 067189fe4086: Download complete 52c18283b71e: Download complete 49495db30f44: Download complete 32e45df178f9: Downloading [=> ] 20.52MB/629.6MB a138ae9132ab: Waiting 15247c05ac4a: Waiting
----~~~~----
当镜像完全下载后可以进行查看,如下:
relaybot@relaybot-desktop:~$ docker images -a REPOSITORY TAG IMAGE ID CREATED SIZE dorowu/ubuntu-desktop-lxde-vnc latest ec8a8836ea5f 6 weeks ago 1.23GB kaixhin/vnc-ros latest 0948d9f58857 5 months ago 2.71GB
----ubuntu-desktop-lxde-vnc使用说明----
relaybot@relaybot-desktop:~$ docker run -it --rm -p 6080:80 dorowu/ubuntu-desktop-lxde-vnc /usr/lib/python2.7/dist-packages/supervisor/options.py:297: UserWarning: Supervisord is running as root and it is searching for its configuration file in default locations (including its current working directory); you probably want to specify a "-c" argument specifying an absolute path to a configuration file for improved security. 'Supervisord is running as root and it is searching ' 2017-06-20 23:01:40,847 CRIT Supervisor running as root (no user in config file) 2017-06-20 23:01:40,847 WARN Included extra file "/etc/supervisor/conf.d/supervisord.conf" during parsing 2017-06-20 23:01:40,869 INFO RPC interface 'supervisor' initialized 2017-06-20 23:01:40,870 CRIT Server 'unix_http_server' running without any HTTP authentication checking 2017-06-20 23:01:40,870 INFO supervisord started with pid 19 2017-06-20 23:01:41,873 INFO spawned: 'xvfb' with pid 26 2017-06-20 23:01:41,876 INFO spawned: 'pcmanfm' with pid 27 2017-06-20 23:01:41,879 INFO spawned: 'lxpanel' with pid 28 2017-06-20 23:01:41,882 INFO spawned: 'lxsession' with pid 29 2017-06-20 23:01:41,884 INFO spawned: 'x11vnc' with pid 30 2017-06-20 23:01:41,887 INFO spawned: 'novnc' with pid 31 2017-06-20 23:01:41,971 INFO exited: lxsession (exit status 1; not expected) 2017-06-20 23:01:41,994 INFO exited: lxpanel (exit status 1; not expected) 2017-06-20 23:01:42,951 INFO success: xvfb entered RUNNING state, process has stayed up for > than 1 seconds (startsecs) 2017-06-20 23:01:42,951 INFO success: pcmanfm entered RUNNING state, process has stayed up for > than 1 seconds (startsecs) 2017-06-20 23:01:42,951 INFO success: x11vnc entered RUNNING state, process has stayed up for > than 1 seconds (startsecs) 2017-06-20 23:01:42,951 INFO success: novnc entered RUNNING state, process has stayed up for > than 1 seconds (startsecs) 2017-06-20 23:01:42,973 INFO spawned: 'lxsession' with pid 52 2017-06-20 23:01:43,055 INFO spawned: 'lxpanel' with pid 54 2017-06-20 23:01:44,106 INFO success: lxpanel entered RUNNING state, process has stayed up for > than 1 seconds (startsecs) 2017-06-20 23:01:44,106 INFO success: lxsession entered RUNNING state, process has stayed up for > than 1 seconds (startsecs) 2017-06-20 23:01:58,177 INFO waiting for novnc, pcmanfm, lxpanel, xvfb, x11vnc, lxsession to die 2017-06-20 23:01:58,463 INFO stopped: novnc (terminated by SIGQUIT (core dumped)) 2017-06-20 23:01:58,465 INFO stopped: x11vnc (exit status 2) 2017-06-20 23:01:58,669 INFO stopped: lxsession (terminated by SIGABRT (core dumped)) 2017-06-20 23:01:59,871 INFO stopped: lxpanel (terminated by SIGQUIT (core dumped)) 2017-06-20 23:02:00,056 INFO stopped: pcmanfm (terminated by SIGQUIT (core dumped)) 2017-06-20 23:02:00,060 INFO stopped: xvfb (exit status 1) 2017-06-20 23:02:00,076 CRIT Supervisor running as root (no user in config file) 2017-06-20 23:02:00,076 WARN Included extra file "/etc/supervisor/conf.d/supervisord.conf" during parsing 2017-06-20 23:02:00,077 INFO RPC interface 'supervisor' initialized 2017-06-20 23:02:00,077 CRIT Server 'unix_http_server' running without any HTTP authentication checking 2017-06-20 23:02:00,077 INFO supervisord started with pid 19 2017-06-20 23:02:00,867 INFO spawned: 'xvfb' with pid 75 2017-06-20 23:02:00,870 INFO spawned: 'pcmanfm' with pid 76 2017-06-20 23:02:00,873 INFO spawned: 'lxpanel' with pid 77 2017-06-20 23:02:00,878 INFO spawned: 'lxsession' with pid 78 2017-06-20 23:02:00,881 INFO spawned: 'x11vnc' with pid 79 2017-06-20 23:02:00,884 INFO spawned: 'novnc' with pid 80 2017-06-20 23:02:01,913 INFO success: xvfb entered RUNNING state, process has stayed up for > than 1 seconds (startsecs) 2017-06-20 23:02:01,914 INFO success: pcmanfm entered RUNNING state, process has stayed up for > than 1 seconds (startsecs) 2017-06-20 23:02:01,914 INFO success: lxpanel entered RUNNING state, process has stayed up for > than 1 seconds (startsecs) 2017-06-20 23:02:01,914 INFO success: lxsession entered RUNNING state, process has stayed up for > than 1 seconds (startsecs) 2017-06-20 23:02:01,914 INFO success: x11vnc entered RUNNING state, process has stayed up for > than 1 seconds (startsecs) 2017-06-20 23:02:01,914 INFO success: novnc entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
Ubuntu的VNC桌面
Docker图像提供HTML5 VNC界面访问Ubuntu 16.04 LXDE桌面环境。
快速开始
运行码头图像并打开端口 6080
docker run -it --rm -p 6080:80 dorowu/ubuntu-desktop-lxde-vnc
<img src =“https://raw.github.com/fcwu/docker-ubuntu-vnc-desktop/master/screenshots/lxde.png?v1”width = 700 />
连接VNC Viewer并通过VNC密码进行保护
将VNC服务端口5900转发到主机
docker run -it --rm -p 6080:80 -p 5900:5900 dorowu/ubuntu-desktop-lxde-vnc
现在,打开vnc查看器并连接到端口5900.如果要通过密码保护vnc服务,请设置环境变量VNC_PASSWORD
,例如
docker run -it --rm -p 6080:80 -p 5900:5900 -e VNC_PASSWORD=mypassword dorowu/ubuntu-desktop-lxde-vnc
提示将在浏览器或vnc查看器中询问密码。
故障排除
- boot2docker连接问题,https://github.com/fcwu/docker-ubuntu-vnc-desktop/issues/2
----补充局域网(外网访问)----
获取IP信息:
两种方法:
1 $ docker exec ec8a8836ea5f ifconfig eth0 | grep "inet addr:"
注意,ec8a8836ea5f为ID,依据实际情况进行调整。
relaybot@relaybot-desktop:~$ docker exec fdfc8eda1 ifconfig eth0 | grep "inet addr:" inet addr:172.17.0.2 Bcast:0.0.0.0 Mask:255.255.0.0 relaybot@relaybot-desktop:~$ ifconfig -a docker0 Link encap:Ethernet HWaddr 02:42:16:25:5a:77 inet addr:172.17.0.1 Bcast:0.0.0.0 Mask:255.255.0.0 inet6 addr: fe80::42:16ff:fe25:5a77/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:21801 errors:0 dropped:0 overruns:0 frame:0 TX packets:31279 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:6093261 (6.0 MB) TX bytes:30175014 (30.1 MB) enp3s0 Link encap:Ethernet HWaddr 20:6a:8a:03:40:6b UP BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) Interrupt:16 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:23603 errors:0 dropped:0 overruns:0 frame:0 TX packets:23603 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1 RX bytes:6543144 (6.5 MB) TX bytes:6543144 (6.5 MB) vethd735054 Link encap:Ethernet HWaddr f6:0a:d2:7f:58:70 inet6 addr: fe80::f40a:d2ff:fe7f:5870/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:21801 errors:0 dropped:0 overruns:0 frame:0 TX packets:31319 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:6398475 (6.3 MB) TX bytes:30180429 (30.1 MB) wlp5s0 Link encap:Ethernet HWaddr 70:f1:a1:ca:75:52 inet addr:192.168.1.101 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fe80::3c12:a5b2:8cf9:246/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:1167103 errors:0 dropped:0 overruns:0 frame:0 TX packets:965289 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:1572330174 (1.5 GB) TX bytes:97246007 (97.2 MB)
----
2 在novnc网页中启动命令行ifconfig -a
----vnc-ros----
参考资料:
----https://hub.docker.com/r/kaixhin/vnc-ros/----
VNC-ROS
Ubuntu Core 14.04 + LXDE桌面+ Firefox浏览器+ TightVNC服务器+ ROSJade桌面版。默认使用尾部运行作为守护进程。
建立
包括密码txt与TightVNC的密码(默认情况下这是“密码”)。这个长度必须至少为8个字符,如果更长,则会被截断。
用法
应该更改默认密码。这样做启动一个容器然后运行docker exec <id> bash -c "echo -e '<password>\n<password>\nn' | vncpasswd"
。
用于自动映射VNC端口使用docker run -dP kaixhin/vnc-ros
并docker port <id>
检索端口。
用于指定端口手动使用docker run -d -p <port>:5901 kaixhin/vnc-ros
。
外壳可以照常使用docker run -it kaixhin/vnc-ros bash
。
引文
如果您发现这在研究中有用,请考虑引用这项工作。
----https://hub.docker.com/_/ros/----
支持的标签和相应的Dockerfile
链接
indigo-ros-core
(ros / indigo / indigo-ros-core / Dockerfile)indigo-ros-base
,indigo
(ros / indigo / indigo-ros-base / Dockerfile)indigo-robot
(ros / indigo / indigo-robot / Dockerfile)indigo-perception
(ros / indigo / indigo-perception / Dockerfile)jade-ros-core
(ros / jade / jade-ros-core / Dockerfile)jade-ros-base
,jade
(ros / jade / jade-ros-base / Dockerfile)jade-robot
(ros / jade / jade-robot / Dockerfile)jade-perception
(ros / jade / jade-perception / Dockerfile)kinetic-ros-core
(ros / kinetic / kinetic-ros-core / Dockerfile)kinetic-ros-base
,kinetic
,latest
(ROS /动力学/动能-ROS基/ Dockerfile)kinetic-robot
(ros / kinetic / kinetic-robot / Dockerfile)kinetic-perception
(ros / kinetic / kinetic-perception / Dockerfile)lunar-ros-core
(ros / lunar / lunar-ros-core / Dockerfile)lunar-ros-base
,lunar
(ros / lunar / lunar-ros-base / Dockerfile)lunar-robot
(ros / lunar / lunar-robot / Dockerfile)lunar-perception
(ros / lunar / lunar-perception / Dockerfile)
快速参考
在哪里获得帮助:
Docker社区论坛,Docker社区松弛或堆栈溢出维护者:
开源机器人基金会已发布的图像工件详细信息:
repo-info repo的repos/ros/
目录(历史)
(图像元数据,传输大小等)这个描述的来源:
docs repo的ros/
目录(history)支持的Docker版本:
最新版本(尽力而为1.6)
什么是ROS?
机器人操作系统(ROS)是一组可帮助您构建机器人应用程序的软件库和工具。从驱动程序到最先进的算法,以及强大的开发人员工具,ROS具有您下一个机器人项目所需的功能。这一切都是开源的。
如何使用此图像
Dockerfile
在您的ROS应用程序项目中创建一个
FROM ros:indigo
# place here your application's setup specifics
CMD [ "roslaunch", "my-ros-app my-ros-app.launch" ]
然后,您可以构建并运行Docker映像:
$ docker build -t my-ros-app .
$ docker run -it --rm --name my-running-app my-ros-app
部署用例
ROS的这种停泊图像旨在提供一个简化和一致的平台来构建和部署分布式机器人应用程序。由官方Ubuntu镜像和ROS官方Debian软件包组成,它包括最近支持的快速访问和下载版本。这为机器人研究和工业界提供了一个简单的方法来开发,重用和运送软件,用于自主操作和任务规划,控制动态,本地化和映射,群体行为以及一般系统集成。
开发具有前所未有的算法的复杂系统仍然具有挑战性,因为机器人软件的重复性和可重复性可能会在创新竞争中脱颖而出。随着编码,调优和部署跨越许多工程学科的多个软件组件的难度增加,更加协作的方法变得具有吸引力。然而,在多个机器人和平台上共享和维护软件集合的技术难题比许多较小的实验室和企业承担的时间和精力要长一些。
随着软件容器的进步和标准化,机器人专家被准备获得大量改进的开发工具来构建和发布软件。为了减轻采用新实践的不断增长的痛苦和技术挑战,我们专注于为ROS提供这些新技术的官方资源。
部署建议
可用的标签包括支持的发行版,以及基于最常见的元包依赖关系的层次标签,旨在具有小的占位面积和简单的配置:
ros-core
:barebone ROS安装ros-base
:基本工具和库(也标记为具有LTS版本的发行版名称latest
)robot
:机器人的基本安装perception
:感知任务的基本安装
共同元套餐,如休息desktop
,并desktop-full
使用自动生成的回购协议下OSRF的泊坞枢纽轮廓托管在这里。这些元数据包包括图形依赖关系,并挂接许多其他大型软件包,如X11,X服务器等。因此,为了保持官方映像的精简和安全性,桌面软件包仅由OSRF的配置文件托管。
卷
ROS使用~/.ros/
存储日志的目录和调试信息。如果希望将这些文件保留在生成它们的容器的生命周期之外,则该~/.ros/
文件夹可以挂载到主机上的外部卷上,或者派生的映像可以指定由Docker引擎管理的卷。默认情况下,容器作为root
用户运行,因此/root/.ros/
将是这些文件的完整路径。
例如,如果希望使用.ros
已经驻留在其本地主目录中的自己的文件夹,使用用户名ubuntu
,则可以使用附加的卷参数简单地启动该容器:
$ docker run -v "/home/ubuntu/.ros/:/root/.ros/" ros
设备
某些应用程序可能需要设备访问以从连接的摄像机获取图像,控制人机接口设备的输入或用于硬件加速的GPUS。这可以使用--device
运行参数来将设备安装在容器内,从而提供硬件访问中的进程。
网络
ROS运行时“图”是使用ROS通信基础设施松散耦合的进程对等网络(可能分布在机器之间)。ROS实现了多种不同的通信方式,包括通过服务进行的同步RPC式通信,主题数据的异步流传输以及参数服务器上数据的存储。为了遵守每个容器的一个进程的最佳做法,Docker网络可以用于将几个正在运行的ROS进程串联在一起。有关ROS NetworkSetup wik文章的更多详细信息,或请参阅下面的部署示例。
部署示例
如果我们希望我们的所有ROS节点彼此轻松交谈,我们可以使用虚拟网络连接单独的容器。在这短短的例子中,我们将创建一个虚拟网络,旋转了一个新的容器中运行roscore
标榜master
的新网络服务,然后生成一个信息发布者和预订过程在同一网络上的服务。
构建图像
构建包含使用此ROS教程的ROS映像
Dockerfile:
FROM ros:indigo-ros-base
# install ros tutorials packages
RUN apt-get update && apt-get install -y
ros-indigo-ros-tutorials \
ros-indigo-common-tutorials \
&& rm -rf /var/lib/apt/lists/
然后从同一目录中构建图像:
$ docker build --tag ros:ros-tutorials .
创建网络
要创建一个新的网络
foo
,我们使用network命令:
docker network create foo
现在我们有一个网络,我们可以创建服务。服务在网络上广告位置,可以方便地解析服务特定容器的位置/地址。我们将使用这个确保我们的ROS节点可以找到并连接到我们的ROS
master
。
运行服务
为ROS主机创建一个容器并通告它的服务:
$ docker run -it --rm \
--net foo \
--name master \
ros:ros-tutorials \
roscore
现在,您可以看到主机正在运行,并准备好管理我们的其他ROS节点。要添加我们的
talker
节点,我们需要将相关环境变量指向主服务:
$ docker run -it --rm \
--net foo \
--name talker \
--env ROS_HOSTNAME=talker \
--env ROS_MASTER_URI=http://master:11311 \
ros:ros-tutorials \
rosrun roscpp_tutorials talker
然后在另一个终端中,
listener
类似地运行节点:
$ docker run -it --rm \
--net foo \
--name listener \
--env ROS_HOSTNAME=listener \
--env ROS_MASTER_URI=http://master:11311 \
ros:ros-tutorials \
rosrun roscpp_tutorials listener
好的!你应该看到
listener
现在正在回应每个消息的talker
广播。然后,您可以列出容器并查看如下内容:
$ docker service ls
SERVICE ID NAME NETWORK CONTAINER
67ce73355e67 listener foo a62019123321
917ee622d295 master foo f6ab9155fdbe
7f5a4748fb8d talker foo e0da2ee7570a
并为服务:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a62019123321 ros:ros-tutorials "/ros_entrypoint.sh About a minute ago Up About a minute 11311/tcp listener
e0da2ee7570a ros:ros-tutorials "/ros_entrypoint.sh About a minute ago Up About a minute 11311/tcp talker
f6ab9155fdbe ros:ros-tutorials "/ros_entrypoint.sh About a minute ago Up About a minute 11311/tcp master
内省
好的,现在我们看到两个节点正在沟通,让我们进入一个容器,做一些内省,究竟是什么主题:
$ docker exec -it master bash
$ source /ros_entrypoint.sh
如果我们然后使用
rostopic
列出发布的消息主题,我们应该看到如下:
$ rostopic list
/chatter
/rosout
/rosout_agg
拆除
为了拆除我们所做的结构,我们只需要停止容器和服务。我们可以使用
Ctrl^C
我们启动容器的位置停止并移除容器,或者使用我们给它们的名称的stop命令:
$ docker stop master talker listener
$ docker rm master talker listener
撰写
现在,您已经对手动引导分布式ROS示例感到欣慰,我们可以尝试使用它自动化docker-compose
。
首先创建一个名为的文件夹
rostutorials
,并将我们之前使用的Dockerfile移动到此目录中。然后创建一个docker-compose.yml
在同一目录中命名的yaml文件,然后粘贴以下内容:
version: '2'
services:
master:
build: .
container_name: master
command:
- roscore
talker:
build: .
container_name: talker
environment:
- "ROS_HOSTNAME=talker"
- "ROS_MASTER_URI=http://master:11311"
command: rosrun roscpp_tutorials talker
listener:
build: .
container_name: listener
environment:
- "ROS_HOSTNAME=listener"
- "ROS_MASTER_URI=http://master:11311"
command: rosrun roscpp_tutorials listener
现在从同一个文件夹中,使用docker-copose启动我们的ROS节点,并指定它们在自己的网络上共存:
$ docker-compose up -d
请注意,
rostutorials_default
现在已经创建了一个名为的新网络,您可以进一步检查:
$ docker network inspect rostutorials_default
我们可以监视每个服务的记录输出,如监听器节点,如下所示:
$ docker-compose logs listener
最后,我们可以使用docker-copose从同一个目录中停止并删除所有相关的容器:
$ docker-compose stop
$ docker-compose rm
注意:自动生成的网络
rostutorials_default
将会停留在docker引擎的整个生命周期中,或者直到您使用它来显式删除它docker network rm
。
更多资源
ROS.org:主ROS网站
维基:查找教程并了解更多
ROS答案:提问。获取答案
博客:保持最新的
OSRF:开源机器人基金会
执照
ROS的核心是根据标准的三条BSD许可证进行许可。这是一个非常宽松的开放许可证,允许在商业和封闭源产品中重复使用。您可以从Opensource.org BSD 3-Clause页面和维基百科的BSD许可证条目中找到有关BSD许可证的更多信息。
虽然ROS的核心部分根据BSD许可证获得许可,但其他许可证通常用于社区软件包,例如Apache 2.0许可证,GPL许可证,MIT许可证,甚至专有许可证。ROS生态系统中的每个包都需要指定许可证,以便您能够快速识别包装是否符合您的许可需求。
----https://hub.docker.com/r/osrf/ros/----
----ROS在线学习---
The ROS Autonomous Vehicles 101 and ROS-Industrial 101 courses are now available. Ready to built the future today? Keep advancing your ROS!
Happy Learning!
The Construct team
|
|
----End----
Ubuntu与ROS的Docker桌面系统与ROS在线练习课程(在线Linux虚拟机)的更多相关文章
- Docker练习例子:基于 VNCServer + noVNC 构建 Docker 桌面系统
0. 安装docker 这一步略,网上有好多教程,一般出现装不上的原因,也就是网速问题了,这个我也很难帮你. 1. 下载指定的镜像images docker pull dorowu/ubuntu-de ...
- 改变ubuntu终端显示语言(桌面系统是中文,终端提示是英文)
打开终端: $ vi .bashrc 最后添加 if [ "$TERM"="linux" ] ;then export LANGUAGE=en_US expor ...
- Linux 桌面玩家指南:04. Linux 桌面系统字体配置要略
特别说明:要在我的随笔后写评论的小伙伴们请注意了,我的博客开启了 MathJax 数学公式支持,MathJax 使用$标记数学公式的开始和结束.如果某条评论中出现了两个$,MathJax 会将两个$之 ...
- linux桌面系统开启windows远程访问
本文基于centos系统,且默认你的桌面系统已经安装完成 1.在linux中安装如下软件 sudo rpm -Uvh https://dl.fedoraproject.org/pub/epel/epe ...
- Ubuntu 16.04 使用docker资料汇总与应用docker安装caffe并使用Classifier(ros kinetic+usb_cam+caffe)
Docker是开源的应用容器引擎.若想简单了解一下,可以参考百度百科词条Docker.好像只支持64位系统. Docker官网:https://www.docker.com/ Docker - 从入门 ...
- 使用 Docker/LXC 迅速启动一个桌面系统
使用 Docker/LXC 迅速启动一个桌面系统 Docker 是 dotCloud 最近几个月刚宣布的开源引擎,旨在提供一种应用程序的自动化部署解决方案,简单的说就是,在 Linux 系统上迅速创建 ...
- Ubuntu 16.04 LTS 64位系统 安装Docker
本文开发环境为Ubuntu 16.04 LTS 64位系统,通过apt的docker官方源安装最新的Docker CE(Community Edition),即Docker社区版,是开发人员和小型团队 ...
- Redhat/Ubuntu/Windows下安装Docker
Redhat/Ubuntu/Windows下安装Docker 什么是Docker Docker是Docker.inc公司开源的一个基于LXC技术之上构建的Container容器引擎,基于Go语言并遵从 ...
- 【转】Ubuntu做日常开发电脑的系统是一种怎样的体验
[原文]https://www.toutiao.com/i6594291159911105031/ Ubuntu 我现在已经基本不开windows了.学习娱乐开发基本都在Ubuntu 首先你要接受的是 ...
随机推荐
- linux字典生成工具crunch
安装 tar zxvf crunch-3.6.tgz cd crunch-3.6 gcc -Wall -lm -pthread -std=c99 -m64 -D_LARGEFILE_SOURCE -D ...
- yum的使用
Yum官网 Yum的缓存 Yum仓库 Yum命令 Yum插件 yum的缓存 通过缓存可以提升我们环境的搭建效率,直接把原来缓存好的安装包数据放到新环境,省去了几个G的下载,甚至,有些时候客户现场不能联 ...
- Permission denied: mod_fcgid
[Tue Jun 16 13:29:08 2015] [warn] (13)Permission denied: mod_fcgid: spawn process /var/www/cgi-bin/g ...
- Vue2.0 + ElementUI的+ PageHelper实现的表格分页
参考博客:http://blog.csdn.net/u012907049/article/details/70237457 借鉴1.controller层编写 2.vue中,axios的写法(总页数等 ...
- 【链接】Eclipse的Debug调试技巧
Eclipse的Debug调试技巧大全 https://mp.weixin.qq.com/s/bORg9YxJiby2WenYRrXY-w 使用Eclipse调试Java程序的10个技巧 https: ...
- Dancing Links DLX
Dancing Links DLX Dancing Links 用来解精准覆盖问题. 精准覆盖问题有两种版本. 精准覆盖 : 给一个01矩阵,如何选出若干行,使得每列都有且仅有一个1. 可以求最少行数 ...
- Testng中注释简介
1. @Before和@After 注释 这两个就比较多,一般用于在测试构件上.关于测试构件以后详细介绍,测试构件一般有测试之前的操作和测试运行之后的清除数据的操作. Before分类有@Before ...
- SQL SERVER连接池
Connection Pool 是什么呢 ?每当程序需要读写数据库的时候.Connection.Open()会使用ConnectionString连接到数据库,数据库会为程序建立 一个连接,并且保持打 ...
- Kotlin Android Studio 环境搭建
Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,被称之为 Android 世界的Swift,由 JetBrains 设计开发并开源. Kotlin 可以编译成Java字节码,也可以编 ...
- centos7 rabbitmq 安装
http://www.rabbitmq.com/install-rpm.html Overview rabbitmq-server is included in Fedora. However, th ...