Control Libraries 7.4.0
Loading...
Searching...
No Matches
CartesianAcceleration.cpp
1#include "state_representation/space/cartesian/CartesianAcceleration.hpp"
2#include "state_representation/exceptions/EmptyStateException.hpp"
3
4using namespace state_representation::exceptions;
5
6namespace state_representation {
7
9 this->set_type(StateType::CARTESIAN_ACCELERATION);
10}
11
12CartesianAcceleration::CartesianAcceleration(const std::string& name, const std::string& reference) :
13 CartesianState(name, reference) {
14 this->set_type(StateType::CARTESIAN_ACCELERATION);
15}
16
18 const std::string& name, const Eigen::Vector3d& linear_acceleration, const std::string& reference
19) : CartesianState(name, reference) {
20 this->set_type(StateType::CARTESIAN_ACCELERATION);
21 this->set_linear_acceleration(linear_acceleration);
22}
23
25 const std::string& name, const Eigen::Vector3d& linear_acceleration, const Eigen::Vector3d& angular_acceleration,
26 const std::string& reference
27) : CartesianState(name, reference) {
28 this->set_type(StateType::CARTESIAN_ACCELERATION);
29 this->set_linear_acceleration(linear_acceleration);
30 this->set_angular_acceleration(angular_acceleration);
31}
32
34 const std::string& name, const Eigen::Matrix<double, 6, 1>& acceleration, const std::string& reference
35) : CartesianState(name, reference) {
36 this->set_type(StateType::CARTESIAN_ACCELERATION);
37 this->set_acceleration(acceleration);
38}
39
41 this->set_type(StateType::CARTESIAN_ACCELERATION);
42 if (state) {
43 this->set_zero();
45 }
46}
47
50
52 CartesianAcceleration(twist / std::chrono::seconds(1)) {}
53
54CartesianAcceleration CartesianAcceleration::Zero(const std::string& name, const std::string& reference) {
55 return CartesianState::Identity(name, reference);
56}
57
58CartesianAcceleration CartesianAcceleration::Random(const std::string& name, const std::string& reference) {
59 // separating in the two lines in needed to avoid compilation error due to ambiguous constructor call
60 Eigen::Matrix<double, 6, 1> random = Eigen::Matrix<double, 6, 1>::Random();
61 return CartesianAcceleration(name, random, reference);
62}
63
64Eigen::VectorXd CartesianAcceleration::data() const {
65 return this->get_acceleration();
66}
67
68void CartesianAcceleration::set_data(const Eigen::VectorXd& data) {
69 if (data.size() != 6) {
71 "Input is of incorrect size: expected 6, given " + std::to_string(data.size()));
72 }
73 this->set_acceleration(data);
74}
75
76void CartesianAcceleration::set_data(const std::vector<double>& data) {
77 this->set_data(Eigen::VectorXd::Map(data.data(), data.size()));
78}
79
81 double max_linear, double max_angular, double linear_noise_ratio, double angular_noise_ratio
82) {
83 // clamp linear
84 this->clamp_state_variable(max_linear, CartesianStateVariable::LINEAR_ACCELERATION, linear_noise_ratio);
85 // clamp angular
86 this->clamp_state_variable(max_angular, CartesianStateVariable::ANGULAR_ACCELERATION, angular_noise_ratio);
87}
88
90 double max_linear, double max_angular, double linear_noise_ratio, double angular_noise_ratio
91) const {
92 CartesianAcceleration result(*this);
93 result.clamp(max_linear, max_angular, linear_noise_ratio, angular_noise_ratio);
94 return result;
95}
96
98 CartesianAcceleration result(*this);
99 return result;
100}
101
105
106CartesianAcceleration CartesianAcceleration::normalized(const CartesianStateVariable& state_variable_type) const {
107 return CartesianState::normalized(state_variable_type);
108}
109
110std::vector<double> CartesianAcceleration::norms(const CartesianStateVariable& state_variable_type) const {
111 return CartesianState::norms(state_variable_type);
112}
113
114CartesianAcceleration& CartesianAcceleration::operator*=(double lambda) {
115 this->CartesianState::operator*=(lambda);
116 return (*this);
117}
118
120 return this->CartesianState::operator*(lambda);
121}
122
123CartesianAcceleration operator*(double lambda, const CartesianAcceleration& acceleration) {
124 return acceleration * lambda;
125}
126
127CartesianAcceleration operator*(const Eigen::Matrix<double, 6, 6>& lambda, const CartesianAcceleration& acceleration) {
128 CartesianAcceleration result(acceleration);
129 result.set_acceleration(lambda * result.get_acceleration());
130 return result;
131}
132
133CartesianTwist CartesianAcceleration::operator*(const std::chrono::nanoseconds& dt) const {
134 // operations
135 CartesianTwist twist(this->get_name(), this->get_reference_frame());
136 // convert the period to a double with the second as reference
137 double period = dt.count();
138 period /= 1e9;
139 // convert the acceleration into a twist
140 twist.set_linear_velocity(period * this->get_linear_acceleration());
141 twist.set_angular_velocity(period * this->get_angular_acceleration());
142 return twist;
143}
144
145CartesianTwist operator*(const std::chrono::nanoseconds& dt, const CartesianAcceleration& acceleration) {
146 return acceleration * dt;
147}
148
150 this->CartesianState::operator/=(lambda);
151 return (*this);
152}
153
155 return this->CartesianState::operator/(lambda);
156}
157
158CartesianAcceleration& CartesianAcceleration::operator+=(const CartesianAcceleration& acceleration) {
159 this->CartesianState::operator+=(acceleration);
160 return (*this);
161}
162
163CartesianAcceleration& CartesianAcceleration::operator+=(const CartesianState& state) {
164 this->CartesianState::operator+=(state);
165 return (*this);
166}
167
168CartesianAcceleration CartesianAcceleration::operator+(const CartesianAcceleration& acceleration) const {
169 return this->CartesianState::operator+(acceleration);
170}
171
172CartesianState CartesianAcceleration::operator+(const CartesianState& state) const {
173 return this->CartesianState::operator+(state);
174}
175
179
180CartesianAcceleration& CartesianAcceleration::operator-=(const CartesianAcceleration& acceleration) {
181 this->CartesianState::operator-=(acceleration);
182 return (*this);
183}
184
185CartesianAcceleration& CartesianAcceleration::operator-=(const CartesianState& state) {
186 this->CartesianState::operator-=(state);
187 return (*this);
188}
189
191 return this->CartesianState::operator-(acceleration);
192}
193
197
198std::ostream& operator<<(std::ostream& os, const CartesianAcceleration& acceleration) {
199 os << acceleration.to_string();
200 return os;
201}
202
203}// namespace state_representation
Class to define acceleration in Cartesian space as 3D linear and angular acceleration vectors.
void clamp(double max_linear, double max_angular, double linear_noise_ratio=0, double angular_noise_ratio=0)
Clamp inplace the magnitude of the acceleration to the values in argument.
CartesianAcceleration copy() const
Return a copy of the Cartesian acceleration.
CartesianAcceleration & operator/=(double lambda)
Scale inplace by a scalar.
CartesianAcceleration clamped(double max_linear, double max_angular, double noise_ratio=0, double angular_noise_ratio=0) const
Return the clamped twist.
Eigen::VectorXd data() const override
Returns the acceleration data as an Eigen vector.
static CartesianAcceleration Zero(const std::string &name, const std::string &reference="world")
Constructor for the zero acceleration.
friend CartesianAcceleration operator*(double lambda, const CartesianAcceleration &acceleration)
Scale a Cartesian acceleration by a scalar.
static CartesianAcceleration Random(const std::string &name, const std::string &reference="world")
Constructor for a random acceleration.
CartesianAcceleration operator-() const
Negate a Cartesian acceleration.
std::vector< double > norms(const CartesianStateVariable &state_variable_type=CartesianStateVariable::ACCELERATION) const override
Compute the norms of the state variable specified by the input type (default is full acceleration)
CartesianAcceleration operator/(double lambda) const
Scale a Cartesian acceleration by a scalar.
CartesianAcceleration inverse() const
Compute the inverse of the current Cartesian acceleration.
void set_data(const Eigen::VectorXd &data) override
Set the acceleration data from an Eigen vector.
CartesianAcceleration normalized(const CartesianStateVariable &state_variable_type=CartesianStateVariable::ACCELERATION) const
Compute the normalized acceleration at the state variable given in argument (default is full accelera...
Class to represent a state in Cartesian space.
void set_zero()
Set the State to a zero value.
void set_acceleration(const Eigen::Matrix< double, 6, 1 > &acceleration)
Setter of the linear and angular acceleration from a 6d acceleration vector.
CartesianState inverse() const
Compute the inverse of the current Cartesian state.
void set_angular_acceleration(const Eigen::Vector3d &angular_acceleration)
Setter of the angular velocity attribute.
virtual std::vector< double > norms(const CartesianStateVariable &state_variable_type=CartesianStateVariable::ALL) const
Compute the norms of the state variable specified by the input type. Default is full state.
CartesianState normalized(const CartesianStateVariable &state_variable_type=CartesianStateVariable::ALL) const
Compute the normalized state at the state variable given in argument. Default is full state.
static CartesianState Identity(const std::string &name, const std::string &reference="world")
Constructor for the identity Cartesian state (identity pose and 0 for the rest)
CartesianState & operator/=(double lambda)
Scale inplace by a scalar.
const Eigen::Vector3d & get_linear_acceleration() const
Getter of the linear acceleration attribute.
void set_linear_acceleration(const Eigen::Vector3d &linear_acceleration)
Setter of the linear acceleration attribute.
std::string to_string() const override
Convert the state to its string representation.
CartesianState & operator+=(const CartesianState &state)
Add inplace another Cartesian state.
CartesianState operator-() const
Negate a Cartesian state.
CartesianState & operator-=(const CartesianState &state)
Compute inplace the difference with another Cartesian state.
CartesianState & operator*=(const CartesianState &state)
Transform inplace a Cartesian state into the current reference frame.
const Eigen::Vector3d & get_angular_acceleration() const
Getter of the angular acceleration attribute.
CartesianState operator/(double lambda) const
Scale a Cartesian state by a scalar.
void set_linear_velocity(const Eigen::Vector3d &linear_velocity)
Setter of the linear velocity attribute.
void set_angular_velocity(const Eigen::Vector3d &angular_velocity)
Setter of the angular velocity attribute.
friend CartesianState operator*(double lambda, const CartesianState &state)
Scale a Cartesian state by a scalar.
Eigen::Matrix< double, 6, 1 > get_acceleration() const
Getter of the 6d acceleration from linear and angular acceleration attributes.
CartesianState operator+(const CartesianState &state) const
Add another Cartesian state.
Class to define twist in Cartesian space as 3D linear and angular velocity vectors.
const std::string & get_reference_frame() const
Getter of the reference frame as const reference.
const std::string & get_name() const
Getter of the name attribute.
Definition State.cpp:29
void set_type(const StateType &type)
Setter of the state type attribute.
Definition State.cpp:41
Core state variables and objects.
std::ostream & operator<<(std::ostream &os, const AnalogIOState &state)
CartesianAcceleration operator*(double lambda, const CartesianAcceleration &acceleration)