ROS Docker 支持

2023-11-08

可供支持的DockerFile文件

Quick reference

什么是 ROS?

ROS是一套对机器人提供支持的软件和工具集合. From drivers to state-of-the-art algorithms, and with powerful developer tools, ROS has what you need for your next robotics project. And it's all open source.

wikipedia.org/wiki/Robot_Operating_System

logo

如何使用image

通过使用DockerFile的方式

创建Dockerfile文件

$ mkdir bulid && cd build   
$ touch Dockerfile

文章开头给出的链接地址提供了更多DockerFile,将以下内容填入Dockerfile

镜像为ros:indigo

FROM ros:indigo
# place here your application's setup specifics
CMD [ "roslaunch", "my-ros-app my-ros-app.launch" ]

build然后run这个文件

$ docker build -t my-ros-app .
$ docker run -it --rm --name my-running-app my-ros-app

背景

docker化的ROS镜像旨在提供标准稳定的ROS平台来开展你的机器人项目。official Ubuntu image 和 ROS's 官方 Debian 包,它包括最新的版本,用于快速访问和下载。这为研究和工业领域的机器人学家提供了一种开发、重用和发布用于自主行动和任务规划、控制动力学、定位和映射、群体行为以及一般系统集成的软件的简便方法。

利用最新发布的算法的尖端实现来开发这样复杂的系统仍然具有挑战性,因为机器人软件的可重复性和可复制性可能会在创新的竞争中被淘汰。随着在跨许多工程学科的多个软件组件的编码、调优和部署方面的困难增加,一种更具协作性的方法变得有吸引力。然而,在多个机器人和平台上共享和维护一个软件集合的技术困难已经超过了许多小型实验室和企业所能承受的时间和精力。

随着软件容器的进步和标准化,机器人学家准备获得一系列改进的开发工具,用于构建和发布软件。为了帮助减轻采用新实践带来的日益增长的痛苦和技术挑战,我们将重点放在为使用这些新技术的ROS提供官方资源上。

部署建议

可用的标记包括所支持的发行版,以及基于最常见的源包依赖项的层次结构标记,设计用于具有较小体积和简单的配置:

  • ros-core: barebone ROS install(裸ROS系统)
  • ros-base: basic tools and libraries (also tagged with distro name with LTS version as latest)(包含工具和库集的ROS系统)
  • robot: basic install for robots(对机器人的基本支持版本)
  • perception: basic install for perception tasks(对感知模块的基本支持版本)

其他常见的源包,如desktop和desktop full,都托管在OSRF的Docker Hub配置文件下的自动构建repo上,here

这些源软件包包括图形依赖项,并挂接大量其他大型软件包,如X11、X服务器等。因此,为了保持官方图像的简洁和安全,桌面软件包仅由OSRF的配置文件托管

Volumes 挂载卷

ROS使用ROS ~/.ros/目录存放日志文件和debugging信息。如果你希望容器死亡后仍然保存ROS文件,  ~/.ros/ 目录可以作为额外的挂载项存放与本地,在run镜像时将目录挂载. 默认使用root账户执行该命令, 所以/root/.ros/ 将会被用于存放ROS相关的文件

举例来说,如果你的执行用户并非root,可以使用当前执行用户家目录下的.ros目录作为挂载目录,比如ubuntu用户,在run镜像时使用卷挂载

$ docker run -v "/home/ubuntu/.ros/:/root/.ros/" ros

Devices 硬件设备支持

有些工程会需要用到硬件设备如摄像头,来自操作员的控制输入信息, 或者GPUS硬件加速. 可以通过 --device 参数来挂载设备到容器,提供硬件访问内部进程

Networks 网络支持

ROS的时间模式是点对点的,

The ROS runtime "graph" is a peer-to-peer network of processes (potentially distributed across machines) that are loosely coupled using the ROS communication infrastructure.ROS支持多种形式的交流方式, 包括服务间同步RPC-style交流,话题间的异步数据流传输, 参数服务器上的存储. To abide by the best practice of one process per container, Docker 网络可以支持多ROS节点间交流。For further details about ROS NetworkSetup wik article,or see the Deployment example below.

Deployment example 部署案例

如果想要ROS节点间可通信,我们要使用虚拟网络(virtual network)来连接点独立的容器,在下面的例子中我们要创建虚拟网络,创建一个容器来运行roscore主服务,然后在同一个虚拟网中spawn一对发布者(message publisher)和订阅( subscriber process)

Build image

使用Dockerfile来运行

$ vim 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/

构建dockerfile

$ docker build --tag ros:ros-tutorials .

创建网络

创建docker网络,使用以下命令

docker network create foo

