ROS nodelet相关

ros的nodelet机制 nodelet介绍,gpt生成 阅读详情

nodelet是ROS用来实现零拷贝的机制,实现原理是基于ROS的另一个概念pluginlib,也就是ROS的插件,所以这篇文章分成两个部分,第一部分结合ROS 的插件的教程,第二部分结合简单的nodelet教程

一.pluginlib 

将主要结合ROS pluginlib的教程

一个插件就相当与一个ros的package,文件结构大概如下,,下面将按步骤进行分步构建

plugtest/
├── CMakeLists.txt
├── include
│   └── plugtest
│       ├── base.h
│       └── plugin.h
├── package.xml
├── plugins.xml
└── src
    └── plugin.cpp

1.base.h 

在这个头文件中创建一个基类,其中函数都是虚函数

  class RegularPolygon
  {
    public:
      virtual void initialize(double side_length) = 0;
      virtual double area() = 0;
      virtual ~RegularPolygon(){}

    protected:
      RegularPolygon(){}
  };

2. plugin.h

在这个文件中引入基类所在的头文件,然后创建插件类继承基类,并且实现基类中定义的虚函数

#include <base.h>

3.plugin.cpp

将基类,插件类所在的头文件以及头文件<pluginlib/class_list_macros.h> include,然后在文件的最后使用PLUGINLIB_EXPORT_CLASS注册

#include <pluginlib/class_list_macros.h>
#include <pluginlib_tutorials_/polygon_base.h>
#include <pluginlib_tutorials_/polygon_plugins.h>

PLUGINLIB_EXPORT_CLASS(polygon_plugins::Triangle, polygon_base::RegularPolygon)
PLUGINLIB_EXPORT_CLASS(polygon_plugins::Square, polygon_base::RegularPolygon)

4.CmakeList.txt文件中

将include文件加入, 然后声明创建一个library

include_directories(include)
add_library(polygon_plugins src/polygon_plugins.cpp)

5.plugin.xml

这个文件要和CmakeList以及package.xml 同级

<library path="lib/libpolygon_plugins">
  <class type="polygon_plugins::Triangle" base_class_type="polygon_base::RegularPolygon">
    <description>This is a triangle plugin.</description>
  </class>
</library>

6. package.xml

pluginlib_tutorials_ 指的是插件基类所在的包

<export>
  <pluginlib_tutorials_ plugin="${prefix}/polygon_plugins.xml" />
</export>

使用

1.和正常的库相同,在camkelist文件中添加 target_link_libraries( XXX  ${catkin_LIBRARIES})

add_executable(polygon_loader src/polygon_loader.cpp)
target_link_libraries(polygon_loader ${catkin_LIBRARIES})

2.在具体的文件中引入两个头文件

一个是固定的,一个是你要用的lib的基类的头文件

#include <pluginlib/class_loader.h>
#include <pluginlib_tutorials_/polygon_base.h>

二. Nodelet

下面介绍如何创建和使用NodeLet ,具体请参考 这篇文章

1. 创建nodelet的插件类

在这里Nodelet就相当于上面的基类

#include <nodelet/nodelet.h>

namespace example_pkg
{
    class MyNodeletClass : public nodelet::Nodelet
    {
        public:
            virtual void onInit();
    };
}

2. cpp文件

ROS的教程里面在头文件中实现,这里在cpp文件中实现,同样的,实现基类的虚函数,然后PLUGINLIB_EXPORT_CLASS

#include <pluginlib/class_list_macros.h>

// watch the capitalization carefully

namespace example_pkg
{
    void MyNodeletClass::onInit()
    {
        NODELET_DEBUG("Initializing nodelet...");
    }
}

PLUGINLIB_EXPORT_CLASS(example_pkg::MyNodeletClass, nodelet::Nodelet)

3. pluging.xml

名称,类型,基类

<library path="lib/libMyNodeletClass">
  <class name="example_pkg/MyNodeletClass" type="example_pkg::MyNodeletClass" base_class_type="nodelet::Nodelet">
  </class>
