Skip to content

Commit bc79b2d

Browse files
author
ipuch
committed
feat(joint-ellipsoid): extra utils for translations
position, velocities, accelerations
1 parent f401813 commit bc79b2d

File tree

1 file changed

+91
-0
lines changed

1 file changed

+91
-0
lines changed

include/pinocchio/multibody/joint/joint-ellipsoid.hpp

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,9 @@ namespace pinocchio
129129
using Base::idx_v;
130130
using Base::idx_vExtended;
131131
using Base::setIndexes;
132+
133+
typedef typename Transformation_t::Vector3 Vector3;
134+
132135
Scalar radius_a;
133136
Scalar radius_b;
134137
Scalar radius_c;
@@ -321,6 +324,94 @@ namespace pinocchio
321324
return res;
322325
}
323326

327+
template<typename ConfigVector>
328+
Vector3 computeTranslations(
329+
const typename Eigen::MatrixBase<ConfigVector> & qs) const
330+
{
331+
Scalar c0, s0;
332+
SINCOS(qs(0), &s0, &c0);
333+
Scalar c1, s1;
334+
SINCOS(qs(1), &s1, &c1);
335+
336+
return computeTranslations(s0, c0, s1, c1);
337+
}
338+
339+
Vector3 computeTranslations(
340+
const Scalar & s0,
341+
const Scalar & c0,
342+
const Scalar & s1,
343+
const Scalar & c1) const
344+
{
345+
Scalar nx, ny, nz;
346+
nx = s1;
347+
ny = -s0 * c1;
348+
nz = c0 * c1;
349+
350+
return Vector3(radius_a * nx, radius_b * ny, radius_c * nz);
351+
}
352+
353+
template<typename ConfigVector, typename TangentVector>
354+
Vector3 computeTranslationVelocities(
355+
const typename Eigen::MatrixBase<ConfigVector> & qs,
356+
const typename Eigen::MatrixBase<TangentVector> & vs) const
357+
{
358+
Scalar c0, s0;
359+
SINCOS(qs(0), &s0, &c0);
360+
Scalar c1, s1;
361+
SINCOS(qs(1), &s1, &c1);
362+
363+
return computeTranslationVelocities(s0, c0, s1, c1, vs(0), vs(1));
364+
}
365+
366+
Vector3 computeTranslationVelocities(
367+
const Scalar & s0,
368+
const Scalar & c0,
369+
const Scalar & s1,
370+
const Scalar & c1,
371+
const Scalar & q0dot,
372+
const Scalar & q1dot) const
373+
{
374+
Vector3 v;
375+
v(0) = radius_a * c1 * q1dot;
376+
v(1) = radius_b * (- c0 * c1 * q0dot + s0 * s1 * q1dot);
377+
v(2) = radius_c * (-s0 * c1 * q0dot - c0 * s1 * q1dot);
378+
return v;
379+
}
380+
381+
template<typename ConfigVector, typename TangentVector, typename TangentVector2>
382+
Vector3 computeTranslationAccelerations(
383+
const typename Eigen::MatrixBase<ConfigVector> & qs,
384+
const typename Eigen::MatrixBase<TangentVector> & vs,
385+
const typename Eigen::MatrixBase<TangentVector2> & as) const
386+
{
387+
Vector3 a;
388+
Scalar c0, s0;
389+
SINCOS(qs(0), &s0, &c0);
390+
Scalar c1, s1;
391+
SINCOS(qs(1), &s1, &c1);
392+
return computeTranslationAccelerations(
393+
s0, c0, s1, c1, vs(0), vs(1), as(0), as(1));
394+
}
395+
396+
Vector3 computeTranslationAccelerations(
397+
const Scalar & s0,
398+
const Scalar & c0,
399+
const Scalar & s1,
400+
const Scalar & c1,
401+
const Scalar & q0dot,
402+
const Scalar & q1dot,
403+
const Scalar & q0ddot,
404+
const Scalar & q1ddot) const
405+
{
406+
Vector3 a;
407+
a(0) = radius_a * (-s1 * q1dot * q1dot + c1 * q1ddot);
408+
a(1) = radius_b * (s0 * c1 * q0dot * q0dot + c0 * s1 * q0dot * q1dot - c0 * c1 * q0ddot
409+
+ c0 * s1 * q1dot * q0dot + s0 * c1 * q1dot * q1dot + s0 * s1 * q1ddot);
410+
a(2) = radius_c * (-c0 * c1 * q0dot * q0dot + s0 * s1 * q0dot * q1dot - s0 * c1 * q0ddot
411+
+ s0 * s1 * q1dot * q0dot - c0 * c1 * q1dot * q1dot - c0 * s1 * q1ddot);
412+
return a;
413+
}
414+
324415
void computeMotionSubspace(
325416
const Scalar & s0,
326417
const Scalar & c0,

0 commit comments

Comments
 (0)