주변기기 추가
plem 플랫폼은 3-Tier Description 패턴을 사용하여 로봇 본체와 주변기기(그리퍼, 카메라 등)를 독립적으로 관리한다. 새 주변기기를 추가할 때 로봇 URDF나 launch 파일을 수정할 필요 없이, 정해진 디렉터리에 파일을 배치하면 PeripheralScanner가 자동으로 발견한다.
3-Tier Description 패턴
| Tier | 패키지 예시 | 역할 | 수정 여부 |
|---|---|---|---|
| Tier 1 | neuromeka_description | 로봇 본체 URDF (Indy7, Indy12 등) | 수정하지 않음 |
| Tier 2 | onrobot_description, stereolabs_description | 주변기기 URDF — 기기별 독립 패키지 | 새 주변기기 시 생성 |
| Tier 3 | neuromeka_integrations | 마운팅 + SRDF + 드라이버 매핑 | 새 주변기기 시 항목 추가 |
핵심 원칙:
- Tier 1은 절대 수정하지 않는다. 로봇 URDF는 로봇 제조사의 SSoT(Single Source of Truth)이다.
- Tier 2는 주변기기별 독립 패키지로 관리한다. 각 패키지는 자체 URDF와 메쉬를 포함한다.
- Tier 3은 Tier 1과 Tier 2를 조합하는 통합 계층이다. 마운팅 위치, 충돌 비활성화, 드라이버 매핑을 정의한다.
새 그리퍼 추가 체크리스트 (예: Robotiq 2F-85)
1단계: Tier 2 — robotiq_description 패키지 생성
주변기기의 URDF와 메쉬를 담는 독립 패키지를 생성한다.
robotiq_description/
├── CMakeLists.txt
├── package.xml
├── urdf/
│ └── 2f85.urdf.xacro # robotiq_2f85 매크로 (prefix 파라미터)
└── meshes/
└── 2f85/
├── visual/ # DAE 또는 STL 시각 메쉬
└── collision/ # 단순화된 충돌 메쉬
urdf/2f85.urdf.xacro는 반드시 prefix 파라미터를 지원해야 한다. 모든 link와 joint 이름에 ${prefix}를 붙인다:
<xacro:macro name="robotiq_2f85" params="prefix">
<link name="${prefix}robotiq_2f85_base_link">
<!-- ... -->
</link>
<!-- 나머지 link/joint에도 ${prefix} 적용 -->
</xacro:macro>
2단계: Tier 3 — integration wrapper 추가
neuromeka_integrations 패키지에 다음 파일들을 추가한다.
2-1. 마운팅 매크로
neuromeka_integrations/urdf/grippers/2f85.xacro:
<xacro:macro name="mount_gripper" params="prefix name parent_link flange_xyz flange_rpy">
<xacro:include filename="$(find robotiq_description)/urdf/2f85.xacro"/>
<joint name="${prefix}${name}_mount" type="fixed">
<parent link="${parent_link}"/>
<child link="${prefix}robotiq_2f85_base_link"/>
<origin xyz="${flange_xyz}" rpy="${flange_rpy}"/>
</joint>
<xacro:robotiq_2f85 prefix="${prefix}"/>
</xacro:macro>
2-2. SRDF 매크로
neuromeka_integrations/srdf/grippers/2f85.srdf.xacro:
그리퍼-로봇 간 충돌 비활성화 쌍을 정의하는 gripper_srdf 매크로를 작성한다.
2-3. 드라이버 매핑
neuromeka_integrations/config/gripper_drivers.yaml에 1줄 추가:
2f85:
package: robotiq_gripper_driver
launch_file: robotiq_gripper.launch.py
2-4. 패키지 의존성
neuromeka_integrations/package.xml에 의존성 추가:
<exec_depend>robotiq_description</exec_depend>
3단계: 빌드 및 테스트
colcon build && colcon test --packages-select neuromeka_integrations
4단계: 실행 확인
ros2 launch neuromeka_robot_driver plem_launch.py gripper:=2f85
새 카메라 추가
카메라도 동일한 3-Tier 패턴을 따른다. 그리퍼의 mount_gripper 대신 mount_sensor 매크로를 사용한다:
- Tier 2: 카메라 description 패키지 생성 (예:
realsense_description) - Tier 3:
neuromeka_integrations/urdf/sensors/디렉터리에 마운팅 매크로 배치
자동 발견
launch 파일, Scanner, macro.xacro는 수정할 필요가 없다. PeripheralScanner가 neuromeka_integrations의 디렉터리 구조를 스캔하여 등록된 주변기기를 자동으로 발견한다. 정해진 디렉터리(urdf/grippers/, urdf/sensors/)에 파일을 배치하고 gripper_drivers.yaml 또는 sensor_drivers.yaml에 드라이버를 등록하면 된다.