繁体   English   中英

如何从 ROS2.py Launch 文件中的 YAML 读取特定参数?

[英]How to read specific parameter from YAML in ROS2 .py Launch file?

我有 ROS2 package,它有 YAML 文件和启动节点的 .py 启动文件。 我正在阅读 Launch 文件中 YAML 文件中的所有参数。 我将读取的值分配给param变量。 我想从 YAML 文件中的这个变量中获取extrinsic参数,并将它们作为static_transform_publisher的参数分配给arguments参数。 我该怎么做?

这里是 YAML 文件:

/**:
  ros__parameters:
    num_for_pub: 5
    intrinsic: [0.1 , 0.2 , 0.3 , 0.4 , 0.5, 0.6, 0.7, 0.8, 0.9]
    distortion: [1, 2, 3, 4, 5]
    extrinsic: [6, 7, 8, 9, 10, 11]

这里 .py 启动文件:

def generate_launch_description():
ld = LaunchDescription()

param = os.path.join(
    get_package_share_directory('cloud_projector'),
    'config',
    'cloud_projector.param.yaml'
    )

cloud_projector_node = Node(
    package='cloud_projector',
    namespace='cloud_projector',
    executable='cloud_projector_exec',
    name='cloud_projector',
    parameters = [param]
)

cam_to_lidar_transformer = Node(
    package ='tf2_ros',
    executable='static_transform_publisher',
    arguments=['0','0','1','0','0','0','lidar_frame','camera_frame']
)

ld.add_action(cam_to_lidar_transformer)
ld.add_action(cloud_projector_node)

return ld

预期结果

static 转换发布者节点中的结果参数应如下所示:

cam_to_lidar_transformer = Node(
    package ='tf2_ros',
    executable='static_transform_publisher',
    arguments=[x_value,y_value,z_value,roll_value,pitch_value,yaw_value,'lidar_frame','camera_frame']
)

由于这是一个常规的 python 脚本,您可以自己加载 YAML 文件,即给定 YAML 文件:

cloud_projector:
  ros__parameters:
    extrinsic: [6, 7, 8, 9, 10, 11]

您可以使用以下方式加载它:

import yaml
...
def generate_launch_description():
  ld = LaunchDescription()
  ...
  with open(param, 'r') as f:
    configuration = yaml.safe_load(f)
    print(f'Loaded configuration: {configuration}')
    print(f'Extrinsics: {configuration["cloud_projector"]["ros__parameters"]["extrinsic"]}')
  ...
  return ld

其中param是 YAML 的路径,如您的示例所示。 然后,您可以从configuration["foo"]["ros__parameters"]["extrinsic"]}中提取值并将其传递给static_transform_publisher

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM