franky 1.1.4
A High-Level Motion API for Franka
Loading...
Searching...
No Matches
joint_impedance_base.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <memory>
4#include <optional>
5
9#include "franky/types.hpp"
11
12namespace franky {
13
14inline Vector7d defaultJointImpedanceStiffness() { return Vector7d::Constant(50.0); }
15
16inline Vector7d defaultJointImpedanceDamping(const Vector7d &stiffness) { return 2.0 * stiffness.cwiseSqrt(); }
17
21
29 Vector7d q{Vector7d::Zero()};
30 Vector7d dq{Vector7d::Zero()};
31 Vector7d tau_ff{Vector7d::Zero()};
32
34 void validate() const {
35 validateFinite(q, "q");
36 validateFinite(dq, "dq");
37 validateFinite(tau_ff, "tau_ff");
38 }
39};
40
43
45 const std::optional<Vector7d> &stiffness, const std::optional<Vector7d> &damping = std::nullopt)
48 validate();
49 }
50
53
55 void validate() const {
58 }
59};
60
67
70
72 Vector7d error_clip{Vector7d::Constant(0.5)};
73
76
79
82
85
87 std::optional<CartesianImpedanceGains> cartesian_gains{std::nullopt};
88
90 void validate() const {
94 if (cartesian_gains.has_value()) {
95 cartesian_gains->validate();
96 }
98 }
99};
100
108class JointImpedanceBase : public Motion<franka::Torques> {
109 public:
110 [[nodiscard]] const Vector7d &target() const { return target_; }
111 [[nodiscard]] const Vector7d &target_velocity() const { return target_velocity_; }
112 [[nodiscard]] const JointImpedanceParams &params() const { return params_; }
113
114 void setGains(const JointImpedanceGains &gains) {
115 gains.validate();
116 gains_handle_.set(gains);
117 }
118 [[nodiscard]] JointImpedanceGains getGains() const { return gains_handle_.getLastWritten(); }
119
121 gains.validate();
122 cartesian_gains_handle_.set(gains);
123 }
124 [[nodiscard]] CartesianImpedanceGains getCartesianGains() const { return cartesian_gains_handle_.getLastWritten(); }
125
126 protected:
127 explicit JointImpedanceBase(
129 double gains_time_constant = 0.1);
130
131 [[nodiscard]] franka::Torques computeCommand(
132 const RobotState &robot_state, const JointReference &reference, double dt);
133
137
138 private:
139 struct CartesianShapingState {
140 Matrix6d stiffness;
141 Matrix6d damping; // always concrete, interpolated
142 Matrix6d critical_damping; // cached critical(stiffness)
143 std::optional<Matrix6d> critical_damping_stiffness; // stiffness the cache was computed for
144 };
145
146 // Critical damping for the shaping stiffness; recomputes the eigendecomposition only while the
147 // stiffness moves and caches it otherwise.
148 static const Matrix6d &criticalShapingDamping(CartesianShapingState &shaping);
149
151 WaitFreeTripleBuffer<CartesianImpedanceGains> cartesian_gains_handle_;
152 double gains_time_constant_;
153 Vector7d current_stiffness_;
154 Vector7d current_damping_;
155 std::optional<CartesianShapingState> cartesian_shaping_;
156};
157
158} // namespace franky
Base class for client-side joint impedance motions.
Definition joint_impedance_base.hpp:108
void setCartesianGains(const CartesianImpedanceGains &gains)
Definition joint_impedance_base.hpp:120
Vector7d target_
Definition joint_impedance_base.hpp:135
franka::Torques computeCommand(const RobotState &robot_state, const JointReference &reference, double dt)
Definition joint_impedance_base.cpp:45
JointImpedanceParams params_
Definition joint_impedance_base.hpp:134
void setGains(const JointImpedanceGains &gains)
Definition joint_impedance_base.hpp:114
const Vector7d & target_velocity() const
Definition joint_impedance_base.hpp:111
const Vector7d & target() const
Definition joint_impedance_base.hpp:110
const JointImpedanceParams & params() const
Definition joint_impedance_base.hpp:112
Vector7d target_velocity_
Definition joint_impedance_base.hpp:136
JointImpedanceGains getGains() const
Definition joint_impedance_base.hpp:118
CartesianImpedanceGains getCartesianGains() const
Definition joint_impedance_base.hpp:124
Base class for motions.
Definition motion.hpp:25
Wait-free, Single-Producer Single-Consumer (SPSC) triple buffer.
Definition wait_free_triple_buffer.hpp:17
Definition dynamics_limit.cpp:8
Vector7d defaultJointImpedanceDamping()
Definition joint_impedance_base.hpp:18
Eigen::Vector< double, 7 > Vector7d
Definition types.hpp:11
void validateNonNegativeFinite(double value, const char *name)
Throw std::invalid_argument if value is negative or non-finite.
Definition torque_control_utils.hpp:16
Eigen::Matrix< double, 6, 6 > Matrix6d
Definition types.hpp:14
void validateFinite(const Eigen::MatrixBase< Derived > &values, const char *name)
Throw std::invalid_argument if any element of values is non-finite.
Definition torque_control_utils.hpp:26
Vector7d defaultJointImpedanceStiffness()
Definition joint_impedance_base.hpp:14
Definition cartesian_impedance_base.hpp:65
void validate() const
Throw std::invalid_argument if any gain is non-finite.
Definition cartesian_impedance_base.hpp:100
Definition torque_control_utils.hpp:66
void validate() const
Throw std::invalid_argument if any parameter is out of range.
Definition torque_control_utils.hpp:92
Definition joint_impedance_base.hpp:41
void validate() const
Throw std::invalid_argument if any gain is negative or non-finite.
Definition joint_impedance_base.hpp:55
Vector7d damping
Definition joint_impedance_base.hpp:52
JointImpedanceGains(const std::optional< Vector7d > &stiffness, const std::optional< Vector7d > &damping=std::nullopt)
Definition joint_impedance_base.hpp:44
Vector7d stiffness
Definition joint_impedance_base.hpp:51
Parameters for joint impedance motions.
Definition joint_impedance_base.hpp:64
bool compensate_coriolis
Definition joint_impedance_base.hpp:78
Vector7d error_clip
Definition joint_impedance_base.hpp:72
void validate() const
Throw std::invalid_argument if any parameter is out of range.
Definition joint_impedance_base.hpp:90
FrictionCompensationParams friction
Definition joint_impedance_base.hpp:84
Vector7d stiffness
Definition joint_impedance_base.hpp:66
Vector7d constant_torque_offset
Definition joint_impedance_base.hpp:75
Vector7d damping
Definition joint_impedance_base.hpp:69
std::optional< CartesianImpedanceGains > cartesian_gains
Definition joint_impedance_base.hpp:87
TorqueSafetyParams safety
Definition joint_impedance_base.hpp:81
Joint-space reference for joint impedance motions.
Definition joint_impedance_base.hpp:28
Vector7d dq
Definition joint_impedance_base.hpp:30
Vector7d tau_ff
Definition joint_impedance_base.hpp:31
Vector7d q
Definition joint_impedance_base.hpp:29
void validate() const
Throw std::invalid_argument if any value is non-finite.
Definition joint_impedance_base.hpp:34
Full state of the robot.
Definition robot_state.hpp:40
Definition torque_control_utils.hpp:43