ROS2基础知识

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进行处理,非常感谢!

上一篇 2022年9月22日
下一篇 2022年9月22日

相关推荐