액션 생성하기
목표: ROS 2 패키지에서 액션을 정의합니다.
배경
이전 튜토리얼에서 액션 에 대해 배웠습니다. 다른 통신 유형 및 각각의 인터페이스(토픽/msg 및 서비스/srv)처럼, 패키지에서 액션을 커스텀 정의할 수도 있습니다. 이 튜토리얼에서는 다음 튜토리얼에서 사용할 액션 서버 및 액션 클라이언트와 함께 사용할 수 있는 액션을 정의하고 빌드하는 방법을 보여줍니다.
사전 준비 사항
ROS 2 와 colcon 이 설치되어 있어야 합니다.
워크스페이스 를 설정하고 action_tutorials_interfaces 라는 패키지를 생성하세요:
(ROS 2 설치를 먼저 소스 하는 것을 잊지 마세요.)
mkdir -p ros2_ws/src #이미 이런 명명 규칙을 사용하는 워크스페이스가 있다면 재사용 가능
cd ros2_ws/src
ros2 pkg create action_tutorials_interfaces
작업
1 액션 정의하기
액션은 다음 형식의 .action 파일로 정의됩니다:
# Request
---
# Result
---
# Feedback
액션 정의는 --- 로 구분된 세 가지 메시지 정의로 구성됩니다.
요청 메시지는 새 목표를 시작하는 액션 클라이언트에서 액션 서버로 전송됩니다.
결과 메시지는 목표가 완료될 때 액션 서버에서 액션 클라이언트로 전송됩니다.
피드백 메시지는 액션 서버에서 액션 클라이언트로 목표에 대한 업데이트와 함께 주기적으로 전송됩니다.
액션의 인스턴스는 일반적으로 목표 라고 합니다.
피보나치 수열 을 계산하기 위한 새 액션 Fibonacci 를 정의하고 싶다고 가정해 봅시다.
ROS 2 패키지 action_tutorials_interfaces 에 action 디렉토리를 생성하세요:
cd action_tutorials_interfaces
mkdir action
action 디렉토리 안에 Fibonacci.action 이라는 파일을 다음 내용으로 생성하세요:
int32 order
---
int32[] sequence
---
int32[] partial_sequence
목표 요청은 우리가 계산하고자 하는 피보나치 수열의 order 이며, 결과는 최종 sequence 이고, 피드백은 지금까지 계산된 partial_sequence 입니다.
2 액션 빌드하기
새로운 피보나치 액션 유형을 코드에서 사용하기 전에, 정의를 rosidl 코드 생성 파이프라인에 전달해야 합니다.
이는 action_tutorials_interfaces 의 CMakeLists.txt 파일에서 ament_package() 라인 전에 다음 줄을 추가함으로써 수행됩니다:
find_package(rosidl_default_generators REQUIRED)
rosidl_generate_interfaces(${PROJECT_NAME}
"action/Fibonacci.action"
)
또한 필요한 의존성을 package.xml 에 추가해야 합니다:
<buildtool_depend>rosidl_default_generators</buildtool_depend>
<depend>action_msgs</depend>
<member_of_group>rosidl_interface_packages</member_of_group>
액션 정의에는 추가 메타데이터(예: 목표 ID)가 포함되므로 action_msgs 에 의존해야 한다는 점에 유의하세요.
이제 Fibonacci 액션 정의를 포함한 패키지를 빌드할 수 있어야 합니다:
# Change to the root of the workspace
cd ~/ros2_ws
# Build
colcon build
완료되었습니다!
관례에 따라, 액션 유형은 패키지 이름과 단어 action 으로 접두사가 붙습니다.
따라서 우리가 새 액션을 언급할 때, 전체 이름은 action_tutorials_interfaces/action/Fibonacci 가 됩니다.
명령줄 도구로 액션이 성공적으로 빌드되었는지 확인할 수 있습니다:
# Source our workspace
. install/setup.bash
# Check that our action definition exists
ros2 interface show action_tutorials_interfaces/action/Fibonacci
피보나치 액션 정의가 화면에 출력되어야 합니다.
요약
이 튜토리얼에서는 액션 정의의 구조를 배웠습니다.
또한 CMakeLists.txt 와 package.xml 을 사용하여 새 액션 인터페이스를 올바르게 빌드하는 방법과
성공적인 빌드를 확인하는 방법을 배웠습니다.
다음 단계
다음으로, 새로 정의한 액션 인터페이스를 사용하여 액션 서비스와 클라이언트를 생성해 보겠습니다(파이썬 또는 C++ 에서).