Control Libraries 6.3.4
Loading...
Searching...
No Matches
encoders.cpp
1#include "clproto/encoders.h"
2
3using namespace state_representation;
4
5namespace clproto {
6
7google::protobuf::RepeatedField<double> matrix_encoder(const Eigen::MatrixXd& matrix) {
8 return encoder(std::vector<double>{matrix.data(), matrix.data() + matrix.size()});
9}
10
11proto::StateType encoder(const StateType& type) {
12 return static_cast<proto::StateType>(type);
13}
14
15proto::State encoder(const State& state) {
16 proto::State message;
17 message.set_name(state.get_name());
18 message.set_type(encoder(state.get_type()));
19 message.set_empty(state.is_empty());
20 auto timestamp = std::chrono::duration_cast<timestamp_duration_t>(state.get_timestamp().time_since_epoch());
21 message.set_timestamp(timestamp.count());
22 return message;
23}
24
25proto::SpatialState encoder(const SpatialState& spatial_state) {
26 proto::SpatialState message;
27 *message.mutable_state() = encoder(static_cast<State>(spatial_state));
28 message.set_reference_frame(spatial_state.get_reference_frame());
29 return message;
30}
31
32proto::Vector3d encoder(const Eigen::Vector3d& vector) {
33 proto::Vector3d message;
34 message.set_x(vector.x());
35 message.set_y(vector.y());
36 message.set_z(vector.z());
37 return message;
38}
39
40proto::Quaterniond encoder(const Eigen::Quaterniond& quaternion) {
41 proto::Quaterniond message;
42 message.set_w(quaternion.w());
43 *message.mutable_vec() = encoder(Eigen::Vector3d(quaternion.vec()));
44 return message;
45}
46
47proto::CartesianState encoder(const CartesianState& cartesian_state) {
48 proto::CartesianState message;
49 *message.mutable_spatial_state() = encoder(static_cast<SpatialState>(cartesian_state));
50 if (cartesian_state.is_empty()) {
51 return message;
52 }
53 *message.mutable_position() = encoder(cartesian_state.get_position());
54 *message.mutable_orientation() = encoder(cartesian_state.get_orientation());
55 *message.mutable_linear_velocity() = encoder(cartesian_state.get_linear_velocity());
56 *message.mutable_angular_velocity() = encoder(cartesian_state.get_angular_velocity());
57 *message.mutable_linear_acceleration() = encoder(cartesian_state.get_linear_acceleration());
58 *message.mutable_angular_acceleration() = encoder(cartesian_state.get_angular_acceleration());
59 *message.mutable_force() = encoder(cartesian_state.get_force());
60 *message.mutable_torque() = encoder(cartesian_state.get_torque());
61 return message;
62}
63
64proto::Jacobian encoder(const Jacobian& jacobian) {
65 proto::Jacobian message;
66 *message.mutable_state() = encoder(static_cast<State>(jacobian));
67 if (jacobian.is_empty()) {
68 return message;
69 }
70 *message.mutable_joint_names() = {jacobian.get_joint_names().begin(), jacobian.get_joint_names().end()};
71 message.set_frame(jacobian.get_frame());
72 message.set_reference_frame(jacobian.get_reference_frame());
73 message.set_rows(jacobian.rows());
74 message.set_cols(jacobian.cols());
75 *message.mutable_data() = matrix_encoder(jacobian.data());
76 return message;
77}
78
79proto::JointState encoder(const JointState& joint_state) {
80 proto::JointState message;
81 *message.mutable_state() = encoder(static_cast<State>(joint_state));
82 if (joint_state.is_empty()) {
83 return message;
84 }
85 *message.mutable_joint_names() = {joint_state.get_names().begin(), joint_state.get_names().end()};
86 *message.mutable_positions() = matrix_encoder(joint_state.get_positions());
87 *message.mutable_velocities() = matrix_encoder(joint_state.get_velocities());
88 *message.mutable_accelerations() = matrix_encoder(joint_state.get_accelerations());
89 *message.mutable_torques() = matrix_encoder(joint_state.get_torques());
90 return message;
91}
92
93template<>
94state_representation::proto::Parameter encoder(const state_representation::Parameter<int>& parameter) {
95 state_representation::proto::Parameter message;
96 *message.mutable_state() = encoder(static_cast<state_representation::State>(parameter));
97 message.mutable_parameter_value()->mutable_int_()->set_value(parameter.get_value());
98 return message;
99}
100
101template<>
102state_representation::proto::Parameter encoder(const state_representation::Parameter<std::vector<int>>& parameter) {
103 state_representation::proto::Parameter message;
104 *message.mutable_state() = encoder(static_cast<state_representation::State>(parameter));
105 *message.mutable_parameter_value()->mutable_int_array()->mutable_value() =
106 {parameter.get_value().begin(), parameter.get_value().end()};
107 return message;
108}
109template<>
110state_representation::proto::Parameter encoder(const state_representation::Parameter<double>& parameter) {
111 state_representation::proto::Parameter message;
112 *message.mutable_state() = encoder(static_cast<state_representation::State>(parameter));
113 message.mutable_parameter_value()->mutable_double_()->set_value(parameter.get_value());
114 return message;
115}
116
117template<>
118state_representation::proto::Parameter encoder(const state_representation::Parameter<std::vector<double>>& parameter) {
119 state_representation::proto::Parameter message;
120 *message.mutable_state() = encoder(static_cast<state_representation::State>(parameter));
121 *message.mutable_parameter_value()->mutable_double_array()->mutable_value() =
122 {parameter.get_value().begin(), parameter.get_value().end()};
123 return message;
124}
125template<>
126state_representation::proto::Parameter encoder(const state_representation::Parameter<bool>& parameter) {
127 state_representation::proto::Parameter message;
128 *message.mutable_state() = encoder(static_cast<state_representation::State>(parameter));
129 message.mutable_parameter_value()->mutable_bool_()->set_value(parameter.get_value());
130 return message;
131}
132template<>
133state_representation::proto::Parameter encoder(const state_representation::Parameter<std::vector<bool>>& parameter) {
134 state_representation::proto::Parameter message;
135 *message.mutable_state() = encoder(static_cast<state_representation::State>(parameter));
136 *message.mutable_parameter_value()->mutable_bool_array()->mutable_value() =
137 {parameter.get_value().begin(), parameter.get_value().end()};
138 return message;
139}
140template<>
141state_representation::proto::Parameter encoder(const state_representation::Parameter<std::string>& parameter) {
142 state_representation::proto::Parameter message;
143 *message.mutable_state() = encoder(static_cast<state_representation::State>(parameter));
144 message.mutable_parameter_value()->mutable_string()->set_value(parameter.get_value());
145 return message;
146}
147template<>
148state_representation::proto::Parameter
149encoder(const state_representation::Parameter<std::vector<std::string>>& parameter) {
150 state_representation::proto::Parameter message;
151 *message.mutable_state() = encoder(static_cast<state_representation::State>(parameter));
152 *message.mutable_parameter_value()->mutable_string_array()->mutable_value() =
153 {parameter.get_value().begin(), parameter.get_value().end()};
154 return message;
155}
156template<>
157state_representation::proto::Parameter encoder(const state_representation::Parameter<Eigen::VectorXd>& parameter) {
158 state_representation::proto::Parameter message;
159 *message.mutable_state() = encoder(static_cast<state_representation::State>(parameter));
160 *message.mutable_parameter_value()->mutable_vector()->mutable_value() = matrix_encoder(parameter.get_value());
161 return message;
162}
163
164template<>
165state_representation::proto::Parameter encoder(const state_representation::Parameter<Eigen::MatrixXd>& parameter) {
166 state_representation::proto::Parameter message;
167 *message.mutable_state() = encoder(static_cast<state_representation::State>(parameter));
168 *message.mutable_parameter_value()->mutable_matrix()->mutable_value() = matrix_encoder(parameter.get_value());
169 message.mutable_parameter_value()->mutable_matrix()->set_rows(parameter.get_value().rows());
170 message.mutable_parameter_value()->mutable_matrix()->set_cols(parameter.get_value().cols());
171 return message;
172}
173}
Class to represent a state in Cartesian space.
Class to define a robot Jacobian matrix.
Definition: Jacobian.hpp:20
const std::vector< std::string > & get_joint_names() const
Getter of the joint_names attribute.
Definition: Jacobian.hpp:360
const Eigen::MatrixXd & data() const
Getter of the data attribute.
Definition: Jacobian.hpp:392
unsigned int cols() const
Getter of the number of columns attribute.
Definition: Jacobian.hpp:348
const std::string & get_reference_frame() const
Getter of the reference_frame attribute.
Definition: Jacobian.hpp:388
unsigned int rows() const
Getter of the number of rows attribute.
Definition: Jacobian.hpp:344
const std::string & get_frame() const
Getter of the frame attribute.
Definition: Jacobian.hpp:384
Class to define a state in joint space.
Definition: JointState.hpp:36
Abstract class to represent a state.
Definition: State.hpp:25
bool is_empty() const
Getter of the empty attribute.
Definition: State.cpp:23
Bindings to encode and decode state objects into serialised binary message.
state_representation::proto::Parameter encoder(const state_representation::Parameter< ParamT > &parameter)
Encoding helper method for the Parameter type.
google::protobuf::RepeatedField< double > matrix_encoder(const Eigen::MatrixXd &matrix)
Encoding helper method for Eigen data into a RepeatedField message type.
Definition: encoders.cpp:7
Core state variables and objects.
StateType
The class types inheriting from State.
Definition: StateType.hpp:13