本文へスキップ

未来の科学技術を子供たちに託す。 ジュニロボ <JRO>

〒619-0237 京都府相楽郡精華町光台8丁目

TEL. 070-5263-2200

jun@kinet-tv.ne.jp

入門コースアクチュエーター[ モーター駆動 ]RECRUIT






 ここからは、「京町セイカ」ちゃんに案内してもらいます。


 私の下のプレーボタンを押して下さい。

 音量には、注意して下さい。






[ STEP 1 ]                 音声サポート  

ロボットを、5秒間前進( 又は後進 )させた後、停止させましょう。


 左が前進イメージ、右が後進イメージです。

 今回のテーマは移動距離は関係なく、ロボットが前進(又は後進)している
 時間を5秒間としています。










[ サンプルプログラム ]

 同じ課題のプログラムでも、これしかないという正解プログラムはありません。人それぞれに異なった
プログラムが出来上がります。
 ここでのサンプルプログラムも、これが正解というわけではありません。とにかくロボットを動かして
プログラムになれましょう。
 ロボットのスタートスイッチを押すとプログラムは、上から下へ順番にプログラム(命令)が実行されて行きます。

 前進プログラム
001 モーター速度(%)が「正値」なので正転方向に
   回転します。R(右)、L(左)とも同じ値(50%)
   なので直進します。
002 時間を5秒に設定します。結果5秒間ロボットは前
   進します。( 最小設定単位:0.1秒 )
003 動いているロボットを停止させます。モーター速度
   を左右とも「0%」にするとブレーキが掛り停止
 後進プログラム
001 モーター速度(%)が「−」なので逆転方向に回転
   しロボットを後進させます。
   R(右)、L(左)とも同じ値(-50%)なのでまっす
   ぐ後進します。
002 時間が5秒に設定されているので上記の命令を5秒
   間実行されます。
   結果、5秒間ロボットは後進します。
003 動いてるロボットを停止させます。モーター速度を
   左右とも「0%」にするとブレーキが掛り停止
[ 動かしてみましょう ]

 どうでしたか?
 思い通り動きましたか?

 多分ロボットは、少し右か左に寄って行かなかったですか。
これはロボットの組立の時、モーターの位置が左右で並行になっていなかったり、ギヤボックスとかモーターの特性が個別に異なっているためです。これを機械的に調整するのは困難なのでプログラムで調整します。
 そのために自分のロボットの特性を知っておく必要があります。( この場合出来るだけ長い距離で確認したほうが正確に特性確認できます。)

 モーター速度(駆動率)を、50%以外の数値でも試してみましょう。進む距離が変わってきますよ。
(正転の最大値は100%、逆転の最大値は-100%です。)

【 よくある勘違い 】

モーターを100%の速度で直進させていますが、時間が指定されていませんので、停止することはありません。
実質無限ループと同じ動作になりますが正しいプログラムの記述としては始めと終わりを明記することです。
後で説明しますが、正しくは「While」文を使います。
やりたい事は直進して左に回って右に回って1秒後に停止という思いでしょうが、結果は 001、002 の命令はロボットとして反応出来ずに無視されたように見えます。
ロボットの動きは、右へ1秒間動いて停止するだけです。

コンピュータのスピードはものすごく速くて、モーターは反応することが出来ません。
タイマー(砂時計)があるのは、モーターが反応する時間を確保する為です。
[ ロボットの特性を記録しておきましょう ]

 ロボットが思い通りに動き楽しいという事で終わってしまうのではなく、ロボットの特性とか”くせ”を知る事が大切です。それが競技会で入賞するコツであったり、改善、改良をする時のヒントになります。
 「モノづくり」では、経験や勘に頼るのではなく科学的な手法を活用する事で、より高度で信頼性のある物が安定して生まれます。今からそのような”くせ”を付けることが科学者への第一歩となります。
 最初は面白くないかも知れませんが、頑張って記録していきましょう、次第にこれが普通になります。
必ず役に立つ時がきます。











[ STEP 2 ]

ロボットを、50cm 前進させたてから停止させましょう。



 先ほどは「5秒間」直進させましたが、今回は「距離」での移動がテーマです。

 実際のロボットは、距離を測るセンサを使って正確に移動させる事ができますが、
 TJ3B は教育用ロボットで最低限のセンサしか搭載していませんので、今回は距離
 センサを使わない方法で移動させましょう。
