본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
오늘은 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일이 접으들면서
조금씩 힘들어지기도 하지만
하면할수록 감을 잡으면서 나아가는
스스로를 보면서 힘을 내보고자 한다!!
아자아자 파이팅!!
#패스트캠퍼스 #직장인자기계발 #직장인공부 #환급챌린지 #패스트캠퍼스후기 #오공완
🔥누적 수강 9백만 시간 돌파 기념 100% 페이백 (03.22 - 03.27) | 패스트캠퍼스
단 6일 한정! 지금 수강 시작하면 수강료 100% 돌려드려요!
fastcampus.co.kr