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 <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
服务端客户端(请求响应)模型
适用于节点间双向的数据传递
同时服务还是有一些注意事项:
- 同一个服务(名称相同)有且只能有一个节点来提供
- 同一个服务可以被多个客户端调用
编写客户端程序流程
- 编程接口初始化
- 创建节点并初始化
- 创建客户端对象
- 创建并发送请求数据
- 等待服务端应答数据
- 销毁节点并关闭接口
编写服务端程序流程
- 编程接口初始化
- 创建节点并初始化
- 创建服务端对象
- 声明服务端名称和处理回调函数的名称
- 通过回调函数进行服务
- 向客户端反馈应答结果
- 销毁节点并关闭接口
服务相关的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的三大组成部分目标、反馈和结果。
动作适用于需要实时反馈的场景,原理基于话题和服务。
- 目标:即Action客户端告诉服务端要做什么,服务端针对该目标要有响应。解决了不能确认服务端接收并处理目标问题
- 反馈:即Action服务端告诉客户端此时做的进度如何(类似与工作汇报)。解决执行过程中没有反馈问题
- 结果:即Action服务端最终告诉客户端其执行结果,结果最后返回,用于表示任务最终执行情况。
参数是由服务构建出来了,而Action是由话题和服务共同构建出来的:
第一种:Action = 两个服务+一个话题
两个服务 | 一个话题 |
---|---|
目标传递服务 | 反馈话题(服务发布,客户端订阅) |
结果传递服务 |
第二种:一个Action = 三个服务+两个话题
三个服务 | 两个话题 |
---|---|
目标传递服务 | 反馈话题(服务发布,客户端订阅) |
结果传递服务 | 状态话题(服务端发布,客户端订阅) |
取消执行服务 |
动作相关的CLI
别人总结的关于ROS2的命令行工具 CLI tools
通信接口 - Interface
ROS的通信系统,它的主要目的就是传输数据,让大家高效的建立连接,并且准确包装和解析传输的数据内容,话题、服务等机制,它们传输的数据,都要符合通信接口的标准定义。
-
定义服务通信的接口
-
话题消息的内容
-
完成定义后,还需要在功能包的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相关文档