FancySafeBot 0.0.1
A safe robotics library
Loading...
Searching...
No Matches
fsb_jacobian.h
1
2#ifndef FSB_JACOBIAN_H
3#define FSB_JACOBIAN_H
4
5#include <array>
6#include <cstddef>
7#include <cstdint>
8#include "fsb_body.h"
9#include "fsb_body_tree.h"
10#include "fsb_configuration.h"
11#include "fsb_joint.h"
12#include "fsb_motion.h"
13#include "fsb_types.h"
14
15namespace fsb
16{
17
27enum class JacobianError : uint8_t
28{
32 SUCCESS,
37};
38
43{
47 std::array<real_t, 6U * MaxSize::dofs> j;
48};
49
54{
58 std::array<real_t, MaxSize::dofs * MaxSize::dofs> j;
59};
60
64struct Hessian
65{
69 std::array<Jacobian, MaxSize::dofs> h;
70};
71
73{
74 Vec3 eig_values;
75 Mat3 eig_vectors;
76};
77
79{
80 bool is_singular = false;
81 real_t condition_number = 0.0;
82 SingularityEllipsoid ellipsoid = {};
83};
84
86{
87 Mat3Singularity angular;
88 Mat3Singularity linear;
89};
90
100inline size_t jacobian_index(const size_t row, const size_t col)
101{
102 return 6U * col + row;
103}
104
115inline size_t joint_matrix_index(const size_t row, const size_t col, const size_t dofs)
116{
117 return dofs * col + row;
118}
119
128MotionVector jacobian_multiply(
129 const Jacobian& jacobian, const JointSpace& joint_motion, size_t dofs = MaxSize::dofs);
130
140 const Jacobian& jacobian, const MotionVector& cartesian_motion, size_t dofs = MaxSize::dofs);
141
152JointMatrix jacobian_transpose_multiply_jacobian(const Jacobian& jacobian, const MotionVector& cartesian_weights, size_t dofs = MaxSize::dofs);
153
162Jacobian jacobian_derivative(
163 const Hessian& hessian, const JointSpace& joint_velocity, size_t dofs = MaxSize::dofs);
164
178 size_t body_index, const BodyTree& body_tree, const BodyCartesianPva& cartesian_pva,
179 Jacobian& jacobian);
180
188JacobianMetrics calculate_jacobian_metrics(const Jacobian& jacobian, size_t dofs= MaxSize::dofs);
189
194} // namespace fsb
195
196#endif // FSB_JACOBIAN_H
size_t joint_matrix_index(const size_t row, const size_t col, const size_t dofs)
Helper function for indexing joint matrix.
Definition fsb_jacobian.h:115
JointSpace jacobian_transpose_multiply(const Jacobian &jacobian, const MotionVector &cartesian_motion, size_t dofs=MaxSize::dofs)
Jacobian transpose multiply cartesian motion.
Definition fsb_jacobian.cpp:316
JointMatrix jacobian_transpose_multiply_jacobian(const Jacobian &jacobian, const MotionVector &cartesian_weights, size_t dofs=MaxSize::dofs)
Jacobian transpose multiply jacobian.
Definition fsb_jacobian.cpp:337
MotionVector jacobian_multiply(const Jacobian &jacobian, const JointSpace &joint_motion, size_t dofs=MaxSize::dofs)
Jacobian multiply joint velocity.
Definition fsb_jacobian.cpp:296
JacobianError calculate_jacobian(size_t body_index, const BodyTree &body_tree, const BodyCartesianPva &cartesian_pva, Jacobian &jacobian)
Determine Jacobian matrix for a single body in tree.
Definition fsb_jacobian.cpp:256
JacobianMetrics calculate_jacobian_metrics(const Jacobian &jacobian, size_t dofs=MaxSize::dofs)
Calculate Jacobian metrics for a given Jacobian matrix.
Definition fsb_jacobian.cpp:391
size_t jacobian_index(const size_t row, const size_t col)
Helper function for indexing jacobian matrix.
Definition fsb_jacobian.h:100
JacobianError
Error values for Jacobian calculations.
Definition fsb_jacobian.h:28
Jacobian jacobian_derivative(const Hessian &hessian, const JointSpace &joint_velocity, size_t dofs=MaxSize::dofs)
Compute derivative of Jacobian matrix.
Definition fsb_jacobian.cpp:370
@ BODY_NOT_IN_TREE
Index does not point to an existing body in tree.
Hessian tensor.
Definition fsb_jacobian.h:65
std::array< Jacobian, MaxSize::dofs > h
Hessian tensor data "pages".
Definition fsb_jacobian.h:69
Definition fsb_jacobian.h:86
Jacobian matrix.
Definition fsb_jacobian.h:43
std::array< real_t, 6U *MaxSize::dofs > j
Jacobian matrix data array.
Definition fsb_jacobian.h:47
Square matrix of size nxn for n joints.
Definition fsb_jacobian.h:54
std::array< real_t, MaxSize::dofs *MaxSize::dofs > j
Square matrix data array.
Definition fsb_jacobian.h:58
Definition fsb_jacobian.h:79
3x3 matrix, column-major
Definition fsb_types.h:59
static constexpr size_t dofs
Maximum number of degrees of freedom.
Definition fsb_configuration.h:49
Definition fsb_jacobian.h:73
3D vector
Definition fsb_types.h:27