액션 생성하기

목표: ROS 2 패키지에서 액션을 정의합니다.

배경

이전 튜토리얼에서 액션 에 대해 배웠습니다. 다른 통신 유형 및 각각의 인터페이스(토픽/msg 및 서비스/srv)처럼, 패키지에서 액션을 커스텀 정의할 수도 있습니다. 이 튜토리얼에서는 다음 튜토리얼에서 사용할 액션 서버 및 액션 클라이언트와 함께 사용할 수 있는 액션을 정의하고 빌드하는 방법을 보여줍니다.

사전 준비 사항

ROS 2colcon 이 설치되어 있어야 합니다.

워크스페이스 를 설정하고 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_interfacesaction 디렉토리를 생성하세요:

cd action_tutorials_interfaces
mkdir action

action 디렉토리 안에 Fibonacci.action 이라는 파일을 다음 내용으로 생성하세요:

int32 order
---
int32[] sequence
---
int32[] partial_sequence

목표 요청은 우리가 계산하고자 하는 피보나치 수열의 order 이며, 결과는 최종 sequence 이고, 피드백은 지금까지 계산된 partial_sequence 입니다.

2 액션 빌드하기

새로운 피보나치 액션 유형을 코드에서 사용하기 전에, 정의를 rosidl 코드 생성 파이프라인에 전달해야 합니다.

이는 action_tutorials_interfacesCMakeLists.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.txtpackage.xml 을 사용하여 새 액션 인터페이스를 올바르게 빌드하는 방법과 성공적인 빌드를 확인하는 방법을 배웠습니다.

다음 단계

다음으로, 새로 정의한 액션 인터페이스를 사용하여 액션 서비스와 클라이언트를 생성해 보겠습니다(파이썬 또는 C++ 에서).

관련 내용

ROS 액션에 대한 보다 자세한 정보는 디자인 문서 를 참조하세요.