在 Docker容器中安装 ROS-Melodic 并使用 rviz 进行图形化显示

news2024/10/22 8:10:49

文章目录

  • 写在前面
  • 1. 背景描述
  • 2. 安装步骤
    • 2.1 允许本地机器上的用户或进程连接到 X server
    • 2.2 拉取 docker 镜像
    • 2.3 使用镜像osrf/ros:melodic-desktop-full创建并运行容器
    • 2.4 运行 roscore
    • 2.5 运行 rviz
  • 参考链接

写在前面

自己的测试环境:
Ubuntu20.04,docker-27.3.1

1. 背景描述

  由于测试ROS代码出现不同的环境,但是自己的电脑安装了 Ubuntu20.04,自己电脑只能安装 ROS-Noetic, 但是测试其他代码的时候需要 ROS-Melodic。为了能够最快地搭建ROS-Melodic 的环境,这里借助 docker 实现。

  docker 镜像网站中 Open Source Robotics Foundation 已经维护了多个版本的包含ros的系统:https://hub.docker.com/r/osrf/ros,可以根据需要查看

2. 安装步骤

  首先确保在本机已经安装好 docker。

2.1 允许本地机器上的用户或进程连接到 X server

下述命令用于在 Linux 系统中修改 X server 的访问控制策略,允许本地机器上的用户或进程连接到 X server,从而允许它们显示图形界面。这个命令通常用于 Docker 容器与宿主机之间的图形界面共享。

sudo xhost +local: 

下面是命令的详细解释:

  • sudo:以超级用户(root)的权限执行后面的命令。在大多数 Linux 系统中,修改 X server 的访问控制需要 root 权限。
  • xhost:X server 的一个实用程序,用于管理哪些用户和主机可以连接到 X server。
  • +local::这是一个参数,用于更改 X server 的访问控制列表(ACL)。+local: 表示允许本地机器上的所有用户连接到 X server。
  • 在默认情况下,X server 只允许与它在同一终端会话启动的进程连接。如果你尝试从另一个会话(例如,从 Docker 容器内部)启动一个图形界面程序,它将无法连接到 X server,除非你明确允许这样做。
  • 执行 sudo xhost +local: 命令后,任何本地用户都可以连接到 X server。这通常是为了允许 Docker 容器内的进程显示图形界面。例如,当你在 Docker 容器中运行一个需要图形界面的应用程序时,你需要确保容器可以访问宿主机的 X server。

2.2 拉取 docker 镜像

  使用docker pull 命令拉取包含 ROS-Melodic 的镜像:

docker pull osrf/ros:melodic-desktop-full

  等待拉取完毕之后,使用 docker images 验证该镜像是否拉取成功。如果出现类似于下述的结果,说明镜像拉取成功。
在这里插入图片描述

2.3 使用镜像osrf/ros:melodic-desktop-full创建并运行容器

docker run -it --gpus all --env="NVIDIA_DRIVER_CAPABILITIES=all" --volume=/tmp/.X11-unix:/tmp/.X11-unix --volume=/dev/dri:/dev/dri --device=/dev/snd --device=/dev/dri --env="DISPLAY=$DISPLAY" --name=ros_melodic_test  osrf/ros:melodic-desktop-full

这条指令的解释:

这条 docker run 命令用于启动一个名为 melodic_test 的 Docker 容器,并且针对运行 ROS (Robot Operating System) 桌面完整版镜像进行了一些特定的配置,以支持 GPU 加速和图形界面显示。下面是每个参数的详细解释:
docker run:Docker 命令,用于创建并启动一个新的容器。
-it:两个参数,-i 表示交互模式,保持 STDIN 打开,即使不附加到容器终端;-t 分配一个伪终端,为容器提供一个文本命令行界面。
–gpus all:允许容器访问宿主机上所有的 GPU 设备。这通常需要 NVIDIA Container Toolkit 的支持。
–env=“NVIDIA_DRIVER_CAPABILITIES=all”:设置环境变量,指示 Docker 容器需要完整的 NVIDIA 驱动能力,这通常用于启用 GPU 加速。
–volume=/tmp/.X11-unix:/tmp/.X11-unix:挂载卷,将宿主机的 /tmp/.X11-unix 目录挂载到容器的相同路径,这个目录包含了 X11 服务器的 UNIX 域套接字,用于图形界面的通信。
–volume=/dev/dri:/dev/dri:挂载卷,将宿主机的 /dev/dri 目录挂载到容器的相同路径,这个目录包含了 Direct Rendering Infrastructure (DRI) 设备文件,用于 GPU 硬件的直接访问。
–device=/dev/snd:授予容器访问宿主机的 /dev/snd 设备的权限,这是声卡设备文件,用于音频输入输出。
–device=/dev/dri:再次授予容器访问宿主机的 /dev/dri 设备的权限。这个参数和上面的 --volume 参数一起确保容器可以访问 GPU 设备。
–env=“DISPLAY=$DISPLAY”:设置环境变量 DISPLAY,用于图形界面的显示。这里使用宿主机的 DISPLAY 环境变量值,使得容器内的图形界面程序可以在宿主机上显示。
–name=ros_melodic_test:为容器指定一个名称,这里名称为 ros_melodic_test。
osrf/ros:melodic-desktop-full:指定要使用的 Docker 镜像,这里是 ROS (Robot Operating System) 的 melodic 桌面完整版镜像。

