ロボジョイくらぶが10月用に更新しました。
TETRIX入門の動画はこちらです。↓
前回の動画では「プログラムを教えて」という問い合わせを頂いたので、今回は動画内にプログラムの画像を入れてみました。
« 2015年9 月 | メイン | 2015年11 月 »
ロボジョイくらぶが10月用に更新しました。
TETRIX入門の動画はこちらです。↓
前回の動画では「プログラムを教えて」という問い合わせを頂いたので、今回は動画内にプログラムの画像を入れてみました。
投稿情報: 16:11 カテゴリー: マイスター松原(まつばら) | 個別ページ
突然ですが、EV3ソフトウェアでEV3カラーセンサーを使ってみました。
▲EV3カラーセンサーはカラーモードにすると7種類の色(色なしを加えると8種類)を検出できます。暗い中で動かしてみると分かりますが、この白く照らされている部分が色の測定範囲です。良く見るとR/G/Bが少しズレて重なっているのですが、その3色が重なった部分に対象物が置かれていないと正しく測れません。
光の当たっている範囲から考えて、対象物が20mm四方くらいの大きさでないと、正しく色を読み取れないような気がします。今回、ブロック1個だけを読むというのは、ちょっと無理があります。
▲プログラム1。まずは色を認識して、その色を音声でしゃべるだけのシンプルなプログラムを作ってみました。
▲実行してみると、何色を当てても「Black」ばかりで、うまくいきません。色の誤認識です。
EV3カラーセンサーは距離の設定がシビアです。今回のように面積が小さい対象物の場合、15mm以内に近づけないと正しく読み取れないようです。信頼性を考えると10mmくらいに近づいたほうが良さそうです。
EV3カラーセンサーはLEDの光を反射させないと測定できないので、斜めに当てないで真正面から当てたほうがいいと思います。 HiTechnic製カラーセンサーは測定方法が違うので、斜めに当てても問題ありません。
▲続いて、移動中の色の認識に挑戦してみます。これも誤認識が起きやすいです。
▲プログラム2。移動しながら、色を読み取って、色があったら止まるというプログラムです。
このプログラムは失敗しやすいです。たとえば、赤色のブロックだと、茶色にご認識してしまいます。
対策としては、複数回色を読み取って多数決で決めてもいいのですが、ロボットが移動中だと、あまり読み取り回数を増やすことができません。そこで、最初の結果を読み飛ばすようにしてみました。
▲プログラム3。改良版です。最初に色を検出したら、意図的にオーバーランして、測定をやり直します。最初の測定結果は捨てます。
ブロックの長さが約31mmなので、オーバーランさせる距離は16mmとしました。
▲ブロックの中心でセンサーが止まって、「Red」と認識されました。成功です。
動画にしてみました。
撮影ではうまくいっていますが、ブロックの形状が細長いので、進入角度を間違えると、誤認識してしまいます。センサーを左右に振って読み直すっていう方法もありますが、時間がかかってしまいます。ガイドみたいなもので、ブロックの位置を直すといいでしょうか。
あとはプログラム内で「茶色→赤色」という扱うにして、補正してしまったほうがいいでしょう。
プログラムはこちら
◆HiTechnic製カラーセンサーとEV3カラーセンサーの違い
HiTechnic製カラーセンサーとEV3カラーセンサーでは色の測定方法が全く違います。HiTechnic製カラーセンサーは白色LEDで光を当てて、反射した光をカラーセンサーで読み取っています。
一方、EV3カラーセンサーはフルカラーLEDでR/G/Bを順番に当てて、その反射量をフォトダイオード(もしくはフォトトランジスタ)で読み取っています。R/G/Bの色を三回当てる必要があるので、動いているものの測定には向いてません。HDKの回路図によるとEV3カラーセンサーには「PD-33BRC」というセンサーが使われています。
HiTechnic製カラーセンサーは周りが明るいほうがセンサーに光が届きやすくなって反応が良くなるのですが、EV3カラーセンサーはLEDの光だけ読み取りますので、周りの明るさは測定結果に影響されません。遠くの色を読み取るならHiTechnic製のほうが有利です。
EV3ソフトウェアの機能としては、HiTechnic製カラーセンサーにはRGBで色を取り出す機能があるのですが、EV3カラーセンサーにはそうした機能がありません。反射光モードではLEDの色は赤色しか選べません。
応答速度の点ではEV3カラーセンサーのほうが勝っていますが、総合的な使い勝手では、HiTechnic製カラーセンサー のほうが優れているようです。
投稿情報: 12:25 カテゴリー: マイスター松原(まつばら) | 個別ページ
突然ですが、EV3ソフトウェアを使って、ロボットを200mm(20cm)ほど前進させるプログラムを作ってみたいと思います。前進させるだけなら簡単だろうと思ったのですが、意外にもノウハウが必要な技術です。
▲用意したロボットがこちら。モーター2個だけの極力シンプルな構成にしました。
▲プログラム1。おそらく最もシンプルな移動のプログラムです。タイヤの直径から円周を求めて、それからモーターの回転角度を求めています。
▲プログラム1を実行してみました。だいたい200mmの地点で止まりました。今までだったら、これで終わりなのですが、今回はもっと正確さを追及してみたいと思います
まず、タイヤの位置ですが、良く見ると、10mmくらい距離が足りていません。これを改善してみます。
原因として考えられるのは、値の不正確さです。プログラムではタイヤの直径を56mmとしましたが、実際は55mmくらいのように見えます。ただし定規では測りにくくて、正確な値を出せません。
NXT基本セットに標準で付属するバルーンタイヤは正式に56mmと名前が付いていたので、EV3基本セットに付属するタイヤも56mmだろうと思ってました。ずっと勘違いしてたかもしれません。
タイヤの直径を測ることを諦めて、円周を測ることにしました。
▲プログラム2。タイヤの円周を測るためのプログラムです。
▲プログラム2の実行結果です。モーターを360度回転させます。ロボットの進んだ距離がタイヤの円周となります。
パワー50とパワー25で4回ずつ、計8回計測してみました。一つ発見があったのですが、パワー50の場合だと誤差が大きくなり距離が短くなりがちです。急発進したさいに回転がロスしているためだと思います。パワー25の場合は距離が安定していました。
この結果、タイヤの円周を171mmと決めました。計算すると、タイヤの直径は約54.5mmになります。 当初の値の56mmと比べると、短かったです。ロボットの重みでタイヤが変形しているという可能性もあります。
▲プログラム3です。プログラム2の結果を元にして、タイヤの直径を数式に入れてみました。
▲プログラム3の実行結果。 見事に200mmの地点で止まりました。
しかし、プログラム2の実験では、パワー50だと回転のロスが発生していたので、同じように移動距離が短くなる可能性があります。撮影時にたまたま成功しただけかもしれません。
移動距離を正確に保ちたいなら、パワーを25くらいに落としたほうがいいでしょう。ただし、それだと速度が落ちてしまうというジレンマがあります。
▲プログラム4。おまけ的なプログラムですが、台形駆動を取り入れてみました。急発進と急停止を無くすことで移動距離の誤差を減らすのが狙いです。
この方法、急発進は無くなるのですが、回転センサーの目標値を超えた後でモーターを停止させていますので、必然的にオーバーランしてしまうという欠点があります。実際に動かしてみると10mmくらいオーバーしました。
これを防ぐためには、あらかじめ距離を差し引いておかないといけないのが、カッコ悪いです。
プログラム1~4の実行結果を動画にしてみました。
プログラム1~4のファイルはこちらです。教育版EV3ソフトウェアを使っています。
◆ガムテープでタイヤのゴミを取る
▲余談ですが、こうやってガムテープをペタペタ当てると、表面のゴミが取れてタイヤのグリップ力が復活します。ただし、効果は一時的なもので、一回走らせるとまた元に戻ってしまいます。
投稿情報: 16:22 カテゴリー: マイスター松原(まつばら) | 個別ページ
突然ですが、ロボットのその場せん回(超信地旋回)について考えてみました。その場せん回はロボット競技の世界では必須の技術です。できるだけ誤差のないせん回が求められています。
▲用意したロボットはこちら。モーター2個のシンプルなロボットです。
▲プログラム1。最もオーソドックスな方法がこちら。1秒おきに90度せん回します。
モーターの回転角度はトレッドとタイヤの直径から計算しています。この計算式が面白いのは、円周率を使っていないというところです。
見た目が90度になるまでパラメータを上げ下げ修正する、、、っていう方法は原始的すぎるので止めましょう。
▲トレッドっていうのは、タイヤ間の距離のことです。このように分厚いタイヤだと、正確なトレッドが求まりません。ここでは12cmとしました。
プログラム1を実行してみました。NXTソフトウェアの時代はモーターがきれいに止まれなくて、オーバランして回転が戻っていたのですが、EV3ソフトウェアはファームが優秀なので、きれいに停止します。到着前に正確に減速しています。
だいたいうまくせん回できましたが、角度のズレが気になります。ただ、一生懸命角度を調整しても、あとで実行すると、不確定な要素(バッテリ残量やタイヤの摩擦)で動きが違ってしまいます。
▲プログラム2です。プログラム1はモーターの回転の立ち上がりが急すぎるように見えたので、台形駆動にしてみました。 こうすると回転の加減速レートを自由に設定できます。急激な回転を減らして不確定要素を減らそうという発想です。
実行してみた結果ですが、今度はブレーキができなくて、オーバーランしてしまいます。しかたないので、オーバーランを見越して回転角度を減らしてみました。ここがカッコ悪いです。プログラム3では加減速レートを減らしてみましたが、効果のほどが良く分かりませんでした。
▲プログラム4.ジャイロを使って90度旋回させてみました。
実行結果ですが、うまく止まれません。ジャイロ自体は正確だと思うのですが、タイミングがシビアすぎるのと、モーターがオーバーランするので、誤差が生まれてしまいます。
▲プログラム5。最初に作ったプログラムとジャイロの合わせ技です。止まっている時にジャイロを読んで、タイミングのシビアさを回避しています。
90度せん回を8回実行してからジャイロで補正してみましたが、意外にもうまくいきました。
ただし、ジャイロは頻繁に暴走するので、扱いにはコツが必要です。コツについてはあとで紹介します。
実行した様子を動画にしてみました。
これ以外にも。床面のラインを読んで補正したり、別の方法があると思います。研究してみましょう。
プログラム1~5はこちら。
◆(以下おまけ)ジャイロセンサーの暴走について
ジャイロセンサーを使っていると暴走することがあります。ジャイロが暴走しているかどうかは、PortViewで確認します。ジャイロセンサーが静止した状態で、値が勝手に増えたり減ったりする。これが暴走です。
暴走の原因はジャイロセンサーの原点がズレてしまうからです。この現象をドリフトといいます。温度変化や振動によってドリフトは発生します。経験的に、一晩置いたジャイロセンサーを初めて使ったりするとドリフトは起きます。ジャイロセンサーは慣らし運転しないとうまく測定できません。
暴走を止めるには、ジャイロセンサーのキャリブレーションをやり直します。キャリブレーションをやり直す方法は2つあります。
ちなみに、ジャイロセンサーのブロックにある「リセット」という項目は角度をリセットするだけなので暴走は止まりません。ソフト的にキャリリブレーションをやり直せると良かったのですが、、、。
インテリジェントブロックの再起動は時間がかかりすぎるので、オススメしません。
残る方法はジャイロセンサーの接続し直しです。ようするにケーブルを一度抜いて、差し込むだけです。接続するさいには、ジャイロ自体が完全に静止した状態で行います。少しでも揺れがあると、原点がズレますので、暴走してしまいます。
あと、ジャイロセンサーは回転軸の中心に取り付けましょう。回転軸から位置がずれていると誤差になってしまいます。
ちなみにジャイロセンサーにはInvenSenseという会社の「ISZ-655」というセンサーが搭載されています。圧電ジャイロよりも高級なMEMSを使ったジャイロです。
投稿情報: 12:31 カテゴリー: マイスター松原(まつばら) | 個別ページ