多摩川精機製ジャイロの最近のブログ記事

 多摩川精機製ジャイロTAG201(以後、ジャイロ)からのデータをより有効に処理する工夫をしましょう。

課題6
 ジャイロを搭載した基板を左右に回転すると正回転の増減と反転の増減には差があるように感じました。そこで、正転反転の増減それぞれに独立して補正できるようにプログラムしましょう。

mbedプログラミング
・正転は時計方向の回転です。反転は半時計方向の回転です。それぞれの増減を独立してここで補正します。最初は1.0からお試しください。
   //hosei
    if(gy1_kakudo >=0 && gy1_wk1 >=0){// seiten +
      gy1_wk1=gy1_wk1*1.0;
    }    
    else if(gy1_kakudo >=0 && gy1_wk1 <0){// seiten -
      gy1_wk1=gy1_wk1*1.1;
    }
    else if(gy1_kakudo <0 && gy1_wk1 <0){// hanten -
      gy1_wk1=gy1_wk1*1.2;
    }
    else if(gy1_kakudo <0 && gy1_wk1 >=0){// hanten +
      gy1_wk1=gy1_wk1*1.2;
    }

 多摩川精機製ジャイロTAG201(以後、ジャイロ)の基本プログラムが前回までで完成しました。ここではさらに精度を高める工夫をします。

課題5
 このジャイロは静止時ドリフトが少ないことが特徴です。ただ、ドリフトはゼロではないために補正をするとより正確なデータを得ることができます。そこで、5秒間静止しているときは0.1秒間隔で1秒間サンプリングし、平均した値を新たな静止電圧とするプログラムを考えましょう。

mbedプログラミング
・wait(0.05)を変数countで数えて、100カウント=5秒間静止状態が続いたときに、0.1秒間隔で1秒間サンプリングして平均値を新しい平均値とします。静止状態の継続時間を変更したいときはcount==100の数値を増減します。
     if(count==100){// center keisan
        mled1=ON;
        gy1_sum=0;
        for(i=0;i<10;i++){
          gy1_sum=gy1_sum+(gy1_adc_in.read()*5.0);
          wait(0.1);
        }
        mled1=OFF;
        gy1_center=(gy1_sum/10);
        count=0;
      }
      wait(0.05);
 多摩川精機製ジャイロTAG201(以後、ジャイロ)の角速度を積分して角度を得ることはできたでしょうか? 課題4では”*”で角度の状態を表示します。

課題4
 角速度を積分して得た角度をLCD上で”*”を数直線上に表示しましょう。-90度~+90度の範囲を表示します。

 多摩川精機製ジャイロTAG201(以後、ジャイロ)の角速度から角度を計算します。

課題3
 ジャイロから角速度データを読み込み、積分することで角度に変換しましょう。ジャイロは静止状態をプログラマが規定することで不感状態を作り出します。この部分がハンドルの遊びの役割を果たします。遊びは多くても少なくても誤差が増えてしまうので、実際に動かしながら調整します。
 不感状態の幅が大きいとジャイロの出力は落ち着きますが、小さな変化に追従できなくなります。幅を小さくすると細かなノイズもデータとして拾ってしまい、誤差が蓄積されます。

mbedプログラミング
・動作、静止状態の判定・・・ジャイロ出力電圧から静止状態電圧を減算し、0.07以下の場合、静止と判定しています。この値を変化させて不感状態を調整します。
    if(xabs(gy1_adc,gy1_center) <=0.07){
      gy1_data=0;     
    }
    else{
      gy1_data=gy1_adc-gy1_center;   
    }
・ジャイロ感度は6mVです、ここで変換します。
  gy1_wk1=(gy1_data*1000/6.0);// sekibun jyunbi

・台形法により積分します。0.08がサンプリング間隔です。実際のサンプリング時間と異なっていてもかまいません。
    //sekibun
    gy1_kakudo=round3(gy1_kakudo+(gy1_wk0+gy1_wk1)*0.08/2);
    gy1_wk0=gy1_wk1;   

・タクト・スイッチを押すことで現在の角度を0にリセットします。左右の回転でずれを生じる場合、スイッチを押して0にします。
    if(TSW==XON){// center reset
      gy1_kakudo=0;
    }       

・round3(x)・・・小数点以下第3位を四捨五入する関数です。
double round3(double x){
  double y;
  y=double(int((x+0.005)*100))/100;
  return(y);
}

・xabs(x,y)・・・x-yを実行し、結果を絶対値で返す関数です。
double xabs(double x,double y){
  if(x>=y){
    return(x-y);
  }
  else if(y>x){
    return(y-x);
  }
}
 課題1では多摩川精機製ジャイロTAG201(以後、ジャイロ)からデータを読み込み、表示する確認プログラムを作成しました。課題2ではデータの平均を計算します。

課題2
 ジャイロから、1秒間隔で0.1秒ごとに10回データを読み込み、平均を表示するプログラムを作成しましょう。データ読み込み中はLED0を点灯します。

mbedプログラミング

・0.1秒間隔で1秒間データを読み込み、平均するには次のようにします。
  mled1=ON;    
  gy1_sum=0;
    for(i=0;i<10;i++){
      gy1_sum=gy1_sum+(gy1_adc_in.read()*5.0);
      wait(0.1);
    }
    mled1=OFF;
    gy1_data=gy1_sum/10;

 mbedに多摩川精機製ジャイロTGA201(以後、ジャイロ)を接続することは成功しましたか? 最初に多摩川精機製ジャイロの応用例を紹介します。

多摩川精機製ジャイロの応用例

 Dr.Gueroさんが素晴らしいロボットを開発しました。二足歩行ロボットに実際に自転車を漕がせて走行させるというものです。下記URLにて紹介されてます。ロボットの手で自転車のバランスを保ち、足で漕ぐというタイプは世界初だと思います。このロボットに多摩川精機製ジャイロが使用されています。すごいロボットですね。写真はDr.Gueroさんに提供していただきました。

   A.I.&Robot http://ai2001.ifdef.jp/

primer_v2_s35p.jpg

 Youtubeで公開されているDr.Gueroさんが開発した二足歩行ロボットが運転する自転車の動画を紹介します。実にスムーズに走行しています。すごいですね。


多摩川精機(株)の紹介
 長野県飯田市に多摩川精機株式会社(以後、多摩川精機)はあります。飯田駅より車で西に10分ほど走った風越山の麓です。近くには名水猿倉の泉、松川ダム、切石公園などがある、風光明媚の場所に立地しています。ここに本社・第1事業所があります。

0_P1000957.jpg





2012年3月: 月別アーカイブ

カテゴリ


Copyright (C) 2006-2015 CQ Publishing Co.,Ltd. All Rights Reserved.