type
date
slug
category
icon
password
1. micro-ROS整体架构2. 关键组件及其作用2.1 分配器(Allocator)2.2 初始化选项(Init Options)2.3 RMW选项(RMW Options)2.4 支持器(Support)2.5 节点(Node)2.6 发布者(Publisher)和订阅者(Subscriber)2.7 定时器(Timer)2.8 执行器(Executor)3. 接口调用流程4. 参数传递规则5. 资源管理注意事项6. 使用建议
1. micro-ROS整体架构
micro-ROS是ROS 2在资源受限设备上的实现,它保持了与ROS 2相同的通信模型和API,但针对微控制器进行了优化。
micro-ROS架构由以下几层组成:
- 应用层: 用户编写的代码
- rclc层: C语言客户端库,提供简化的API
- rcl层: ROS客户端库,提供核心功能
- rmw层: ROS中间件接口
- DDS层: 实时发布订阅协议(使用Micro XRCE-DDS)
- 传输层: 通信方式(UART、UDP等)
2. 关键组件及其作用
2.1 分配器(Allocator)
- 作用:负责内存管理,为ROS操作分配和释放内存
- 目的:在资源受限设备上实现高效内存管理
- 特点:使用静态内存池,避免动态内存分配导致的碎片化
2.2 初始化选项(Init Options)
- 作用:配置ROS系统初始化参数
- 目的:设置DDS域ID、QoS策略等全局配置
- 参数传递:通常以引用方式传递,由函数填充内容
2.3 RMW选项(RMW Options)
- 作用:配置ROS中间件(RMW)的参数
- 目的:设置通信方式、地址、端口等
- 特点:micro-ROS使用Micro XRCE-DDS作为中间件
2.4 支持器(Support)
- 作用:封装ROS上下文和初始化状态
- 目的:简化初始化过程,管理ROS上下文
- 内容:包含context、allocator等基础组件
2.5 节点(Node)
- 作用:表示ROS计算图中的一个实体
- 目的:提供命名空间和通信入口点
- 特点:每个节点有独立的名称和命名空间
2.6 发布者(Publisher)和订阅者(Subscriber)
- 作用:实现话题通信机制
- 目的:发送或接收特定类型的消息
- 参数:节点引用、消息类型支持、话题名称
2.7 定时器(Timer)
- 作用:定期触发回调函数
- 目的:实现周期性任务,如定期发布消息
- 参数:支持器引用、超时时间(纳秒)、回调函数
2.8 执行器(Executor)
- 作用:管理回调函数的执行
- 目的:处理定时器触发和消息接收事件
- 特点:支持多种执行策略(ON_NEW_DATA, ALWAYS等)
- handle_num:表示执行器可以管理的最大句柄数量
3. 接口调用流程
micro-ROS应用的典型初始化流程如下:
- 创建分配器:定义内存管理策略
- 初始化选项:设置全局配置
- 配置RMW:设置通信方式
- 初始化支持器:创建ROS上下文
- 创建节点:定义通信实体
- 创建通信原语:发布者、订阅者、服务等
- 创建定时器:设置周期性任务
- 初始化执行器:管理回调执行
- 添加句柄到执行器:关联定时器和订阅者
- 运行执行器:处理事件和回调
4. 参数传递规则
micro-ROS接口的参数传递遵循以下规则:
- 初始化函数:
- 第一个参数通常是要初始化的对象的指针
- 最后一个参数通常是分配器
- 获取函数:
- 返回值通常是获取到的对象
- 或通过指针参数返回获取到的值
- 设置函数:
- 第一个参数通常是要设置的对象的指针
- 后续参数是要设置的值
- 引用传递:
- 大多数ROS对象通过指针传递
- 这样可以避免复制大对象
- 返回值:
- 大多数函数返回
rcl_ret_t
类型的状态码 RCL_RET_OK
表示成功- 其他值表示各种错误
5. 资源管理注意事项
- 初始化顺序:按照依赖关系初始化组件
- 资源限制:根据设备资源调整参数
- 消息缓冲区大小
- 执行器句柄数量
- 发布者/订阅者数量
- 释放顺序:按照初始化的相反顺序释放资源
- 错误检查:使用
RCCHECK
宏检查每个操作的返回值
6. 使用建议
- 使用
rclc
层的函数(如rclc_node_init_default
)而不是rcl
层函数,简化代码
- 为执行器分配足够的句柄数量(等于定时器+订阅者数量)
- 使用
RCL_MS_TO_NS
宏将毫秒转换为纳秒
- 使用
ROSIDL_GET_MSG_TYPE_SUPPORT
宏获取消息类型支持
- 在资源受限设备上,尽量减少消息大小和通信频率
通过理解这些组件和流程,您可以更有效地使用micro-ROS,开发出高效、可靠的嵌入式ROS应用。
- Author:felixfixit
- URL:http://www.felixmicrospace.top/article/micro_ros_arch_interface
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!