Robot Sensor Interface Python Integration (RSIPI) for KUKA RSI control
Project description
RSIPI: Robot Sensor Interface - Python Integration
RSIPI is a high-performance, Python-based communication and control system designed for real-time interfacing with KUKA robots using the Robot Sensor Interface (RSI) protocol. It provides both a robust API for developers and a powerful Command Line Interface (CLI) for researchers and engineers who need to monitor, control, and analyse robotic movements in real time.
🛡️ Safety Notice RSIPI is a powerful tool that directly interfaces with industrial robotic systems. Improper use can lead to dangerous movements, property damage, or personal injury.
⚠️ Safety Guidelines
- Test in Simulation First: Always verify your RSI communication and trajectories using simulation tools before deploying to a live robot.
- Enable Emergency Stops: Ensure all safety hardware (E-Stop, fencing, light curtains) is active and functioning correctly.
- Supervised Operation Only: Run RSIPI only in supervised environments with trained personnel present.
- Limit Movement Ranges: Use KUKA Workspaces or software limits to constrain movement, especially when testing new code.
- Use Logging for Debugging: Avoid debugging while RSI is active; instead, enable CSV logging and review logs post-run.
- Secure Network Configuration: Ensure your RSI network is on a closed, isolated interface to avoid external interference or spoofing.
- Never Rely on RSIPI for Safety: RSIPI is not a safety-rated system. Do not use it in applications where failure could result in harm.
📄 Description
RSIPI allows users to:
- Communicate with KUKA robots using the RSI XML-based protocol.
- Dynamically update control variables (TCP position, joint angles, I/O, external axes, etc.).
- Log and visualise robot movements with live graphs and static plots.
- Analyse motion data and compare planned vs actual trajectories.
- Parse and inject RSI into KRL programs.
- Simulate robot behaviour using a realistic Echo Server.
- Enforce safety limits and manage emergency stops.
Target Audience
- Researchers working on advanced robotic applications, control algorithms, and feedback systems.
- Engineers developing robotic workflows or automated processes.
- Educators using real robots in coursework or lab environments.
- Students learning about robot control systems and data-driven motion planning.
📊 Features
- Real-time network communication with KUKA RSI over UDP.
- Structured logging to CSV with British date formatting.
- Background execution and live variable updates.
- Fully-featured Python API for scripting or external integration.
- CLI for interactive control, trajectory planning, and live monitoring.
- Real-time and post-analysis graphing (live TCP, joints, force, acceleration).
- Safety management: emergency stop, limit enforcement, safety override.
- KUKA KRL
.src/.datparsing and RSI injection tools. - Echo Server and GUI for offline simulation and testing.
- Deviation and force spike alerts during live operation.
📊 API Overview (rsi_api.py)
Initialization
from src.RSIPI import rsi_api
api = rsi_api.RSIAPI(config_file='examples/RSI_EthernetConfig.xml')
Selected Methods
| Method | CLI | API | Description |
|---|---|---|---|
start_rsi() |
✅ | ✅ | Starts RSI communication (non-blocking). |
stop_rsi() |
✅ | ✅ | Stops RSI communication. |
update_variable(path, value) |
✅ | ✅ | Dynamically updates a send variable (e.g. RKorr.X). |
get_variable(path) |
✅ | ✅ | Retrieves the latest value of any variable. |
plan_linear_cartesian(start, end, steps) |
✅ | ✅ | Create Cartesian paths. |
plan_linear_joint(start, end, steps) |
✅ | ✅ | Create Joint-space paths. |
execute_trajectory(traj, rate) |
✅ | ✅ | Execute planned trajectory live. |
enable_alerts(True/False) |
✅ | ✅ | Enable or disable deviation/force alerts. |
start_live_plot(mode) |
✅ | ✅ | Live graph position, velocity, force, etc. |
generate_plot(csv, type) |
✅ | ✅ | Static graphing from CSV files. |
export_movement_data(filename) |
✅ | ✅ | Export recorded motion as CSV. |
parse_krl_to_csv(src, dat, output) |
✅ | ✅ | Extract TCP points from KRL programs. |
inject_rsi(input, output, config) |
✅ | ✅ | Add RSI startup code to a KRL file. |
(Full API details available in rsi_api.py.)
🔧 CLI Overview (rsi_cli.py)
Start the CLI:
python main.py --cli
Selected Commands
| Command | Description |
|---|---|
start / stop |
Start or stop RSI client. |
set <var> <value> |
Update send variable. |
get <var> |
Get latest receive variable. |
move_cartesian, move_joint |
Move robot using planned trajectories. |
queue_cartesian, queue_joint |
Queue trajectory steps. |
execute_queue |
Run queued trajectories. |
alerts on/off |
Enable or disable alerts. |
graph show/compare |
Plot or compare test runs. |
log start/stop/status |
Manage CSV logging. |
plot <type> <csv> |
Static plotting (position, velocity, deviation, etc.). |
safety-stop, safety-reset, safety-status |
Emergency stop and limit management. |
krlparse <src> <dat> <out> |
Parse KRL to CSV. |
inject_rsi <src> [out] [config] |
Inject RSI code into KRL file. |
📃 Example Usage
Update TCP position live
api.start_rsi()
api.update_variable('RKorr.X', 100.0)
api.update_variable('RKorr.Y', 50.0)
Plan and execute a Cartesian move
start_pose = {'X': 0, 'Y': 0, 'Z': 500}
end_pose = {'X': 200, 'Y': 0, 'Z': 500}
traj = api.plan_linear_cartesian(start_pose, end_pose, steps=100)
api.execute_trajectory(traj, rate=0.012)
CLI session sample
> start
> set RKorr.X 150
> move_cartesian X=0,Y=0,Z=500 X=200,Y=0,Z=500 steps=100 rate=0.012
> graph show my_log.csv
> log start
> stop
📅 Output and Logs
- CSV logs saved to
logs/folder. - Each log includes British timestamp, sent/received variables.
- Static plots exportable as PNG/PDF.
- Live plots include alert messages and deviation tracking.
🚀 Getting Started
- Connect robot and PC via Ethernet.
- Deploy KUKA RSI program with matching config.
- Install Python dependencies:
pip install -r requirements.txt
- Run
main.pyor importRSIAPIin your Python scripts.
🔖 Citation
If you use RSIPI in your research, please cite:
@software{rsipi2025,
author = {RSIPI Development Team},
title = {RSIPI: Robot Sensor Interface - Python Integration},
year = {2025},
url = {https://github.com/your-org/rsipi},
note = {Accessed: [insert date]}
}
⚖️ License
RSIPI is licensed under the MIT License.
🚧 Disclaimer
RSIPI is intended for research and experimental purposes only. Always ensure safe operation with appropriate safety measures in place.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file rsipi-0.1.1.tar.gz.
File metadata
- Download URL: rsipi-0.1.1.tar.gz
- Upload date:
- Size: 72.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
376de4c1f03bdfcac527ef401fb14549f1922be560308911ec8a8553b921990b
|
|
| MD5 |
9ed9c49017373fa13d2c593342b01b20
|
|
| BLAKE2b-256 |
dc0241d05330dc76efa5715fa874024305c86510fa67248903dcdc3d6c893678
|
File details
Details for the file rsipi-0.1.1-py3-none-any.whl.
File metadata
- Download URL: rsipi-0.1.1-py3-none-any.whl
- Upload date:
- Size: 62.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ac23151bfe544df76a58bc51585bdaaa4112e59c75a6e06e6d4a4ea3565cb202
|
|
| MD5 |
76e8ea33e26898ae026ba3bdc6875755
|
|
| BLAKE2b-256 |
081abcf031fa72a66353796e033c41c8ede9babae380c47590a77ab395d8ec51
|