</library>

4.package.xml

前面讲了,export中前面的名字是基类所在的名字,而这里基类是nodelet,所以就是<nodelet />

<build_depend>nodelet</build_depend>
<run_depend>nodelet</run_depend>
<export>
  <nodelet plugin="${prefix}/nodelet_plugins.xml" />
</export>

5. cmakelist.txt

add_library(nodelet_math src/plus.cpp)
target_link_libraries(nodelet_math ${catkin_LIBRARIES})

使用

<launch>
  <node pkg="nodelet" type="nodelet" name="standalone_nodelet"  args="manager" output="screen"/>

  <node pkg="nodelet" type="nodelet" name="MyNodeletClass" 
        args="load example_pkg/MyNodeletClass standalone_nodelet" output="screen">
  </node>
</launch>
Nodelet基本使用 参考:nodelet的使用方法以及传输时间测试 ;ROS中pluginlib的使用总结;ROS nodelet初探;ROS与C++入门教程-nodelet-Node封装为Nodelet   Nodelet: 创建一个nodelet_manager进程,将一个或多个nodelet结点加入其中。每一个nodelet可看作一个node(有细微区别)。由于node之间存在多进程通信问题,所以node... 阅读详情

相关推荐

nodelet:Python库可帮助进行分布式节点操作

结点 Python库可帮助进行分布式节点操作 变化 为节点添加了查找功能,支持输入类型; “ xxxx”,“ c7u4m10”,“ c7u4” > from nodelet . utils . lookup_node import lookup_node > lookup_node ( "10.15.1.1" ) { 'c7u4m10' : { 'aisle' : 'c' , 'bmc_addr' : '10.0.131.10' , 'ip_addr' : '10.15.1.1' , 'megapod' : 10 , 'rack' : 7 , 'slot' : 4 } } 添加了by_megapod函数,该函数输出mp输入的IP地址。 > from nodelet . utils

在代码中加载nodelet

#include "ros/ros.h" #include "nodelet/loader.h" int main(int argc, char **argv) { ros::init(argc, argv, "manager"); nodelet::Loader manager(true); nodelet::M_string remap(ros::names::getRemappings()); nodelet::V_string nargv; // pkg-n

random_repick的专栏 476

ASIC--DFT可测性设计工程师

