【ros/ros2】LCN及ros2节点的LCN改写

news2024/11/19 11:21:39

文章目录

      • 序言
      • 1. ros2两种节点类型
      • 2. LCN是什么
      • 3. LCN状态转换
      • 4. LCN状态转换要做的事
      • 5. LCN节点功能划分
      • 6. ros2节点的LCN改写

序言

  • 背景:ros2节点改写为lifecycle node节点

1. ros2两种节点类型

  • Node:和ros1中一样的节点基类
  • LifecycleNode:可管理状态的节点基类

2. LCN是什么

  • LCN = lifecycle node,生命周期节点,或者受控节点
  • 为了解决ros1中节点启动顺序无法控制的问题,ros2引入了生命周期节点的概念;与LCN相对应的是,LMN = lifecycle management node,控制节点
  • 支持控制节点LMN对各个受控节点LCN节点的管理

3. LCN状态转换

  • 有4个基础状态和6个切换状态,不同状态之间转换关系如下
  • 4个主状态:unconfigured + inactive + active + shutdown
  • 6个切换状态:Configuring + Activating + Deactivating + CleaningUp + ShuttingDown + ErrorProcessing

状态转换说明:

  • 不同状态之间的转换需要调用对应的回调函数如OnConfigure()等来实现,这些函数在对节点进行LCN改写时需要重新实现,即将不同功能划分到不同函数进行控制;
  • LMN和LCN之间通过service模式进行通信,LMN作为client,LCN作为server,LMN发起service request给LCN请求LCN状态转移操作
  • 节点运行时ros2会为每个节点配置默认的service,LCN会有特殊的service配置如
    change_state、get_state等

4. LCN状态转换要做的事

  • Configuring状态:调用on_configure回调函数

    • 加载配置:生命周期中必须被执行一次的任务,比如申请内存、配置topic订阅/发布等
    • 以及必要的设置:初始的配置参数,整个生命周期中必须保留的topic订阅器/发布器等
  • Activating状态:调用on_activate回调函数,尝试激活节点,为进入active状态做最后准备

    • 获取只在节点active期间会用到的资源,比如对硬件的访问权限
    • 避免执行需要很耗时的准备工作
  • Deactivating状态:调用on_deactivate函数,为后续 CleaningUp 做准备

    • 执行清理操作
    • 做与on_activate相反的操作,去激活与释放资源
  • CleaningUp状态:调用on_cleanup回调函数

    • 回调函数中应清除所有状态,并返回与初次创建时一样的状态
  • ShuttingDown状态:调用on_shutdown回调函数

    • 节点销毁前的清除操作
  • ErrorProcessing状态:调用on_error回调函数

    • 清除所有错误的地方,可从所有状态进入该状态
    • 错误处理成功,进入UnConfigured状态;失败进入Finalized状态等待被销毁

5. LCN节点功能划分

  • 需要先对要改写的节点进行功能划分,确认哪些功能应该归在哪一状态下去实现

6. ros2节点的LCN改写

  • LifecycleNode 类型节点目前只可以在C++中使用
  • 初步总结,改写涉及以下几个方面
    • CMakeLists.txt修改
    • 添加lifecycle node类
    • 实现状态切换的脚本函数
    • 生命周期节点main函数改写

 
创作不易,如有帮助,请点赞收藏支持
 


created by shuaixio, 20223.05.30

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/591553.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

法规标准-ISO 11270标准解读(2014版)

ISO 11270是做什么的? ISO 11270全名为智能交通系统-车道保持辅助系统(LKAS)-性能要求及测试步骤,其中主要是对LKAS系统的功能要求、性能要求及测试步骤进行了介绍。 功能要求 LKAS应至少提供以下操作和状态转换: ——从LKAS off到LKAS on的…

chatgpt赋能python:Python中的精度问题

Python中的精度问题 如果你曾经在Python中处理浮点数,你可能会遇到精度问题。当使用不同的运算符和内置函数时,浮点数很容易产生舍入误差。这种误差可能会导致意想不到的结果,特别是在科学计算和金融应用中。 为什么会出现精度问题&#xf…

Spring AOP简介及相关案例

目录 一、Spring AOP简介 二、AOP相关术语 三、AOP入门案例 1. 引入依赖 2. 编写连接点 3. 编写通知类 4. 配置切面 5. 测试 四、通知类型 1. 编写通知方法 2. 配置切面 3. 测试 五、切点表达式 六、多切面配置 1. 编写发送邮件的通知 2. 配置切面 3. 测试 …

flex 布局的基本概念 - 详解

flex 布局的基本概念 Flexible Box 模型,通常被称为 flexbox,是一种一维的布局模型。它给 flexbox 的子元素之间提供了强大的空间分布和对齐能力。本文给出了 flexbox 的主要特性,更多的细节将在别的文档中探索。我们说 flexbox 是一种一维的…

Metasploit超详细安装及使用教程(图文版)

通过本篇文章,我们将会学习以下内容: 1、在Windows上安装Metasploit 2、在Linux和MacOS上安装Metasploit 3、在Kali Linux中使用 Metasploit 4、升级Kali Linux 5、使用虚拟化软件构建渗透测试实验环境 6、配置SSH连接 7、使用SSH连接Kali 8、配…

