# Igus Rebel

The **igus iRC Interface** connects and controls igus robots via the igus Robot Control (iRC) software. It supports all igus robot kinematics controllable through iRC, including the ReBeL 6DOF, SCARA 4DOF, delta robots, and linear robots with variable axis counts.

{% hint style="info" %}
This feature was updated in realvirtual **6.0.10** with support for variable axis counts, speed control, position-based motion commands, and inverse kinematics via CRI.
{% endhint %}

<figure><img src="https://260262196-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FpYxFg97YnJX96UzNNTSd%2Fuploads%2Fgit-blob-11a176e96b4815267c64976ded1e72bf9b743d17%2Figus-properties.png?alt=media" alt=""><figcaption><p>igus iRC Interface properties</p></figcaption></figure>

## Adding the Interface

Add the interface via the realvirtual menu: **Tools > realvirtual > Add Interface > igus iRC**.

<figure><img src="https://260262196-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FpYxFg97YnJX96UzNNTSd%2Fuploads%2Fgit-blob-9652178cf9c61791053c5d2dff2f363014cfd9dd%2Figus-addinterface.png?alt=media" alt=""><figcaption><p>Adding the igus iRC Interface from the menu</p></figcaption></figure>

## Prerequisites

The igus Robot Control Software (iRC) is freely available at <https://www.igus.eu/automation/robot-control-system/robot-software>.

igus Robot Control Software enables simple and intuitive robot programming and control systems. Thanks to the modular structure, various robot kinematics including delta robots, linear robots and multi-axis robots can be controlled. The software can simulate individual movements on a 3D surface without a physical robot connected.

We deliver one example robot, the igus ReBeL, but after importing step data and defining the kinematic and drives, all other igus robots controllable by iRC can be used.

## Properties

**Active** (enum) Determines when the interface is active. Options include:

* **Always**: The interface is active at all times.
* **Connected**: Only active when realvirtual.io is in "Connected Mode".
* **Disconnected**: Only active in "Disconnected Mode".
* **Never**: The interface is deactivated.

