ArmPlanner.H
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038 #ifndef ArmPlanner_H_DEFINED
00039 #define ArmPlanner_H_DEFINED
00040 #include "Component/ModelParam.H"
00041 #include "Component/ModelOptionDef.H"
00042 #include "Component/ModelComponent.H"
00043 #include "ArmControl/CtrlPolicy.H"
00044 #include "ArmControl/ArmSim.H"
00045 #include "ArmControl/RobotArm.H"
00046 #include "ArmControl/ArmController.H"
00047 #include "Util/Types.H"
00048 #include "Util/MathFunctions.H"
00049 #include <deque>
00050 #include <stdarg.h>
00051 #include <unistd.h>
00052 #include <stdio.h>
00053
00054
00055 #ifdef USE_LWPR
00056 #define USE_EXPAT
00057 #include <lwpr/lwpr.h>
00058 #include <lwpr/lwpr_xml.h>
00059 #endif
00060 class ArmPlanner : public ModelComponent
00061 {
00062 public:
00063
00064
00065
00066 ArmPlanner(OptionManager& mgr,
00067 const std::string& descrName = "ArmPlanner",
00068 const std::string& tagName = "ArmPlanner",
00069 nub::soft_ref<ArmController> realControler = nub::soft_ref<ArmController>(),
00070 nub::soft_ref<ArmController> controler = nub::soft_ref<ArmController>(),
00071 nub::soft_ref<ArmSim> armSim = nub::soft_ref<ArmSim>()
00072 );
00073
00074
00075 ~ArmPlanner(){};
00076
00077
00078 bool move(double *desire,double errThres);
00079 bool moveRel(double x,double y,double z,double errThres);
00080
00081 bool gradient(double *desire,double errThres);
00082
00083 bool gibbsSampling(double *desire,double errThres);
00084
00085 bool gibbsControl(double *desire,double d);
00086
00087 void moveMotor(int motor,int move);
00088 #ifdef USE_LWPR
00089
00090 void trainArm(LWPR_Model& ik_model, const double* armPos, const ArmController::JointPos& jointPos);
00091
00092 ArmController::JointPos getIK(LWPR_Model& ik_model, const double* desiredPos);
00093 #endif
00094 ArmController::JointPos getIK2(const double* desiredPos);
00095 void getFK(double *endPos);
00096
00097
00098 ArmController::JointPos calcGradient(const double* desiredPos);
00099
00100 void minJerk(double *desire,double *nextPoint,double time);
00101 void updateDataImg();
00102 const Image<PixRGB<byte> >* getImagePtr() { return &itsImage; }
00103 ArmController::JointPos sim2real(ArmController::JointPos armSimJointPos );
00104
00105 private:
00106 #ifdef USE_LWPR
00107 LWPR_Model ik_model;
00108 #endif
00109 int numWarnings ;
00110 nub::soft_ref<ArmController> itsRealArmController;
00111 nub::soft_ref<ArmController> itsArmController;
00112 nub::soft_ref<ArmSim> itsArmSim;
00113 Image<PixRGB<byte> > itsImage;
00114
00115 double getDistance(const double* pos, const double* desire)
00116 {
00117 double sum = 0;
00118 for(int i = 0; i < 3; i++)
00119 sum+= (pos[i]-desire[i])*(pos[i]-desire[i]);
00120 return sqrt(sum);
00121 }
00122 double getDistance2D(const double* pos, const double* desire)
00123 {
00124 double sum = 0;
00125 for(int i = 0; i < 2; i++)
00126 sum+= (pos[i]-desire[i])*(pos[i]-desire[i]);
00127 return sqrt(sum);
00128 }
00129 double sq(const double x)
00130 {
00131 return x*x;
00132 }
00133
00134 };
00135
00136 #endif
00137
00138
00139
00140
00141
00142