在本机执行docker ps -a验证是否创建成功,如果出现下列的输出,说明创建成功:
在这里插入图片描述

2.4 运行 roscore

以交互命令进入容器:

docker exec -it ros_melodic_test bash

在容器内部执行下列指令配置ros的环境变量,并运行roscore

source ./ros_entrypoint.sh
roscore

2.5 运行 rviz

以交互命令进入容器:

docker exec -it ros_melodic_test bash

在容器内部执行下列指令配置ros的环境变量,并运行rviz

source ./ros_entrypoint.sh
rviz
# 或者 rosrun rviz rviz

出现rviz界面即视为配置成功。
在这里插入图片描述

参考链接

[1] 深圳市进化图灵智能科技有限公司. Docker 安装ros 使用rviz 等等图形化程序 [EB/OL]. https://turingevo.blog.csdn.net/article/details/140425464, 2024-07-14/2024-10-13.

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

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

相关文章

基于SSM的微信小程序博客管理系统(博客1)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 基于SSM的微信小程序博客管理系统实现与设计,实现了管理员与用户,管理员实现了用户管理、博文信息管理、博文类型管理、我的博文管理、个人名片分享管理、签到管理…

SAP S/4 HANA 销售返利

目录 1 简介 2 后台配置 3 主数据 4 业务操作 4.1 场景 1 - 返利应计 4.2 场景 2 - 最终结算 1 简介 在过去 SAP ECC 把“返利”功能集成在了 SD 模块当中,而 SAP S/4 HANA 把“返利”集成在了结算管理功能模块当中。究其原因,主要是 ECC “返利”…

深度解析LMS(Least Mean Squares)算法

目录 一、引言二、LMS算法简介三、LMS算法的工作原理四、LMS算法的特点五、LMS算法的应用场景六、LMS算法的局限性七、总结八、进一步探讨 一、引言 自适应滤波器是一种动态调整其参数以适应变化环境的信号处理工具,广泛应用于噪声消除、信道均衡和系统识别等领域。…

算法工程师重生之第二十五天(加油站 分发糖果 柠檬水找零 根据身高重建队列 )

参考文献 代码随想录 一、加油站 在一条环路上有 n 个加油站,其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。…

Mysql的Innodb的RR隔离级别到底有没有解决幻读问题?

InnoDB中的repeatable read这种隔离级别通过间隙锁MVCC解决了大部分的幻读问题,但是并不是所有的幻读都能解读,想要彻底解决幻读,需要使用Serializable的隔离级别。 MVCC解决幻读 在RC中,每次读取都会重新生成一个快照&#xff…

EDM平台排行榜与工具推荐

本文总结了EDM平台排行榜,包括ZohoCampaigns、Mailchimp等。各平台在集成性、自动化、模板库等方面各具优势,适合不同规模和需求的企业。选择适合的EDM平台对营销活动成功至关重要。 1. Zoho Campaigns 简介 Zoho Campaigns是Zoho的edm平台&#xff0c…

[LeetCode] 515. 在每个树行中找最大值

