基于Docker的ROS开发

本文主要介绍如何使用Docker在Windows和Linux环境中部署并使用ROS,通过Docker Container运行ROS,可以方便我们在一个本地环境中运行多个ROS版本。
更多内容,访问专栏目录获取实时更新。

关于ROS的版本

参考ROS1 Distribution Wiki和ROS2 Distribution Wiki,推荐使用:

  • ROS1 Noetic 版本(2020/05发布,支持到2025/05)
  • ROS2 Humble版本(2022/05发布,支持到2027/05)

拉取ROS镜像并运行ROS容器

要求阅读者需要具有基础的Docker使用经验
关于ROS的镜像,可以访问Docker Hub查找对应版本的脚本,本文里我们以ROS1 Noetic和ROS2 Humble为例演示。

环境要求
在Windows环境中,需要安装Docker Desktop,并且可以通过命令行执行docker命令:
在这里插入图片描述
Linux环境使用的是Ubuntu 22,同样已经提前安装了docker:
在这里插入图片描述

拉取镜像
在Windows环境中,需要首先启动Docker Desktop。然后执行下面的脚本,可以拉取ROS1和ROS2的镜像文件:

docker pull osrf/ros:noetic-desktop
docker pull osrf/ros:humble-desktop

执行完成后,通过指令查看已拉取的镜像文件:

docker images

在这里插入图片描述
运行容器

docker run --name <container-name> -it <image-name:tag>

上面的指令是运行一个容器,容器名为’container-name’的替换内容,使用’image-name:tag’指定的镜像文件,并运行在交互模式下(-it),指令示例:

docker run --name noetic-gui -it osrf:noetic-desktop

指令运行以后,命令行将会进行到该容器的交互模式下,在Docker Desktop中,能看到当前运行的容器:
在这里插入图片描述
在这里插入图片描述

运行ROS

当前我们已经启动了ROS Noetic的Docker容器,并进入了交互模式,在命令行中执行roscore来启动ROS Master (仅针对ROS1版本需要)
在这里插入图片描述
如果你也在命令行中看到了上述的内容,说明ROS1运行成功。
Windows中启动另一个命令行,执行下面的命令,进入到一个已启动容器的交互模式:

docker exec -it <container-name> bash

在这里插入图片描述
然后执行:

source /opt/ros/noetic/setup.bash
printenv | grep ROS
rostopic list

第一条指令在每启动一个shell时都需要执行一下(除非你将该指令加入到了.bashrc文件中),它能配置你的shell让你获取到ROS的程序和帮助这些程序找到依赖的包。
第二,三条指令分别是查看已安装ROS的环境变量和当前的ROS Topic列表,如果已正确完成了上述步骤,你可以看到下图类似的内容:
在这里插入图片描述

Docker容器中的GUI程序

如果我们运行的ROS程序需要打开一些用户交互界面,比如Gazebo,RViz等,在Docker容器中要怎么办呢?

以经典的小乌龟(turtlesim)为例,演示如何在docker容器中使用GUI。

rosrun turtlesim turtlesim_node

我相信执行完上面的指令后你将会得到下面的错误:
在这里插入图片描述
这时就需要我们安装XLaunch来实现界面的显示,你可以访问Xming网站获取,或通过SourceForge下载。在安装时基本不许要任何配置,仅注意同时安装XLaunch即可。
在这里插入图片描述
安装完成后,启动XLaunch,只需要在下图标注的步骤修改值为0,其他一直点击下一步直至结束在这里插入图片描述
这时在电脑的状态栏里你应该能够看到启动的XServer.
在这里插入图片描述
确保XServer正常运行,这时再重新运行Noetic的容器,不过通过下面的指令运行:

docker run --name noetic-gui -e DISPLAY=host.docker.internal:0.0 -it osrf/ros:noetic-desktop

然后运行roscore并在另一个命令行中重复之前的命令(不要忘记source一下),启动turtlesim

rosrun turtlesim turtlesim_node

在这里插入图片描述
我们的小乌龟就正常的显示在桌面上了。
启动另一个命令行,我们来通过键盘上下左右控制小乌龟:

rosrun turtlesim turtle_teleop_key

在这里插入图片描述
在Ubuntu中,步骤基本类似,在启动ROS时,建议通过一个bash文件来启动容器,run_noetic_gui.bash:

