libfranka 0.21.3
FCI C++ API
Loading...
Searching...
No Matches
rate_limiting.h
Go to the documentation of this file.
1// Copyright (c) 2023 Franka Robotics GmbH
2// Use of this source code is governed by the Apache-2.0 license, see LICENSE
3#pragma once
4
5#include <algorithm>
6#include <array>
7#include <cmath>
8#include <limits>
9
16namespace franka {
20constexpr double kDeltaT = 1e-3;
24constexpr double kLimitEps = 1e-3;
28constexpr double kNormEps = std::numeric_limits<double>::epsilon();
35constexpr double kTolNumberPacketsLost = 0.0;
40
44constexpr std::array<double, 7> kMaxTorqueRate{
45 {1000 - kLimitEps, 1000 - kLimitEps, 1000 - kLimitEps, 1000 - kLimitEps, 1000 - kLimitEps,
46 1000 - kLimitEps, 1000 - kLimitEps}};
50constexpr std::array<double, 7> kMaxJointJerk{
51 {5000.0 - kLimitEps, 5000.0 - kLimitEps, 5000.0 - kLimitEps, 5000.0 - kLimitEps,
52 5000.0 - kLimitEps, 5000.0 - kLimitEps, 5000.0 - kLimitEps}};
56constexpr std::array<double, 7> kMaxJointAcceleration{
57 {10.0000 - kLimitEps, 10.0000 - kLimitEps, 10.0000 - kLimitEps, 10.0000 - kLimitEps,
58 10.0000 - kLimitEps, 10.0000 - kLimitEps, 10.0000 - kLimitEps}};
74constexpr double kMaxTranslationalJerk = 4500.0 - kLimitEps;
78constexpr double kMaxTranslationalAcceleration = 9.0000 - kLimitEps;
82constexpr double kMaxTranslationalVelocity =
87constexpr double kMaxRotationalJerk = 8500.0 - kLimitEps;
91constexpr double kMaxRotationalAcceleration = 17.0000 - kLimitEps;
95constexpr double kMaxRotationalVelocity =
100constexpr double kMaxElbowJerk = 5000 - kLimitEps;
104constexpr double kMaxElbowAcceleration = 10.0000 - kLimitEps;
105
109constexpr double kMaxElbowVelocity =
111
116
131[[deprecated(
132 "Use Robot::getUpperJointVelocityLimits(const std::array<double, 7UL> &joint_positions) "
133 "instead with system images >= 5.9.0.")]] inline std::array<double, 7>
135 const std::array<double, 7>& q) { // NOLINT(readability-identifier-length)
136 return std::array<double, 7>{
137 std::min(2.62, std::max(0.0, -0.30 + std::sqrt(std::max(0.0, 12.0 * (2.75010 - q[0]))))) -
139 std::min(2.62, std::max(0.0, -0.20 + std::sqrt(std::max(0.0, 5.17 * (1.79180 - q[1]))))) -
141 std::min(2.62, std::max(0.0, -0.20 + std::sqrt(std::max(0.0, 7.00 * (2.90650 - q[2]))))) -
143 std::min(2.62, std::max(0.0, -0.30 + std::sqrt(std::max(0.0, 8.00 * (-0.1458 - q[3]))))) -
145 std::min(5.26, std::max(0.0, -0.35 + std::sqrt(std::max(0.0, 34.0 * (2.81010 - q[4]))))) -
147 std::min(4.18, std::max(0.0, -0.35 + std::sqrt(std::max(0.0, 11.0 * (4.52050 - q[5]))))) -
149 std::min(5.26, std::max(0.0, -0.35 + std::sqrt(std::max(0.0, 34.0 * (3.01960 - q[6]))))) -
151 };
152}
153
168[[deprecated(
169 "Use Robot::getlowerJointVelocityLimits(const std::array<double, 7UL> &joint_positions) "
170 "instead with system images >= 5.9.0.")]] inline std::array<double, 7>
172 const std::array<double, 7>& q) { // NOLINT(readability-identifier-length)
173 return std::array<double, 7>{
174 std::max(-2.62, std::min(0.0, 0.30 - std::sqrt(std::max(0.0, 12.0 * (2.750100 + q[0]))))) +
176 std::max(-2.62, std::min(0.0, 0.20 - std::sqrt(std::max(0.0, 5.17 * (1.791800 + q[1]))))) +
178 std::max(-2.62, std::min(0.0, 0.20 - std::sqrt(std::max(0.0, 7.00 * (2.906500 + q[2]))))) +
180 std::max(-2.62, std::min(0.0, 0.30 - std::sqrt(std::max(0.0, 8.00 * (3.048100 + q[3]))))) +
182 std::max(-5.26, std::min(0.0, 0.35 - std::sqrt(std::max(0.0, 34.0 * (2.810100 + q[4]))))) +
184 std::max(-4.18, std::min(0.0, 0.35 - std::sqrt(std::max(0.0, 11.0 * (-0.54092 + q[5]))))) +
186 std::max(-5.26, std::min(0.0, 0.35 - std::sqrt(std::max(0.0, 34.0 * (3.019600 + q[6]))))) +
188 };
189}
190
206std::array<double, 7> limitRate(const std::array<double, 7>& max_derivatives,
207 const std::array<double, 7>& commanded_values,
208 const std::array<double, 7>& last_commanded_values);
209
228double limitRate(double upper_limits_velocity,
229 double lower_limits_velocity,
230 double max_acceleration,
231 double max_jerk,
232 double commanded_velocity,
233 double last_commanded_velocity,
234 double last_commanded_acceleration);
235
255double limitRate(double upper_limits_velocity,
256 double lower_limits_velocity,
257 double max_acceleration,
258 double max_jerk,
259 double commanded_position,
260 double last_commanded_position,
261 double last_commanded_velocity,
262 double last_commanded_acceleration);
263
282std::array<double, 7> limitRate(const std::array<double, 7>& upper_limits_velocity,
283 const std::array<double, 7>& lower_limits_velocity,
284 const std::array<double, 7>& max_acceleration,
285 const std::array<double, 7>& max_jerk,
286 const std::array<double, 7>& commanded_velocities,
287 const std::array<double, 7>& last_commanded_velocities,
288 const std::array<double, 7>& last_commanded_accelerations);
289
309std::array<double, 7> limitRate(const std::array<double, 7>& upper_limits_velocity,
310 const std::array<double, 7>& lower_limits_velocity,
311 const std::array<double, 7>& max_acceleration,
312 const std::array<double, 7>& max_jerk,
313 const std::array<double, 7>& commanded_positions,
314 const std::array<double, 7>& last_commanded_positions,
315 const std::array<double, 7>& last_commanded_velocities,
316 const std::array<double, 7>& last_commanded_accelerations);
317
338std::array<double, 6> limitRate(
339 double max_translational_velocity,
340 double max_translational_acceleration,
341 double max_translational_jerk,
342 double max_rotational_velocity,
343 double max_rotational_acceleration,
344 double max_rotational_jerk,
345 const std::array<double, 6>& O_dP_EE_c, // NOLINT(readability-identifier-naming)
346 const std::array<double, 6>& last_O_dP_EE_c, // NOLINT(readability-identifier-naming)
347 const std::array<double, 6>& last_O_ddP_EE_c); // NOLINT(readability-identifier-naming)
348
370std::array<double, 16> limitRate(
371 double max_translational_velocity,
372 double max_translational_acceleration,
373 double max_translational_jerk,
374 double max_rotational_velocity,
375 double max_rotational_acceleration,
376 double max_rotational_jerk,
377 const std::array<double, 16>& O_T_EE_c, // NOLINT(readability-identifier-naming)
378 const std::array<double, 16>& last_O_T_EE_c, // NOLINT(readability-identifier-naming)
379 const std::array<double, 6>& last_O_dP_EE_c, // NOLINT(readability-identifier-naming)
380 const std::array<double, 6>& last_O_ddP_EE_c); // NOLINT(readability-identifier-naming)
381
382} // namespace franka
std::array< double, 7 > computeLowerLimitsJointVelocity(const std::array< double, 7 > &q)
Computes the minimum joint velocity based on joint position.
Definition rate_limiting.h:171
constexpr double kFactorCartesianRotationPoseInterface
Factor for the definition of rotational limits using the Cartesian Pose interface.
Definition rate_limiting.h:39
constexpr double kDeltaT
Sample time constant.
Definition rate_limiting.h:20
constexpr double kMaxRotationalJerk
Maximum rotational jerk.
Definition rate_limiting.h:87
constexpr double kMaxElbowVelocity
Maximum elbow velocity.
Definition rate_limiting.h:109
constexpr double kMaxTranslationalAcceleration
Maximum translational acceleration.
Definition rate_limiting.h:78
constexpr std::array< double, 7 > kJointVelocityLimitsTolerance
Tolerance value for joint velocity limits to deal with numerical errors and data losses.
Definition rate_limiting.h:62
constexpr double kNormEps
Epsilon value for limiting Cartesian accelerations/jerks or not.
Definition rate_limiting.h:28
constexpr double kMaxTranslationalJerk
Maximum translational jerk.
Definition rate_limiting.h:74
constexpr double kMaxRotationalAcceleration
Maximum rotational acceleration.
Definition rate_limiting.h:91
constexpr std::array< double, 7 > kMaxJointJerk
Maximum joint jerk.
Definition rate_limiting.h:50
constexpr double kMinElbowVelocity
Minimum elbow velocity.
Definition rate_limiting.h:115
constexpr double kTolNumberPacketsLost
Number of packets lost considered for the definition of velocity limits.
Definition rate_limiting.h:35
constexpr std::array< double, 7 > kMaxTorqueRate
Maximum torque rate.
Definition rate_limiting.h:44
std::array< double, 7 > limitRate(const std::array< double, 7 > &max_derivatives, const std::array< double, 7 > &commanded_values, const std::array< double, 7 > &last_commanded_values)
Limits the rate of an input vector of per-joint commands considering the maximum allowed time derivat...
constexpr std::array< double, 7 > kMaxJointAcceleration
Maximum joint acceleration.
Definition rate_limiting.h:56
constexpr double kMaxTranslationalVelocity
Maximum translational velocity.
Definition rate_limiting.h:82
constexpr double kLimitEps
Epsilon value for checking limits.
Definition rate_limiting.h:24
constexpr double kMaxRotationalVelocity
Maximum rotational velocity.
Definition rate_limiting.h:95
std::array< double, 7 > computeUpperLimitsJointVelocity(const std::array< double, 7 > &q)
Computes the maximum joint velocity based on joint position.
Definition rate_limiting.h:134
constexpr double kMaxElbowJerk
Maximum elbow jerk.
Definition rate_limiting.h:100
constexpr double kMaxElbowAcceleration
Maximum elbow acceleration.
Definition rate_limiting.h:104