警告

您正在阅读的 ROS 2 文档版本已达到 EOL(生命周期结束),不再受官方支持。如果您想了解最新信息,请访问 Jazzy.

在类中使用参数(C++)

目标 使用 C++ 创建并运行一个带有 ROS 参数的类。

辅导水平: 初学者

时间 20 分钟

背景介绍

自己制作时 结点 有时,您需要添加一些可以通过启动文件设置的参数。

本教程将向您介绍如何在 C++ 类中创建这些参数,以及如何在启动文件中设置这些参数。

先决条件

在前面的教程中,您学习了如何 创建工作区创建软件包.您还了解了 参数 及其在 ROS 2 系统中的功能。

任务

1 创建软件包

打开一个新终端,然后 为您的 ROS 2 安装提供源代码 以便 玫瑰2 命令即可运行。

导航进入 dev_ws 目录。

回顾一下,软件包应在 来源 目录,而不是工作区的根目录。导航到 dev_ws/src 并创建一个新软件包:

ros2 pkg create --build-type ament_cmake cpp_parameters --dependencies rclcpp

您的终端将返回一条信息,验证是否创建了软件包 cpp 参数 及其所有必要的文件和文件夹。

"(《世界人权宣言》) --依赖 参数会自动在 package.xmlCMakeLists.txt.

1.1 更新 package.xml

因为您使用了 --依赖 选项,就不必在创建软件包时手动将依赖关系添加到 package.xmlCMakeLists.txt.

不过,请务必一如既往地将说明、维护者的电子邮件和姓名以及许可证信息添加到 package.xml.

<描述>;C++ 规范 教程</description>;
维护者 电子邮件="[email protected]";>;您的 名称维护人员</maintainer>;
许可证阿帕奇 许可证 2.0</license>;

2 编写 C++ 节点

内部 dev_ws/src/cpp_parameters/src 目录下,新建一个名为 cpp_parameters_node.cpp 并粘贴以下代码:

#include <rclcpp/rclcpp.hpp>;
#include 时间顺序<chrono>;
#include <字符串>;
#include 功能强大;

使用 命名空间 标准::计时器;

 参数类:  rclcpp::节点
{
  :
    参数类()
      : 节点("parameter_node";)
    {
      ->;declare_parameter<;标准::字符串>;("my_parameter";, "世界";);
      定时器 = ->;创建隔离墙计时器(
      1000毫秒, 标准::约束(及样品;参数类::应声, ));
    }
    空白 应声()
    {
      ->;获取参数("my_parameter";, 参数字符串);
      RCLCPP_INFO(->;get_logger(), "你好 %s";, 参数字符串.c_str());
    }
  私人:
    标准::字符串 参数字符串;
    rclcpp::定时器基数::SharedPtr 定时器;
};

int 主要(int 参数, 烧焦** 参数)
{
  rclcpp::启动(参数, 参数);
  rclcpp::后旋(标准::共享<;参数类>;());
  rclcpp::关闭();
  返回 0;
}

2.1 检查代码

"(《世界人权宣言》) #include 顶部的语句是软件包依赖关系。

