패스트캠퍼스 환급챌린지 37일차 : 자율주행 로봇을 위한 ROS2 & Nav2 한번에 끝내기 강의 후기
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
오늘은 어제까지 이론으로 배웠던
Lifecycle manager을 실제로 사용해 보는 시간을 가졌다.
[오늘의 수강 영상]

[오늘의 실습]
먼저 Lifecycle manager를 사용해보기 위해
다음 강의에서 사용할 localization 런치파일을 미리
실행시켜 보았다.
$ ros2 launch neuronbot2_nav localization_launch.py use_sim_time:=true
이를 실행시키면 아래와 같이 나오는 걸 볼 수 있다.

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

map_server와 amcl이 activating 되어있고
lifecycle_manager은 Managed 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가 되면서
amcl과 map_server가 Deactivating 되는 것을 확인할 수 있다.
더 자세히 살펴보면
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_server와 amcl이 activating으로 변하고
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
STARTUP은 Unconfigured 상태에서
Active 상태로 바꿔주는 것이다.
따라서 현재 RESET으로
Unconfigured가 된 상태에서 STARTUP을 사용해 주면
아래와 같이 바뀌는 것을 볼 수 있다.
명령어는 다음과 같다.
$ ros2 service call /lifecycle_manager_localization/manage_nodes
nav2_msgs/srv/ManageLifecycleNodes command:\ 0

이를 보면 reset 상태에서 amcl과 map_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 상태였다가 amcl과 map_server가
deactivating 됐다가 cleaning up 됐다가 shutting down 되면서
마지막에 service clients와 manager가 shut down 된 것을 볼 수 있다.
더 자세히 보면
현 상태가 Active 상태였고 SHUTDOWN을 진행하였더니
on_deactivate 콜백이 실행되면서
Inactive 상태가 됐다.
그 후 Inactive 상태에서 on_cleanup 콜백이 실행되어
Unconfigured 상태가 되었고
그다음으로 on_shutdown 콜백을 실행하여
Finalized 상태가 된 것을 확인할 수 있다.
위에 있던 그림에서는 모든 상태에서
바로 on_shutdown을 사용해서 Finalised 상태로
갈 수 있는 줄 알았는데 그게 아니라 단계별로 안전하게
한 단계씩 내려오면서 Finalised까지 도달하는 것 같다.
오늘 이렇게 5가지 명령어를 사용해서 Lifecycle을
수행해 보았다.
이렇게 명령어 하나만으로 자동으로
손쉽게 노드들을 껐다켰다하거나
reset 또는 shutdown 시킬 수 있다는 것이
너무 메리트로 다가왔다.
실습을 하기 전에는 와닿지 않았었는데
실습을 하면서 상태들을 왔다 갔다 해보니까
Lifecycle을 완전히 이해할 수 있게 되었다.
직접 Lifecycle을 설정하고 코딩하는 단계까지
가는 그날까지 파이팅 해야겠다!!!!


#패스트캠퍼스 #직장인자기계발 #직장인공부 #환급챌린지 #패스트캠퍼스후기 #오공완
커리어 성장을 위한 최고의 실무교육 아카데미 | 패스트캠퍼스
성인 교육 서비스 기업, 패스트캠퍼스는 개인과 조직의 실질적인 '업(業)'의 성장을 돕고자 모든 종류의 교육 콘텐츠 서비스를 제공하는 대한민국 No. 1 교육 서비스 회사입니다.
fastcampus.co.kr