ROS1 ROS2学习

2023-11-20

学习记录,方便查阅

安装 ROS

ROS1

赵虚左ROS理论与实践
ROS1教程
视频教程

ROS2

鱼香ROS
ROS2教程
视频教程

命令行界面

GUI(Graphical User Interface)就是平常我们说的图形用户界面,大家用的Windows是就是可视化的,我们可以通过鼠标点击按钮等图形化交互完成任务。
CLI(Command-Line Interface)就是命令行界面了,我们所用的终端,黑框框就是命令行界面,没有图形化。

ROS2 功能包相关指令

别人总结的功能包指令

用法: ros2 pkg [-h] 

Call `ros2 pkg <command> -h` 可以获得更多使用细节

各种与包有关的子命令

可选的参数:
  -h, --help            显示帮助并退出

Commands:
  create       创建一个新的ROS2功能包
  executables  列出包下的可执行文件
  list         输出有效的包的列表
  prefix       输出一个包的前缀路径
  xml          输出某个包的清单XML

  使用 `ros2 pkg <command> -h` 可以获得更多使用细节

ROS 命令行工具

别人总结的关于ROS2的命令行工具 CLI tools

ROS1 CLI工具

ROS(Robot Operating System)是一个灵活的框架,用于构建机器人软件。它提供了一种分布式计算的方式,使得机器人各个部分之间可以相互通信和协作。

ROS提供了一个命令行界面(CLI),用于管理和操作ROS系统。下面是一些常用的ROS CLI工具:

  • roscore:启动ROS的核心服务,包括参数服务器、消息传递系统等。

  • roslaunch:用于启动ROS包中的节点和参数配置文件,并可以同时启动多个节点。

  • rosrun:用于运行单个ROS节点。

  • rostopic:用于查看和发布ROS消息。

  • rosservice:用于调用和提供ROS服务。

  • rosbag:用于记录和回放ROS消息。

  • rqt_console:用于查看ROS系统的日志信息。

  • rqt_graph:用于查看ROS系统节点和主题之间的关系图。

以上只是一些常见的ROS CLI工具,ROS还提供了许多其他工具和命令,可以通过ROS的官方文档和ROS Wiki获取更详细的信息。

ROS2 CLI工具

ROS2 CLI(Command Line Interface)工具是ROS2的一些命令行工具的集合,用于在终端中执行ROS2相关操作.以下是一些常用的ROS2 CLI工具:

  • ros2 run: 运行ROS2节点,可以指定节点名称、包名、节点类型、参数等.

  • ros2 launch: 启动ROS2 launch文件,可以启动多个节点和参数.

  • ros2 node: 查看ROS2节点的信息,包括节点名称,发布和订阅的话题等.

  • ros2 topic: 查看ROS2话题的信息,包括话题名称,消息类型,发布和订阅的节点等.

  • ros2 service: 查看ROS2服务的信息,包括服务名称,服务类型,提供和调用服务的节点等.

  • ros2 param: 管理ROS2参数服务器,可以设置,获取和删除参数等.

  • ros2 bag: 记录和回放ROS2话题的数据,可以将数据保存到文件中,并在需要时回放数据.

  • ros2 msg/ros2 srv/ros2 action: 查看ROS2消息,服务和动作的信息,包括消息类型,消息字段,服务类型,服务请求和响应等.

这些ROS2 CLI工具可以通过在终端中输入命令来使用,例如,使用ros2 run运行ROS2节点:

ros2 run package_name node_name

使用ros2 launch启动ROS2 launch文件:

ros2 launch package_name launch_file_name.py

使用ros2 param设置ROS2参数:

ros2 param set param_name param_value

使用ros2 bag记录ROS2话题的数据:

ros2 bag record topic_name

等等.这些工具可以帮助用户在ROS2中进行各种操作,并提高ROS2的使用效率。

ROS 通信核心概念

节点 - Node

ROS中的每个节点都应负责单一的模块化用途,例如控制轮毂电机或从激光测距仪发布传感器数据。 每个节点都可以通过主题、服务、动作或参数从其他节点发送和接收数据。
一个完整的机器人系统由许多协同工作的节点组成。 在 ROS2 中,单个可执行文件(C++程序、Python 程序等)可以包含一个或多个节点。
请添加图片描述

