ROS nodelet 使用详解

2023-05-16

本文以nodelet_tutorial_math为例来了解nodelet的原理及使用方法,理论知识参考http://blog.csdn.net/zyh821351004/article/details/52143309
代码地址:https://github.com/ros/common_tutorials/tree/hydro-devel/nodelet_tutorial_math
nodelet是什么?

1 ROS的数据通信在graph结构中以topic,service和param的方式传输数据,天生的数据交互存在一定的延时和阻塞。Nodelet 包就是改善这一状况设计的, 使得多个算法运行在同一个过程中,并且算法间数据传输无需拷贝就可实现。 详见http://wiki.ros.org/nodelet。 简单的讲就是可以将以前启动的多个node捆绑在一起manager,使得同一个manager里面的topic的数据传输更快。即同一个manager过程的nodelet数据传输zero copy 。

2 nodelet的manager可以加载多个的nodelets,nodelets间数据传输zero copy,有效避免数据copy和网络传输代价
3 支持pulgin的方式动态加载,基类nodelet::Nodelet, 任何nodelet继承自它可以使用plugin的方式动态加载。

nodelet命令

nodelet load pkg/Type manager //向manager中loader nodelet
nodelet standalone pkg/Type //程序复用,相当启动一个普通node
nodelet unload name manager //从manager移除nodelet
nodelet manager //创建mananger

实例:
rosrun nodelet nodelet manager __name:=nodelet_manager
创建mananger ,名字为nodelet_manager
rosrun nodelet nodelet load nodelet_tutorial_math/Plus nodelet_manager (人工空格) __name:=nodelet1 (人工空格) nodelet1/in:=foo (人工空格) _value:=1.1
使用nodelet_manager 加载nodelet_tutorial_math/Plus ,并且实例化
namespace 重命名为nodelet1。
nodelet1/in 重映射为foo,value的值为1.1

执行完上述两条命令后,可以查看当前的node ,topic列表

$rostopic list
$rosnode list

现在向节点发送topic

$rostopic pub /foo std_msgs/Float64 5.0 -r 10 

查看输出结果

$rostopic echo /nodelet1/out

这里写图片描述

nodelet在launch文件中的使用

//创建manger,名字为standalone_nodelet

使用 standalone_nodelet 加载nodelet_tutorial_math/Plus ,命名空间为Plus,topic可以remap


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

  <node pkg="nodelet" type="nodelet" name="Plus" args="load nodelet_tutorial_math/Plus standalone_nodelet" output="screen">
    <remap from="/Plus/out" to="remapped_output"/>
  </node>         
  <rosparam param="Plus2" file="$(find nodelet_tutorial_math)/plus_default.yaml"/>
  <node pkg="nodelet" type="nodelet" name="Plus2" args="load nodelet_tutorial_math/Plus standalone_nodelet" output="screen">
    <rosparam file="$(find nodelet_tutorial_math)/plus_default.yaml"/>
    <remap from="Plus2/in" to="remapped_output"/>
  </node>
  <node pkg="nodelet" type="nodelet" name="Plus3" args="standalone nodelet_tutorial_math/Plus" output="screen">
    <param name="value" type="double" value="2.5"/>
    <remap from="Plus3/in" to="Plus2/out"/><!--这里将plus2的输出重定向到plus3的输入-->
  </node>
</launch>

运行launch文件

$roslaunch nodelet_tutorial_math plus.launch
$rosnode list 

这里写图片描述
可以看到会启动3个Plus 节点:Plus,Plus2,Plus3

$rostopic list 

这里写图片描述

向节点发送topic
rostopic pub /Plus/in std_msgs/Float64 1.0
结果如下
这里写图片描述

$rqt_graph ,可以直观的看出数据交互的方式
这里写图片描述

关于Pluginlib,
可以参考http://blog.csdn.net/zyh821351004/article/details/52143309,基本就那几点。

1.为了允许类被动态加载,它必须被标记为导出类。 这通过特殊宏PLUGINLIB_EXPORT_CLASS/PLUGINLIB_DECLARE_CLASS来完成。 这个宏可以放在构成插件库的任何源(.cpp)文件中,但通常放在导出类的.cpp文件的末尾。
PLUGINLIB_DECLARE_CLASS(turtlebot_follower, TurtlebotFollower, turtlebot_follower::TurtlebotFollower, nodelet::Nodelet);
参数:pkg, class_name, class_type, base_class_type
详见plus.cpp,代码很简单就是两个数相加。