( 移動距離は正確でなくても結構です。)








[ サンプルプログラム ]

 このサンプルプログラムにある数値は教室のロボットで確認した場合なので、自分のロボットで確認しながら調整してください。( 電池電圧でも変わります。)

001 モーター速度(%)が「プラス」なので正転方向に
   回転します。R(右)、L(左)とも同じ値(50%)
   なので直進します。
002 時間を調整して、50cm進むように調整します。
   微調整は速度値で調整します。
003 動いているロボットを停止させます。モーター速度
   を左右とも「0%」にするとブレーキがかかり停止
[ 動かしてみましょう ]

 どうでしたか?
 思い通りの動きをしましたか?

 サンプルソフトと同じ数値で動かしても、ちょうど50cmでロボットが停止しないのが普通です。
これは、ロボットの特性(モーター、ギヤー等)以外にも、電池電圧とかタイヤと床の材料による摩擦に
よる違いが出るためです。 床がタイルの場合、ジュウタンの場合、紙の上などで進む距離が変わることを確認してください。
 ロボカップなどの大会では、この違いが大きく影響する事があります。これらを無くす方法がありますが、これは中級に行ってからお話しします。
[ ロボットの特性を記録しておきましょう ]

 今回は、距離に対して時間の設定がどの様に変化するかを調べています。
前回にも書きましたが、この特性は電池電圧とか床の材料等により変わってきますのでグラフの空いた所にこの実験をした時の条件を、メモしておきましょう。
 前回も今回も特性曲線は直線になっていますので、距離が変わった場合でも予想ができます。
例えばロボットを走行させる距離が50cmから100cmに変わっても下記グラフから Wait 時間を
3.6にすればいいことが解ります。







 

[ STEP 3 ]

50cm 前進させた後、その場で90度左回転して更に50cm前進させましょう。


 ロボットのスタートスイッチを押して前進( 直進 )50cm後、
 一旦停止させてこの後、その場所で90度回転させて、また前進
 ( 直進 )50cmさせた後に停止させましょう。

 今回は、90度回転( 自転 )動作が入ってきました。









[ サンプルプログラム ]

 このサンプルプログラムにある数値は教室のロボットで確認した場合なので、自分のロボットで確認しながら調整してください。( 電池電圧でも変わります。)
 ロボットのスタートスイッチを押すとプログラムの上から下に向かって命令が実行されていきます。


001 左右のモーターを速度50%で前進させています。
002 距離の調整は、この時間を調整して50cm進むよう
   な時間に設定しています。
003 モーターを停止させました。次の命令でモーターを
   逆回転させるので必ずモーターを停止させましょう
004 右車輪を「プラス」、左車輪を「マイナス」に設定
   すると左に自転します。
005 この時間を調整して90度回転する様に調整します
006 90度回転した所で回転停止させます。
007 左右のモーターを、速度50%で前進させます。
008 50cm進むように時間調整をします。
009 モーター停止
[ 動かしてみましょう ]

 どうでしたか?
 思い通りの動きをしましたか?

 左90度自転させる時、時間調整だけでは正確に90度自転させる事が難しかったと思います。
時間は0.1秒が最低単位だからです。 従ってモーター速度で、これを補っています。(左車輪の速度がー50%ではなく、ー47%になっているのはそのためです。)

  1.回転角度を調整する方法として、時間と速度の2つあることがわかりました。
  2.時間調整の最小単位は、「0.1秒」であることもわかりました。
    上級クラスでは、0.001秒まで調整出来る方法を勉強しますが初級コースでは「0.1秒」
    と覚えておいてください。

<注意点>
 モーターなどで運動しているものは、運動方向が反転する時は急には反転出来ないので一度停止させる必要があります。 人間でも同じですが慣性(だせい、かんせい)が働く為です。これを無理に停止させようとすごいエネルギーが必要です。この典型的な例が、交通事故です。
 今回は、左のモーターが正転から逆転していますので、この時は一時停止させる必要があります。
急反転させると電子回路には大きな電流が流れる壊れる可能性があります。またギヤやモーターにも良く
ありませんので注意してください。
 
[ ロボットの特性を記録しておきましょう ]

 今回は回転運動がありました。この動作は実際の競技でも多く使われるので覚えておきましょう。