节点相关的CLI

别人总结的关于ROS2的命令行工具 CLI tools

运行节点(常用)
ros2 run <package_name> <executable_name>

查看节点列表(常用):
ros2 node list

查看节点信息(常用):
ros2 node info <node_name>

重映射节点名称
ros2 run turtlesim turtlesim_node --ros-args --remap __node:=my_turtle

话题 - Topic

发布订阅模型
适用于节点间单向的频繁的数据传输
请添加图片描述

编写发布者程序流程:

  • 编程接口初始化
  • 创建节点并初始化
  • 创建发布者对象
  • 创建并填充话题消息
  • 发布话题消息
  • 销毁节点并关闭接口

编写订阅者程序流程:

  • 编程接口初始化
  • 创建节点并初始化
  • 创建订阅者对象
  • 回调函数处理话题数据
  • 销毁节点并关闭接口

话题相关的CLI

别人总结的关于ROS2的命令行工具 CLI tools

服务 - Service

服务端客户端(请求响应)模型
适用于节点间双向的数据传递
同时服务还是有一些注意事项:

  1. 同一个服务(名称相同)有且只能有一个节点来提供
  2. 同一个服务可以被多个客户端调用
    请添加图片描述

编写客户端程序流程

  • 编程接口初始化
  • 创建节点并初始化
  • 创建客户端对象
  • 创建并发送请求数据
  • 等待服务端应答数据
  • 销毁节点并关闭接口

编写服务端程序流程

  • 编程接口初始化
  • 创建节点并初始化
  • 创建服务端对象
  • 声明服务端名称和处理回调函数的名称
  • 通过回调函数进行服务
  • 向客户端反馈应答结果
  • 销毁节点并关闭接口

服务相关的CLI

别人总结的关于ROS2的命令行工具 CLI tools

查看服务列表
ros2 service list

手动调用服务

ros2 service call /add_two_ints example_interfaces/srv/AddTwoInts "{a: 5,b: 10}"

如果不写参数值调用会怎么样
ros2 service call /add_two_ints example_interfaces/srv/AddTwoInts

查看服务接口类型
ros2 service type /add_two_ints

查找使用某一接口的服务
这个命令看起来和上面刚好相反
ros2 service find example_interfaces/srv/AddTwoInts

参数 - Parameters

参数是节点的设置,用于配置节点,原理基于服务
参数是节点的配置值,用于动态调整节点的设置。 节点可以将参数存储为整数、浮点数、布尔值、字符串和列表。

参数相关的CLI

别人总结的关于ROS2的命令行工具 CLI tools

动作 - Action

动作Action的三大组成部分目标、反馈和结果。
动作适用于需要实时反馈的场景,原理基于话题和服务。

  1. 目标:即Action客户端告诉服务端要做什么,服务端针对该目标要有响应。解决了不能确认服务端接收并处理目标问题
  2. 反馈:即Action服务端告诉客户端此时做的进度如何(类似与工作汇报)。解决执行过程中没有反馈问题
  3. 结果:即Action服务端最终告诉客户端其执行结果,结果最后返回,用于表示任务最终执行情况。

参数是由服务构建出来了,而Action是由话题和服务共同构建出来的:

第一种:Action = 两个服务+一个话题

两个服务 一个话题
目标传递服务 反馈话题(服务发布,客户端订阅)
结果传递服务

第二种:一个Action = 三个服务+两个话题

三个服务 两个话题
目标传递服务 反馈话题(服务发布,客户端订阅)
结果传递服务 状态话题(服务端发布,客户端订阅)
取消执行服务

请添加图片描述

动作相关的CLI

别人总结的关于ROS2的命令行工具 CLI tools

通信接口 - Interface

ROS的通信系统,它的主要目的就是传输数据,让大家高效的建立连接,并且准确包装和解析传输的数据内容,话题、服务等机制,它们传输的数据,都要符合通信接口的标准定义。

  1. 定义服务通信的接口

  2. 话题消息的内容

  3. 完成定义后,还需要在功能包的CMakeLists.txt中配置编译选项,让编译器在编译过程中,根据接口定义,自动生成不同语言的代码。

修改CMakeLists.txt

rosidl_default_generators

