Skip to content

Commit dd586be

Browse files
committed
Update documentation
1 parent ade692e commit dd586be

50 files changed

Lines changed: 204 additions & 77 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎2d_pose_twist.html‎

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -716,11 +716,11 @@ <h1>se(2) twist<a class="headerlink" href="#se-2-twist" title="Link to this head
716716
<div class="highlight-pycon notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span><span class="w"> </span><span class="nn">spatialmath</span><span class="w"> </span><span class="kn">import</span> <a class="sphinx-codeautolink-a" href="3d_pose_twist.html#spatialmath.twist.Twist3" title="spatialmath.twist.Twist3"><span class="n">Twist3</span></a>
717717
<span class="gp">&gt;&gt;&gt; </span><a class="sphinx-codeautolink-a" href="3d_pose_twist.html#spatialmath.twist.Twist3" title="spatialmath.twist.Twist3"><span class="n">S</span></a> <span class="o">=</span> <a class="sphinx-codeautolink-a" href="3d_pose_twist.html#spatialmath.twist.Twist3" title="spatialmath.twist.Twist3"><span class="n">Twist3</span></a><span class="p">(</span><span class="n">SE3</span><span class="o">.</span><span class="n">Rand</span><span class="p">())</span>
718718
<span class="gp">&gt;&gt;&gt; </span><a class="sphinx-codeautolink-a" href="3d_pose_twist.html#spatialmath.twist.Twist3" title="spatialmath.twist.Twist3"><span class="n">S</span></a>
719-
<span class="go">Twist3([-1.2116, 0.049677, 0.66232, 0.70184, -0.04326, 1.066])</span>
719+
<span class="go">Twist3([-0.049077, 0.74883, -0.57515, 1.2958, -1.1632, 0.36528])</span>
720720
<span class="gp">&gt;&gt;&gt; </span><a class="sphinx-codeautolink-a" href="3d_pose_twist.html#spatialmath.twist.Twist3.inv" title="spatialmath.twist.Twist3.inv"><span class="n">S</span><span class="o">.</span><span class="n">inv</span></a><span class="p">()</span>
721-
<span class="go">Twist3([1.2116, -0.049677, -0.66232, -0.70184, 0.04326, -1.066])</span>
721+
<span class="go">Twist3([0.049077, -0.74883, 0.57515, -1.2958, 1.1632, -0.36528])</span>
722722
<span class="gp">&gt;&gt;&gt; </span><a class="sphinx-codeautolink-a" href="3d_pose_twist.html#spatialmath.twist.Twist3" title="spatialmath.twist.Twist3"><span class="n">S</span></a> <span class="o">*</span> <a class="sphinx-codeautolink-a" href="3d_pose_twist.html#spatialmath.twist.Twist3.inv" title="spatialmath.twist.Twist3.inv"><span class="n">S</span><span class="o">.</span><span class="n">inv</span></a><span class="p">()</span>
723-
<span class="go">Twist3([0, 2.2204e-16, 5.5511e-17, 0, 0, 0])</span>
723+
<span class="go">Twist3([-5.5511e-17, 0, 4.1633e-17, 0, 0, 0])</span>
724724
</pre></div>
725725
</div>
726726
</dd></dl>
@@ -836,8 +836,7 @@ <h1>se(2) twist<a class="headerlink" href="#se-2-twist" title="Link to this head
836836
<span class="gp">&gt;&gt;&gt; </span><a class="sphinx-codeautolink-a" href="2d_pose_SE2.html#spatialmath.pose2d.SE2" title="spatialmath.pose2d.SE2"><span class="n">T</span></a> <span class="o">=</span> <a class="sphinx-codeautolink-a" href="2d_pose_SE2.html#spatialmath.pose2d.SE2" title="spatialmath.pose2d.SE2"><span class="n">SE2</span></a><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mf">0.3</span><span class="p">)</span>
837837
<span class="gp">&gt;&gt;&gt; </span><a class="sphinx-codeautolink-a" href="2d_pose_twist.html#spatialmath.twist.Twist2" title="spatialmath.twist.Twist2"><span class="n">S</span></a> <span class="o">=</span> <a class="sphinx-codeautolink-a" href="2d_pose_twist.html#spatialmath.twist.Twist2" title="spatialmath.twist.Twist2"><span class="n">Twist2</span></a><span class="p">(</span><a class="sphinx-codeautolink-a" href="2d_pose_SE2.html#spatialmath.pose2d.SE2" title="spatialmath.pose2d.SE2"><span class="n">T</span></a><span class="p">)</span>
838838
<span class="gp">&gt;&gt;&gt; </span><a class="sphinx-codeautolink-a" href="2d_pose_twist.html#spatialmath.twist.Twist2.unit" title="spatialmath.twist.Twist2.unit"><span class="n">S</span><span class="o">.</span><span class="n">unit</span></a><span class="p">()</span>
839-
<span class="go">!! [RUNBLOCK-ERROR] spatialmath/twist.py:docstring of spatialmath.twist.Twist2.unit:574</span>
840-
<span class="go"> ValueError: bad twist value</span>
839+
<span class="go">Twist2([4.3083, 6.1166, 1])</span>
841840
</pre></div>
842841
</div>
843842
</dd></dl>
@@ -924,8 +923,7 @@ <h1>se(2) twist<a class="headerlink" href="#se-2-twist" title="Link to this head
924923
<span class="gp">&gt;&gt;&gt; </span><a class="sphinx-codeautolink-a" href="2d_pose_SE2.html#spatialmath.pose2d.SE2" title="spatialmath.pose2d.SE2"><span class="n">T</span></a> <span class="o">=</span> <a class="sphinx-codeautolink-a" href="2d_pose_SE2.html#spatialmath.pose2d.SE2" title="spatialmath.pose2d.SE2"><span class="n">SE2</span></a><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mf">0.3</span><span class="p">)</span>
925924
<span class="gp">&gt;&gt;&gt; </span><a class="sphinx-codeautolink-a" href="2d_pose_twist.html#spatialmath.twist.Twist2" title="spatialmath.twist.Twist2"><span class="n">S</span></a> <span class="o">=</span> <a class="sphinx-codeautolink-a" href="2d_pose_twist.html#spatialmath.twist.Twist2" title="spatialmath.twist.Twist2"><span class="n">Twist2</span></a><span class="p">(</span><a class="sphinx-codeautolink-a" href="2d_pose_SE2.html#spatialmath.pose2d.SE2" title="spatialmath.pose2d.SE2"><span class="n">T</span></a><span class="p">)</span>
926925
<span class="gp">&gt;&gt;&gt; </span><a class="sphinx-codeautolink-a" href="2d_pose_twist.html#spatialmath.twist.Twist2.unit" title="spatialmath.twist.Twist2.unit"><span class="n">S</span><span class="o">.</span><span class="n">unit</span></a><span class="p">()</span>
927-
<span class="go">!! [RUNBLOCK-ERROR] spatialmath/twist.py:docstring of spatialmath.twist.Twist2.ad:647</span>
928-
<span class="go"> ValueError: bad twist value</span>
926+
<span class="go">Twist2([4.3083, 6.1166, 1])</span>
929927
</pre></div>
930928
</div>
931929
<dl class="field-list simple">
@@ -1018,15 +1016,14 @@ <h1>se(2) twist<a class="headerlink" href="#se-2-twist" title="Link to this head
10181016
<dd class="field-even"><p>ndarray(2)</p>
10191017
</dd>
10201018
</dl>
1021-
<p><code class="docutils literal notranslate"><span class="pre">X.pole()</span></code> is a point on the twist axis. For a pure translation
1019+
<p><code class="docutils literal notranslate"><span class="pre">X.pole</span></code> is a point on the twist axis. For a pure translation
10221020
this point is at infinity.</p>
10231021
<p>Example:</p>
10241022
<div class="highlight-pycon notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span><span class="w"> </span><span class="nn">spatialmath</span><span class="w"> </span><span class="kn">import</span> <a class="sphinx-codeautolink-a" href="2d_pose_SE2.html#spatialmath.pose2d.SE2" title="spatialmath.pose2d.SE2"><span class="n">SE2</span></a><span class="p">,</span> <a class="sphinx-codeautolink-a" href="2d_pose_twist.html#spatialmath.twist.Twist2" title="spatialmath.twist.Twist2"><span class="n">Twist2</span></a>
10251023
<span class="gp">&gt;&gt;&gt; </span><a class="sphinx-codeautolink-a" href="2d_pose_SE2.html#spatialmath.pose2d.SE2" title="spatialmath.pose2d.SE2"><span class="n">T</span></a> <span class="o">=</span> <a class="sphinx-codeautolink-a" href="2d_pose_SE2.html#spatialmath.pose2d.SE2" title="spatialmath.pose2d.SE2"><span class="n">SE2</span></a><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mf">0.3</span><span class="p">)</span>
10261024
<span class="gp">&gt;&gt;&gt; </span><a class="sphinx-codeautolink-a" href="2d_pose_twist.html#spatialmath.twist.Twist2" title="spatialmath.twist.Twist2"><span class="n">S</span></a> <span class="o">=</span> <a class="sphinx-codeautolink-a" href="2d_pose_twist.html#spatialmath.twist.Twist2" title="spatialmath.twist.Twist2"><span class="n">Twist2</span></a><span class="p">(</span><a class="sphinx-codeautolink-a" href="2d_pose_SE2.html#spatialmath.pose2d.SE2" title="spatialmath.pose2d.SE2"><span class="n">T</span></a><span class="p">)</span>
1027-
<span class="gp">&gt;&gt;&gt; </span><a class="sphinx-codeautolink-a" href="2d_pose_twist.html#spatialmath.twist.Twist2.pole" title="spatialmath.twist.Twist2.pole"><span class="n">S</span><span class="o">.</span><span class="n">pole</span></a><span class="p">()</span>
1028-
<span class="go">!! [RUNBLOCK-ERROR] spatialmath/twist.py:docstring of spatialmath.twist.Twist2.pole:735</span>
1029-
<span class="go"> TypeError: 'numpy.ndarray' object is not callable</span>
1025+
<span class="gp">&gt;&gt;&gt; </span><a class="sphinx-codeautolink-a" href="2d_pose_twist.html#spatialmath.twist.Twist2.pole" title="spatialmath.twist.Twist2.pole"><span class="n">S</span><span class="o">.</span><span class="n">pole</span></a>
1026+
<span class="go">array([-1.835 , 1.2925])</span>
10301027
</pre></div>
10311028
</div>
10321029
</dd></dl>

