-([1.5707381937148923, 2.999666997382943, 3.141539129217613], true)</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/ferrolho/ModernRoboticsBook.jl/blob/f92af23009fcf80e0ce40eba8c5e124715f86e72/src/inverse_kinematics.jl#LL3-L48">source</a></section></details></article><article><details class="docstring" open="true"><summary id="ModernRoboticsBook.inverse_kinematics_space-Tuple{AbstractMatrix, AbstractMatrix, AbstractMatrix, AbstractVector, Number, Number}"><a class="docstring-binding" href="#ModernRoboticsBook.inverse_kinematics_space-Tuple{AbstractMatrix, AbstractMatrix, AbstractMatrix, AbstractVector, Number, Number}"><code>ModernRoboticsBook.inverse_kinematics_space</code></a> — <span class="docstring-category">Method</span></summary><section><div><pre><code class="language-julia hljs">inverse_kinematics_space(screw_axes, home_ee_pose, target_config, initial_guess, angular_tolerance, linear_tolerance)</code></pre><p>Computes inverse kinematics in the space frame for an open chain robot using Newton-Raphson iteration.</p><div class="admonition is-info" id="Body-vs-space-IK-df5932e93831c6ad"><header class="admonition-header">Body vs space IK<a class="admonition-anchor" href="#Body-vs-space-IK-df5932e93831c6ad" title="Permalink"></a></header><div class="admonition-body"><p>This is the space-frame version of <a href="#ModernRoboticsBook.inverse_kinematics_body-Tuple{AbstractMatrix, AbstractMatrix, AbstractMatrix, AbstractVector, Number, Number}"><code>inverse_kinematics_body</code></a>. Both converge to the same solution; the difference is whether the error twist is computed in the body or space frame. The initial guess matters — the algorithm may converge to different solutions or fail to converge depending on the starting point.</p></div></div><p><strong>Arguments</strong></p><ul><li><code>screw_axes</code>: the joint screw axes <span>$S_i$</span> expressed in the space (base) frame at the home configuration, as a <span>$6 \times n$</span> matrix.</li><li><code>home_ee_pose</code>: the <span>$4 \times 4$</span> end-effector pose <span>$M \in$</span> SE(3) when all joint positions are zero (home configuration).</li><li><code>target_config</code>: the desired <span>$4 \times 4$</span> end-effector pose <span>$T \in$</span> SE(3).</li><li><code>initial_guess</code>: an <span>$n$</span>-vector initial guess of joint positions <span>$\theta_0$</span>.</li><li><code>angular_tolerance</code>: small positive tolerance on the end-effector orientation error.</li><li><code>linear_tolerance</code>: small positive tolerance on the end-effector position error.</li></ul><p><strong>Returns</strong></p><p>A tuple <code>(joint_positions, success)</code> where <code>joint_positions</code> is the <span>$n$</span>-vector solution and <code>success</code> is a <code>Bool</code>.</p><p><strong>Examples</strong></p><pre><code class="language-julia-repl hljs">julia> screw_axes = [ 0 0 1 4 0 0 ;
0 commit comments