介绍如何将节点封装为Nodelet
处理过程
- 添加必要的#includes
#include <nodelet/nodelet.h>
#include <pluginlib/class_list_macros.h>
- 去掉int main()
- 继承子类 nodelet::Nodelet
namespace systemExample {
class SystemNodelet : public nodelet::Nodelet {
public:
SystemNodelet() { return; }
~SystemNodelet() {
// debug log
std::cout << "in ~SystemNodelet()" << std::endl;
return; }
private:
virtual void onInit();
};
}
- 将代码从构造函数移动到onInit()
namespace systemExample {
void SystemNodelet::onInit() {
NODELET_DEBUG("Initializing nodelet...");
ROS_INFO("Nodelet is Ok for test!!");
return;
}
}
- 添加PLUGINLIB_EXPORT_CLASS宏或PLUGINLIB_DECLARE_CLASS宏
PLUGINLIB_EXPORT_CLASS(systemExample::SystemNodelet, nodelet::Nodelet);
- 在包manifest.xml或package.xml中对nodelet添加<build_depend> 和
<run_depend>依赖项。
<depend>nodelet</depend>
- 创建.xml文件以将nodelet定义为插件
- 请在包manifest.xml或package.xml部分中添加项
<export>
<nodelet plugin="${prefix}/nodelets.xml"/>
</export>
- 对CMakeLists.txt进行必要的更改(注释掉一个rosbuild_add_executable,添加一个rosbuild_add_library)
# System Manager nodelet
add_library(system_manager_nodelet
src/System_nodelet.cpp
)
add_dependencies(system_manager_nodelet
${${PROJECT_NAME}_EXPORTED_TARGETS}
${catkin_EXPORTED_TARGETS}
)
target_link_libraries(system_manager_nodelet
${catkin_LIBRARIES}
)
这篇博客详细介绍了如何在ROS系统中将节点封装为Nodelet,包括添加必要的头文件,继承Nodelet基类,实现onInit()方法,使用PLUGINLIB_EXPORT_CLASS宏注册Nodelet,修改CMakeLists.txt文件,以及在package.xml中配置依赖和插件信息。通过这个过程,开发者可以更好地理解和实践ROS中的Nodelet管理机制。
5307

被折叠的 条评论
为什么被折叠?



