Skip to content

RobotComponents/WristyTwistySolver

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

53 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Wristy Twisty Solver

DOI

The Wristy Twisty Solver is an open-source kinematics tool designed for 6-DOF robots with a wrist offset, such as the ABB GoFa series and Yaskawa Motoman. It is initially developed for the open-source Rhinoceros Grasshopper plugin Robot Components. Unlike numerical solvers that prioritize the closest configuration to the current pose, this solver computes all possible poses for a given end-effector position, including the singularity positions, making it ideal for offline programming environments. The solver is based on the principles and work of Trinh et al. (2015) but follows the notations and part of the solution from the OPW kinematics solver by Brandstötter et al. (2014).

Demonstration

Click the image below to watch a demonstration of the ABB GoFa series integration within the Rhinoceros Grasshopper plugin, Robot Components:

Robot parameters

The kinematics solver relies on specific geometric parameters, following the model introduced by Brandstötter et al. (2014). These parameters include the shoulder offset $a_1$, the elbow offset $a_2$, the lateral offset $b$, and the link lengths $c_1$, $c_2$, $c_3$ and $c_4$​, as outlined in Brandstötter et al. (2014). The Wristy Twisty solver additionally uses the parameter $a_3$ that indicates the wrist offset. The table below provides practical examples of the robot kinematics parameters for different brands and types in mm.

Robot type $a_1$ $a_2$ $a_3$ $b$ $c_1$ $c_2$ $c_3$ $c_4$
ABB GoFa 5 0 -110 -80 0 265 444 470 101
ABB GoFa 10 150 -110 -80 0 400 707 637 101
ABB GoFa 12 0 -110 -80 0 338 707 534 101
Yaskawa Motoman MA1400 150 -200 -30 0 450 614 640 200
Yaskawa Motoman MA1800 150 -220 -45 0 555 760 870 185
Yaskawa Motoman MA1900 150 -220 -30 0 505 760 970 200

Development status

Wristy Twisty Solver is currently in development. This repository contains code for the .NET implementation and Python implementation. Both are fully functional, however, the Python implementation is slow and purely meant for testing and educational purposes. A C++ version including Python bindings is currently in development. Additionally, the documentation of the inverse and forward kinematics solution (mathematical notation with explanation) is in development and will be added later. For now, users are referred to the two papers mentioned in this README for details.

Practicalities

The kinematics class provides two distinct properties containing the inverse kinematics solutions. The number of solutions depends on the given endplane, ranging from a minimum of 8 to a maximum of 16.

Background

The solver always computes 8 solutions, consistent with the OPW kinematics solver for spherical wrist robots, as developed by Brandstötter et al. (2014). However, when the rotation of joint 5 is near 0 or 180 degrees, the solver identifies two additional inverse kinematics solutions. In traditional spherical wrist robots, a joint 5 position of exactly 0 or 180 degrees represents a wrist singularity. Due to the wrist offset, this singularity position no longer exists precisely at these angles. Instead, near these positions, two additional solutions emerge when the robot transitions between configurations. This means the robot’s endplane can traverse via a limited number of distinct paths when moving from one configuration to another, rather than the infinite solutions found in traditional spherical wrist robots. This behavior classifies the offset wrist robot as a cuspidal robot.

For the ABB GoFa series, when 4 solutions are found for a given set of equations, the ABB controller may still raise a wrist singularity error. Since the 8 "main" solutions (similar to the OPW kinematics solver) are typically the most important, the class provides two properties:

  • Solutions: Contains the sorted 8 main solutions.
  • Solutions2: Contains all found solutions.

Main Solutions

The 8 main solutions are filtered and ordered as follows:

Solution Wrist center (relative to axis 1) Wrist center (relative to lower arm) Angle joint 5
0 In front of In front of $\theta_{5;0} > \theta_{5;4}$
1 In front of Behind $\theta_{5;1} > \theta_{5;5}$
2 Behind In front of $\theta_{5;2} > \theta_{5;6}$
3 Behind Behind $\theta_{5;3} > \theta_{5;7}$
4 In front of In front of $\theta_{5;0} < \theta_{5;4}$
5 In front of Behind $\theta_{5;1} < \theta_{5;5}$
6 Behind In front of $\theta_{5;2} < \theta_{5;6}$
7 Behind Behind $\theta_{5;3} < \theta_{5;7}$