xhost local:rootXAUTH=/tmp/.docker.xauthdocker run -it \--name=noetic-gui \--env="DISPLAY=$DISPLAY" \--env="QT_X11_NO_MITSHM=1" \--volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \--env="XAUTHORITY=$XAUTH" \--volume="$XAUTH:$XAUTH" \--net=host \--privileged \osrf/ros:noetic-desktop \bashecho "Done."

如何访问Docker容器中的文件

在之后的开发中,我们需要创建工作空间并创建自己的工程项目,而当前的ROS运行在Docker容器中,要怎样访问的到呢。

这里推荐使用VisualStudio Code,并安装插件Dev Container
在这里插入图片描述
成功安装了插件后,我们就可以通过VS Code打开一个Docker Container的文件目录啦。
在这里插入图片描述
在这里插入图片描述
至此,我们成功的在Windows或Ubuntu环境下,通过Docker中运行了ROS Noetic,并且能够显示用户界面,并且通过VS Code访问容器中的文件和工程。

如有错误,欢迎留言或来信指正:hbin6358@163.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/18234.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

nginx源码阅读理解 [持续更新,建议关注]

文章目录 前述一、nginx 进程模型基本流程二、源码里的小点1.对字符串操作都进行了原生实现2.配置文件解析也是原生实现待续 前述 通过对 nginx 的了解和代码简单阅读&#xff0c;发现这个C代码的中间件确实存在过人之处&#xff0c;使用场景特别多&#xff0c;插件模块很丰富…

10款AI工具,让工作生活学习更高效

我看大家都推荐的差不多了&#xff0c;常见好用的PC软件就那些&#xff0c;我不想反复“咀嚼”了&#xff0c;我想另辟蹊径推荐点不一样的&#xff0c;比如10款PC端的AI网站。AI已经全方位“侵入”我们的生活&#xff0c;从AI写作到AI绘画&#xff0c;从AI视频到AI语音&#xf…

Thingsboard规则链:Switch节点详解

在物联网&#xff08;IoT&#xff09;领域&#xff0c;数据的高效处理与自动化决策是构建智能系统的核心。作为一款强大的物联网平台&#xff0c;Thingsboard通过其规则引擎为开发者提供了高度灵活的工具&#xff0c;其中Switch节点是实现消息条件路由的关键组件。本文将全方位…

【深度学习】Transformer梳理

零、前言 对于transformer&#xff0c;网上的教程使用记号、术语不一 。 最关键的一点&#xff0c;网上各种图的简化程度不一 &#xff08;画个图怎么能这么偷懒&#xff09; &#xff0c;所以我打算自己手画一次图。 看到的最和善&#xff08;但是不是那么靠谱&#xff0c;我…

黑龙江某市数字孪生地下水监测系统平台项目建设经验

项目背景 地下水是一种特殊而珍贵的资源&#xff0c;它具有不可替代性&#xff0c;与经济发展及人民生活息息相关&#xff0c;针对日趋严峻的水资源危机&#xff0c;如何合理利用有限的水资源&#xff0c;保障国民经济的可持续发展是一个迫切需要解决的问题。 黑龙江某市积极…

eclipse启动时间过长的问题

项目场景&#xff1a; 由于我用eclipse比较习惯&#xff0c;虽然IDEA很好&#xff0c;但是因为收费&#xff0c;所以在个人开发学习过程中一直还是使用eclipse&#xff0c;本文不讨论eclipse与IDEA孰优孰劣问题。 开发环境&#xff1a; 操作系统&#xff1a;Windows 11 22631…

【小呆的力学笔记】连续介质力学的知识点回顾一:运动和变形

文章目录 1. 运动的描述2. 拉格朗日描述下的变形2.1 线元的变化2.2 体元的变化2.3 面元的变化 1. 运动的描述 在连续介质力学中&#xff0c;存在着两种对运动的描述&#xff0c;一种为拉格朗日描述&#xff0c;即通过描述每个物质点的运动来描述整个变形体的运动&#xff0c;也…

如何将音频中的人声分离出来?

想要把一段视频中的人声跟背景音乐分离开来&#xff0c;找个好一点的音频处理软件就能把声音分离了&#xff0c;常见的有以下方法&#xff0c;一起来看看吧。 pr 打开软件&#xff0c;然后将电脑上的音频文件&#xff0c;上传到软件中&#xff0c;然后按住[ctrla]选择所有音频…

【数据结构】 排序算法 ~ 总结篇

文章目录 1. 排序几个重点概念的理解2. 排序算法的分析&#x1f427; 1. 排序几个重点概念的理解 2. 排序算法的分析&#x1f427;

