카테고리 없음

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

연두부진 2025. 3. 22. 23:47

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

 

[오늘의 수강 영상]

 

[오늘의 실습]

 

오늘은 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에 대한 내용들도 빠르게

습득하고싶다!!


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

 

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

https://bit.ly/4hTSJNB

 

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

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

fastcampus.co.kr