ros2参数
·
参数是节点(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
更多推荐

所有评论(0)