ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

ROS2入门介绍

ROS2入门介绍

1 系统架构

img

1.1 操作系统层

是由Linux、Windows或者macOS系统建立的,驱动计算机硬件、底层网络通信等实现都是交由操作系统来实现的。

1.2 DDS实现层

  • DDS全称Data Distribution Service(数据分发服务),是由OMG发布的分布式通信规范,采用了订阅发布模型,以中间件的形式提供通信服务、并提供多种QoS策略,保障数据进行实时、高效、灵活的分发。更深入理解DDS是一个以数据为中心的中间件协议和API标准,意味用户只关心自己想要的数据,数据通过Topic进行标识,这样发布者根据主题发布数据,订阅者根据自己感兴趣的主题订阅数据。
    img

1.3 抽象DDS层

这一层将DDS实现层进一步的封装,使得DDS更容易使用。原因在于DDS需要大量的设置和配置(分区,主题名称,发现模式,消息创建,...),这些设置都是在ROS2的抽象层中完成的。

1.4 ROS2客户端库RCL

RCL(ROS Client Library)ROS客户端库,其实就是ROS的一种API,提供了对ROS话题、服务、参数、Action等接口。

1.5 应用层

应用层就是开发功能实现代码以及ROS2开发的各种常用的机器人相关开发工具所在的层了。

下图为ROS2的API的实现层级,最新下面的是第三方的DDS,rmw(中间件接口)层是对各家DDS的抽象层,基于rmw实现了rclc,基于rclc,ROS2官方实现了rclcpp和rclpy。
img

2 ROS2节点

2.1 基本介绍

ROS2中每一个节点也是只负责一个单独的模块化的功能(比如一个节点负责控制车轮转动,一个节点负责从激光雷达获取数据、一个节点负责处理激光雷达的数据、一个节点负责定位等等)
img

2.2 节点间的交互

在激光雷达的例子,一个节点负责获取激光雷达的扫描数据,一个节点负责处理激光雷达数据,比如去除噪点,建图等。这时节点与节点之间就必须要通信了,而ROS2中一共有四种通信方式:

  • 话题-topic
  • 服务-services
  • 动作-Action
  • 参数-parameter
    img

3 ROS2工作空间

  • 工作空间是包含若干个功能包的目录,这个目录下有src/目录(自己创建)。
  • src/目录下来实现开发不同的功能包,功能包相当于一个“软件模块”或“工具箱”。一个功能包可以包含一个或多个节点,同时还可以包含库、配置文件、启动文件、数据文件以及描述包信息和依赖关系的配置文件。
  • 功能包的作用是将不同的功能(如移动控制、视觉感知、自主导航等)划分到不同的包中,尽量降低各个功能模块之间的耦合关系,使得功能包可以独立分发、编译和复用。当需要以功能包为单位提供功能时,这种模块化的组织方式会非常方便,从而提高了软件的复用率和维护效率

4 编译工具

colcon是一个功能包构建工具。

4.1 编译工程

进入工作区目录,运行build命令

colcon build#只编译一个包
colcon build --packages-select <package_name>

构建完成后,在src同级目录我们应该会看到 build 、 install 和 log 目录

├── build
├── install
├── log
└── src

build 目录存储的是中间文件。对于每个包,将创建一个子文件夹,在其中调用CMake
install 目录是每个软件包将安装到的位置。默认情况下,每个包都将安装到单独的子目录中
log 目录包含有关每个colcon调用的各种日志信息

4.2 运行编译后的节点

运行前,需要运行如下指令,主要作用是将当前工作空间中刚刚编译生成的功能包路径,加载到当前终端的环境变量中

source install/setup.bash

节点运行命令,运行功能包中的节点程序

ros2 run <package_name> <executable_file>
返回列表