MIRS1404 管理台帳へ戻る

名称 MIRS1404 標準機能試験報告書
番号 MIRS1404-REPT-0004
版数 最終更新日 作成 承認 変更内容 改訂記事
A01 2014.07.22 太田裕斗 石井建至 加藤慶悟 初版
A02 2014.07.22 太田裕斗 石井建至 加藤慶悟 青木先生 レビューで指定された点の変更、追加
個人的に行った再試験の結果の追加
第二版

目次


  1. はじめに



    本ドキュメントは標準機能試験の結果を記載したものである。
    試験を行うにあたって MG3S 標準プログラムを用いた単体テスト を参考に試験を行った。
  2. 標準機能試験内容



    試験内容は以下のとおりである。
    Table2-1 標準機能試験内容
    試験対象 試験内容
    PWMモジュールの動作(test_pwm()) PWMモジュールの動作を確認する。
    モータモジュールの動作(test_motor) モータモジュールの動作を確認する。
    エンコーダ(test_encoder()) エンコーダモジュールの動作を確認する。
    PWM値&速度(test_pwm_vel()) PWM値と速度の関係を確認する。
    速度制御器(test_vel_ctrl()) 速度制御器の動作をチェックする
    距離測定(test_distance()) 距離計の動作をチェックする。
    走行制御(直進、回転)(test_run_ctrl()) 走行制御モジュールの動作をチェックする。
    超音波計測(test_uss()) 超音波モジュールの動作をチェックする。
    正対補正(test_direction()) 正体補正モジュールの動作をチェックする。
    画像認識(test_number()) 数字認識モジュールの動作をチェックする。
    正体補正&数字認識(test_dir_num()) 正体補正→数字認識の連動動作をチェックする。
    タッチセンサ(test_io()) IO READモジュールの動作をチェックする。
  3. 標準機能試験結果



    試験結果は以下のとおりである。
    1. PWMモジュールの動作(test_pwm())

      PWMとは、Pulse Width Modulation の略であり、パルス信号を出力しておく時間を調整して制御する。コイルは電流を保持する役割がある。 このことからコイルを一定の電圧で制御し。電圧をONからOFFにすると、コイルには一定の電流が流れる。このとき、コイルの両端に逆の電圧が発生する。 これを逆起電力という。この現象を解決するためにパルス信号ON、OFFを高速で繰り返し、コイルにかかる負荷を少なくする。パルスをONにしているときの 比率をduty比といいduty比最大でモータの出力は最大になる。
      Table3-1 試験結果
      実行プログラム 実行結果
      test_pwm() test_pwm()にてpwm値を"+"に設定し実行したところ左モータ正転、右モータが逆転することが確認出来た。
      さらに、pwm値を"-"に設定し実行したところ左モータ逆転、右モータが正転することが確認出来た。
      尚、モータ特性により同じpwm値を左右のモータに与えた場合に左のモータの回転速度に比べて右のモータの回転速度が遅いことが確認された。


      Fig.1 PWMモジュール試験結果


      これは左右のモータに"+127"のPWM値を与えたときの結果の写真である。

      以下のTable3-2に+-80~+-127までの値をPWM信号として与えたときの動作結果を示す。
      Table3-2 PWM値の取得結果
      モータ +80 -80 +90 -90 +100 -100 +110 -110 +120 -120 +127 -127
      ゆっくり回転 ゆっくり回転 回転 回転 回転 回転 回転を促すと回転 回転を促すと回転 回転 動かない 回転 回転
      ゆっくり回転 ゆっくり回転 回転 回転 回転 回転 回転 回転 回転 回転 回転 回転

      この取得結果から、右モータが-120値のときだけ動かないことになってしまった。この結果からこれから自分たちで作成していく上で オリジナルの値を考えていかなくてはいけない。


    2. モータモジュールの動作(test_motor())

      Table3-3 モータモジュールの取得結果
      実行プログラム 実行結果
      test_motor test_motorにて"+"のPWM値を与えたら左右のモータは正転(前進)、"-"のPWM値を与えたら左右のモータは逆転(後退)することが確認できた。


      以下の写真は左右のモータに"+-127"のPWM値を与えたときの結果の写真である。


      Fig.2 モータモジュール正転の試験結果

        Fig.3 モータモジュール逆転の試験結果



    3. エンコーダ(test_encoder())

      Table3-4 エンコーダの取得結果
      実行プログラム 実行結果
      test_encoder() test_encoder()にてタイヤの回転が正転ならエンコーダの値が増加、逆転なら減少することが確認できた。


      Fig.4 エンコーダの試験結果


    4. PWM値&速度(test_pwm_vel())

      Table3-5 PWM値&速度の結果
      実行プログラム 実行結果
      test_pwm_vel() test_pwm_vel()にてモータの動作はtest_pwm()と同じ動作で、エンコーダはtest_encoder()と同じ動作であった。
      また、モータを回したらディスプレイに速度([cm/s])が表示され、目視だが正しく動作していると言える。


      Fig.5 PWM値&速度の試験結果


    5. 速度制御器(test_vel_ctrl())


      ※追記
      この試験を改めて再試験をした。具体的な内容としてゲイン調整を行った。直進走行する左右のモータの速度は
      左モータが20[cm/s]、右モータが22[cm/s]より、22 / 20 = 1.1であり、この値をTIRE_DIST_RATIOで再定義した。
      Table3-6 速度制御器の結果
      実行プログラム 実行結果
      test_vel_ctrl() test_vel_ctrl()にて左右のモータの速度を指令し、動作させた。
      力強い発進で走行し、左右のモータの速度を調節しながら走行した。
      また。速度([cm/s])が早いほど安定した走行をした。


      Fig.6 速度制御器


    6. 距離測定(test_distance())

      Table3-7 距離測定の結果
      実行プログラム 実行結果
      test_distance() 正転にタイヤを回すことでdistanceの値が増加し、逆転にタイヤを回すことでdistanceの値が減少した。 これより、MIRSのタイヤの円周が39[cm]に対して一週分の距離が34[cm]が出てしまう。プログラムを確認し、 半径だと思われる箇所を変更して確認したが、結果が変わらなかったので次回牛丸先生に聞き、訂正します。


      Fig.7 距離測定


    7. 走行制御(直進、回転)(test_run_ctrl())


      ※追記
      この試験において再試験を行った。具体的な内容として、直進動作においてしっかりと直進をし、なるべく滑らかに走行するようにゲインを調整した。
      変更したゲインは以下のとおりである。

      static float Kp_s = 1.0 → 1.7  直進制御において、左右のタイヤの距離差に対する補正速度の係数
      static float Kp_r = 0.5 → 1.7  回転制御において、左右のタイヤの距離差に対する補正速度の係数

      static float Kf_s = 1.0 → 2.0  直進停止制御において、残り距離に対する速度指定値を決める係数
      static float Kf_r = 0.3 → 0.3  回転停止制御において、残り角度に対する速度指定値を決める係数

      float dist_vel_down = 10 → 10  直進停止制御において、減速を開始する残り距離
      float angle_vel_down = 20 → 20  回転停止制御において、減速を開始する残り角度

      Table3-8 試験結果(直進)
      実行プログラム 実行結果
      test_run_ctrl() 速度を50[cm/s]で100[cm]まで走行するように値を入力したら左右のモータで100[cm]走行することが確認できた。


      Fig.8 直進走行


      Table3-9 試験結果(回転)
      実行プログラム 実行結果
      test_run_ctrl() 10[deg/s]で90度回るように値を入力したらとても正確に90度回転した。また、360度回るように値を入力したら360度から少し行き過ぎて回転した。


      Fig.9 回転


    8. 超音波計測(test_uss())

      Table3-10 超音波計測試験結果
      実行プログラム 実行結果
      test_uss() 親機及び子機共に超音波距離計測が可能であることが確認出来た。
      精度については3.4. 超音波センサボードの試験結果を参照。


      Fig.10 超音波距離計測


    9. 正体補正(test_direction())

      Table3-11 正体補正の結果
      実行プログラム 実行結果
      test_direstion() プログラムを実行すると正体補正をする距離を設定し、MIRSは指定した距離まで移動し、左右に微小に首を振りながら補正をした。

      Fig.11に正体補正が成功したときの写真を示す。


      Fig.11 正体補正


    10. 画像認識(test_number())

      Table3-12 画像認識試験結果
      実行プログラム 実行結果
      test_number() test_number()にて左と右にそれぞれ"4"と"5"の表示のあるダイレクションボードを数字認識プログラムにて 認識させたところディスプレイ上で"4"と"5"が認識できたことを確認出来た。


      Fig.12 数字認識


    11. 正体補正&数字認識(test_dir_num())

      Table3-13 距離測定の結果
      実行プログラム 実行結果
      test_dir_num() プログラムを実行し、終了するまでは正体補正(test_direction)と同じ動作をした。補正後に数字認識をすることが確認できた。 認識する数字の数は'1'つであった。

      Fig.13にプログラムの実行結果の写真を示す。


      Fig.13 正体補正&数字認識


    12. タッチセンサ(test_io())

      Table3-14 タッチセンサ試験結果
      実行プログラム 実行結果
      test_io() test_io()にて三方向それぞれのタッチセンサの入力があった場合にディスプレイ上でI/O[10]、I/O[11]、I/O[12]の状態が"1"(high_level) になることを確認出来た。また、この3つのポート以外でも試験を行ったところI/O[7]の初期の問題以外においてタッチセンサの入力があった場合 にディスプレイ上で状態が"1"(high_level)になることが確認できた。


      Fig.13 タッチセンサ



  4. 問題点



    問題点が見つかったのは以下の機能である。
    1. タッチセンサ

      タッチセンサを接続した場合にドーターボードの全てのポートの状態が"1"(high_level)になってしまう点。
    2. エンコーダ

      左のエンコーダを勢いよく回した場合にディスプレイ上のエンコーダの値の表示が"255"近辺まで飛んでしまう点。
    3. 正体補正・正体補正&数字認識

      超音波センサ親機の電源ボードに接続されるケーブルに不具合があることがわかった。不具合の内容はボードの裏面の電源ボードに接続される
      ケーブルのところのランドが剥がれていたため正対補正がうまくいかなかったと思われる。
  5. 解決策



    前項に示された問題点は以下のようにして解消された。
    1. タッチセンサ

      タッチセンサを接続した場合にドーターボードの全てのポートの状態が"1"(high_level)になってしまう点。

      左のタッチセンサのGND端子を繋ぐケーブルが半田から千切れてしまっており、これを修復することで問題は解消された。
    2. エンコーダ

      左のエンコーダを勢いよく回した場合にディスプレイ上のエンコーダの値の表示が"255"近辺まで飛んでしまう点。

      ディスプレイの文字の表示が重なっており、エンコーダの値の表示が正常であることを確認出来た為、問題は解消された。
    3. 正体補正・正体補正&数字認識

      はんだで再度補強して改善した。


MIRS1404ドキュメント管理台帳