ROS2 이론 정리

Lifecycle

dawon-project 2025. 5. 5. 00:12

Lifecycle : ROS 2에서 Lifecycle이란 노드의 생명주기(lifecycle)를 명확하게 관리할 수 있도록 해주는 상태 기반 노드 관리 기능
->
ROS2에서는 노드의 상태 관리를 위해 Lifecycle 인터페이스 제공

  • 개발자가 노드의 상태 전이(state transition) 를 제어할 수 있게 하여, 시스템을 더 예측 가능하고 안정적으로 구성할 수 있게 해준다.
  • 노드는 주요 상태 (Unconfigured, Inactive, Active, Finalized)와 전환 상태(Configuring, CleaningUp 등)을 가진다.
  • 노드를 체계적으로 관리 및 상태 전환을 통해 노드를 구성, 활성화, 비활성화, 정리 가능

-> 한마디로 노드가 비정상적으로 종료가 되면 다시 살아 날 수 있도록 관리해주고 정상적인 종료가 가능하도록 함

-> 뒤에서 적게 될 Nav2 패키지에서 Lifecycle Manager의 기능 중 하나이기 때문에 매우매우 중요하다.

 

    • 노드의 상태와 상태 전환(Transition)
      • 파란 박스 : 주요 상태
      • 노란 박스 : 전환 상태
      • 검정색 화살표 : 전환을 나타냄
      • 파란색 화살표 : 전환 성공시 주요 상태의 변화
      • 빨간색 화살표 : 전환 실패 시 주요 상태의 변화
      • 빨간색 작은 원 : 에러가 발생할 수 있는 상태
    • 주요 상태
      • Unconfigured : 노드가 생성된 직후의 상태이거나 에러 발생 이후 다시 조정될 있는 상태
      • Inactive : Node의 Publisher/Subscriber 및 Service 등이 (재)구성되어 있지만 노드가 아무런 동작을 수행하지 않는 상태
      • Active : 노드가 동작을 수행하는 상태
      • Finalized : 노드가 메모리에서 해제되기 직전 상태로 노드가 파괴되기 전 디버깅이나 내부 검사를 진행할 수 있는 상태
    • 전환 상태(transition state)
      • Configuring : 노드를 구성하기 위해 필요한 설정 수행
      • CleaningUp : 노드가 처음 생성되었을 때 상태와 동일하게 만드는 과정 수행
      • Activating : 노드가 동작을 수행하기 전 마지막 준비 과전 수행
      • Deactivating : 노드가 동작을 수행하기 전으로 돌아가는 과정 수행
      • ShuttingDown : 노드가 파괴되기 전 필요한 과정 수행
      • ErrorProcessing : 사용자 코드가 동작되는 상태에서 발생하는 에러를 해결하기 위한 과정 수행
    • 전환
      • Create : 노드를 생성하고 초기 상태로 설정
      • Configure : 노드를 구성하여 준비 상태로 만듦
      • Cleanup : 노드를 초기화하여 이전 상태로 되돌림
      • Activate : 노드를 활성화하여 기능을 수행할 수 있게 함
      • Deactivate : 노드를 비활성화하여 동작을 멈춤
      • Shutdown : 노드를 안전하게 종료하는 과정
      • Destroy : 노드를 메모리에서 완전히 제거
  • lifecycle 관련 명령어
  •  
ros2 lifecycle get # 실행 중인 노드의 lifecycle 상태를 가져오는 명령어
ros2 lifecycle list <노드명> # <노드명>의 상태 전이가 가능한 lifecycle 목록을 출력
ros2 lifecycle nodes # lifecycle 상태를 가지고 있는 노드 목록을 출력
ros2 lifecycle set <노드명> <전환할 상태 값> # <노드명>의 lifecycle 상태를 <전환할 상태 값> 로 트리거
  • 간단하게 ros2에서 기본적으로 제공하는 패키지를 통해서 어떻게 노드가 관리되는지 확인해 볼 수 있다.
ros2 run lifecycle lifecycle_talker
ros2 run lifecycle lifecycle_listener
ros2 run lifecycle lifecycle_server_client