07_ROS2서비스
1. 모든 명령어의 사용예를 실습하고 결과를 캡쳐하여 제출하시오.
서비스 요청 (ros2 service call) 명령어: $ ros2 service call <service_name> <service_type> "<arguments>"
서비스 서버에게 서비스 요청(Request)하는 것.
▷ /clear 서비스 요청
▷ /kill 서비스 요청 (<arguments>: name: 'turtle1')
▷ /reset 서비스 요청
▷ /call 서비스 요청
(<arguments>: {r: 255, g: 0, b: 0, width: 5}처럼 r,g,b값을 조합하여 색을 지정 및 width로 궤적의 크기 지정 가능.)
▷ /spawn 서비스 요청
(<arguments>: {x: 5.5, y: 9, theta: 1.57, name: 'jo'}처럼 r,g,b값을 조합하여 색을 지정 및 width로 궤적의 크기 지정 가능.)
지정한 위치 및 자세에 지정한 이름으로 거북이를 추가.
실행창 좌측하단 모서리가 원점.
theta: 1.57로 적당한 값을 주어 시뮬레이터의 상단을 바라봄. ( 반시계방향(+), 시가방향(-) )
2. 아래 서비스 리스트에서 /turtle1/teleport_absolute, /turtle1/teleport_relative 서비스를 설명하고 실습결과를 제출하라.
▷ 'teleport_absolute' 서비스
○ 명령어: $ ros2 service call <서비스명> <서비스 타입> "<aguments>"
○ $ ros2 service call /jo/teleport_absolute turtlesim/srv/TeleportAbsolute "{x: 3.5, y: 3.5, theta: -1.57}"
○ <arguments> : x(거북이가 이동할 x좌표) / y / theta(거북이가 바라볼 방향의 각도(라디안 단위))
○ 시뮬레이션 환경 내에서 절대 좌표로 이동시키는 기능.
▷ 'teleport_relative' 서비스
○ 명령어: $ ros2 service call <서비스명> <서비스 타입> "<aguments>"
○ $ ros2 service call /jo/teleport_relative turtlesim/srv/TeleportRelative "{linear: 10, angular: 3.3}"
○ <arguments> : linear(거북이가 직선으로 이동할 거리) / angular(거북이가 회전할 각도(라디안 단위))
○ 현재 거북이의 위치와 방향을 기준으로 상대적인 이동과 회전을 수행.
'teleport_absolute'서비스와 'teleport_relative' 서비스의 차이점
▷ teleport_absolute 서비스
○ 절대적 위치 이동 : 거북이를 특정 절대 좌표(x, y)와 각도(theta)로 지정한 aguments로 "텔레포트"
▷ teleport_relative 서비스
○ 상대적 위치 이동 : 현재 거북이의 위치와 방향을 기준으로, 앞으로 이동할 거리(linear)와 회전할 각도(angular)를 지정하여 이동시킴.
'cmd_vel' 토픽과 'teleport_relative' 서비스의 차이점
▷ 'cmd_vel' 토픽
○ $ ros2 topic pub --once /turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 11.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 6.2}}"
○ 거북이에게 지속적인 속도 명령을 제공.
○ 토픽 메시지(geometry_msgs/msg/Twist)를 통해 선형(linear) 및 각속도(angular)를 지정.
○ 토픽은 일반적으로 연속적인 상호작용을 위해 사용됨. 예를 들어, 사용자의 입력에 따라 실시간으로 거북이를 조정하거나 물리적 환경에서의 장애물 회피 등이 이에 해당.
▷ 'teleport_relative' 서비스
○ $ ros2 service call /jo/teleport_relative turtlesim/srv/TeleportRelative "{linear: 10, angular: 3.3}"
○ 거북이의 위치를 즉각적으로 변경
○ 서비스는 일반적으로 단일 명령에 대한 즉각적인 반응을 요구할 때 사용됩니다. 예를 들어, 특정 위치로의 즉각적인 이동이나 각도 조정에 유용함.
08_ROS2액션
1. 모든 명령어의 사용예를 실습하고 결과를 캡쳐하여 제출하라.
● 액션과 관련된 노드 정보 출력결과 (ros2 node info)
▷ 'rotate_absolute' 액션은 send_goal / cancel_goal / status / feedback / get_result 의 5가지로 더 세분화되어 있음.
▷ 목표 전달 (send_goal) / 목표 취소 (cancel_goal) / 결과 받기 (get_result)를 동기식인 서비스를 사용하기 위함.
▷ 토픽(비동기) + 서비스(동기)
● 액션 목록 (ros2 action list -t)
● 액션 정보 (ros2 action info)
명령어: $ ros2 action info <액션 서버>
실행중인 액션의 상세정보를 출력 -> 액션 이름과 해당 액션의 서버 및 클라이언트 노드 이름 및 갯수를 표시.
● 액션 목표(action goal) 전달
▷ 명령어: $ ros2 action send_goal <action_name> <action_type> "<values>"
▷ $ ros2 action send_goal /turtle1/rotate_absolute turtlesim/action/RotateAbsolute "{theta: 1.5708}"
▷ 실행중인 액션서버에 액션 목표(action goal)를 전달
▷ 피드백: 총 회전 값의 남은 회전 량(현재위치 – 목표위치)