警告
您正在阅读的 ROS 2 文档版本已达到 EOL(生命周期结束),不再受官方支持。如果您想了解最新信息,请访问 Jazzy.
在类中使用参数(Python)
目标 使用 Python (rclpy) 创建并运行带有 ROS 参数的类。
辅导水平: 初学者
时间 20 分钟
背景介绍
自己制作时 结点 有时,您需要添加一些可以通过启动文件设置的参数。
本教程将告诉您如何在 Python 类中创建这些参数,以及如何在启动文件中设置这些参数。
先决条件
任务
1 创建软件包
打开一个新终端,然后 为您的 ROS 2 安装提供源代码 以便 玫瑰2
命令即可运行。
导航进入 dev_ws
目录中创建的 上一个教程.
回顾一下,软件包应在 来源
目录,而不是工作区的根目录。导航到 dev_ws/src
并创建一个新软件包:
ros2 pkg create --build-type ament_python python_parameters --dependencies rclpy
您的终端将返回一条信息,验证是否创建了软件包 参数
及其所有必要的文件和文件夹。
"(《世界人权宣言》) --依赖
参数会自动在 package.xml
和 CMakeLists.txt
.
1.1 更新 package.xml
因为您使用了 --依赖
选项,就不必在创建软件包时手动将依赖关系添加到 package.xml
或 CMakeLists.txt
.
不过,请务必一如既往地将说明、维护者的电子邮件和姓名以及许可证信息添加到 package.xml
.
<描述>;Python 规范 教程</description>;
维护者 电子邮件="[email protected]";>;您的 名称维护人员</maintainer>;
许可证阿帕奇 许可证 2.0</license>;
2 编写 Python 节点
内部 dev_ws/src/python_parameters/python_parameters
目录下,新建一个名为 python_parameters_node.py
并粘贴以下代码:
舶来品 rclpy
舶来品 rclpy.node
从 rclpy.异常 舶来品 参数未声明异常
从 rcl_interfaces.msg 舶来品 参数类型
类 最小参数(rclpy.网站.节点):
捍卫 启动(自我):
棒极了().启动('minimal_param_node';)
定时器周期 = 2 # 秒
自我.定时器 = 自我.创建计时器(定时器周期, 自我.定时器回调)
自我.declare_parameter('my_parameter', '世界';)
捍卫 定时器回调(自我):
参数 = 自我.获取参数('my_parameter').获取参数值().string_value
自我.get_logger().信息('你好 %s!' % 参数)
我的新参数 = rclpy.规范.参数(
'my_parameter',
rclpy.参数.类型.字符串,
'世界';
)
所有新参数 = [我的新参数]
自我.设置参数(所有新参数)
捍卫 主要():
rclpy.启动()
网站 = 最小参数()
rclpy.后旋(网站)
如果 姓名____ == '__main__';:
主要()
2.1 检查代码
注意:必须在获取或设置参数前声明该参数,否则将导致 参数未声明异常
将引发异常。
"(《世界人权宣言》) 舶来品
语句用于导入软件包依赖项。
舶来品 rclpy
舶来品 rclpy.node
从 rclpy.异常 舶来品 参数未声明异常
从 rcl_interfaces.msg 舶来品 参数类型
下一段代码将创建类和构造函数。
定时器
被初始化(timer_period 设置为 2 秒),这会导致 定时器回调
函数每两秒执行一次。行 self.declare_parameter('my_parameter'、 '世界')
的构造函数创建了一个名称为 参数
和默认值 世界
.
类 最小参数(rclpy.网站.节点):
捍卫 启动(自我):
棒极了().启动('minimal_param_node';)
定时器周期 = 2 # 秒
自我.定时器 = 自我.创建计时器(定时器周期, 自我.定时器回调)
自我.declare_parameter('my_parameter', '世界';)
我们的第一行 定时器回调
函数获取参数 参数
并将其存储在 参数
.接下来是 get_logger
函数确保信息被记录。然后,我们将参数 "my_parameter "设回默认字符串值 "world"。
捍卫 定时器回调(自我):
参数 = 自我.获取参数('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';)
定时器周期 = 2 # 秒
自我.定时器 = 自我.创建计时器(定时器周期, 自我.定时器回调)
从 rcl_interfaces.msg 舶来品 参数描述符
参数描述符 = 参数描述符(类型=参数类型.参数字符串,
描述='这个参数是我的!';)
自我.declare_parameter('my_parameter',
'my_parameter 的默认值';,
参数描述符)
其余代码保持不变。运行节点后,可以运行 玫瑰2 停止 描绘 /minimal_param_node 参数
查看类型和描述。
2.2 添加入口
打开 setup.py
文件。同样,匹配 维护者
, 维护者电子邮件
, 描述
和 许可
字段到您的 package.xml
:
维护者='YourName';,
维护者电子邮件='[email protected]';,
描述='Python 参数教程';,
许可='阿帕奇许可证 2.0';,
在 控制台脚本
括号内的 入口
field:
入口={
'console_scripts';: [
'param_talker = python_parameters.python_parameters_node:main';,
],
},
别忘了保存。
3 构建和运行
运行 rosdep
在工作区的根目录 (dev_ws
) 在构建前检查是否缺少依赖项:
rosdep install -i --from-path src --rosdistro dashing -y
rosdep 只能在 Linux 上运行,因此可以跳到下一步。
rosdep 只能在 Linux 上运行,因此可以跳到下一步。
返回工作区的根目录、 dev_ws
然后创建新软件包:
colcon build --packages-select python_parameters
打开一个新终端,导航至 dev_ws
并获取设置文件:
install/setup.bash
install/setup.bash
调用 install/setup.bat
现在运行节点:
ros2 run python_parameters param_talker
除了参数为默认值(空字符串)的第一条信息外,终端应每隔 2 秒返回以下信息:
[INFO] [parameter_node]:Hello world!
更改参数有两种方法:
3.1 通过控制台进行更改
这一部分将利用您从 关于参数的口令 并将其应用于刚刚创建的节点。
确保节点正在运行:
ros2 run python_parameters param_talker
打开另一个终端,从里面获取设置文件的源代码 dev_ws
再次输入以下一行:
ros2 参数列表
您将看到自定义参数 参数
.要更改它,只需在控制台运行以下一行即可:
ros2 param set /minimal_param_node my_parameter earth
如果能得到输出结果,就说明一切顺利 设置 规范 成功的
.如果查看另一个终端,就会看到输出变为 [信息] [最小参数节点]: 您好 土!
因为 Python 对话者会将参数设置回 世界
,进一步的输出显示 [信息] [最小参数节点]: 您好 世界
3.2 通过启动文件进行更改
您也可以在启动文件中设置参数,但首先需要添加一个启动目录。在 dev_ws/src/python_parameters/
目录,新建一个名为 启动
.在其中新建一个名为 python_parameters_launch.py
仿真类型
会将输出结果打印到控制台,但在 Dashing 中却不可用。
从 启动 舶来品 启动说明
从 launch_ros.actions 舶来品 节点
捍卫 生成发射描述():
返回 启动说明([
节点(
包装='python_parameters';,
节点可执行='param_talker',
节点名='自定义参数节点';,
产量='屏幕';,
参数=[
{'my_parameter': '地球';}
]
)
])
在这里,您可以看到我们设置了 参数
至 地球
当我们启动节点时 参数节点
.
现在打开 setup.py
文件。添加 舶来品
语句到文件顶部,另一条新语句到 数据文件
参数来包含所有启动文件:
舶来品 os
从 水珠 舶来品 水珠
# ...
设置(
# ...
数据文件=[
# ...
(os.路.加入('分享';, 包名), 水珠('launch/*_launch.py';)),
]
)
打开控制台,导航到工作区的根目录、 dev_ws
然后创建新软件包:
colcon build --packages-select python_parameters
然后在新终端中输入设置文件的源代码:
install/setup.bash
install/setup.bash
调用 install/setup.bat
现在使用我们刚刚创建的启动文件运行节点:
ros2 启动 python_parameters python_parameters_launch.py
因为 仿真类型
如果 Dashing 中没有打印输出到控制台的功能,就不会有任何输出。在更新的版本中,终端会返回以下信息:
[parameter_node-1] [INFO] [custom_parameter_node]:你好,地球!
摘要
你创建了一个带有自定义参数的节点,该参数可以通过启动文件或命令行设置。你编写了一个参数对话器的代码:一个 Python 节点,它声明并循环获取和设置一个字符串参数。你添加了入口点,以便构建和运行它,并使用了 玫瑰2 停止
与参数对话者互动。
下一步工作
您已经完成了初级教程!