ROS2에서 통신을 구현하기 위해 사용하는 서비스, 액션, 메시지에서 사용하는 interfaces를 커스텀하여 정의해야 하는 경우가 있다. 이를 커스텀하기 위해 별도의 폴더를 만들고 빌드해주지 않으면 파이썬에서 라이브러리로 불러오거나 C++에서 include할 때 에러가 발생한다.

 

1. interfaces 패키지 생성

ros2 pkg create interfaces --buile-type ament_cmake interfaces
  • srv, action, msg를 담는 인터페이스 폴더 역시 하나의 패키지로 생성해주어야 한다.
  • 개발언어가 파이썬이라도 buile-type을 ament_cmake로 설정이 필요하다.

 

2. 커스텀 파일 생성

mkdir srv
cd srv
touch AddTwoInts.srv
  • action이면 *.action, msg면 *.msg로 만들어준다. 예시를 위해 임의로 srv를 커스텀 하며, 두 개의 입력값을 더해주고 반환하는 서비스를 구현한다고 가정한다.

 

3. srv 파일 사용자 기입

int64 a
int64 b
---
int64 sum
  • vim AddTwoInts.srv 명령이후 위 내용 기입

 

4. CMakeLists.txt 파일에 내용 추가

find_package(rosidl_default_generators REQUIRED)

rosidl_generate_interfaces(${PROJECT_NAME}
	"srv/AddTwoInts.srv"
)

 

 

5. package.xml 내용 추가

<build_depend>rosidl_default_generators</build_depend>
<exec_depend>rosidl_default_ruintime</exec_depend>
<member_of_group>rosidl_interface_packages</member_of_group>


이후 colcon build 수행시 interfaces 패키지도 함께 빌드

+ Recent posts