【MicroROS手册02】入门:节点 Node
01 简介
MicroROS中的“节点”概念与ROS2相似。
ROS 2节点是 ROS 2生态系统的主要参与者。节点将使用 publishers, subscriptions, services 等相互沟通。
对于节点的操作主要有节点的初始化、节点的清除,以及节点的生命周期。
02 初始化Node
2.1 默认方法
在MicroROS中,创建Node有一套模板(默认配置),到手即用,在1.1.1中介绍。但是如果想要了解更多的细节(allocator和support),可以看1.1.2和1.1.3 。
创建默认配置的节点,如下:
1 | // Initialize micro-ROS allocator |
初始化 node 需要 support,而 support 需要 allocator 。allocator -> support -> node
下面,对 allocator 和 support 稍加介绍。
2.2 allocator
allocator 对象中包装了 micro-ROS 中使用的动态内存分配和重新分配方法
下面是 default allocator 的内部结构,它的作用就是分配内存。
1 | - allocate = wraps malloc() |
在嵌入式系统中工作,用户可能需要使用自己的内存分配方法,那么可以修改此默认函数。详情参考官方文档:Custom allocator 。
2.3 support
support 的结构体定义如下:
1 | typedef struct |
可以看出来,support 包含了 allocator 的指针、用于创建一些顶层实体(如 node)的 context ,以及对时间相关资源的封装 clock。
03 清除Node
要销毁(cleaning up)节点时,必须在节点本身之前销毁节点拥有的所有实体(Publishers, subscribers, services, ……)
1 | // Destroy created entities (Example) |
这将从 ROS2 图中删除节点,包括 agent 上生成的任何实体和客户端上使用的内存。
04 Lifecycle 生命周期
rclc 生命周期包在 C 中提供了方便的函数,将 rcl 节点与 ROS 2 节点生命周期状态机捆绑在一起,类似于 C++的 rclcpp 生命周期节点。Node 的生命周期的状态机图如下:
(此处一张图)
更多可以参考:
- MicroROS 官方文档:Node: Lifecycle
- ROS2 官方文档:A node with a managed life cycle
- 帖子:micro-ROS C API详解 (一) 的生命周期部分



