参数是节点(Node)的配置值,它们可以在运行时被设置和获取。

参数允许在不修改代码的情况下调整其行为,这使得节点更加灵活和可配置。

参数可以是各种类型,包括整数、浮点数、字符串、布尔值。

案例:

定义一个机器人,声明机器人参数,并设置机器人的相关参数。

在功能包下创建一个param.py

里面声明了机器人的三个参数robot_width,robot_height,robot_name

import rclpy
from rclpy.node import Node
from rclpy.parameter import Parameter

class ParameterNode(Node):
    def __init__(self, name):
        super().__init__(name)  # ROS2节点父类初始化
        self.timer = self.create_timer(2, self.timer_callback)  # 创建一个定时器(单位为秒,定时执行回调函数)
        
        # 声明机器人尺寸参数,并设置默认值
        self.declare_parameter('robot_width', 0.5)  # 假设默认宽度为0.5米
        self.declare_parameter('robot_height', 1.0)  # 假设默认高度为1.0米
        self.declare_parameter('robot_name', 'Xbot')  # 创建一个参数,并设置参数的默认值

    def timer_callback(self):
        # 从ROS2系统中获取新的参数值
        robot_name_param = self.get_parameter('robot_name').get_parameter_value().string_value
        robot_width_param = self.get_parameter('robot_width').get_parameter_value().double_value
        robot_height_param = self.get_parameter('robot_height').get_parameter_value().double_value
        
        # 输出日志信息,打印读取到的参数值
        self.get_logger().info('Robot Name: %s, Width: %.2f m, Height: %.2f m' % (robot_name_param, robot_width_param, robot_height_param))

        # 重新将参数值设置为初始值(如果需要)
        new_name_param = Parameter('robot_name', rclpy.Parameter.Type.STRING, 'Xbot')
        new_width_param = Parameter('robot_width', rclpy.Parameter.Type.DOUBLE, 0.5)
        new_height_param = Parameter('robot_height', rclpy.Parameter.Type.DOUBLE, 1.0)
        all_new_parameters = [new_name_param, new_width_param, new_height_param]
        self.set_parameters(all_new_parameters)  # 将重新创建的参数列表发送给ROS2系统

def main(args=None):
    rclpy.init(args=args)  # ROS2 Python接口初始化
    node = ParameterNode("param_sample")  # 创建ROS2节点对象并进行初始化
    rclpy.spin(node)  # 循环等待ROS2退出
    node.destroy_node()  # 销毁节点对象
    rclpy.shutdown()  # 关闭ROS2 Python接口

if __name__ == '__main__':
    main()

打开终端,运行节点后会输出日志消息

运行ros2 param list可以查看正在运行的参数名称

运行os2 param list 节点名

可以查看特定节点的参数名称

获取机器人robot_name参数的名字

ros2 param set /param_sample robot_height 1.2

 可以将机器人的高度设置为1.2

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