返回

ROS2的参数——原来是用服务实现的,一起探究一下吧!

人工智能

前言:ROS2的世界

ROS2,全称Robot Operating System 2,是一个开源的机器人操作系统,它为开发机器人提供了丰富的工具和库。它也越来越受欢迎,被广泛应用于机器人开发领域。

ROS2的一个重要特性是参数管理,参数可以存储机器人运行时的各种信息,比如机器人的位置、速度、传感器的值等等。参数可以通过话题或服务来访问,方便其他节点获取和修改这些信息。

ROS2参数的工作原理

那么,ROS2的参数是怎么实现的呢?原来,它是用服务来实现的。每个参数都会对应一个服务,当某个节点想要读取或修改参数时,它会向对应的服务发送请求,服务收到请求后,会返回参数的值或执行修改参数的操作。

实验:亲自动手体验ROS2参数

为了更好地理解ROS2参数的用法,我们来做一个实验。首先,我们需要创建一个新的ROS2项目。打开终端,输入以下命令:

mkdir my_ros2_project
cd my_ros2_project
colcon build

之后,我们创建一个新的节点,用于读取和修改参数。在src目录下,创建一个新的Python文件my_node.py,并输入以下代码:

import rclpy
from rclpy.node import Node

class MyNode(Node):

    def __init__(self):
        super().__init__('my_node')
        self.declare_parameter('my_param', 10)

    def on_parameter_changed(self, event):
        self.get_logger().info('Parameter %s changed to %s' % (event.name, event.value))

def main(args=None):
    rclpy.init(args=args)
    node = MyNode()
    rclpy.spin(node)
    rclpy.shutdown()

if __name__ == '__main__':
    main()

在代码中,我们首先声明了一个名为my_param的参数,并将其初始值设置为10。然后,我们定义了一个回调函数on_parameter_changed,当参数my_param的值发生变化时,该函数会被调用。最后,我们在main()函数中创建了一个新的MyNode对象,并调用rclpy.spin()函数来启动节点。

现在,我们可以在终端中运行以下命令来启动节点:

ros2 run my_ros2_project my_node

当节点启动后,我们可以在终端中输入以下命令来查看参数my_param的值:

ros2 param get /my_node/my_param

输出结果为:

10

接下来,我们可以在终端中输入以下命令来修改参数my_param的值:

ros2 param set /my_node/my_param 20

修改完成后,我们再次使用ros2 param get命令来查看参数my_param的值,输出结果为:

20

这表明参数my_param的值已经成功修改为20。同时,我们也会在终端中看到以下输出:

[INFO] [my_node-1] Parameter my_param changed to 20

这表明回调函数on_parameter_changed已经被调用,并输出了一条日志信息。

结语:ROS2参数的妙用

通过这个实验,我们了解了ROS2参数的实现原理以及如何使用服务来访问和修改参数。ROS2参数非常有用,可以让我们轻松地存储和管理机器人的各种运行时信息。