라이브러리 개요
산업용 manipulator를 위한 real-time 제어 라이브러리입니다. 기존 코드 수정 없이 새 로봇을 추가할 수 있습니다.
핵심 기능
| 기능 | 설명 |
|---|---|
| 1 kHz 실시간 제어 | 격리 CPU + PREEMPT_RT 커널. 실행 시간 < 100 µs, 지터 < 50 µs |
| 이중 안전 상태 머신 | SafetyMode (하드웨어 보호) + RobotMode (사용자 제어). 명시적 명령만 상태 변경 |
| 플러그 앤 플레이 확장 | Scaffold 도구로 Description Package 생성 → colcon build → 자동 통합 |
| 어댑터 기반 ROS2 통합 | 제어 로직은 프레임워크 독립적. ROS2를 다른 통신 계층으로 교체 가능 |
| Composable Launch | 각 컴포넌트를 독립 실행하거나 조합. 필요한 것만 활성화 |
| 컨벤션 기반 자동 발견 | description_package 인수만으로 URDF, config, SRDF 자동 감지 |
아키텍처
의존성은 항상 아래로만 흐릅니다. ROS2 없이 제어 로직을 테스트하고, 코어 수정 없이 통신 계층을 교체할 수 있습니다.
Launch 구조
PLEM은 composable launch 시스템을 사용합니다. 각 컴포넌트를 독립적으로 실행하거나 필요한 것만 조합할 수 있습니다.
| 컴포넌트 | 역할 | 필수 여부 |
|---|---|---|
| plem_launch.py | 통합 orchestrator | 필수 |
| ├─ rt_driver.launch.py | RT EtherCAT driver (1kHz) | 필수 |
| ├─ ros2_control.launch.py | Hardware interface + controllers | 필수 |
| ├─ moveit.launch.py | 모션 플래닝 | 선택 |
| └─ plem_ai_server | Python WebSocket/UDP bridge | 선택 |
자세한 내용은 ROS2 Launch 가이드를 참고하세요.
컨벤션 기반 자동 발견
PLEM은 description package의 구조를 컨벤션으로 정의하여 설정 파일을 자동으로 발견합니다.
| 경로 | 용도 | 필수 여부 |
|---|---|---|
| urdf/*.urdf.xacro | 로봇 모델 정의 | 자동 발견 |
| config/joint_limits.yaml | 관절 제한 | 필수 |
| config/controllers.yaml | Controller 설정 | 선택 (자동 생성) |
| srdf/*.srdf | MoveIt 설정 | 선택 (MoveIt용) |
패키지 이름에서 _description 접미사를 제거하여 로봇 이름을 자동 추출합니다 (예: ur5e_description → ur5e).
자세한 프로토콜은 Description Protocol 레퍼런스를 참고하세요.
새 로봇 통합 (빠른 개요)
# 1. Description Package 생성
ros2 run plem_bringup create_description --name my_robot --dof 6
# 2. URDF, joint_limits.yaml 편집
# 3. 빌드 & 실행
colcon build --packages-select my_robot_description
ros2 launch plem_bringup plem_launch.py description_package:=my_robot_description
팁
새 제조사 로봇의 하드웨어 제어가 필요하면 ros2 run plem_bringup create_robot으로 C++ 확장 패키지를 생성합니다.
상세한 통합 절차는 로봇 통합 가이드를 참고하세요.
다음 단계
설치 가이드로 이동하여 PLEM 설치를 확인하고 첫 프로젝트를 빌드하세요.