See more about connection states: [Runtime UI - Connection Status](https://doc.realvirtual.io/basics/runtime-ui#connection-status)

**Is Connected** (boolean, read-only) Displays the current connection status to the igus robot controller.

**Address** (string) IP address of the igus iRC controller. Use `127.0.0.1` for local connections.

**Port** (integer) Port number for the CRI connection. Default is `3921`.

**Drives** (list) The robot axis drives. Each drive corresponds to one robot joint. The interface supports variable axis counts from 1 to 9 axes, making it compatible with all igus robot types (6DOF, 4DOF SCARA, delta, etc.).

**Num Outputs** (integer, read-only) Number of digital output signals from the robot to realvirtual.

**Num Inputs** (integer, read-only) Number of digital input signals from realvirtual to the robot.

**Speed** (float, slider 0–100) Controls the robot movement speed as a percentage. Changing this value sends an updated override speed to the iRC controller in real time.

**Is Moving To Target** (boolean, read-only) Indicates whether the robot is currently executing a position-based move command.

**Target** (RebelTarget, read-only) The current target the robot is moving towards during a position-based move.

**Kinematic Error** (boolean, read-only) Indicates whether the last inverse kinematics calculation returned an error from the iRC controller.

**Active Command On Start** (boolean) When enabled, sends the initial command activation sequence to the iRC controller on connection start.

**Debug Mode** (boolean) Enables detailed logging of all CRI protocol messages sent to and received from the robot controller. Useful for troubleshooting communication issues.

**On Move Finished** (UnityEvent) Event invoked when a position-based move command completes. Use this to chain movements or trigger actions after the robot reaches its target.

## Robot Commands

The interface provides methods for controlling robot motion programmatically or via RebelTarget components.

**MoveToPosition** moves the robot to a RebelTarget with configurable offset, speed, and motion type (PTP or linear). **MoveToPositionAsync** provides the same functionality as an awaitable async method for use in coroutines or async workflows.

**SetSpeed** updates the robot speed override (0–100%) in real time.

**SetRobotOutput** controls digital outputs on the robot controller.

**SetActive** enables or disables the robot controller.

### RebelTarget

The **RebelTarget** component defines a target position and rotation for the robot. Attach it to a GameObject whose transform represents the desired robot end-effector pose. Assign it to the interface's motion commands to move the robot to that position.

### Inverse Kinematics

The interface supports inverse kinematics calculations via the CRI protocol. Use **GetJointAngles** to retrieve current joint positions and **CalculateAngles** to compute joint angles for a given Cartesian pose. The **Kinematic Error** property indicates if the last IK calculation failed (e.g., target out of reach).

## Inputs and Outputs

The igus iRC Interface communicates with the robot controller using **Global Signals** and **Digital Outputs**.

{% hint style="info" %}
**Note**: Digital Inputs on the igus robot cannot be controlled directly from the simulation. These inputs are controlled by the robot controller. Use Global Signals instead.
{% endhint %}

**Global Signals**: Serve as inputs to the robot controller and must be configured within the iRC software's **Project Configuration**.

**Digital Outputs**: Robot controller outputs that send digital signals back to the simulation in realvirtual.

<figure><img src="https://260262196-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FpYxFg97YnJX96UzNNTSd%2Fuploads%2Fgit-blob-7749dcde2e97ca59b86e2e75797f73337d73d85a%2Figusrebel-ios.png?alt=media" alt=""><figcaption><p>Connected IOs between realvirtual and iRC</p></figcaption></figure>

To use **Global Signals** as inputs, set them up in the **Project Configuration** within the iRC software. Once configured, these inputs can be controlled from realvirtual through the assigned `PLCInputBool` signals.

<figure><img src="https://260262196-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FpYxFg97YnJX96UzNNTSd%2Fuploads%2Fgit-blob-0d6686109a7f29ef337d371adacf44d18689c0f2%2Figusrebel-global.png?alt=media" alt=""><figcaption><p>Project configuration of iRC for defining Global Signals</p></figcaption></figure>

### Setting Up Digital I/O Signals

To use digital I/O with the igus iRC Interface, create child GameObjects under the interface GameObject and add the appropriate signal components:

1. **Digital Outputs (DOut)**: Add a `PLCOutputBool` component to a child GameObject for each digital output you want to receive from the robot controller. These correspond to `DOut21`, `DOut22`, etc. in the iRC software.
2. **Global Signals (GSig)**: Add a `PLCInputBool` component to a child GameObject for each global signal you want to send to the robot controller. These correspond to `GSig1`, `GSig2`, etc. in the iRC software.

Set the **Num Outputs** and **Num Inputs** properties on the interface to match the number of digital output and input signals you have configured.

**Signal Assignment Logic**

There are two ways to assign signals to the iRC controller:

**Option 1: Sequential Assignment (Default)**

If no SymbolName is set on the signal, signals are assigned sequentially based on their hierarchy order:

* **Digital Outputs (DOut)**: The first `PLCOutputBool` maps to `DOut21`, the second to `DOut22`, and so on.
* **Global Signals (GSig)**: The first `PLCInputBool` maps to `GSig1`, the second to `GSig2`, and so on.

**Option 2: Explicit Assignment via SymbolName**

You can set the **SymbolName** property on a signal to explicitly assign it to a specific DOut or GSig number. For example, setting SymbolName to `25` on a `PLCOutputBool` maps it directly to `DOut25`, regardless of its position in the hierarchy.

This is useful when you need non-sequential signal mapping or when the hierarchy order does not match the iRC signal numbering.

{% hint style="warning" %}
When using sequential assignment, make sure the order of your `PLCOutputBool` and `PLCInputBool` signals in the hierarchy matches the order of the corresponding DOut/GSig signals in the iRC software configuration.
{% endhint %}

## See Also

* [Drives](https://doc.realvirtual.io/components-and-scripts/motion/drive)
* [Interfaces Overview](https://github.com/game4automation/doc/blob/doc/advanced-topics/interfaces.md)
