본문으로 건너뛰기

주변기기 추가

plem 플랫폼은 3-Tier Description 패턴을 사용하여 로봇 본체와 주변기기(그리퍼, 카메라 등)를 독립적으로 관리한다. 새 주변기기를 추가할 때 로봇 URDF나 launch 파일을 수정할 필요 없이, 정해진 디렉터리에 파일을 배치하면 PeripheralScanner가 자동으로 발견한다.

3-Tier Description 패턴

Tier패키지 예시역할수정 여부
Tier 1neuromeka_description로봇 본체 URDF (Indy7, Indy12 등)수정하지 않음
Tier 2onrobot_description, stereolabs_description주변기기 URDF — 기기별 독립 패키지새 주변기기 시 생성
Tier 3neuromeka_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는 수정할 필요가 없다. PeripheralScannerneuromeka_integrations의 디렉터리 구조를 스캔하여 등록된 주변기기를 자동으로 발견한다. 정해진 디렉터리(urdf/grippers/, urdf/sensors/)에 파일을 배치하고 gripper_drivers.yaml 또는 sensor_drivers.yaml에 드라이버를 등록하면 된다.