128 map<string,Sensor*>::const_iterator In_0=
sensors.find(
"In_0");
129 map<string,Sensor*>::const_iterator Out_0=
sensors.find(
"Out_0");
130 map<string,Sensor*>::const_iterator Out_1=
sensors.find(
"Out_1");
131 map<string,Sensor*>::const_iterator Out_2=
sensors.find(
"Out_2");
138 if (
lssvm.getCoDomainSize()>2)
144 Value val_in, val_out[3];
145 In_0->second->getOutput(val_in);
146 Out_0->second->getOutput(val_out[0]);
147 Out_1->second->getOutput(val_out[1]);
149 Vector in(
lssvm.getDomainSize());
150 in[0]=val_in.asFloat64();
152 Vector
out(
lssvm.getCoDomainSize());
153 out[0]=val_out[0].asFloat64();
154 out[1]=val_out[1].asFloat64();
156 if (
lssvm.getCoDomainSize()>2)
158 Out_2->second->getOutput(val_out[2]);
159 out[2]=val_out[2].asFloat64();
163 Bottle &d=b.addList();
165 Bottle &d_in=d.addList();
166 d_in.addString(
"in");
167 d_in.addList().read(in);
169 Bottle &d_out=d.addList();
170 d_out.addString(
"out");
171 d_out.addList().read(
out);
271 if (!options.check(
"name") || !options.check(
"type"))
280 name=options.find(
"name").asString();
281 type=options.find(
"type").asString();
282 robot=options.check(
"robot",Value(
"icub")).asString();
283 carrier=options.check(
"carrier",Value(
"udp")).asString();
284 verbosity=options.check(
"verbosity",Value(0)).asInt32();
286 string part_motor=string(type+
"_arm");
287 string part_analog=string(type+
"_hand");
290 propEncs.put(
"device",
"remote_controlboard");
291 propEncs.put(
"remote",
"/"+robot+
"/"+part_motor);
292 propEncs.put(
"local",
"/"+
name+
"/"+part_motor);
293 if (!drvEncs.open(propEncs))
297 propMAIS.put(
"device",
"multipleanalogsensorsclient");
298 propMAIS.put(
"remote",
"/"+robot+
"/"+part_analog+
"/MAIS");
299 propMAIS.put(
"local",
"/"+
name+
"/"+part_analog+
"/MAIS");
300 if (!drvMAIS.open(propMAIS))
308 IEncoders *ienc; drvEncs.view(ienc);
309 int nAxes; ienc->getAxes(&nAxes);
312 propGen.put(
"name",
"In_0");
313 propGen.put(
"size",nAxes);
315 Property propThumb=propGen; propThumb.put(
"index",10);
316 Property propIndex=propGen; propIndex.put(
"index",12);
317 Property propMiddle=propGen; propMiddle.put(
"index",14);
318 Property propRing=propGen; propRing.put(
"index",15);
319 Property propLittle=propGen; propLittle.put(
"index",15);
321 bool sensors_ok=
true;
322 void *pEncs=
static_cast<void*
>(ienc);
323 sensors_ok&=sensEncs[0].configure(pEncs,propThumb);
324 sensors_ok&=sensEncs[1].configure(pEncs,propIndex);
325 sensors_ok&=sensEncs[2].configure(pEncs,propMiddle);
326 sensors_ok&=sensEncs[3].configure(pEncs,propRing);
327 sensors_ok&=sensEncs[4].configure(pEncs,propLittle);
330 IEncoderArrays *iencarray; drvMAIS.view(iencarray);
333 propGen.put(
"num_arrays",(
int)iencarray->getNrOfEncoderArrays());
334 propGen.put(
"index_array",0);
336 Property thumb_mp=propGen; thumb_mp.put(
"name",
"Out_0"); thumb_mp.put(
"index_element",
"1");
337 Property thumb_ip=propGen; thumb_ip.put(
"name",
"Out_1"); thumb_ip.put(
"index_element",
"2");
338 Property index_mp=propGen; index_mp.put(
"name",
"Out_0"); index_mp.put(
"index_element",
"4");
339 Property index_ip=propGen; index_ip.put(
"name",
"Out_1"); index_ip.put(
"index_element",
"5");
340 Property middle_mp=propGen; middle_mp.put(
"name",
"Out_0"); middle_mp.put(
"index_element",
"7");
341 Property middle_ip=propGen; middle_ip.put(
"name",
"Out_1"); middle_ip.put(
"index_element",
"8");
342 Property ring_mp=propGen; ring_mp.put(
"name",
"Out_0"); ring_mp.put(
"index_element",
"9");
343 Property ring_pip=propGen; ring_pip.put(
"name",
"Out_1"); ring_pip.put(
"index_element",
"10");
344 Property ring_dip=propGen; ring_dip.put(
"name",
"Out_2"); ring_dip.put(
"index_element",
"11");
345 Property little_mp=propGen; little_mp.put(
"name",
"Out_0"); little_mp.put(
"index_element",
"12");
346 Property little_pip=propGen; little_pip.put(
"name",
"Out_1"); little_pip.put(
"index_element",
"13");
347 Property little_dip=propGen; little_dip.put(
"name",
"Out_2"); little_dip.put(
"index_element",
"14");
349 void *pEncArrays=
static_cast<void*
>(iencarray);
350 sensors_ok&=sensEncArrays[0].configure(pEncArrays,thumb_mp);
351 sensors_ok&=sensEncArrays[1].configure(pEncArrays,thumb_ip);
352 sensors_ok&=sensEncArrays[2].configure(pEncArrays,index_mp);
353 sensors_ok&=sensEncArrays[3].configure(pEncArrays,index_ip);
354 sensors_ok&=sensEncArrays[4].configure(pEncArrays,middle_mp);
355 sensors_ok&=sensEncArrays[5].configure(pEncArrays,middle_ip);
356 sensors_ok&=sensEncArrays[6].configure(pEncArrays,ring_mp);
357 sensors_ok&=sensEncArrays[7].configure(pEncArrays,ring_pip);
358 sensors_ok&=sensEncArrays[8].configure(pEncArrays,ring_dip);
359 sensors_ok&=sensEncArrays[9].configure(pEncArrays,little_mp);
360 sensors_ok&=sensEncArrays[10].configure(pEncArrays,little_pip);
361 sensors_ok&=sensEncArrays[11].configure(pEncArrays,little_dip);
371 Property thumb(options.findGroup(
"thumb").toString().c_str());
372 Property index(options.findGroup(
"index").toString().c_str());
373 Property middle(options.findGroup(
"middle").toString().c_str());
374 Property ring(options.findGroup(
"ring").toString().c_str());
375 Property little(options.findGroup(
"little").toString().c_str());
377 bool fingers_ok=
true;
378 fingers_ok&=fingers[0].fromProperty(thumb);
379 fingers_ok&=fingers[1].fromProperty(index);
380 fingers_ok&=fingers[2].fromProperty(middle);
381 fingers_ok&=fingers[3].fromProperty(ring);
382 fingers_ok&=fingers[4].fromProperty(little);
392 fingers[0].attachSensor(sensEncs[0]);
393 fingers[0].attachSensor(sensEncArrays[0]);
394 fingers[0].attachSensor(sensEncArrays[1]);
396 fingers[1].attachSensor(sensEncs[1]);
397 fingers[1].attachSensor(sensEncArrays[2]);
398 fingers[1].attachSensor(sensEncArrays[3]);
400 fingers[2].attachSensor(sensEncs[2]);
401 fingers[2].attachSensor(sensEncArrays[4]);
402 fingers[2].attachSensor(sensEncArrays[5]);
404 fingers[3].attachSensor(sensEncs[3]);
405 fingers[3].attachSensor(sensEncArrays[6]);
406 fingers[3].attachSensor(sensEncArrays[7]);
407 fingers[3].attachSensor(sensEncArrays[8]);
409 fingers[4].attachSensor(sensEncs[4]);
410 fingers[4].attachSensor(sensEncArrays[9]);
411 fingers[4].attachSensor(sensEncArrays[10]);
412 fingers[4].attachSensor(sensEncArrays[11]);
421 return configured=
true;
510 Value fng=options.find(
"finger");
517 IControlMode *imod; drvEncs.view(imod);
518 IControlLimits *ilim; drvEncs.view(ilim);
519 IEncoders *ienc; drvEncs.view(ienc);
520 IPositionControl *ipos; drvEncs.view(ipos);
522 int nAxes; ienc->getAxes(&nAxes);
523 Vector qmin(nAxes),qmax(nAxes),vel(nAxes),
acc(nAxes);
526 for (
int j=7; j<nAxes; j++)
528 imod->setControlMode(j,VOCAB_CM_POSITION);
529 ilim->getLimits(j,&qmin[j],&qmax[j]);
531 ipos->getRefAcceleration(j,&
acc[j]);
532 ipos->getRefSpeed(j,&vel[j]);
534 ipos->setRefAcceleration(j,std::numeric_limits<double>::max());
535 ipos->setRefSpeed(j,60.0);
536 ipos->positionMove(j,(j==8)?qmax[j]:qmin[j]);
544 string tag=options.check(
"finger",Value(
"all")).asString();
547 calibrateFinger(fingers[0],10,qmin[10],qmax[10]);
549 else if (tag==
"index")
551 calibrateFinger(fingers[1],12,qmin[12],qmax[12]);
553 else if (tag==
"middle")
555 calibrateFinger(fingers[2],14,qmin[14],qmax[14]);
557 else if (tag==
"ring")
559 calibrateFinger(fingers[3],15,qmin[15],qmax[15]);
561 else if (tag==
"little")
563 calibrateFinger(fingers[4],15,qmin[15],qmax[15]);
565 else if ((tag==
"all") || (tag==
"all_serial"))
567 calibrateFinger(fingers[0],10,qmin[10],qmax[10]);
568 calibrateFinger(fingers[1],12,qmin[12],qmax[12]);
569 calibrateFinger(fingers[2],14,qmin[14],qmax[14]);
570 calibrateFinger(fingers[3],15,qmin[15],qmax[15]);
571 calibrateFinger(fingers[4],15,qmin[15],qmax[15]);
573 else if (tag==
"all_parallel")
576 Bottle &bl=b.addList();
577 bl.addString(
"thumb");
578 bl.addString(
"index");
579 bl.addString(
"middle");
580 bl.addString(
"ring");
581 bl.addString(
"little");
591 deque<CalibThread*> db;
592 set<string> singletons;
594 Bottle *items=fng.asList();
595 for (
int i=0; i<items->size(); i++)
597 string tag=items->get(i).asString();
600 if (singletons.find(tag)==singletons.end())
602 CalibThread *thr=
new CalibThread;
603 thr->setInfo(
this,fingers[0],10,qmin[10],qmax[10]);
606 singletons.insert(tag);
609 else if (tag==
"index")
611 if (singletons.find(tag)==singletons.end())
613 CalibThread *thr=
new CalibThread;
614 thr->setInfo(
this,fingers[1],12,qmin[12],qmax[12]);
617 singletons.insert(tag);
620 else if (tag==
"middle")
622 if (singletons.find(tag)==singletons.end())
624 CalibThread *thr=
new CalibThread;
625 thr->setInfo(
this,fingers[2],14,qmin[14],qmax[14]);
628 singletons.insert(tag);
631 else if (tag==
"ring")
633 if (singletons.find(tag)==singletons.end())
635 CalibThread *thr=
new CalibThread;
636 thr->setInfo(
this,fingers[3],15,qmin[15],qmax[15]);
639 singletons.insert(tag);
642 else if (tag==
"little")
644 if (singletons.find(tag)==singletons.end())
646 CalibThread *thr=
new CalibThread;
647 thr->setInfo(
this,fingers[4],15,qmin[15],qmax[15]);
650 singletons.insert(tag);
664 db.erase(db.begin()+i);
676 if (!fng.isString() && !fng.isList())
682 for (
int j=7; j<nAxes; j++)
684 ipos->setRefAcceleration(j,
acc[j]);
685 ipos->setRefSpeed(j,vel[j]);