액션은 ROS2의 통신 유형 중 하나이며 장기 실행 작업을 위한 것입니다. 목표, 피드백 및 결과의 세 부분으로 구성됩니다.
Action은 주제와 Service를 기반으로 합니다. 작업이 선점 가능하다는 점을 제외하면 해당 기능은 서비스와 유사합니다(실행 중에 취소할 수 있음). 또한 단일 응답을 반환하는 서비스와 달리 꾸준한 피드백을 제공합니다.
작업은 게시자-구독자 모델과 유사한 클라이언트-서버 모델을 사용합니다(토픽에서 설명됨). "액션 클라이언트" 노드는 목표를 확인하고 피드백 스트림과 결과를 반환하는 "액션 서버" 노드로 목표를 보냅니다.
실습
1. 설정
/turtlesim하고 /teleop_turtle두 개의 turtlesim 노드를 시작 합니다.
ros2 run turtlesim turtlesim_node
다른 터미널을 열고 다음을 실행합니다.
ros2 run turtlesim turtle_teleop_key
2. Action 사용
노드를 시작하면 /teleop_turtle터미널에 다음 메시지가 표시됩니다.
Use arrow keys to move the turtle.
Use G|B|V|C|D|E|R|T keys to rotate to absolute orientations. 'F' to cancel a rotation.
작업에 해당하는 두 번째 줄에 초점을 맞추겠습니다.
문자 키는 키보드의 키 G|B|V|C|D|E|R|T주위에 "상자"를 형성합니다. 각 키의 위치는 Turtlesim의 해당 방향에 해당합니다. 예를 들어 E 키는거북이의 방향을 왼쪽 위 모서리로 회전시킵니다.
/turtlesim노드가 실행 중인 터미널에 주의하십시오 . 이 키 중 하나를 누를 때마다 /turtlesim노드의 일부인 작업 서버에 목표를 보냅니다. 목표는 특정 방향을 향하도록 거북이를 회전시키는 것입니다. 거북이가 회전을 완료하면 목표 결과를 전달하는 메시지가 표시됩니다.
이것은 이전에 각 노드에서 "ros2 node info/teleop_turtle/turtlesim/turtle1/rotate_absolute"실행하면서 배운 내용을 알려줍니다 . 노드에는 액션 클라이언트가 있고 액션에 대한 작업 서버가 있습니다.
6. ros2 interface show
액션 목표를 직접 전송하거나 실행하기 전에 필요한 또 하나의 정보는 액션 유형의 구조입니다.
ros2 action list -t명령을 실행할 때 /turtle1/rotate_absolute유형을 식별했음을 기억하십시오 . 터미널에 작업 유형과 함께 다음 명령을 입력합니다.
ros2 interface show turtlesim/action/RotateAbsolute
다음을 반환합니다.
# The desired heading in radians
float32 theta
---
# The angular displacement in radians to the starting position
float32 delta
---
# The remaining rotation in radians
float32 remaining
첫 번째 ---위의 이 메시지 섹션은 목표 요청의 구조(데이터 유형 및 이름)입니다. 다음 섹션은 결과의 구조입니다. 마지막 섹션은 피드백의 구조입니다.
Waiting for an action server to become available...
Sending goal:
theta: 1.57
Goal accepted with ID: f8db8f44410849eaa93d3feb747dd444
Result:
delta: -1.568000316619873
Goal finished with status: SUCCEEDED
모든 목표에는 반환 메시지에 표시되는 고유 ID가 있습니다. 시작 위치로의 변위인 이름이 있는 필드인 delta결과도 볼 수 있습니다 .
이 목표에 대한 피드백을 보려면 실행한 마지막 명령에 --feedback 추가하십시오. 먼저 theta의 값을 변경했는지 확인하십시오 . 이전 명령을 실행한 후 거북이는 이미 라디안 방향에 있으므로 새로운 theta 값인 -1.57 을 전달하지 않으면 움직이지 않습니다.