【ROS2】初级:客户端-创建和使用插件(C++)

目标:学习使用 pluginlib 创建和加载一个简单的插件。

 教程级别:初学者

 时间:20 分钟

 目录

  •  背景

  •  先决条件

  •  任务

    • 创建基类包

    • 创建插件包

      2.1 插件的源代码

      2.2 插件声明 XML

      2.3 CMake 插件声明

    • 使用插件

    • 构建并运行

  •  摘要

 背景

这个教程源自于 http://wiki.ros.org/pluginlib,以及编写和使用一个简单插件教程。

pluginlib 是一个 C++库,用于在 ROS 包内加载和卸载插件。插件是动态可加载的类,它们从运行时库(即共享对象,动态链接库)中加载。使用 pluginlib,您无需显式地将应用程序与包含类的库链接——相反, pluginlib 可以在任何时候打开包含导出类的库,而无需应用程序事先了解库或包含类定义的头文件。插件对于扩展/修改应用程序行为很有用,而无需应用程序源代码。

 先决条件

本教程假设您具有基本的 C++知识,并且已经成功安装了 ROS 2。

 任务

在本教程中,您将创建两个新的包,一个定义基类,另一个提供插件。基类将定义一个通用的多边形类,然后我们的插件将定义特定的形状。

1 创建基类包

在您的 ros2_ws/src 文件夹中使用以下命令创建一个新的空包:

1bcb27eb4c645401e46d740293b3951c.png

cxy@ubuntu2404-cxy:~$ cd ~/ros2_ws/src
cxy@ubuntu2404-cxy:~/ros2_ws/src$ ros2 pkg create --build-type ament_cmake --license Apache-2.0 --dependencies pluginlib --node-name area_node polygon_base
going to create a new package
package name: polygon_base
destination directory: /home/cxy/ros2_ws/src
package format: 3
version: 0.0.0
description: TODO: Package description
maintainer: ['cxy <cxy@todo.todo>']
licenses: ['Apache-2.0']
build type: ament_cmake
dependencies: ['pluginlib']
node_name: area_node
creating folder ./polygon_base
creating ./polygon_base/package.xml
creating source and include folder
creating folder ./polygon_base/src
creating folder ./polygon_base/include/polygon_base
creating ./polygon_base/CMakeLists.txt
creating ./polygon_base/src/area_node.cpp

打开您最喜欢的编辑器,编辑 ros2_ws/src/polygon_base/include/polygon_base/regular_polygon.hpp ,然后将以下内容粘贴进去:

#ifndef POLYGON_BASE_REGULAR_POLYGON_HPP  // 如果没有定义 POLYGON_BASE_REGULAR_POLYGON_HPP
#define POLYGON_BASE_REGULAR_POLYGON_HPP  // 那么就定义 POLYGON_BASE_REGULAR_POLYGON_HPP


namespace polygon_base  // 定义命名空间 polygon_base
{
  class RegularPolygon  // 定义一个名为 RegularPolygon 的类
  {
    public:
      virtual void initialize(double side_length) = 0;  // 定义一个纯虚函数 initialize,接受一个 double 类型的参数 side_length
      virtual double area() = 0;  // 定义一个纯虚函数 area,返回一个 double 类型的值
      virtual ~RegularPolygon(){}  // 定义一个虚析构函数


    protected:
      RegularPolygon(){}  // 定义一个受保护的构造函数
  };
}  // 结束命名空间 polygon_base


#endif  // 结束条件编译,如果已经定义了 POLYGON_BASE_REGULAR_POLYGON_HPP,那么就不会再执行这个头文件中的代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值