C++ vector与map的结合运用

目录 vector和map的简单介绍: 今天我们用vector容器和map容器实现以下简单的功能: 案例描述: 图解: ​ 实现步骤: 代码实现: 运行结果: vector和map的简单介绍: map和vector都是C STL&…

C++11 -- 包装器

文章目录 function包装器function包装器的概念function的运用function实例化使用function解决逆波兰表达式 bind包装器bind包装器相关介绍bind绑定函数固定参数 function包装器 function包装器的概念 function包装器,也叫做适配器,它的本质是一个类模板. 例如: 1 template&l…

chatgpt赋能python:Python中的迭代器

Python中的迭代器 在Python中,迭代器是一种对象,它可以让我们可以遍历(或迭代)序列中的元素而不必了解它们如何存储在内存中。迭代器是Python中许多高级构造的基础 - 他们节省了空间,并且它们能够帮助我们更有效地处理…

Redis高级篇 - 多级缓存

多级缓存 1.什么是多级缓存 传统的缓存策略一般是请求到达Tomcat后,先查询Redis,如果未命中则查询数据库,如图: 存在下面的问题: 请求要经过Tomcat处理,Tomcat的性能成为整个系统的瓶颈 Redis缓存失效时…

VUE项目运行失败原因以及解决办法(以vscode为例)

1.正常运行: Ctl J打开终端,并运行如下命令: npm run serve 正常情况下,就可以得到本地和网络链接,如下: 点击链接即可进入到编辑好的页面。 不过,你也可能遇到如下情况↓↓↓ 2.无法找到pac…

创建第一个.NET MAUI应用

1.打开VS2022,创建新项目,并选择.NET MAUI应用,然后点击下一步 2.输入项目相关配置,然后点击下一步 3. 选择框架版本,然后点击创建 4.项目创建成功后会自动打开概述页 5.平台框架切换 6.启动应用,如有下图提示,启动开发者模式 成功启动应用 7.修改应用 修改MainPage.xml如下图…

Baumer工业相机堡盟工业相机如何使用CameraExplorer软件设置MultiROI模式以及该模式的优势以及行业应用

Baumer工业相机堡盟工业相机如何使用MultiROI模式以及该模式的优势以及行业应用 Baumer工业相机Baumer工业相机的MultiROI模式的技术背景Baumer工业相机使用CameraExplorer软件设置MultiROI模式1.开启Baumer工业相机MultiROI模式2.关闭Baumer工业相机MultiROI模式3.测试使用Bau…

C++ 排序算法

🤔排序算法: 📖1.sort 对容器内元素进行排序 📖2.random_shuffle 洗牌 指定范围内的元素随机调整次序 📖3.merge 容器元素合并,并整合到另一个容器中 📖4.reverse 反转指定容…

强推宝藏网站

最近还是有很强烈的感受,方法大于努力。最近就整理了一下大学期间比较好用的网站,也陪我度过了一段时间了,排名不分先后,把压箱底的东西拿出来了。 ChatGPT WeTab 新标签页https://www.wetab.link/ChatGPT国内免费使用方法有哪些…

【数据结构6】二叉树的基本操作

文章目录 ⭐️写在前面的话⭐️二叉树的一些基本操作1、结构定义2、先序创建这棵树3、按满二叉树方式创建4、三种递归遍历5、层次遍历6、求二叉树的深度7、求叶子结点数8、三种非递归遍历9、先序线索化二叉树10、先序线索化后遍历11、中序线索化二叉树12、中序线索化后遍历主函…

MySQL进阶- SQL优化和视图

目录 SQL优化插入数据时的SQL优化(insert优化,和大批量数据插入)主键优化order by优化(排序操作的优化)group by优化(分组优化)limit优化(分页查询优化) SQL优化 插入数…

[RUST/腐蚀]Windows-开服服务端下载以及配置

一、前置要求 1.SteamCMD:SteamCMD - Valve Developer Communityhttps://developer.valvesoftware.com/wiki/SteamCMD 2.通过SteamCMD下载RUST/腐蚀服务端。 二、SteamCMD 注意:所有目录均应避免出现中文。 1.建立SteamCMD文件夹,如 D:\st…

准备入门python的一些建议

提醒:一下内容只代表个人观点 从18年左右开始,python的广告就被打得满天飞,网上各种吹嘘python这门语言的广告五花八门,当然也有一些人看完这些广告后感觉python非常的高大上,然后就入门学习了python,我就…

【测试基础02】

测试基础02 一、HTML基础二、Python导入三方模块三、安装webgrock驱动四、元素定位(1)、元素定位工具(2)、元素定位方式(3)、XPATH路径(3)、CSS选择器 五、Selenium WebDriver初步应用(1)、基本方法(2)、测试案例1(3)、测试案例2(3)、测试案例3 六、获取元素信息的方法七、fram…

价值5000元以上的某马大数据全套视频【强烈推荐】

某马大数据 01、阶段一 Python大数据开发基础 01、第一章大数据介绍及开发环境 02、第二章 linux命令 03、第三章 MySQL数据库 04、第四章 excel的使用 05、第五章 kettle的使用 06、第六章 数据分析及可视化 07、第七章 大数据框架与数仓基础 08、第八章 数仓实战项目 …