ROS 2官方文档(基于humble版本)学习笔记(一)
ROS 2官方文档(基于humble版本)学习笔记(一)
- 一、安装ROS 2
- 二、按教程学习
- 1.CLI 工具
- 配置环境
- 使用turtlesim,ros2和rqt
- 安装 turtlesim
- 启动 turtlesim
- 使用 turtlesim
- 安装 rqt
- 使用 rqt
- 重映射
- 关闭turtlesim
由于市面上专门讲ROS 2开发的书籍不多,近期看完了《ROS机器人开发实践》其中大部分内容还是基于ROS 1写的,涉及topic,service,action等一些重要的概念,常用组件,建模与仿真,应用(机器视觉,机器语音,SLAM,机械臂),最后一章写了ROS 2的安装,话题通信和服务通信的示例。总觉得不是太系统,于是决定按着ROS官方文档学习ROS 2,把学习过程中的要点记录下来。
一、安装ROS 2
官方提供了部分操作系统平台的ROS 2的二进制安装包,分别为Ubuntu Linux、RHEL、Windows,不同ROS 2的版本对应的Linux版本也略有不同。
截至目前有两个ROS 2的版本还没有到项目终止日期(EOL end-of-life),一个是最新的发布版本为Iron Irwini,发布时间是2023年5月23日,EOL date是2024年11月,另一个是Humble Hawksbill,发布时间是2022年5月23日,EOL date是到2027年5月,比较后我选择了Humble这个版本来学习。
为了方便,我选择了直接安装二进制安装包,首先在虚拟机上安装了Ubuntu 22.04(Jammy),
然后按照官方文档一步一步安装即可。
命令整理如下:
#--------准备工作--------
#1.确保有universe源
sudo apt install software-properties-common
sudo add-apt-repository universe
#2.获取ROS 2 GPG key以便在接下来的apt命令中使用
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
#3.将ROS仓库加入sources list列表
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#--------安装ROS包--------
#1.更新源
sudo apt update
sudo apt upgrade
#2.安装桌面版(包含了ROS-Base)
sudo apt install ros-humble-desktop
#3.安装开发包
sudo apt install ros-dev-tools#--------设置环境(这一步很重要,后面使用到ROS的地方都需要执行此命令,所以一般可以直接写到.bashrc中--------
source /opt/ros/humble/setup.bash
这里值得注意的是获取ROS 2 GPG key的地方,可能由于某些原因不能获取到,就需要科学上网了,这个不再赘述(其实我还真是折腾了一阵子)。
二、按教程学习
1.CLI 工具
配置环境
首先还是上一步中最后提到的设置环境,可以通过如下命令查看环境变量:
printenv | grep -i ROS
此外还要设置以下两个环境变量:
ROS_DOMAIN_ID:可以为一个ROS节点组设置唯一的一个编号,在DDS中,使不同逻辑网络共享一个物理网络的主要机制被称为域ID,相同域ID的ROS2节点可以互相友好的发现和发送消息,而不同域ID的节点之间则不行。所有的ROS2节点默认域ID为0。为了避免在同一网络上运行ROS 2的不同计算机组之间的干扰,应为每个组设置不同的域ID。简单来说,域ID被DDS用来计算将用于发现和通信的UDP端口,只需要将域ID设置为[0,101]之间的数字即可,深究的话可以参考这里。
ROS_LOCALHOST_ONLY:ROS2通信默认不会只限制本地的。这个环境变量就是用来限制这个的。这意味着你的ROS2系统和他的话题(topic),服务(service),动作(action)对本地网络中的其他计算机不可见。在特定场合设置该项是有帮助的,比如在教室里,多个机器人可能会发布相同的话题,从而导致奇怪的行为。
使用turtlesim,ros2和rqt
turtlesim是一个用来学习ROS 2轻量模拟器。ros2工具可以被用户用于管理,内查并与一个ROS系统交互。它是安装ROS 2的一部分。rqt是ROS 2的一个图形用户接口(GUI)工具。
安装 turtlesim
sudo apt update
sudo apt install ros-humble-turtlesim
查询一个包的可执行程序(这个个人感觉还是很有用的)
ros2 pkg executables turtlesim
启动 turtlesim
执行如下命令会出现一个模拟窗口,窗口正中有一个随机形状的乌龟。
ros2 run turtlesim turtlesim_node
使用 turtlesim
重新打开一个终端,设置环境,执行如下命令后,可以通过键盘上的箭头按键控制乌龟的移动,并留下移动的轨迹。
使用list命令可以查看节点,话题,服务,动作信息,具体如下:
ros2 node list
ros2 topic list
ros2 service list
ros2 action list
安装 rqt
sudo apt update
sudo apt install ~nros-humble-rqt*
在终端键入rqt,启动rqt程序。
使用 rqt
首次启动时,界面内容是空白的,只需要选择Plugins > Services > Service Caller,如果点击Plugins没有看到Services,你应该关闭rqt并在终端输入rqt --force-discover
。
1.选中/spawn服务(该服务用于产生另一只的乌龟),修改name参数给这个乌龟重命名,修改x,y的值给这个乌龟设置新的位置,然后点击Call按钮,完成修改。
2.选中/set_pen服务,修改r,g,b的值设置乌龟轨迹的颜色。
重映射
由于新创建的控制终端(turtle_teleop_key)还是只能控制第一只乌龟,为了让控制终端可以控制新产生的乌龟,使用如下命令重定向cmd_vel话题。
ros2 run turtlesim turtle_teleop_key --ros-args --remap turtle1/cmd_vel:=turtle2/cmd_vel
这个终端就可以控制新产生的乌龟了,再启动一个turtle_teleop_key的终端又可以控制第一只乌龟了。
关闭turtlesim
可以在turtlesim_node终端输入Ctrl + C
并且在turtle_teleop_key终端输入q
。
相关文章:

