패스트캠퍼스 환급챌린지 18일차 : 자율주행 로봇을 위한 ROS 2 & Nav 2 한번에 끝내기 강의 후기
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
[오늘의 수강 영상]
[오늘의 실습]
오늘은 Service에서 Client를 Call 명령어 말고
코딩을 통해 실행하는 방법에 대해서 실습했다.
심지어 비동기로 동작하는 방식으로 진행하였다.
service는 동기식으로 동작하는 것이라고 그저께 배웠는데
비동기식으로 따로 코딩을 할 수 있다는 것이 신기했다.
Call 명령어는 동기식으로 동작하는걸로 봐서
이게 바로 코딩을 장점이지 않을까라는
생각을 했다.
동기식이란?
요청을 보내고 응답이 올 때까지 아무것도 못하고 기다리는 것
비동기식이란?
요청을 보내고 응답이 오는 동안 다른 동작을 수행할 수 있는 것
해당 실습을 진행하기 위해 아래와 같이 코드를 진행하였다.
두 부분으로 나누어 진행했는데
먼저, Class부분을 보면
self.client = self.create_client(Empty, 'spin')
→ 서비스 클라이언트를 생성하는 부분
→ Empty라는 서비스 유형을 사용하고 /spin이라는 이름의
서비스에 연결하는 클라이언트를 만드는 것이다.
while not self.client.wait_for_service(timeout_sec=1.0):
→ 이 루프에서 서비스 서버(이 경우 /spin)가
정상적으로 작동 중인지 확인한다.
self.req = Empty.Request()
→ 서비스 요청을 위한 요청 객체를 생성한다.
→ service 타입이 empty더라도 이건 해줘야 한다.
self.future = self.client.call_async(self.req)
→ call_async() 메서드를 사용하여 서비스 서버에 비동기 요청을 보낸다.
future 변수의 역할
요청을 한 후 서버는 즉시 호출 및 응답이 완료되었는지
여부를 나타내도록 future에 반환한다.
그 후, main문을 보면
empty_client = EmptyServiceClient()
→ EmptyServiceClient()를 사용해서 empty_client 객체를 생성해준다.
empty_client.send_request()
→ empty_client.send_request()를 사용해서 서비스요청을 보낸다.
if empty_client.future.done()
→ while문에서 empty_client.future.done()를 사용해서
service 서버의 응답이 완료되었는지 계속 확인한다.
try: response = empty_client.future.result()
→ done()을 통해 True가 반환될 때
반환결과를 response에 넣는다.
→ 하지만, 현재 service 타입이 empty이기 때문에
아무것도 반환되지 않는다.
except Exception as e: empty_client.get_logger().info('service call failed %r' % (e,))
→ 에러가 발생할 시 반환되는 안내문이다.
else: empty_client.get_logger().info('service call completed')
→ try가 정상적으로 실행되면 'service call completed'를 출력한다.
break
→ 이를 통해 while문을 빠져나간다.
empty_client.get_logger().info('additional work...!')
→ 서비스 서버의 response를 기다리면서
추가적인 동작하는 부분이다.
→ 이는, call_async를 사용해서
비동기로 설정했기 때문에 이와 같이 가능한 것이다.
실습을 진행하면서 response 데이터는 언제 받는걸까?
하는 의문이 생겼다.
찾아보니 service의 호출 흐름이
요청 → 처리 →응답 구조라서
서버의 마지막 작업이 끝난 후에 응답을 반환하기 때문에
아래와 같은 결과가 나온 걸 확인할 수 있었다.
오늘 rclpy.spin과 rclpy.spin_once라는 명령어의
차이점도 배웠지만
아직 완벽하게 이해를 하지 못하여
이해 후 내일 포스팅 처음부분에 작성해보도록 하겠다.
오늘 Client를 사용할 때,
비동기식으로 service를 사용할 수 있는 방법에 대해서
배워봤는데 이론과는 또 다른 방식으로
코딩을 구현할 수 있다는 것이 코딩의 맛이라는걸
다시 느끼게 되었고
내일은 surver에 대해서 또 배우는데
빨리 배워서 service에 대한 내용들도 빠르게
습득하고싶다!!
#패스트캠퍼스 #직장인자기계발 #직장인공부 #환급챌린지 #패스트캠퍼스후기 #오공완
커리어 성장을 위한 최고의 실무교육 아카데미 | 패스트캠퍼스
성인 교육 서비스 기업, 패스트캠퍼스는 개인과 조직의 실질적인 '업(業)'의 성장을 돕고자 모든 종류의 교육 콘텐츠 서비스를 제공하는 대한민국 No. 1 교육 서비스 회사입니다.
fastcampus.co.kr