RemoveForceSensorLinkOffset.cpp
Go to the documentation of this file.
1 // -*- C++ -*-
11 #include <rtm/CorbaNaming.h>
12 #include <hrpModel/ModelLoaderUtil.h>
13 #include <hrpUtil/MatrixSolvers.h>
14 #include <hrpModel/Sensor.h>
15 
17 
18 // Module specification
19 // <rtc-template block="module_spec">
20 static const char* removeforcesensorlinkoffset_spec[] =
21  {
22  "implementation_id", "RemoveForceSensorLinkOffset",
23  "type_name", "RemoveForceSensorLinkOffset",
24  "description", "null component",
25  "version", HRPSYS_PACKAGE_VERSION,
26  "vendor", "AIST",
27  "category", "example",
28  "activity_type", "DataFlowComponent",
29  "max_instance", "10",
30  "language", "C++",
31  "lang_type", "compile",
32  // Configuration variables
33  "conf.default.debugLevel", "0",
34  ""
35  };
36 // </rtc-template>
37 
39  : RTC::DataFlowComponentBase(manager),
40  // <rtc-template block="initializer">
41  m_qCurrentIn("qCurrent", m_qCurrent),
42  m_rpyIn("rpy", m_rpy),
43  m_RemoveForceSensorLinkOffsetServicePort("RemoveForceSensorLinkOffsetService"),
44  // </rtc-template>
45  m_debugLevel(0),
46  max_sensor_offset_calib_counter(0)
47 {
48  m_service0.rmfsoff(this);
49 }
50 
52 {
53 }
54 
55 
56 
58 {
59  std::cerr << "[" << m_profile.instance_name << "] onInitialize()" << std::endl;
60  // <rtc-template block="bind_config">
61  // Bind variables and configuration variable
62  bindParameter("debugLevel", m_debugLevel, "0");
63 
64  // </rtc-template>
65 
66  // Registration: InPort/OutPort/Service
67  // <rtc-template block="registration">
68  // Set InPort buffers
69  addInPort("qCurrent", m_qCurrentIn);
70  addInPort("rpy", m_rpyIn);
71 
72  // Set OutPort buffer
73 
74  // Set service provider to Ports
75  m_RemoveForceSensorLinkOffsetServicePort.registerProvider("service0", "RemoveForceSensorLinkOffsetService", m_service0);
76 
77  // Set service consumers to Ports
78 
79  // Set CORBA Service Ports
81 
82  // </rtc-template>
83 
85  coil::stringTo(m_dt, prop["dt"].c_str());
86 
88 
89  RTC::Manager& rtcManager = RTC::Manager::instance();
90  std::string nameServer = rtcManager.getConfig()["corba.nameservers"];
91  int comPos = nameServer.find(",");
92  if (comPos < 0){
93  comPos = nameServer.length();
94  }
95  nameServer = nameServer.substr(0, comPos);
96  RTC::CorbaNaming naming(rtcManager.getORB(), nameServer.c_str());
97  if (!loadBodyFromModelLoader(m_robot, prop["model"].c_str(),
98  CosNaming::NamingContext::_duplicate(naming.getRootContext())
99  )){
100  std::cerr << "[" << m_profile.instance_name << "] failed to load model[" << prop["model"] << "]" << std::endl;
101  return RTC::RTC_ERROR;
102  }
103 
104  unsigned int nforce = m_robot->numSensors(hrp::Sensor::FORCE);
105  m_force.resize(nforce);
106  m_forceOut.resize(nforce);
107  m_forceIn.resize(nforce);
108  for (unsigned int i = 0; i < nforce; i++) {
109  hrp::Sensor *s = m_robot->sensor(hrp::Sensor::FORCE, i);
110  m_forceOut[i] = new OutPort<TimedDoubleSeq>(std::string("off_"+s->name).c_str(), m_force[i]);
111  m_forceIn[i] = new InPort<TimedDoubleSeq>(s->name.c_str(), m_force[i]);
112  m_force[i].data.length(6);
113  registerInPort(s->name.c_str(), *m_forceIn[i]);
114  registerOutPort(std::string("off_"+s->name).c_str(), *m_forceOut[i]);
115  m_forcemoment_offset_param.insert(std::pair<std::string, ForceMomentOffsetParam>(s->name, ForceMomentOffsetParam()));
116  }
117  max_sensor_offset_calib_counter = static_cast<int>(8.0/m_dt); // 8.0[s] by default
118  return RTC::RTC_OK;
119 }
120 
121 /*
122 RTC::ReturnCode_t RemoveForceSensorLinkOffset::onFinalize()
123 {
124  return RTC::RTC_OK;
125 }
126 */
127 
128 /*
129 RTC::ReturnCode_t RemoveForceSensorLinkOffset::onStartup(RTC::UniqueId ec_id)
130 {
131  return RTC::RTC_OK;
132 }
133 */
134 
135 /*
136 RTC::ReturnCode_t RemoveForceSensorLinkOffset::onShutdown(RTC::UniqueId ec_id)
137 {
138  return RTC::RTC_OK;
139 }
140 */
141 
143 {
144  std::cerr << "[" << m_profile.instance_name<< "] onActivated(" << ec_id << ")" << std::endl;
145  return RTC::RTC_OK;
146 }
147 
149 {
150  std::cerr << "[" << m_profile.instance_name<< "] onDeactivated(" << ec_id << ")" << std::endl;
151  return RTC::RTC_OK;
152 }
153 
154 #define DEBUGP ((m_debugLevel==1 && loop%200==0) || m_debugLevel > 1 )
156 {
157  //std::cout << m_profile.instance_name<< ": onExecute(" << ec_id << ")" << std::endl;
158  static int loop = 0;
159  loop ++;
160  for (unsigned int i=0; i<m_forceIn.size(); i++){
161  if ( m_forceIn[i]->isNew() ) {
162  m_forceIn[i]->read();
163  }
164  }
165  hrp::Vector3 rpy;
166  if (m_rpyIn.isNew()) {
167  m_rpyIn.read();
168  rpy = hrp::Vector3(m_rpy.data.r, m_rpy.data.p, m_rpy.data.y);
169  } else {
170  rpy = hrp::Vector3::Zero();
171  }
172  if (m_qCurrentIn.isNew()) {
173  m_qCurrentIn.read();
174  for ( unsigned int i = 0; i < m_robot->numJoints(); i++ ){
175  m_robot->joint(i)->q = m_qCurrent.data[i];
176  }
177  //
179  m_robot->calcForwardKinematics();
180  Guard guard(m_mutex);
181  for (unsigned int i=0; i<m_forceIn.size(); i++){
182  if ( m_force[i].data.length()==6 ) {
183  std::string sensor_name = m_forceIn[i]->name();
184  hrp::ForceSensor* sensor = m_robot->sensor<hrp::ForceSensor>(sensor_name);
185  hrp::Vector3 data_p(m_force[i].data[0], m_force[i].data[1], m_force[i].data[2]);
186  hrp::Vector3 data_r(m_force[i].data[3], m_force[i].data[4], m_force[i].data[5]);
187  if ( DEBUGP ) {
188  std::cerr << "[" << m_profile.instance_name << "] wrench [" << m_forceIn[i]->name() << "]" << std::endl;;
189  std::cerr << "[" << m_profile.instance_name << "] raw force = " << data_p.format(Eigen::IOFormat(Eigen::StreamPrecision, 0, ", ", ", ", "", "", "[", "]")) << std::endl;
190  std::cerr << "[" << m_profile.instance_name << "] raw moment = " << data_r.format(Eigen::IOFormat(Eigen::StreamPrecision, 0, ", ", ", ", "", "", "[", "]")) << std::endl;
191  }
192  if ( sensor ) {
193  // real force sensor
194  hrp::Matrix33 sensorR = sensor->link->R * sensor->localR;
196  hrp::Vector3 mg = hrp::Vector3(0,0, fmp.link_offset_mass * grav * -1);
197  hrp::Vector3 cxmg = hrp::Vector3(sensorR * fmp.link_offset_centroid).cross(mg);
198  // Sensor offset calib
199  if (fmp.sensor_offset_calib_counter > 0) { // while calibrating
200  fmp.force_offset_sum += (data_p - sensorR.transpose() * mg);
201  fmp.moment_offset_sum += (data_r - sensorR.transpose() * cxmg);
203  if (fmp.sensor_offset_calib_counter == 0) {
206  sem_post(&(fmp.wait_sem));
207  }
208  }
209  // force and moments which do not include offsets
210  fmp.off_force = sensorR * (data_p - fmp.force_offset) - mg;
211  fmp.off_moment = sensorR * (data_r - fmp.moment_offset) - cxmg;
212  // convert absolute force -> sensor local force
213  fmp.off_force = hrp::Vector3(sensorR.transpose() * fmp.off_force);
214  fmp.off_moment = hrp::Vector3(sensorR.transpose() * fmp.off_moment);
215  for (size_t j = 0; j < 3; j++) {
216  m_force[i].data[j] = fmp.off_force(j);
217  m_force[i].data[3+j] = fmp.off_moment(j);
218  }
219  if ( DEBUGP ) {
220  std::cerr << "[" << m_profile.instance_name << "] off force = " << fmp.off_force.format(Eigen::IOFormat(Eigen::StreamPrecision, 0, ", ", ", ", "", "", "[", "]")) << std::endl;
221  std::cerr << "[" << m_profile.instance_name << "] off moment = " << fmp.off_moment.format(Eigen::IOFormat(Eigen::StreamPrecision, 0, ", ", ", ", "", "", "[", "]")) << std::endl;
222  }
223  } else {
224  std::cerr << "[" << m_profile.instance_name << "] unknwon force param " << sensor_name << std::endl;
225  }
226  }
227  }
228  }
229  for (unsigned int i=0; i<m_forceOut.size(); i++){
230  m_forceOut[i]->write();
231  }
232  return RTC::RTC_OK;
233 }
234 
236 {
237  if ( m_robot->numSensors(hrp::Sensor::ACCELERATION) > 0) {
238  hrp::Sensor *sensor = m_robot->sensor(hrp::Sensor::ACCELERATION, 0);
239  hrp::Matrix33 tmpr;
240  rats::rotm3times(tmpr, hrp::Matrix33(sensor->link->R*sensor->localR).transpose(), m_robot->rootLink()->R);
241  rats::rotm3times(m_robot->rootLink()->R, hrp::rotFromRpy(rpy(0), rpy(1), rpy(2)), tmpr);
242  }
243 }
244 
246 {
247  std::cerr << "[" << m_profile.instance_name << "] force_offset = " << m_forcemoment_offset_param[i_name_].force_offset.format(Eigen::IOFormat(Eigen::StreamPrecision, 0, ", ", ", ", "", "", "[", "]")) << "[N]" << std::endl;
248  std::cerr << "[" << m_profile.instance_name << "] moment_offset = " << m_forcemoment_offset_param[i_name_].moment_offset.format(Eigen::IOFormat(Eigen::StreamPrecision, 0, ", ", ", ", "", "", "[", "]")) << "[Nm]" << std::endl;
249  std::cerr << "[" << m_profile.instance_name << "] link_offset_centroid = " << m_forcemoment_offset_param[i_name_].link_offset_centroid.format(Eigen::IOFormat(Eigen::StreamPrecision, 0, ", ", ", ", "", "", "[", "]")) << "[m]" << std::endl;
250  std::cerr << "[" << m_profile.instance_name << "] link_offset_mass = " << m_forcemoment_offset_param[i_name_].link_offset_mass << "[kg]" << std::endl;
251 };
252 
253 bool RemoveForceSensorLinkOffset::setForceMomentOffsetParam(const std::string& i_name_, const RemoveForceSensorLinkOffsetService::forcemomentOffsetParam& i_param_)
254 {
255  std::cerr << "[" << m_profile.instance_name << "] setForceMomentOffsetParam [" << i_name_ << "]" << std::endl;
256  if (m_forcemoment_offset_param.find(i_name_) != m_forcemoment_offset_param.end()) {
257  memcpy(m_forcemoment_offset_param[i_name_].force_offset.data(), i_param_.force_offset.get_buffer(), sizeof(double) * 3);
258  memcpy(m_forcemoment_offset_param[i_name_].moment_offset.data(), i_param_.moment_offset.get_buffer(), sizeof(double) * 3);
259  memcpy(m_forcemoment_offset_param[i_name_].link_offset_centroid.data(), i_param_.link_offset_centroid.get_buffer(), sizeof(double) * 3);
260  m_forcemoment_offset_param[i_name_].link_offset_mass = i_param_.link_offset_mass;
262  return true;
263  } else {
264  std::cerr << "[" << m_profile.instance_name << "] No such limb"<< std::endl;
265  return false;
266  }
267 }
268 
269 bool RemoveForceSensorLinkOffset::getForceMomentOffsetParam(const std::string& i_name_, RemoveForceSensorLinkOffsetService::forcemomentOffsetParam& i_param_)
270 {
271  if (m_forcemoment_offset_param.find(i_name_) != m_forcemoment_offset_param.end()) {
272  // std::cerr << "OK " << i_name_ << " in getForceMomentOffsetParam" << std::endl;
273  memcpy(i_param_.force_offset.get_buffer(), m_forcemoment_offset_param[i_name_].force_offset.data(), sizeof(double) * 3);
274  memcpy(i_param_.moment_offset.get_buffer(), m_forcemoment_offset_param[i_name_].moment_offset.data(), sizeof(double) * 3);
275  memcpy(i_param_.link_offset_centroid.get_buffer(), m_forcemoment_offset_param[i_name_].link_offset_centroid.data(), sizeof(double) * 3);
276  i_param_.link_offset_mass = m_forcemoment_offset_param[i_name_].link_offset_mass;
277  return true;
278  } else {
279  std::cerr << "[" << m_profile.instance_name << "] No such limb " << i_name_ << " in getForceMomentOffsetParam" << std::endl;
280  return false;
281  }
282 }
283 
285 {
286  std::cerr << "[" << m_profile.instance_name << "] loadForceMomentOffsetParams" << std::endl;
287  std::ifstream ifs(filename.c_str());
288  if (ifs.is_open()){
289  while(ifs.eof()==0){
290  std::string tmps;
292  if ( ifs >> tmps ) {
293  if ( m_forcemoment_offset_param.find(tmps) != m_forcemoment_offset_param.end()) {
294  for (size_t i = 0; i < 3; i++) ifs >> tmpp.force_offset(i);
295  for (size_t i = 0; i < 3; i++) ifs >> tmpp.moment_offset(i);
296  for (size_t i = 0; i < 3; i++) ifs >> tmpp.link_offset_centroid(i);
297  ifs >> tmpp.link_offset_mass;
298  m_forcemoment_offset_param[tmps] = tmpp;
299  std::cerr << "[" << m_profile.instance_name << "] " << tmps << "" << std::endl;
301  } else {
302  std::cerr << "[" << m_profile.instance_name << "] no such (" << tmps << ")" << std::endl;
303  return false;
304  }
305  }
306  }
307  } else {
308  std::cerr << "[" << m_profile.instance_name << "] failed to open(" << filename << ")" << std::endl;
309  return false;
310  }
311  return true;
312 };
313 
315 {
316  std::cerr << "[" << m_profile.instance_name << "] dumpForceMomentOffsetParams" << std::endl;
317  std::ofstream ofs(filename.c_str());
318  if (ofs.is_open()){
319  for ( std::map<std::string, ForceMomentOffsetParam>::iterator it = m_forcemoment_offset_param.begin(); it != m_forcemoment_offset_param.end(); it++ ) {
320  ofs << it->first << " ";
321  ofs << it->second.force_offset[0] << " " << it->second.force_offset[1] << " " << it->second.force_offset[2] << " ";
322  ofs << it->second.moment_offset[0] << " " << it->second.moment_offset[1] << " " << it->second.moment_offset[2] << " ";
323  ofs << it->second.link_offset_centroid[0] << " " << it->second.link_offset_centroid[1] << " " << it->second.link_offset_centroid[2] << " ";
324  ofs << it->second.link_offset_mass << std::endl;
325  }
326  } else {
327  std::cerr << "[" << m_profile.instance_name << "] failed to open(" << filename << ")" << std::endl;
328  return false;
329  }
330  return true;
331 };
332 
333 bool RemoveForceSensorLinkOffset::removeForceSensorOffset (const ::OpenHRP::RemoveForceSensorLinkOffsetService::StrSequence& names, const double tm)
334 {
335  std::cerr << "[" << m_profile.instance_name << "] removeForceSensorOffset..." << std::endl;
336 
337  // Check argument validity
338  std::vector<std::string> valid_names, invalid_names, calibrating_names;
339  bool is_valid_argument = true;
340  {
341  Guard guard(m_mutex);
342  if ( names.length() == 0 ) { // If no sensor names are specified, calibrate all sensors.
343  std::cerr << "[" << m_profile.instance_name << "] No sensor names are specified, calibrate all sensors = [";
344  for ( std::map<std::string, ForceMomentOffsetParam>::iterator it = m_forcemoment_offset_param.begin(); it != m_forcemoment_offset_param.end(); it++ ) {
345  valid_names.push_back(it->first);
346  std::cerr << it->first << " ";
347  }
348  std::cerr << "]" << std::endl;
349  } else {
350  for (size_t i = 0; i < names.length(); i++) {
351  std::string name(names[i]);
352  if ( m_forcemoment_offset_param.find(name) != m_forcemoment_offset_param.end() ) {
353  if ( m_forcemoment_offset_param[name].sensor_offset_calib_counter == 0 ) {
354  valid_names.push_back(name);
355  } else {
356  calibrating_names.push_back(name);
357  is_valid_argument = false;
358  }
359  } else{
360  invalid_names.push_back(name);
361  is_valid_argument = false;
362  }
363  }
364  }
365  }
366  // Return if invalid or calibrating
367  if ( !is_valid_argument ) {
368  std::cerr << "[" << m_profile.instance_name << "] Cannot start removeForceSensorOffset, invalid = [";
369  for (size_t i = 0; i < invalid_names.size(); i++) std::cerr << invalid_names[i] << " ";
370  std::cerr << "], calibrating = [";
371  for (size_t i = 0; i < calibrating_names.size(); i++) std::cerr << calibrating_names[i] << " ";
372  std::cerr << "]" << std::endl;
373  return false;
374  }
375 
376  // Start calibration
377  // Print output force before calib
378  std::cerr << "[" << m_profile.instance_name << "] Calibrate sensor names = [";
379  for (size_t i = 0; i < valid_names.size(); i++) std::cerr << valid_names[i] << " ";
380  std::cerr << "]" << std::endl;
381  {
382  Guard guard(m_mutex);
383  for (size_t i = 0; i < valid_names.size(); i++) {
384  std::cerr << "[" << m_profile.instance_name << "] Offset-removed force before calib [" << valid_names[i] << "], ";
385  std::cerr << "force = " << m_forcemoment_offset_param[valid_names[i]].off_force.format(Eigen::IOFormat(Eigen::StreamPrecision, 0, ", ", ", ", "", "", "[", "][N]")) << ", ";
386  std::cerr << "moment = " << m_forcemoment_offset_param[valid_names[i]].off_moment.format(Eigen::IOFormat(Eigen::StreamPrecision, 0, ", ", ", ", "", "", "[", "][Nm]"));
387  std::cerr << std::endl;
388  }
389  max_sensor_offset_calib_counter = static_cast<int>(tm/m_dt);
390  for (size_t i = 0; i < valid_names.size(); i++) {
391  m_forcemoment_offset_param[valid_names[i]].force_offset_sum = hrp::Vector3::Zero();
392  m_forcemoment_offset_param[valid_names[i]].moment_offset_sum = hrp::Vector3::Zero();
393  m_forcemoment_offset_param[valid_names[i]].sensor_offset_calib_counter = max_sensor_offset_calib_counter;
394  }
395  }
396  // Wait
397  for (size_t i = 0; i < valid_names.size(); i++) {
398  sem_wait(&(m_forcemoment_offset_param[valid_names[i]].wait_sem));
399  }
400  // Print output force and offset after calib
401  {
402  Guard guard(m_mutex);
403  std::cerr << "[" << m_profile.instance_name << "] Calibrate done (calib time = " << tm << "[s])" << std::endl;
404  for (size_t i = 0; i < valid_names.size(); i++) {
405  std::cerr << "[" << m_profile.instance_name << "] Calibrated offset [" << valid_names[i] << "], ";
406  std::cerr << "force_offset = " << m_forcemoment_offset_param[valid_names[i]].force_offset.format(Eigen::IOFormat(Eigen::StreamPrecision, 0, ", ", ", ", "", "", "[", "][N]")) << ", ";
407  std::cerr << "moment_offset = " << m_forcemoment_offset_param[valid_names[i]].moment_offset.format(Eigen::IOFormat(Eigen::StreamPrecision, 0, ", ", ", ", "", "", "[", "][Nm]")) << std::endl;
408  std::cerr << "[" << m_profile.instance_name << "] Offset-removed force after calib [" << valid_names[i] << "], ";
409  std::cerr << "force = " << m_forcemoment_offset_param[valid_names[i]].off_force.format(Eigen::IOFormat(Eigen::StreamPrecision, 0, ", ", ", ", "", "", "[", "][N]")) << ", ";
410  std::cerr << "moment = " << m_forcemoment_offset_param[valid_names[i]].off_moment.format(Eigen::IOFormat(Eigen::StreamPrecision, 0, ", ", ", ", "", "", "[", "][Nm]"));
411  std::cerr << std::endl;
412  }
413  }
414  std::cerr << "[" << m_profile.instance_name << "] removeForceSensorOffset...done" << std::endl;
415  return true;
416 }
417 
418 /*
419 RTC::ReturnCode_t RemoveForceSensorLinkOffset::onAborting(RTC::UniqueId ec_id)
420 {
421  return RTC::RTC_OK;
422 }
423 */
424 
425 /*
426 RTC::ReturnCode_t RemoveForceSensorLinkOffset::onError(RTC::UniqueId ec_id)
427 {
428  return RTC::RTC_OK;
429 }
430 */
431 
432 /*
433 RTC::ReturnCode_t RemoveForceSensorLinkOffset::onReset(RTC::UniqueId ec_id)
434 {
435  return RTC::RTC_OK;
436 }
437 */
438 
439 /*
440 RTC::ReturnCode_t RemoveForceSensorLinkOffset::onStateUpdate(RTC::UniqueId ec_id)
441 {
442  return RTC::RTC_OK;
443 }
444 */
445 
446 /*
447 RTC::ReturnCode_t RemoveForceSensorLinkOffset::onRateChanged(RTC::UniqueId ec_id)
448 {
449  return RTC::RTC_OK;
450 }
451 */
452 
453 extern "C"
454 {
455 
457  {
459  manager->registerFactory(profile,
460  RTC::Create<RemoveForceSensorLinkOffset>,
461  RTC::Delete<RemoveForceSensorLinkOffset>);
462  }
463 
464 };
465 
466 
ComponentProfile m_profile
png_infop png_charpp int png_charpp profile
bool loadForceMomentOffsetParams(const std::string &filename)
bool dumpForceMomentOffsetParams(const std::string &filename)
virtual RTC::ReturnCode_t onActivated(RTC::UniqueId ec_id)
std::string name
bool stringTo(To &val, const char *str)
InPort< TimedOrientation3D > m_rpyIn
static std::vector< std::vector< double > > force_offset
Definition: iob.cpp:13
png_infop png_charpp name
RemoveForceSensorLinkOffset(RTC::Manager *manager)
Constructor.
ifs
CORBA::ORB_ptr getORB()
png_uint_32 i
coil::Properties & getProperties()
static Manager & instance()
Matrix33 localR
bool removeForceSensorOffset(const ::OpenHRP::RemoveForceSensorLinkOffsetService::StrSequence &names, const double tm)
boost::shared_ptr< Body > BodyPtr
Eigen::Vector3d Vector3
Matrix33 rotFromRpy(const Vector3 &rpy)
Eigen::Matrix3d Matrix33
coil::Properties & getConfig()
void rotm3times(hrp::Matrix33 &m12, const hrp::Matrix33 &m1, const hrp::Matrix33 &m2)
Definition: RatsMatrix.cpp:31
ExecutionContextHandle_t UniqueId
std::vector< OutPort< TimedDoubleSeq > * > m_forceOut
virtual RTC::ReturnCode_t onInitialize()
std::vector< InPort< TimedDoubleSeq > * > m_forceIn
bool bindParameter(const char *param_name, VarType &var, const char *def_val, bool(*trans)(VarType &, const char *)=coil::stringTo)
RemoveForceSensorLinkOffsetService_impl m_service0
def j(str, encoding="cp932")
std::map< std::string, ForceMomentOffsetParam > m_forcemoment_offset_param
int loadBodyFromModelLoader(::World *world, const char *name, const char *url, CosNaming::NamingContext_var cxt)
void printForceMomentOffsetParam(const std::string &i_name_)
static const char * removeforcesensorlinkoffset_spec[]
prop
bool setForceMomentOffsetParam(const std::string &i_name_, const OpenHRP::RemoveForceSensorLinkOffsetService::forcemomentOffsetParam &i_param_)
coil::Guard< coil::Mutex > Guard
naming
bool getForceMomentOffsetParam(const std::string &i_name_, OpenHRP::RemoveForceSensorLinkOffsetService::forcemomentOffsetParam &i_param_)
void registerInPort(const char *name, InPortBase &inport)
virtual bool isNew()
std::vector< TimedDoubleSeq > m_force
bool addPort(PortBase &port)
virtual RTC::ReturnCode_t onDeactivated(RTC::UniqueId ec_id)
JSAMPIMAGE data
bool addInPort(const char *name, InPortBase &inport)
virtual RTC::ReturnCode_t onExecute(RTC::UniqueId ec_id)
void registerOutPort(const char *name, OutPortBase &outport)
void rmfsoff(RemoveForceSensorLinkOffset *i_rmfsoff)
bool registerFactory(coil::Properties &profile, RtcNewFunc new_func, RtcDeleteFunc delete_func)
void updateRootLinkPosRot(const hrp::Vector3 &rpy)
bool registerProvider(const char *instance_name, const char *type_name, PortableServer::RefCountServantBase &provider)
virtual ~RemoveForceSensorLinkOffset()
Destructor.
void RemoveForceSensorLinkOffsetInit(RTC::Manager *manager)


hrpsys
Author(s): AIST, Fumio Kanehiro
autogenerated on Thu May 6 2021 02:41:51