ROS 2官方文档(基于humble版本)学习笔记(一)
ROS 2官方文档(基于humble版本)学习笔记(一) 一、安装ROS 2二、按教程学习1.CLI 工具配置环境使用turtlesim,ros2和rqt安装 turtlesim启动 turtlesim使用 turtlesim安装 rqt使用 rqt重映射关闭turtlesim 由于市面上专门…...

【数据结构】十字链表的画法
十字链表的基本概念 有向边又称为弧 假设顶点 v 指向 w,那么 w 称为弧头,v 称为弧尾 顶点节点采用顺序存储 顶点节点 data:存放顶点的信息firstin:指向以该节点为终点(弧头)的弧节点firstout࿱…...

使用rabbitmq进行支付之后的消息通知
订单服务完成支付后将支付结果发给每一个与订单服务对接的微服务,订单服务将消息发给交换机,由交换机广播消息,每个订阅消息的微服务都可以接收到支付结果. 微服务收到支付结果根据订单的类型去更新自己的业务数据。 相关技术方案 使用消息…...

【100天精通python】Day47:python网络编程_Web开发:web服务器,前端基础以及静态服务器
目录 1 网络编程与web编程 1.1 网络编程 1.2 web编程 1.3 前后端交互的基本原理 2 Web开发基础 2.1 HTTP协议 2.2 Web服务器 2.3 前端基础 2.3.1 HTML(超文本标记语言) 2. 3.2 CSS(层叠样式表) 2.3.3 JavaScript 2.…...
Web框架Beego
beego简介第一个beego项目beego项目结构分析bee 工具简介beego参数配置beego路由设置beego控制器介绍beego获取参数beego ORMbeego orm高级查询beego 原生sql查询beego 模板语法指南beego模板处理...

Kubernetes(K8s)基本环境部署
此处只做学习使用,配置单master环境。 一、环境准备 1、ip主机规划(准备五台新机)>修改各个节点的主机名 注意:关闭防火墙与selinux 节点主机名ip身份joshua1 kubernetes-master.openlab.cn 192.168.134.151masterjoshua2k…...

antd5:form组件底层封装库field-form-1.37.0启动
一开始node版本是18.16.0 npm install发现安装依赖成功 npm start发现启动出错 node:internal/crypto/hash:71this[kHandle] new _Hash(algorithm, xofLen);^Error: error:0308010C:digital envelope routines::unsupportedat new Hash (node:internal/crypto/hash:71:19)…...

深度学习经典检测方法的概述
深度学习经典的检测方法 two-stage(两阶段):Faster-rcnn Mask-Rcnn系列 两阶段(two-stage)是指先通过一个区域提取网络(region proposal network,RPN)生成候选框,再通过…...
viewpager2导致的mViews下标越界问题
viewpager2种在嵌套一个RecyclerView场景:左右滑动,上下滑动,出现mViews为null问题。 //RecyclerView布局为 new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL) 由于使用viewpager2导致布局缓存的销毁,会…...

