1#include "clproto/encoders.h"
7google::protobuf::RepeatedField<double>
matrix_encoder(
const Eigen::MatrixXd& matrix) {
8 return encoder(std::vector<double>{matrix.data(), matrix.data() + matrix.size()});
12 return static_cast<proto::StateType
>(type);
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());
26 proto::SpatialState message;
27 *message.mutable_state() =
encoder(
static_cast<State>(spatial_state));
28 message.set_reference_frame(spatial_state.get_reference_frame());
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());
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()));
48 proto::CartesianState message;
50 if (cartesian_state.is_empty()) {
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());
65 proto::Jacobian message;
66 *message.mutable_state() =
encoder(
static_cast<State>(jacobian));
73 message.set_rows(jacobian.
rows());
74 message.set_cols(jacobian.
cols());
80 proto::JointState message;
81 *message.mutable_state() =
encoder(
static_cast<State>(joint_state));
82 if (joint_state.is_empty()) {
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());
95 state_representation::proto::Parameter message;
97 message.mutable_parameter_value()->mutable_int_()->set_value(parameter.get_value());
103 state_representation::proto::Parameter message;
105 *message.mutable_parameter_value()->mutable_int_array()->mutable_value() =
106 {parameter.get_value().begin(), parameter.get_value().end()};
111 state_representation::proto::Parameter message;
113 message.mutable_parameter_value()->mutable_double_()->set_value(parameter.get_value());
119 state_representation::proto::Parameter message;
121 *message.mutable_parameter_value()->mutable_double_array()->mutable_value() =
122 {parameter.get_value().begin(), parameter.get_value().end()};
127 state_representation::proto::Parameter message;
129 message.mutable_parameter_value()->mutable_bool_()->set_value(parameter.get_value());
134 state_representation::proto::Parameter message;
136 *message.mutable_parameter_value()->mutable_bool_array()->mutable_value() =
137 {parameter.get_value().begin(), parameter.get_value().end()};
142 state_representation::proto::Parameter message;
144 message.mutable_parameter_value()->mutable_string()->set_value(parameter.get_value());
148state_representation::proto::Parameter
150 state_representation::proto::Parameter message;
152 *message.mutable_parameter_value()->mutable_string_array()->mutable_value() =
153 {parameter.get_value().begin(), parameter.get_value().end()};
158 state_representation::proto::Parameter message;
160 *message.mutable_parameter_value()->mutable_vector()->mutable_value() =
matrix_encoder(parameter.get_value());
166 state_representation::proto::Parameter message;
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());
Class to represent a state in Cartesian space.
Class to define a robot Jacobian matrix.
const std::vector< std::string > & get_joint_names() const
Getter of the joint_names attribute.
const Eigen::MatrixXd & data() const
Getter of the data attribute.
unsigned int cols() const
Getter of the number of columns attribute.
const std::string & get_reference_frame() const
Getter of the reference_frame attribute.
unsigned int rows() const
Getter of the number of rows attribute.
const std::string & get_frame() const
Getter of the frame attribute.
Class to define a state in joint space.
Abstract class to represent a state.
bool is_empty() const
Getter of the empty attribute.
Bindings to encode and decode state objects into serialised binary message.
state_representation::proto::Parameter encoder(const state_representation::Parameter< ParamT > ¶meter)
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.
Core state variables and objects.
StateType
The class types inheriting from State.