Git学习篇

目录 使用命令导入项目 使用命令导入项目 1. 使用git init 命令初始化一个新的Git仓库。 git init 是 Git 命令&#xff0c;用于初始化一个新的 Git 仓库。当您想要开始跟踪一个新项目的版本控制时&#xff0c;可以运行 git init 命令来初始化一个空的 Git 仓库。 如果出现以下…

6-继承

6-继承 1、基本语法和方式2、继承的基本特点2.1 三种继承方式相同的基本点2.2 三种继承方式的差别2.3 公有继承的独有特点 3、子类的构造、析构3.1 子类的构造3.2 子类的析构3.3 子类的拷贝构造函数3.4 子类的拷贝赋值 4、多重继承4.1 内存布局4.2 类型转换4.3 名字冲突问题 5、…

10. C++异步IO处理库和使用libevent实现高性能服务器

C比较有名的异步IO处理库 libevent 这个主要使用的是epoll。libevthplibuvlibev 我们主要介绍libevent。 libevent重要函数 event_base_new 这个可以对应于epoll_create也就是创建一个实例。还可以初始化libevent所有管理相关的代码。比如说所能用到的队列&#xff0c;栈&a…

Linux内核编译流程3.10

一、内核源代码编译流程 编译环境&#xff1a; cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core) Linux内核版本&#xff1a; uname -r 3.10.0-693.el7.x86_64 编译内核源代码版本&#xff1a;linux-4.19.90-all-arch-master cp /boot/config-xxx到内核源…

数据库(9)——DQL基础查询

数据查询 数据查询是SQL中最复杂的&#xff0c;语法结构为 SELECT 字段列表 FROM 表名列表 WHERE 条件列表 GROUP BY 分组字段列表 HAVING 分组后字段列表 ORDER BY 排序字段列表 LIMIT 分页参数 查询多个字段 SELECT 字段1&#xff0c;字段2...FROM…

LeetCode583:两个字符串的删除操作

题目描述 给定两个单词 word1 和 word2 &#xff0c;返回使得 word1 和 word2 相同所需的最小步数。 每步 可以删除任意一个字符串中的一个字符。 代码 解法1 /*dp[i][j]&#xff1a;以i-1为结尾的wrod1中有以j-1为尾的word2的个数为了让word1和word2相同&#xff0c;最少操作…

linux开发之设备树基本语法一

设备树的根节点 设备树子节点和子子节点,子节点在根节点范围内 包含子节点以及子子节点 节点名称 比如这里led就是这个gpio的小名,可以直接用 gpio22020101是这里的名字,也就是要用这个gpio,符号后面的一串数字使用了这个gpio的寄存器地址,因为可能会用很多gpio,所以加入寄存…

Pushmall共享分销电商SaaS版2024年 5月模块开发优化完成

Pushmall共享分销电商 2024年 5月模块开发优化完成 1、**实现SaaS框架业务&#xff1a;**多租户、多商家、多门店&#xff0c;及商家入驻、商品管理。 2、租户小程序管理&#xff1a;对租户的小程序业务管理。 3、店铺小程序管理&#xff1a;对租户多店铺小程序绑定。 4、会员分…

新火种AI|警钟长鸣!教唆自杀,威胁人类,破坏生态,AI的“反攻”值得深思...

作者&#xff1a;小岩 编辑&#xff1a;彩云 在昨天的文章中&#xff0c;我们提到了谷歌的AI Overview竟然教唆情绪低迷的网友“从金门大桥跳下去”。很多人觉得&#xff0c;这只是AI 模型的一次错误判断&#xff0c;不会有人真的会因此而照做。但现实就是比小说电影中的桥段…

精酿啤酒:品质与口感对啤酒市场价格的影响

啤酒作为一种大众化的产品&#xff0c;其品质与口感对市场价格有着显著的影响。对于Fendi club啤酒而言&#xff0c;其卓着的品质和与众不同的口感又加上市场价格相对实惠&#xff0c;受到消费者的青睐。 品质是决定啤酒市场价格的重要因素。Fendi club啤酒选用天然小麦原料&am…

【leetcode2765--最长交替子数组】

要求&#xff1a;给定一个数组&#xff0c;找出符合【x, x1,x,x-1】这样循环的最大交替数组长度。 思路&#xff1a;用两层while循环&#xff0c;第一个while用来找到符合这个循环的开头位置&#xff0c;第二个用来找到该循环的结束位置&#xff0c;并比较一下max进行记录。 …