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,
41};
42
47{
51 std::array<Real, 6U * MaxSize::kDofs> j;
52};
53
58{
62 std::array<Real, MaxSize::kDofs * MaxSize::kDofs> j;
63};
64
68struct Hessian
69{
73 std::array<Jacobian, MaxSize::kDofs> h;
74};
75
77{
78 Vec3 eig_values;
79 Mat3 eig_vectors;
80};
81
83{
84 bool is_singular = false;
85 Real condition_number = 0.0;
86 SingularityEllipsoid ellipsoid = {};
87};
88
90{
91 Mat3Singularity angular;
92 Mat3Singularity linear;
93};
94
104inline size_t jacobian_index(const size_t row, const size_t col)
105{
106 return 6U * col + row;
107}
108
119inline size_t joint_matrix_index(const size_t row, const size_t col, const size_t dofs)
120{
121 return dofs * col + row;
122}
123
132MotionVector jacobian_multiply(
133 const Jacobian& jacobian, const JointSpace& joint_motion, size_t dofs = MaxSize::kDofs);
134
144 const Jacobian& jacobian, const MotionVector& cartesian_motion, size_t dofs = MaxSize::kDofs);
145
157 const Jacobian& jacobian, const MotionVector& cartesian_weights, size_t dofs = MaxSize::kDofs);
158
172 size_t body_index, const BodyTree& body_tree, const BodyCartesianPva& cartesian_pva,
173 Jacobian& jacobian);
174
175JacobianError jacobian_derivative(
176 size_t body_index, const BodyTree& body_tree, const Jacobian& jacobian,
177 const JointSpace& joint_velocity, Jacobian& jacobian_deriv);
178
179Jacobian jacobian_derivative_from_hessian(
180 const Hessian& hessian, const JointSpace& joint_velocity, size_t dofs);
181
182JacobianError calculate_hessian(
183 size_t body_index, const BodyTree& body_tree, const Jacobian& jacobian, Hessian& hessian);
184
185Jacobian hessian_multiply(const Hessian& hessian, const JointSpace& joint_motion, size_t dofs);
186
194JacobianMetrics calculate_jacobian_metrics(const Jacobian& jacobian, size_t dofs = MaxSize::kDofs);
195
200} // namespace fsb
201
202#endif // FSB_JACOBIAN_H
@ SUCCESS
Successful operation.
JointSpace jacobian_transpose_multiply(const Jacobian &jacobian, const MotionVector &cartesian_motion, size_t dofs=MaxSize::kDofs)
Jacobian transpose multiply cartesian motion.
Definition fsb_jacobian.cpp:536
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:119
JointMatrix jacobian_transpose_multiply_jacobian(const Jacobian &jacobian, const MotionVector &cartesian_weights, size_t dofs=MaxSize::kDofs)
Jacobian transpose multiply jacobian.
Definition fsb_jacobian.cpp:554
MotionVector jacobian_multiply(const Jacobian &jacobian, const JointSpace &joint_motion, size_t dofs=MaxSize::kDofs)
Jacobian multiply joint velocity.
Definition fsb_jacobian.cpp:519
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:258
JacobianMetrics calculate_jacobian_metrics(const Jacobian &jacobian, size_t dofs=MaxSize::kDofs)
Calculate Jacobian metrics for a given Jacobian matrix.
Definition fsb_jacobian.cpp:601
size_t jacobian_index(const size_t row, const size_t col)
Helper function for indexing jacobian matrix.
Definition fsb_jacobian.h:104
JacobianError
Error values for Jacobian calculations.
Definition fsb_jacobian.h:28
@ NOT_REVOLUTE_OR_PRISMATIC
Hessian fails since all proximal joints are not revolute or prismatic.
@ BODY_NOT_IN_TREE
Index does not point to an existing body in tree.
Hessian tensor.
Definition fsb_jacobian.h:69
std::array< Jacobian, MaxSize::kDofs > h
Hessian tensor data "pages".
Definition fsb_jacobian.h:73
Definition fsb_jacobian.h:90
Jacobian matrix.
Definition fsb_jacobian.h:47
std::array< Real, 6U *MaxSize::kDofs > j
Jacobian matrix data array.
Definition fsb_jacobian.h:51
Square matrix of size nxn for n joints.
Definition fsb_jacobian.h:58
std::array< Real, MaxSize::kDofs *MaxSize::kDofs > j
Square matrix data array.
Definition fsb_jacobian.h:62
Definition fsb_jacobian.h:83
3x3 matrix
Definition fsb_types.h:59
static constexpr size_t kDofs
Maximum number of degrees of freedom.
Definition fsb_configuration.h:49
Definition fsb_jacobian.h:77
3D vector
Definition fsb_types.h:27