rosidl_default_generators是ROS 2中一个命名空间,包含了用于生成ROS 2消息和服务的默认生成器。
在ROS 2中,rosidl是用于定义和生成消息和服务接口的工具。
rosidl_default_generators是ROS2中用于生成代码的工具。该工具通过解析ROS2的IDL文件,自动生成ROS2的消息、服务、动作等相关代码。rosidl_default_generators是rosidl框架中的一个重要组成部分,它提供了默认的生成器,用于将ROS 2接口定义文件(.msg和.srv)转换为相应的源代码。rosidl_default_generators包含了多个生成器,可以根据需要选择不同的生成器生成不同类型的代码.其中常用的生成器有:

在ROS2中,可以通过在CMakeLists.txt文件中调用rosidl_generate_interfaces函数,并指定生成器类型来生成IDL文件对应的代码,例如:

rosidl_generate_interfaces(${PROJECT_NAME}
  "msg/Example.msg"
  "srv/Example.srv"
  DEPENDENCIES builtin_interfaces
)

其中 ${PROJECT_NAME} 是ROS2的包名, “msg/Example.msg” 和 “srv/Example.srv” 是IDL文件的路径, DEPENDENCIES builtin_interfaces 指定了该IDL文件依赖的其他包.

CMake

cmake, ament_cmake和ament_python都是ROS2中常用的构建工具.

ament_python,适用于python程序
cmake,适用于C++
ament_cmake,适用于C++程序,是cmake的增强版

  • CMake是一个跨平台的构建工具,它使用类似make的语法来管理项目的构建过程.ROS2使用CMake作为默认的构建工具,通过CMake可以生成Makefile文件,进行源代码的编译,链接和打包等操作.

  • ament_cmake是ROS2中特有的扩展CMake的构建工具,它使用CMake的语法,但添加了许多ROS2的特性,例如自动生成ROS2的包依赖关系、编译ROS2的IDL文件、生成ROS2的launch文件等.ament_cmake包含了许多ROS2的常用函数和宏,可以大大简化ROS2的构建过程.

  • ament_python是ROS2中用于构建Python代码的工具,它使用ament_cmake作为构建系统,提供了生成Python模块,Python可执行文件和Python包等功能.与ament_cmake相比,ament_python具有更好的Python编程体验,并且能够自动处理Python依赖关系

ROS2编译工具colcon

ROS2编译工具colcon ----- colcon想当于ros1中的catkin工具
colcon相关文档

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ROS1 ROS2学习 的相关文章

