test-armSim.C
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
00039 #include "Image/Layout.H"
00040 #include "Image/MatrixOps.H"
00041 #include "GUI/ImageDisplayStream.H"
00042 #include "GUI/XWinManaged.H"
00043 #include "Component/ModelManager.H"
00044 #include "Raster/GenericFrame.H"
00045 #include "Media/FrameSeries.H"
00046 #include "Transport/FrameInfo.H"
00047 #include "Devices/JoyStick.H"
00048 #include "Devices/Scorbot.H"
00049 #include "ArmControl/ArmSim.H"
00050 #include <stdio.h>
00051 #include <stdlib.h>
00052 #include <ode/ode.h>
00053 #include <signal.h>
00054
00055 #define KEY_UP 98
00056 #define KEY_DOWN 104
00057 #define KEY_LEFT 100
00058 #define KEY_RIGHT 102
00059
00060
00061 int getKey(nub::ref<OutputFrameSeries> &ofs)
00062 {
00063 const nub::soft_ref<ImageDisplayStream> ids =
00064 ofs->findFrameDestType<ImageDisplayStream>();
00065
00066 const rutz::shared_ptr<XWinManaged> uiwin =
00067 ids.is_valid()
00068 ? ids->getWindow("ArmSiminput")
00069 : rutz::shared_ptr<XWinManaged>();
00070 return uiwin->getLastKeyPress();
00071 }
00072
00073 Point2D<int> getClick(nub::ref<OutputFrameSeries> &ofs)
00074 {
00075 const nub::soft_ref<ImageDisplayStream> ids =
00076 ofs->findFrameDestType<ImageDisplayStream>();
00077
00078 const rutz::shared_ptr<XWinManaged> uiwin =
00079 ids.is_valid()
00080 ? ids->getWindow("ArmSiminput")
00081 : rutz::shared_ptr<XWinManaged>();
00082 return uiwin->getLastMouseClick();
00083 }
00084
00085
00086 int main(int argc, char *argv[])
00087 {
00088
00089 ModelManager manager("Test Model for armSim");
00090
00091 nub::ref<OutputFrameSeries> ofs(new OutputFrameSeries(manager));
00092 manager.addSubComponent(ofs);
00093
00094 nub::soft_ref<ArmSim> armSim ((new ArmSim(manager,"ArmSim","ArmSim",21,14,22.5+10,22.5+10)));
00095 manager.addSubComponent(armSim);
00096
00097
00098 if (manager.parseCommandLine(argc, argv, "", 0, 0) == false) return(1);
00099
00100
00101 manager.start();
00102
00103 int speed = 75;
00104 while(1){
00105 armSim->simLoop();
00106
00107 Image<PixRGB<byte> > armCam = flipVertic(armSim->getFrame(-1));
00108
00109 ofs->writeRGB(armCam, "ArmSiminput", FrameInfo("ArmSiminput", SRC_POS));
00110
00111 int key = getKey(ofs);
00112 double pos[]={-0.3,0,0.1};
00113 if (key != -1)
00114 {
00115 switch(key)
00116 {
00117 case 10:
00118 armSim->setMotor(ArmSim::BASE, speed);
00119 break;
00120 case 24:
00121 armSim->setMotor(ArmSim::BASE, -1*speed);
00122 break;
00123 case 11:
00124 armSim->setMotor(ArmSim::SHOLDER, -1*speed);
00125 break;
00126 case 25:
00127 armSim->setMotor(ArmSim::SHOLDER, speed);
00128 break;
00129 case 12:
00130 armSim->setMotor(ArmSim::ELBOW, speed);
00131 break;
00132 case 26:
00133 armSim->setMotor(ArmSim::ELBOW, -1*speed);
00134 break;
00135 case 13:
00136 armSim->setMotor(ArmSim::WRIST1, speed);
00137 break;
00138 case 27:
00139 armSim->setMotor(ArmSim::WRIST1, -1*speed);
00140 break;
00141 case 14:
00142 armSim->setMotor(ArmSim::WRIST2, speed);
00143 break;
00144 case 28:
00145 armSim->setMotor(ArmSim::WRIST2, -1*speed);
00146 break;
00147 case 15:
00148 armSim->setMotor(ArmSim::GRIPPER, speed);
00149 break;
00150 case 29:
00151 armSim->setMotor(ArmSim::GRIPPER, -1*speed);
00152 break;
00153 case 65:
00154 armSim->stopAllMotors();
00155 break;
00156 case 33:
00157
00158
00159 break;
00160 case 58:
00161
00162 break;
00163 case 43:
00164
00165 break;
00166 case 32:
00167 armSim->addObject(ArmSim::BOX,pos);
00168 break;
00169
00170 case KEY_UP: speed += 1; break;
00171 case KEY_DOWN: speed -= 1; break;
00172
00173 }
00174
00175 if (speed < 0) speed = 0;
00176 if (speed > 100) speed = 100;
00177
00178
00179 LINFO("Key = %i", key);
00180 }
00181
00182 Point2D<int> clickLoc = getClick(ofs);
00183 if (clickLoc.isValid())
00184 {
00185 double loc[3];
00186 armSim->getObjLoc(clickLoc.i, clickLoc.j, loc);
00187 LINFO("Loc %f,%f,%f", loc[0], loc[1], loc[2]);
00188 }
00189 }
00190 return 0;
00191
00192 }