22 #ifndef MODEL_GRPC_DATAPACK_CONTROLLER_H
23 #define MODEL_GRPC_DATAPACK_CONTROLLER_H
25 #include <gazebo/gazebo.hh>
26 #include <gazebo/physics/Model.hh>
29 #include "nrp_protobuf/engine_grpc.grpc.pb.h"
30 #include "nrp_protobuf/gazebo.pb.h"
41 constexpr
static float ToFloat(
const T &val)
42 {
return static_cast<float>(val); }
54 const auto &l =
dynamic_cast<const Gazebo::Model &
>(data);
57 if(l.position_size() || l.rotation_size()) {
58 auto pose = this->_model->WorldPose();
60 if(l.position_size() && l.position_size() == 3) {
61 pose.Pos().X(l.position().Get(0));
62 pose.Pos().Y(l.position().Get(1));
63 pose.Pos().Z(l.position().Get(2));
65 else if(l.position_size())
68 if(l.rotation_size() && l.rotation_size() == 4) {
69 pose.Rot().X(l.rotation().Get(0));
70 pose.Rot().Y(l.rotation().Get(1));
71 pose.Rot().Z(l.rotation().Get(2));
72 pose.Rot().W(l.rotation().Get(3));
74 else if(l.rotation_size())
77 this->_model->SetWorldPose(pose);
81 if(l.linearvelocity_size() && l.linearvelocity_size() == 3) {
82 auto linvel = this->_model->WorldLinearVel();
83 linvel.X(l.linearvelocity().Get(0));
84 linvel.Y(l.linearvelocity().Get(1));
85 linvel.Z(l.linearvelocity().Get(2));
86 this->_model->SetLinearVel(linvel);
88 else if(l.linearvelocity_size())
92 if(l.angularvelocity_size() && l.angularvelocity_size() == 3) {
93 auto angvel = this->_model->WorldAngularVel();
94 angvel.X(l.angularvelocity().Get(0));
95 angvel.Y(l.angularvelocity().Get(1));
96 angvel.Z(l.angularvelocity().Get(2));
97 this->_model->SetAngularVel(angvel);
99 else if(l.angularvelocity_size())
105 auto l =
new Gazebo::Model();
107 const auto &pose = this->_model->WorldPose();
108 l->add_position(ToFloat(pose.Pos().X()));
109 l->add_position(ToFloat(pose.Pos().Y()));
110 l->add_position(ToFloat(pose.Pos().Z()));
112 l->add_rotation(ToFloat(pose.Rot().X()));
113 l->add_rotation(ToFloat(pose.Rot().Y()));
114 l->add_rotation(ToFloat(pose.Rot().Z()));
115 l->add_rotation(ToFloat(pose.Rot().W()));
117 const auto &linVel = this->_model->WorldLinearVel();
118 l->add_linearvelocity(ToFloat(linVel.X()));
119 l->add_linearvelocity(ToFloat(linVel.Y()));
120 l->add_linearvelocity(ToFloat(linVel.Z()));
122 const auto &angVel = this->_model->WorldAngularVel();
123 l->add_angularvelocity(ToFloat(angVel.X()));
124 l->add_angularvelocity(ToFloat(angVel.Y()));
125 l->add_angularvelocity(ToFloat(angVel.Z()));
139 physics::ModelPtr _model;
143 #endif // MODEL_GRPC_DATAPACK_CONTROLLER_H