Ask Your Question
0

[ROS2] what is different between DeclareLaunchArgument and LaunchConfiguration

asked 2019-05-09 20:10:35 -0500

Darby Lim gravatar image

updated 2019-05-09 20:13:00 -0500

I had tested ros2 launch with arguments. The arguments are successfully implemented using only set LaunchConfiguration exclude DeclareLaunchArgument. For example, attached launch files worked excluding DeclareLaunchArgument

import os

from ament_index_python.packages import get_package_share_directory
from launch import LaunchDescription
from launch.substitutions import LaunchConfiguration, EnvironmentVariable
from launch.actions import DeclareLaunchArgument
from launch_ros.actions import Node

TURTLEBOT3_MODEL = os.environ['TURTLEBOT3_MODEL']

def generate_launch_description():
    use_sim_time = LaunchConfiguration('use_sim_time', default='false')
    urdf_file_name = 'turtlebot3_' + TURTLEBOT3_MODEL + '.urdf'
    print("urdf_file_name : {}".format(urdf_file_name))

    urdf = os.path.join(get_package_share_directory('turtlebot3_description'), 'urdf', urdf_file_name)

    return LaunchDescription([
        #DeclareLaunchArgument(
        #    'use_sim_time',
        #    default_value='false',
        #    description='Use simulation (Gazebo) clock if true'),

        Node(
            package='robot_state_publisher',
            node_executable='robot_state_publisher',
            node_name='robot_state_publisher',
            output='screen',
            parameters=[{' use_sim_time': use_sim_time}],
            arguments=[urdf]),
    ])

However, most examples of ros2 launch are included DeclareLaunchArgument when user want to use arguments. So, my main questions is What is different btw LaunchConfiguration and DeclareLaunchArgument?

edit retag flag offensive close merge delete

1 Answer

Sort by ยป oldest newest most voted
2

answered 2019-05-09 20:30:37 -0500

William gravatar image

updated 2019-05-17 15:25:49 -0500

LaunchConfiguration is local to the launch file and scoped.

DeclareLaunchArgument allows you to expose the argument outside of your launch file. Allowing them to be listed, set, or marked as required when a user launches it from the command line (using ros2 launch) or when including it from another launch file (using IncludeLaunchDescription).

A LaunchConfiguration cannot be required to be set when launching or including and it is not possible to set it when launching from the command line. You can set a LaunchConfiguration before including another launch file, but an argument is better if you want it to be reused.

EDIT:

Here's an example I threw together demonstrate based on comments to this answer:

import launch


def generate_launch_description():
    return launch.LaunchDescription([
        launch.actions.DeclareLaunchArgument('msg', default_value='hello world'),
        launch.actions.DeclareLaunchArgument('other'),
        launch.actions.LogInfo(msg=launch.substitutions.LaunchConfiguration('msg')),
        launch.actions.LogInfo(msg=launch.substitutions.LaunchConfiguration('other')),
    ])

If I try to launch it without arguments (ros2 launch ./test.launch.py) I get:

[INFO] [launch]: Default logging verbosity is set to INFO
[ERROR] [launch]: Caught exception in launch (see debug for traceback): Included launch description missing required argument 'other' (description: 'no description given'), given: []

That's because the other option has no default value and therefore is required.

I actually found out that the --show-arguments option was broken while testing this, so I'm not sure if that's what you ran into, but I open a pr to fix:

https://github.com/ros2/launch_ros/pu...

With that fix I can check the arguments (ros2 launch -s ./test.launch.py):

Arguments (pass arguments as '<name>:=<value>'):

    'msg':
        no description given
        (default: 'hello world')

    'other':
        no description given

I can run it if I specify other (ros2 launch ./test.launch.py other:='lorem ipsum'):

[INFO] [launch]: Default logging verbosity is set to INFO
[INFO] [launch.actions.log_info]: hello world
[INFO] [launch.actions.log_info]: lorem ipsum
edit flag offensive delete link more

Comments

Thank you for comments :) However, if I set LaunchConfiguration excluding DeclareLaunchArgument, I would access launch argument from the command line. If I erase LaunchConfiguration, I would not. Furthermore, I couldn't find any arguments in launch file using -s or --show-arguments after activate DeclareLaunchArgument. I have tested it in Ubuntu18.04 and ROS2 Dashing(master repo)

Darby Lim gravatar imageDarby Lim ( 2019-05-10 03:28:51 -0500 )edit

if I set LaunchConfiguration excluding DeclareLaunchArgument, I would access launch argument from the command line. If I erase LaunchConfiguration, I would not.

I don't understand this, can you try to rephrase it?

William gravatar imageWilliam ( 2019-05-17 14:57:27 -0500 )edit

After fixing a bug I can see the arguments, so maybe you need to give more details? I updated my answer with my demo.

William gravatar imageWilliam ( 2019-05-17 15:26:34 -0500 )edit

Thank you for updates. I could check launch arguments using -s and I clearly understand what is a different of them. Thanks again!

Darby Lim gravatar imageDarby Lim ( 2019-05-22 03:04:26 -0500 )edit

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

1 follower

Stats

Asked: 2019-05-09 20:10:35 -0500

Seen: 157 times

Last updated: May 17