警告
您正在阅读的 ROS 2 文档版本已达到 EOL(生命周期结束),不再受官方支持。如果您想了解最新信息,请访问 Jazzy.
在类中使用参数(C++)
目标 使用 C++ 创建并运行一个带有 ROS 参数的类。
辅导水平: 初学者
时间 20 分钟
背景介绍
自己制作时 结点 有时,您需要添加一些可以通过启动文件设置的参数。
本教程将向您介绍如何在 C++ 类中创建这些参数,以及如何在启动文件中设置这些参数。
先决条件
任务
1 创建软件包
打开一个新终端,然后 为您的 ROS 2 安装提供源代码 以便 玫瑰2
命令即可运行。
跟进 本说明 创建一个名为 ros2_ws
.
回顾一下,软件包应在 来源
目录,而不是工作区的根目录。导航到 ros2_ws/src
并创建一个新软件包:
ros2 pkg create --build-type ament_cmake cpp_parameters --dependencies rclcpp
您的终端将返回一条信息,验证是否创建了软件包 cpp 参数
及其所有必要的文件和文件夹。
"(《世界人权宣言》) --依赖
参数会自动在 package.xml
和 CMakeLists.txt
.
1.1 更新 package.xml
因为您使用了 --依赖
选项,就不必在创建软件包时手动将依赖关系添加到 package.xml
或 CMakeLists.txt
.
不过,请务必一如既往地将说明、维护者的电子邮件和姓名以及许可证信息添加到 package.xml
.
<描述>;C++ 规范 教程</description>;
维护者 电子邮件="[email protected]";>;您的 名称维护人员</maintainer>;
许可证阿帕奇 许可证 2.0</license>;
2 编写 C++ 节点
内部 ros2_ws/src/cpp_parameters/src
目录下,新建一个名为 cpp_parameters_node.cpp
并粘贴以下代码:
#include 时间顺序<chrono>;
#include 功能强大;
#include <字符串>;
#include <rclcpp/rclcpp.hpp>;
使用 命名空间 标准::计时器;
类 最小参数 : 公 rclcpp::节点
{
公:
最小参数()
: 节点("minimal_param_node";)
{
此->;declare_parameter("my_parameter";, "世界";);
定时器 = 此->;创建隔离墙计时器(
1000毫秒, 标准::约束(及样品;最小参数::定时器回调, 此));
}
空白 定时器回调()
{
标准::字符串 参数 = 此->;获取参数("my_parameter";).as_string();
RCLCPP_INFO(此->;get_logger(), "你好 %s!";, 参数.c_str());
标准::病媒<;rclcpp::参数>; 所有新参数{rclcpp::参数("my_parameter";, "世界";)};
此->;设置参数(所有新参数);
}
私人:
rclcpp::定时器基数::SharedPtr 定时器;
};
int 主要(int 参数, 烧焦 ** 参数)
{
rclcpp::启动(参数, 参数);
rclcpp::后旋(标准::共享<;最小参数>;());
rclcpp::关闭();
返回 0;
}
2.1 检查代码
"(《世界人权宣言》) #include
顶部的语句是软件包依赖关系。
下一段代码将创建类和构造函数。该构造函数的第一行创建了一个名称为 参数
和默认值 世界
.参数类型是根据默认值推断的,因此在本例中将设置为字符串类型。接下来是 定时器
的初始化周期为 1000 毫秒,这将导致 定时器回调
函数每秒执行一次。
类 最小参数 : 公 rclcpp::节点
{
公:
最小参数()
: 节点("minimal_param_node";)
{
此->;declare_parameter("my_parameter";, "世界";);
定时器 = 此->;创建隔离墙计时器(
1000毫秒, 标准::约束(及样品;最小参数::定时器回调, 此));
}
我们的第一行 定时器回调
函数获取参数 参数
并将其存储在 参数
.接下来是 RCLCPP_INFO
函数确保事件被记录。事件 设置参数
函数,然后设置参数 参数
返回默认字符串值 世界
.如果用户从外部更改了参数,这将确保其始终重置为原始参数。
空白 定时器回调()
{
标准::字符串 参数 = 此->;获取参数("my_parameter";).as_string();
RCLCPP_INFO(此->;get_logger(), "你好 %s!";, 参数.c_str());
标准::病媒<;rclcpp::参数>; 所有新参数{rclcpp::参数("my_parameter";, "世界";)};
此->;设置参数(所有新参数);
}
最后是宣布 定时器
.
私人:
rclcpp::定时器基数::SharedPtr 定时器;
根据我们的 最小参数
是我们的 主要
.在这里,ROS 2 被初始化,一个 最小参数
类已构建,并且 rclcpp::spin
开始处理来自节点的数据。
int 主要(int 参数, 烧焦 ** 参数)
{
rclcpp::启动(参数, 参数);
rclcpp::后旋(标准::共享<;最小参数>;());
rclcpp::关闭();
返回 0;
}
2.1.1 (可选) 添加参数描述符
您还可以为参数设置描述符。通过描述符,可以对参数及其限制条件(如只读、指定范围等)进行文本描述。为此,必须将构造函数中的代码改为
// ...
类 最小参数 : 公 rclcpp::节点
{
公:
最小参数()
: 节点("minimal_param_node";)
{
汽车 参数说明 = rcl_interfaces::信息::参数描述符{};
参数说明.描述 = 这个参数是我的!";;
此->;declare_parameter("my_parameter";, "世界";, 参数说明);
定时器 = 此->;创建隔离墙计时器(
1000毫秒, 标准::约束(及样品;最小参数::定时器回调, 此));
}
其余代码保持不变。运行节点后,可以运行 玫瑰2 停止 描绘 /minimal_param_node 参数
查看类型和描述。
2.2 添加可执行文件
现在打开 CMakeLists.txt
文件。在依赖关系下方 find_package(rclcpp 必填)
添加以下代码行。
添加可执行(最小参数节点 src/cpp_parameters_node.cpp)
ament_target_dependencies(最小参数节点 rclcpp)
安装(目标
最小参数节点
目的地 lib/${项目名称}
)
3 构建和运行
运行 rosdep
在工作区的根目录 (ros2_ws
) 在构建前检查是否缺少依赖项:
rosdep install -i --from-path src --rosdistro foxy -y
rosdep 只能在 Linux 上运行,因此可以跳到下一步。
rosdep 只能在 Linux 上运行,因此可以跳到下一步。
返回工作区的根目录、 ros2_ws
然后创建新软件包:
colcon build --packages-select cpp_parameters
colcon build --packages-select cpp_parameters
colcon build --merge-install --packages-select cpp_parameters
打开一个新终端,导航至 ros2_ws
并获取设置文件:
source install/setup.bash
install/setup.bash
调用 install/setup.bat
现在运行节点:
ros2 运行 cpp_parameters minimal_param_node
终端应每秒返回以下信息:
[INFO] [minimal_param_node]:Hello world!
现在,您可以看到参数的默认值,但您希望能够自己设置它。有两种方法可以做到这一点。
3.1 通过控制台进行更改
这一部分将利用您从 参数教程 并将其应用于刚刚创建的节点。
确保节点正在运行:
ros2 运行 cpp_parameters minimal_param_node
打开另一个终端,从里面获取设置文件的源代码 ros2_ws
再次输入以下一行:
ros2 参数列表
您将看到自定义参数 参数
.要更改它,只需在控制台运行下面一行即可:
ros2 param set /minimal_param_node my_parameter earth
如果能得到输出结果,就说明一切顺利 设置 规范 成功的
.如果查看另一个终端,就会看到输出变为 [信息] [最小参数节点]: 您好 土!
3.2 通过启动文件进行更改
您也可以在启动文件中设置参数,但首先需要添加启动目录。在 ros2_ws/src/cpp_parameters/
目录,新建一个名为 启动
.在其中新建一个名为 cpp_parameters_launch.py
从 启动 舶来品 启动说明
从 launch_ros.actions 舶来品 节点
捍卫 生成发射描述():
返回 启动说明([
节点(
包装=cpp_parameters";,
可执行="minimal_param_node";,
名字="custom_minimal_param_node";,
产量="屏幕";,
仿真类型=正确,
参数=[
{"my_parameter";: "地球";}
]
)
])
在这里,您可以看到我们设置了 参数
至 地球
当我们启动节点时 最小参数节点
.通过添加下面两行,我们可以确保输出结果被打印到控制台中。
output="screen"、
emulate_tty=True、
现在打开 CMakeLists.txt
文件。在之前添加的行下面,添加以下代码行。
安装
目录启动
目的地 share/${PROJECT_NAME}
)
打开控制台,导航到工作区的根目录、 ros2_ws
然后创建新软件包:
colcon build --packages-select cpp_parameters
colcon build --packages-select cpp_parameters
colcon build --merge-install --packages-select cpp_parameters
然后在新终端中输入设置文件的源代码:
source install/setup.bash
install/setup.bash
调用 install/setup.bat
现在使用我们刚刚创建的启动文件运行节点:
ros2 启动 cpp_parameters cpp_parameters_launch.py
终端应每秒返回以下信息:
[INFO] [custom_minimal_param_node]:你好,地球!
摘要
你创建了一个带有自定义参数的节点,该参数可通过启动文件或命令行设置。您在软件包配置文件中添加了依赖项、可执行文件和启动文件,这样您就可以构建和运行它们,并查看参数的运行情况。
下一步工作
现在您已经有了自己的软件包和 ROS 2 系统,可以使用 下一个教程 将向您展示如何检查环境和系统中的问题,以防出现问题。