4 #include <boost/thread/mutex.hpp> 5 #include <boost/thread.hpp> 6 #include <boost/thread/condition.hpp> 9 #include <gazebo/physics/physics.hh> 10 #include <gazebo/common/common.hh> 11 #include <gazebo/sensors/sensors.hh> 12 #include <gazebo/transport/transport.hh> 13 #if GAZEBO_MAJOR_VERSION < 8 14 #include <gazebo/math/gzmath.hh> 31 PidParams () : p(100), i(0), d(0.1), i_max(0), i_min(0), cmd_max(1000), cmd_min(-1000), velocity (false) { }
33 double _imax,
double _imin,
double _cmax,
double _cmin,
bool _vel =
false) :
34 p(_p), i(_i), d(_d), i_max(_imax), i_min(_imin), cmd_max(_cmax), cmd_min(_cmin), velocity(_vel)
41 double _offset,
double _multiplier,
const PidParams &_param) {
42 source_joint = source;
43 target_joint = target;
45 multiplier = _multiplier;
54 std::cerr <<
"use velocity feedback" << std::endl;
57 std::cerr <<
"use force feedback" << std::endl;
61 void setPID(
double _p,
double _i,
double _d,
62 double _imax,
double _imin,
double _cmax,
double _cmin)
64 std::cerr <<
"P: " << _p
67 <<
", imax: " << _imax
68 <<
", imin: " << _imin
69 <<
", cmax: " << _cmax
70 <<
", cmin: " << _cmin << std::endl;
71 pid.Init(_p, _i, _d, _imax, _imin, _cmax, _cmin);
73 void update (gazebo::common::Time &dt) {
74 #if GAZEBO_MAJOR_VERSION < 8 75 double t_current = target_joint->GetAngle(0).Radian();
76 double s_current = source_joint->GetAngle(0).Radian();
78 double t_current = target_joint->Position(0);
79 double s_current = source_joint->Position(0);
81 double t_desired = (s_current - offset) * multiplier;
83 double result = pid.Update(t_current - t_desired, dt);
85 std::cerr <<
"t_cur: " << t_current
86 <<
", s_cur: " << s_current
87 <<
", t_tgt: " << t_desired
88 <<
", err: " << t_current - t_desired
92 target_joint->SetVelocity(0, result);
94 target_joint->SetForce(0, result);
113 void Load(physics::ModelPtr _parent, sdf::ElementPtr _sdf);
118 void registerMimic(
const std::string &src_joint,
119 const std::string &dst_joint,
120 double offset,
double multiplier,
PidParams(double _p, double _i, double _d, double _imax, double _imin, double _cmax, double _cmin, bool _vel=false)
event::ConnectionPtr updateConnection
gazebo::common::Time prev_tm
MimicJointUpdater(gazebo::physics::JointPtr source, gazebo::physics::JointPtr target, double _offset, double _multiplier, const PidParams &_param)
void setPID(double _p, double _i, double _d, double _imax, double _imin, double _cmax, double _cmin)
gazebo::physics::JointPtr target_joint
std::vector< MimicJointUpdater > mimic_joint_list
void update(gazebo::common::Time &dt)
void setPID(const PidParams &p)
gazebo::physics::JointPtr source_joint