DFT是什么? DFT是design for test(可测性设计)的缩写,就是在芯片设计过程中,加入可测性逻辑。有的公司把该职位归到前端设计,有的归到中端实现。 DFT职位大多分布于规模较大的数字IC设计公司里,因为大公司对芯片品质要求高,而且规模越大,芯片越贵,DFT就越复杂越重要。DFT主要是通过在芯片中加入可测性逻辑,等芯片制造出来,在ATE(AutomaticTestEquipmen...

TroubleMaker 2万+

ROS学习|Nodetlet学习与使用

Nodelet旨在提供一种方法,在一台机器上、在一个进程中运行多个算法,在进程内传递消息时不会产生拷贝成本。普通节点使用TCP。这对很多事情来说都很好用。但是,如果你有多个进程需要使用包含大量数据的消息(如图像或点云),打包消息,发送消息,然后解包,可能需要一点时间。如果两个进程在同一台计算机上,那么只需发送一个指向该数据的指针,而不是通过TCP发送数据本身,这样会更快。但这只适用于同一台计算机上的进程(又称nodelet),因为一台计算机的指针对另一台计算机没有意义。

JeSuisDavid的博客 3251

保姆级教程:用再生龙Clonezilla Live给Ubuntu系统做全盘备份与恢复(含BIOS设置避坑)

本文提供了一份详细的Clonezilla Live教程,指导Ubuntu用户如何轻松完成全盘备份与恢复。从启动盘制作、BIOS设置避坑到备份参数解析和恢复操作,涵盖了所有关键步骤和常见问题解决方案,帮助用户高效保护系统数据。

weixin_42116058的博客 639

6.3 节深度拆解:Hermes Agent 多 Agent 协同执行链路的 4 层设计逻辑

拆解 Hermes 多 Agent 协同的 4 层工程化设计(协议层、编排层、执行层、适配层),聚焦协议层的强约束消息 Schema 如何解决 Agent 间语义不一致问题,并提供 `soul.md` 配置、GLM-4.7Flash 结构化输出验证及 v0.13.0/v0.14.0 版本实操避坑指南

weixin_42520239的博客 122

ROS之nodelet的使用

1 nodelet插件编写和使用流程介绍 ROS nodelet插件和ROS中普通插件编写流程一样,因为它们都是借助plubinlib来实现插件动态加载,都必须follow pluginlib使用规则,因此编写一个nodelet插件大致流程如下: 1.1编写nodelet插件class 由于插件基类是nodelet::NodeLet已经存在,所以不必编写啦。 MyN

ZXQHBD的博客 1859

NPU性能榨取手把手教程:RK3588上YOLOv5s多线程部署与120FPS极限探索

RK3588 YOLOv5s多线程部署优化指南 本教程深入解析RK3588芯片上YOLOv5s模型的高性能多线程部署方案。RK3588作为瑞芯微旗舰AIoT芯片,内置三核NPU(6TOPS算力)和硬件加速器(RGA/VPU),为AI推理提供强大支持。通过线程池技术,我们将视频处理的读取、推理、后处理等环节解耦并行,显著提升系统吞吐量。教程详细介绍了从PyTorch到RKNN格式的模型转换流程、INT8量化方法,以及基于RKNN C++ SDK的YOLOv5推理核心实现,帮助开发者最大化发挥RK3588的AI

LXY_LOVE36的博客 973

ROS:nodelet简介与应用

1 nodelet简介    使用ROS中nodelet包可以实现在同一个进程内同时运行多种算法,且算法之间通信开销零拷贝。这个包有2个重要的class:1)提供了实现nodelet插件所必须的基类nodelet::Nodelet; 2)提供了NodeletLoader类用以实例化nodelet插件。由于nodelets实现了零拷贝,所以常常应用于大数据吞吐量场景,避免了多node通过ROSTCP...

通哈膨胀哈哈哈 的博客 9907

x265开源编码器源码框架深度解析

x265开源编码器源码框架深度解析

世界那么大,我想去看看~【随心更新,看世界去了😄】 669

OpenCV入门(一)Python环境的搭建

因为有点Python基础,并且Python是比较好入门的编程语言,所以,机器视觉后面打算在Python这个平台下进行。

小幽余生不加糖 8122

ROS:nodelet

ROS:nodelet

立于皓月之边,不弱星光之势 2547

Cadence PCB仿真使用Allegro PCB SI S参数配置方法图文教程

S参数即S-Parameter是指散射参数,描述信号在传输线中的正反向传输和正反向反射的情况。本文讲述在使用Allegro PCB SI进行信号完整性仿真前,S参数的配置方法。

fydar的博客 2177

ROS相关收藏的技术文档

nodelet ROS nodelet初探 https://www.jianshu.com/p/4253ac32ec3a ROS nodelet的使用 https://www.cnblogs.com/21207-iHome/p/8213411.html

hjk61314的专栏 304

零基础实战:云开发家政维修小程序搭建指南

欢迎来到这本关于构建家政维修小程序的电子书!在当今数字化的浪潮中,线上服务已成为我们生活中不可或缺的一部分。从点餐购物到居家维修,人们越来越习惯通过指尖轻点来解决各种需求。正是基于这样的背景,我们希望通过这个系列,手把手地带领大家从零开始,搭建一个功能完备、体验流畅的家政维修平台。这不仅仅是一本技术教程,更是一次将想法变为现实的探索之旅。我们将深入浅出地讲解如何运用云开发等现代技术,实现从用户下单、支付,到客服派单、工人接单,再到订单完成和权限管理等一系列核心业务流程。

低代码布道师的博客 3431

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

ROS nodelet初探

