Controller and robots
List the robots of a Staubli controller, read the controller parameters, the Denavit-Hartenberg parameters and the joint ranges of each arm.
This page shows how to read the description of a Staubli CS8 or CS9 controller and of its robots: the arms, the controller parameters, the Denavit-Hartenberg parameters and the joint ranges. These calls only read: they never change the state of the controller.
Robots of the controller
GetRobots() returns one Robot per arm driven by the controller. The index of an arm in this array is the robot number that the other methods take.
var controller = new StaubliController();controller.Connect("192.168.0.254");// The robots driven by the controller. The index in this array// is the robot number that the other methods take.Robot[] robots = controller.Soap.GetRobots();for (int i = 0; i < robots.Length; i++){Robot robot = robots[i];Console.WriteLine($"Robot {i}: {robot.Arm}"); // for example TX2-60Console.WriteLine($" Kinematic: {robot.Kinematic}"); // Anthropomorph6, Scara...Console.WriteLine($" Mount type: {robot.MountType}"); // Floor, Ceiling, WallConsole.WriteLine($" Tuning: {robot.Tuning}");}controller.Disconnect();}
Kinematic gives the type of arm: Anthropomorph6 for a 6 axis arm like the TX2 series, Scara for a SCARA like the TS2 series, and the other values of the Kinematic enumeration.
Controller parameters
GetControllerParameters() returns the parameters of the controller, as key, name and value.
var controller = new StaubliController();controller.Connect("192.168.0.254");Parameter[] parameters = controller.Soap.GetControllerParameters();foreach (Parameter parameter in parameters)Console.WriteLine($"{parameter.Key} | {parameter.Name} = {parameter.Value}");controller.Disconnect();}
The list and the values depend on the controller and on its version. Read the list once on your controller to find the keys you need.
Denavit-Hartenberg parameters
GetDhParameters(robot) returns one DhParameters per joint of the arm, as the controller defines its geometry.
var controller = new StaubliController();controller.Connect("192.168.0.254");// One entry per joint of the first robotDhParameters[] dh = controller.Soap.GetDhParameters(robot: 0);for (int i = 0; i < dh.Length; i++)Console.WriteLine($"J{i + 1}: theta={dh[i].Theta} d={dh[i].D} a={dh[i].A} alpha={dh[i].Alpha} beta={dh[i].Beta}");controller.Disconnect();}
Joint ranges
GetJointRange(robot) returns the software limits of each joint, in radians. The inverse kinematics uses them to reject a solution out of range: see Kinematics.
var controller = new StaubliController();controller.Connect("192.168.0.254");// Software limits of each joint of the first robot, in radiansJointRange range = controller.Soap.GetJointRange(robot: 0);for (int i = 0; i < range.Min.Length; i++)Console.WriteLine($"J{i + 1}: {range.Min[i]} to {range.Max[i]}");controller.Disconnect();}
Try it in the demo application
Everything on this page can be tried without writing code, in the Get Robots page of the demo application.

The demo application is open source. The C# source of this page is RobotsControl.cs.
Reference
Methods of SoapClientBase :// Get the current Cartesian position of a robot end effectorParameter[] GetControllerParameters();// Get Robot DH parametersDhParameters[] GetDhParameters(int robot = 0);// Get the range Min-Max of each joint of a robotJointRange GetJointRange(int robot = 0);// Get all the robots handled by this controllerRobot[] GetRobots();
Represents a robot managed by the controller.
| Member | Type | Description |
|---|---|---|
Robot() Constructor | Initializes a new instance of the Robot class. | |
Arm Property | string | Arm model identifier. |
DiameterAxis3 Property | DiameterAxis3 | Diameter of the third axis. |
Kinematic Property | Kinematic | Kinematic type of the robot. |
LengthAxis3 Property | LengthAxis3 | Length of the third axis. |
MountType Property | MountType | Mounting type of the robot (floor, ceiling, wall). |
Tuning Property | string | Tuning identifier. |
Equals(object) Method | bool | |
GetHashCode() Method | int | |
ToString() Method | string |
Robot kinematic type.
| Name | Value | Description |
|---|---|---|
Anthrioparallel6 | 2 | 6-axis anthropomorphic parallel robot. |
Anthropomorph5 | 3 | 5-axis anthropomorphic robot. |
Anthropomorph6 | 1 | 6-axis anthropomorphic robot. |
Eisenmann | 5 | Eisenmann kinematic type. |
Invalid | 0 | Invalid or unknown kinematic type. |
Scara | 4 | SCARA robot. |
Robot mounting type.
| Name | Value | Description |
|---|---|---|
Ceiling | 2 | Robot is ceiling-mounted. |
Floor | 1 | Robot is floor-mounted. |
Invalid | 0 | Invalid or unknown mount type. |
Wall | 3 | Robot is wall-mounted. |
Key-value parameter from the controller.
| Member | Type | Description |
|---|---|---|
Parameter() Constructor | Initializes a new instance of the Parameter class. | |
Key Property | string | Parameter key identifier. |
Name Property | string | Display name of the parameter. |
Value Property | string | Value of the parameter. |
Equals(object) Method | bool | |
GetHashCode() Method | int | |
ToString() Method | string |
Denavit-Hartenberg parameters for a single robot joint.
| Member | Type | Description |
|---|---|---|
DhParameters() Constructor | Initializes a new instance of the DhParameters class. | |
A Property | double | Link length a (m). |
Alpha Property | double | Link twist alpha (radians). |
Beta Property | double | Joint twist beta (radians). |
D Property | double | Link offset d (m). |
Theta Property | double | Joint angle theta (radians). |
Equals(object) Method | bool | |
GetHashCode() Method | int | |
ToString() Method | string |
Minimum and maximum range of each robot joint (radians).
| Member | Type | Description |
|---|---|---|
JointRange() Constructor | Initializes a new instance of the JointRange class. | |
Max Property | double[] | Maximum values for each joint (radians). |
Min Property | double[] | Minimum values for each joint (radians). |
Equals(object) Method | bool | |
GetHashCode() Method | int | |
ToString() Method | string |