<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ó 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)
< 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& ori)
{
return !base::isNaN(ori.w()) &&
!base::isNaN(ori.x()) &&
!base::isNaN(ori.y()) &&
!base::isNaN(ori.z()) &&
ori.w()*ori.w()+ori.x()*ori.x()+ori.y()*ori.y()+ori.z()*ori.z()-1e6 < 1;
}
</pre>
</blockquote>
<br>
<br>
</blockquote>
</blockquote>
<br>
</body>
</html>