Skip to content

PathJoinSubstitution and parameter config file

Using PathJoinSubstitution to build path to parameter yaml file.

Project

├── CMakeLists.txt
├── config
   └── params.yaml
├── launch
   └── param_yaml_demo.launch.py
├── launch_tutorial
   ├── __init__.py
   └── simple_node.py
├── package.xml
└── src
param.yaml
config/params.yaml
1
2
3
/**:
  ros__parameters:
    arg1: "from param file"
param_yaml_demo.launch.py
launch/param_yaml_demo.launch
import os

from ament_index_python.packages import get_package_share_directory
from launch import LaunchDescription
from launch.actions import DeclareLaunchArgument
from launch.substitutions import PathJoinSubstitution
from launch.launch_description_sources import PythonLaunchDescriptionSource
from launch.substitutions import LaunchConfiguration
from launch_ros.actions import Node


def generate_launch_description():
    ld = LaunchDescription()

    config_file = PathJoinSubstitution([
        get_package_share_directory('launch_tutorial'),
        'config',
        'params.yaml'
    ])

    node = Node(
        package='launch_tutorial',
        executable='simple_node.py',
        name='simple',
        output='screen',
        parameters=[config_file])

    ld.add_action(node)
    return ld
simple_node.py
#!/usr/bin/env python3

import rclpy
from rclpy.node import Node

class MyNode(Node):
    def __init__(self):
        node_name="minimal"
        super().__init__(node_name)
        self.declare_parameter('arg1', "hello default")
        self.get_logger().info("Hello ROS2")
        self.get_logger().info(self.get_parameter("arg1").value)

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

if __name__ == '__main__':
    main()