‎3d_orient_SO3.html‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -490,9 +490,9 @@ <h1>SO(3) matrix<a class="headerlink" href="#so-3-matrix" title="Link to this he
490490
<div class="highlight-pycon notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span><span class="w"> </span><span class="nn">spatialmath</span><span class="w"> </span><span class="kn">import</span> <a class="sphinx-codeautolink-a" href="3d_orient_SO3.html#spatialmath.pose3d.SO3" title="spatialmath.pose3d.SO3"><span class="n">SO3</span></a>
491491
<span class="gp">&gt;&gt;&gt; </span><a class="sphinx-codeautolink-a" href="3d_orient_SO3.html#spatialmath.pose3d.SO3" title="spatialmath.pose3d.SO3"><span class="n">x</span></a> <span class="o">=</span> <a class="sphinx-codeautolink-a" href="3d_orient_SO3.html#spatialmath.pose3d.SO3.Rand" title="spatialmath.pose3d.SO3.Rand"><span class="n">SO3</span><span class="o">.</span><span class="n">Rand</span></a><span class="p">()</span>
492492
<span class="gp">&gt;&gt;&gt; </span><a class="sphinx-codeautolink-a" href="3d_orient_SO3.html#spatialmath.pose3d.SO3" title="spatialmath.pose3d.SO3"><span class="n">x</span></a>
493-
<span class="go">SO3(array([[ 0.2465, -0.9124, -0.3268],</span>
494-
<span class="go"> [ 0.2923, -0.2515, 0.9227],</span>
495-
<span class="go"> [-0.924 , -0.323 , 0.2047]]))</span>
493+
<span class="go">SO3(array([[-0.9686, -0.2487, -0.005 ],</span>
494+
<span class="go"> [-0.0431, 0.1479, 0.9881],</span>
495+
<span class="go"> [-0.245 , 0.9572, -0.154 ]]))</span>
496496
</pre></div>
497497
</div>
498498
<dl class="field-list simple">

