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
00058 int main(int argc, char **argv)
00059 {
00060 Aria::init();
00061
00062 ArRobot robot;
00063
00064
00065 ArServerBase server;
00066
00067 ArArgumentParser parser(&argc, argv);
00068 ArSimpleConnector simpleConnector(&parser);
00069 ArServerSimpleOpener simpleOpener(&parser);
00070
00071
00072 ArAnalogGyro gyro(&robot);
00073
00074
00075 parser.loadDefaultArguments();
00076
00077 ArClientSwitchManager clientSwitchManager(&server, &parser);
00078
00079
00080
00081 if (!Aria::parseArgs() || !parser.checkHelpAndWarnUnparsed())
00082 {
00083 Aria::logOptions();
00084 Aria::exit(1);
00085 }
00086
00087
00088 char fileDir[1024];
00089 ArUtil::addDirectories(fileDir, sizeof(fileDir), Aria::getDirectory(),
00090 "ArNetworking/examples");
00091
00092
00093 if (!simpleOpener.open(&server, fileDir, 240))
00094 {
00095 if (simpleOpener.wasUserFileBad())
00096 printf("Bad user/password/permissions file\n");
00097 else
00098 printf("Could not open server port\n");
00099 exit(1);
00100 }
00101
00102
00103
00104 ArSonarDevice sonarDev;
00105 robot.addRangeDevice(&sonarDev);
00106
00107 ArIRs irs;
00108 robot.addRangeDevice(&irs);
00109
00110 ArBumpers bumpers;
00111 robot.addRangeDevice(&bumpers);
00112
00113 ArSick sick(361, 180);
00114 robot.addRangeDevice(&sick);
00115
00116
00117
00118
00119 ArServerInfoRobot serverInfoRobot(&server, &robot);
00120 ArServerInfoSensor serverInfoSensor(&server, &robot);
00121 ArServerInfoDrawings drawings(&server);
00122 drawings.addRobotsRangeDevices(&robot);
00123
00124
00125
00126 ArLaserReflectorDevice reflector(&sick, &robot);
00127 drawings.addRangeDevice(&reflector);
00128
00129
00130
00131 ArServerModeStop modeStop(&server, &robot);
00132 ArServerModeDrive modeDrive(&server, &robot);
00133 ArServerModeRatioDrive modeRatioDrive(&server, &robot);
00134 ArServerModeWander modeWander(&server, &robot);
00135 modeStop.addAsDefaultMode();
00136 modeStop.activate();
00137
00138
00139 ArServerHandlerCommands commands(&server);
00140 ArServerSimpleComUC uCCommands(&commands, &robot);
00141 ArServerSimpleComMovementLogging loggingCommands(&commands, &robot);
00142 ArServerSimpleComGyro gyroCommands(&commands, &robot, &gyro);
00143 ArServerSimpleComLogRobotConfig configCommands(&commands, &robot);
00144 ArServerSimpleServerCommands serverCommands(&commands, &server);
00145 modeDrive.addControlCommands(&commands);
00146
00147
00148
00149
00150
00151
00152
00153
00154 ArHybridForwarderVideo videoForwarder(&server, "localhost", 7070);
00155
00156
00157
00158 ArPTZ *camera = NULL;
00159 ArServerHandlerCamera *handlerCamera = NULL;
00160 ArCameraCollection *cameraCollection = NULL;
00161 if (videoForwarder.isForwardingVideo())
00162 {
00163 bool invertedCamera = false;
00164 camera = new ArVCC4(&robot, invertedCamera,
00165 ArVCC4::COMM_UNKNOWN, true, true);
00166 camera->init();
00167
00168 cameraCollection = new ArCameraCollection();
00169 cameraCollection->addCamera("Cam1", "VCC4", "Camera", "VCC4");
00170 handlerCamera = new ArServerHandlerCamera("Cam1",
00171 &server,
00172 &robot,
00173 camera,
00174 cameraCollection);
00175 }
00176
00177
00178
00179 ArServerInfoStrings stringInfo(&server);
00180 Aria::getInfoGroup()->addAddStringCallback(stringInfo.getAddStringFunctor());
00181 Aria::getInfoGroup()->addStringInt(
00182 "Motor Packet Count", 10,
00183 new ArConstRetFunctorC<int, ArRobot>(&robot,
00184 &ArRobot::getMotorPacCount));
00185 Aria::getInfoGroup()->addStringInt(
00186 "Laser Packet Count", 10,
00187 new ArRetFunctorC<int, ArSick>(&sick,
00188 &ArSick::getSickPacCount));
00189
00190
00191
00192
00193 if (!simpleConnector.connectRobot(&robot))
00194 {
00195 printf("Could not connect to robot... exiting\n");
00196 Aria::shutdown();
00197 return 1;
00198 exit(1);
00199 }
00200
00201
00202 simpleConnector.setupLaser(&sick);
00203
00204
00205 robot.enableMotors();
00206 robot.runAsync(true);
00207
00208 sick.runAsync();
00209
00210
00211 if (!simpleConnector.connectLaser(&sick))
00212 {
00213 printf("Could not connect to laser... exiting\n");
00214 Aria::exit(2);
00215 }
00216
00217
00218 simpleOpener.checkAndLog();
00219
00220 server.runAsync();
00221
00222 printf("Server is now running...\n");
00223
00224
00225
00226
00227
00228
00229 ArKeyHandler *keyHandler;
00230 if ((keyHandler = Aria::getKeyHandler()) == NULL)
00231 {
00232 keyHandler = new ArKeyHandler;
00233 Aria::setKeyHandler(keyHandler);
00234 robot.lock();
00235 robot.attachKeyHandler(keyHandler);
00236 robot.unlock();
00237 printf("To exit, press escape.\n");
00238 }
00239
00240 clientSwitchManager.runAsync();
00241
00242 robot.waitForRunExit();
00243 Aria::exit(0);
00244 }
00245
00246