您正在阅读的是旧版本但仍受支持的 ROS 2 文档。 Jazzy.

在类中使用参数(Python)

目标 使用 Python 创建并运行带有 ROS 参数的类。

辅导水平: 初学者

时间 20 分钟

背景介绍

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

本教程将告诉您如何在 Python 类中创建这些参数,以及如何在启动文件中设置这些参数。

先决条件

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

任务

1 创建软件包

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

跟进 本说明 创建一个名为 ros2_ws.

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

ros2 pkg create --build-type ament_python --license Apache-2.0 python_parameters --dependencies rclpy

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

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

1.1 更新 package.xml

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

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

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

2 编写 Python 节点

内部 ros2_ws/src/python_parameters/python_parameters 目录下,新建一个名为 python_parameters_node.py 并粘贴以下代码:

舶来品 rclpy
舶来品 rclpy.node

 最小参数(rclpy.网站.节点):
    捍卫 启动(自我):
        棒极了().启动('minimal_param_node';)

        自我.declare_parameter('my_parameter', '世界';)

        自我.定时器 = 自我.创建计时器(1, 自我.定时器回调)

    捍卫 定时器回调(自我):
        参数 = 自我.获取参数('my_parameter').获取参数值().string_value

        自我.get_logger().信息('你好 %s!' % 参数)

        我的新参数 = rclpy.规范.参数(
            'my_parameter',
            rclpy.参数.类型.字符串,
            '世界';
        )
        所有新参数 = [我的新参数]
        自我.设置参数(所有新参数)

捍卫 主要():
    rclpy.启动()
    网站 = 最小参数()
    rclpy.后旋(网站)

如果 姓名____ == '__main__';:
    主要()

2.1 检查代码

"(《世界人权宣言》) 舶来品 语句用于导入软件包依赖项。

下一段代码创建了类和构造函数。该行 self.declare_parameter('my_parameter'、 '世界') 的构造函数创建了一个名称为 参数 和默认值 世界.参数类型是根据默认值推断的,因此在本例中将设置为字符串类型。接下来是 定时器 的初始化周期为 1,这会导致 定时器回调 函数每秒执行一次。

 最小参数(rclpy.网站.节点):
    捍卫 启动(自我):
        棒极了().启动('minimal_param_node';)

        自我.declare_parameter('my_parameter', '世界';)

        自我.定时器 = 自我.创建计时器(1, 自我.定时器回调)

我们的第一行 定时器回调 函数获取参数 参数 并将其存储在 参数.接下来是 get_logger 函数确保事件被记录。事件 设置参数 函数,然后设置参数 参数 返回默认字符串值 世界.如果用户从外部更改了参数,这将确保其始终重置为原始参数。

捍卫 定时器回调(自我):
    参数 = 自我.获取参数('my_parameter').获取参数值().string_value

    自我.get_logger().信息('你好 %s!' % 参数)

    我的新参数 = rclpy.规范.参数(
        'my_parameter',
        rclpy.参数.类型.字符串,
        '世界';
    )
    所有新参数 = [我的新参数]
    自我.设置参数(所有新参数)

定时器回调 是我们的 主要.在这里,ROS 2 被初始化,一个 最小参数 类已构建,并且 rclpy.spin 开始处理来自节点的数据。

捍卫 主要():
    rclpy.启动()
    网站 = 最小参数()
    rclpy.后旋(网站)

如果 姓名____ == '__main__';:
    主要()
2.1.1 (可选) 添加参数描述符

您还可以为参数设置描述符。通过描述符,可以指定参数的文本描述及其限制条件,如只读、指定范围等。为此,需要 启动 代码必须改为

# ...

 最小参数(rclpy.网站.节点):
    捍卫 启动(自我):
        棒极了().启动('minimal_param_node';)

         rcl_interfaces.msg 舶来品 参数描述符
        参数描述符 = 参数描述符(描述='这个参数是我的!';)

        自我.declare_parameter('my_parameter', '世界';, 参数描述符)

        自我.定时器 = 自我.创建计时器(1, 自我.定时器回调)

其余代码保持不变。运行节点后,可以运行 玫瑰2 停止 描绘 /minimal_param_node 参数 查看类型和描述。

2.2 添加入口

打开 setup.py 文件。同样,匹配 维护者, 维护者电子邮件, 描述许可 字段到您的 package.xml:

维护者='YourName';,
维护者电子邮件='[email protected]';,
描述='Python 参数教程';,
许可='阿帕奇许可证 2.0';,

控制台脚本 括号内的 入口 field:

入口={
    'console_scripts';: [
        'minimal_param_node = python_parameters.python_parameters_node:main';,
    ],
},

别忘了保存。

3 构建和运行

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

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

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

colcon build --packages-select python_parameters

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

source install/setup.bash

现在运行节点:

ros2 run python_parameters minimal_param_node

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

[INFO] [parameter_node]:Hello world!

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

3.1 通过控制台进行更改

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

确保节点正在运行:

ros2 run python_parameters minimal_param_node

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

ros2 参数列表

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

ros2 param set /minimal_param_node my_parameter earth

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

因为节点之后会将参数设置回 世界,进一步的输出显示 [信息] [最小参数节点]: 您好 世界

3.2 通过启动文件进行更改

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

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

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

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

output="screen"、
emulate_tty=True、

现在打开 setup.py 文件。添加 舶来品 语句到文件顶部,另一条新语句到 数据文件 参数来包含所有启动文件:

舶来品 os
 水珠 舶来品 水珠
# ...

设置(
  # ...
  数据文件=[
      # ...
      (os..加入('分享';, 包名), 水珠('launch/*launch.[pxy][yma]*')),
    ]
  )

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

colcon build --packages-select python_parameters

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

source install/setup.bash

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

ros2 启动 python_parameters python_parameters_launch.py

终端第一次应返回以下信息:

[INFO] [custom_minimal_param_node]:你好,地球!

进一步的成果应显示 [信息] [最小参数节点]: 您好 世界 每秒钟

摘要

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

下一步工作

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