ROS에서 실시간으로 데이터를 주고 받는 방법
- service
- topic
- action
Action은 ROS2의 커뮤니케이션 유형 중 하나이며, 장기 실행 작업을 위한 것입니다.
action은 goal, feedback, 그리고 result 세부분으로 구성됩니다.
Action은 topic과 service를 기반으로 구축됩니다. action의 기능은 service와 유사하지만, action은 선점이 가능합니다 (즉, 실행 중 취소할 수 있음). 또한 단일 응답을 반환하는 service와 달리 꾸준한 feedback을 제공합니다.
Action은 publisher-subcriber 모델과 비슷한 방식으로 client-server 모델을 사용합니다.
"Action client" 노드는 목표를 "Action server" 노드로 보내고, 이 노드는 목표를 확인하고 피드백 스트림과 결과를 반환합니다.
즉, Action은 Topic과 Service가 섞여있는 데이터 송수신 방법이다.
그러면 turtlesim에서 action 예제를 사용해보자.
먼저 ros2 run turtlesim turtlesim_node로 turtlesim부터 실행
action list 확인
입축력 타입 확인 - interface show
Action의 목표를 지정해주기 - send_goal
ros2 action send_goal <action_name> <action_type> <goal_request>
- action_name: 액션 서버의 이름
- action_type: 액션 메시지 타입
- goal_request: 클라이언트가 서버에 보낼 목표(goal) 값. JSON 형식으로 작성되며, 액션 메시지의 Goal 필드와 일치해야 함
ros2 action send_goal /turtle1/rotate_absolute turtlesim/action/RotateAbsolute "{theta: 3.14}"
결과
키보드로 turtle 조작하기
2개의 노드를 실행한다.