run_beginner_task_03.cpp

00001 /*
00002   図のように、ビーゴを1[m]前進させて停止し、右90[degree]回転して停止、
00003   さらに1[m]前進して停止させなさい。
00004   この時、ロボットは急に止まれないことを考慮して、プログラムを工夫しなさい。
00005   Satofumi KAMIMURA
00006   $Id$
00007 */
00008 
00009 #include <mRunCtrl.h>
00010 #include <vutils.h>
00011 #include <stdio.h>
00012 
00013 using namespace VXV;
00014 
00015 
00016 static void stopToTarget(mRunCtrl& run, const VXV::Position& target) {
00017   run.followLine(target);
00018   while (abs(run.getLengthToLine(target)) > 300) {
00019     // 条件が成立するまでポーリング。しばらく移動するのを待つため sleep する
00020     VXV::Delay(100);
00021   }
00022   run.stopToLine(target);
00023   waitStable(run, 100);
00024 }
00025 
00026 
00027 int main(int argc, char *argv[]) {
00028   try {
00029     mRunCtrl run;
00030     if (initConnection(&run, argc, argv) < 0) {
00031       exit(1);
00032     }
00033     vmonitor::show();
00034 
00035     // 直進
00036     VXV::Position target(1000, 0, deg(0));
00037     stopToTarget(run, target);
00038 
00039     // 回転
00040     run.rotateToDirection(deg(-90));
00041     waitStable(run, 100);
00042 
00043     // 直進
00044     target = VXV::Position(1000, -1000, deg(-90));
00045     stopToTarget(run, target);
00046 
00047     VXV::Delay(1000);
00048   } catch (std::exception& e) {
00049     printf("exception: %s\n", e.what());
00050   }
00051   return 0;
00052 }
00053 

Generated on Mon Apr 13 22:52:01 2009 by  doxygen 1.5.7.1