首先启动一个终端,
启动倾听者:ros2 run demo_nodes_py listener
启动一个新的终端
启动说话者:ros2 run demo_nodes_cpp talker
首先启动一个终端
ros2 run turtlesim turtlesim_node //启动海龟模拟器
启动一个新的终端
ros2 run turtlesim turtle_teleop_key //启动海龟遥控器
RQT可视化(rqt)指令
架构图
操作系统层
ROS2本身就是基于Linux windows或者macOS系统建立的,驱动计算机、底层硬件、底层网络通信等实现都是交由操作系统来实现的。
DDS实现层
DDS,全称 Data Distribution Service (数据分发服务)。是由对象管理组 (OMG) 于 2003 年发布并于 2007 年修订的开分布式系统标准
通过类似于ROS中的话题发布和订阅形式来进行通信 ,同时提供了丰富的服务质量管理来保证可靠性、持久性、运输设置等。
DDS实现层其实就是对不同常见的DDS接口进行再次的封装,让其保持统一性,为DDS抽象层提供统一的API。(API应用程序编程接口,当你写了一个库,里面有很多函数,如果别人要用这个库,但是并不知道每个函数内部是怎么实现的。使用的人需要看你的文档或者注释才知道这个函数的入口参数和返回值或者这个函数是做什么的。对于使用者来说,你的这些函数就是APl)
API在不同语言的表现形式不同,才C和C++表现为头文件,在python中表现为python文件
这一层将DDS实现层进一步的封装,使得DDS更容易使用。原因在于DDS需要大量的设置和配置(分区,主题名称,发现模式,消息创建,...),这些设置都是在ROS2的抽象层中完成的。
ROS2客户端库RCL
RCL(ROS Client Library)ROS客户端库,其实就是ROS的一种API,提供了对ROS话题、服务、参数、Action等接口。
ROS2客户端库
ROS的客户端库就是上面所说的RCL,不同语言对应着不同RCL,但基本功能都是相同的。
比如。python语言提供了rclpy来操作ROS2的节点话题服务等,而C++则使用rclcpp提供ROS2的节点话题和服务等。
所以后面我们使用python和c++来编写ROS2节点实现通讯等功能时,我们就会引入rclpy和rclcpp的库
这张图是ROS2,API的实现层级,最新下面的是第三方DDS,rmw(中间件接口)层是对各家DDS的抽象层,基于实现了rclc,有了rclc,我们就可以实现各个语言的库,大家都知道c语言是各个语言鼻祖所以基于ROS2官方实现了rclpy和rclcpp,
所以基于rclpy和rclcpp我们就可以实现上层的应用。
上面这张图是ROS2,API的实现层级,最新下面的是第三方的DDS,rmw(中间件接口)层是对各家DDS的抽象层,基于rmw实现了rclc,有了rclc,我们就可以实现各个语言的库,大家都知道C语言是各个语言的鼻祖(汇编除外)所以基于rclc,ROS2官方实现了rclpy和rclcpp.基于rclpy和rclcpp就可以实现上层的应用。