TurtleQUAD 2.0
Loading...
Searching...
No Matches
spatial.hpp
Go to the documentation of this file.
1
4
5#pragma once
6
7#include <Eigen/Dense>
8#include <cmath>
9
10namespace Eigen {
11typedef Matrix<double, 6, 1> Vector6d;
12typedef Matrix<double, 6, 6> Matrix6d;
13} // namespace Eigen
14
22inline Eigen::Vector6d screwAxis(const Eigen::Vector3d &q,
23 const Eigen::Vector3d &s,
24 const double h = 0.0) {
25 return (Eigen::Vector6d() << s, q.cross(s) + h * s).finished();
26}
27
35template <int n>
36inline Eigen::Matrix<double, 6, n> screwAxis(
37 const Eigen::Matrix<double, 3, n> &q, const Eigen::Matrix<double, 3, n> &s,
38 const Eigen::Vector<double, n> &h = Eigen::Vector<double, n>::Zero()) {
39 assert(q.cols() == s.cols());
40 Eigen::Matrix<double, 6, n> Slist =
41 Eigen::Matrix<double, 6, n>::Zero(6, q.cols());
42 for (unsigned i = 0; i < q.cols(); i++)
43 Slist.col(i) = screwAxis(q.row(i), s.row(i), h(i));
44 return Slist;
45}
46
56inline Eigen::Vector6d pointsToScrew(const Eigen::Vector3d &p1,
57 const Eigen::Vector3d &p2) {
58 return screwAxis(p1, (p2 - p1).normalized());
59}
60
68inline Eigen::Matrix6d makeG(const Eigen::Matrix3d &I, const double &m) {
69 Eigen::Matrix6d G;
70 G.topLeftCorner<3, 3>() = I;
71 G.bottomRightCorner<3, 3>().diagonal().setConstant(m);
72 return G;
73}
74
82inline double cubicTimeScaling(const double t, const double dt) {
83 const double timeratio = t / dt;
84 return 3 * std::pow(timeratio, 2) - 2 * std::pow(timeratio, 3);
85}
86
94inline double quinticTimeScaling(const double t, const double dt) {
95 const double timeratio = t / dt;
96 return 10 * std::pow(timeratio, 3) - 15 * std::pow(timeratio, 4) +
97 6 * std::pow(timeratio, 5);
98}
Eigen::Vector6d screwAxis(const Eigen::Vector3d &q, const Eigen::Vector3d &s, const double h=0.0)
Create screw axis.
Definition spatial.hpp:22
Eigen::Matrix6d makeG(const Eigen::Matrix3d &I, const double &m)
Create spatial inertia matrix.
Definition spatial.hpp:68
Eigen::Vector6d pointsToScrew(const Eigen::Vector3d &p1, const Eigen::Vector3d &p2)
Create screw axis from points.
Definition spatial.hpp:56
double quinticTimeScaling(const double t, const double dt)
Apply quintic time scaling.
Definition spatial.hpp:94
double cubicTimeScaling(const double t, const double dt)
Apply cubic time scaling.
Definition spatial.hpp:82