45 typedef map<int, const char*> IdToLabelMap;
47 IdToLabelMap commandLabelMap;
49 IdLabel commandLabels[] = {
51 { DynamicsSimulator::POSITION_GIVEN,
"Position Given (High Gain Mode)" },
62 void initializeCommandLabelMaps()
64 if(commandLabelMap.empty()){
67 IdLabel& idLabel = commandLabels[
i++];
71 commandLabelMap[idLabel.id] = idLabel.label;
76 const char* getLabelOfLinkDataType(DynamicsSimulator::LinkDataType
type)
78 IdToLabelMap::iterator p = commandLabelMap.find(
type);
79 return (p != commandLabelMap.end()) ? p->second :
"Requesting Unknown Data Type";
84 template<
typename X,
typename X_ptr>
87 CosNaming::Name ncName;
89 ncName[0].id = CORBA::string_dup(
n.c_str());
90 ncName[0].kind = CORBA::string_dup(
"");
93 srv = X::_narrow(cxt->resolve(ncName));
95 std::cerr <<
n <<
" not found: ";
97 case CosNaming::NamingContext::missing_node:
98 std::cerr <<
"Missing Node" << std::endl;
99 case CosNaming::NamingContext::not_context:
100 std::cerr <<
"Not Context" << std::endl;
102 case CosNaming::NamingContext::not_object:
103 std::cerr <<
"Not Object" << std::endl;
107 }
catch(CosNaming::NamingContext::CannotProceed &exc) {
108 std::cerr <<
"Resolve " <<
n <<
" CannotProceed" << std::endl;
109 }
catch(CosNaming::NamingContext::AlreadyBound &exc) {
110 std::cerr <<
"Resolve " <<
n <<
" InvalidName" << std::endl;
117 : orb_(CORBA::ORB::_duplicate(orb))
120 cout <<
"DynamicsSimulator_impl::DynamicsSimulator_impl()" << endl;
128 CollisionDetectorFactory_var collisionDetectorFactory;
130 CORBA::Object_var nS = orb->resolve_initial_references(
"NameService");
131 CosNaming::NamingContext_var cxT;
132 cxT = CosNaming::NamingContext::_narrow(nS);
133 collisionDetectorFactory =
135 CollisionDetectorFactory_var>(
"CollisionDetectorFactory", cxT);
136 if (CORBA::is_nil(collisionDetectorFactory)) {
137 std::cerr <<
"CollisionDetectorFactory not found" << std::endl;
143 std::cerr <<
"failed to create CollisionDetector" << std::endl;
160 cout <<
"DynamicsSimulator_impl::~DynamicsSimulator_impl()" << endl;
170 cout <<
"DynamicsSimulator_impl::destroy()" << endl;
173 PortableServer::POA_var poa_ = _default_POA();
174 PortableServer::ObjectId_var
id = poa_->servant_to_id(
this);
175 poa_->deactivate_object(
id);
182 BodyInfo_ptr bodyInfo
186 cout <<
"DynamicsSimulator_impl::registerCharacter("
187 <<
name <<
", " << bodyInfo <<
" )" << std::endl;
195 std::cout <<
"Loaded Model:\n" << *body << std::endl;
198 collisionDetector->registerCharacter(
name, bodyInfo);
207 CORBA::Double timeStep,
208 OpenHRP::DynamicsSimulator::IntegrateMethod integrateOpt,
209 OpenHRP::DynamicsSimulator::SensorOption sensorOpt
213 cout <<
"DynamicsSimulator_impl::init(" << timeStep <<
", ";
214 cout << (integrateOpt == OpenHRP::DynamicsSimulator::EULER ?
"EULER, " :
"RUNGE_KUTTA, ");
215 cout << (sensorOpt == OpenHRP::DynamicsSimulator::DISABLE_SENSOR ?
"DISABLE_SENSOR" :
"ENABLE_SENSOR");
216 std::cout <<
")" << std::endl;
219 world.setTimeStep(timeStep);
220 world.setCurrentTime(0.0);
222 if(integrateOpt == OpenHRP::DynamicsSimulator::EULER){
223 world.setEulerMethod();
225 world.setRungeKuttaMethod();
228 world.enableSensors((sensorOpt == OpenHRP::DynamicsSimulator::ENABLE_SENSOR));
230 int n = world.numBodies();
231 for(
int i=0;
i <
n; ++
i){
232 world.body(
i)->initializeConfiguration();
235 _setupCharacterData();
245 const char *charName1,
246 const char *linkName1,
247 const char *charName2,
248 const char *linkName2,
249 const CORBA::Double staticFriction,
250 const CORBA::Double slipFriction,
251 const DblSequence6 & K,
252 const DblSequence6 & C,
253 const double culling_thresh,
254 const double restitution
257 const double epsilon = 0.0;
260 cout <<
"DynamicsSimulator_impl::registerCollisionCheckPair("
261 << charName1 <<
", " << linkName1 <<
", "
262 << charName2 <<
", " << linkName2 <<
", "
263 << staticFriction <<
", " << slipFriction <<
", " << restitution;
264 if((K.length() == 6) && (C.length() == 6)){
267 << K[CORBA::ULong(0)] <<
", "
268 << K[CORBA::ULong(1)] <<
", "
269 << K[CORBA::ULong(2)] <<
" }\n"
271 << K[CORBA::ULong(3)] <<
", "
272 << K[CORBA::ULong(4)] <<
", "
273 << K[CORBA::ULong(5)] <<
" }\n"
276 << C[CORBA::ULong(0)] <<
", "
277 << C[CORBA::ULong(1)] <<
", "
278 << C[CORBA::ULong(2)] <<
" }\n"
280 << C[CORBA::ULong(3)] <<
", "
281 << C[CORBA::ULong(4)] <<
", "
282 << C[CORBA::ULong(5)] <<
" }\n"
285 cout <<
", NULL, NULL)" << endl;
289 int bodyIndex1 = world.bodyIndex(charName1);
290 int bodyIndex2 = world.bodyIndex(charName2);
292 if(bodyIndex1 >= 0 && bodyIndex2 >= 0){
294 BodyPtr body1 = world.body(bodyIndex1);
295 BodyPtr body2 = world.body(bodyIndex2);
297 std::string emptyString =
"";
298 vector<Link*> links1;
299 if(emptyString == linkName1){
302 std::copy(traverse.
begin(), traverse.
end(), links1.begin());
304 links1.push_back(body1->link(linkName1));
307 vector<Link*> links2;
308 if(emptyString == linkName2){
311 std::copy(traverse.
begin(), traverse.
end(), links2.begin());
313 links2.push_back(body2->link(linkName2));
316 for(
size_t i=0;
i < links1.size(); ++
i){
317 for(
size_t j=0; j < links2.size(); ++j){
318 Link* link1 = links1[
i];
319 Link* link2 = links2[j];
321 if(link1 && link2 && link1 != link2){
322 bool ok = world.constraintForceSolver.addCollisionCheckLinkPair
323 (bodyIndex1, link1, bodyIndex2, link2, staticFriction, slipFriction, culling_thresh, restitution, epsilon);
326 LinkPair_var linkPair =
new LinkPair();
327 linkPair->charName1 = CORBA::string_dup(charName1);
328 linkPair->linkName1 = CORBA::string_dup(link1->
name.c_str());
329 linkPair->charName2 = CORBA::string_dup(charName2);
330 linkPair->linkName2 = CORBA::string_dup(link2->
name.c_str());
331 linkPair->tolerance = 0;
332 collisionDetector->addCollisionPair(linkPair);
343 const char *charName1,
344 const char *linkName1,
345 const char *charName2,
346 const char *linkName2,
347 const double tolerance
351 cout <<
"DynamicsSimulator_impl::registerIntersectionCheckPair("
352 << charName1 <<
", " << linkName1 <<
", "
353 << charName2 <<
", " << linkName2 <<
", "
354 << tolerance <<
")" << endl;
357 int bodyIndex1 = world.bodyIndex(charName1);
358 int bodyIndex2 = world.bodyIndex(charName2);
360 if(bodyIndex1 >= 0 && bodyIndex2 >= 0){
362 BodyPtr body1 = world.body(bodyIndex1);
363 BodyPtr body2 = world.body(bodyIndex2);
365 std::string emptyString =
"";
366 vector<Link*> links1;
367 if(emptyString == linkName1){
370 std::copy(traverse.
begin(), traverse.
end(), links1.begin());
372 links1.push_back(body1->link(linkName1));
375 vector<Link*> links2;
376 if(emptyString == linkName2){
379 std::copy(traverse.
begin(), traverse.
end(), links2.begin());
381 links2.push_back(body2->link(linkName2));
384 for(
size_t i=0;
i < links1.size(); ++
i){
385 for(
size_t j=0; j < links2.size(); ++j){
386 Link* link1 = links1[
i];
387 Link* link2 = links2[j];
389 if(link1 && link2 && link1 != link2){
391 LinkPair_var linkPair =
new LinkPair();
392 linkPair->charName1 = CORBA::string_dup(charName1);
393 linkPair->linkName1 = CORBA::string_dup(link1->
name.c_str());
394 linkPair->charName2 = CORBA::string_dup(charName2);
395 linkPair->linkName2 = CORBA::string_dup(link2->
name.c_str());
396 linkPair->tolerance = tolerance;
397 collisionDetector->addCollisionPair(linkPair);
407 const char* charName1,
408 const char* linkName1,
409 const char* charName2,
410 const char* linkName2,
411 const DblSequence3& link1LocalPos,
412 const DblSequence3& link2LocalPos,
413 const ExtraJointType jointType,
414 const DblSequence3& jointAxis,
415 const char* extraJointName
419 cout <<
"DynamicsSimulator_impl::registerExtraJoint("
420 << charName1 <<
", " << linkName1 <<
", "
421 << charName2 <<
", " << linkName2 <<
"\n"
424 << link1LocalPos[CORBA::ULong(0)] <<
", "
425 << link1LocalPos[CORBA::ULong(1)] <<
", "
426 << link1LocalPos[CORBA::ULong(2)] <<
"}\n{"
427 << link2LocalPos[CORBA::ULong(0)] <<
", "
428 << link2LocalPos[CORBA::ULong(1)] <<
", "
429 << link2LocalPos[CORBA::ULong(2)] <<
"}\n{"
430 << jointAxis[CORBA::ULong(0)] <<
", "
431 << jointAxis[CORBA::ULong(1)] <<
", "
432 << jointAxis[CORBA::ULong(2)] <<
"}\n"
433 << extraJointName <<
")\n";
437 int bodyIndex1 = world.bodyIndex(charName1);
438 int bodyIndex2 = world.bodyIndex(charName2);
439 if(bodyIndex1 >= 0 && bodyIndex2 >= 0){
440 BodyPtr body1 = world.body(bodyIndex1);
441 BodyPtr body2 = world.body(bodyIndex2);
442 Link* link1 = body1->link(linkName1);
443 Link* link2 = body2->link(linkName2);
445 world.constraintForceSolver.addExtraJoint
446 (bodyIndex1, link1, bodyIndex2, link2, link1LocalPos.get_buffer(), link2LocalPos.get_buffer(), jointType, jointAxis.get_buffer() );
453 const char * characterName,
454 const char * extraJointName,
455 DblSequence6_out contactForce
459 cout <<
"DynamicsSimulator_impl::getConnectionConstraintForce("
460 << characterName <<
", " << extraJointName <<
")" << endl;
467 const char *characterName,
468 const char *sensorName,
469 DblSequence_out sensorOutput
473 cout <<
"DynamicsSimulator_impl::getCharacterSensorData("
474 << characterName <<
", " << sensorName <<
")";
477 BodyPtr body = world.body(characterName);
479 std::cerr <<
"not found! :" << characterName << std::endl;
483 sensorOutput =
new DblSequence;
487 switch(sensor->
type){
492 sensorOutput->length(6);
497 sensorOutput[CORBA::ULong(0)] = forceSensor->
f(0); sensorOutput[CORBA::ULong(1)] = forceSensor->
f(1); sensorOutput[CORBA::ULong(2)] = forceSensor->
f(2);
498 sensorOutput[CORBA::ULong(3)] = forceSensor->
tau(0); sensorOutput[CORBA::ULong(4)] = forceSensor->
tau(1); sensorOutput[CORBA::ULong(5)] = forceSensor->
tau(2);
507 sensorOutput->length(3);
511 sensorOutput[CORBA::ULong(0)] = gyro->
w(0); sensorOutput[CORBA::ULong(1)] = gyro->
w(1); sensorOutput[CORBA::ULong(2)] = gyro->
w(2);
519 sensorOutput->length(3);
523 sensorOutput[CORBA::ULong(0)] = accelSensor->
dv(0); sensorOutput[CORBA::ULong(1)] = accelSensor->
dv(1); sensorOutput[CORBA::ULong(2)] = accelSensor->
dv(2);
531 sensorOutput->length(rangeSensor->
distances.size());
532 for (
unsigned int i=0;
i<rangeSensor->
distances.size();
i++){
544 cout <<
"DynamicsSimulator_impl::getCharacterSensorData - output\n"
545 <<
"( " << sensorOutput[CORBA::ULong(0)];
549 cout << sensorOutput[
i++];
550 if(
i == sensorOutput->length())
break;
562 cout <<
"DynamicsSimulator_impl::initSimulation()" << endl;
593 cout <<
"DynamicsSimulator_impl::stepSimulation()" << endl;
627 const char* characterName,
628 const char* linkName,
629 OpenHRP::DynamicsSimulator::LinkDataType
type,
630 const DblSequence& wdata
634 cout <<
"DynamicsSimulator_impl::setCharacterLinkData("
635 << characterName <<
", " << linkName <<
", "
636 << getLabelOfLinkDataType(
type) <<
", ";
639 case OpenHRP::DynamicsSimulator::POSITION_GIVEN:
644 cout << wdata[CORBA::ULong(0)] <<
")\n";
648 cout << wdata[CORBA::ULong(0)] <<
", "
649 << wdata[CORBA::ULong(1)] <<
", "
650 << wdata[CORBA::ULong(2)] <<
",\n"
651 << wdata[CORBA::ULong(3)] <<
", "
652 << wdata[CORBA::ULong(4)] <<
", "
653 << wdata[CORBA::ULong(5)] <<
",\n"
654 << wdata[CORBA::ULong(6)] <<
","
655 << wdata[CORBA::ULong(7)] <<
", "
656 << wdata[CORBA::ULong(8)] <<
",\n "
657 << wdata[CORBA::ULong(9)] <<
","
658 << wdata[CORBA::ULong(10)] <<
", "
659 << wdata[CORBA::ULong(11)] <<
")" << endl;
663 cout << wdata[CORBA::ULong(0)] <<
", "
664 << wdata[CORBA::ULong(1)] <<
", "
665 << wdata[CORBA::ULong(2)] <<
")" << endl;
669 BodyPtr body = world.body(characterName);
671 std::cerr <<
"not found! :" << characterName << std::endl;
674 Link* link = body->link(linkName);
676 std::cerr <<
"not found! :" << linkName << std::endl;
682 case OpenHRP::DynamicsSimulator::POSITION_GIVEN:
698 link->
ddq = wdata[0];
708 link->
p(0) = wdata[0];
709 link->
p(1) = wdata[1];
710 link->
p(2) = wdata[2];
719 link->
v(0) = wdata[0];
720 link->
v(1) = wdata[1];
721 link->
v(2) = wdata[2];
722 link->
w(0) = wdata[3];
723 link->
w(1) = wdata[4];
724 link->
w(2) = wdata[5];
726 link->
vo = link->
v - link->
w.cross(link->
p);
732 link->
dv(0) = wdata[0];
733 link->
dv(1) = wdata[1];
734 link->
dv(2) = wdata[2];
735 link->
dw(0) = wdata[3];
736 link->
dw(1) = wdata[4];
737 link->
dw(2) = wdata[5];
743 link->
fext(0) = wdata[0];
744 link->
fext(1) = wdata[1];
745 link->
fext(2) = wdata[2];
746 link->
tauext(0) = wdata[3];
747 link->
tauext(1) = wdata[4];
748 link->
tauext(2) = wdata[5];
756 needToUpdatePositions =
true;
757 needToUpdateSensorStates =
true;
763 const char * characterName,
764 const char * linkName,
765 OpenHRP::DynamicsSimulator::LinkDataType
type,
766 DblSequence_out out_rdata
770 cout <<
"DynamicsSimulator_impl::getCharacterLinkData("
771 << characterName <<
", " << linkName <<
", "
772 << getLabelOfLinkDataType(
type) <<
")" << endl;
775 BodyPtr body = world.body(characterName);
777 std::cerr <<
"not found! :" << characterName << std::endl;
780 Link* link = body->link(linkName);
782 std::cerr <<
"not found! :" << linkName << std::endl;
786 DblSequence_var rdata =
new DblSequence;
802 rdata[0] = link->
ddq;
813 rdata[0] = link->
p(0);
814 rdata[1] = link->
p(1);
815 rdata[2] = link->
p(2);
816 double*
buf = rdata->get_buffer();
823 rdata[0] = link->
v(0);
824 rdata[1] = link->
v(1);
825 rdata[2] = link->
v(2);
826 rdata[3] = link->
w(0);
827 rdata[4] = link->
w(1);
828 rdata[5] = link->
w(2);
833 rdata[0] = link->
fext(0);
834 rdata[1] = link->
fext(1);
835 rdata[2] = link->
fext(2);
836 rdata[3] = link->
tauext(0);
837 rdata[4] = link->
tauext(1);
838 rdata[5] = link->
tauext(2);
843 int n = constraintForces.size();
845 for(
int i=0;
i<
n;
i++){
846 rdata[
i*6 ] = constraintForces[
i].point(0);
847 rdata[
i*6+1] = constraintForces[
i].point(1);
848 rdata[
i*6+2] = constraintForces[
i].point(2);
849 rdata[
i*6+3] = constraintForces[
i].force(0);
850 rdata[
i*6+4] = constraintForces[
i].force(1);
851 rdata[
i*6+5] = constraintForces[
i].force(2);
860 out_rdata = rdata._retn();
866 const char * characterName,
867 OpenHRP::DynamicsSimulator::LinkDataType
type,
868 DblSequence_out rdata
872 cout <<
"DynamicsSimulator_impl::getCharacterAllLinkData("
873 << characterName <<
", "
874 << getLabelOfLinkDataType(
type) <<
")" << endl;
877 BodyPtr body = world.body(characterName);
879 std::cerr <<
"not found! :" << characterName << std::endl;
882 int n = body->numJoints();
883 rdata =
new DblSequence();
889 for(
int i=0;
i <
n; ++
i){
890 (*rdata)[
i] = body->joint(
i)->q;
895 for(
int i=0;
i <
n; ++
i){
896 (*rdata)[
i] = body->joint(
i)->dq;
901 for(
int i=0;
i <
n; ++
i){
902 (*rdata)[
i] = body->joint(
i)->ddq;
907 for(
int i=0;
i <
n; ++
i){
908 (*rdata)[
i] = body->joint(
i)->u;
913 cerr <<
"ERROR - Invalid type: " << getLabelOfLinkDataType(
type) << endl;
921 const char * characterName,
922 OpenHRP::DynamicsSimulator::LinkDataType
type,
923 const DblSequence & wdata
927 cout <<
"DynamicsSimulator_impl::setCharacterAllLinkData("
928 << characterName <<
", "
929 << getLabelOfLinkDataType(
type) <<
",\n(";
930 if(wdata.length()) cout << wdata[0];
931 for(CORBA::ULong
i=0;
i<wdata.length(); ++
i){
932 cout <<
", " << wdata[
i];
934 cout <<
"))" << endl;
937 BodyPtr body = world.body(characterName);
939 std::cerr <<
"not found! :" << characterName << std::endl;
943 unsigned int n = wdata.length();
944 if(
n > body->numJoints()){
945 n = body->numJoints();
951 for(
unsigned int i=0;
i <
n; ++
i){
952 if(body->joint(
i)->jointType != Link::FIXED_JOINT)
953 body->joint(
i)->q = wdata[
i];
958 for(
unsigned int i=0;
i <
n; ++
i){
959 if(body->joint(
i)->jointType != Link::FIXED_JOINT)
960 body->joint(
i)->dq = wdata[
i];
965 for(
unsigned int i=0;
i <
n; ++
i){
966 if(body->joint(
i)->jointType != Link::FIXED_JOINT)
967 body->joint(
i)->ddq = wdata[
i];
972 for(
unsigned int i=0;
i <
n; ++
i){
973 if(body->joint(
i)->jointType != Link::FIXED_JOINT
974 || body->joint(
i)->isCrawler)
975 body->joint(
i)->u = wdata[
i];
980 std::cerr <<
"ERROR - Invalid type: " << getLabelOfLinkDataType(
type) << endl;
983 needToUpdatePositions =
true;
984 needToUpdateSensorStates =
true;
990 const DblSequence3& wdata
993 if(wdata.length() != 3){
994 std::cerr <<
"setGVector : The data length is not three. " << std::endl;
1000 world.setGravityAcceleration(g);
1003 cout <<
"DynamicsSimulator_impl::setGVector("
1004 << wdata[CORBA::ULong(0)] <<
", "
1005 << wdata[CORBA::ULong(1)] <<
", "
1006 << wdata[CORBA::ULong(2)] <<
")" << endl;
1013 DblSequence3_out wdata
1017 Vector3 g = world.getGravityAcceleration();
1023 cout <<
"DynamicsSimulator_impl::getGVector(";
1024 cout << wdata[CORBA::ULong(0)] <<
", "
1025 << wdata[CORBA::ULong(1)] <<
", "
1026 << wdata[CORBA::ULong(2)] <<
")" << endl;
1033 const char * characterName,
1034 OpenHRP::DynamicsSimulator::JointDriveMode jointMode
1037 bool isHighGainMode = (jointMode == OpenHRP::DynamicsSimulator::HIGH_GAIN_MODE);
1039 BodyPtr body = world.body(characterName);
1041 std::cerr <<
"not found! :" << characterName << std::endl;
1045 for(
unsigned int i=1;
i < body->numLinks(); ++
i){
1046 body->link(
i)->isHighGainMode = isHighGainMode;
1050 cout <<
"DynamicsSimulator_impl::setCharacterAllJointModes(";
1051 cout << characterName <<
", ";
1052 cout << (isHighGainMode ?
"HIGH_GAIN_MODE" :
"TORQUE_MODE");
1053 cout <<
")" << endl;
1060 const char * characterName,
1061 const char * fromLink,
const char * toLink,
1062 const LinkPosition& target
1066 cout <<
"DynamicsSimulator_impl::calcCharacterInverseKinematics("
1067 << characterName <<
", " << fromLink <<
", " << toLink <<
",\n"
1069 << target.p[0] <<
", " << target.p[1] <<
", " << target.p[2] <<
",\n\n"
1070 << target.R[0] <<
", " << target.R[1] <<
", " << target.R[2] <<
",\n"
1071 << target.R[3] <<
", " << target.R[4] <<
", " << target.R[5] <<
",\n"
1072 << target.R[6] <<
", " << target.R[7] <<
", " << target.R[8] << endl;
1075 bool solved =
false;
1077 BodyPtr body = world.body(characterName);
1079 std::cerr <<
"not found! :" << characterName << std::endl;
1083 JointPath path(body->link(fromLink), body->link(toLink));
1086 Vector3 p(target.p[0], target.p[1], target.p[2]);
1088 for (
int i=0;
i<3;
i++) {
1089 for (
int j=0; j<3; j++){
1090 R(
i,j) = target.R[3*
i+j];
1097 needToUpdatePositions =
true;
1098 needToUpdateSensorStates =
true;
1108 const char * characterName
1112 cout <<
"DynamicsSimulator_impl::calcCharacterForwardKinematics( "
1113 << characterName << endl;
1116 BodyPtr body = world.body(characterName);
1118 std::cerr <<
"not found! :" << characterName << std::endl;
1121 body->calcForwardKinematics(
true,
true);
1123 needToUpdatePositions =
true;
1124 needToUpdateSensorStates =
true;
1131 world.
body(
i)->calcForwardKinematics(
true,
true);
1158 DistanceSequence_var distances =
new DistanceSequence;
1160 return distances._retn();
1171 LinkPairSequence_var pairs =
new LinkPairSequence;
1173 return pairs._retn();
1181 cout <<
"DynamicsSimulator_impl::getWorldState()\n";
1186 wstate =
new WorldState;
1193 cout <<
"getWorldState - exit" << endl;
1208 sstate =
new SensorState;
1216 cout <<
"DynamicsSimulator_impl::_setupCharacterData()\n";
1223 for(
int i=0;
i <
n; ++
i){
1226 int numLinks = body->numLinks();
1228 characterPosition.characterName = CORBA::string_dup(body->name().c_str());
1229 LinkPositionSequence& linkPositions = characterPosition.linkPositions;
1230 linkPositions.length(numLinks);
1232 int numJoints = body->numJoints();
1234 sensorState.q.length(numJoints);
1235 sensorState.dq.length(numJoints);
1236 sensorState.u.length(numJoints);
1240 sensorState.range.length(body->numSensors(Sensor::RANGE));
1243 std::cout <<
"character[" <<
i <<
"], nlinks = " << numLinks <<
"\n";
1248 cout <<
"_setupCharacterData() - exit" << endl;;
1256 cout <<
"DynamicsSimulator_impl::_updateCharacterPositions()\n";
1262 #pragma omp parallel for num_threads(3)
1263 for(
int i=0;
i <
n; ++
i){
1265 int numLinks = body->numLinks();
1270 cout <<
"character[" <<
i <<
"], nlinks = " << numLinks <<
"\n";
1273 for(
int j=0; j < numLinks; ++j) {
1274 Link* link = body->link(j);
1275 LinkPosition& linkPosition = characterPosition.linkPositions[j];
1284 cout <<
"_updateCharacterData() - exit" << endl;
1292 cout <<
"DynamicsSimulator_impl::_updateSensorStates()\n";
1296 for(
int i=0;
i < numBodies; ++
i){
1301 int numJoints = body->numJoints();
1303 for(
int j=0; j < numJoints; j++){
1304 Link* joint = body->joint(j);
1305 state.
q [j] = joint->
q;
1306 state.dq[j] = joint->
dq;
1307 state.u [j] = joint->
u;
1311 for(
int id = 0;
id <
n; ++id){
1316 std::cout <<
"Force Sensor: f:" << sensor->
f <<
"tau:" << sensor->
tau <<
"\n";
1321 for(
int id=0;
id <
n; ++id){
1325 std::cout <<
"Rate Gyro:" << sensor->
w <<
"\n";
1330 for(
int id=0;
id <
n; ++id){
1334 std::cout <<
"Accel:" << sensor->
dv << std::endl;
1338 n = body->numSensors(Sensor::RANGE);
1339 for (
int id=0;
id <
n; ++id){
1351 for (
unsigned int i=0;
i<
data->length();
i++){
1355 state.range[id] =
data;
1362 cout <<
"_updateCharacterData() - exit" << endl;
1374 const char *characterName,
1375 LinkPairSequence_out pairs
1379 cout <<
"DynamicsSimulator_impl::getCharacterCollidingPairs("
1380 << characterName <<
")" << endl;
1383 if(!world.body(characterName)){
1384 std::cerr <<
"not found! :" << characterName << std::endl;
1388 std::vector<unsigned int> locations;
1390 for(
unsigned int i=0;
i < collisions->length(); ++
i) {
1392 if( (strcmp(characterName, collisions[
i].pair.charName1) == 0) ||
1393 (strcmp(characterName, collisions[
i].pair.charName2) == 0))
1394 locations.push_back(
i);
1397 pairs->length(locations.size());
1400 for(std::vector<unsigned int>::iterator iter = locations.begin();
1401 iter != locations.end(); ++iter) {
1403 strcpy(pairs[
n].charName1, collisions[*iter].pair.charName1);
1404 strcpy(pairs[
n].charName2, collisions[*iter].pair.charName2);
1405 strcpy(pairs[
n].linkName1, collisions[*iter].pair.linkName1);
1406 strcpy(pairs[
n].linkName2, collisions[*iter].pair.linkName2);
1415 const char *characterName,
1416 const char *baseLink,
1417 const char *targetLink,
1418 DblSequence_out jacobian
1422 cout <<
"DynamicsSimulator_impl::calcCharacterJacobian("
1423 << characterName <<
", "
1425 << targetLink <<
")" << endl;
1428 BodyPtr body = world.body(characterName);
1430 std::cerr <<
"not found! :" << characterName << std::endl;
1434 JointPath path(body->link(baseLink), body->link(targetLink));
1442 for(
int r=0; r <
height; ++r){
1444 (*jacobian)[
i++] = J(r,
c);
1455 orb_(CORBA::ORB::_duplicate(orb))
1457 initializeCommandLabelMaps();
1460 cout <<
"DynamicsSimulatorFactory_impl::DynamicsSimulatorFactory_impl()" << endl;
1468 cout <<
"DynamicsSimulatorFactory_impl::~DynamicsSimulatorFactory_impl()" << endl;
1471 PortableServer::POA_var poa = _default_POA();
1472 PortableServer::ObjectId_var
id = poa -> servant_to_id(
this);
1473 poa -> deactivate_object(
id);
1480 cout <<
"DynamicsSimulatorFactory_impl::create()" << endl;
1485 PortableServer::ServantBase_var integratorrServant = integratorImpl;
1486 PortableServer::POA_var poa_ = _default_POA();
1487 PortableServer::ObjectId_var
id =
1488 poa_ -> activate_object(integratorImpl);
1490 return integratorImpl -> _this();
1496 orb_->shutdown(
false);