<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.cpr-robots.com/index.php?action=history&amp;feed=atom&amp;title=Singularities_and_Kinematic_Limits</id>
	<title>Singularities and Kinematic Limits - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.cpr-robots.com/index.php?action=history&amp;feed=atom&amp;title=Singularities_and_Kinematic_Limits"/>
	<link rel="alternate" type="text/html" href="https://wiki.cpr-robots.com/index.php?title=Singularities_and_Kinematic_Limits&amp;action=history"/>
	<updated>2026-05-18T07:49:45Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.44.0</generator>
	<entry>
		<id>https://wiki.cpr-robots.com/index.php?title=Singularities_and_Kinematic_Limits&amp;diff=917&amp;oldid=prev</id>
		<title>OLT at 08:27, 26 March 2026</title>
		<link rel="alternate" type="text/html" href="https://wiki.cpr-robots.com/index.php?title=Singularities_and_Kinematic_Limits&amp;diff=917&amp;oldid=prev"/>
		<updated>2026-03-26T08:27:56Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 08:27, 26 March 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l181&quot;&gt;Line 181:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 181:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Use joint motion if you need to move through the singularity.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Use joint motion if you need to move through the singularity.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:CPRog]][[Category:TinyCtrl]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:CPRog]][[Category:TinyCtrl&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;]][[Category:Gantry]][[Category:Rebel]][[Category:Scara&lt;/ins&gt;]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>OLT</name></author>
	</entry>
	<entry>
		<id>https://wiki.cpr-robots.com/index.php?title=Singularities_and_Kinematic_Limits&amp;diff=140&amp;oldid=prev</id>
		<title>OLT: 1 revision imported</title>
		<link rel="alternate" type="text/html" href="https://wiki.cpr-robots.com/index.php?title=Singularities_and_Kinematic_Limits&amp;diff=140&amp;oldid=prev"/>
		<updated>2025-08-11T10:13:21Z</updated>

		<summary type="html">&lt;p&gt;1 revision imported&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 10:13, 11 August 2025&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>OLT</name></author>
	</entry>
	<entry>
		<id>https://wiki.cpr-robots.com/index.php?title=Singularities_and_Kinematic_Limits&amp;diff=139&amp;oldid=prev</id>
		<title>cpr&gt;Mab at 11:08, 25 June 2025</title>
		<link rel="alternate" type="text/html" href="https://wiki.cpr-robots.com/index.php?title=Singularities_and_Kinematic_Limits&amp;diff=139&amp;oldid=prev"/>
		<updated>2025-06-25T11:08:40Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Due to mechanical and mathematical limitations there are positions in cartesian (XYZ) space that a robot can not move to. These are called singularities and kinematic limits. Kinematic limits occur both in joint and cartesian motion mode while singularities only occur in cartesian mode.&lt;br /&gt;
&lt;br /&gt;
In a more specific, mathematical sense singularities are positions in which the robots configuration (i.e. in what direction do the joints point) is ambiguous. Inside the singularity the robot can not tell what orientation is needed. At a close range around the singularity the axis configuration may need to change quickly (e.g. the tool center point moves a short distance past the singularity but requires the actual joints to move up to 180°). This fast motion can be dangerous or even impossible by the joints to do.&lt;br /&gt;
&lt;br /&gt;
= Symptoms =&lt;br /&gt;
&lt;br /&gt;
If a singularity or kinematic error occurs while jogging the status area at the left side of iRC shows which error occured. If it happens during program execution the program is stopped or paused and a message box appears in iRC. Try to find which motion command caused it and choose a different target position. If the position is variable (e.g. coming from a camera) check the position data source and limit the value range it provides.&lt;br /&gt;
&lt;br /&gt;
= Kinematic Errors =&lt;br /&gt;
The following kinematic error codes may be shown by the robot. Find explanations and solutions in the sections below.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Code !! Description !! Hints&lt;br /&gt;
|-&lt;br /&gt;
|0 || No error ||&lt;br /&gt;
|-&lt;br /&gt;
| -1 || General error || unknown cause, check log files&lt;br /&gt;
|-&lt;br /&gt;
|12 || Linkage limited || delta robot rod joints reached their angular limit&lt;br /&gt;
|-&lt;br /&gt;
|13 || Joint limit min reached || an axis reached it&amp;#039;s lower limit&lt;br /&gt;
|-&lt;br /&gt;
|14 || Joint limit max reached || an axis reached it&amp;#039;s upper limit&lt;br /&gt;
|-&lt;br /&gt;
|19 || Rollover || do not use cartesian motion if a rotational axis is outside +/-179° range&lt;br /&gt;
|-&lt;br /&gt;
|21 || Center singularity || robot arm is too close to vertical center axis, change to joint motion&lt;br /&gt;
|-&lt;br /&gt;
|22 || Out of reach || cartesian position can not be reached, try joint motion&lt;br /&gt;
|-&lt;br /&gt;
|23 || Wrist singularity || wrist joint of 6 axis arm can not be extended completely in cartesian mode, change to joint motion&lt;br /&gt;
|-&lt;br /&gt;
|24 || Out of working space || the robot was moved out of the working space as specified by the data sheet&lt;br /&gt;
|-&lt;br /&gt;
|25 || Generic singularity || during cartesian motion two joints aligned, use joint motion&lt;br /&gt;
|-&lt;br /&gt;
|28 || Trilateration error || No mathematical solution for the position was found. Try re-referencing, a different target position or joint motion&lt;br /&gt;
|-&lt;br /&gt;
|30 || Virtual box violated in X+ || reached virtual box max X position&lt;br /&gt;
|-&lt;br /&gt;
|31 || Virtual box violated in X- || reached virtual box min X position&lt;br /&gt;
|-&lt;br /&gt;
|32 || Virtual box violated in Y+ || reached virtual box max Y position&lt;br /&gt;
|-&lt;br /&gt;
|33 || Virtual box violated in Y- || reached virtual box min Y position&lt;br /&gt;
|-&lt;br /&gt;
|34 || Virtual box violated in Z+ || reached virtual box max Z position&lt;br /&gt;
|-&lt;br /&gt;
|35 || Virtual box violated in Z- || reached virtual box min Z position&lt;br /&gt;
|-&lt;br /&gt;
|50 || NAN value in joint position || a mathematical error occured, contact support&lt;br /&gt;
|-&lt;br /&gt;
|51 || Velocity limit exceeded || decrease the motion speed&lt;br /&gt;
|-&lt;br /&gt;
|61 || Variable not found || variables must be defined, e.g. using a Store command, before they can be used in a robot program&lt;br /&gt;
|-&lt;br /&gt;
|98 || Brake active || release e-stop and enable the motors, make sure the brake output is set low&lt;br /&gt;
|-&lt;br /&gt;
|99 || Motion not allowed || a hardware error occured&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[File:JointLimitMax.PNG|thumb|&amp;#039;&amp;#039;&amp;#039;Joint limit reached&amp;#039;&amp;#039;&amp;#039;: In this example A3 reached its limit.]]&lt;br /&gt;
[[File:OutOfReach.PNG|thumb|&amp;#039;&amp;#039;&amp;#039;Out of reach&amp;#039;&amp;#039;&amp;#039;: This robot is can not move further in Y without changing the orientation of the tool.]]&lt;br /&gt;
[[File:MotionNotAllowed.PNG|thumb|&amp;#039;&amp;#039;&amp;#039;Motion not allowed&amp;#039;&amp;#039;&amp;#039;: This robot can not move since its motors are not enabled.]]&lt;br /&gt;
&lt;br /&gt;
== General error ==&lt;br /&gt;
An unknown error occured.&lt;br /&gt;
&lt;br /&gt;
Solutions:&lt;br /&gt;
* Check the log files of the robot control (see the log tabs below the 3D view)&lt;br /&gt;
* Load the [[Log Files|log files]] from the robot and [[Support Routes|contact support]].&lt;br /&gt;
&lt;br /&gt;
== Linkage Limited ==&lt;br /&gt;
This error may occur on delta robots if the maximum angle of the ball joints is exceeded. This may decrease precision or cause other mechanical issues.&lt;br /&gt;
&lt;br /&gt;
Solutions:&lt;br /&gt;
* Limit the motion to the range defined by the data sheet (this should be the case in the standard configuration)&lt;br /&gt;
&lt;br /&gt;
== Joint limit min/max reached ==&lt;br /&gt;
This kinematic error occurs when an axis tries to move past its upper or lower limit.&lt;br /&gt;
&lt;br /&gt;
Solutions:&lt;br /&gt;
* Reference the axis - this resets the axis position if it is incorrect&lt;br /&gt;
* Jog the axis towards the valid range in joint mode (this is always allowed by the robot control but moving further away is not)&lt;br /&gt;
&lt;br /&gt;
== Rollover ==&lt;br /&gt;
This error occurs when an axis tries to move further than 90° within a single cycle (10 or 20ms). This is generally caused by a mathematical reason. Without the rollover error the axis would either jerk unexpectedly or trigger a hardware error like overcurrent.&lt;br /&gt;
&lt;br /&gt;
Generally this happens when you move a rotational axis outside the +/-180° range and switch to cartesian motion (linear, circle) there. The ABC rotation of the kinematics is limited to +/-180°, so it will calculate a correct ABC rotation - but the robot axis position will be off by one or more full rotations of the axis. This is a limitation caused by the basic mathematic trigonometry functions, e.g. sine and tangent, which can not distinguish between e.g. +181° and -179°.&lt;br /&gt;
&lt;br /&gt;
Solutions:&lt;br /&gt;
* Move in joint mode, here the error should not occur&lt;br /&gt;
* If you must move in cartesian mode first move the axis back to a valid position using joint motion.&lt;br /&gt;
&lt;br /&gt;
== Out of reach ==&lt;br /&gt;
The out of reach error is similar to the joint limits but in cartesian space. To reach the requested position the robot would need to extend further than it is able to.&lt;br /&gt;
&lt;br /&gt;
Generally this error occurs shortly before the arm is completely stretched out (you can move further with joint motion). This is because the mathematical solutions are ambiguous here - when moving the arm back from a completely strectched out pose the wrist can bend in any direction, to the robot it is unclear which is required by the following motion.&lt;br /&gt;
&lt;br /&gt;
Solutions:&lt;br /&gt;
* Choose a target position closer to the center of the robot&lt;br /&gt;
* Use joint motion&lt;br /&gt;
&lt;br /&gt;
== Virtual box violated ==&lt;br /&gt;
If you have configured a virtual box in cartesian space the robot control will prevent motions ourside that box.&lt;br /&gt;
&lt;br /&gt;
Solutions:&lt;br /&gt;
* Jog towards the valid area in joint mode&lt;br /&gt;
&lt;br /&gt;
== Out of Working Space ==&lt;br /&gt;
Some robots, e.g. deltas, are only usable in a limited motion range due to their construction. While their joints may be able to move further issues like worse precision may occur.&lt;br /&gt;
&lt;br /&gt;
This kinematic error is similar to the virtual box, motions outside the specified working space are prevented but if outside you are able to move the robot towards the valid area.&lt;br /&gt;
&lt;br /&gt;
Solutions:&lt;br /&gt;
* Use joint motion to move back to the valid motion range (see the data sheet)&lt;br /&gt;
&lt;br /&gt;
== Trilateration error ==&lt;br /&gt;
This error occurs if no mathematical solution for the cartesian target position could be found that can be reached by the joints. In practice it should never occur.&lt;br /&gt;
&lt;br /&gt;
== NAN value in joint position ==&lt;br /&gt;
This error should never occur and may be caused by a software error.&lt;br /&gt;
&lt;br /&gt;
Solutions:&lt;br /&gt;
* Please load the [[Log Files|log files]] from the robot and [[Support Routes|contact support]].&lt;br /&gt;
&lt;br /&gt;
== Velocity limit exceeded ==&lt;br /&gt;
This error occurs when trying to move too fast.&lt;br /&gt;
&lt;br /&gt;
Solutions:&lt;br /&gt;
* Decrease motion speed, e.g. via the velocity override above the 3D view or by lowering the speed of the failing motion command in your program&lt;br /&gt;
&lt;br /&gt;
== Variable not found ==&lt;br /&gt;
This error occurs when a robot program command tries to access a variable that is not defined.&lt;br /&gt;
&lt;br /&gt;
Solutions:&lt;br /&gt;
* Call the &amp;quot;Store&amp;quot; command to define the variable before accessing it&lt;br /&gt;
* Double check the variable names in your program for typos.&lt;br /&gt;
&lt;br /&gt;
== Brake active ==&lt;br /&gt;
The motor brake is active, therefore motion is prevented.&lt;br /&gt;
&lt;br /&gt;
This error only occurs for robots with a brake controlled via IO module, not for BLDC controls where the axis modules control the brake(s) automatically.&lt;br /&gt;
&lt;br /&gt;
Solutions:&lt;br /&gt;
* Release e-stop and enable the motors&lt;br /&gt;
* If there is no brake connected to the IO module disable the brake in &amp;quot;File&amp;quot; -&amp;gt; &amp;quot;Configure Robot&amp;quot; -&amp;gt; &amp;quot;Brake&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Motion not allowed ==&lt;br /&gt;
This kinematic error is shown when some other reason prevents motion. Usually this refers to a [[Error Codes|hardware error]].&lt;br /&gt;
&lt;br /&gt;
Solutions:&lt;br /&gt;
* Check the [[Error Codes|hardware error code]] and resolve it.&lt;br /&gt;
&lt;br /&gt;
= Singularities =&lt;br /&gt;
[[File:CenterSingularity.PNG|thumb|&amp;#039;&amp;#039;&amp;#039;Center singularity&amp;#039;&amp;#039;&amp;#039;: The tool center point is aligned with the center (A1) axis.]]&lt;br /&gt;
[[File:WristSingularity.PNG|thumb|&amp;#039;&amp;#039;&amp;#039;Wrist singularity&amp;#039;&amp;#039;&amp;#039;: The wrist axes (A4-A6) are aligned.]]&lt;br /&gt;
[[File:NoSingularity.PNG|thumb|To prevent singularities use joint motion to move away from the center and turn A4 and A5 by some degrees.]]&lt;br /&gt;
&lt;br /&gt;
== Center singularity ==&lt;br /&gt;
The center singularity occurs in robot arms that can turn around a center axis (joint 1) if the tool center point (TCP) is too close to this axis (e.g. the robot arm is extended straight up).&lt;br /&gt;
&lt;br /&gt;
Solutions:&lt;br /&gt;
* Before switching to cartesian mode jog the robot away from the center axis.&lt;br /&gt;
* Start your robot program with a joint motion away from the center axis.&lt;br /&gt;
&lt;br /&gt;
== Wrist singularity ==&lt;br /&gt;
This singularity is specific to 6 axis robots. Similar to the center singularity it occurs when A4 - A6 align.&lt;br /&gt;
&lt;br /&gt;
Solutions:&lt;br /&gt;
* Before switching to cartesian mode turn A4 and A5 so that the wrist no longer aligns.&lt;br /&gt;
* Start your robot program with a joint motion that moves A4 and A5 to a position other than 0.&lt;br /&gt;
&lt;br /&gt;
== Generic singularity ==&lt;br /&gt;
This is a singularity without a specific name. It may occur in cartesian mode if two or more axes are aligned.&lt;br /&gt;
&lt;br /&gt;
Currently it only occurs for SCARA robots if A3 is pointing towards the A2 axis.&lt;br /&gt;
&lt;br /&gt;
Solutions:&lt;br /&gt;
* Use joint motion if you need to move through the singularity.&lt;br /&gt;
&lt;br /&gt;
[[Category:CPRog]][[Category:TinyCtrl]]&lt;/div&gt;</summary>
		<author><name>cpr&gt;Mab</name></author>
	</entry>
</feed>