题目描述: 给定一棵二叉树的根节点 root ,请找出该二叉树中每一层的最大值。 示例1: 输入: root [1,3,2,5,3,null,9] 输出: [1,3,9]示例2: 输入: root [1,2,3] 输出: [1,3]提示: 二叉树的节点个数的范围是 [0,10…

标准地图下载

官网,地图来源为中国地图出版社、国家基础地理信息中心 http://bzdt.ch.mnr.gov.cn/ 能够下载各个版本的中国地图 世界地图

python中的工具

一、Scapy Scapy是python语言编写的工具,也是一个强大的交付式数据包处理程序,能够伪造或者解码大量的网络协议数据包,能够发送、嗅探、剖析和伪造网络数据包,如端口扫描、路由跟踪、探测、攻击或网络发现等。 python3环境下&am…

2022年华为杯数学建模竞赛B题论文和代码

基于整数规划的方形件排样和组批优化问题研究 常见的板式产品如玻璃,PCB板,铝合金门窗等产品因其结构定制化程度高的特点,相关生产制造的企业往往采用“多品种小批量”的个性化生产模式。通过对客户订单的组批,预先规划好各个产品…

【2022统考真题】计算时间复杂度

目录 一、题目描述 二、思路分析 三、易错提醒 四、同级和嵌套的关系 一、题目描述 下列程序段的时间复杂度是&#xff08;&#xff09; int sum 0; for (int i 1; i < n; i * 2) for (int j 0; j < i; j) sum; A. O(logn) B. O(n) C. O(nlogn) D…

卡牌小程序开发,线上抽卡机的优势

今年以来&#xff0c;卡牌成为了一种新的潮玩方式&#xff0c;继盲盒后在度成为大众收藏娱乐的选择。卡牌的种类各异&#xff0c;以热门IP为原型&#xff0c;设计出了专属卡牌&#xff0c;具有较大的收藏价值&#xff0c;吸引了无数的消费者的关注。 随着互联网技术的发展&…

python常用的字符串方法

一、求字符串的长度 python最常用的内置函数 二、切片获取子串 获取前第5个字符 print(s[:5]) # wuzij 获取后6个字符 print(s[-6:]) # python 三、去掉多余空格 四、是否以某个串开头 五、是否包含某个子串 六、串联多串 七、分割多串 八、替换子串

施瓦辛格之女凯瑟琳和克里斯帕拉特的女儿养成了她们妈妈一个习惯

凯瑟琳施瓦辛格与克里斯帕拉特的长女莉拉和次女艾洛斯显然与其母亲极为相像&#xff0c;一张崭新且罕见的照片清晰地展露了这一情形&#xff01; 广告 10 月 13 日&#xff0c;施瓦辛格分享了一系列家人外出游玩的照片。她分享了这些甜蜜温馨的照片&#xff0c;并附上标题写道&…

链接伪类(:hover)CSS背景图片有闪动BUG的解决方法 vue3

现象&#xff1a; hover时候&#xff0c;图片还没加载出来&#xff0c;导致边框闪烁 在Vue 3中&#xff0c;如果你遇到了使用伪类(:hover)时背景图片出现闪烁的问题&#xff0c;可能是由于浏览器的渲染机制导致的。解决这个问题的方法可能包括&#xff1a; 使用background-pos…

【Go初阶】两万字快速入门Go语言

初见golang语法 package mainimport "fmt"func main() {/* 简单的程序 万能的hello world */fmt.Println("Hello Go")} 第一行代码package main定义了包名。你必须在源文件中非注释的第一行指明这个文件属于哪个包&#xff0c;如&#xff1a;package main…

中级课程RHCE

RHCE 一、复习RHCSA1.1 系统安装1.1.1 安装虚拟机1.1.2 第一个快照1.1.3 第二个快照vi编辑器1.1.4 看网关网卡 1.2 文件管理1.3 目录管理1.4 用户管理1.5 权限管理1.6 存储管理1.6.1 标准分区管理实验&#xff1a;1.6.2 逻辑卷管理实验&#xff1a;1.6.3 交换空间管理实验 …

MySQL-CRUD-基础-(详解) ┗( ▔, ▔ )┛

目录 ❄️一、新增&#xff08;Create&#xff09;&#xff1a; ☑ 1、单行数据 全列插入&#xff1a; ☑ 2、指定列插入&#xff1a; ☑ 3、多行插入&#xff1a; ❄️二、查询&#xff08;Retrieve&#xff09;&#xff1a; ☑ 1、全列查询&#xff1a; ☑ 2、指定列查询&a…

API项目3:API签名认证

问题引入 我们为开发者提供了接口&#xff0c;却对调用者一无所知 假设我们的服务器只能允许 100 个人同时调用接口。如果有攻击者疯狂地请求这个接口&#xff0c;那是很危险的。一方面这可能会损害安全性&#xff0c;另一方面耗尽服务器性能&#xff0c;影响正常用户的使用。…

Linux命令——ls

命令格式&#xff1a;命令本身选项命令的指向目标 1.ls命令作用为列出目录下的内容 #lls后的选项有[-a,-l,-h]##注意ls与选项间应用空格隔开. 如下图为&#xff08;ls命令体-l选项/根文件&#xff09;的命令行 # ls -a 为&#xff1a;列出所有文件&#xff08;包括隐藏文件&…