Press g or G to use ArActionTriangleDriveTo to detect and drive towards a triangular target shape. Press s or S to stop. See ArActionTriangleDriveTo for more information about the triangular target and what the action does and its parameters.
#include "Aria.h" int main(int argc, char **argv) { Aria::init(); // parse our args and make sure they were all accounted for ArSimpleConnector connector(&argc, argv); ArRobot robot; // the laser. ArActionTriangleDriveTo will use this laser object since it is // named "laser" when added to the ArRobot. ArSick sick; if (!connector.parseArgs() || argc > 1) { connector.logOptions(); exit(1); } // a key handler so we can do our key handling ArKeyHandler keyHandler; // let the global aria stuff know about it Aria::setKeyHandler(&keyHandler); // toss it on the robot robot.attachKeyHandler(&keyHandler); // add the laser to the robot robot.addRangeDevice(&sick); ArSonarDevice sonar; robot.addRangeDevice(&sonar); ArActionTriangleDriveTo triangleDriveTo; ArFunctorC<ArActionTriangleDriveTo> lineGoCB(&triangleDriveTo, &ArActionTriangleDriveTo::activate); keyHandler.addKeyHandler('g', &lineGoCB); keyHandler.addKeyHandler('G', &lineGoCB); ArFunctorC<ArActionTriangleDriveTo> lineStopCB(&triangleDriveTo, &ArActionTriangleDriveTo::deactivate); keyHandler.addKeyHandler('s', &lineStopCB); keyHandler.addKeyHandler('S', &lineStopCB); ArActionLimiterForwards limiter("limiter", 150, 0, 0, 1.3); robot.addAction(&limiter, 70); ArActionLimiterBackwards limiterBackwards; robot.addAction(&limiterBackwards, 69); robot.addAction(&triangleDriveTo, 60); ArActionKeydrive keydrive; robot.addAction(&keydrive, 55); ArActionStop stopAction; robot.addAction(&stopAction, 50); // try to connect, if we fail exit if (!connector.connectRobot(&robot)) { printf("Could not connect to robot... exiting\n"); Aria::shutdown(); return 1; } robot.comInt(ArCommands::SONAR, 1); robot.comInt(ArCommands::ENABLE, 1); // start the robot running, true so that if we lose connection the run stops robot.runAsync(true); // now set up the laser connector.setupLaser(&sick); sick.runAsync(); if (!sick.blockingConnect()) { printf("Could not connect to SICK laser... exiting\n"); Aria::shutdown(); return 1; } printf("If you press the 'g' key it'll go find a triangle, if you press 's' it'll stop.\n"); robot.waitForRunExit(); return 0; }