[ROS2] (8)-Action의 개념

Action이란?

Action이란 ROS2의 통신 방법의 한 종류로, 오랫동안 진행되는 작업이 있을 때 사용하기에 적합하다. 액션은 goal, feedback, result 라고 하는 3가지 파트로 구성되어 있다.

액션은 서비스와 유사하게 동작한다. 클라이언트와 서버가 있고, 클라이언트의 요청이 있을 때에만 서버에서 응답을 보내준다. 다만, 액션은 서비스와 달리 작업을 진행하는 중간중간에 피드백을 클라이언트에게 보내준다. 또, 액션은 실행중에 취소할 수도 있다.

클라이언트에서 목표(goal)을 서버에 전달하면 서버는 피드백(feedback)을 클라이언트에게 주고, 작업이 완료되면 결과(result)를 클라이언트에게 반환한다.

이번 포스팅에서 사용할 parameter 관련 명령어를 정리하면 다음과 같다.

$ ros2 action list
$ ros2 action list -t
$ ros2 action info <action_name>
$ ros2 interface show <action_type>
$ ros2 action send_goal <action_name> <action_type> <values>

Action 정보 확인하기

먼저 2개의 터미널 창에서 turtlesim 예제를 실행해준다(ros2 run turtlesim turtlesim_node, ros2 run turtlesim turtle_teleop_key).

/turtle_teleop_key 노드를 실행하면 G|B|V|C|D|E|R|T 키를 통해 특정 방향으로 회전할 수 있다고 설명이 나오게 된다. 이 부분이 액션에 해당하는 부분이다. 해당 키 중에 하나를 누르게 되면 /turtlesim 노드를 실행한 터미널 창에서 결과 메시지를 출력하는 것을 확인할 수 있다.

F 키를 통해 회전 진행 중에 취소할 수도 있다. 회전 키 중 하나를 누른 뒤, 회전이 완료되기 전에 F키를 누르게 되면 /turtlesim 노드 터미널에서 취소되었다는 메시지를 출력한다.

작업을 완료하기 전에 다른 목표를 전달받으면 기존의 목표를 중단하게 된다. 회전 키를 누른 뒤, 회전이 완료되기 전에 다른 회전 키를 누르면 /turtlesim 노드 터미널에서 기존의 목표를 중단했다는 메시지를 출력한다.

노드 정보를 확인해보면 각 노드에 어떤 액션 서버와 클라이언트가 있는지 확인할 수 있다(ros2 node info <node_name>).

현재 실행중인 노드의 액션 리스트를 보기 위해서는 ros2 action list를 이용하면 된다. 액션의 타입을 확인하고 싶으면 ros2 action list -t를 입력하면 된다. 액션에 대한 정보를 확인하고 싶으면 ros2 action info <action_name>을 통해 가능하다.

액션 타입의 구조를 보고 싶을 때는 ros2 interface show <action_type> 을 이용하면 된다.

Action 목표 전송하기

다음 명령어를 통해 액션에 목표를 전달할 수 있다.

$ ros2 action send_goal <action_name> <action_type> <values>

turtlesim 창을 띄워두고 아래 명령어를 입력해보자.

$ ros2 action send_goal /turtle1/rotate_absolute turtlesim/action/RotateAbsolute "{theta: 1.57}"

아래와 같이 결과를 출력한다.

Waiting for an action server to become available...
Sending goal:
     theta: 1.57

Goal accepted with ID: c747fe4ff2954776b76f2086d87a40af

Result:
    delta: -2.880000114440918

Goal finished with status: SUCCEEDED

모든 목표는 각자 고유의 ID를 갖고 있고, 이것이 결과에 출력되었다. 작업을 진행하는 중간에 피드백을 받고 싶은 경우, 명령어 끝에 --feedback을 추가해주면 된다.

$ ros2 action send_goal /turtle1/rotate_absolute turtlesim/action/RotateAbsolute "{theta: 1.57}" --feedback

작업을 진행하면서 피드백을 계속 출력해준다.

댓글남기기