ROS1 ROS2学习

ROS1 ROS2学习

  • 安装 ROS
    • ROS1
    • ROS2
  • 命令行界面
  • ROS2 功能包相关指令
  • ROS 命令行工具
    • ROS1 CLI工具
    • ROS2 CLI工具
  • ROS 通信核心概念
    • 节点 - Node
      • 节点相关的CLI
    • 话题 - Topic
      • 编写发布者程序流程:
      • 编写订阅者程序流程:
      • 话题相关的CLI
    • 服务 - Service
      • 编写客户端程序流程
      • 编写服务端程序流程
      • 服务相关的CLI
    • 参数 - Parameters
      • 参数相关的CLI
    • 动作 - Action
      • 动作相关的CLI
    • 通信接口 - Interface
      • 修改CMakeLists.txt
      • rosidl_default_generators
  • CMake
  • ROS2编译工具colcon

学习记录,方便查阅

安装 ROS

ROS1

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

ROS2

鱼香ROS
ROS2教程
视频教程

命令行界面

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

ROS2 功能包相关指令

别人总结的功能包指令

用法: ros2 pkg [-h] 

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

各种与包有关的子命令

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

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

  使用 `ros2 pkg  -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  

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

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

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

话题 - Topic

发布订阅模型
适用于节点间单向的频繁的数据传输

编写发布者程序流程:

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

编写订阅者程序流程:

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

话题相关的CLI

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

服务 - Service

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

  1. 同一个服务(名称相同)有且只能有一个节点来提供
  2. 同一个服务可以被多个客户端调用
    ROS1 ROS2学习_第1张图片

编写客户端程序流程

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

编写服务端程序流程

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

服务相关的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相关文档

你可能感兴趣的:(ROS,机器人,学习)