ament_python vs ament_cmake
파이썬만 쓸 건데 CMake 패키지도 알아야 할까?
두 갈래
빌드 종류는 둘 중 하나를 고릅니다
ROS 2의 빌드 방식을 ament라고 합니다. 파이썬 패키지는 ament_python으로 setup.py에, CMake 패키지는 ament_cmake로 CMakeLists.txt에 빌드 방법을 적습니다.
4편의 package.xml 맨 아래 build_type이 이 선택입니다.
생김새
CMake 패키지의 뼈대
만드는 명령은 같고 --build-type ament_cmake만 다릅니다. setup.py 대신 CMakeLists.txt가 생기고, 코드는 src, 헤더는 include에 둡니다.
공식 튜토리얼과 같은 이름을 썼습니다. 이미 파이썬 my_package가 있다면 이름을 바꿔 만듭니다.
C++ 노드
C++은 컴파일을 거칩니다
C++ 코드는 기계어 실행 파일로 컴파일해야 돌아갑니다. 그래서 C++ 노드는 ament_cmake 패키지에 담고, 고칠 때마다 다시 빌드합니다. --symlink-install도 이 단계는 건너뛰게 해 주지 못합니다.
파이썬과 C++ 노드 코드는 6강 9편에서 나란히 비교합니다.
내 타입
내 메시지 타입은 CMake 패키지에서
4강에서 본 .msg, .srv, .action을 내가 만들려면 ament_cmake 패키지가 필요합니다. 빌드할 때 이 파일들로 파이썬용, C++용 코드를 만들어 내는 규칙을 CMakeLists.txt에 적기 때문입니다.
Num.msg, AddThreeInts.srv는 공식 튜토리얼의 예시 이름입니다. 직접 만들기는 7강 8편에서 합니다.
현업 습관
인터페이스 패키지는 따로 떼어 둡니다
인터페이스와 C++ 노드는 ament_cmake로 만듭니다. 현업에서는 인터페이스만 담은 패키지를 따로 떼어 둡니다. 파이썬 노드든 C++ 노드든, 다른 사람의 패키지든 그 타입 하나를 함께 가져다 쓰게 하려는 것입니다.
패키지 이름은 예시입니다. 두 노드 패키지가 가져다 쓰므로 colcon은 my_interfaces를 먼저 빌드합니다(6편).
정리
무엇을 담느냐로 고릅니다
이 과정은 노드를 모두 파이썬으로 짜므로 대부분 ament_python 패키지를 씁니다. 내 메시지·서비스·액션 타입이 필요해지는 7강부터 ament_cmake 인터페이스 패키지를 하나 더 만듭니다.
다음 강