我是靠谱客的博主 个性小松鼠,最近开发中收集的这篇文章主要介绍ROS Nodelet使用,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1.创建包

cd src
catkin_create_pkg nodelet_tutorials roscpp nodelet std_msgs

这需要依赖nodelet包,这个包提供了编写ROS Nodelet的api。

2. 写插件类

class feature_extraction : public nodelet::Nodelet      需要继承 nodelet::Nodelet

nodelet 本身即是基于plugin,所以其写法与plugin非常类似,只是这里的基类变成Nodelet。需要注意的地方有五点。

1. 需要包含#include <nodelet/nodelet.h>头文件。

2. nodelet 插件类需要继承基类Nodelet。

3. 重写虚函数onInit(), 在其中定义ros句柄,此函数类似于普通节点中的main()函数。

4. 使用getPrivateNodeHandle()函数初始化ros句柄,用于命名其话题以及参数命名空间。

5. 在使用nodelet时,打印语句建议使用nodelet自定义的代替原ROS_INFO()系列。

3.将ros plugin 制作成插件类


//PLUGINLIB_EXPORT_CLASS()将C++类制作为为ros plugin。
PLUGINLIB_EXPORT_CLASS(extrinsic_calibration::feature_extraction, nodelet::Nodelet);

4.配置CMakeLists.txt

add_library(feature_extraction src/feature_extraction.cpp include/cam_lidar_calibration/projector.h)

编译插件库文件。


5.创建nodelet 插件描述文件

<library path="lib/libfeature_extraction">
  <class name="extrinsic_calibration/feature_extraction" type="extrinsic_calibration::feature_extraction" base_class_type="nodelet::Nodelet">
    <description> 
      Obtains features from the checkerboard
    </description>
  </class>

</library>

6.导出插件

即是通过包描述文件package.xml,导出插件描述文件,使得其他节点可以使用本包提供的插件,在package.xml中<export>标签添加如下:

<nodelet plugin="${prefix}/nodelet_definition.xml"/>

7.创建launch文件

<launch>

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

  <node pkg="nodelet" type="nodelet" name="feature_extraction" args="load extrinsic_calibration/feature_extraction nodelet_manager" output="screen" required="true">
    <param name="plane_distance_threshold" value="0.05"/>
    <param name="line_distance_threshold" value="0.08"/>
  </node>

  <node pkg="cam_lidar_calibration" type="input_sample" name="input_sample" output="screen">
  </node>
   
   <node type="rviz" name="rviz" pkg="rviz" args="-d $(find cam_lidar_calibration)/rviz/cam_lidar_calibration.rviz" />

  <node pkg="rqt_reconfigure" type="rqt_reconfigure" name="rqt_reconfigure" />

</launch>



8.小结

ros nodelet是ros为提高节点之间,通过话题通信效率而实现,常用于数据量比较大的场景,例如激光雷达和图像数据等。其实现机制是通过ros plugin技术,将节点封装为plugins,然后在加载到同一个进程中,实现零拷贝通信。

最后

以上就是个性小松鼠为你收集整理的ROS Nodelet使用的全部内容,希望文章能够帮你解决ROS Nodelet使用所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(63)

评论列表共有 0 条评论

立即
投稿
返回
顶部