2.描述文件
插件描述文件是一个XML文件,用于以机器可读格式存储有关插件的所有重要信息。 它包含有关插件所在的库的信息,插件的名称,插件的类型等
libary path :动态库的相对路径
class 标签描述了由库提供的类。
name:类的查找名称。 由pluginlib工具用作插件的标识符。此字段在pluginlib 1.9和更高版本(ROS Groovy或更高版本)中是可选的
type:类型
base_class_type:基类的类型
description 标签:类的描述和它能做什么

nodelet_math.xml如下

<library path="lib/libnodelet_math">
  <class name="nodelet_tutorial_math/Plus" type="nodelet_tutorial_math::Plus" base_class_type="nodelet::Nodelet">
    <description> 
      A node to add a value and republish.
    </description>
  </class>
</library>

3.为了让pluginlib查询跨所有ROS包的系统上的所有可用插件,每个包必须显式指定它导出的插件,以及哪些包库包含这些插件。 插件提供程序必须在其导出标记块中的package.xml中指向其插件描述文件。

 <export>
    <nodelet plugin="${prefix}/plugins/nodelets.xml" />
  </export>

详见package.xml

可用的插件查询:rospack plugins –attrib=plugin nav_core //This will return all plugins exported from the nav_core package.
以上就是通过nodelet_tutorial_math 学习nodelet的过程。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ROS nodelet 使用详解 的相关文章

  • ROS 与Anaconda 发生冲突的解决方案

    背景 ubuntu16 04 之前装有anaconda3 配有许多环境 最近要用ros 安装完毕 catkin make时报错如下 home usr anaconda3 lib libpng16 so 16 对 inflateValidat
  • ros 样例代码和教程

    中国大学MOOC 机器人操作系统入门 课程代码示例 代码 https github com DroidAITech ROS Academy for Beginners 书 https legacy gitbook com book sych
  • Python 实现 Dijkstar 路径规划算法

    Dijstar 最短路径算法 用于计算起始点到最终点的最短路径 一般采用的是贪心算法策略 原理可以参考 图解 Open list 和 close list 环境 Terminal 需要预先安装两个库 matplotlib 和 math pi
  • 无人驾驶论坛

    1 百度Apollo论坛 http www 51apollo com 2 人工智能中文资讯网 http www ailab cn
  • 关于相机与激光雷达数据采集与标定

    最近在做一个关于车路协同的项目 需要做一个路侧系统 传感器有摄像头和激光雷达 相机和激光雷达联合标定费了老半天劲 在此记录一下 雷达时间戳不对 导致摄像头和雷达的数据无法对齐 解决办法 修改雷达驱动发布点云消息时的时间戳 相机内参标定可以使
  • ROS学习(1)——ROS1和ROS2的区别

    因为机器人是一个系统工程 它包括了机械臂结构 电子电路 驱动程序 通信框架 组装集成 调试和各种感知决策算法等方面 任何一个人甚至是一个公司都不可能完成机器人系统的研发工作 但是我们又希望自己能造出一个机器人跑一跑 验证一下自己的算法 所以
  • ROS turtlebot_follower :让机器人跟随我们移动

    ROS turtlebot follower 学习 首先在catkin ws src目录下载源码 地址 https github com turtlebot turtlebot apps git 了解代码见注释 其中有些地方我也不是很明白
  • ROS 第四天 ROS中的关键组件

    1 Launch文件 通过XML文件实现多节点的配置和启动 可自动启动ROS Master
  • (ros/qt报错) FATAL: ROS_MASTER_URI is not defined in the environment

    安装qt之后 明明打开roscore但是qt运行跟ros有关的节点时报错 FATAL 1450943695 306401842 ROS MASTER URI is not defined in the environment Either
  • roslaunch error: ERROR: cannot launch node of type

    今天在因为github上有个之前的包更新了 重新git clone后出现了一个问题 ERROR cannot launch node of type crazyflie demo controller py can t locate nod
  • 进入 docker 容器,exec 丢失 PATH 环境变量

    这是我的 Dockerfile FROM ros kinetic ros core xenial CMD bash 如果我跑docker build t ros docker run it ros 然后从容器内echo PATH 我去拿 o
  • 如何将视频或图像序列转换为包文件?

    我是 ROS 新手 我需要转换预先存在的视频文件 或者large可以连接到视频流中的图像数量 bagROS 中的文件 我在网上找到了这段代码 http answers ros org question 11537 creating a ba
  • ROS AsyncSpinner 的多线程行为

    我试图了解 ROS 中的 AsyncSpinner 是如何工作的 因为我可能有一些误解 你可以找到类似的问题here As seen here它的定义提到 异步旋转器 产生几个线程 可配置 将并行执行回调 同时不会阻塞执行该操作的线程 叫它
  • Kinect / Primesense (Xtion) ROS Ubuntu 通过虚拟机 (VMware)

    由于我花了相当长的时间才弄清楚如何让 Xtion Primesense 在 VMware 上工作 所以我想在这里与大家分享 使用 Kinect 时 即使 VMware 已成功连接该设备 我也无法让 ROS 查看该设备 roslaunch o
  • Caught exception in launch(see debug for traceback)

    Caught exception in launch see debug for traceback Caught exception when trying to load file of format xml Caught except
  • Caught exception in launch(see debug for traceback)

    Caught exception in launch see debug for traceback Caught exception when trying to load file of format xml Caught except
  • catkin_make后找不到ROS包

    我根据 ROS 的 Wiki 页面创建了一个 ROS 工作区 我还使用创建了一个包catkin create pkg在我刚刚创建的工作区下 然后 按照 ROS Wiki 中的步骤使用以下命令构建包catkin make 构建包后 我插入命令
  • 如何访问 Heroku 中的 docker 容器?

    我已按照此处构建图像的说明进行操作 https devcenter heroku com articles container registry and runtime getting started https devcenter her
  • 如何订阅“/scan”主题、修改消息并发布到新主题?

    我想通过订阅message ranges来改进turtlebot3的LDS 01传感器 通过应用一些算法修改messange ranges并将其发布到新主题 如下所示 但是当我运行编码时出现错误 错误是 遇到溢出的情况 错误是 运行时警告
  • 无法在 Ubuntu 20.04 上安装 ROS Melodic

    我正在尝试使用这些命令在 Ubuntu 20 04 上安装 ROS Melodic sudo sh c echo deb http packages ros org ros ubuntu lsb release sc main gt etc

