.action 인터페이스

내가 만든 액션의 목표와 보고는 어떤 모양으로 정할까?

생김새

구분선 두 줄, 칸은 셋

.srv가 --- 한 줄로 요청과 응답을 나눴듯이(7강 4편), .action 파일은 --- 두 줄로 목표, 결과, 피드백 세 칸을 나눕니다. 칸마다 4강의 메시지처럼 타입과 이름을 적습니다.

순서는 4편의 RotateAbsolute와 같이 목표, 결과, 피드백입니다.

예제

피보나치 수를 한 칸씩 보고합니다

ROS 2 공식 튜토리얼의 예제입니다. 목표 order는 몇 번째까지 구할지, 피드백 partial_sequence는 지금까지 구한 수열, 결과 sequence는 완성된 수열입니다.

계산은 금방 끝나지만, 6편의 서버가 한 칸마다 1초씩 쉬어서 보고를 지켜볼 수 있습니다.

어디에 둘까

7강 8편의 인터페이스 패키지에

액션 타입도 .msg·.srv처럼 ament_cmake 패키지에서 만듭니다. 7강 8편에서 만든 my_interfaces에 action 폴더를 만들고 Fibonacci.action을 넣습니다.

공식 튜토리얼은 custom_action_interfaces라는 패키지를 새로 만듭니다. 하는 일은 같습니다.

CMakeLists.txt

생성 목록에 한 줄 더합니다

7강 8편에서 적은 rosidl_generate_interfaces 목록에 .action 파일 경로를 한 줄 더합니다. 이 목록에 있는 파일로 파이썬과 C++ 코드가 만들어집니다.

package.xml

action_msgs를 적습니다

액션 타입은 속에서 action_msgs 패키지의 메시지(2편의 목표 상태 GoalStatus 등)를 씁니다. 그래서 package.xml에 <depend>action_msgs</depend>를 적습니다.

rosidl_generate_interfaces의 설명에도 .action을 넣으면 package.xml에 action_msgs depend를 적으라고 되어 있습니다.

따라 하기

다시 빌드하고 새 터미널에서

인터페이스 패키지만 다시 빌드한 뒤, 새 터미널에서 source 합니다(5강 7편). source를 빠뜨리면 interface show에 안 나오고, 파이썬에서 import할 때 ModuleNotFoundError가 납니다.

다음 편

이 타입으로 일하는 쪽을 짜 봅니다

6편액션 서버 만들기 9강 목록