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

文章目录

  • 写在前面
  • 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.mzph.cn/bicheng/56284.shtml

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

相关文章

面网易后台开发居然遇到了一个困难难度算法题

在提供面经的同学中,竟然有同学在面试网易后台研发的时候遇到了一道困难难度的算法题。 一般来说,大多数面试的算法题都是以中等难度为主,遇到困难难度的算法题也许是公司现在不缺人、也许是在选拔人才、当然也很可能是面试官其实并不想要你…

在三维可视化项目中,B/S和C/S架构该如何选择?

一、什么是B/S和C/S 在3D数据可视化中,有两种常见的架构模式:BS(Browser/Server)和CS(Client/Server) B/S模式 B/S模式是指将3D数据可视化的逻辑和处理放在服务器端,而在客户端使用浏览器进行…

前端新机部署

编辑器:vscode 下载地址 vscode常用插件 显示代码修改历史、作者等信息 GitLens Nodejs版本 Node版本管理工具 Nvm下载地址 nvm常用命令: nvm ls // 查看安装的所有node.js的版本nvm list available //查看可以安装的所有node.js版本nvm install 版本…

Linux:Ubuntu系统开启SSH服务

在Ubuntu上开启SSH服务,可以按照以下步骤进行: 1.安装OpenSSH服务 如果你还没有安装OpenSSH服务,可以使用以下命令安装: sudo apt update sudo apt install openssh-server2. 启动SSH服务 安装完成后,启动SSH服务&a…

Docker在linux系统中的下载与使用

Docker在linux系统中的下载与使用 一、docker作用,下载及安装二、docker镜像三、创建容器四、容器数据卷 一、docker作用,下载及安装 ubuntu下载安装docker 命令:在ubuntu上面执行这个命令 Docker version:查看docker是否安装成功 配置阿里云镜像加速:进入阿里云网站…

【WEB应用安全测试指南–蓝队安全测试2】--超详细-可直接进行实战!!!亲测-可进行安全及渗透测试

安全基础理论入门知识参考上一篇《WEB应用安全测试指南蓝队安全测试1》 WEB应用安全测试指南2 一、文件 I/O 类1.1、任意文件上传1.2、任意文件下载1.3、文件包含 二、接口安全类2.1、短信炸弹2.2、邮件炸弹2.3、短信内容可控2.4、邮件内容可控 三、逻辑流程类3.1、越权3.2、未…

k8s部署jenkins集群,配置集群kubernetes plugin的pod模板

先安装jenkins插件,对应的源码地址是kubernetes-plugin,以供参考。 进入节点管理,开始配置。 点击 “ configure clouds” 一、配置集群 填写k8s地址:https://kubernetes.default.svc.cluster.local 命名空间:kuberne…

Redis高并发缓存设计问题与性能优化

1、缓存设计典型问题 1.1、缓存穿透 缓存穿透是指查询一个根本不存在的数据,缓存层和存储层都不会命中,通常出于容错的考虑,如果从存储层查不到数据则不写入缓存层。 缓存穿透将导致不存在的数据每次请求都要到存储层去查询,失…

【Python】从零到一,搭建高效Web服务器,轻松上手!Python开发者必备(文末附带源码分享)

CSDN Python源码分享:实现一个简单的Web服务器 在CSDN上,我们经常分享各种技术文章和源码,帮助开发者们不断提升自己的技能。今天,我将为大家分享一个使用Python实现的简单Web服务器源码。这个Web服务器能够处理基本的HTTP GET请…

打破常规,BD仓储物流的效能提升!

当前,随着国家战略的推进,JS与民用领域的融合不断加深,物流业也步入了军民融合的新时代。在智能仓储物流方面,JS物流的智能化进展受到了BD系统的高度关注和重视。 一、建设JS仓储物流RFID基础设施 JS物流领域引入RFID技术的基础工…

Jenkins 改成中文语言显示

Jenkins 改成中文语言显示 到系统管理 插件管理中下载如下插件接口 Localization: Chinese (Simplified) 搜索的时候用ctrlf 进行搜索,不要用Jenkins下面下的filter 只有,到系统管理Manage Jenkins下的Config System下,如下截图的位置去…

动态规划算法:14.简单多状态 dp 问题_粉刷房子_C++

题目链接:LCR 091. 粉刷房子 - 力扣(LeetCode) 一、题目解析 题目: 解析: 由题可知: 涂刷房子有三种颜色可以选,所给的二维数组中三列固定不变,分别是红、蓝、绿相邻两件房子不可…

C++基础面试题 | 什么是内存对齐?为什么需要内存对齐?

文章目录 回答重点扩展知识 回答重点 内存对齐是指计算机在访问内存时,会根据一定规则将数据存储在合适的起始地址上,通常是数据大小的整数倍。这样做可以提升CPU的访问效率,特别是在读取和写入数据时。 为什么要内存对齐?主要有…

无极低码课程【mysql windows下安装要点】

在Windows环境中安装MySQL 5.7教程 MySQL 是世界上最流行的开源关系型数据库管理系统之一。本教程将指导您在Windows操作系统上安装MySQL 5.7。 网上教程较多,这里不再详述,注意关键点即可 准备工作 下载MySQL 5.7安装包 访问 MySQL官方网站 下载MyS…

【Java面试——基础知识——Day2】

1.面向对象基础 1.1 面向对象和面向过程的区别 面向过程编程(POP):面向过程把解决问题的过程拆成一个个方法,通过一个个方法的执行解决问题。面向对象编程(OOP):面向对象会先抽象出对象&#…

“链动2+1+消费增值:用户留存新策略“

大家好,我是吴军,目前在一家以创新为核心的软件开发公司担任产品经理。今天,我将深入探讨一个经受住了时间考验且依然充满活力的商业模式——“链动21”模式,并通过一个实例及相关数据展示它如何巧妙应对用户留存与复购的挑战。 首…

vllm 部署GLM4模型进行 Zero-Shot 文本分类实验,让大模型给出分类原因,准确率可提高6%

简介 本文记录了使用 vllm 部署 GLM4-9B-Chat 模型进行 Zero-Shot 文本分类的实验过程与结果。通过对 AG_News 数据集的测试,研究发现大模型在直接进行分类时的准确率为 77%。然而,让模型给出分类原因描述(reason)后,…

使用IDEA和vecode创建vue项目并启动

一、使用IDEA创建Vue项目 一、打开IDEA下载Vue插件 打开IDEA的设置找到插件并查找到下载Vue.js这个插件 二、用IDEA创建Vue项目 新建项目并选择到Vue生成器 我这是IDEA自带的 创建项目非常迅速 端口号(默认):5173 版本是3.x 启动项目…

使用scss生成旋转圆圈

图片 html代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title>…

modbus tcp wireshark抓包

Modbus TCP报文详解与wireshark抓包分析_mbap-CSDN博客 关于wireshark无法分析出modbusTCP报文的事情_wireshark 协议一列怎么没有modbus tcp-CSDN博客 使用Wireshark过滤Modbus功能码 - 技象科技 连接建立以后才能显示Modbus TCP报文 modbus.func_code 未建立连接时&…