Staubli SDK
290 (EUR) • 340 (USD)
$
340
lifetime$
204
for universities (40% discount)Quickly create .NET applications that communicate with your Staubli industrial robot.
.NET
Python
LabVIEW
Plug & Play
Connect your robot in just a few minutes. No license manager to install, no USB key. Only reference the library.
No plugins to install on the robot
Use of network protocols provided as standard by the robot controller.
ROS
30-day trial
Try it free for 30 days, no commitment, no registration required
Pay once, use forever
Perpetual license, no subscription required, regardless of the number of robots, developers, or redistributed software
Staubli Communication Library
Implements Ethernet protocols natively available on Staubli robots
100% managed assembly
Fast integration with CS8 and CS9 controllers
Modern, well-documented library
No physical USB key license required
Features at a glance
Moving the robot
// Power on the controllerPowerReturnCode powerOnStatus = controller.Soap.SetPower(power: true);// Move linear to cartesian positionIMoveResult moveLResult = controller.Soap.MoveL(robot: 0,position,motionDesc);// Move joints to cartesian positionIMoveResult moveJCResult = controller.Soap.MoveJC(robot: 0,position,motionDesc);// Move joints to joint positionIMoveResult moveJResult = controller.Soap.MoveJJ(robot: 0,joints,motionDesc);// Move CircularIMoveResult moveCResult = controller.Soap.MoveC(robot: 0,position,position2,motionDesc);// Stop motionMotionReturnCode stopStatus = controller.Soap.StopMotion();// Reset motionMotionReturnCode resetStatus = controller.Soap.ResetMotion();// Restart motionMotionReturnCode restartStatus = controller.Soap.RestartMotion();
Handling applications
// Load project from diskcontroller.Soap.LoadProject("Disk://myProject/myProject.pjx");ValApplication[] applications = controller.Soap.GetValApplications();foreach (var application in applications)Console.WriteLine($"Application: {application.Name}, Running: {application.IsRunning}");// Unload all applicationscontroller.Soap.StopAndUnloadAll();// Stop running applicationcontroller.Soap.StopApplication();// Get tasksControllerTask[] tasks = controller.Soap.GetTasks(); // Get all tasksforeach (var task in tasks){Console.WriteLine($"Task: {task.Name}");Console.WriteLine($"reated by: {task.CreatedBy}"); // i.e. Disk://myProject/myProject.pjxConsole.WriteLine($"Line: {task.ProgramLine}");Console.WriteLine($"State: {task.State}");}// Kill taskcontroller.Soap.TaskKill(tasks[0].Name, tasks[0].CreatedBy);// Suspend taskcontroller.Soap.TaskSuspend(tasks[0].Name, tasks[0].CreatedBy);// Resume taskcontroller.Soap.TaskResume(tasks[0].Name, tasks[0].CreatedBy);
Current position
// Get the current flange position of the first robot in world coordinatesCartesianJointPosition position = controller.Soap.GetCurrentCartesianJointPosition(robot: 0, tool: null, frame: null);double[] jointPosition1 = position.JointsPosition; // Joint position in radiansCartesianPosition cartesianPosition = position.CartesianPosition;Console.WriteLine($"X: {cartesianPosition.X}, Y: {cartesianPosition.Y}, Z: {cartesianPosition.Z}");Console.WriteLine($"Rx: {cartesianPosition.Rx}, Ry: {cartesianPosition.Ry}, Rz: {cartesianPosition.Rz}");// ---------------// Get only the current joint position of the first robotdouble[] jointPosition2 = controller.Soap.GetCurrentJointPosition(robot: 0);// ---------------// Get the joint ranges (min/max angle of each joint)controller.Soap.GetJointRange(robot: 0);
Calculate the Cartesian position from the angles of the joints and vice versa.
// Get forward kinematicsIForwardKinematics fk = controller.Soap.ForwardKinematics(robot: 0, // Index of the robot (0 for the first robot)joints // double[] of joint positions in radians);// Position matrixFrame position = fk.Position;// Position configurationConfig config = fk.Config; // i.e. Righty/Lefty, Elbow Positive/Negtive, ...// -----------------// Get inverse kinematicsIReverseKinematics ik = controller.Soap.ReverseKinematics(robot: 0, // Index of the robot (0 for the first robot)joints,position,config,range);if (ik.Result == ReversingResult.Success)foreach (double joint in ik.Joint) Console.WriteLine(joint);
Information
Robot[] robots = controller.Soap.GetRobots(); // Get all robots driven by the controllerforeach (var robot in robots){Console.WriteLine($"Arm: {robot.Arm}"); // i.e. TX2-140Console.WriteLine($"Mount type: {robot.MountType}"); // i.e. Floor, Ceiling, WallConsole.WriteLine($"Kinematic: {robot.Kinematic}"); // i.e. ANTHROPOMORPH6, SCARA, ...// see Robot class for more properties}// ---------------Parameter[] controllerParams = controller.Soap.GetControllerParameters(); // Get controller parametersforeach (var param in controllerParams)Console.WriteLine($"{param.Name} = {param.Value}"); // i.e. CycleTime = 0.004s// ---------------DhParameters[] dhParameters = controller.Soap.GetDhParameters(robot: 0); // Get DH parameters of the first robotforeach (var dh in dhParameters)Console.WriteLine($"{dh.Alpha} - {dh.Beta} - {dh.Theta} - {dh.A} - {dh.D}");
Inputs / Outputs
// Get all physical I/O ports of the controllerPhysicalIo[] ios = controller.Soap.GetAllPhysicalIos();foreach (var io in ios){Console.WriteLine($"Name: {io.Name}");Console.WriteLine($"Type: {io.Description}");Console.WriteLine($"Lockable: {io.Lockable}"); // i.e. true, falseConsole.WriteLine($"Description: {io.TypeStr}"); // i.e. din, dout, ain, serial}// -----------------// Read I/Os valuePhysicalIoState[] values = controller.Soap.ReadIos(new[] { @"Socket\test", @"Serial\0", @"FastIO\fOut1", @"CpuUsage\val3" });foreach (var value in values){Console.WriteLine("Value: " + value.Value);Console.WriteLine("Locked: " + value.Locked);Console.WriteLine("Simulated: " + value.Simulated);}// -----------------// Write I/Os valuePhysicalIoWriteResponse[] response = controller.Soap.WriteIos(new[] { "my_io_1", "my_io_2" }, new double[] { 1.0, 0.0 });foreach (var res in response)Console.WriteLine($"Success: {res.Success} - Found: {res.Found}");
Browse the documentation
Download and test

Allows you to test all the features of the SDK with a simple interface. The example is compiled in "self contained" and "single file" with .NET 8. The application is portable without installation.
See terms and conditions
Request a quote and order
Pricing
Libraries can be downloaded for free and can be tested for 30 days. After this period, you can ask us to extend the trial period, or buy the license that suits you best: site (obscured binary only) or source (source code). After purchasing, you have a one -year maintenance period, giving you priority access to the support and the possibility of updating. When you buy a license to use, it is linked to a robot brand, you can use it forever, without recurring fee, regardless of the number of robot, developer or software that you redistribute to your customers. If you are a distributor and wish to offer your customers one of our products, please contact us to discuss special conditions and prices.