下一段代码创建了类和构造函数。该构造函数的第一行创建了我们的参数。我们的参数名为 参数 并被赋予默认值 世界.下一个 定时器 被初始化,这会导致 应声 函数每秒执行一次。

 参数类:  rclcpp::节点
{
  :
    参数类()
      : 节点("parameter_node";)
    {
      ->;declare_parameter<;标准::字符串>;("my_parameter";, "世界";);
      定时器 = ->;创建隔离墙计时器(
      1000毫秒, 标准::约束(及样品;参数类::应声, ));
    }

我们的第一行 应声 函数获取参数 参数 并将其存储在 参数字符串.......。 RCLCPP_INFO 函数确保信息被记录。

空白 应声()
{
  ->;获取参数("my_parameter";, 参数字符串);
  RCLCPP_INFO(->;get_logger(), "你好 %s";, 参数字符串.c_str());
}

最后是宣布 定时器参数字符串

私人:
  标准::字符串 参数字符串;
  rclcpp::定时器基数::SharedPtr 定时器;

根据我们的 参数类 是我们的 主要.这里,ROS 2 已初始化,并且 rclcpp::spin 开始处理来自节点的数据。

int 主要(int 参数, 烧焦** 参数)
{
  rclcpp::启动(参数, 参数);
  rclcpp::后旋(标准::共享<;参数类>;());
  rclcpp::关闭();
  返回 0;
}

2.2 添加可执行文件

现在打开 CMakeLists.txt 文件。在依赖关系下方 find_package(rclcpp 必填) 添加以下代码行。

add_executable(parameter_node src/cpp_parameters_node.cpp)
ament_target_dependencies(parameter_node rclcpp)

install(TARGETS
  参数节点
  目的地 lib/${PROJECT_NAME}
)

3 构建和运行

运行 rosdep 在工作区的根目录 (dev_ws) 在构建前检查是否缺少依赖项:

rosdep install -i --from-path src --rosdistro eloquent -y

返回工作区的根目录、 dev_ws然后创建新软件包:

colcon build --packages-select cpp_parameters

打开一个新终端,导航至 dev_ws并获取设置文件:

install/setup.bash

现在运行节点:

ros2 运行 cpp_parameters 参数节点

终端应每秒返回以下信息:

[INFO] [参数节点]:世界你好

现在,您可以看到参数的默认值,但您希望能够自己设置它。有两种方法可以做到这一点。

3.1 通过控制台进行更改

这一部分将利用您从 参数教程 并将其应用于刚刚创建的节点。

确保节点正在运行:

ros2 运行 cpp_parameters 参数节点

打开另一个终端,从里面获取设置文件的源代码 dev_ws 再次输入以下一行:

ros2 参数列表

您将看到自定义参数 参数.要更改它,只需在控制台运行以下一行即可:

ros2 param set /parameter_node my_parameter earth

如果能得到输出结果,就说明一切顺利 设置 规范 成功的.如果查看另一个终端,就会看到输出变为 [信息] [参数节点]: 您好 地球

3.2 通过启动文件进行更改

您也可以在启动文件中设置参数,但首先需要添加启动目录。在 dev_ws/src/cpp_parameters/ 目录,新建一个名为 启动.在其中新建一个名为 cpp_parameters_launch.py

 启动 舶来品 启动说明
 launch_ros.actions 舶来品 节点

捍卫 生成发射描述():
    返回 启动说明([
        节点(
            包装=cpp_parameters";,
            节点可执行="parameter_node";,
            节点名="custom_parameter_node";,
            产量="屏幕";,
            仿真类型=正确,
            参数=[
                {"my_parameter";: "地球";}
            ]
        )
    ])

在这里,您可以看到我们设置了 参数地球 当我们启动节点时 参数节点.通过添加下面两行,我们可以确保输出结果被打印到控制台中。

output="screen"、
emulate_tty=True、

现在打开 CMakeLists.txt 文件。在之前添加的行下面,添加以下代码行。

安装
  目录启动
  目的地 share/${PROJECT_NAME}
)

打开控制台,导航到工作区的根目录、 dev_ws然后创建新软件包:

colcon build --packages-select cpp_parameters

然后在新终端中输入设置文件的源代码:

install/setup.bash

现在使用我们刚刚创建的启动文件运行节点:

ros2 启动 cpp_parameters cpp_parameters_launch.py

终端应每秒返回以下信息:

[parameter_node-1] [INFO] [custom_parameter_node]:你好,地球

摘要

你创建了一个带有自定义参数的节点,该参数可通过启动文件或命令行设置。您在软件包配置文件中添加了依赖项、可执行文件和启动文件,这样您就可以构建和运行它们,并查看参数的运行情况。

下一步工作

现在您已经有了自己的软件包和 ROS 2 系统,可以使用 下一个教程 将向您展示如何检查环境和系统中的问题,以防出现问题。