<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <div class="moz-cite-prefix">On 06/29/2012 05:20 PM, Alexander Duda
      wrote:<br>
    </div>
    <blockquote cite="mid:4FEDC7D6.6010602@dfki.de" type="cite">
      <meta content="text/html; charset=ISO-8859-1"
        http-equiv="Content-Type">
      On 06/29/2012 05:02 PM, Javier Hidalgo Carri&oacute; wrote:
      <blockquote cite="mid:4FEDC387.8010806@dfki.de" type="cite">
        <meta content="text/html; charset=ISO-8859-1"
          http-equiv="Content-Type">
        <div class="moz-cite-prefix">+1<br>
          Since Orientation is a Eigen::Quaternion we could even use the
          norm() method.<br>
          <br>
          Javier.<br>
          <br>
          <table class="memname">
            <tbody>
              <tr>
                <td class="memname"><a moz-do-not-send="true" class="el"
href="http://eigen.tuxfamily.org/dox/classEigen_1_1QuaternionBase.html#a844358c46408e878e60c4026c52eb1e9">Scalar</a>
                  norm </td>
                <td>(</td>
                <td class="paramname"><br>
                </td>
                <td>)</td>
                <td> const<code> [inline]</code></td>
              </tr>
            </tbody>
          </table>
          <div class="memdoc">
            <dl class="return">
              <dt><b>Returns:</b></dt>
              <dd>the norm of the quaternion's coefficients </dd>
            </dl>
            <dl class="see">
              <dt><b>See also:</b></dt>
              <dd><a moz-do-not-send="true" class="el"
href="http://eigen.tuxfamily.org/dox/classEigen_1_1QuaternionBase.html#a8699d72c996ca6cb4673e810fe3a616c">QuaternionBase::squaredNorm()</a>,
                <a moz-do-not-send="true" class="el"
href="http://eigen.tuxfamily.org/dox/classEigen_1_1MatrixBase.html#a0be1b433c65ce9d92c81a4718daf54e5">MatrixBase::norm()</a>
              </dd>
            </dl>
          </div>
          <br>
        </div>
      </blockquote>
      I think you do not gain so much from this functions as you will
      get a scalar which you have to sum anyway. Do you know if there is
      a function which checks if the quaternion is valid?<br>
      <br>
    </blockquote>
    I don't know any valid method. Having no-normalized quaternion is
    sometimes common (e.g, passing a quaternion through a EKF) and
    normalization needs to be done.<br>
    <blockquote cite="mid:4FEDC7D6.6010602@dfki.de" type="cite">
      fabs(ori.w()*ori.w()+ori.x()*ori.x()+ori.y()*ori.y()+ori.z()*ori.z()-1.0)

      &lt; 1e-6<br>
      <br>
    </blockquote>
    What should be the error threshold to define if a quaternion is
    valid or not? Perhaps norm() does some round to 1.00...<br>
    <blockquote cite="mid:4FEDC7D6.6010602@dfki.de" type="cite"> Alex<br>
      <blockquote cite="mid:4FEDC387.8010806@dfki.de" type="cite">
        <div class="moz-cite-prefix"> On 06/29/2012 04:53 PM, Alexander
          Duda wrote:<br>
        </div>
        <blockquote cite="mid:4FEDC16F.7050503@dfki.de" type="cite">
          <pre wrap="">Hi,

the base type samples::RigidBodyState has a function to check if the 
orientation is valid.
At the moment it only checks if the values of the quaternion 
representing the orientation are different to NaN.

I propose that we also add a check that the quaternion is an unit 
quaternion because otherwise wrongly initialised orientations might lead 
to strange transformation matrices and vanishing objects in OSG.

Any opinions?

Alex

         static bool isValidValue(base::Orientation const&amp; ori)
         {
             return !base::isNaN(ori.w()) &amp;&amp;
                 !base::isNaN(ori.x()) &amp;&amp;
                 !base::isNaN(ori.y()) &amp;&amp;
                 !base::isNaN(ori.z()) &amp;&amp;
                 
ori.w()*ori.w()+ori.x()*ori.x()+ori.y()*ori.y()+ori.z()*ori.z()-1e6 &lt; 1;
         }

</pre>
        </blockquote>
        <br>
        <br>
      </blockquote>
    </blockquote>
    <br>
  </body>
</html>