无涯教程-JavaScript - NORMSDIST函数
NORMSDIST函数替代Excel 2010中的NORM.S.DIST函数。 描述 该函数返回标准正态累积分布函数。分布的平均值为0(零),标准偏差为1。使用此功能代替标准法线区域的表格。 语法 NORMSDIST (z)争论 Argument描述Required/OptionalZThe value for which you want the distributio…...
Mysql查询(SELECT)
基本查询:SELECT FROM SELECT 查询字段 FROM 表名; SELECT * FROM userinfo; 条件查询:用where表示查询条件 SELECT 查询字段 FROM 表名 WHERE 条件; 模糊查询:like %匹配0或多个字符,一般不用左模糊(%放在左边&…...

基于JAVAEE技术的ssm校园车辆管理系统源码和论文
基于JAVAEE技术的ssm校园车辆管理系统源码和论文105 开发工具:idea 数据库mysql5.7 数据库链接工具:navcat,小海豚等 技术:ssm 1.选题背景和意义 背景: 随着第二次工业革命后,内燃机的发明与完善,解…...

opencv-人脸识别
对https://blog.csdn.net/weixin_46291251/article/details/117996591这哥们代码的一些修改 import cv2 import numpy as np import os import shutil import threading import tkinter as tk from PIL import Image, ImageTkchoice 0# 首先读取config文件,第一行…...

九、idSpanMap使用基数树代替原本的unordered_map 十、使用基数树前后性能对比
九、idSpanMap使用基数树代替原本的unordered_map 我们原本的idSpanMap用的是STL容器中的unordered_map哈希桶,因为STL的容器本身是不保证线程安全的,所以我们在访问时需要加锁保证线程安全,这也就是我们写的内存池的性能的瓶颈点。因为我做…...

政府科技项目验收全流程分享
科技验收测试 (验收申请→主管部门初审→科技厅审核→组织验收→归档备案→信用管理): (一)验收申请 项目承担单位通过省科技业务管理系统提交验收申请。 按期完成的项目,项目承担单位应当在项目合同书…...

基于Matlab实现生活中的图像信号分类(附上源码+数据集)
在我们的日常生活中,我们经常会遇到各种各样的图像信号,例如照片、视频、图标等等。对这些图像信号进行分类和识别对于我们来说是非常有用的。在本文中,我将介绍如何使用Matlab来实现生活中的图像信号分类。 文章目录 介绍源码数据集下载 介…...

YOLOv5算法改进(12)— 替换主干网络之Swin Transformer
前言:Hello大家好,我是小哥谈。Swin Transformer是一种基于Transformer的深度学习模型,它在视觉任务中表现出色。与之前的Vision Transformer(ViT)不同,Swin Transformer具有高效和精确的特性,并…...
php 权限节点的位运算
一,概述 在 PHP 中,位运算可以用来进行权限节点的判断。通常,每个权限节点都会用一个不同的位表示(2的n次方,从0开始),可以将这些位组合成一个权限值。然后,可以使用位运算符来检查…...

ClickHouse进阶(六):副本与分片-2-Distributed引擎
进入正文前,感谢宝子们订阅专题、点赞、评论、收藏!关注IT贫道,获取高质量博客内容! 🏡个人主页:含各种IT体系技术,IT贫道_Apache Doris,大数据OLAP体系技术栈,Kerberos安全认证-CSDN博客 📌订阅…...

Git和Github的基本用法
目录 背景 下载安装 安装 git for windows 安装 tortoise git 使用 Github 创建项目 注册账号 创建项目 下载项目到本地 Git 操作的三板斧 放入代码 三板斧第一招: git add 三板斧第二招: git commit 三板斧第三招: git push 小结 🎈个人主页…...

UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具
文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...

HDFS分布式存储 zookeeper
hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架,允许使用简单的变成模型跨计算机对大型集群进行分布式处理(1.海量的数据存储 2.海量数据的计算)Hadoop核心组件 hdfs(分布式文件存储系统)&a…...

AI病理诊断七剑下天山,医疗未来触手可及
一、病理诊断困局:刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断",医生需通过显微镜观察组织切片,在细胞迷宫中捕捉癌变信号。某省病理质控报告显示,基层医院误诊率达12%-15%,专家会诊…...
在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案
这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...