当前位置: 首页 > news >正文

Ubuntu 的 ROS 2 操作系统安装与测试

引言

在这里插入图片描述


学习目标

在这里插入图片描述


学习内容

1 设置系统语言环境

ROS 2 Humble Hawksbill是ROS 2的稳定版本之一,支持Ubuntu Jammy (22.04)。安装此版本在最新的平台上使用ROS 2进行机器人开发。

确保系统支持UTF-8编码格式。对于Docker等最小化环境,执行以下命令:

locale  # 查看当前编码
sudo apt update && sudo apt install locales
sudo locale-gen en_US en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
export LANG=en_US.UTF-8
locale  # 验证设置

2 设置软件源

在Ubuntu系统中添加ROS 2的APT软件源。

2.1 确保Ubuntu的universe仓库已启用
# 在Ubuntu系统中添加ROS 2APT软件源
sudo apt install software-properties-common
# 确保Ubuntu的universe仓库已启用
sudo add-apt-repository universe
2.2 添加ROS 2的GPG密钥
# 添加ROS 2GPG密钥
sudo apt update && sudo apt install curl -y
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
2.3 添加ROS 2的APT源到系统源列表
# 添加ROS 2APT源到系统源列表
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null

3 安装ROS 2 Humble包

3.1 环境配置

更新APT缓存并确保系统已更新。

# 更新APT缓存并确保系统已更新
sudo apt update
# 更新系统以避免系统包冲突
sudo apt upgrade  
3.2 根据需求选择安装的ROS 2版本

3.2.1 桌面版安装(推荐):包括ROS、RViz、示例和教程,适合开发和仿真。

# 安装推荐的桌面版(包括ROS、RViz、示例、教程)
sudo apt install ros-humble-desktop

3.2.2 基础版安装(精简版):仅包含通信库、消息包和命令行工具,不包括GUI工具。

# 安装基础版(仅包含核心通信库和命令行工具)
sudo apt install ros-humble-ros-base

3.2.3 开发工具安装:提供编译器和其他构建ROS包的工具。

# 开发工具(编译器等)
sudo apt install ros-dev-tools

4 环境配置

4.1 环境配置

每次在终端中使用ROS 2时,都需要source环境配置文件:

# source环境配置文件
source /opt/ros/humble/setup.bash
4.2 简化操作

为了简化操作,可以将其添加到.bashrc文件中,使其在每次新终端启动时自动source:

# 在.bashrc中加入ROS的环境变量设置,使其每次启动终端时自动加载
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc# 更新.bashrc文件使其生效
source ~/.bashrc

5 验证安装

安装完成后,验证安装的ROS 2 Humble系统是否可以正常使用。

5.1 检查ROS 2版本
# 检查ROS 2版本
ros2 --version

输出安装的ROS 2版本,本文安装为 humble,如果输出正确版本说明ROS 2已经成功安装。

5.2 检查ROS 2环境
# 检查ROS 2环境
echo $ROS_DOMAIN_ID
  • 若显示出设定的ROS_DOMAIN_ID,则表明环境配置正确。
  • 如果没有输出,请重新执行source /opt/ros/humble/setup.bash,或将此命令添加至~/.bashrc文件中。
5.3 ROS 2核心
  • 在ROS 2中,不再需要像ROS 1那样手动启动roscore。
  • ROS 2的通信机制是基于DDS中间件,自动处理节点间的发现和通信。
5.4 运行ROS 2示例节点(验证ROS 2通信机制)

ROS 2提供了一些示例节点,可以用来验证安装:

# 发布消息
ros2 run demo_nodes_cpp talker

然后在另一个终端运行:

# 接收消息
ros2 run demo_nodes_py listener

若两个节点能够正常通信并在终端显示传输的消息,则说明ROS 2已经正确安装并配置完毕。


小结

  • 通过本次安装与配置,在Ubuntu系统上成功部署了ROS 2 Humble环境,并验证了其核心功能的运行情况。
  • 本文详细介绍了从设置系统语言、配置APT源,到安装ROS 2及其基本工具包的各个步骤,同时也展示了环境配置和通信测试的方法。完成这些步骤后,用户可以顺利使用ROS 2进行机器人应用的开发和实验,为后续的工作打下坚实基础。
  • ROS 2 Humble版本在通信机制、性能和灵活性上相较于ROS 1有显著提升,更适合复杂的机器人系统开发。未来,可以进一步学习ROS 2的开发工具和实际项目应用,实现机器人功能的扩展与优化。

