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)의 차이가 있다.
참고자료
[ROS2] what is different between DeclareLaunchArgument and LaunchConfiguration - ROS Answers: Open Source Q&A Forum
[ROS2] what is different between DeclareLaunchArgument and LaunchConfiguration edit I had tested ros2 launch with arguments. The arguments are successfully implemented using only set LaunchConfiguration exclude DeclareLaunchArgument. For example, attached
answers.ros.org
코딩교육 티씨피스쿨
4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등
tcpschool.com
'ROS > ROS2 잡다한 지식' 카테고리의 다른 글
[ROS2]teleop_keyboard.py 분석 (0) | 2022.05.06 |
---|