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 #include "Aria.h"
00027 #include "ArNetworking.h"
00028
00029
00037 int main(int argc, char **argv)
00038 {
00039 Aria::init();
00040 ArRobot robot;
00041 ArArgumentParser parser(&argc, argv);
00042 ArSimpleConnector simpleConnector(&parser);
00043
00044
00045 ArServerBase server;
00046
00047
00048
00049 ArServerSimpleOpener simpleOpener(&parser);
00050
00051
00052
00053 parser.loadDefaultArguments();
00054 if (!simpleConnector.parseArgs() || !simpleOpener.parseArgs() ||
00055 !parser.checkHelpAndWarnUnparsed())
00056 {
00057 simpleConnector.logOptions();
00058 simpleOpener.logOptions();
00059 exit(1);
00060 }
00061
00062
00063 if (!simpleOpener.open(&server))
00064 {
00065 ArLog::log(ArLog::Terse, "Error: Could not open server on port %d", simpleOpener.getPort());
00066 exit(1);
00067 }
00068
00069
00070
00071
00072
00073
00074
00075 ArServerInfoRobot serverInfoRobot(&server, &robot);
00076
00077
00078 ArServerModeStop modeStop(&server, &robot);
00079
00080 ArServerModeRatioDrive modeRatioDrive(&server, &robot);
00081 ArServerModeWander modeWander(&server, &robot);
00082 modeStop.addAsDefaultMode();
00083 modeStop.activate();
00084
00085
00086 ArServerHandlerCommands commands(&server);
00087 ArServerSimpleComUC uCCommands(&commands, &robot);
00088 ArServerSimpleComMovementLogging loggingCommands(&commands, &robot);
00089 modeRatioDrive.addControlCommands(&commands);
00090
00091
00092
00093
00094
00095 ArServerInfoStrings stringInfo(&server);
00096 Aria::getInfoGroup()->addAddStringCallback(stringInfo.getAddStringFunctor());
00097
00098
00099 Aria::getInfoGroup()->addStringInt(
00100 "Motor Packet Count", 10,
00101 new ArConstRetFunctorC<int, ArRobot>(&robot,
00102 &ArRobot::getMotorPacCount));
00103
00104
00105
00106
00107
00108 if (!simpleConnector.connectRobot(&robot))
00109 {
00110 printf("Error: Could not connect to robot... exiting\n");
00111 Aria::shutdown();
00112 return 1;
00113 }
00114
00115
00116 robot.enableMotors();
00117 robot.runAsync(true);
00118
00119
00120
00121 simpleOpener.checkAndLog();
00122
00123
00124 server.runAsync();
00125
00126 ArLog::log(ArLog::Normal, "Server is now running... Press Ctrl-C to exit.");
00127
00128 robot.waitForRunExit();
00129 Aria::shutdown();
00130 exit(0);
00131 }
00132
00133