runState.cpp

00001 /*
00002   移動コマンドのスタック管理サンプル
00003   Satofumi KAMIMURA
00004   $Id$
00005 */
00006 
00007 #if !MONITOR
00008 #include <runCtrl.h>
00009 #else
00010 #include <mRunCtrl.h>
00011 #endif
00012 #include <stdio.h>
00013 #include <stdlib.h>
00014 
00015 using namespace VXV;
00016 
00017 
00018 // その場で1回転する
00019 static void subAction(RunInterface& run) {
00020   run.stop();
00021   while (!run.isStable()) {
00022     VXV::Delay(100);
00023   }
00024 
00025   run.rotateAngle(deg(-360));
00026   while (!run.isStable()) {
00027     VXV::Delay(100);
00028   }
00029 }
00030 
00031 
00032 int main(int argc, char *argv[]) {
00033   try {
00034 #if !MONITOR
00035     RunCtrl run;
00036 #else
00037     mRunCtrl run;
00038     vmonitor::show();
00039 #endif
00040     if (run.connect(argc, argv) < 0) {
00041       printf("RunCtrl::connect: %s\n", run.what());
00042       exit(1);
00043     }
00044 
00045     // 2秒毎にその場回転の移動コマンドを発行する
00046     run.followCircle(Grid(0, 0), 500);
00047     for (int i = 0; i < 3; ++i) {
00048       VXV::Delay(2000);
00049       
00050       // 発行中の移動コマンド、速度設定を待避
00051       run.push_runState();
00052       
00053       subAction(run);
00054 
00055       // 発行中の移動コマンド、速度設定を復帰
00056       run.pop_runState();
00057 
00058       // 最後に発行した移動コマンドの再発行
00059       run.lastMoveCommand();
00060     }
00061 
00062   } catch (std::exception& e) {
00063     printf("exception: %s\n", e.what());
00064   }
00065   return 0;
00066 }
00067 

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