.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가 납니다.
다음 편