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,然后在加载到同一个进程中,实现零拷贝通信。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值