FancySafeBot 0.0.1
A safe robotics library
Loading...
Searching...
No Matches
fsb_inverse_kinematics.h
1//
2// Created by Kyle Chisholm on 2025-05-16.
3//
4
5#ifndef FSB_INVERSE_KINEMATICS_H
6#define FSB_INVERSE_KINEMATICS_H
7
8#include <array>
9#include <cstddef>
10#include <cstdint>
11#include "fsb_body.h"
12#include "fsb_body_tree.h"
13#include "fsb_configuration.h"
14#include "fsb_motion.h"
15#include "fsb_joint.h"
16#include "fsb_types.h"
17#include "fsb_jacobian.h"
18#include "fsb_linalg.h"
19
20namespace fsb
21{
22
38
39enum class InverseKinematicsInfo : uint8_t
40{
41 INVALID_INPUT = 0,
42 SUCCESS = 1,
43 WITHIN_FTOL = 2,
45 WITHIN_XTOL = 3,
49};
50
61
62inline OptimParameters default_optim_parameters()
63{
64 return {
65 100U, // max iterations
66 1.0e-12, // objective tolerance
67 1.0e-12, // f tolerance
68 0.001,
69 {{1.0, 1.0, 1.0}, {1.0, 1.0, 1.0}}
70 };
71}
72
84InverseKinematicsResult compute_inverse_kinematics(
85 const BodyTree& body_tree, const OptimParameters& params,
86 const JointSpacePosition& initial_config, size_t body_index, const Transform& target_pose,
87 const Transform& base_pose = transform_identity());
88
101FsbLinalgErrorType inverse_velocity_kinematics(
102 const Jacobian& jacobian, const MotionVector& cart_velocity, size_t dofs,
103 JointSpace& joint_velocity);
104
114FsbLinalgErrorType inverse_acceleration_kinematics(
115 const Jacobian& jacobian, const Jacobian& jacobian_derivative,
116 const MotionVector& cart_acceleration, const JointSpace& joint_velocity, size_t dofs,
117 JointSpace& joint_acceleration);
118
123} // namespace fsb
124
125#endif // FSB_INVERSE_KINEMATICS_H
BodyCartesianPva body_poses
Body poses.
Definition fsb_inverse_kinematics.h:55
InverseKinematicsResult compute_inverse_kinematics(const BodyTree &body_tree, const OptimParameters &params, const JointSpacePosition &initial_config, size_t body_index, const Transform &target_pose, const Transform &base_pose=transform_identity())
Compute inverse kinematics for a given end-effector pose.
Definition fsb_inverse_kinematics.cpp:162
real_t state_tol
State vector error tolerance for convergence.
Definition fsb_inverse_kinematics.h:34
InverseKinematicsInfo
Definition fsb_inverse_kinematics.h:40
real_t damping_factor
Damping factor for Levenberg-Marquardt algorithm.
Definition fsb_inverse_kinematics.h:35
MotionVector error_pose
Error between computed and desired pose.
Definition fsb_inverse_kinematics.h:58
Transform computed_pose
Computed end-effector pose.
Definition fsb_inverse_kinematics.h:57
size_t max_iterations
Maximum number of iterations.
Definition fsb_inverse_kinematics.h:32
MotionVector objective_weights
Cartesian weights for objective function.
Definition fsb_inverse_kinematics.h:36
size_t iterations
Number of iterations.
Definition fsb_inverse_kinematics.h:59
JointSpacePosition joint_position
Joint position.
Definition fsb_inverse_kinematics.h:54
real_t objective_tol
Objective function error tolerance for convergence.
Definition fsb_inverse_kinematics.h:33
InverseKinematicsInfo info
Convergence information.
Definition fsb_inverse_kinematics.h:53
Jacobian jacobian
Jacobian matrix.
Definition fsb_inverse_kinematics.h:56
@ WITHIN_XTOL
relative error between two consecutive iterates is at most xtol
@ WITHIN_FTOL_XTOL
conditions for WITHIN_FTOL and WITHIN_XTOL both hold
@ MAXIMUM_EVALUATIONS_REACHED
number of calls to fcn with iflag = 1 has reached maxfev
@ SINGULAR_UPDATE_MATRIX
singular matrix encountered
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
enum FsbLapackErrorType FsbLinalgErrorType
Error codes for linear algebra functions.
Transform transform_identity()
Identity transform.
Definition fsb_motion.cpp:12
Container of Cartesian pose, velocity, and acceleration for a list of bodies.
Definition fsb_body.h:79
Definition fsb_inverse_kinematics.h:52
Jacobian matrix.
Definition fsb_jacobian.h:43
Joint space position in generalized coordinates.
Definition fsb_joint.h:55
Motion vector.
Definition fsb_motion.h:37
Definition fsb_inverse_kinematics.h:31
Coordinate transform.
Definition fsb_motion.h:22