ROS2学习笔记
———————————————–学习ing———————————-
参考 址
ROS2 humble官方教程 址
【鱼香ROS】动手学ROS2|ROS2基础入门到实践教程|小鱼带你手把手学习ROS2
目录
- ROS2学习笔记
- ROS2基础知识内容
-
- 一、设置环境
-
- 先决条件
- 1.设置配置文件
- 3.检查环境变量
- Domain ID
- 二、使用`turtlesim`和`rqt`
-
- 介绍
- 1.Install turtlesim
- 2. Start and use turtlesim
- 3. Install rqt
- 4. Use rqt
-
- spawn service
- set_pen service
- 重映射
- 三、Node
-
-
- 运行节点和查看节点
-
- 四、Topic
-
-
- Topics相关指令
-
- 五、Service
-
- 相关指令
- 六、Param
-
- 相关指令
- 七、Action
-
- 相关指令
- 八、`rqt_console`查看日志
-
- 相关指令
- 九、一次性启动多个节点
- 十、ROS2 bag
-
- 相关指令
- 十一、colcon构建
-
- 安装colcon
- ROS2工作区及工作包
-
- 一、工作区相关操作
-
- 创建工作区目录
- 解决依赖关系
- 构建工作区
- 引用覆盖层
- 引用环境
- 二、创建ROS2工作包
-
- Cmake制作工作包
- Python制作工作包
- 创建包操作
- 手撸ROS2节点
-
- 一、使用python手撸一个节点
-
- 1.1.编写节点(基于面向过程)
-
- 1.新建功能包
- 2.编写代码
- 3.修改setup.py
- 4.编译并添加到系统环境
- 1.2.OOP(面向对象编程思想)
-
- 三种常用编程思想
- 1.3.编写节点(基于面向对象)
- 二、使用C++手撸节点
-
- 2.1.编写节点(基于面向过程)
-
- 1.新建功能包
- 2.编写代码
- 3.添加入口函数指令到CMake文件
- 4.编译并添加到系统中
- 2.2.编写节点(基于面向对象)
- 手撸ROS2话题
-
- publisher的编写逻辑
- 一、使用python编写话题
-
- 1、编写发布者(publisher)
- 2、编写订阅者(subscription)
- 二、使用C++编写话题
-
- 1.编写订阅者(subscription)
- 2.编写发布者(publisher)
- 查看计算图
- ROS2接口说明
-
- 一、自定义接口
- 二、ROS2接口常用CLI命令
- 三、自定义ROS2话题接口
-
- 如何自定义话题接口
-
- 3.1.新建工作空间
- 3.2.新建msg文件夹和Novel.msg文件
- 3.3.编写Novel.msg内容
- 3.4.修改CMakeLists.txt
- 3.5.修改package.xml文件
- 3.6.编译并验证
- 手撸ROS2服务
-
- 一、创建“借钱”服务接口
-
- 1.1确认数据结构
- 1.2创建`srv`文件夹及`BorrowMoney.srv`消息文件
- 1.3修改`CMakeLists.txt`
- 1.4编译并验证
- 二、创建“买书“服务接口
- 三、使用python实现服务通信
-
- 3.1服务端编写
-
- 3.1.1导入服务接口
- 3.1.2编写python代码
- 3.1.3编译并运行
- 3.2客户端编写
-
- 3.2.1创建新的节点并导入服务接口
- 3.2.2编译并运行
- 四、使用C++实现服务通信
-
-
- 4.1.1导入服务接口
-
- ROS2常用工具
-
- 一、launch文件
-
- 编写ROS2的launch文件
ROS2基础知识内容
一、设置环境
先决条件
需要按照安装教程安装,如果直接采用从源代码进行安装,将无法使用指令。
Linux环境
1.设置配置文件
3.检查环境变量
当你添加了ROS2设置文件到环境中,使用以下代码来检查你是否设置成功
检查打印的信息中关于ROS2版本和python版本是否符合你安装的时候的要求
Domain ID
在ROS2中,在默认中间层是使用的DDS进行通信,而在DDS中,使不同逻辑 络共享物理 络的主要机制称为域ID(Domain ID),ROS2的各个节点,在相同域下可以自由互相收发信息。在不同域下是不行的。所有的ROS2使用0作为默认域ID,为了避免在同一个 络下不同电脑运行ROS2系统的干扰,不同组应该具有不同的域ID。
一般域ID从0—101中进行选择。
由于DDS其实通过UDP端口 进行计算的,而UDP端口 是使用的unsigned 16bit类型,因此最大的端口 可以到65535,而通过两者的换算公式,我们可以算出Domain ID可以从0-232
在Linux系统中,由于Linux内核使用了32768-60999作为临时端口,因此Domain ID从0-101和215-232是不会和临时端口互相冲突的。可在中设置Linux内核的临时端口。
Domain ID介绍和UDP端口计算方式
设置Domain ID
将设置Domain ID到默认bash开机脚本中,减少二次设置
二、使用和
介绍
Turtlesim是一个学习ROS2的轻量级模拟器,能告诉你ROS2一些基本操作。
rqt是一个ROS2的GUI工具,更好的用户主机协同软件
1.Install turtlesim
2. Start and use turtlesim
应该返回蓝色界面,中间有一只海龟
打开另一个终端,进行海龟的操控
3. Install rqt
安装
运行
4. Use rqt
- 下面操作需要开启前面的turtlesim
在运行的rqt后,在选择需要的服务
spawn service
重映射
重映射可以将默认的节点名字修改为自定义值
三、Node
ROS中每个节点都应负责一个单一的模块用途,比如一个节点控制电机,一个节点控制激光测距。每个节点可以通过topics, services, action or parameters来发送或者接受信息。
一个完整的机器人系统应该由许多中心的节点组成,在ROS2中,一个单独的进程(C++或者python程序)可以包含一个或多个节点。
运行节点和查看节点
可以使用来运行可执行包
可以使用以下指令查看运行节点
使用下面的指令查看啊你的节点的更多详细信息
四、Topic
- Topic是ROS2中最重要的用来交换信息的总线,一个节点可以发布任何数量的信息到topics,也可以从topics收取任何数量的信息
- topic分为发布者和接收者
- 话题名字是关键,发布订阅接口要相同。
- 同一个话题可以有多个发布者
Topics相关指令
查看节点的连接方式和Topics,rqt_graph是非常重要的一个工具
topic相关指令
查看话题的消息类型
在我们知道了变量的名字之后,我们就可以直接发布信息到我们需要的topic当中,格式如下:
-
代表了你需要发给topic的实际信息
-
可以添加参数,不然会一直发送消息,并且会返回给你是否发送成功的消息
-
可以添加参数,代表着以1Hz的速度发送消息给topic
查看topic接受和发布信息的频率
五、Service
service是在ROS节点通信系统中的另一种通信方式,这是一种基于呼叫—回复的模型,和topic的订阅—发布的模型是不一样的
service仅仅会在他们被client委托时才会提供数据。service的client可以有很多个,但是在某个时间内只能有一个客户来获取服务
服务是双向的,客户端发送请求,服务端响应请求
话题是单向的,没有返回的,适用于大量的或单向的数据传输
- 同一个服务(名称相同)有且只能有一个节点来提供
- 同一个服务器可以被多个客户端调用
例子:
相关指令
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!