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 小结 🎈个人主页…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...
使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...
云计算——弹性云计算器(ECS)
弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...
Prompt Tuning、P-Tuning、Prefix Tuning的区别
一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...
边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...
postgresql|数据库|只读用户的创建和删除(备忘)
CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...