These solutions are accessible via the Solutions property, which is an array containing the joint positions. The presence of shoulder, elbow, and wrist singularities is indicated in the corresponding boolean arrays IsShoulderSingularity, IsElbowSingularity, and IsWristSingularity. If a wrist singularity is detected, it indicates that 4 sub-solutions are found instead of 2.

All Solutions

In addition to the 8 main solutions, all solutions are provided in the Solutions2 property. The singularities for these solutions are indicated in the respective properties ending with 2 (e.g., IsWristSingularity2).

Important notes:

  • The Solutions2 property is an array of length 16, but this does not imply that 16 solutions are always found. The actual number of solutions is provided by the NumSolutions2 property.
  • The solutions in Solutions2 are not ordered in any specific way; they are listed in the order they were found by the solver.

Compatibility

The kinematics solver is based on the algorithm developed by Brandstötter et al. (2014) and implemented in C++ by Jonathan Meyer. Known as the OPW Kinematics solver, this implementation has been integrated into numerous software packages.

The solver's API design reflects elements of Meyer's solution, offering flexibility in defining joint signs and offsets for various robotic arm brands. The 8 main solutions are ordered in the same way to ensure compatibility and ease of integration with existing systems. This compatibility ensures that the solver can be easily adapted to different robotic platforms and software ecosystems.

Contributing

Thank you for considering contributing to Wristy Twisty Solver! Your contributions help make this project better for everyone. Before you start contributing, please take a moment to read the following guidelines.

If you're considering making a contribution or have questions about the project, please contact me beforehand to discuss your ideas. This helps avoid misunderstandings and ensures your contributions align with the project's goals.

Cite

Wristy Twisty Solver is a free-to-use software package, and we kindly ask you to cite it if used. By citing the software, you recognize the work that went into its development and allow us to track its usage. More importantly, citing the software and providing details on the tools used ensures that results can be reproduced. See How to cite and describe software for more details and an in-depth discussion.

For general references to this software package, the Zenodo record can be cited. The BibTeX entry is provided below:

@misc{WristyTwisty_Zenodo,
    author = {A. Deetman},
    title = {{W}risty {T}wisty {S}olver: {A}n open-source kinematics solver for {6R} robots with wrist offset},
    publisher = {Zenodo},
    year = {2026},
    doi = {10.5281/zenodo.19132741},
    note = {Zenodo. doi:10.5281/zenodo.19132741}
}

On the Zenodo page, you can find how to cite specific versions of the software.

Credits

Arjen logo The Computational Hive logo

Wristy Twisty solver is an open-source project initiated and developed by Arjen Deetman and supported by The Computational Hive. The solver is based on the kinematics principles from Trinh et al. (2015) and the analytical solution framework of the OPW kinematics solver from Brandstötter et al. (2014).

References

Brandstötter, Mathias & Angerer, Arthur & Hofbaur, Michael. (2014). An Analytical Solution of the Inverse Kinematics Problem of Industrial Serial Manipulators with an Ortho-parallel Basis and a Spherical Wrist.

Trinh, Duc-Cuong & Zlatanov, Dimiter & Zoppi, Matteo & Molfino, Rezia. (2015). A Geometrical Approach to the Inverse Kinematics of 6R Serial Robots With Offset Wrists. 10.1115/DETC2015-47950.

Meyer, Jonathan. (2017-2025). OPW Kinematics: Closed form IK for parallel base, spherical wrist industrial manipulators

License

Copyright (c) 2024-2026 Arjen Deetman

Wristy Twisty Solver is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 3.0 as published by the Free Software Foundation.

Wristy Twisty Solver is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with Wristy Twisty Solver; If not, see http://www.gnu.org/licenses/.

@license GPL-3.0 https://www.gnu.org/licenses/gpl-3.0.html

Sponsor this project

  •  

Packages

 
 
 

Contributors