4 namespace mimicplugin {
12 world = _parent->GetWorld();
14 std::cerr <<
"Loading mimic plugin" << std::endl;
15 if (_sdf->HasElement(
"mimic")) {
18 sdf::ElementPtr el = _sdf->GetElement(
"mimic");
23 std::string target_name = el->Get<std::string> ();
25 std::string source_name;
27 double multiplier = 1.0;
29 sdf::ParamPtr p_jn = el->GetAttribute(
"joint");
31 p_jn->Get(source_name);
32 }
else if ( el->HasElement(
"joint") ) {
33 sdf::ElementPtr pt = el->GetElement(
"joint");
35 source_name = pt->Get<std::string > ();
39 if (source_name.size() > 0) {
41 sdf::ParamPtr p_off = el->GetAttribute(
"offset");
42 if (!!p_off) { p_off->Get(offset); }
43 else if ( el->HasElement(
"offset") ) {
44 sdf::ElementPtr pt = el->GetElement(
"offset");
46 offset = pt->Get<
double > ();
50 sdf::ParamPtr p_mlt = el->GetAttribute(
"multiplier");
51 if (!!p_mlt) { p_mlt->Get(multiplier); }
52 else if ( el->HasElement(
"multiplier") ) {
53 sdf::ElementPtr pt = el->GetElement(
"multiplier");
55 multiplier = pt->Get<
double > ();
61 sdf::ParamPtr attr = el->GetAttribute(
"P");
62 if (!!attr) { attr->Get(param.p); }
63 else if ( el->HasElement(
"P") ) {
64 sdf::ElementPtr pt = el->GetElement(
"P");
66 param.p = pt->Get<
double > ();
71 sdf::ParamPtr attr = el->GetAttribute(
"I");
72 if (!!attr) { attr->Get(param.i); }
73 else if ( el->HasElement(
"I") ) {
74 sdf::ElementPtr pt = el->GetElement(
"I");
76 param.i = pt->Get<
double > ();
81 sdf::ParamPtr attr = el->GetAttribute(
"D");
82 if (!!attr) { attr->Get(param.d); }
83 else if ( el->HasElement(
"D") ) {
84 sdf::ElementPtr pt = el->GetElement(
"D");
86 param.d = pt->Get<
double > ();
91 sdf::ParamPtr attr = el->GetAttribute(
"i_max");
92 if (!!attr) { attr->Get(param.i_max); }
93 else if ( el->HasElement(
"i_max") ) {
94 sdf::ElementPtr pt = el->GetElement(
"i_max");
96 param.i_max = pt->Get<
double > ();
101 sdf::ParamPtr attr = el->GetAttribute(
"i_min");
102 if (!!attr) { attr->Get(param.i_min); }
103 else if ( el->HasElement(
"i_min") ) {
104 sdf::ElementPtr pt = el->GetElement(
"i_min");
106 param.i_min = pt->Get<
double > ();
111 sdf::ParamPtr attr = el->GetAttribute(
"command_max");
112 if (!!attr) { attr->Get(param.cmd_max); }
113 else if ( el->HasElement(
"command_max") ) {
114 sdf::ElementPtr pt = el->GetElement(
"command_max");
116 param.cmd_max = pt->Get<
double > ();
121 sdf::ParamPtr attr = el->GetAttribute(
"command_min");
122 if (!!attr) { attr->Get(param.cmd_min); }
123 else if ( el->HasElement(
"command_min") ) {
124 sdf::ElementPtr pt = el->GetElement(
"command_min");
126 param.cmd_min = pt->Get<
double > ();
131 sdf::ParamPtr attr = el->GetAttribute(
"velocity");
132 if (!!attr) { attr->Get(param.velocity); }
133 else if ( el->HasElement(
"velocity") ) {
134 sdf::ElementPtr pt = el->GetElement(
"velocity");
136 param.velocity = pt->Get<
bool > ();
140 registerMimic(source_name, target_name, offset, multiplier, param);
144 el = el->GetNextElement(
"mimic");
147 #if GAZEBO_MAJOR_VERSION < 8 148 prev_tm = world->GetSimTime();
150 prev_tm = world->SimTime();
153 event::Events::ConnectWorldUpdateBegin(
158 const std::string &dst_joint,
159 double offset,
double multiplier,
const PidParams &_p)
161 std::cerr <<
"reg: " << src_joint <<
" -> " << dst_joint << std::endl;
162 std::cerr <<
"offset: " << offset <<
", multiplier: " << multiplier << std::endl;
164 gazebo::physics::JointPtr jp_source;
165 gazebo::physics::JointPtr jp_target;
166 jp_source = model->GetJoint(src_joint);
167 jp_target = model->GetJoint(dst_joint);
168 if (!jp_source || !jp_target) {
173 mimic_joint_list.push_back(mimic);
179 #if GAZEBO_MAJOR_VERSION < 8 180 gazebo::common::Time dt = world->GetSimTime() - prev_tm;
182 gazebo::common::Time dt = world->SimTime() - prev_tm;
184 for(
auto it : mimic_joint_list) {
GZ_REGISTER_MODEL_PLUGIN(MimicPlugin)
bool param(const std::string ¶m_name, T ¶m_val, const T &default_val)
void registerMimic(const std::string &src_joint, const std::string &dst_joint, double offset, double multiplier, const PidParams &_p)
void Load(physics::ModelPtr _parent, sdf::ElementPtr _sdf)