随机推荐

  • 【UBUNTU】- 修改操作系统时间

    MFC 将DWORD类型转换成CString strTemp span class token punctuation span span class token function Format span span class token
  • 【Docker】部署环境

    64 toc 目录 本次任务概要 1 编写dockerfile 然后创建镜像2 运行容器测试3 镜像打包及解包4 docker 设置环境变量 任务流程具体操作说明 0 虚拟机环境及初始环境配置 初始方案 工作中需要将环境部署到麒麟操作系统上
  • 【kylin/ubuntu 】离线命令行基本操作

    Ubuntu赋予root权限 span class token number 1 span chmod u 43 w etc sudoers xff0c 修改完后就具备写的权利了 span class token number 2 span
  • ubuntu14.04 出现symbol lookup error

    通常在运行命令的时候有可能出现动态库的链接错误 symbol lookup error usr lib x86 64 linux gnu libgdk 3 so 0 undefined symbol cairo surface set de
  • 安装报错fatal error: Python.h: No such file or directory解决

    报错信息 aiohttp websocket c 6 20 fatal error Python h No such file or directory include 34 Python h 34 compilation terminat
  • Putty + Xming实现远程登陆Linux显示图形化界面

    一 Putty和Xming的简介 一般我们远程登录linux 服务器 xff0c 都是使用非加密的 telnet 或者加密的 ssh 这些登录方式有一个特点 xff1a 只能登录字符界面 xff0c 不能运行那些带有GUI界面的程序 有时候
  • 基于stm32与陀螺仪(mpu6050)的PID角度环算法,角度用OLED显示,使得智能车能在长时间跑直线和转直角弯,减小误差

    首先 xff0c 我做智能车用的是stm32f103c8t6作为主控芯片 xff0c 得到小车自身对于开始位置的三维变换角度所用的是mpu6050模块 xff0c 其与主控芯片采用I2C通信 此通信原理接下来会加入介绍资料 其次还有一个OL
  • 人物交互(human object interaction)论文汇总-2018年

    1 Detecting and Recognizing Human Object Interactions 1 1 总述 中心思想是以人为中心 假设是一个人的外表信息 xff08 姿态 衣服 动作等 xff09 是确定与他们交互的物体的有力
  • 一些面试题2.0

    红帽6的启动过程 1 xff0c bios加电自检 xff0c 检测硬件 xff0c 决定启动介质 xff0c 找到引导扇区 2 xff0c 读取并且执行第一个开机设备中的MBR的bootloader 3 xff0c 根据bootloade
  • 基于MATLAB的倒立摆系统控制

    摘要 倒立摆系统是由导轨 小车和各级摆杆组成 小车依靠直流电机施加的控制力 可以在导轨上左右移动 位移和摆杆角度信息由传感器测得 目标是使倒立摆在有限长的导轨上竖立稳定 达到动态平衡 由于倒立摆系统本身所具有的高阶次 不稳定 多变量 非线性
  • 枚举方法详解

    package test1 public enum Day SUNDAY MONDAY TUESDAY WEDNESDAY THURSDAY FRIDAY SATURDAY NOVALUE public static Day toDay S
  • Promise限制并发请求数量

    所谓并发请求 xff0c 就是指在一个时间点多个请求同时执行 当并发的请求超过一定数量时 xff0c 会造成网络堵塞 xff0c 服务器压力大崩溃或者其他高并发问题 xff0c 此时需要限制并发请求的数量 假如等待请求接口1000个 xff
  • 部署安装cobbler,实现批量安装CentOS7、Ubuntu17.04、Ubuntu18.04(快捷版)

    文章目录 一 部署安装cobbler1 编辑cobbler配置文件2 持续安装所需文件3 配置tftp4 安装pykickstart5 设置密码6 cobbler管理DHCP7 编辑启动应用服务脚本 二 镜像导入以及自动化文件必读须知1 C
  • IDEA中找不到maven插件Plugin‘ ‘ not found 解决

    1 lt artifactId gt maven compiler plugin lt artifactId gt lt version gt 3 8 0 lt version gt 等 报红 1 1首先要找设置 File Settings
  • 树莓派 安装 Ubuntu MATE18

    Ubuntu MATE18 树莓派 pi 64 raspberrypi span class token punctuation span span class token operator span sudo service cups s
  • Munkres 分配算法

    匈牙利方法 xff08 或 Kuhn 算法 xff09 是由4个基本步骤组成的迭代过程 该方法使用 最小行集 覆盖 操纵 成本矩阵的零点 xff0c 当所需的 最小行集 等于给定成本矩阵的维数时 xff0c 过程终止 Munkres 算法是
  • SORT 多目标跟踪算法笔记

    SORT 是一种简单的在线实时多目标跟踪算法 文章要点为 xff1a 以 IoU 作为前后帧间目标关系度量指标 xff1b 利用卡尔曼滤波器预测当前位置 xff1b 通过匈牙利算法关联检测框到目标 xff1b 应用试探期甄别虚检 xff1b
  • ros:kcf算法+行人检测 = 让机器人自动识别并追踪行人

    实现目标 xff1a 机器人检测到有人走过来 xff0c 迎上去并开始追踪 追踪算法使用kcf算法 xff0c 关于kcf追踪的ros库在github地址 https github com TianyeAlex tracker kcf ro
  • 人物交互(human object interaction)论文汇总-2019年

    1 Relation Parsing Neural Network for Human Object Interaction Detection 1 1 总述 提出一种关系解析神经网络RPNN xff0c 由两部分组成 xff1a 物体 身
  • ROS nodelet 使用详解

    本文以nodelet tutorial math为例来了解nodelet的原理及使用方法 xff0c 理论知识参考http blog csdn net zyh821351004 article details 52143309 代码地址 x