プログラム実行

実機実行

接続デバイスをプログラム中で指定している場合

プログラム中に使用する接続デバイスが記述されている場合、そのプログラムを実行するだけで動作します。

  #include <runCtrl.h>
  #include <urgCtrl.h>
  #include <stdio.h>
  #include <stdlib.h>

  int main(int argc, char *argv[]) {
    try {
      if (run.connect("COM1") < 0) {
        printf("RunCtrl::connect: %s\n", run.what());
        exit(1);
      }
      ... 

ただし、プログラム引数に --help を指定する、といった機能や、シミュレータを含むモニタ機能は利用できません。


接続デバイスを引数で指定する場合

プログラムにて接続デバイスを指定する箇所についてのプログラムは、以下のようになっていると思います。

  #include <runCtrl.h>
  #include <urgCtrl.h>
  #include <stdio.h>
  #include <stdlib.h>

  int main(int argc, char *argv[]) {
    try {
      runCtrl run;
      urgCtrl urg;
      if (run.connect(argc, argv) < 0) {
        printf("RunCtrl::connect: %s\n", run.what());
        exit(1);
      }
      if (urg.connect(argc, argv) < 0) {
        printf("URGCtrl::connect: %s\n", urg.what());
        exit(1);
      }
      ... 

又は、vutils.h の接続関数を用いた場合の記述は以下の通りです。

  #include <runCtrl.h>
  #include <urgCtrl.h>
  #include <vutils.h>
  #include <stdio.h>
  #include <stdlib.h>

  int main(int argc, char *argv[]) {
    try {
      runCtrl run;
      urgCtrl urg;
      if ((initConnection(&run, argc, argv) < 0) ||
          (initConnection(&urg, argc, argv) < 0)) {
        exit(1);
      }
      ... 

動作確認」 で説明したとおり、プログラムの実行時に --help を指定すると、プログラムの引数に何が指定できるかを確認できます。
この場合、RunCtrl, URGCtrl に接続デバイスを指示する必要がありますので、それぞれ接続デバイスが /dev/ttyUSB0, /dev/ttyACM0 だとした場合、プログラムの実行方法は以下の通りです。

  ./sample_program --run_port=/dev/ttyUSB0 --urg_port=/dev/ttyACM0 

接続デバイスの確認については、「Windows 環境でのシリアルポートの認識について」や「Linux 環境でのシリアルポートの認識について」を参考にして下さい。


接続デバイスを設定ファイルで指定する場合

プログラムが、connect(argc, argv) を使うように作成されており、かつプログラムに引数が何も渡されなかった場合、vxv_tools のライブラリは、"./vxv/", "${HOME}/.vxv" という順でそのディレクトリに defaultargs というファイルがないか探します。
defaultargs が存在すると、プログラムはそこに記述されている内容をプログラム引数として解釈し、実行します。

defautargs の例

  # vxv2 用の指定
  #--run_port=/dev/ttyS0
  --run_port=/dev/ttyUSB0
  --urg_port=/dev/ttyACM0

  --urg_handstand 

引数は行毎に1つの引数として評価され、# 以降は無視されます。上記の例では、走行制御の接続デバイスとして、/dev/ttyUSB0, 測域センサの接続デバイスとして /dev/ttyACM0 を指定、測域センサの取り付けは、天地が逆になっていることをプログラムに伝えています。



シミュレータ実行

以下のように、モニタ機能を用いたプログラムの場合、プログラム引数に -s, または --simulator を指定することでシミュレータ実行になります。

  #include <mRunCtrl.h>
  #include <mURGCtrl.h>
  #include <vutils.h>
  #include <stdio.h>
  #include <stdlib.h>

  int main(int argc, char *argv[]) {
    try {
      mRunCtrl run;
      mURGCtrl urg;
      if ((initConnection(&run, argc, argv) < 0) ||
          (initConnection(&urg, argc, argv) < 0)) {
        exit(1);
      }
      vmonitor::show(); // シミュレータ画面の起動
      ... 

実行方法

  ./sample_program -s 

また、シミュレータ実行の場合、測域センサのための環境地図を指定することができます。

環境地図の定義が passage.env の場合

  ./sample_program -s passage.env 

実行結果の例

sim_env.jpg

環境地図で廊下を再現した例

passage.env の内容

  (polygon (1500,500) (2100,500) (2100,300) (1500,300) )
  (polygon (1500,-1800) (2100,-1800) (2100,-2000) (1500,-2000) )
  (polygon (4900,-1900) (5300,-1900) (5300,-2000) (4900,-2000) )
  (polygon (5600,-1900) (6000,-1900) (6000,-2000) (5600,-2000) )
  (polygon (6300,-1900) (6700,-1900) (6700,-2000) (6300,-2000) )
  (polygon (-500,500) (7000,500) ) (polygon (7000,500) (7000,-3500) ) 
  (polygon (-500,-2000) (4500,-2000) ) (polygon (4500,-2000) (4500,-3500) ) 

passage.env のような環境ファイルは、Tgif や edraw といったドローツールのデータを変換して作成することもできます。 詳しくは、モニタライブラリについてのドキュメントを参考にして下さい。 !!! 未リンク



再生実行

モニタライブラリを使用している場合、「実機実行」および「シミュレータ実行」を実行すると、コマンドの実行タイミングを記録した logfile.xml が出力されます。同じプログラムを実行する場合、このログファイルを用いると、ログファイル記録時の実験の様子を再現できます。そのときの引数は -p, および --playback になります。

  ./sample_program -p 

再生に用いたいログファイルのファイル名が logfile.xml 以外の場合、-l <logfile> という形式で指定できます。

ログファイルの名前が logfile_060810.xml の場合

  ./sample_program -p -l logfile_060810.xml 

詳しくは、モニタライブラリについてのドキュメントを参考にして下さい。 !!! 未リンク


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