Go to the documentation of this file.00001
00010 #include <rtm/Manager.h>
00011 #include <rtm/CorbaNaming.h>
00012 #include <hrpModel/Body.h>
00013 #include <hrpModel/Link.h>
00014 #include <hrpModel/Sensor.h>
00015 #include <hrpModel/ModelLoaderUtil.h>
00016 #include "JointPathEx.h"
00017
00018
00019 extern "C" {
00020 hrp::JointPathExPtr jpe;
00021 hrp::BodyPtr m_robot(new hrp::Body());
00022 static std::string print_prefix("[jpe]");
00023
00024 int initializeOpenHRPModel (char* _filename)
00025 {
00026 int rtmargc=0;
00027 char** argv=NULL;
00028
00029
00030 rtmargc++;
00031
00032 RTC::Manager* manager;
00033
00034 manager = RTC::Manager::init(rtmargc, argv);
00035
00036 std::string nameServer = manager->getConfig()["corba.nameservers"];
00037 int comPos = nameServer.find(",");
00038 if (comPos < 0){
00039 comPos = nameServer.length();
00040 }
00041 nameServer = nameServer.substr(0, comPos);
00042 RTC::CorbaNaming naming(manager->getORB(), nameServer.c_str());
00043 std::string filename(_filename);
00044 if (!loadBodyFromModelLoader(m_robot, filename.c_str(),
00045 CosNaming::NamingContext::_duplicate(naming.getRootContext()),
00046 true)){
00047 std::cerr << print_prefix << " Failed to load model[" << filename << "]" << std::endl;
00048 return 1;
00049 } else {
00050 std::cerr << print_prefix << " Success to load model[" << filename << "]" << std::endl;
00051 }
00052 return 0;
00053 };
00054
00055 int initializeJointPathExInstance (char* root_link_name, char* target_link_name)
00056 {
00057 jpe = hrp::JointPathExPtr(new hrp::JointPathEx(m_robot, m_robot->link(root_link_name), m_robot->link(target_link_name), 0.002, false, std::string("test")));
00058 if ( !jpe ) {
00059 std::cerr << print_prefix << " Fail to joint path from " << root_link_name << " to " << target_link_name << std::endl;
00060 } else {
00061 std::cerr << print_prefix << " Success to joint path from " << root_link_name << " to " << target_link_name << " (dof = " << jpe->numJoints() << std::endl;
00062 }
00063 return 0;
00064 }
00065
00066 int _setJointAngles (double* ja)
00067 {
00068 for ( unsigned int i = 0; i < m_robot->numJoints(); i++ ) {
00069 m_robot->joint(i)->q = ja[i];
00070 }
00071 m_robot->calcForwardKinematics();
00072 return 0;
00073 }
00074
00075 int _getJointAngles (double* ja)
00076 {
00077 for ( unsigned int i = 0; i < m_robot->numJoints(); i++ ) {
00078 ja[i] = m_robot->joint(i)->q;
00079 }
00080
00081 return 0;
00082 }
00083
00084 int _calcInverseKinematics2Loop (double* _vel_p, double* _vel_r)
00085 {
00086 hrp::dvector qrefv = hrp::dvector::Zero(jpe->numJoints());
00087 hrp::Vector3 vel_p, vel_r;
00088 for (size_t i = 0; i < 3; i++) {
00089 vel_p[i] = _vel_p[i];
00090 vel_r[i] = _vel_r[i];
00091 }
00092 jpe->calcInverseKinematics2Loop(vel_p, vel_r, 1.0, 0.002, 0.0, &qrefv);
00093 return 0;
00094 }
00095 };