1. 简介 nodelet官方教程:http://wiki.ros.org/nodelet 中文教程:http://www.ncnynl.com/archives/201702/1324.html nodelet是为了减少ros node之间的消息传输(进程间通讯), 将多个算法”结点(nodelet)”跑到一个进程中, 这样避免了数据传输, (因为进程内部内存是共享的, 传数据的话传个指针就行了)

roboto 1307

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

ROS之nodelet

nodelet

random_repick的专栏 869

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

ROS launch传参

1. 私有 源文件 auto privateNh = getPrivateNodeHandle(); privateNh.param("show", show, true); launch <node > <param name="show" type="bool" value="false"/> </node> 2. 非私有 源文件 ros::NodeHandle nh = getNodeHandle(); nh.param<boo

random_repick的专栏 457

ros——realsense sdk编译与安装

文章目录一、RealSense SDK 2.0 (v2.48.0)源码编译安装二、ROS源码运行 一、RealSense SDK 2.0 (v2.48.0)源码编译安装 SDK源码的下载地址 https://github.com/IntelRealSense/librealsense/releases 本文下载的是2.4.8: https://github.com/IntelRealSense/librealsense/releases/tag/v2.48.0 下载对应的版本 source code 编译.

shoukequ8359的博客 2606

ros运行找不到包

参考了这个博客,但还是报错:qt.qpa.xcb: QXcbConnection: XCB error: 6 (BadCursor), sequence: 1169, resource id: 85983243, major code: 2 (ChangeWindowAttributes), minor code: 0。在vscode中找到这个包。

m0_61917637的博客 613

ROS学习笔记09、ROS进阶(Action通信、动态参数、pluginlib、nodelet)

马上开学,目前学校很多实验室都是人工智能这块,大部分都是和机器人相关,然后软件这块就是和cv、ros相关,就打算开始学习一下。本章节是虚拟机安装Ubuntu18.04以及安装ROS的环境。【Autolabor初级教程】ROS机器人入门,博客中一些知识点是来源于赵老师的笔记在线笔记,本博客主要是做归纳总结,如有侵权请联系删除。链接:https://pan.baidu.com/s/13CAzXk0vAWuBsc4oABC-_g提取码:0hws博客目录索引(持续更新)#目标值goal int32 num。

每个人都是独一无二的,把握好自己的节奏,跟着自己的心走。 1431

ROS 介绍:定义、架构、通信机制

ROS介绍 ROS是什么:ROS是一个用于编写机器人软件的灵活框架,它集成了大量的工具、库、协议,提供了类似操作系统所提供的功能,包括硬件抽象描述、底层驱动程序管理、共用功能的执行、程序间的消息传递、程序发行包管理,可以极大简化繁杂多样的机器人平台下的复杂任务创建与稳定行为控制。 ROS的架构 ROS的架构设计分为三层,下面通过介绍两代ROS之间的设计变化来引出通信机制。 1. OS层 ...

LFT24的博客 1万+

最全ROS 入门

由浅入深,一文讲清ROS

阿呆的隐秘角落 1万+

自定义nodelet插件

参考链接: http://wiki.ros.org/nodelet http://wiki.ros.org/nodelet/Tutorials/Running a nodelet http://wiki.ros.org/nodelet/Tutorials/Porting nodes to nodelets https://blog.youkuaiyun.com/zyh821351004/article/det...

bbtang5568的博客 521

ROS2组件component自定义实现

实现一个自定义的组件信息test_component::Test1,功能包为test_component,发布话题“/talker”,类型为std_msg/msg/string

liang_yy的博客 1715

ROS2高效学习第十章 -- ros2 高级组件其一之 component 合并进程启动

ROS2高效学习第十章 -- ros2 高级组件之 component 合并进程启动 其一

cy1641395022的博客 3382
上一篇: VS Code 快速删除多行的部分内容
下一篇: 卡尔曼滤波学习资源和笔记
hacker_G
博客等级 码龄9年 75粉丝 60原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值