概述
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使用所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复