UnderAutomation
Any question?

[email protected]

Contact us
UnderAutomation
⌘Q

Staubli SDK

GitHub stars
300 (EUR)350 (USD)

$

350

lifetime

$

210

for universities (40% discount)

Quickly create .NET applications that communicate with your Staubli industrial robot.

Choose the right license for your project
OrderRequest a quote

.NET

Python

LabVIEW

See terms and conditions
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

  1. Staubli SDK Features: SOAP Protocol for CS8 & CS9

    Moving the robot

    Powering remotely and sending of joint movement commands or Cartesian coordinates.
    position.Px += 0.1; // Move 10 cm in X direction
    Frame position2 = new Frame(); // fake position for circular move example
    // Power on the controller
    PowerReturnCode powerOnStatus = controller.Soap.SetPower(power: true);
    // Move linear to cartesian position
    IMoveResult moveLResult = controller.Soap.MoveL(
    robot: 0,
    position,
    motionDesc
    );
    // Move joints to cartesian position
    IMoveResult moveJCResult = controller.Soap.MoveJC(
    robot: 0,
    position,
    motionDesc
    );
    // Move joints to joint position
    IMoveResult moveJResult = controller.Soap.MoveJJ(
    robot: 0,
    joints,
    motionDesc
    );
    // Move Circular
    IMoveResult moveCResult = controller.Soap.MoveC(
    robot: 0,
    position,
    position2,
    motionDesc
    );
    // Stop motion
    MotionReturnCode stopStatus = controller.Soap.StopMotion();
    // Reset motion
    MotionReturnCode resetStatus = controller.Soap.ResetMotion();
    // Restart motion
    MotionReturnCode restartStatus = controller.Soap.RestartMotion();
    }
    }
    Click to see the full code

    Handling applications

    Load, start, stop, pause and supervise the execution of tasks.
    StaubliController controller = new StaubliController();
    var parameters = new ConnectionParameters("192.168.0.1");
    // Load project from disk
    controller.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 applications
    controller.Soap.StopAndUnloadAll();
    // Stop running application
    controller.Soap.StopApplication();
    // Get tasks
    ControllerTask[] tasks = controller.Soap.GetTasks(); // Get all tasks
    foreach (var task in tasks)
    {
    Console.WriteLine($"Task: {task.Name}");
    Console.WriteLine($"reated by: {task.CreatedBy}"); // i.e. Disk://myProject/myProject.pjx
    Console.WriteLine($"Line: {task.ProgramLine}");
    Console.WriteLine($"State: {task.State}");
    }
    // Kill task
    controller.Soap.TaskKill(tasks[0].Name, tasks[0].CreatedBy);
    // Suspend task
    controller.Soap.TaskSuspend(tasks[0].Name, tasks[0].CreatedBy);
    // Resume task
    controller.Soap.TaskResume(tasks[0].Name, tasks[0].CreatedBy);
    }
    }
    Click to see the full code

    Current position

    Obtain the robot's current position, including Cartesian coordinates and joint angles.
    StaubliController controller = new StaubliController();
    var parameters = new ConnectionParameters("192.168.0.1");
    // Get the current flange position of the first robot in world coordinates
    CartesianJointPosition position = controller.Soap.GetCurrentCartesianJointPosition(robot: 0, tool: null, frame: null);
    double[] jointPosition1 = position.JointsPosition; // Joint position in radians
    CartesianPosition 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 robot
    double[] jointPosition2 = controller.Soap.GetCurrentJointPosition(robot: 0);
    // ---------------
    // Get the joint ranges (min/max angle of each joint)
    controller.Soap.GetJointRange(robot: 0);
    }
    }
    Click to see the full code

    Calculate the Cartesian position from the angles of the joints and vice versa.

    Calculate the Cartesian position from the angles of the joints and vice versa.
    double[] joints = controller.Soap.GetCurrentJointPosition(robot: 0);
    JointRange range = controller.Soap.GetJointRange(robot: 0);
    // Get forward kinematics
    IForwardKinematics fk = controller.Soap.ForwardKinematics(
    robot: 0, // Index of the robot (0 for the first robot)
    joints // double[] of joint positions in radians
    );
    // Position matrix
    Frame position = fk.Position;
    // Position configuration
    Config config = fk.Config; // i.e. Righty/Lefty, Elbow Positive/Negtive, ...
    // -----------------
    // Get inverse kinematics
    IReverseKinematics 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);
    }
    }
    Click to see the full code

    Information

    Get controller and controlled robot characteristics, including model, software version, power status and more.
    StaubliController controller = new StaubliController();
    var parameters = new ConnectionParameters("192.168.0.1");
    Robot[] robots = controller.Soap.GetRobots(); // Get all robots driven by the controller
    foreach (var robot in robots)
    {
    Console.WriteLine($"Arm: {robot.Arm}"); // i.e. TX2-140
    Console.WriteLine($"Mount type: {robot.MountType}"); // i.e. Floor, Ceiling, Wall
    Console.WriteLine($"Kinematic: {robot.Kinematic}"); // i.e. ANTHROPOMORPH6, SCARA, ...
    // see Robot class for more properties
    }
    // ---------------
    Parameter[] controllerParams = controller.Soap.GetControllerParameters(); // Get controller parameters
    foreach (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 robot
    foreach (var dh in dhParameters)
    Console.WriteLine($"{dh.Alpha} - {dh.Beta} - {dh.Theta} - {dh.A} - {dh.D}");
    }
    }
    Click to see the full code

    Inputs / Outputs

    List, read and write entries and outputs of the controller
    StaubliController controller = new StaubliController();
    var parameters = new ConnectionParameters("192.168.0.1");
    // Get all physical I/O ports of the controller
    PhysicalIo[] 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, false
    Console.WriteLine($"Description: {io.TypeStr}"); // i.e. din, dout, ain, serial
    }
    // -----------------
    // Read I/Os value
    PhysicalIoState[] 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 value
    PhysicalIoWriteResponse[] 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}");
    }
    }
    Click to see the full code
  2. Browse the documentation

    Browse the documentation

    The documentation allows you to quickly start developing with the library. The same functionality is available in all supported languages.

  3. Download and test

    Download via NUGET
    Download via NUGET

    Easily add this SDK to your Visual Studio project via the Nuget package manager.

    See on Nuget
    Examples on GitHub
    Examples on GitHub

    The sources of examples of use of this SDK are available on Github

    Windows application example
    Windows application example

    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.

    By downloading, you accept the general conditions of use:
    See terms and conditions
    UnderAutomation.Staubli.Showcase.Forms.exe (139 MB)
  4. 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: standard, pro or source. After purchasing, you have a maintenance period, giving you 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.

    Standard Site License

    300 (EUR)$350 (USD)

    $

    350

    lifetime

    $

    210

    for universities (40% discount)
    Designed for industrial environments, providing lifetime full-feature access.
    1 year maintenance included (access to updates)
    Same conditions as the Pro License, except that support is not prioritized and maintenance is 1 year.
    There are no internal sources; only the obfuscated DLL is provided.
    No assistance by videoconference (only via email).
    Buy now
    Most popular

    Pro License

    600 (EUR)$700 (USD)

    $

    700

    $1060
    lifetime

    $

    420

    for universities (40% discount)
    For critical production environments requiring priority support and longer-term maintenance.
    3 years maintenance included (access to updates) with no renewal orders during this term (zero paperwork)
    Complete and permanent SDK: no recurring subscription is required, the license is yours forever and works in all programming languages ​​for a robot brand.
    Can be used only by the organization holding the license, at the postal address indicated. All team developers will share the same license, regardless of the number of development machine.
    Any application developed using the SDK can be delivered to an unlimited number of your customers at no additional cost, regardless of the number of robots to connect.
    The license is a kind of password to call in the code that unlocks the features. No additional software to install. No USB key.
    Priority Support (<24h on average)
    Remote assistance (email and up to 2h videoconference)
    There are no internal sources; only the obfuscated DLL is provided.
    Upgrade to Source anytime (pay the difference)
    Buy now

    Source license

    1200 (EUR)$1400 (USD)

    $

    1400

    lifetime

    $

    840

    for universities (40% discount)
    For complete technical sovereignty, deep customization, and total independence.
    Same conditions as the pro license
    Complete internal code of the library in C#
    Visual Studio solution that includes thousands of lines of code developed over several years
    You can modify this source code and use it in your application, within the limits defined in the general terms of use
    Works seamlessly with AI coding agents (Claude, Copilot, Cursor, Codex...) thanks to full source code access and included context files (AGENTS.md) that give the LLM the exact knowledge of the SDK internals
    Buy now

Easily integrate Universal Robots, Fanuc, Yaskawa, ABB or Staubli robots into your .NET, Python, LabVIEW or Matlab applications

UnderAutomation
Contact usLegal

© All rights reserved.