SSブログ

ロボット:ビーチフラッグに挑戦 [KCB-2]

ロボコンマガジン2009年7月号の記事をみて、近藤科学のサイトからビーチフラッグのサンプルプログラムを入手しました。(ココからダウンロード)

サンプルは受信センサが2個装着されている事が前提となっていましたが作成したフォークリフトには1個しかついていません。そこでプログラムを変更して1個で旋回しながら送信センサ位置を探すようにしました。具体的には、旋回しながら受信センサを読み取り、現在の測定値と直前の測定値を利用して送信センサの位置を探すように変更しました。

【最初のバージョン】

とりあえず送信センサには近づくようになりました。2m以内なら送信センサを検出できる様子です。ただ、探査時は常に右旋回で、サンプルにあった左右のセンサ値(今回は現在の測定値と直前の測定値)によって旋回方向を切り替える処理には入らないように見えました。そこで、その部分は削除して直前の測定値が範囲内で現在の測定値がLOST値の時に逆旋回するようにしました。また、受信センサが右端にあると送信センサの正面で止まれないため写真のように真ん中に移動しました。

FL090628.JPG

【次のバージョン】

受信センサを真ん中にしたので正面で停止するようになりましたが、相変わらず探査時に逆旋回しませんでした。片方だけが範囲外になる確率が低いのだと思います。そこで、探査終了時の直進が始まる前に次の旋回は逆になるよう旋回方向を指定する変数を追加する事にしました。

【本日の最終版】

フォークリフトは後輪が1つしかないので直進性が悪いです。右旋回後だと右へ、左旋回後だと左へ流れて進む事が多いです。ただ、送信センサをロストして再探査する際は必ず逆旋回して探査するようになったので無駄な旋回が減り、短時間で送信センサに近づくようになりました。本日はここまでとします。

<本日のサンプルプログラム>

/***********************************************************************/
/*                                                                     */
/*  FILE        :forklift.c                                            */
/*  DATE        :Thu, Jun 11, 2009                                     */
/*  DESCRIPTION :main program file.                                    */
/*  CPU GROUP   :27                                                    */
/*                                                                     */
/*  This file is generated by Renesas Project Generator (Ver.4.15).    */
/*                                                                     */
/***********************************************************************/
//
// ビーチフラッグの自律プログラムです。
//  ・近藤科学からダウンロードした「KCB2_Lesson2.c」のサンプルプログラム
//   を参考にしています。
//  ・受信センサが1つのため、その点を改良しています。
// 車体はフォークリフト(タミヤ工作キット)です。
//
// 動作概要は次の通りです。
//  ・まず旋回しながら送信センサ位置を探査します。
//  ・送信センサが見つかったら前進します。
//  ・送信センサをロストすると旋回探査に入ります。
//  ・旋回探査から抜ける時に次の旋回探査は逆旋回するようにしています。
//  ・送信センサに近づく(測定値420以上になる)と停止します。
//
// 端子の接続
//  MOTER1 - 本体移動用モーター(左)
//  MOTER2 - 本体移動用モーター(右)
//  AD4    - 超音波センサー(USRX-1)
//
#include <pwm.h>
#include <led.h>
#include <ad.h>
#define LOST 200
void main(void)
{
 _Bool t_sw = 0;   // ターン方向の変数:初期値は右旋回
 int adv1, adv2, adv_dif; // センサ値(現在と直前)とその差の変数
 
 // 初期化
 cpu_init();   // CPU
 pwm_init();   // PWM
 ad_init();   // AD
 ledred_on();
 adv2 = ad_read(4);  // 直前のセンサ値変数を現在の測定値で初期化
 while(1) {
  adv1 = ad_read(4); // 現在のセンサ値を読み取り
  // 目標が正面にいる場合  
  if((adv1 < 420) && (adv1 >= LOST) && (adv2 < 420) && (adv2 >= LOST)){
   adv_dif = adv1 - adv2;
   // 直前のセンサ値との誤差が10前後のときは前進
   if((adv_dif <= 25)&&(adv_dif >=-25)){
    pwm1 ( 70,FWD);  // Duty 50%の正転動作を設定します
    pwm2 ( 70,FWD);
   }
  }
  
  // 直前のセンサ値だけが範囲内なら逆旋回
  else if((adv2 < 420) && (adv2 >= LOST)){
   if(t_sw == 1){   // 旋回方向判断
    pwm1 ( 70,BAK);  // 左旋回
    pwm2 ( 70,FWD);
   }
   else{
    pwm1 ( 70,FWD);  // 右旋回
    pwm2 ( 70,BAK);
   }
  }
  // 目標を見失ったと判断した場合
  else if((adv1 < LOST) || (adv2 < LOST)){
   // 直前と現在のセンサ値がLOSTを超えるまで旋回し続ける
   while(1){
    if(t_sw == 1){   // 旋回方向判断
     pwm1 ( 70,BAK);  // 左旋回
     pwm2 ( 70,FWD);
    }
    else{
     pwm1 ( 70,FWD);  // 右旋回
     pwm2 ( 70,BAK);
    }
    wait( 30000 );
    pwm1 ( 0,BRK);  // 一時停止
    pwm2 ( 0,BRK);
    wait( 100000 );
    adv1 = ad_read(4);
    if ((adv1 > LOST) && (adv2 > LOST)){ // LOST値以上になったかを判断
     if(t_sw == 1){  // 次の旋回方向を指定
      t_sw = 0; // 次は右旋回
     }
     else{
      t_sw = 1; // 次は左旋回
     }
     break;
    }
    adv2 = adv1;  // 直前のセンサ値変数を更新
   }
  }
  
  // もし目標が近くにいた場合
  else{
   pwm1 ( 0,BRK);  // 閾値420を超えたら停止
   pwm2 ( 0,BRK);
  }
  adv2 = adv1;   // 直前のセンサ値変数を更新
 }
}

ロボット制作への第一歩 [KCB-2]

前から興味があったロボット制作。
いきなりロボットキットの購入は、我が家の財務省の許可降りず断念。
そこで、ロボコンマガジン5月号の記事を見て、タミヤ製のフォークリフト工作キットを近藤科学のマイコンボード「KCB-2」で動かすことから始める事にしました。

工作キットの組み立て、マイコンボードの設置、各種センサーの取付まで完了。
超音波送信機も準備完了。

<前から>
KCB-2や電池ボックスは後部に配置。
昇降機に各種センサーを両面テープで固定。
(写真左側:超音波センサー、写真右側:PSD(位置検出素子)センサー)
フォークリフト3.jpg

<後ろから>
KCB-2をプラ版2枚でルーフ部に固定。電池ボックスは座席後方に輪ゴムで固定。フォークリフト2.jpg

<超音波送信機>
送信用センサーを電池ボックス(単3形×4)に両面テープで固定。
端子には電池スナップを差し込んでテープで固定。送信センサー1.jpg

<キット材料&参考価格>

計19,078円

  • フォークリフト工作キット 3,800円
  • KCB-2シリアルUSBアダプター付セット 6,300円
  • KCB-2用モーターコード【2本入り】 368円
  • 超音波センサー(受信)USRX-1 3,150円
  • 超音波センサー(送信)USTX-1 3,150円
  • PSD(位置検出素子)センサー 2,310円
  • 電池ボックス&電池スナップ ?円(手持ちのもの)

 


この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。