现在我们有了网络,我们可以创建服务。服务在网络上公布该位置,使解析特定于服务的容器的位置/地址变得容易。我们将使用这个确保我们的ROS节点能够找到并连接到我们的ROS主节点。

Run services

创建ROS master 执行以下命令

$ 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

然后是另一个容器,订阅者节点:

$ 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

Ok,现在主节点、订阅者、发布者已经启动了,你可以通过以下命令查看

$ 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 list
/chatter
/rosout
/rosout_agg

关闭容器

为了关闭我们建造的容器,我们只需要停止容器和服务。我们可以使用Ctrl^C(在启动容器的位置)或使用stop命令(具有给定的名称)停止并移除容器:

$ docker stop master talker listener
$ docker rm master talker listener

Compose 组合

 

现在我们已经了解如何单独起节点,现在我们把它们整合到一起,使用 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

Finally, we can stop and remove all the relevant containers using docker-copose from the same directory:

最后,我们可以使用docker copose停止并删除所有相关容器:

$ docker-compose stop
$ docker-compose rm

Note: 

自动生成的网络,rostutorials_default,将在docker引擎的整个生命周期内持续存在,或者直到手动删除它为止,使用docker network rm.

More Resources

ROS.org: Main ROS website
Wiki: Find tutorials and learn more
ROS Answers: Ask questions. Get answers
Blog: Stay up-to-date
OSRF: Open Source Robotics Foundation

License

The core of ROS is licensed under the standard three-clause BSD license. This is a very permissive open license that allows for reuse in commercial and closed source products. You can find more about the BSD license from the Opensource.org BSD 3-Clause page and Wikipedia's BSD Licenses entry.

While the core parts of ROS are licensed under the BSD license, other licenses are commonly used in the community packages, such as the Apache 2.0 license, the GPL license, the MIT license, and even proprietary licenses. Each package in the ROS ecosystem is required to specify a license, so that it is easy for you to quickly identify if a package will meet your licensing needs.

As with all Docker images, these likely also contain other software which may be under other licenses (such as Bash, etc from the base distribution, along with any direct or indirect dependencies of the primary software being contained).

Some additional license information which was able to be auto-detected might be found in the repo-info repository's ros/ directory.

