카테고리 없음

패스트캠퍼스 환급챌린지 37일차 : 자율주행 로봇을 위한 ROS2 & Nav2 한번에 끝내기 강의 후기

연두부진 2025. 4. 10. 19:08

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.

 

오늘은 어제까지 이론으로 배웠던

Lifecycle manager을 실제로 사용해 보는 시간을 가졌다.

 

[오늘의 수강 영상]

 

[오늘의 실습]

 

먼저 Lifecycle manager를 사용해보기 위해

다음 강의에서 사용할 localization 런치파일을 미리

실행시켜 보았다.

 

$ ros2 launch neuronbot2_nav localization_launch.py use_sim_time:=true

 

이를 실행시키면 아래와 같이 나오는 걸 볼 수 있다.

 

여기서 아래 부분을 자세히 보면 

 

map_serveramclactivating 되어있고

lifecycle_managerManaged nodes are active라고

되어 있는 걸 확인할 수 있고 이 상태는 Active 상태이다.

 

이렇게 실행된 런치 파일에서 어떤 service가 실행되고 있는지

아래 명령어를 사용해서 확인해 보면

$ ros2 service list

 

이렇게 다양한 service가 실행되고 있는 걸 확인할 수 있고

우리에게 필요한 lifecycle만 따로 확인해 보면

아래와 같다.

 

이 service에서 우리가 node를 관리하는 service는

/lifecycle_manager_localization/manage_nodes이다.

 

그럼 이 service를 호출하기 위해서 type을 확인해 보면

nav2_msgs/srv/ManageLifecycleNodes 인 것을 확인할 수 있다.

 

이럼 이제 이 type이 어떻게 구성되어 있는지 확인해 보면

 

위와 같은 것을 알 수 있다.

 

저번에 배웠다시피 ---을 기준으로

위에 부분이 Request, 아랫부분이 Response이다.

 

Request 부분에서 command에 0~4를 넣어서

전달하면 숫자에 맞는 상태로 설정할 수 있게 되며

 

이 결과에 따른 성공 여부를 success을 통해

boolean 값으로 반환하는 시스템이다.

 

이 기능들을 사용해 보기 이전에 어제 배웠던

이론 내용을 가져와서 시각적으로 변화가 어떻게 이루어지는지

보면서 실습을 진행해 보도록 하자.

 

1. PAUSE

 

먼저, PAUSE를 사용하기 위해 아래와 같이 명령어를 입력해 보면

$ ros2 service call /lifecycle_manager_localization/manage_nodes

 nav2_msgs/srv/ManageLifecycleNodes command:\ 1

 

Pausing managed nodes가 되면서

amclmap_serverDeactivating 되는 것을 확인할 수 있다.

 

더 자세히 살펴보면

Active 상태에서 on_deactivate 콜백이 실행되면서

Inactive 상태가 된 것이다.

 

2. RESUME

 

다시 노드를 활성화하기 위해 RESUME을 사용해 보면

$ ros2 service call /lifecycle_manager_localization/manage_nodes

 nav2_msgs/srv/ManageLifecycleNodes command:\ 2

 

Resuming managed node가 되면서

map_serveramclactivating으로 변하고

managed nodes are active 상태로 설정되는 것을 볼 수 있다.

 

더 자세히 살펴보면

Inactive 상태에서 on_activate 콜백이 실행되어

Active 상태가 된다.

 

3. RESET

 

여기서 모든 노드들을 Reset 하고 싶다면

아래 명령어를 사용해서 진행하면 된다.

$ ros2 service call /lifecycle_manager_localization/manage_nodes

nav2_msgs/srv/ManageLifecycleNodes command:\ 3

 

이를 수행하면 노드들이 Deactivating 되면서

Cleaning up 되면서 Reset 되는 것을 볼 수 있다.

 

더 자세히 살펴보면

Reset을 진행하는 순간부터

현 상태인 Active에서 on_deactivate 콜백이 실행되면서

Inactive 상태가 된다.

 

그 후 Inactive 상태에서 on_cleanup 콜백이 실행되어

Unconfigured 상태가 되는 것이다.

 

4. STARTUP

 

STARTUPUnconfigured 상태에서

Active 상태로 바꿔주는 것이다.

 

따라서 현재 RESET으로

Unconfigured가 된 상태에서 STARTUP을 사용해 주면

아래와 같이 바뀌는 것을 볼 수 있다.

 

명령어는 다음과 같다.

$ ros2 service call /lifecycle_manager_localization/manage_nodes

nav2_msgs/srv/ManageLifecycleNodes command:\ 0

 

 

이를 보면 reset 상태에서 amclmap_server

configuring 됐다가 activating 된 것을 볼 수 있다.

 

이를 자세히 보면

Unconfigured 상태에서 on_configure 콜백이 실행되면서

Inactive 상태가 되고 on_activate 콜백이 실행되면서

Active 상태가 된 것을 확인할 수 있다.

 

5. SHUTDOWN

 

SHUTDOWN은 어떤 상태에 있든 상관없이

강제적으로 Lifecycle을 상태 종료로 바꾸는 것이다.

 

이를 실행하려면 아래 명령어를 사용하면 된다.

아래 명령어를 사용해서 진행하면 된다.

$ ros2 service call /lifecycle_manager_localization/manage_nodes

nav2_msgs/srv/ManageLifecycleNodes command:\ 4

 

 

이를 보면 Active 상태였다가 amclmap_server

deactivating 됐다가 cleaning up 됐다가 shutting down 되면서

마지막에 service clientsmanagershut down 된 것을 볼 수 있다.

 

더 자세히 보면

현 상태가 Active 상태였고 SHUTDOWN을 진행하였더니

on_deactivate 콜백이 실행되면서

Inactive 상태가 됐다.

 

그 후 Inactive 상태에서 on_cleanup 콜백이 실행되어

Unconfigured 상태가 되었고

그다음으로 on_shutdown 콜백을 실행하여

Finalized 상태가 된 것을 확인할 수 있다.


위에 있던 그림에서는 모든 상태에서

바로 on_shutdown을 사용해서 Finalised 상태로

갈 수 있는 줄 알았는데 그게 아니라 단계별로 안전하게

한 단계씩 내려오면서 Finalised까지 도달하는 것 같다.

 

오늘 이렇게 5가지 명령어를 사용해서 Lifecycle을

수행해 보았다.

 

이렇게 명령어 하나만으로 자동으로

손쉽게 노드들을 껐다켰다하거나

reset 또는 shutdown 시킬 수 있다는 것이

너무 메리트로 다가왔다.

 

실습을 하기 전에는 와닿지 않았었는데

실습을 하면서 상태들을 왔다 갔다 해보니까

Lifecycle을 완전히 이해할 수 있게 되었다.

 

직접 Lifecycle을 설정하고 코딩하는 단계까지

가는 그날까지 파이팅 해야겠다!!!!


 

공부 시작시간
공부 종료시간

 

#패스트캠퍼스 #직장인자기계발 #직장인공부 #환급챌린지 #패스트캠퍼스후기 #오공완

https://bit.ly/4hTSJNB

 

커리어 성장을 위한 최고의 실무교육 아카데미 | 패스트캠퍼스

성인 교육 서비스 기업, 패스트캠퍼스는 개인과 조직의 실질적인 '업(業)'의 성장을 돕고자 모든 종류의 교육 콘텐츠 서비스를 제공하는 대한민국 No. 1 교육 서비스 회사입니다.

fastcampus.co.kr