Launch와 Lifecycle 연습문제 정답
시행일·최종 수정일: 2026년 9월 1일
정답을 보기 전에
먼저 각 문제에 자신의 말로 답해본 뒤 해설과 비교해 보세요. 표현이 달라도 핵심 개념과 계산 과정이 맞으면 정답으로 볼 수 있습니다.
1. Launch가 단순 Shell Script보다 재현 가능한 이유를 설명하세요.
정답과 해설
실행 Process뿐 아니라 ROS Node 이름, Namespace, Parameter, Remapping, 조건, 다른 Launch 구성과 Event 반응을 하나의 System 명세로 기록합니다. Package Share와 선언된 Argument를 사용하면 다른 환경에서도 같은 구성을 재현할 수 있습니다.
2. XML·YAML·Python Launch의 장단점과 선택 기준을 설명하세요.
정답과 해설
XML은 선언적이고 간결하며 YAML은 Data 목록처럼 읽기 쉽습니다. Python은 동적 Action 생성, 계산과 API 전체가 필요한 복잡한 구성에 적합합니다. 팀의 가독성과 필요한 기능에 맞춰 선택합니다.
3. generate_launch_description()과 LaunchDescription의 역할은 무엇인가요?
정답과 해설
generate_launch_description()은 Launch Loader가 호출하는 진입 함수입니다. 반환된 LaunchDescription에는 Node 실행, Argument 선언, Group과 Event Handler 같은 Action 구성이 담깁니다.
4. LaunchConfiguration을 일반 Python if로 비교하면 안 되는 이유는 무엇인가요?
정답과 해설
LaunchConfiguration은 파일을 읽을 때 확정된 문자열이 아니라 실행 Context에서 평가되는 Substitution입니다. IfCondition·UnlessCondition을 사용하거나 필요한 경우 Context 안에서 평가해야 합니다.
5. FindPackageShare와 PathJoinSubstitution을 사용해야 하는 이유는 무엇인가요?
정답과 해설
사용자 Home이나 Workspace의 절대 경로는 다른 Computer와 설치 환경에서 깨집니다. Package가 실제 설치된 Share 경로를 실행 시 찾고 그 안의 Config·RViz·Launch 경로를 이식성 있게 조합합니다.
6. Namespace와 Remapping의 차이를 실제 Robot 두 대 예로 설명하세요.
정답과 해설
Namespace는 같은 구성의 Node와 상대 ROS 이름 전체를 /robot1, /robot2 아래로 분리합니다. Remapping은 각 Robot 내부에서 cmd_vel_in을 cmd_vel_muxed처럼 특정 연결로 바꿉니다.
7. IncludeLaunchDescription과 Launch Argument 전달 과정을 설명하세요.
정답과 해설
상위 Launch가 Child Launch Source를 지정하고 launch_arguments로 이름·값을 전달합니다. Child는 같은 이름을 DeclareLaunchArgument로 선언하고 LaunchConfiguration으로 사용합니다.
8. OnProcessStart가 Node의 Application Ready를 보장하지 않는 이유는 무엇인가요?
정답과 해설
OS Process가 생성된 순간 발생하는 Event이므로 Hardware 연결, Parameter 검증, DDS Discovery, TF와 첫 Sensor Data가 준비됐는지는 알 수 없습니다. 별도 Health나 Lifecycle 상태를 확인해야 합니다.
9. TimerAction으로 준비 순서를 만드는 방식이 취약한 이유는 무엇인가요?
정답과 해설
준비 시간을 추측하기 때문입니다. 빠른 장비에서는 시간을 낭비하고 느린 장비나 높은 부하에서는 지연이 모자랍니다. Readiness Interface, Retry와 Lifecycle 전이를 사용해야 합니다.
10. Lifecycle의 네 Primary State와 여섯 Transition State를 설명하세요.
정답과 해설
Primary State는 Unconfigured, Inactive, Active, Finalized입니다. 전이 Callback 처리 중에는 Configuring, Activating, Deactivating, CleaningUp, ShuttingDown, ErrorProcessing 상태를 거칩니다.
11. on_configure, on_activate, on_deactivate, on_cleanup의 책임을 구분하세요.
정답과 해설
Configure는 Parameter 검증과 자원·Hardware 준비, Activate는 정상 출력과 기능 시작, Deactivate는 자원을 유지한 안전 정지, Cleanup은 Publisher·Subscription·Buffer와 Hardware 연결을 해제해 Unconfigured 상태로 되돌립니다.
12. Lifecycle Publisher와 일반 Subscription·Timer의 Inactive 동작 차이는 무엇인가요?
정답과 해설
Lifecycle Publisher는 Inactive일 때 비활성화되어 Message를 내보내지 않습니다. 일반 Subscription과 Timer는 Lifecycle이 자동 중지하지 않으므로 Callback 계산도 멈추려면 상태 검사, Cancel 또는 Entity 생성·파괴를 직접 관리해야 합니다.
13. Configure 도중 일부 자원을 만든 뒤 실패할 때 필요한 처리는 무엇인가요?
정답과 해설
이미 연 Camera, Port, Publisher와 Memory를 명시적으로 되돌리는 Rollback이 필요합니다. Handle을 초기 상태로 복구하고 반복 Configure에서도 중복 자원과 Leak이 생기지 않도록 실패 지점별 Test를 해야 합니다.
14. Process Alive, Lifecycle Active와 Application Ready의 차이를 설명하세요.
정답과 해설
Process Alive는 OS Process 존재, Lifecycle Active는 기능 수행이 허용된 상태입니다. Application Ready는 실제 Sensor Data, Hardware Fault, Localization 품질과 필요한 연결까지 임무 조건을 충족한 상태입니다.
15. 실제 이동 Robot을 시작·정지할 때 Launch, Lifecycle Manager와 Safety 계층의 역할을 순서대로 설명하세요.
정답과 해설
Launch가 Driver·Sensor·Manager Process와 구성을 시작합니다. Manager가 Parameter·Hardware·Health를 확인하며 Configure하고 안전한 순서로 Activate합니다. 정지는 Command Source부터 역순으로 Deactivate·Cleanup하며 Driver Watchdog와 독립 E-stop은 Process Hang에도 안전을 유지합니다.
학습 마무리
틀린 문제는 강의의 관련 장을 다시 읽고, 용어뿐 아니라 각 개념이 실제 로봇에서 어떤 역할을 하는지 설명해 보세요.