As for any pre-built image usage, it is the image user's responsibility to ensure that any use of this image complies with any relevant licenses for all software contained within.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ROS Docker 支持 的相关文章

  • 思岚RPLIDAR A2 在ubuntu 16.04上的测试

    1 下载雷达ROS包 首先在github上下载rplidar的ros包 下载指令为 默认安装了git git clone https github com Slamtec rplidar ros git 在ubuntu上创建工作空间 并将该
  • ros+arduino学习(六):重构ros_lib库文件

    前言 ros lib是arduino程序和ros连接的库文件 通过使用这些库文件和相关函数 可以在arduino上通过编程使得arduino硬件开ros节点程序 这样arduino硬件就可以与上位机通过话题进行通讯 从而把arduino从传
  • Install Harbor 2.8 on Centos

    目录 Node System Software Lists Architecture Overview of Harbor Install Harbor 2 8 Harbor Installation Prerequisites Insta
  • Ubuntu下vscode配置ROS环境

    摘要 最近准备放弃用clion开发ROS使用更主流的vscode 整理一下在ubuntu18 04下的VSCode安装和ROS环境配置流程 安装 方法一 软件商店安装 个人还是推荐使用ubuntu软件下载vscode 简单不容易出错 方法二
  • Ubuntu安装ROS

    原文链接 https blog csdn net qq 44830040 article details 106049992 这也是我在ubuntu里面安装ROS的第N次 以前每次安装过程都忘记总结了 导致每次安装ROS都浪费了很多的时间用
  • Ubuntu16.04及ROS Kinetic环境下安装使用RealSense SR300

    Ubuntu16 04及ROS Kinetic环境下安装使用RealSense SR300 1 准备条件 需要安装Ubuntu16 04及ROS Kinetic 2 安装驱动 安装realsense的驱动流程可以根据Github上的官方推荐
  • ubuntu18.04命令安装ros2

    ROS2官方文档 本教程为apt get命令安装方式 官网教程有点问题 借鉴一下大佬的安装方式 文章目录 1 安装ROS2 1 1 安装秘钥相关指令 1 2 授权秘钥 1 3 添加ROS2软件源 1 4 安装 2 设置环境 可选但是推荐 2
  • ROS1 ROS2学习

    ROS1 ROS2学习 安装 ROS ROS1 ROS2 命令行界面 ROS2 功能包相关指令 ROS 命令行工具 ROS1 CLI工具 ROS2 CLI工具 ROS 通信核心概念 节点 Node 节点相关的CLI 话题 Topic 编写发
  • roslaunch error: ERROR: cannot launch node of type

    今天在因为github上有个之前的包更新了 重新git clone后出现了一个问题 ERROR cannot launch node of type crazyflie demo controller py can t locate nod
  • 如何将从 rospy.Subscriber 数据获得的数据输入到变量中?

    我写了一个示例订阅者 我想将从 rospy Subscriber 获得的数据提供给另一个变量 以便稍后在程序中使用它进行处理 目前 我可以看到订阅者正在运行 因为当我使用 rospy loginfo 函数时 我可以看到打印的订阅值 虽然我不
  • 进入 docker 容器,exec 丢失 PATH 环境变量

    这是我的 Dockerfile FROM ros kinetic ros core xenial CMD bash 如果我跑docker build t ros docker run it ros 然后从容器内echo PATH 我去拿 o
  • 如何将视频或图像序列转换为包文件?

    我是 ROS 新手 我需要转换预先存在的视频文件 或者large可以连接到视频流中的图像数量 bagROS 中的文件 我在网上找到了这段代码 http answers ros org question 11537 creating a ba
  • 在 CLion 中设置 ROS 包

    我正在使用 CLion C IDE 来编辑 ROS 包 我可以通过打开CMakeLists txt文件 但是 我收到一个错误 FATAL ERROR find package catkin 失败 在工作区和 CMAKE PREFIX PAT
  • 可视化点云

    我在找到的视差图像上有来自 gpu reprojectImageTo3D 的 3D 点 我现在想显示这个点云 如何将找到的点云转换为OpenCV to sensor msgs PointCloud2 我不需要发布点云 这仅用于调试可视化 是
  • 无法加载 LZ4 支持的 Python 扩展。 LZ4 压缩将不可用

    我是 ROS 新手 我刚刚打开终端并输入roscore和另一个终端并键入rostopic node我收到这个错误 上面写着 无法加载 LZ4 支持的 Python 扩展 LZ4 压缩将不可用 我搜索并去了https pypi org pro
  • 错误状态:平台不允许不安全的 HTTP:http://0.0.0.0:9090

    我正在尝试从我的 flutter 应用程序连接到 ws local host 9090 使用 rosbridge 运行 的 Ros WebSocket 服务 但我在 Flutter 中收到以下错误 错误状态 平台不允许不安全的 HTTP h
  • catkin_make后找不到ROS包

    我根据 ROS 的 Wiki 页面创建了一个 ROS 工作区 我还使用创建了一个包catkin create pkg在我刚刚创建的工作区下 然后 按照 ROS Wiki 中的步骤使用以下命令构建包catkin make 构建包后 我插入命令
  • 可以在catkin工作区之外创建ROS节点吗?

    我想在catkin工作区之外创建一个ROS发布者节点 可以创建吗 当然可以 像对待任何其他 cpp 库或 python 包一样对待 ROS 在Python中你必须保留PYTHONPATH环境变量指向ros包 opt ros kinetic
  • ROS 问题:libQt5Core.so.5:无法打开共享对象文件:没有这样的文件或目录

    当我跑步时 rosrun turtlesim turtlesim node 在 Ubuntu 上 我收到以下消息 opt ros noetic lib turtlesim turtlesim node 加载共享库时出错 libQt5Core
  • ROS中spin和rate.sleep的区别

    我是 ROS 新手 正在尝试了解这个强大的工具 我很困惑spin and rate sleep功能 谁能帮助我了解这两个功能之间的区别以及何时使用每个功能 ros spin and ros spinOnce 负责处理通信事件 例如到达的消息

