액션(Action) 이해하기
저작권: 쿼드(QUAD) 드론연구소 https://smartstore.naver.com/maponarooo
개요
액션은 ROS2의 통신 유형 중 하나이며 장기 실행 작업을 위한 것입니다. 목표, 피드백 및 결과의 세 부분으로 구성됩니다.
Action은 주제와 Service를 기반으로 합니다. 작업이 선점 가능하다는 점을 제외하면 해당 기능은 서비스와 유사합니다(실행 중에 취소할 수 있음). 또한 단일 응답을 반환하는 서비스와 달리 꾸준한 피드백을 제공합니다.
작업은 게시자-구독자 모델과 유사한 클라이언트-서버 모델을 사용합니다(토픽에서 설명됨). "액션 클라이언트" 노드는 목표를 확인하고 피드백 스트림과 결과를 반환하는 "액션 서버" 노드로 목표를 보냅니다.
실습
1. 설정
/turtlesim하고 /teleop_turtle두 개의 turtlesim 노드를 시작 합니다.
다른 터미널을 열고 다음을 실행합니다.
2. Action 사용
노드를 시작하면 /teleop_turtle터미널에 다음 메시지가 표시됩니다.
작업에 해당하는 두 번째 줄에 초점을 맞추겠습니다.
문자 키는 키보드의 키 G|B|V|C|D|E|R|T주위에 "상자"를 형성합니다. 각 키의 위치는 Turtlesim의 해당 방향에 해당합니다. 예를 들어 E 키는거북이의 방향을 왼쪽 위 모서리로 회전시킵니다.
/turtlesim노드가 실행 중인 터미널에 주의하십시오 . 이 키 중 하나를 누를 때마다 /turtlesim노드의 일부인 작업 서버에 목표를 보냅니다. 목표는 특정 방향을 향하도록 거북이를 회전시키는 것입니다. 거북이가 회전을 완료하면 목표 결과를 전달하는 메시지가 표시됩니다.
키 F는 실행 중간에 목표를 취소하여 선점 가능한 작업 기능을 보여줍니다.
C키를 누른 다음 거북이가 회전을 완료하기 전에 F키를 누르십시오. 노드가 실행 중인 터미널에 /turtlesim다음 메시지가 표시됩니다.
클라이언트 측(텔레옵의 입력)이 목표를 중지할 수 있을 뿐만 아니라 서버 측(노드 /turtlesim)도 중지할 수 있습니다. 서버측에서 목표 처리를 중지하기로 선택하면 목표를 "중단"했다고 합니다.
D키를 누른 다음 첫 번째 회전이 완료되기 전에 G키를 누르십시오 . 노드가 실행 중인 터미널에 /turtlesim다음 메시지가 표시됩니다.
3. ros2 node info
이 경우 /turtlesim노드가 제공하는 작업 목록을 보려면 새 터미널을 열고 다음 명령을 실행합니다.
그러면 구독자, 게시자, 서비스, 액션 서버 및 액션 클라이언트 목록이 반환됩니다.
RotateAbsolute 액션이 /Turlesim 노드에 있음을 알 수 있습니다. turtlesim/action/RotateAbsolute
/teleop_turtle 노드를 살펴 봅니다.
다음을 반환합니다.
액션 클라이언트에 RostateAbsolute 액션이 나타난 것을 확인할 수 있습니다.
4. ros2 action list
ROS 그래프에서 모든 액션을 식별하려면 다음 명령을 실행합니다.
다음을 반환합니다.
이것은 현재 ROS 그래프의 유일한 액션입니다. 앞에서 본 것처럼 거북이의 회전을 제어합니다. 또한 명령 을 사용하여 이 작업에 대해 하나의 작업 클라이언트와 하나의 작업 서버가 있음을 이미 알고 있습니다 .
4.1 ros2 action list -t
작업에는 토픽 및 서비스와 유사한 유형이 있습니다. /turtle1/rotate_absolute의 유형을 찾으려면 다음 명령을 실행하십시오.
다음을 반환합니다.
각 액션 이름의 오른쪽에 있는 괄호 안에는 turtlesim/action/RotateAbsolute작업 유형이 있습니다 . 명령줄이나 코드에서 작업을 실행하려는 경우에 필요합니다.
5. ros2 action info
다음 명령을 사용하여 액션을 추가로 검사할 수 있습니다 .
다음을 반환합니다.
이것은 이전에 각 노드에서 "ros2 node info/teleop_turtle/turtlesim/turtle1/rotate_absolute"실행하면서 배운 내용을 알려줍니다 . 노드에는 액션 클라이언트가 있고 액션에 대한 작업 서버가 있습니다.
6. ros2 interface show
액션 목표를 직접 전송하거나 실행하기 전에 필요한 또 하나의 정보는 액션 유형의 구조입니다.
ros2 action list -t명령을 실행할 때 /turtle1/rotate_absolute유형을 식별했음을 기억하십시오 . 터미널에 작업 유형과 함께 다음 명령을 입력합니다.
다음을 반환합니다.
첫 번째 ---위의 이 메시지 섹션은 목표 요청의 구조(데이터 유형 및 이름)입니다. 다음 섹션은 결과의 구조입니다. 마지막 섹션은 피드백의 구조입니다.
7. ros2 action send_goal
이제 다음 구문을 사용하여 명령줄에서 작업 목표를 전송해 보겠습니다.
<values>는YAML 형식이어야 합니다.
Turtlesim 창을 주시하고 터미널에 다음 명령을 입력하십시오.
거북이가 회전하는 것과 동시에터미널에 다음 메시지가 표시되어야 합니다.
모든 목표에는 반환 메시지에 표시되는 고유 ID가 있습니다. 시작 위치로의 변위인 이름이 있는 필드인 delta결과도 볼 수 있습니다 .
이 목표에 대한 피드백을 보려면 실행한 마지막 명령에 --feedback 추가하십시오. 먼저 theta의 값을 변경했는지 확인하십시오 . 이전 명령을 실행한 후 거북이는 이미 라디안 방향에 있으므로 새로운 theta 값인 -1.57 을 전달하지 않으면 움직이지 않습니다.
터미널에서 다음 메시지를 반환합니다.
목표가 완료될 때까지 피드백(나머지 라디안)을 계속 받게 됩니다.
Last updated
Was this helpful?