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 
00036 #include "Aria.h"
00037 
00038 
00039 int main(int argc, char **argv)
00040 {
00041   Aria::init();
00042 
00043   
00044   ArSimpleConnector connector(&argc, argv);
00045 
00046   ArRobot robot;
00047 
00048   
00049   
00050   ArSick sick;
00051 
00052   if (!connector.parseArgs() || argc > 1)
00053   {
00054     connector.logOptions();
00055     exit(1);
00056   }
00057   
00058   
00059   ArKeyHandler keyHandler;
00060   
00061   Aria::setKeyHandler(&keyHandler);
00062   
00063   robot.attachKeyHandler(&keyHandler);
00064 
00065   
00066   robot.addRangeDevice(&sick);
00067 
00068   ArSonarDevice sonar;
00069   robot.addRangeDevice(&sonar);
00070   
00071   ArActionTriangleDriveTo triangleDriveTo;
00072   ArFunctorC<ArActionTriangleDriveTo> lineGoCB(&triangleDriveTo, 
00073                       &ArActionTriangleDriveTo::activate);
00074   keyHandler.addKeyHandler('g', &lineGoCB);
00075   keyHandler.addKeyHandler('G', &lineGoCB);
00076   ArFunctorC<ArActionTriangleDriveTo> lineStopCB(&triangleDriveTo, 
00077                     &ArActionTriangleDriveTo::deactivate);
00078   keyHandler.addKeyHandler('s', &lineStopCB);
00079   keyHandler.addKeyHandler('S', &lineStopCB);
00080 
00081   ArActionLimiterForwards limiter("limiter", 150, 0, 0, 1.3);
00082   robot.addAction(&limiter, 70);
00083   ArActionLimiterBackwards limiterBackwards;
00084   robot.addAction(&limiterBackwards, 69);
00085 
00086   robot.addAction(&triangleDriveTo, 60);
00087 
00088   ArActionKeydrive keydrive;
00089   robot.addAction(&keydrive, 55);
00090 
00091 
00092   ArActionStop stopAction;
00093   robot.addAction(&stopAction, 50);
00094   
00095   
00096   if (!connector.connectRobot(&robot))
00097   {
00098     printf("Could not connect to robot... exiting\n");
00099     Aria::shutdown();
00100     return 1;
00101   }
00102 
00103   robot.comInt(ArCommands::SONAR, 1);
00104   robot.comInt(ArCommands::ENABLE, 1);
00105   
00106   
00107   robot.runAsync(true);
00108 
00109   
00110   connector.setupLaser(&sick);
00111 
00112   sick.runAsync();
00113 
00114   if (!sick.blockingConnect())
00115   {
00116     printf("Could not connect to SICK laser... exiting\n");
00117     Aria::shutdown();
00118     return 1;
00119   }
00120 
00121   printf("If you press the 'g' key it'll go find a triangle, if you press 's' it'll stop.\n");
00122 
00123   robot.waitForRunExit();
00124   return 0;
00125 }
00126 
00127 
00128