‎3d_orient_unitquaternion.html‎

Lines changed: 39 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -453,11 +453,11 @@ <h1>Unit quaternion<a class="headerlink" href="#unit-quaternion" title="Link to
453453
<p>Example:</p>
454454
<div class="highlight-pycon notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span><span class="w"> </span><span class="nn">spatialmath</span><span class="w"> </span><span class="kn">import</span> <a class="sphinx-codeautolink-a" href="3d_orient_unitquaternion.html#spatialmath.quaternion.UnitQuaternion" title="spatialmath.quaternion.UnitQuaternion"><span class="n">UnitQuaternion</span></a> <span class="k">as</span> <span class="n">UQ</span>
455455
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><a class="sphinx-codeautolink-a" href="3d_orient_unitquaternion.html#spatialmath.quaternion.UnitQuaternion.Rand" title="spatialmath.quaternion.UnitQuaternion.Rand"><span class="n">UQ</span><span class="o">.</span><span class="n">Rand</span></a><span class="p">())</span>
456-
<span class="go"> 0.5660 &lt;&lt; -0.6913, 0.1026, 0.4372 &gt;&gt;</span>
456+
<span class="go"> 0.8856 &lt;&lt; 0.2108, -0.0807, 0.4059 &gt;&gt;</span>
457457
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><a class="sphinx-codeautolink-a" href="3d_orient_unitquaternion.html#spatialmath.quaternion.UnitQuaternion.Rand" title="spatialmath.quaternion.UnitQuaternion.Rand"><span class="n">UQ</span><span class="o">.</span><span class="n">Rand</span></a><span class="p">(</span><span class="mi">3</span><span class="p">))</span>
458-
<span class="go"> 0.8051 &lt;&lt; 0.2053, 0.0975, 0.5479 &gt;&gt;</span>
459-
<span class="go"> 0.7722 &lt;&lt; -0.1075, -0.6262, -0.0032 &gt;&gt;</span>
460-
<span class="go"> 0.4734 &lt;&lt; -0.1563, -0.7304, -0.4669 &gt;&gt;</span>
458+
<span class="go"> 0.3781 &lt;&lt; -0.2618, 0.3380, 0.8211 &gt;&gt;</span>
459+
<span class="go"> 0.7840 &lt;&lt; -0.1203, 0.1768, -0.5827 &gt;&gt;</span>
460+
<span class="go"> 0.4215 &lt;&lt; -0.7788, 0.4268, -0.1837 &gt;&gt;</span>
461461
</pre></div>
462462
</div>
463463
<dl class="field-list simple">
@@ -1509,10 +1509,44 @@ <h1>Unit quaternion<a class="headerlink" href="#unit-quaternion" title="Link to
15091509
</dl>
15101510
<p><code class="docutils literal notranslate"><span class="pre">q.conj()</span></code> is the quaternion <code class="docutils literal notranslate"><span class="pre">q</span></code> with the vector part negated, ie.
15111511
<span class="math notranslate nohighlight">\(q = s \langle -v_x, -v_y, -v_z \rangle\)</span></p>
1512+
<div class="admonition note">
1513+
<p class="admonition-title">Note</p>
1514+
<p>For a <code class="docutils literal notranslate"><span class="pre">UnitQuaternion</span></code> this deliberately does <strong>not</strong>
1515+
canonicalize the result’s scalar part to be non-negative, unlike
1516+
normal <code class="docutils literal notranslate"><span class="pre">UnitQuaternion</span></code> construction. <code class="docutils literal notranslate"><span class="pre">UnitQuaternion</span></code>
1517+
construction canonicalizes because <span class="math notranslate nohighlight">\(q\)</span> and <span class="math notranslate nohighlight">\(-q\)</span>
1518+
represent the same rotation, which is the right behaviour when
1519+
building a unit quaternion from arbitrary data. But conjugation
1520+
is an algebraic operation, not a re-representation of a
1521+
rotation: it must satisfy <span class="math notranslate nohighlight">\(q \cdot \bar{q} = 1\)</span> for any
1522+
downstream algebra to be correct (e.g. dual-quaternion
1523+
translation extraction, which relies on exactly this identity).
1524+
Re-canonicalizing the conjugate would silently return
1525+
<span class="math notranslate nohighlight">\(-\bar{q}\)</span> whenever <code class="docutils literal notranslate"><span class="pre">q</span></code> has negative scalar part,
1526+
breaking that identity. See the example below: the scalar part
1527+
of the result matches the input’s sign, it is not forced
1528+
positive.</p>
1529+
</div>
1530+
<div class="versionchanged">
1531+
<p><span class="versionmodified changed">Changed in version 1.1.18: </span>Fixes a bug present in 1.1.17 and earlier: <code class="docutils literal notranslate"><span class="pre">UnitQuaternion.conj()</span></code>
1532+
re-canonicalized its result’s sign, silently returning
1533+
<span class="math notranslate nohighlight">\(-\bar{q}\)</span> instead of the true conjugate whenever <code class="docutils literal notranslate"><span class="pre">q</span></code> had
1534+
negative scalar part. This broke any algebra relying on
1535+
<span class="math notranslate nohighlight">\(q \cdot \bar{q} = 1\)</span>, including <code class="xref py py-class docutils literal notranslate"><span class="pre">DualQuaternion</span></code>
1536+
translation extraction (<code class="docutils literal notranslate"><span class="pre">SE3()</span></code>), <code class="docutils literal notranslate"><span class="pre">norm()</span></code> (which could raise
1537+
<code class="docutils literal notranslate"><span class="pre">ValueError</span></code> from taking the square root of a small negative
1538+
float), and point transformation via <code class="docutils literal notranslate"><span class="pre">dq</span> <span class="pre">*</span> <span class="pre">v</span></code>.</p>
1539+
</div>
15121540
<p>Example:</p>
1513-
<div class="highlight-pycon notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span><span class="w"> </span><span class="nn">spatialmath</span><span class="w"> </span><span class="kn">import</span> <a class="sphinx-codeautolink-a" href="3d_quaternion.html#spatialmath.quaternion.Quaternion" title="spatialmath.quaternion.Quaternion"><span class="n">Quaternion</span></a>
1541+
<div class="highlight-pycon notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span><span class="w"> </span><span class="nn">spatialmath</span><span class="w"> </span><span class="kn">import</span> <a class="sphinx-codeautolink-a" href="3d_quaternion.html#spatialmath.quaternion.Quaternion" title="spatialmath.quaternion.Quaternion"><span class="n">Quaternion</span></a><span class="p">,</span> <a class="sphinx-codeautolink-a" href="3d_orient_unitquaternion.html#spatialmath.quaternion.UnitQuaternion" title="spatialmath.quaternion.UnitQuaternion"><span class="n">UnitQuaternion</span></a>
1542+
<span class="gp">&gt;&gt;&gt; </span><span class="kn">import</span><span class="w"> </span><a class="sphinx-codeautolink-a" href="https://numpy.org/doc/stable/reference/index.html#module-numpy"><span class="nn">numpy</span></a><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">np</span>
15141543
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><a class="sphinx-codeautolink-a" href="3d_quaternion.html#spatialmath.quaternion.Quaternion.Pure" title="spatialmath.quaternion.Quaternion.Pure"><span class="n">Quaternion</span><span class="o">.</span><span class="n">Pure</span></a><span class="p">([</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">])</span><span class="o">.</span><a class="sphinx-codeautolink-a" href="3d_quaternion.html#spatialmath.quaternion.Quaternion.conj" title="spatialmath.quaternion.Quaternion.conj"><span class="n">conj</span></a><span class="p">())</span>
15151544
<span class="go"> 0.0000 &lt; -1.0000, -2.0000, -3.0000 &gt;</span>
1545+
<span class="gp">&gt;&gt;&gt; </span><a class="sphinx-codeautolink-a" href="3d_orient_unitquaternion.html#spatialmath.quaternion.UnitQuaternion" title="spatialmath.quaternion.UnitQuaternion"><span class="n">q</span></a> <span class="o">=</span> <a class="sphinx-codeautolink-a" href="3d_orient_unitquaternion.html#spatialmath.quaternion.UnitQuaternion" title="spatialmath.quaternion.UnitQuaternion"><span class="n">UnitQuaternion</span></a><span class="p">(</span><a class="sphinx-codeautolink-a" href="https://numpy.org/doc/stable/reference/generated/numpy.array.html#numpy.array" title="numpy.array"><span class="n">np</span><span class="o">.</span><span class="n">array</span></a><span class="p">([[</span><span class="o">-</span><span class="mf">0.5</span><span class="p">,</span> <span class="mf">0.5</span><span class="p">,</span> <span class="mf">0.5</span><span class="p">,</span> <span class="mf">0.5</span><span class="p">]]),</span> <span class="n">norm</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
1546+
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><a class="sphinx-codeautolink-a" href="3d_orient_unitquaternion.html#spatialmath.quaternion.UnitQuaternion" title="spatialmath.quaternion.UnitQuaternion"><span class="n">q</span></a><span class="p">)</span>
1547+
<span class="go">-0.5000 &lt;&lt; 0.5000, 0.5000, 0.5000 &gt;&gt;</span>
1548+
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><a class="sphinx-codeautolink-a" href="3d_orient_unitquaternion.html#spatialmath.quaternion.UnitQuaternion.conj" title="spatialmath.quaternion.UnitQuaternion.conj"><span class="n">q</span><span class="o">.</span><span class="n">conj</span></a><span class="p">())</span>
1549+
<span class="go">-0.5000 &lt;&lt; -0.5000, -0.5000, -0.5000 &gt;&gt;</span>
15161550
</pre></div>
15171551
</div>
15181552
<dl class="field-list simple">

0 commit comments

Comments
 (0)