Burst-compiled inverse kinematics calculator for 6-axis robots. More...
Public Member Functions | |
| void | Execute () |
Public Attributes | |
| double | alpha1 |
| double | alpha2 |
| double | b |
| double | c1 |
| double | c2 |
| double | c3 |
| double | c4 |
| bool | ElbowInUnityX |
| float3 | position |
| quaternion | rotation |
| float3 | ToolOffset |
| int | numMirrorSeeds |
| Number of mirrored seeds to generate (0 or 8) | |
| int | numHaltonSeeds |
| Number of Halton seeds to generate (0..K) | |
| int | totalSeedCount |
| Total seeds = 8 + numMirrorSeeds + numHaltonSeeds. | |
| float | haltonMin0 |
| float | haltonMax0 |
| float | haltonMin1 |
| float | haltonMax1 |
| float | haltonMin2 |
| float | haltonMax2 |
| float | haltonMin3 |
| float | haltonMax3 |
| float | haltonMin4 |
| float | haltonMax4 |
| float | haltonMin5 |
| float | haltonMax5 |
| NativeArray< float > | iksolution |
| NativeArray< bool > | notreachable |
| bool | isNonSphericalWrist |
| Enable Newton-Raphson refinement for non-spherical wrist cobots. | |
| int | nrMaxIterations |
| Maximum Newton-Raphson iterations (default 100) | |
| float | nrTolerance |
| Position tolerance in meters for NR convergence (default 0.00001 = 0.01mm) | |
| float | nrDamping |
| DLS damping factor lambda (default 0.01) | |
| float | nrAngularWeight |
| Weight for orientation vs position in NR solver (default 1.0 = balanced) | |
| float | nrOrientationTolerance |
| Orientation convergence tolerance in radians (default 0.01 = 0.57 deg) | |
| bool | hasWarmStart |
| False on first frame, true after first successful solve. | |
| float | warmJ0 |
| float | warmJ1 |
| float | warmJ2 |
| float | warmJ3 |
| float | warmJ4 |
| float | warmJ5 |
| Previous frame joint angles for warm-start. | |
| bool | enableDiagnostics |
| Enable storing diagnostic data for logging. | |
| NativeArray< float > | diagData |
| [sol*100 + iter*5 + {0:posErr, 1:oriErr, 2:stepNorm, 3:iterCount, 4:converged}] | |
| float3 | axisHomePos0 |
| float3 | axisHomePos1 |
| float3 | axisHomePos2 |
| float3 | axisHomePos3 |
| float3 | axisHomePos4 |
| float3 | axisHomePos5 |
| quaternion | axisHomeRot0 |
| quaternion | axisHomeRot1 |
| quaternion | axisHomeRot2 |
| quaternion | axisHomeRot3 |
| quaternion | axisHomeRot4 |
| quaternion | axisHomeRot5 |
| float3 | axisDir0 |
| float3 | axisDir1 |
| float3 | axisDir2 |
| float3 | axisDir3 |
| float3 | axisDir4 |
| float3 | axisDir5 |
| float3 | tcpLocalOffset |
| quaternion | tcpLocalRot |
Detailed Description
Burst-compiled inverse kinematics calculator for 6-axis robots.
Calculates IK solutions using the Pieper analytical method with optional mirrored and Halton seeds. SIMD-optimized math operations via Unity.Mathematics. For robots with non-spherical wrists (e.g. cobots like FANUC CRX), the Pieper solution is refined using Newton-Raphson iterations with a numerical Jacobian.
Key Features:
- Analytical Pieper method for standard spherical wrist robots (exact) — 8 base seeds
- Mirrored seeds: ±90° wrist variants of the 4 Pieper base seeds — up to 8 additional seeds
- Halton low-discrepancy seeds with joint-midpoint Gaussian bias — up to K additional seeds
- Pieper + Newton-Raphson refinement for non-spherical cobots (iterative correction)
- Per-axis home transforms passed as flat fields for Burst-compatible FK computation
- Zero GC allocations inside Burst job
For detailed documentation see: https://doc.realvirtual.io/components-and-scripts/motion/robot-inverse-kinematics
Member Data Documentation
◆ diagData
| NativeArray<float> realvirtual.IKCalculatorJob.diagData |
[sol*100 + iter*5 + {0:posErr, 1:oriErr, 2:stepNorm, 3:iterCount, 4:converged}]
◆ enableDiagnostics
| bool realvirtual.IKCalculatorJob.enableDiagnostics |
Enable storing diagnostic data for logging.
◆ hasWarmStart
| bool realvirtual.IKCalculatorJob.hasWarmStart |
False on first frame, true after first successful solve.
◆ isNonSphericalWrist
| bool realvirtual.IKCalculatorJob.isNonSphericalWrist |
Enable Newton-Raphson refinement for non-spherical wrist cobots.
◆ nrAngularWeight
| float realvirtual.IKCalculatorJob.nrAngularWeight |
Weight for orientation vs position in NR solver (default 1.0 = balanced)
◆ nrDamping
| float realvirtual.IKCalculatorJob.nrDamping |
DLS damping factor lambda (default 0.01)
◆ nrMaxIterations
| int realvirtual.IKCalculatorJob.nrMaxIterations |
Maximum Newton-Raphson iterations (default 100)
◆ nrOrientationTolerance
| float realvirtual.IKCalculatorJob.nrOrientationTolerance |
Orientation convergence tolerance in radians (default 0.01 = 0.57 deg)
◆ nrTolerance
| float realvirtual.IKCalculatorJob.nrTolerance |
Position tolerance in meters for NR convergence (default 0.00001 = 0.01mm)
◆ numHaltonSeeds
| int realvirtual.IKCalculatorJob.numHaltonSeeds |
Number of Halton seeds to generate (0..K)
◆ numMirrorSeeds
| int realvirtual.IKCalculatorJob.numMirrorSeeds |
Number of mirrored seeds to generate (0 or 8)
◆ totalSeedCount
| int realvirtual.IKCalculatorJob.totalSeedCount |
Total seeds = 8 + numMirrorSeeds + numHaltonSeeds.
◆ warmJ5
| float realvirtual.IKCalculatorJob.warmJ5 |
Previous frame joint angles for warm-start.