Franky 1.1.0
A High-Level Motion API for Franka
Loading...
Searching...
No Matches
dynamics_limit.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <functional>
4#include <memory>
5#include <mutex>
6#include <sstream>
7#include <stdexcept>
8#include <string>
9#include <utility>
10
11namespace franky {
12
22template <typename LimitType>
24 public:
40 const std::string &desc, const LimitType &max_val, const std::shared_ptr<std::mutex> &write_mutex,
41 const std::function<bool()> &can_write_condition)
42 : DynamicsLimit(desc, max_val, write_mutex, can_write_condition, max_val) {}
43
60 std::string desc, const LimitType &max_val, const std::shared_ptr<std::mutex> &write_mutex,
61 const std::function<bool()> &can_write_condition, const LimitType &default_val)
62 : max(max_val),
63 desc(std::move(desc)),
64 write_mutex_(write_mutex),
65 value_(default_val),
66 can_write_condition_(can_write_condition) {}
67
77 template <typename AlternativeType>
78 void setFrom(const AlternativeType &value);
79
92 void set(const LimitType &value) {
93 std::unique_lock lock(*write_mutex_);
94 if (!can_write_condition_()) {
95 std::stringstream ss;
96 ss << "Cannot set " << desc << " limit while robot is in control.";
97 throw std::runtime_error(ss.str());
98 }
99 check(value);
100 value_ = value;
101 }
102
110 [[nodiscard]] LimitType get() const { return value_; }
111
118 const LimitType max;
119
126 const std::string desc;
127
128 template <typename LimitTypeStream>
129 friend std::ostream &operator<<(std::ostream &os, const DynamicsLimit<LimitTypeStream> &dynamics_limit);
130
131 private:
140 void check(const LimitType &value) const;
141
142 std::shared_ptr<std::mutex> write_mutex_;
143 LimitType value_;
144 std::function<bool()> can_write_condition_;
145};
146
147template <typename LimitTypeStream>
148std::ostream &operator<<(std::ostream &os, const DynamicsLimit<LimitTypeStream> &dynamics_limit) {
149 os << dynamics_limit.value_ << " (max: " << dynamics_limit.max << ")";
150 return os;
151}
152
153} // namespace franky
A template class representing a dynamics limit with a maximum value.
Definition dynamics_limit.hpp:23
void set(const LimitType &value)
Set a new value for the limit.
Definition dynamics_limit.hpp:92
friend std::ostream & operator<<(std::ostream &os, const DynamicsLimit< LimitTypeStream > &dynamics_limit)
Definition dynamics_limit.hpp:148
DynamicsLimit(const std::string &desc, const LimitType &max_val, const std::shared_ptr< std::mutex > &write_mutex, const std::function< bool()> &can_write_condition)
Constructor for DynamicsLimit.
Definition dynamics_limit.hpp:39
LimitType get() const
Get the current value of the limit.
Definition dynamics_limit.hpp:110
const std::string desc
Description of this limit.
Definition dynamics_limit.hpp:126
const LimitType max
The maximum value this limit can take as defined by Franka.
Definition dynamics_limit.hpp:118
void setFrom(const AlternativeType &value)
Set a new value for the limit with a different type.
DynamicsLimit(std::string desc, const LimitType &max_val, const std::shared_ptr< std::mutex > &write_mutex, const std::function< bool()> &can_write_condition, const LimitType &default_val)
Constructor for DynamicsLimit.
Definition dynamics_limit.hpp:59
Definition dynamics_limit.cpp:8
std::ostream & operator<<(std::ostream &os, const DynamicsLimit< Vector7d > &limit)
Definition dynamics_limit.cpp:47