Skip to main content

Library Overview

A real-time control library for industrial manipulators. Add new robots without modifying existing code.

Core Features

FeatureDescription
1 kHz Real-time ControlIsolated CPU + PREEMPT_RT kernel. Execution time < 100 µs, jitter < 50 µs
Dual Safety State MachineSafetyMode (hardware protection) + RobotMode (user control). State changes only via explicit commands
Plug and Play ExtensionGenerate Description Package with Scaffold tool → colcon build → automatic integration
Adapter-based ROS2 IntegrationControl logic is framework-independent. ROS2 can be replaced with other communication layers
Composable LaunchRun each component independently or in combination. Activate only what you need
Convention-based Auto-discoveryAutomatically 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.

ComponentRoleRequired
plem_launch.pyUnified orchestratorRequired
├─ rt_driver.launch.pyRT EtherCAT driver (1kHz)Required
├─ ros2_control.launch.pyHardware interface + controllersRequired
├─ moveit.launch.pyMotion planningOptional
└─ plem_ai_serverPython WebSocket/UDP bridgeOptional

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.

PathPurposeRequired
urdf/*.urdf.xacroRobot model definitionAuto-discovered
config/joint_limits.yamlJoint limitsRequired
config/controllers.yamlController configurationOptional (auto-generated)
srdf/*.srdfMoveIt configurationOptional (for MoveIt)

Robot names are automatically extracted by removing the _description suffix from package names (e.g., ur5e_descriptionur5e).

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
tip

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.