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

文章目录

      • 序言
      • 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://xiahunao.cn/news/254669.html

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

相关文章

桶排序 — 计数排序和基数排序

计数排序 int类型数组,其中存的是员工的年龄。比如说16 - 150。对于这样的数据来讲,数据状况是受限的。此时如果将数组从小到大进行排序,该如果实现? 这个实现很简单,实现一个统计数组范围从 0 ~ 150,遍历原…

816墨盒计算机无法与,816墨盒怎么加墨 816墨盒加墨方法及注意问题【详解】

导语:随着时代的快速发展,人们生活水平的不断提高,打印机在我们日常生活中的应用也变得非常广泛,利用打印机打印文件,还有一些重要的材料,方便了人们的生活,给人们的生活提供了很大的便利&#…

打印机 检测到用过的耗材或者赝品耗材

检测到用过的耗材或者赝品耗材 大家好,今天续着给大家分享下惠普的803/805墨盒加墨应该注意的事项,先预习,加墨就没那么多困惑了~ 加墨后打印白线条、溅墨怎么办? ①先用温水浸泡打印头约30秒(注意不要泡到芯片&…

打印机墨盒问题

因为打印机墨盒属于耗材,容易损坏,从而造成打印机没法打印。对于家用打印机来说,一个打印机也就三四百块钱,然后换一个新墨盒就得花掉一百左右,心里感觉贼不爽,墨盒那么小一个,居然要那么贵&…

墨盒 连供漏墨恒压问题

你提出了一个连供压力平衡原理的问题。 连供形状各式各样,但基本原理都是相同的。 以红色为例: 如上图。打印机静止时,墨水室的墨水重力,等于墨水室上方因为空气变稀薄后产生的负压。墨水不会流动。实现了压力的静平衡。 打印机工…

【Java 并发编程】深入理解 AQS - AbstractQueuedSynchronizer

深入理解 AQS - AbstractQueuedSynchronizer 1. AQS1.1 什么是 AQS1.2 AQS 具备的特性 2. AQS 原理解析2.1 AQS 原理概述2.1.1 什么是 CLH 锁2.1.2 AQS 中的队列 2.2 AQS 共享资源的方式:独占式和共享式2.2.1 Exclusive(独占式)2.2.2 Share&a…

JVM学习笔记(中)

1、垃圾回收算法 标记清除法 特点: 速度较快会产生内存碎片 注意:这里的清除并不是真正意义上的清除,即每个字节都清0,而是记录一下被清除的对象的起始和结束的地址,当下一次分配给一个新对象时,新对象…

《Java并发编程实战》课程笔记(四)

互斥锁 原子性问题到底该如何解决呢? “同一时刻只有一个线程执行”这个条件非常重要,我们称之为互斥。如果我们能够保证对共享变量的修改是互斥的,那么,无论是单核 CPU 还是多核 CPU,就都能保证原子性了。 锁模型 …

RK3588平台开发系列讲解(驱动基础篇)设备树常用 of 函数

平台内核版本安卓版本RK3588Linux 5.10Android 12文章目录 一、查找节点的 of 函数二、获取属性值的 of 函数三、实验示例3.1、查找的节点代码3.2、获取属性内容代码沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 设备树描述了设备的详细信息,这些信息包括数字类型的…

chatgpt赋能python:Python中-1的用法介绍

Python中-1的用法介绍 什么是-1? 在Python中,-1是一个特殊的索引值,它表示从序列的末尾开始向前数1个元素。这在对于列表、字符串、元组等序列类型进行操作时非常有用。 如何使用-1? 假设我们有一个列表: l [1, …

SpringBoot框架理解

1 SpringBoot入门 1.2 什么是SpringBoot 1 官网的解释 ​ Spring在官方首页是这么说的:说使用SpringBoot可以构造任何东西,SpringBoot是构造所有基于Spring的应用程序的起点,SpringBoot在于通过最少的配置为你启动程序。 2 我的理解 SpringBoot是Sp…

Flask-RESTful的使用

Flask-RESTful的使用 Flask-RESTful基本使用安装定义资源Resources创建API实例添加资源到API运行Flask应用 请求处理请求解析参数校验 响应处理数据序列化定制返回格式 其他功能蓝图装饰器集合路由命名规范路由名称 Flask-RESTful Flask-RESTful是一个用于构建RESTful API的扩展…

计算机对社会的应用是什么,电子计算对人类社会有什么贡献?应用的领域又有哪些?...

在人类历史上,蒸汽机的发明和电力的使用,曾经在生产技术上引起过划时代的工业革命,然而,这种革命,从本质上来讲,它仅仅是涉及到代替人的体力劳动,但电子计算机的发明,已经涉及到代替…

一位美女博士的人脸识别历程

2019-01-28 16:44:37 1月21日,科技评论期刊《麻省理工科技评论》发布了2018年“35岁以下科技创新35人”(35 Innovators Under 35)中国榜单。商汤科技研究总监、年仅29岁的石建萍博士荣登此榜,凭借在计算机视觉原创技术的卓越创新…

Android仿微信发图片的样式,做IM的同学的病有救了

一:前言 最近在搞IM,真的特别痛苦。脑袋大,对于我这种菜鸟来说太难了,比现在社会娶个媳妇还难,硬着头皮搞,终于文字,语音,表情搞完了,开始搞图片,看着微信发…

软件压力测试图片60张,看图测压力,你抗压么?

你压力大么?快跟K线君一起来测测! 平行线 下图里的横线都是平行的 涉世越深的人,受社会侵蚀越严重 看到的直线越变形 你还是单纯的你吗? 你能看出几条笔直的横线? 我想静静 这是一张静止的图片 你的心理压力越大&#…

网络安全入门学习:社会工程学

在电影《我是谁:没有绝对安全的系统》中,主角本杰明充分利用自己高超的黑客技术,非法入侵国际安全系统,并在最后逃之夭夭。在电影中,有一句经典的台词: 所有黑客手段中最有效的、最伟大的幻想艺术——社会…

《计算机组成原理》唐朔飞 第5章 输入输出系统 - 学习笔记

写在前面的话:此系列文章为笔者学习计算机组成原理时的个人笔记,分享出来与大家学习交流。使用教材为唐朔飞第3版,笔记目录大体与教材相同。 网课 计算机组成原理(哈工大刘宏伟)135讲(全)高清_…

easyui 表单提交与图片上传,图片添加、删除

提交表单和图片是web中经常要用到的。我这里用easyui做了一个表单&#xff0c;里面可以上传多张图片&#xff0c;并且可以进行新增和删除。 前端代码如下&#xff1a; <!DOCTYPE html> <html> <head> <meta charset"UTF-8"> …

社会化媒体营销方案简介

最近公司经营走到了死胡同里面&#xff0c;就开始研究运营的营销方案&#xff0c;发现有很多的IT公司都在走社会化营销&#xff0c;感觉这会是以后每个公司都会用到的一种营销策略&#xff01;社会化媒体营销-亦称社会化营销&#xff0c;是利用社会化网络&#xff0c;在线社区&…