ROS2的参数——原来是用服务实现的,一起探究一下吧!
2023-11-24 22:01:44
前言: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参数非常有用,可以让我们轻松地存储和管理机器人的各种运行时信息。