|
241 | 241 |
|
242 | 242 | <h1>Source code for pypose.lietensor.convert</h1><div class="highlight"><pre>
|
243 | 243 | <span></span><span class="kn">import</span> <span class="nn">torch</span><span class="o">,</span> <span class="nn">warnings</span>
|
| 244 | +<span class="kn">from</span> <span class="nn">torch.nn.functional</span> <span class="kn">import</span> <span class="n">normalize</span> |
244 | 245 | <span class="kn">from</span> <span class="nn">.utils</span> <span class="kn">import</span> <span class="n">SO3</span><span class="p">,</span> <span class="n">so3</span><span class="p">,</span> <span class="n">SE3</span><span class="p">,</span> <span class="n">RxSO3</span><span class="p">,</span> <span class="n">Sim3</span>
|
245 |
| -<span class="kn">from</span> <span class="nn">.lietensor</span> <span class="kn">import</span> <span class="n">LieTensor</span><span class="p">,</span> <span class="n">SE3_type</span><span class="p">,</span> <span class="n">SO3_type</span><span class="p">,</span> <span class="n">Sim3_type</span><span class="p">,</span> <span class="n">RxSO3_type</span> |
| 246 | +<span class="kn">from</span> <span class="nn">.lietensor</span> <span class="kn">import</span> <span class="n">LieTensor</span><span class="p">,</span> <span class="n">liegroup</span><span class="p">,</span> <span class="n">liealgebra</span> |
| 247 | +<span class="kn">from</span> <span class="nn">.lietensor</span> <span class="kn">import</span> <span class="n">SE3_type</span><span class="p">,</span> <span class="n">SO3_type</span><span class="p">,</span> <span class="n">Sim3_type</span><span class="p">,</span> <span class="n">RxSO3_type</span> |
246 | 248 |
|
247 | 249 |
|
248 | 250 | <div class="viewcode-block" id="mat2SO3"><a class="viewcode-back" href="../../../../generated/pypose.mat2SO3/#pypose.mat2SO3">[docs]</a><span class="k">def</span> <span class="nf">mat2SO3</span><span class="p">(</span><span class="n">mat</span><span class="p">,</span> <span class="n">check</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">rtol</span><span class="o">=</span><span class="mf">1e-5</span><span class="p">,</span> <span class="n">atol</span><span class="o">=</span><span class="mf">1e-5</span><span class="p">):</span>
|
@@ -1066,6 +1068,41 @@ <h1>Source code for pypose.lietensor.convert</h1><div class="highlight"><pre>
|
1066 | 1068 | <span class="sd"> See :obj:`euler2SO3` for more information.</span>
|
1067 | 1069 | <span class="sd"> '''</span>
|
1068 | 1070 | <span class="k">return</span> <span class="n">inputs</span><span class="o">.</span><span class="n">euler</span><span class="p">(</span><span class="n">eps</span><span class="o">=</span><span class="n">eps</span><span class="p">)</span></div>
|
| 1071 | + |
| 1072 | + |
| 1073 | +<div class="viewcode-block" id="quat2unit"><a class="viewcode-back" href="../../../../generated/pypose.quat2unit/#pypose.quat2unit">[docs]</a><span class="k">def</span> <span class="nf">quat2unit</span><span class="p">(</span><span class="nb">input</span><span class="p">:</span> <span class="n">LieTensor</span><span class="p">,</span> <span class="n">eps</span><span class="o">=</span><span class="mf">1e-12</span><span class="p">)</span> <span class="o">-></span> <span class="n">LieTensor</span><span class="p">:</span> |
| 1074 | +<span class="w"> </span><span class="sa">r</span><span class="sd">'''</span> |
| 1075 | +<span class="sd"> Normalize the quaternion part of a ``LieTensor``, which has to be a Lie group.</span> |
| 1076 | +<span class="sd"> If input is a not a Lie group, then do nothing and return the input.</span> |
| 1077 | +<span class="sd"> If the quaternion parts contain pure zeros, then raise an error.</span> |
| 1078 | + |
| 1079 | +<span class="sd"> The quaternion parts :math:`v` are normalized as</span> |
| 1080 | + |
| 1081 | +<span class="sd"> .. math::</span> |
| 1082 | +<span class="sd"> v = \frac{v}{\max(\lVert v \rVert_2, \epsilon)},</span> |
| 1083 | + |
| 1084 | +<span class="sd"> where :math:`\epsilon` is a small value to avoid division by zero</span> |
| 1085 | + |
| 1086 | +<span class="sd"> Args:</span> |
| 1087 | +<span class="sd"> input (``LieTensor``): input LieTensor of any type and shape.</span> |
| 1088 | +<span class="sd"> eps (``float``): small value to avoid division by zero. Default: 1e-12.</span> |
| 1089 | + |
| 1090 | +<span class="sd"> Return:</span> |
| 1091 | +<span class="sd"> :obj:`LieTensor`: the output LieTensor.</span> |
| 1092 | +<span class="sd"> '''</span> |
| 1093 | + <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="nb">input</span><span class="p">,</span> <span class="n">LieTensor</span><span class="p">)</span> <span class="ow">and</span> <span class="p">(</span><span class="nb">input</span><span class="o">.</span><span class="n">ltype</span> <span class="ow">in</span> <span class="n">liegroup</span><span class="p">):</span> |
| 1094 | + <span class="n">data</span> <span class="o">=</span> <span class="nb">input</span><span class="o">.</span><span class="n">tensor</span><span class="p">()</span> |
| 1095 | + <span class="k">if</span> <span class="nb">input</span><span class="o">.</span><span class="n">ltype</span> <span class="ow">in</span> <span class="p">[</span><span class="n">SO3_type</span><span class="p">,</span> <span class="n">RxSO3_type</span><span class="p">]:</span> |
| 1096 | + <span class="n">data</span><span class="p">[</span><span class="o">...</span><span class="p">,</span> <span class="p">:</span><span class="mi">4</span><span class="p">]</span> <span class="o">=</span> <span class="n">normalize</span><span class="p">(</span><span class="n">data</span><span class="p">[</span><span class="o">...</span><span class="p">,</span> <span class="p">:</span><span class="mi">4</span><span class="p">],</span> <span class="n">p</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">dim</span><span class="o">=-</span><span class="mi">1</span><span class="p">,</span> <span class="n">eps</span><span class="o">=</span><span class="n">eps</span><span class="p">)</span> |
| 1097 | + <span class="k">elif</span> <span class="nb">input</span><span class="o">.</span><span class="n">ltype</span> <span class="ow">in</span> <span class="p">[</span><span class="n">SE3_type</span><span class="p">,</span> <span class="n">Sim3_type</span><span class="p">]:</span> |
| 1098 | + <span class="n">data</span><span class="p">[</span><span class="o">...</span><span class="p">,</span> <span class="mi">3</span><span class="p">:</span><span class="mi">7</span><span class="p">]</span> <span class="o">=</span> <span class="n">normalize</span><span class="p">(</span><span class="n">data</span><span class="p">[</span><span class="o">...</span><span class="p">,</span> <span class="mi">3</span><span class="p">:</span><span class="mi">7</span><span class="p">],</span> <span class="n">p</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">dim</span><span class="o">=-</span><span class="mi">1</span><span class="p">,</span> <span class="n">eps</span><span class="o">=</span><span class="n">eps</span><span class="p">)</span> |
| 1099 | + <span class="n">output</span> <span class="o">=</span> <span class="n">LieTensor</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="n">ltype</span><span class="o">=</span><span class="nb">input</span><span class="o">.</span><span class="n">ltype</span><span class="p">)</span> |
| 1100 | + <span class="k">if</span> <span class="p">(</span><span class="n">output</span><span class="o">.</span><span class="n">rotation</span><span class="p">()</span><span class="o">.</span><span class="n">norm</span><span class="p">(</span><span class="n">p</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">dim</span><span class="o">=-</span><span class="mi">1</span><span class="p">)</span> <span class="o"><</span> <span class="n">eps</span><span class="p">)</span><span class="o">.</span><span class="n">any</span><span class="p">():</span> |
| 1101 | + <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"Detected zero quaternions, which cannot be normalized."</span><span class="p">)</span> |
| 1102 | + <span class="k">return</span> <span class="n">output</span> |
| 1103 | + <span class="k">else</span><span class="p">:</span> |
| 1104 | + <span class="n">warnings</span><span class="o">.</span><span class="n">warn</span><span class="p">(</span><span class="s2">"Input is not Lie group, doing thing and returning input.."</span><span class="p">)</span> |
| 1105 | + <span class="k">return</span> <span class="nb">input</span></div> |
1069 | 1106 | </pre></div>
|
1070 | 1107 |
|
1071 | 1108 | </article>
|
|
0 commit comments