카테고리 없음

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

연두부진 2025. 3. 24. 23:43

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

 

오늘은 service의 메시지부터 만들어보는

custom service 실습을 진행했다.

 

[오늘의 수강 영상]

 

 

[오늘의 실습]


service는 사용자마다 request와 response로

얻고자 하는 정보들을 특정하기 어렵기 때문에

기본적으로 나와있는 service가 없다.

 

따라서 오늘 하는 실습을 배워두면

앞으로 많이 사용할 것 같다!


오늘의 목표는 로봇의 선속도와 각속도, 그리고 이동 시간을 지정하여

로봇을 제어하기 위한 custom service을 만드는 것이다.

 

우리가 사용하는 선속도,각속도,이동시간에 대한

메시지 형식을 정의하기 위해

MoveRobot.srv 파일을 아래와 같이 생성한다.

 

이와 같이 생성한 후에 CMakeLists.txt에 방금 만든 걸 추가한다.

 

그 후, build를 진행하면 간단하게 인터페이스 만들기 성공!!

 

제대로 만들었는지 확인하기 위해 아래 코드를 사용하면

$ ros2 interface show custom_interfaces/srv/MoveRobot

 

성공적으로  서비스가 생성된 것을 볼 수 있다!!

 

그 다음, server를 프로그래밍 하여 이 로봇을 어떻게 만들어줄지

정해보았다.

 

먼저 해더부분에 아래내용을 추가해주고

 

Class부분에서

 

self.srv = self.create_service(MoveRobot, 'move_robot', self.move_robot_callback)

→ 우리가 만들어준 인터페이스인 MoveRobot을 

인터페이스 타입에 넣어준다.

→ move_robot이라는 서비스를 생성한다.

→ 클라이언트의 요청을 처리할 move_robot_callback을 연결한다.

 

self.velocity_publisher = self.create_publisher(Twist, 'cmd_vel', 10)

→ cmd_vel 토픽을 사용하여

Twist 메시지를 발행하는 퍼블리셔를 생성한다.

 

이렇게 서비스를 실행하기 위한 초기화를 진행한 후

 

def move_robot_callback(self, request, response):에서

 

twist.linear.x = request.linear_velocity

twist.angular.z = request.angular_velocity

→ request를 통해 오는 linear_velocity와 angular_velocity를

twist.linear.x와 twist.angular.z에 저장해둔다.

→ start_time부터 요청된 시간(duration) 동안 반복문을 실행한다.

→ cmd_vel 토픽에 twist 메시지를 계속 발행하여 로봇을 움직인다.

→ time.sleep(0.1): 0.1초마다 메시지를 보낸다.

 

stop_twist = Twist()

→ 루프가 끝나면 로봇을 정지시키기 위해

속도를 0으로 설정한 Twist 메시지를 보낸다.

 

response.success = True

→ response 메시지인 success에

True를 담는다.

 

그 후, 아래 코드 부분에서 request로 온 데이터 값에 따라

response의 또 다른 메시지인 message에

현재 상태를 담아 보낸다.

 

이렇게 코드를 짠 후 setup.py에

'movement_server = custom_interface_example.movement_server:main'

추가하여 새로운 노드를 추가한다.

 

build를 하고 아래 코드를 사용하여 서버를 연다.

$ ros2 run custom_interface_example movement_server

 

그리고나서 우리가 원하는 request를 보내기 위해

$ ros2 service call /move_robot custom_interfaces/srv/MoveRobot "{linear_velocity: 0.0, angular_velocity: 0.0, duration: 0.0}"에서

0.0이라고 되어진 곳에 원하는 값을 넣어서 보내면

아래와 같은 결과를 얻을 수 있다!!

 


오늘도 이렇게 성공적으로 실습을 마무리 하였다!!

 

오늘 배운 service를 custom하는건

앞으로 정말 많이 사용할 수 있는

핵심능력인 것 같아서

잊어버리지 않게 자주 다시 해봐야겠다.

 

ros2를 실습하면서

계속 반복적으로 패키지만들고 build하고

파일만들고 setup.py에 노드 추가하고

 

custom 할 때는 여기에서 CMakeLists.txt에

만든 파일 추가해서 인터페이스 생성하고

build하는 과정을 지나면서

 

처음에는 순서가 익숙하지 않았는데

계속 실습을 통해 실행하다보니

 

이제 그 다음 순서가 어떤건지

감을 잡기 시작했다.

 

강의를 들은지 20일이 접으들면서

조금씩 힘들어지기도 하지만

하면할수록 감을 잡으면서 나아가는

스스로를 보면서 힘을 내보고자 한다!!

 

아자아자 파이팅!!


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

 

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

https://bit.ly/4hTSJNB

 

🔥누적 수강 9백만 시간 돌파 기념 100% 페이백 (03.22 - 03.27) | 패스트캠퍼스

단 6일 한정! 지금 수강 시작하면 수강료 100% 돌려드려요!

fastcampus.co.kr