Library Overview
A real-time control library for industrial manipulators. Add new robots without modifying existing code.
Core Features
| Feature | Description |
|---|---|
| 1 kHz Real-time Control | Isolated CPU + PREEMPT_RT kernel. Execution time < 100 µs, jitter < 50 µs |
| Dual Safety State Machine | SafetyMode (hardware protection) + RobotMode (user control). State changes only via explicit commands |
| Plug and Play Extension | Generate Description Package with Scaffold tool → colcon build → automatic integration |
| Adapter-based ROS2 Integration | Control logic is framework-independent. ROS2 can be replaced with other communication layers |
| Composable Launch | Run each component independently or in combination. Activate only what you need |
| Convention-based Auto-discovery | Automatically detect URDF, config, SRDF with just the description_package argument |
Architecture
Dependencies always flow downward. Test control logic without ROS2, and replace communication layers without modifying core code.
Launch Structure
PLEM uses a composable launch system. Each component can be run independently or combined with only what you need.
| Component | Role | Required |
|---|---|---|
| plem_launch.py | Unified orchestrator | Required |
| ├─ rt_driver.launch.py | RT EtherCAT driver (1kHz) | Required |
| ├─ ros2_control.launch.py | Hardware interface + controllers | Required |
| ├─ moveit.launch.py | Motion planning | Optional |
| └─ plem_ai_server | Python WebSocket/UDP bridge | Optional |
For details, see the ROS2 Launch Guide.
Convention-based Auto-discovery
PLEM defines the structure of description packages as a convention to automatically discover configuration files.
| Path | Purpose | Required |
|---|---|---|
| urdf/*.urdf.xacro | Robot model definition | Auto-discovered |
| config/joint_limits.yaml | Joint limits | Required |
| config/controllers.yaml | Controller configuration | Optional (auto-generated) |
| srdf/*.srdf | MoveIt configuration | Optional (for MoveIt) |
Robot names are automatically extracted by removing the _description suffix from package names (e.g., ur5e_description → ur5e).
For detailed protocol, see the Description Protocol Reference.
New Robot Integration (Quick Overview)
# 1. Generate Description Package
ros2 run plem_bringup create_description --name my_robot --dof 6
# 2. Edit URDF, joint_limits.yaml
# 3. Build & Run
colcon build --packages-select my_robot_description
ros2 launch plem_bringup plem_launch.py description_package:=my_robot_description
If you need hardware control for a new manufacturer's robot, generate a C++ extension package with ros2 run plem_bringup create_robot.
For detailed integration procedures, see the Robot Integration Guide.
Next Steps
Go to the Installation Guide to verify your PLEM installation and build your first project.