Launch 파일에서 DeclareLaunchArgument와 LaunchConfiguration의 사용에 있어서 차이점이 궁금했다.

DeclareLaunchArgument

 
CLI에서 Launch파일을 실행할 때 인수를 지정 가능하다.
즉 외부에서 Launch파일의 인수에 접근이 가능한 것이다.

gui_arg = DeclareLaunchArgument(
        name='gui',
        default_value='True'
    )

 
default_value에 기본값을 지정해주어 Launch파일 실행 시 따로 변수를 입력해주지 않아도 되게끔 한다.
만약 default_value를 주석처리하고 코드를 실행해보면 변수가 없으므로 오류가 발생하며 직접 CLI에서 입력해주어야 한다.
 
주석처리 시 발생하는 오류는 다음과 같다.

RuntimeError: Included launch description missing required argument 'gui' (description: 'no description given'), given: []

 
어떤 매개변수가 인수를 필요로 하는지 모르겠다면 다음과 같이 --show-arguments를 입력해 주면 된다.

ros2 launch mobile_description display.launch.py --show-arguments
arguments 
Arguments (pass arguments as '<name>:=<value>'):

    'gui':
        no description given

커맨드 결과로는 Argument를 '<name>:=<value>'로 지정해주면 된다는 것과 인수가 필요한 매개변수가 나타난다.
 
따라서 CLI에서 수동으로 변수를 입력한다면 다음과 같이 해보면 된다.

ros2 launch mobile_description display.launch.py gui:=True

인수는 어떤 코드를 예시로 쓰는지 달라질 수 있다.
본인의 코드로 실행해보면 좋을 것 같다.
 

LaunchConfiguration


Launch파일 내부에서만 인수를 지정가능하며 외부에서 접근이 제한된다.

show_gui = LaunchConfiguration('gui')

 
 

인수(Argument)와 매개변수(Parameter)의 차이점

 
매개변수와 인자를 헷갈려서 확실히 짚고 넘어간다.
혼용해서 사용한다고 하지만 정확히 알면 코드를 조금 더 깔끔히 볼 수 있지 않을까 싶다.
 
인수는 함수가 호출될 때 함수로 값을 전달해 주는 변수이다.
예를 들면 다음과 같다.

def add(a,b):
    result = a + b
    print(result)

add(2,3) #여기서 2, 3은 인수이다.

 
매개변수는 함수를 통해 받은 인수를 함수 내부에서 사용할 수 있게 해주는 변수이다.
예를 들면 다음과 같다.

def add(a,b):
    result = a + b # result는 인수 a와 b를 더해주는 매개변수이다.
    print(result)

add(2,3)

 

결론

DeclareLaunchArgument와 LaunchConfiguration은 인수(Argument)를 다룬다는 점에서 비슷하다.
하지만 Launch파일 내부에서만 접근 가능한지(Local) 혹은 CLI에서도 접근 가능한지(Global)의 차이가 있다.

참고자료

 

'ROS > ROS2 잡다한 지식' 카테고리의 다른 글

[ROS2]teleop_keyboard.py 분석  (0) 2022.05.06