ubuntu20.04在docker下运行ros-noetic

news2025/2/24 6:38:36

经常折腾虚拟机各双系统 , 想着不如把docker利用起来,下面算是一个初学者使用docker运行ros的记录:

1. 安装

使用官方安装脚本自动安装

 curl -fsSL https://test.docker.com -o test-docker.sh
 sudo sh test-docker.sh

验证是否安装成功

docker version

Docker 需要用户具有 sudo 权限,为了避免每次命令都输入sudo,可以把用户加入 Docker 用户组

sudo usermod -aG docker $USER

Docker 是服务器----客户端架构。命令行运行docker命令的时候,需要本机有 Docker 服务。如果这项服务没有启动,可以用下面的命令启动

# service 命令的用法
sudo service docker start
# systemctl 命令的用法
sudo systemctl start docker

2. 在docker中运行ros-noetic

[参考] (https://blog.csdn.net/qq_40695642/article/details/117607446)

2.1 安装Portainer

Portainer 个可视化的界面其实和ROS关系并不大,但是使用起来非常的方便,可以让我们更快速的利用Docker学习ROS,而不是要完整的学习完Docker的繁杂的命令再学习ROS。

sudo systemctl restart docker
sudo docker pull portainer/portainer
sudo docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock --restart=always --name prtainer portainer/portainer

(执行上面的命令如果有报错的话 , 建议 魔法先关闭 )

2.2 如果出现超时什么的 重启容器

使用sudo docker ps来查看正在运行的容器

sudo docker ps

该命令将列出所有正在运行的容器。
运行以下命令停止 Portainer 容器:

sudo docker stop <container_id>

将 <container_id> 替换为实际的 Portainer 容器的 ID 或名称
使用以下命令再次启动 Portainer 容器:

sudo docker start <container_id>

同样,将 <container_id> 替换为 Portainer 容器的 ID 或名称。
等待一段时间,让容器重新启动

2.3 访问本机9000端口

运行上述命令等待执行成功后,放行防火墙,访问本机的9000端口进入Portainer,创建账号密码之后即可登录到控制台。
本机的9000端口: http://localhost:9000
在这里我们可以查看到运行容器内部的信息,也可以快速的删除废弃的容器及镜像。也可以构建虚拟网络实现容器间隔离
Portainer 学习参考: https://www.hangge.com/blog/cache/detail_2597.html

2.2 在docker中运行ros-noetic

首先我们可以使用

sudo docker search ros

来查看目前docker hub上有哪些大神上传的公共镜像

选择pull ros-neotic的 docker 镜像

sudo docker pull osrf/ros:noetic-desktop-full

在这里插入图片描述
接下来我们需要写一个Dockerfile,来帮我们完成一些简单的环境依赖安装工作:

mkdir cwc_docker
cd cwc_docker
gedit Dockerfile

下面是Dockerfile 文件内容:

FROM osrf/ros:melodic-desktop-full

# nvidia-container-runtime
ENV NVIDIA_VISIBLE_DEVICES ${NVIDIA_VISIBLE_DEVICES:-all}
ENV NVIDIA_DRIVER_CAPABILITIES ${NVIDIA_DRIVER_CAPABILITIES:+$NVIDIA_DRIVER_CAPABILITIES,}graphics

RUN apt-get update && \
    apt-get install -y \
    build-essential \
    libgl1-mesa-dev \
    libglew-dev \
    libsdl2-dev \
    libsdl2-image-dev \
    libglm-dev \
    libfreetype6-dev \
    libglfw3-dev \
    libglfw3 \
    libglu1-mesa-dev \
    freeglut3-dev \
    gedit

接下来使用下面的命令来构建容器:(同样 我关闭了我的魔法)

sudo docker build -t cwc_docker . 

在这里插入图片描述以下是 Dockerfile 的具体功能说明:

设置环境变量 NVIDIA_VISIBLE_DEVICES 和 NVIDIA_DRIVER_CAPABILITIES,用于配置 NVIDIA 设备的可见性和驱动程序的能力。
使用 apt-get 更新软件包列表,并安装以下软件包:
    build-essential:包含了 gcc 和 make 等基本的构建工具。
    libgl1-mesa-dev:Mesa OpenGL 库的开发文件。
    libglew-dev:GLEW 库的开发文件。
    libsdl2-dev:SDL2 库的开发文件。
    libsdl2-image-dev:SDL2_image 库的开发文件。
    libglm-dev:GLM 库的开发文件。
    libfreetype6-dev:FreeType 库的开发文件。
    libglfw3-dev 和 libglfw3:GLFW 库的开发文件和运行时库。
    libglu1-mesa-dev:Mesa GLU 库的开发文件。
    freeglut3-dev:FreeGLUT 库的开发文件。
    gedit:用于在容器内编辑文件的文本编辑器。

这些软件包通常用于图形编程和开发。使用该 Dockerfile 构建镜像后,可以将其作为基础镜像来运行具备图形能力的 ROS 应用程序。
如果上面Dockerfile的下面安装部分安装不成功的话也没有关系,删除RUN节,只剩下:

FROM osrf/ros:melodic-desktop-full

# nvidia-container-runtime
ENV NVIDIA_VISIBLE_DEVICES ${NVIDIA_VISIBLE_DEVICES:-all}
ENV NVIDIA_DRIVER_CAPABILITIES ${NVIDIA_DRIVER_CAPABILITIES:+$NVIDIA_DRIVER_CAPABILITIES,}graphics

在这里插入图片描述

然后继续进入容器再安装:

###在运行容器后输入下面的命令,然后任意安装
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys F42ED6FBAB17C654
sudo apt update
sudo apt install gedit

在这里插入图片描述

经过漫长的等待 ,容器构建成功, 下面启动容器

sudo xhost +local:
sudo docker run -it --device=/dev/dri --group-add video --volume=/tmp/.X11-unix:/tmp/.X11-unix  --env="DISPLAY=$DISPLAY"  --name=rocker osrf/ros:noetic-desktop-full  /bin/bash

运行上述命令即可进入容器的内部:
在这里插入图片描述

在容器内部有一个ros_entrypoint.sh的文件,./ros_entrypoint.sh执行这个脚本

然后就可以正常使用roscore和rviz了
在这里插入图片描述

在使用rviz的时候我们当然需要再开启一个终端,那么对应的我们要进入启动roscore的这个容器

sudo docker ps
###找到运行的rocker容器的id

####进入容器
sudo docker exec -it dc3224c8d60e /bin/bash

source /opt/ros/noetic/setup.bash

rviz

即打开了rviz
在这里插入图片描述启动小乌龟
每次开启终端不知道为什么 都要

source  /opt/ros/noetic/setup.bash

在这里插入图片描述

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

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

相关文章

openRPA开源项目源码编译

最近接触到了一个新的领域——RPA&#xff0c;RPA全称Robotic Process Automation&#xff0c;中文名为机器人流程自动化。RPA可以视作一个数字机器人&#xff0c;它可以通过程序来模拟人与软件系统的交互过程&#xff0c;代替人工将大量重复、有规则的计算机操作自动化&#x…

【Vue配置项】 computed计算属性 | watch侦听属性

目录 前言 computed计算属性 什么是计算属性&#xff1f; Vue的原有属性是什么&#xff1f; 得到的全新的属性是什么&#xff1f; 计算属性怎么用&#xff1f; 计算属性的作用是什么&#xff1f; 为什么说代码执行率高了&#xff1f; computed计算属性中的this指向 co…

CTFd-Web题目动态flag

CTFd-Web题目动态flag 1. dockerhub注册2. dockerfile编写3. 上传到docker仓库4. 靶场配置5. 动态flag实现 1. dockerhub注册 想要把我们的web题目容器上传到docker仓库中&#xff0c;我们需要dockerhub官网注册一个账号&#xff0c;网址如下 https://hub.docker.com/2. dock…

Android Glide加载transform CenterCrop, CircleCrop ShapeableImageView圆形图并描边,Kotlin

Android Glide加载transform CenterCrop, CircleCrop ShapeableImageView圆形图并描边&#xff0c;Kotlin import android.os.Bundle import androidx.appcompat.app.AppCompatActivity import com.bumptech.glide.load.resource.bitmap.CenterCrop import com.bumptech.glide.…

基于ssm+vue设备配件检修管理系统

摘要 随着工业设备的日益复杂和多样化&#xff0c;设备配件的检修管理成为保障生产运行和设备寿命的关键环节。本研究基于SSM框架&#xff08;Spring Spring MVC MyBatis&#xff09;&#xff0c;致力于设计和实现一套全面、高效的设备配件检修管理系统。该系统不仅能够提高设…

从0开始学习数据结构 C语言实现 1.前篇及二分查找算法

一、前篇 1、什么是数据结构&#xff1f; 数据结构是带有结构特性的数据元素的集合&#xff0c;它研究的是数据的逻辑结构和数据的物理结构以及它们之间的相互关系 2、时间复杂度与空间复杂度 大O符号是用于描述函数渐进行为的数学符号 常用函数的增长表 阶乘O(n!) > 指数…

常见面试题-MySQL软删除以及索引结构

为什么 mysql 删了行记录&#xff0c;反而磁盘空间没有减少&#xff1f; 答&#xff1a; 在 mysql 中&#xff0c;当使用 delete 删除数据时&#xff0c;mysql 会将删除的数据标记为已删除&#xff0c;但是并不去磁盘上真正进行删除&#xff0c;而是在需要使用这片存储空间时…

【原创】java+swing+mysql校园活动管理系统设计与实现

前言&#xff1a; 本文介绍了一个校园活动管理系统的设计与实现。该系统基于JavaSwing技术&#xff0c;采用C/S架构&#xff0c;使用Java语言开发&#xff0c;以MySQL作为数据库。系统实现了活动发布、活动报名、活动列表查看等功能&#xff0c;方便了校园活动的发布和管理&am…

如何合理估算 Java 线程池大小

前 言 Java 中的线程创建会产生显著的成本。创建线程会消耗时间&#xff0c;增加请求处理的延迟&#xff0c;并且涉及 JVM 和操作系统的大量工作。为了减轻这些开销&#xff0c;线程池发挥了作用。 在本文中&#xff0c;我们将深入研究确定理想线程池大小的艺术。经过微调的线…

【数据结构】栈与队列的实现

栈与队列是数据结构中重要的结构&#xff0c; 可以用于解决一些题目 模拟实现时可以增加对于这些结构的理解&#xff0c;也可以巩固我们的语言水平&#xff0c;解决某些题目也会有很好的效果 话不多说 目录 栈的实现结构体的定义&#xff1a;初始化栈:压栈&#xff1a;出栈&am…

leetcode栈和队列三剑客

用队列实现栈 队列是先进先出的&#xff0c;而栈是只能在栈顶进行出栈和入栈&#xff0c;那我们这道题要用队列来实现栈的话&#xff0c;这里给的思路是两个队列&#xff0c;因为两个队列的话就可以相互导数据&#xff0c;比如我们来实现这个题目的push函数&#xff0c;我们的栈…

面试其他注意事项

面试其他注意事项 一、面试反问 这个岗位的日常工作和主要职责是什么&#xff1f;咱们这边主要负责什么业务&#xff0c;用到了哪些技术呢&#xff1f;对于我们校招生有没有培养体系呢&#xff1f;脱产培训&#xff0c;还是边工作边熟悉&#xff1f;会有导师带嘛&#xff1f;…

飞书开发学习笔记(八)-开发飞书小程序Demo

飞书开发学习笔记(八)-开发飞书小程序Demo 一.小程序开发概述 1.1 小程序开发概述 飞书开发文档中查看&#xff1a;小程序开发概述 飞书小程序是指可以运行在飞书客户端中的小程序&#xff0c;小程序的一套代码可以适配 Android、iOS、PC 多平台&#xff0c;且用户体验与飞书…

计算机多媒体

1&#xff0c;媒体、多媒体 2&#xff0c;体系结构 3&#xff0c;采样、编码

公寓水电管理系统

springbootmybatisthymeleaf 这次练习是尝试将layer与系统结合起来&#xff0c;将新增、修改、删除都和弹窗结合起来。 一、需求分析 二、数据库 三、模块 1、登录页面 哈哈哈&#xff0c;之前做的登录页面都好丑&#xff0c;这是目前做的最好看的一次了。 超级管理员&…

卷积神经网络(CNN)鲜花的识别

文章目录 前期工作1. 设置GPU&#xff08;如果使用的是CPU可以忽略这步&#xff09;我的环境&#xff1a; 2. 导入数据3. 检查数据 二、数据预处理1. 加载数据2. 可视化数据3. 再次检查数据4. 配置数据集 三、构建CNN网络四、编译五、训练模型六、模型评估 前期工作 1. 设置GP…

串口通信原理及应用

Content 1. 前言介绍2. 连接方式3. 数据帧格式4. 代码编写 1. 前言介绍 串口通信是一种设备间非常常用的串行接口&#xff0c;以比特位的形式发送或接收数据&#xff0c;由于成本很低&#xff0c;容易使用&#xff0c;工程师经常使用这种方式来调试 MCU。 串口通信应用广泛&a…

【教3妹学编程-算法题】高访问员工

2哥 : 3妹&#xff0c;今天周五怎么还下班这么晚啊&#xff1f;这么晚了才回来 3妹&#xff1a;项目快上线了&#xff0c; 最近事情比较多&#xff0c;再累也要干&#xff0c; 撸起袖子加油干&#xff01; 2哥 : 辛苦辛苦&#xff0c; 哎&#xff0c;你看到王自如格力那个采访了…

叮!您收到了一封来自达坦科技的Hackthon邀请函

DatenLord Hackathon 2023正式启动&#xff01;达坦科技基于其跨云分布式文件系统DatenLord项目&#xff0c;结合AI大模型时代背景&#xff0c;搭建了擂台&#xff0c;在此正式向您发出邀约&#xff01; 本次大赛赛题深刻有趣&#xff0c;奖品丰厚多样&#xff0c;借此机会您不…

034、test

之——全纪录 目录 之——全纪录 杂谈 正文 1.下载处理数据 2.数据集概览 3.构建自定义dataset 4.初始化网络 5.训练 杂谈 综合方法试一下。 leaves 1.下载处理数据 从官网下载数据集&#xff1a;Classify Leaves | Kaggle 解压后有一个图片集&#xff0c;一个提交示…