この特性は電池電圧とか床の材料等により変わってきますので、グラフの空いた所にこの実験をした時の条件をメモしておきましょう。
 今回の特性表は、時間と回転角との関係を書いてみましょう。90度以外に必要回転が発生した時の参考になります。







 

[ STEP 4 ]

5周させましょう(1) for 〜 end for を使う。


 左図にあるように「Start」位置から「End」位置までの一周を
 5周するようなプログラムを作成する場合に色々な方法がありま
 す。
 最初は、今まで学んできた様に順番に記述していく方法が基本と
 なっていますが、この方法ですとプログラムの中に同じ命令が
 何回も繰り返して間違いを犯しやすく、これに繰り返し回数が
 100回、1000回と増えてきた時、膨大な長いプログラムと
 なってしまいます。
 この問題を解決する方法として、色々な方法が考えられています
 が、今回は 「 for 〜 end for」文を使います。
 < フォー、エンドフォーと呼びます。>



[ サンプルプログラム ]

 同じ動作をさせるにも幾通りかの方法があります。これしかないというのはありません。
色々工夫をして、より良いプログラムを考えてください。

< 方法1 > 拡大できます。
001 1周動作を、5周させるループ処理

002 1周動作をさせるループ処理
003 直進動作( 速度30% )
004 直進時間 1.0 秒間
005 一旦停止( 次の逆転動作の準備 )
006 左自転(停止位置を中心に回転)
007 自転時間 0.5 秒間 ( 90度回転する様に調整 )
008 一旦停止( 次の逆転動作の準備 )
009 1周ループ処理

010 5周ループ処理
< 方法2 > 拡大できます。

001 5周一括処理ループ( 4回X5周=20回 )
002 直進動作( 速度30% )
003 直進時間 0.1 秒間
004 一旦停止( 次の逆転動作の準備 )
005 左自転(停止位置を中心に回転)
006 自転時間 0.5 秒間 ( 90度回転する様に調整 )
007 一旦停止( 次の逆転動作の準備 )
008 20周ループ処理
[ 動かしてみましょう ]

 どうでしたか?
 思い通りの動きをしましたか?

 今回2種類のサンプルプログラムを提示しました。どちらが良いプログラムというものではないですが

  方法1は、1周させるプログラムを5周させるという内容が理解しやすい。
  方法2は、一見しただけでは何周するのかわかりにくいですが、プログラムは短くできています。
 
[ ロボットの特性を記録しておきましょう ]

 今回は、記録するものはありません。
 今回の様な繰り返し処理( ループ処理 )は、コンピュータ内部処理なのでかなりの高速処理を行っていますので、繰り返し処理が数百回以上のループでないと人が感じることはできません。
この様なコンピュータ内部処理はディジタル処理をしているので、特性は計算で算出する事ができます。
特性表が必要なのは、主にアナログなのに対して行うと有効です。



 

[ STEP 5 ]

5周させましょう(2) while 〜 end while を使う。


 左図にあるように「Start」位置から「End」位置までの一周を
 5周するようなプログラムを作成する場合に色々な方法がありま
 す。
 ロボット動作を順番に記述していく方法が基本ですが、この方法
 ですとプログラムの中に同じ命令が何回も繰り返して間違いを犯
 しやすく、これに繰り返し回数が100回、1000回と増えて
 きた時、膨大な長いプログラムとなってしまいます。
 この問題を解決する方法として、色々な方法が考えられています
 が、今回は 「 while 〜 end while」文を使います。
 < ホワイル、エンドホワイルと呼びます。>




[ サンプルプログラム ]

下記プログラムは、拡大できます。
001 ループ回数カウント用変数Aを用意( 初期値=0 )

002 変数Aが19か それ以下ならループ内命令を実行
003 直進動作( 速度30% )
004 直進時間 1.0 秒間
005 一旦停止( 次の逆転動作の準備 )
006 左自転(停止位置を中心に回転)
007 自転時間 0.5 秒間 ( 90度回転する様に調整 )
008 一旦停止( 次の逆転動作の準備 )
009 変数を+1する( カウントアップ )
010 while の先頭へ

011 ロボット停止( 終了処理 )
[ 動かしてみましょう ]

 どうでしたか?
 思い通りの動きをしましたか?

 基本的には、前問の for 〜 end for と使い方は同じですが、ループ回数の判定方法が異なります。