随机推荐

  • code runner 中文使用指南

    Code Runner 用法 运行代码 使用快捷键 Ctrl Alt N 按F1然后选择 键入 Run Code 右键单击文本编辑器 然后在编辑器上下文菜单中单击 Run Code 命令 单击编辑器标题菜单中的 Run Code 按钮 单击
  • 车载毫米波雷达信号处理中的模糊问题仿真分析

    车载毫米波雷达信号处理中的模糊问题仿真分析 概述 车载毫米波雷达在现代汽车领域中扮演着重要的角色 用于实现自动驾驶 智能巡航控制和碰撞警报等功能 然而 在车载毫米波雷达信号处理中 存在各种模糊问题 这些问题可能会影响雷达系统的性能和准确性
  • MySQL数据库之DCL命令

    一 DCL命令 GRANT 授予访问权限 REVOKE 撤销访问权限 COMMIT 提交事务处理 ROLLBACK 事务处理回退 SAVEPOINT 设置保存点 LOCK 对数据库的特定部分进行锁定 查看用户权限 SHOW GRANTS F
  • vue学习笔记(三)

    1 vue开发存在SEO问题 前端开发采用vue开发后是单页面 单页面里面 前后端分离 渲染过程是js写的 在js调用接口返回数据之前 页面已经被打开了 实际上就是空白页面 这个时候右键点击查看源代码 实际上是都看不到内容的 对SEO不太有
  • 什么是节点光端机?总线型光端机有哪些优势?

    节点式光端机又称总线型光端机 其准确的定义是采用单 双纤链路式组网形式的图像传输系统 也被称为链路式光端机 那么 节点式光端机具体是什么呢 总线型光端机又有哪些优势呢 接下来我们就跟随飞畅科技的小编一起来详细了解下吧 什么是节点光端机 节点
  • Android动画+自定义Dialog实现闲鱼发布页面动态效果

    先来看一下效果图 一 新建一个项目DialogView 在layout文件夹下创建一个anmi的文件夹用于存放动画资源 1 首先创建进入Dialog和关闭Dialog时候的主题背景动画 进入Dialog时的动画 main go in xml
  • Ubuntu18 安装ssh

    1 安装ssh 在终端输入命令 sudo apt get install openssh server 2 查看SSH服务是否启动 输入命令 sudo ps e grep ssh
  • LRU算法

    http blog csdn net Ackarlix article details 1759793 http www cnblogs com changweihua archive 2012 05 13 2497903 html 文章一
  • STM32中栈、堆、全局区、常量区、代码区、RAM、ROM的分析

    STM32中栈 堆 全局区 常量区 代码区 RAM ROM的分析 1 堆 栈区 STM32中堆栈是为了存储不同信息而开辟的空间 具体对应于启动文件中的head和stack所定义的内存空间 STM32中 堆向高地址增长 栈向低地址增长 堆 是
  • 探索学习Qt

    探索学习Qt 版本说明 版本 作者 日期 备注 0 2 loon 2018 10 26 新增部分说明内容及总结计划 目录 文章目录 探索学习Qt 版本说明 目录 一 目的 二 Qt是什么 三 Qt示例和教程 1 探索Qt creator 2
  • 安装依赖时报错:npm ERR! code ERESOLVE npm ERR! ERESOLVE could not resolve npm ERR! npm ERR! While resolving

    F study heima vueCode demo3 gt npm i axios S npm ERR code ERESOLVE npm ERR ERESOLVE could not resolve npm ERR npm ERR Wh
  • VR丨有哪些靠谱的VR开发工具之引擎篇

    转载 http www uisdc com vr tools design engine C7210 靠谱的工具都有哪些 在不同的学习阶段又该怎样进行合理的选择 本文将聚焦于这两个问题向你介绍一系列主流设计开发工具 包括引擎 3D建模 2D
  • CEEMDAN算法及其应用

    目录 前言 一 CEEMDAN 算法 1 算法原理 2 MATLAB程序 二 CEEMDAN 算法的应用 1 CEEMDAN 小波阈值联合去噪 2 CEEMDAN 小波包分析降噪 3 CEEMDAN 时频峰值滤波 结束语 参考文献 前言 针
  • [计算机网络] 计算机网络基础总结

    计算机网络 计算机网络基础总结 文章目录 计算机网络 计算机网络基础总结 一 计算机网络体系结构 1 TCP IP的体系结构 2 OSI的体系结构 二 TCP协议 三 UDP协议 1 特点 2 报文段格式 四 HTTP协议 五 Socket
  • js打开新窗口设置窗口大小

    javascript g OpenWindow url jsp 800 600 function g OpenWindow pageURL innerWidth innerHeight var ScreenWidth screen avai
  • 【随机过程】19 - 随机过程的线性预测问题

    随机过程的线性预测问题 文章目录 随机过程的线性预测问题 1 随机过程的估计问题概述 1 1 预测问题 1 2 内插问题 1 3 滤波问题 2 随机过程的可预测性 2 1 新息过程 2 1 1 信息过程的定义 2 1 2 估计的子空间分解
  • Stable-Diffusion-WebUI 搭建使用教程

    Stable Diffusion Webui 是一个基于Gradio库的Stable Diffusion的浏览器界面 可以说是AI绘画集合体 支持目前主流的开源AI绘画模型 例如 NovelAi Stable Diffusion 有了它 我
  • cassandra 可视化工具

    cassandramanager razorsql presto devcenter
  • Qt出现错误 “undefined reference to `vtable for XXXXX.XXX”

    使用QT的继承类的时候本来很正常 但是添加了 Q OBJECT之后却发现出现了一大堆vtable告警 终于找到下面的解决方法了 重新qmake 如果新建一个类 继承了某个类 在这个类的头文件中式没有 Q OBJECT宏声明的 如果想使用si
  • ROS Docker 支持

    可供支持的DockerFile文件 kinetic ros core kinetic ros core xenial kinetic ros base kinetic ros base xenial kinetic kinetic robo