欢迎大家评论留言!!!


友情提示:

  • 专栏:Turtlebot3 PC端ROS环境搭建与仿真
  • 下一节:Ubuntu 的 ROS 操作系统turtlebot3环境搭建

相关文章:

Ubuntu 的 ROS 2 操作系统安装与测试

引言 机器人操作系统(ROS, Robot Operating System)是一种广泛应用于机器人开发的开源框架,提供了丰富的库和工具,支持开发者快速构建、控制机器人并实现智能功能。 当前,ROS 2 的最新长期支持版本为 Humble Hawksbil…...

在双显示器环境中利用Sunshine与Moonlight实现游戏串流的同时与电脑其他任务互不干扰

我和老婆经常会同时需要操作家里的电脑,在周末老婆有时要用电脑加班上网办公,而我想在难得的周末好好地Game一下(在客厅用电视机或者平板串流),但是电脑只有一个,以往我一直都是把电脑让给老婆,…...

ElasticSearch备考 -- Cross cluster replication(CCR)

一、题目 操作在cluster1(local)中操作索引task,复制到cluster2(remote)中 二、思考 CCR 我们可以对标MySQL 理解为为主从,后者备份。主节点负责写入数据,从/备节点负责同步时主节点的数据。 …...

windows C#-异常处理

C# 程序员使用 try 块来对可能受异常影响的代码进行分区。 关联的 catch 块用于处理生成的任何异常。 finally 块包含无论 try 块中是否引发异常都会运行的代码,如发布 try 块中分配的资源。 try 块需要一个或多个关联的 catch 块或一个 finally 块,或两…...

边缘计算在智能制造中的应用

💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 边缘计算在智能制造中的应用 边缘计算在智能制造中的应用 边缘计算在智能制造中的应用 引言 边缘计算概述 定义与原理 发展历程 …...

点云开发:从入门到精通的全面教程

简介 点云技术已成为计算机视觉、自动驾驶、3D重建等领域的重要组成部分。本教程旨在引导你从零基础开始学习点云开发,深入理解其背后的数学原理,并提供实用的开发技巧。 章节目录 点云技术概述 点云的定义及应用场景点云数据的来源和采集工具点云数据…...

【含文档】基于ssm+jsp的商店会员系统(含源码+数据库+lw)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: apache tomcat 主要技术: Java,Spring,SpringMvc,mybatis,mysql,vue 2.视频演示地址 3.功能 系统定义了两个…...

【大数据学习 | kafka高级部分】文件清除原理

2. 两种文件清除策略 kafka数据并不是为了做大量存储使用的,主要的功能是在流式计算中进行数据的流转,所以kafka中的数据并不做长期存储,默认存储时间为7天 那么问题来了,kafka中的数据是如何进行删除的呢? 在Kafka…...

dolphin 配置data 从文件导入hive 实践(一)