ループ回数を覚えるのに、変数Aを使いループを1回回るごとに変数Aを+1してカウントしています。
ループ回数は20回ですが while の変数判定は、19となっています。これはコンピュータの世界では
数を数えるのに、0から始まるので20回は、19となります。( 0 を含めると20 )
人間にわかりやすいように、001 の変数Aの初期値=1として、while 判定値を A<=20としてもOKです
 
[ ロボットの特性を記録しておきましょう ]

 今回は、記録するものはありません。



 

[ STEP 6 ]

5周させましょう(3) while 〜 end while / if 〜 else 〜 end if を使う。


 左図にあるように「Start」位置から「End」位置までの一周を
 5周するようなプログラムを作成する場合に色々な方法がありま
 す。
 ロボット動作を順番に記述していく方法が基本ですが、この方法
 ですとプログラムの中に同じ命令が何回も繰り返して間違いを犯
 しやすく、これに繰り返し回数が100回、1000回と増えて
 きた時、膨大な長いプログラムとなってしまいます。
 この問題を解決する方法として、色々な方法が考えられています
 が、今回は 「 while 〜 end while」文と「if 〜 else 〜 end if」
 文を使ってみます。




[ サンプルプログラム ]

下記プログラムは、拡大できます。
001 ループ回数カウント用変数Aを用意( 初期値=0 )

002 無条件ループ( 002 〜 014 )
003 直進動作( 速度30% )
004 直進時間 1.0 秒間
005 一旦停止( 次の逆転動作の準備 )
006 左自転(停止位置を中心に回転)
007 自転時間 0.5 秒間 ( 90度回転する様に調整 )
008 一旦停止( 次の逆転動作の準備 )
009 ループ回数を判断( 変数Aが 19 以下かを判断 )
010 19 以下なら変数を+1する( カウントアップ )
011 19 以上なら
012 ループから抜け出る。( 015 へ )
013 if 文終了
014 002 の while の先頭へ

015 ロボット停止( 終了処理 )
[ 動かしてみましょう ]

 どうでしたか?
 思い通りの動きをしましたか?

 前問とよく似ていますが、ループ回数の判定方法が異なります。
前回は、while 文でループ回数を判定していましたが、今回 while は無条件ループとして単なる繰り返しのみを行っています。ループ回数の判断は、if 文が行っています。
 if 文で、条件が満たされていなければ、ループカウンター(変数A)を+1してループを繰り返します。
条件が満たされた場合は、「break」文でループを抜け出ます。
 ループ回数を覚えるのに、変数Aを使いループを1回回るごとに変数Aを+1してカウントしています。
ループ回数は20回ですが if の変数判定は、19となっています。これはコンピュータの世界では
数を数えるのに、0から始まるので20回は、19となります。( 0 を含めると20 )
人間にわかりやすいように、001 の変数Aの初期値=1として、while 判定値を A<=20としてもOKです
 
[ ロボットの特性を記録しておきましょう ]

 今回は、記録するものはありません。




 お疲れさまでした。

 最後の方は、少し難しかったかも知れませんが大丈夫です。
 この命令は、これから何回となく使っていきますので徐々にわかってきます。今はこんな命令を使うとロボッ
 トがこんな動きをするのだなと体験するだけで結構です。

 とりあえず、サンプルソフトをロボットにダウンロードして動作させる事が出来ればOKです。

 以上が、アクチュエーター( 駆動部・制御 )を動かすプログラムの内容でした。
 アクチュエーターとは、ここではモーターの事でしたが、ロボット全体では動力で動くものすべてを指します
 ( Actuator と書きます。)

 このページを理解した人は、「基本コース」でのモーターの原理を理解してから「アクチュエーターマスター
 評価試験」を受けて資格(ライセンス)を取得してください。
 作成した特性表も提出してください。

 TJ3Bで使用している標準ギヤモーターのギヤ比は、48:1に設計されています。




     

教室情報 ――――――

ロボカップ関連 ――――
  

バナースペース

けいはんな
   ジュニアロボットクラブ

〒619-0237
京都府相楽郡精華町光台8丁目

TEL : 070-5263-2200
FAX : 0774-98-1100
mail : jun@kinet-tv.ne.jp