随机推荐

  • 使用JavaScript 将Json数据导出CSV文件

    原理 CSV文件格式单元格之间是通过 隔开的 CSV文件格式里 换行是通过 n实现的 从上面两条结论 我们只有把相应的数据转换成 和 n就可以了 但其实真正的答案应该是把相应的数据转换成 和 r n 为什么会这样 且让我一一道来 我们在编辑
  • C++&QT-模仿string类

    目录 1 mystring h 2 mystring cpp 3 mian cpp 4 运行结果 1 mystring h ifndef MYSTRING H define MYSTRING H include
  • VS2017+WDK10驱动编译与调试

    驱动编译 安装VS2017 和WDK 10 下载地址 https docs microsoft com zh cn windows hardware drivers download the wdk 如果安装VS2017时没有选择安装win
  • 三面美团被问:MySQL的B+Tree索引到底是咋回事?聚簇索引到底是如何长高的?这不是必过?

    你肯定知道MySQL进行CRUD是在内存中进行的 也就是在Buffer Pool中 然后你也知道了当内存中没有MySQL需要的数据时 MySQL会从Disk中通过IO操作将数据读入内存中 读取的单位呢就是 数据页 一般数据页长下面这样 没错
  • 17.清晰架构(01): 融合 DDD、洋葱架构、整洁架构、CQRS...(译)

    17 清晰架构 01 融合 DDD 洋葱架构 整洁架构 CQRS 译 原文 https herbertograca com 2017 11 16 explicit architecture 01 ddd hexagonal onion cl
  • 作物产量常用的单位换算公式

    作物产量常用的单位换算公式 一 产量的定义 Agronomic Yields 1 Abstrct 2 Protocol 2 1 Grain Harvest of Annual Row crops 标准含水量 For corn the sta
  • Python人工智能,13天快速入门机器学习教程,含14大案例(NBA球员数据分析,北京租房数据,疾病数据预测等)

    40h小时入门人工智能 带你了解人工智能的前世今生 带你掌握人工智能经典算法 可掌握核心能力 1 掌握机器学习中处理数据的方法 2 理解经典的机器学习算法原理 3 掌握机器学习中工作的具体流程 Python人工智能13天快速入门机器学习教程
  • Android studio Mac快捷键连续选择相同内容和选中当前光标位置内容

    刚从Windows换到Mac第一件事绝对是先熟悉AS的快捷键 有两个很好用的快捷键找了很久都没找到 这里放出来 连续选择相同内容 Windows Alt j Control G Mac接Windows键盘是 Ctrl G 效果如下 选中当前
  • 面试之MySQL调优问题

    文章目录 前言 一 MySQL的底层原理粗解 1 1 MySQL的底层运作 1 2 MySQL的存储方式 二 索引 重点内容 2 1 索引是什么 2 2 MySQL调优到底是调啥的 2 3 如何创建一个索引 2 3 1在创建表的时候创建索引
  • Linux 上传删除文件命令

    rm 文件名 删除 rz Enter 上传文件 Ctrl z 退出
  • 枚举基础问题

    枚举问题 与7无关的数为例 枚举问题 这类问题并不复杂 对于题目本身只需要通过循环去遍历 列举出所有可能满足条件的情况 一个一个罗列出来 称为枚举问题 例如下面的题目 与7无关的数 这就是一类枚举问题 将所有可能满足 与7无关的数 罗列出来
  • POC - Adobe ColdFusion 反序列化漏洞(CVE-2017-3066)

    安装010Editer 下载链接 http www pc6 com softview SoftView 55129 html 复制POC的十六进制 00 03 00 00 00 01 00 00 00 00 00 00 00 01 11 0
  • html制作简单的表单<form>

    文章目录 一 使用到的标签用法介绍 1 演示标签代码 2 标签使用具体介绍 二 表单制作代码 三 结果显示 一 使用到的标签用法介绍 1 演示标签代码
  • 输出九九乘法表

    九九乘法表 尝试编写程序 输出九九乘法表 具体如下图所示 代码 include
  • redis服务器信息统计,Redis 返回关于 Redis 服务器的各种信息和统计数值 命令:INFO...

    INFO section 以一种易于解释 parse 且易于阅读的格式 返回关于 Redis 服务器的各种信息和统计数值 通过给定可选的参数 section 可以让命令只返回某一部分的信息 server 一般 Redis 服务器信息 包含以
  • 突发!ITELLYOU要改版了!

    微信公众号 网管小贾 个人博客 www sysadm cc 经常下载Windows系统镜像的老司机中 我敢保证十之八九对 MSDN 我告诉你 这个网站再熟悉不过 可是对于新手小白们来说 这个站TA究竟是个啥 其实 MSDN 我告诉你 是个名
  • 解决火狐首次启动太慢的方法

    众所周知 火狐浏览器有一定的优越性 现在众多的网站都采用了jquery技术 而ie在加载jquery上效果实在太差 尤其是配置稍低的情况下 ie很容易被卡死 这就体现出了火狐的优势 但火狐唯一不足的就是第一次启动的速度非常的慢 下面就是解决
  • 世界芯中国芯RISC-V相关资源及进展

    目录 1 RISC V介绍 RISC V为何会在最近两年迅速崛起 RISC V处理器生态 RISC V商业模式 2 RISC V发展历程 3 RISC V国际协会 4 中国RISC V产业联盟 5 RISC V相关资源 1 指令集规范 2
  • kotlin 之于 java 的差异

    一 变量声名 赋值和访问 kotlin 变量是空安全的 一般要求声明时就赋值 声名变量有两个关键字var和val 其中val相当于 java 的中的final 变量类型可显式给出 也可隐式推断 变量也可分可空类型和非空类型 以下给出几种声名
  • ROS1 ROS2学习

    ROS1 ROS2学习 安装 ROS ROS1 ROS2 命令行界面 ROS2 功能包相关指令 ROS 命令行工具 ROS1 CLI工具 ROS2 CLI工具 ROS 通信核心概念 节点 Node 节点相关的CLI 话题 Topic 编写发