datax 支持多种数据源的相互读写,作为开源软件,提供了离线采集功能,方便系统开发,过程中遇到诸多配置,需要开发者自己探索,免费同样有成本 配置模板 {"setting": {},"job": {"s…...

Docker Compose部署Rabbitmq(脚本下载延迟插件)

整个工具的代码都在Gitee或者Github地址内 gitee:solomon-parent: 这个项目主要是总结了工作上遇到的问题以及学习一些框架用于整合例如:rabbitMq、reids、Mqtt、S3协议的文件服务器、mongodb github:GitHub - ZeroNing/solomon-parent: 这个项目主要是…...

麦当劳自助点餐机——实现

餐厅自助点餐优点 1. 降低服务成本: - 减少了对服务员数量的需求,降低了人力成本。 - 减轻了服务员的工作负担,使其能够更专注于提供优质的服务,如解决顾客的特殊需求和处理复杂问题。 2. 提升点餐效率和准确性&#xf…...

C++ STL CookBook 6:STL Containers (I)

目录 顺序容器 关联容器 容器适配器 使用统一擦除函数从容器中删除指定项 在恒定时间内对一个对排序不敏感的vector中删除项目 如果不确定自己访问容器会不会越界,那就使用.at方法而不是[] 在我们开始之前,先来回顾一下传统的经典的几个容器&#…...

行转列实现方式总结

前言 在日常开发中遇到了,需要对表中数据某个字段行数据转成列,个人觉得这中做目前想到两种, 一种是sql 操作, 另一种代码中做逻辑处理。 方式一 Java 操作 import lombok.Data;import java.util.ArrayList; import java.util.H…...

【go从零单排】初探goroutine

🌈Don’t worry , just coding! 内耗与overthinking只会削弱你的精力,虚度你的光阴,每天迈出一小步,回头时发现已经走了很远。 📗概念 Goroutines 是 Go 语言中的一种轻量级线程,用于并发编程。它们允许程…...

HarmonyOS NEXT应用元服务开发Intents Kit(意图框架服务)本地搜索接入方案

一、方案概述 当用户使用应用/元服务时,开发者可以按照标准意图Schema向系统共享数据,并支持意图调用(空调用与传参调用),以实现用户点击卡片后,可后台执行功能(例如播放指定歌曲)或…...

C语言可变参数列表编程实战指南:从基础概念到高级应用的全面解析

引言 在C语言中,可变参数列表的功能使得函数能够灵活地处理不确定数量的输入参数。本文将深入探讨可变参数列表的基础概念、技术原理及其在实际编程中的应用,帮助开发者更好地理解和使用这一特性。 一、可变参数列表的基本概念 1.1 什么是可变参数列表…...

AndroidStudio-文本显示

一、设置文本的内容 1.方式&#xff1a; &#xff08;1&#xff09;在XML文件中通过属性&#xff1a;android:text设置文本 例如&#xff1a; <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.andr…...

HBuilderX运行微信小程序,编译的文件在哪,怎么运行

1. 点击HBuilderX顶部的运行-运行到小程序模拟器-微信开发者工具&#xff0c;就会开始编译 2. 编译完成后的文件在根目录找到 unpackage -- dist -- dev -- mp-weixin, 这里面就是编译后的文件&#xff0c;如果未跳转到开发者工具&#xff0c;那可能是没设置启动路径&#xff0…...

百亿AI数字人社会初现:Project Sid展示智能代理文明进化路径

项目背景 Project Sid 是一项开创性的AI代理人文明实验,旨在通过新开发的认知架构 PIANO 探讨AI代理人是否能够在大规模数字社会中实现文明的演进。这项实验不仅展示了社会进步、角色分化、治理体系及文化传播等特征,还揭示了一个包含百亿“数字人类”的社会可能性。 PIANO…...

代码随想录训练营Day21 | 491.递增子序列 - 46.全排列 - 47.全排列 II - 332.重新安排行程 - 51.N皇后 - 37.解数独

491.递增子序列 题目链接&#xff1a;491.递增子序列思路&#xff1a;和子集那道题思路很像&#xff0c;每次在数组中选择一个数&#xff0c;选过的数不能选择&#xff0c;这里要求集合数量必须大于2个才能符合&#xff0c;仍然需要去重&#xff0c;但这里选额的是子序列&…...

多用户商城系统的功能及设计和开发

多用户商城系统的功能及设计与开发&#xff08;基于 PHP MySQL&#xff09; 在现代电子商务平台的开发中&#xff0c;PHP MySQL 是一对非常流行且高效的技术栈。PHP作为服务器端脚本语言&#xff0c;结合MySQL数据库&#xff0c;可以高效地处理多用户商城系统的各种需求。本…...

2024年11月8日day8

半加器和全加器的区别 半加器&#xff1a;只能处理两个二进制位的相加&#xff0c;无法处理进位。全加器&#xff1a;不仅能处理两个二进制位的相加&#xff0c;还能处理来自低位的进位。 ⑴ 完成满足754标准存储格式的浮点数&#xff08;(43940000)16的十进制数值&#xff09…...

Debezium系列之:Debezium3版本增量快照和只读增量快照应用的变化

Debezium系列之:Debezium3版本增量快照和只读增量快照应用的变化 一、需求背景二、基于数据库信号表使用增量快照案例三、基于Kafka信号Topic使用增量快照案例四、只读增量快照案例五、增量快照技术总结增量快照相关知识请阅读博主下面系列文章: Debezium系列之:实现增量快照…...

Python正则表达式1 re.match惰性匹配详解案例

点个关注 re.match() re.match() 函数尝试从字符串的开头开始匹配一个模式&#xff0c;如果匹配成功&#xff0c;返回一个匹配成功的对象&#xff0c;否则返回None。大小写区分&#xff0c;内容匹配不到后面的,只能匹配一个&#xff0c;不能有空格&#xff08;开头匹配&#…...

WPF(C#)学习日志10:Prism框架下按键绑定

在Prism框架下&#xff0c;提供了DelegateCommand类用于处理了UI的按键请求&#xff0c;XAML中可以直接采用 Command"{Binding **}" 来绑定这些方法。这个类是一个泛型的类生命时仅需要DelegateCommand<T>即可&#xff0c;同时在XAML中绑定CommandParameter&qu…...

WPF中的ResizeMode

在 WPF (Windows Presentation Foundation) 中&#xff0c;ResizeMode 属性用于指定窗口是否可以被用户调整大小&#xff0c;以及如何调整大小。ResizeMode 属性可以设置为以下几个值之一&#xff1a; NoResize&#xff1a;窗口不能被用户调整大小&#xff0c;但可以被程序代码…...

Unity3D UI 双击和长按

Unity3D 实现 UI 元素双击和长按功能。 UI 双击和长按 上一篇文章实现了拖拽接口&#xff0c;这篇文章来实现 UI 的双击和长按。 双击 创建脚本 UIDoubleClick.cs&#xff0c;创建一个 Image&#xff0c;并把脚本挂载到它身上。 在脚本中&#xff0c;继承 IPointerClickHa…...

LabVIEW扫描探针显微镜系统

开发了一套基于LabVIEW软件开发的扫描探针显微镜系统。该系统专为微观尺度材料的热性能测量而设计&#xff0c;特别适用于纳米材料如石墨烯、碳纳米管等的研究。系统通过LabVIEW编程实现高精度的表面形貌和热性能测量&#xff0c;广泛应用于科研和工业领域。 项目背景 随着纳…...

问题式教学法在生物教学中的应用探索

问题式教学法在生物教学中的应用探索 李新 山东省德州市平原县第五中学 山东 德州 253100 摘要&#xff1a;时代在发展教育事业也在不断进步&#xff0c;不断创新教学方法有利于提高教学质量。问题教学法能让教材知识点以问题的形式呈现在学生眼前&#xff0c;这对引导学生…...

C++ | Leetcode C++题解之第556题下一个更大元素III

题目&#xff1a; 题解&#xff1a; class Solution { public:int nextGreaterElement(int n) {int x n, cnt 1;for (; x > 10 && x / 10 % 10 > x % 10; x / 10) {cnt;}x / 10;if (x 0) {return -1;}int targetDigit x % 10;int x2 n, cnt2 0;for (; x2 …...

深做网站公司/今日热点新闻

您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以便在第4行的“WHERE j.id_customer 1”附近使用正确的语法SELECT j.id_customer, j.id_order, m.id_shopFROM ps_orders jLEFT JOIN ps_order_detail mWHERE j.id_customer 1这是从prestashop php中的原始代码生成的,如…...

响应式网站是/简述seo的基本步骤

计算机与plc连接方式PLC与计算机的连接有以下3种。1、使用计算机的RS232C端口与PLC的编程口直接相连。2、通过网络、与其他站点的PLC进行通信。3、通过调制解调器&#xff0c;与远程的PLC进行通信。一、使用计算机的RS232C端口与PLC的编程口直接相连的情况①设置PLC的通信条件。…...

制作公司网站教程/衡水网站seo

新建mfc应用程序&#xff0c;单文档增加绘图分别增加命令响应添加成员变量UINIT图形可以运行&#xff0c;如何保存呢&#xff1f;(一个集合类&#xff0c;CPtArt)用一个类的对象来保存一个图形的三个要素所以插入一个新的类(通常的类)增加三个成员变量&#xff0c;第一个类型&a…...

《动态网站建设》第04章在线测试/百度推广公司哪家比较靠谱

Lambda定义 lambda 表达式总是括在花括号中&#xff0c; 完整语法形式的参数声明放在花括号内&#xff0c;并有可选的类型标注&#xff0c; 函数体跟在一个 -> 符号之后。如果推断出的该 lambda 的返回类型不是 Unit&#xff0c;那么该 lambda 主体中的最后一个&#xff08;…...

女生做网站编辑怎么样/新乡seo优化

1、打开设置 2、勾选编码格式&#xff0c;在这里可以设置分别设置IDE、Project、File等级别的编码格式。 3、查看、修改各个文件的编码 4、当右击编辑界面时&#xff0c;可以直接设置当前文件的编码 转载于:https://www.cnblogs.com/begin1949/p/4967140.html...

公司注册代办价格/云南seo公司

一、指针&(取地址运算符)&#xff1a;单目运算符&#xff0c;返回一个变量的地址*(指针运算符)&#xff1a;单目运算符&#xff0c;返回的是一个地址里面的变量的数据。&和*具有相同的优先级&#xff0c;自右向左结合。*只有在声明的是时候表示是指针&#xff0c;其他任…...