test-ScorbotServer.C
00001 #include <Ice/Ice.h>
00002 #include "Component/ModelManager.H"
00003 #include "Robots/Scorbot/Scorbot.ice.H"
00004 #include "Media/FrameSeries.H"
00005 #include "Raster/GenericFrame.H"
00006 #include "Transport/FrameInfo.H"
00007 #include "Image/Image.H"
00008 #include "Image/DrawOps.H"
00009 #include "GUI/PrefsWindow.H"
00010 #include "Devices/DeviceOpts.H"
00011 #include <vector>
00012 #include <pthread.h>
00013
00014
00015
00016 nub::soft_ref<OutputFrameSeries> ofs;
00017 nub::soft_ref<InputFrameSeries> ifs;
00018
00019 void *displayThread(void*)
00020 {
00021 PrefsWindow pWin("Camera Control", SimpleFont::FIXED(8));
00022 pWin.setValueNumChars(16);
00023 pWin.addPrefsForComponent(ifs.get(), true);
00024
00025 while(1)
00026 {
00027 pWin.update();
00028
00029 if(ifs->updateNext() == FRAME_COMPLETE) break;
00030 GenericFrame input = ifs->readFrame();
00031 if(!input.initialized()) break;
00032
00033 Image<PixRGB<byte> > img = input.asRgb();
00034 Dims winSize(512, 512);
00035 Point2D<int> center(img.getWidth()/2, img.getHeight()/2);
00036
00037
00038
00039
00040
00041 ofs->writeRGB(img, "Output", FrameInfo("output", SRC_POS));
00042 ofs->updateNext();
00043
00044 }
00045
00046 pthread_exit(NULL);
00047
00048 }
00049
00050 int main(int argc, char* argv[])
00051 {
00052 ModelManager mgr("Test Scorbot Interface");
00053
00054 ifs.reset(new InputFrameSeries(mgr));
00055 mgr.addSubComponent(ifs);
00056
00057 ofs.reset(new OutputFrameSeries(mgr));
00058 mgr.addSubComponent(ofs);
00059
00060 if(mgr.parseCommandLine(argc, argv, "RunPath [true|false]", 1, 1) == false) return -1;
00061 mgr.start();
00062 ifs->startStream();
00063
00064 bool runPath = false;
00065
00066 if(mgr.numExtraArgs() > 0)
00067 {
00068 if(mgr.getExtraArg(0) == "true") runPath = true;
00069 }
00070
00071
00072 ScorbotIce::ScorbotPrx scorbot;
00073
00074 bool IceError = false;
00075 Ice::CommunicatorPtr ic;
00076 try {
00077 int argc_fake=1; char* argv_fake[argc_fake];
00078 argv[0] = new char[128]; sprintf(argv[0], "test-ScorbotServer");
00079 ic = Ice::initialize(argc_fake, argv_fake);
00080 Ice::ObjectPrx base = ic->stringToProxy(
00081 "ScorbotServer:default -p 10000 -h ihead");
00082 scorbot = ScorbotIce::ScorbotPrx::checkedCast(base);
00083 if(!scorbot)
00084 throw "Invalid Proxy";
00085 } catch (const Ice::Exception& ex) {
00086 std::cerr << ex << std::endl;
00087 IceError = true;
00088 } catch(const char* msg) {
00089 std::cerr << msg << std::endl;
00090 IceError = true;
00091 }
00092 if(IceError) {
00093 std::cerr << "#################### ERROR - QUITTING ####################" << std::endl;
00094 if(ic) ic->destroy();
00095 exit(-1);
00096 }
00097
00098 pthread_t videoThread;
00099 pthread_create(&videoThread, NULL, displayThread, NULL);
00100
00101 scorbot->setEnabled(true);
00102
00103 std::vector<int> focusVals;
00104 std::vector<ScorbotIce::encoderValsType> positions;
00105 ScorbotIce::encoderValsType encoderVals;
00106 int focus = 8;
00107
00108
00109 focus = 8;
00110 encoderVals[ScorbotIce::Base] = -4286;
00111 encoderVals[ScorbotIce::Shoulder] = 8976;
00112 encoderVals[ScorbotIce::Elbow] = -3940;
00113 encoderVals[ScorbotIce::Wrist1] = 1884;
00114 encoderVals[ScorbotIce::Wrist2] = -2291;
00115 encoderVals[ScorbotIce::Gripper] = 0;
00116 encoderVals[ScorbotIce::Slider] = -42130;
00117 positions.push_back(encoderVals);
00118 focusVals.push_back(focus);
00119
00120
00121 focus = 9;
00122 encoderVals[ScorbotIce::Base] = -3397;
00123 encoderVals[ScorbotIce::Shoulder] = 6985;
00124 encoderVals[ScorbotIce::Elbow] = 1502;
00125 encoderVals[ScorbotIce::Wrist1] = 1881;
00126 encoderVals[ScorbotIce::Wrist2] = -2288;
00127 encoderVals[ScorbotIce::Gripper] = 0;
00128 encoderVals[ScorbotIce::Slider] = -42130;
00129 positions.push_back(encoderVals);
00130 focusVals.push_back(focus);
00131
00132
00133 focus = 13;
00134 encoderVals[ScorbotIce::Base] = 1805;
00135 encoderVals[ScorbotIce::Shoulder] = 2720;
00136 encoderVals[ScorbotIce::Elbow] = 4072;
00137 encoderVals[ScorbotIce::Wrist1] = 2140;
00138 encoderVals[ScorbotIce::Wrist2] = -2416;
00139 encoderVals[ScorbotIce::Gripper] = 0;
00140 encoderVals[ScorbotIce::Slider] = 34534;
00141 positions.push_back(encoderVals);
00142 focusVals.push_back(focus);
00143
00144
00145 focus = 10;
00146 encoderVals[ScorbotIce::Base] = 2251;
00147 encoderVals[ScorbotIce::Shoulder] = 8416;
00148 encoderVals[ScorbotIce::Elbow] = 2537;
00149 encoderVals[ScorbotIce::Wrist1] = 1720;
00150 encoderVals[ScorbotIce::Wrist2] = -1793;
00151 encoderVals[ScorbotIce::Gripper] = 0;
00152 encoderVals[ScorbotIce::Slider] = 109292;
00153 positions.push_back(encoderVals);
00154 focusVals.push_back(focus);
00155
00156
00157 focus = 11;
00158 encoderVals[ScorbotIce::Base] = -821;
00159 encoderVals[ScorbotIce::Shoulder] = 5717;
00160 encoderVals[ScorbotIce::Elbow] = 2081;
00161 encoderVals[ScorbotIce::Wrist1] = 1492;
00162 encoderVals[ScorbotIce::Wrist2] = -1631;
00163 encoderVals[ScorbotIce::Gripper] = 0;
00164 encoderVals[ScorbotIce::Slider] = 32629;
00165 positions.push_back(encoderVals);
00166 focusVals.push_back(focus);
00167
00168 focus = 10;
00169 encoderVals[ScorbotIce::Base] = -6493;
00170 encoderVals[ScorbotIce::Shoulder] = 6407;
00171 encoderVals[ScorbotIce::Elbow] = 1812;
00172 encoderVals[ScorbotIce::Wrist1] = 1831;
00173 encoderVals[ScorbotIce::Wrist2] = -1763;
00174 encoderVals[ScorbotIce::Gripper] = 0;
00175 encoderVals[ScorbotIce::Slider] = -3482;
00176 positions.push_back(encoderVals);
00177 focusVals.push_back(focus);
00178
00179 mgr.setOptionValString(&OPT_FrameGrabberFocusAuto, "false");
00180 while(1)
00181 {
00182 if(runPath)
00183 {
00184 for(size_t posIdx=0; posIdx<positions.size(); posIdx++)
00185 {
00186 std::cout << "---------------------------------------" << std::endl;
00187 std::cout << "Going To Position " << posIdx << std::endl;
00188
00189
00190 char buffer[32];
00191 sprintf(buffer, "%d", focusVals[posIdx]);
00192 std::string focusString(buffer);
00193 mgr.setOptionValString(&OPT_FrameGrabberFocus, focusString);
00194
00195
00196 scorbot->setJoints(positions[posIdx], 2000);
00197
00198 sleep(2);
00199
00200 std::cout << "Done..." << std::endl;
00201
00202
00203 ScorbotIce::encoderValsType currPos = scorbot->getEncoders();
00204 std::cout << "Base: " << currPos[ScorbotIce::Base] << " / " << positions[posIdx][ScorbotIce::Base] << std::endl;
00205 std::cout << "Shoulder: " << currPos[ScorbotIce::Shoulder] << " / " << positions[posIdx][ScorbotIce::Shoulder] << std::endl;
00206 std::cout << "Elbow: " << currPos[ScorbotIce::Elbow] << " / " << positions[posIdx][ScorbotIce::Elbow] << std::endl;
00207 std::cout << "Wrist1: " << currPos[ScorbotIce::Wrist1] << " / " << positions[posIdx][ScorbotIce::Wrist1] << std::endl;
00208 std::cout << "Wrist2: " << currPos[ScorbotIce::Wrist2] << " / " << positions[posIdx][ScorbotIce::Wrist2] << std::endl;
00209 std::cout << "Gripper: " << currPos[ScorbotIce::Gripper] << " / " << positions[posIdx][ScorbotIce::Gripper] << std::endl;
00210 std::cout << "Slider: " << currPos[ScorbotIce::Slider] << " / " << positions[posIdx][ScorbotIce::Slider] << std::endl;
00211 sleep(2);
00212 }
00213 }
00214
00215 sleep(1);
00216
00217 }
00218
00219 }
00220