その他、参考-こんにちは、GRA父です。いや~、オリンピック決まりましたね!よかった、よかったっと思う半面、開催までのこれからの7年・・・。本業の方も、オリンピック景気のおかげで恐らく、とてつもなく大変になりそうな気がしてなりません。戦々恐々です(涙)さて、前回までの内容で、このシリーズは本来、おしまいだったのですが、せっかくここまで書いたので、ついでに参考内容を書きたいと思います(笑)これでこのシリーズは完結です。今回は、参考程度ですが”空気の温度勾配(=ゆらぎ)の影響”等について書きたいと思います。»»続きを読む空気の温度勾配(=ゆらぎ)の影響というのは、超音波が空気を伝わるため、空気の状態に変化や異常があると正常な計測が行えない場合のことをいいます。今時の施設では、ほとんどないとは思いますが、炎やストーブ、ヒータなどによって、コート上で急激な温度差がある(=できる)場合、超音波はその温度の差がある所で、空気の見えない壁ができてしまって、進行方向が変化していまい、反射波の受信が不安定になったりする場合があります。クーラー等により風量が強い場合(一気に冷やす、暖める)、超音波の進行方向が変化し動作が不安定になったり、その風によって起こる空気温度の局部的な変化により、動作が不安定になることがあります。人間として感じる空気の壁の例としては、ちょうど今なら、外から帰ってきてクーラーきいた部屋に入ると、涼し~と感じますよね。車に乗るとき、炎天下に置いてあった車のドアを開けると、むわっとした暑い空気を感じますよね。これが空気の壁ですね(笑)特に無理してあげるとすれば、会場設置をする側で考えた場合、会場の空調機器が壁に取り付けられた縦置き型冷暖房機器の場合には、送風方向を考えないと、近くのコートが時間やその温度によってに影響を受けますから注意が必要になる場合も考えられないこともないですよ(笑)まぁ、朝一なんかは開場して即なので、室温と設定温度との温度差がすごいでしょうから、設定温度付近になるまで風量が最大で送風されるのですが、日中ならば余程の外気温変化が急激に起こらない限り、コート上での局地的な変化はないので、それほど考えることはないと思います。参加チームの皆さんは、ここに書いてあるからといって、心配する必要はありません。今時の施設は、こういう点では安全ですから(笑)あくまで参考程度の知識として覚えておいて下さいね。超音波、超音波といっていますが、人間の耳には聞こえない音のことを超音波と呼んでいます。なにが言いたいかと言えば!普通の声とか音楽の音も”音波”です!!人間に聞こえる音です。このことは最初に書いたと思います。念のために書きますが、超音波は同じ音波なので速度も同じですよ(笑)これが判れば、例えば花火で光った!少し遅れてど~ん!と音が聞こえた場合、時間を量ることで、花火を上げている場所と聞いている場所の距離が判ります。これは中学の理科で教わっているとは思います(笑)なんでこのことをまた書いたかというと、この前、花火を見ていたときに娘達に質問したら一瞬固まったのでくどいと思いますが書きました(爆笑)以上、余談でした(笑)さて、これで、考えていたこととかネタになることとが本格的に尽きました・・・。このblog(=GRA・CHAN!のチームblog)として考えると、今回以上にあわないけど、RCJ向けとか電子工作的なblogと考えた場合ならば書けるネタならば結構あるんですが、これは将来、別のblog(作るかどうかは?ですけど)のネタなので今は・・・ね(笑)以上、ついにネタが尽きて、困ってしまったGRA父でした~。その2-こんにちは、GRA父です。今回は前回の”補足その1”を書いているときに、大部分出来上がっていたおかげで、今回UPが速くできました(笑)そんな人はまったくいない!!とは思いますが、万が一待ってた人、おまっとうさんです。このシリーズも、もうじきお終いになりま~す。これが終わると、ついにネタ切れになりますので、GRA・CHAN!が活動しない以上、もう粘りようもないので、これからどうすっかなぁ~なんて考えいる私がいます。いいつつ、あともう1回、ありますけど(笑)まぁ、先の話はおいておきましょう。前回は、複数の超音波センサの動かし方における注意点というか、なんというかを書きましたが、今回も似たようなものです。»»続きを読むその1、超音波センサの干渉。複数個の超音波センサを使った仕組みを考えると、必ず発生するというか、悪夢に感じてしまうのが”干渉”です。基本的に”干渉”というのは、例を挙げると、AとB、2つの超音波センサがあり、Aの超音波センサの超音波の反射波を、Bの超音波センサが受信しようとしているタイミングでBが受信してしまうことにより動作というか計測データが不安定になる現象です。超音波の原理のおさらいとなりますが、超音波は物体にあたると反射しますので、何度も跳ね返って戻ってきます。超音波は空気中での伝播によりエネルギーが減少し減衰します。(もうちょっと書くと、物体に跳ね返るときもエネルギーは減衰するんですけどね・・・。)”エネルギーが減衰”というのは、イメージ的には空気という壁を何回も突破していくので、だんだん突破力が弱くなっていくことと思えばいいのでしょうかね?(と、教えましたが。)減衰するということは、いつかはなくなるのですが、ロボカップジュニアのサッカーコート程度の広さだと結構な時間がかかります。”補足その1”でも書いたとおり、基本的には超音波センサを1個、1個動かすのですから、そんなに他の超音波センサの反射波の影響を受けないと思われがちですが、送信した超音波をすべて反射波として受信し切れていないので、受信できなかった余りの反射波があります。その余りの超音波を別の超音波センサが受信してしまい、正常な計測ができないような状況が起こりえます。ここでPING)))では実際??ですが、通常の超音波センサは、反射してくると思われる計測待ち(反射波待ち)時間内での反射波がある基準以上の反射波の強さ(=受信レベル)によって返ってきたと判断していますので、超音波は減衰するのですから、待ち時間中でも弱いレベルで超音波を受信すれば、それは反射波が返ってきていないということになります。実際に考えると超音波の速度は約340m/sですから、そこまで高速に移動するロボットはできないので、ほぼ必ずロボットに反射波がぶつかっていますから、減衰またはボディ形状による拡散反射をしていますので、もう一度、つまり2度目の反射波は、かなり弱い反射波になります。話がそれますけど、前にも書きましたが、いくら受信レベルがしきい値以上でも待ち時間をオーバーしていれば返ってきていない!ということになります(=復習)話を戻しますね。正しい考え方ではないですが、PING)))でイメージする場合、PING)))の測定距離は約3mでしたよね。約3mと判断できる反射波の受信レベルまでは、反射物体を何回も跳ね返って、その上、計測可能時間までに反射波が戻れば約3mとなってしまいます。これを防ぐ方法しては、1個1個、超音波センサを動かすとき、つまりAの超音波センサを動かし終わったら、少し時間をおいてからBの超音波センサを動かすようにすると、この余りの反射波による干渉が軽減できるというか影響を受けにくくなります。いや、ほぼ受けないと思ってもいいです。約3m以上と判断する時間を経過さえすれば、もう反射波がきても、例え受信中であっても計測しない(反射波がきた!)と判断しなくなります。”余り反射波”ですから、もう既に超音波は減衰しているので、ここまでの時間は不要ですね。あとは超音波センサの取り付け位置にも関わりますが、前後左右と4個付けるのであれば、例えば左の超音波センサを動かして、少し時間を空けて右の超音波センサを動かす。しても少し時間を空けて前の超音波センサを動かし、また少し時間を空けて後ろの超音波センサを動かすという風にすれば”干渉”の影響は受けにくくなります(笑)この”少し空ける時間”ですが、取り付け位置や構造によって大きく変わりますので、各自で実験が必要ですのであしからず。-実験が面倒な人へ(笑)-ホント、実験なんかめんどくさい!と思っている人は、単純に18.5msの時間を空けて、次の超音波センサを動作させればいいですよ(笑)当時、小学4年生(?)だったYは、超音波センサ間の待ち時間を20msに設定して干渉から逃げていました(爆笑)さてもう一つ、”干渉”があります。いままでは”自分の超音波センサ”でしたが、相手のロボットにも超音波センサを搭載していると思います。同じように相手の超音波センサも動いているんですから発信しますし反射波もあります。この対策は正直ありません(爆笑)相手もPING)))なら、もうどうしようもないです。あきらめましょう!としかいいようがないですね~。~し!過去の大会・試合において、この干渉のせいでおかしな動きをしたというのを目にみえて判る事象はなかったので、恐らく極端には影響を受けていないと思われます。(メンター&観客の立場で。)と、まぁ、今回は以上です。これをそのまま前回の記事に合体させていたら、前回の記事は、とんでもないことになっていました(笑)といっても、いつも長文・駄文ですけどね(爆笑)これで私として書きたかったことは以上です。当方blogがヒットする”blogの検索キーワード”や”Nへ質問をくれた方”、ご要望の内容、ご質問のお答えになったでしょうか?もしタメになった!と思って頂けたら幸いです。ここまで書いたので、参考知識としての内容を次回書いて終わりにしたいと思います。次回はほんと、超音波の特性上における参考程度の内容を書こうと思います。(書こうとしていることは決まっているのですけど、時間が・・・。)以上、新しいネタを考えないと・・・っと焦るGRA父でした~。その1-こんにちは、GRA父です。じき会社の研修で低山ですが、なぜか登山!をします(涙)小学校の頃、林間学校で富士山の5合目から7合目(?)ぐらいまで上りましたがそれ以来ですか。間違いなく途中でへばるんじゃないかなぁ~。その日が待ち遠しくない!今日この頃です。前回、超音波センサPING)))を例にしたプログラムの考え方のようなもの?を書きましたが、今回はそれらを含めた補足?的なことを書こうと思います。»»続きを読むその中でも今回は、複数個ある超音波センサの動作方法について書きたいと思います。いうことかというと、まず最初に。例として、同じ方向に向けた超音波センサがAとBと2つあるとし、同じ反射物体に超音波を発信するとします。同時に超音波を発信すると反対側の反射物体にもよりますが、ほぼ同時に反射波が帰ってきます。この例の場合には普通、それほど問題なく受信できます(=家でやったPING))))でのテストでは。)が、もし反射物体に凹凸があり、Aの超音波センサは遠くの物体で反射、Bの超音波センサは近くの物体で反射した場合、Aの超音波センサはAで発信した反射波で受信するのではなくBの超音波センサで発信したものを受信してしまうケースがあります。(ケースbyケースですけど)この状態になってしまうと、当たり前ですが正確なデータは計測できません。この計測データを正常にする為には普通、超音波センサの間隔を十分に開けて取り付けます。いっても、ロボカップにエントリーするロボットは”超音波センサの間隔を十分開ける”ことはできないので、同時に動かすということはなかなか・・・。その為、このような同じ方向に取り付けて発信するようなケースでは、2個の超音波センサを同時に発信させるのではなく、1個、1個各々動作させる制御が必要です。1個目の超音波センサが動作をして反射を受信をしたのちに2個目の超音波センサを動かす、つまり1個、1個動かしなさい!ということですね。(かなり曖昧に書いちゃいました(笑))また同じ2個でも、全く反対に向けて取り付けて発信(=右設置・左設置とか)の場合、同時発信は思った以上にうまくいきます。同時発信をしたい場合は、超音波の発信方向が異なる組み合わせ、左・右の組み合わせ、前後の組み合わせとか、また左・後、右・前とか同じ方向でない場合であれば可能かと。ロボットの構造によっては、これもNGとなりますので、まずはお試ししてからがいいと思います。同時発信をしたからといって計測する方法は、1つのマイコンだとマルチタスク的な処理は望めないので、結果、2個目の計測データは補正をしないと使い物にならないデータになりますので、ご注意をば(笑)普通、電子工作で考えると2個同時とか3個以上同時に動かそうなんて発想はしないとは思いますが、念のため(笑)ということで、ロボカップジュニアのサッカーでは2個以上超音波センサを取り付ける(当方チームの場合は4個でしたね。)のが多いので、1個、1個動かすようにしないといけません。いいつつ完全同時でなく時間差動作であれば、2個までならできないこともないですが、それはプログラムの腕次第になるので、ここでは割愛します(笑)参考にですが産業用の超音波センサの例ですが、産業用の場合、1つの超音波センサにはマイコンが搭載されていて自身で発信・受信制御をしています。電源入れれば勝手に動くわけですね。複数個超音波センサを使う場合において、同じような悩みがでます(笑)先程の同時発信や1個1個制御するやり方(=時間差動作)を”同期信号”という信号を超音波センサ同士で繋いで”同期”をとります。この信号がONしている場合は、同時に発信とか、1個目が発信しているよ、だから2個目は発信するなよとか、予め決められた動かし方を決めていて、そのタイミングの取り方が”同期”といってます。ロボカップのような場合は、1つのマイコンで複数の超音波センサを動かすので”同期信号”は不要ですが、やっている制御は”同期”制御とイメージ的には変わんないことをしているのですよ!あ、ちなみに当方チームの場合ですが、4個の超音波センサを1つ、1つ動かして、すべて計測終了してから走行プログラムへ進むようにしているようです。最後に、4個を1つ1つ動かすと遅いじゃない?と思う方へ。オープンAに限って書くと、コートサイズは122cm×183cmですよね。といことは、自分のロボットのサイズを22cmとすれば、横軸は122-22=100cm、縦は183-22=161cmです。100cmというこは2で割ると1個あたり50cmですが、1個の場合、0~100cmの範囲で増減するので、そのままなにも考えず横は100cm、そして同様に縦は161cmと考えると、100cm+161cm=261cmとなり、動作時間は単純に考えると1個の超音波センサのMAX18.5msよりも短くなります。これに(入力トリガ時間+ホールドオフタイム時間)×4をした時間を加えても、やっぱり1個分の超音波センサ相当の時間になりますよね(笑)まぁ、イレギュラーな状態や次回書く事を踏まえると、4個の超音波センサが動作する時間は、大体2個分の超音波センサの動作時間をしていることになります。以上、ご参考までに(笑)実は、今回書いた内容は補足事項のその1相当です(笑)その2相当も大部分できていたのでですが、その1にいらんことを追加したら恐ろしいほどの長文でしたので分割しました。ここまで読んだ方、大変ご苦労様です(爆笑)その2相当もこれから追記やら修正やらしていくので、そのうちにUPしたいと思います。以上、できれば研修、行きたくね~と思うGRA父でした~。その2-こんにちは、GRA父です。長期出張のトリプルやゲリラ豪雨、猛暑に悩まされ続けましたが、やっと!夏休みへのカウントダウン開始~。あと月曜と火曜の2日いけば正規夏休み~。いいつつ、今日は自由取得の1日を使って、3れんきゅ~。オヤジはこの複合した環境変化についていけずにバテています。バテた状態ですが、リフレッシュ!!!ということで、今日はGRA母と2人で映画館で映画2本立て続けで見てきました。一つは本日から封切りのロボットvs怪獣ものを3Dで、もう一つは西部劇風で白塗り&アイマスクの映画。(どっちもTVCMしているやつです)娘達の方は、受験勉強しろ!という私達から逃れる為、既に実家に避難(=帰省)中ですので、自由(?)な時間を満喫しております、ハイ。今日は前回の続きというか、やっとプログラムの考え方です。»»続きを読むプログラムの考え方ですが、私がここで書くのはおかしな感じですが、GRA・CHAN!が昔、ちょっと変わったやり方をしていたので、それを書きたいのと、ちょっとした致命的な問題点を書きたいので、あえて考え方を書きますね。図は、PING)))の動作タイミングチャートです。これをプログラムで書くわけですが、ざっくりと説明していきたいと思います。最初にPING)))のSIGに接続しているマイコン基板のI/Oポートの信号端子を”デジタル出力=OUT”に設定して、出力状態をLOWに設定(2~5uS程度)しておき、その後5uS間、出力をHIGHにすることで、超音波センサPING)))が超音波が発信命令と解釈します。その後、PING)))が超音波を発信します。その後、物体に反射して戻ってくる超音波を感知させるために信号端子を”デジタル出力”から”デジタル入力=IN”に切り替えます。”デジタル入力”に切り替えられた信号端子には、超音波センサPING)))が計測を開始するとHIGHになります。(トリガとして出力していた信号を、PING)))が5us間受信したら、その後750us経つとHIGHに自動的になる)そして超音波センサPING)))が反射波を受信すればLOWになります。プログラム的には”デジタル入力”に切り替えた後、まずHIGHになるのを待つというプログラムを実行させる。HIGHになるまで待つプログラムが終わり、次に進むので、まず最初にカウンターとかを”0”にするとかにして計測を開始させる。そのあと、今度はLOWになるまで待つというプログラムを実行させ、LOWになったら次に進めて、カウンターを止めて、そのカウンター値を計算するというプログラムを書けばいいのです。PICとかAVR等の場合は、内部タイマー分周で、それ以外の場合はタイマー割り込みをかけて時間を計測します。このタイマーの使い方が??な場合ですが、2009年当初、当方では同じく???だったので、i=i+1を繰り返して時間を計測してました(爆笑)まぁ、かなり実測値と誤差が出たので、補正値を掛ける羽目になりましたが・・・。これでも時間計測はできます!!それと、もう一つ面白い書き方だなぁ~と思ったのは、トリガのデジタル出力後に、350us(当時のPING)))はエコーホールドオフ時間が350usだったので。)待ってから、LOWになるだけを待つ!というプログラムを組んでいました(笑)これは、どうしてもエコーホールドオフ時間の350usという数字のマジックに惑わされた為です。しても350usを組み込まないといけない!という考えがあったようで、単純にHIGHになるのを待つ事にする発想が無かったとも言いますけど(笑)まぁ、確かにi=0にするプログラムの処理時間+デジタル入力に切り替える時間+350us待つプログラム=350us以上になるので、確実にPING)))からはHIGH信号が出ているので、LOWだけ待っていればいいのは確かですけどね。いつだったかPING)))が、350usバージョンから750usバージョンに切り替わったときに、2つのPING)))が混在している時期がありました。それを知らずに計測値がおかしい?!ということがありました。(たしかこのブログでも当時、Yが書いていたような気がします・・・。)それが判った為、普通の書き方、つまりデジタル入力に切り替え後、HIGHを待つようなプログラムに変えたんですよね~。この辺のプログラムの書き方というかサンプルプログラムは、いろんな書籍や先駆者様のblogにありますので、自分の基板にあったサンプルプログラムを探してくださいね。サンプルプログラムもそうですが、ちょっとこのままでは落とし穴があるので、それを。考え方で、HIGHになるまで待つプログラムとか、LOWになるまで待つプログラムとか書きましたが、C言語でいう”while()”文の()内を、単純に”***になるまで待つ”だけでは絶対ダメです!これは、当方チームが2011年のジャパンで食らったことですが、何らの原因でPING)))が壊れた場合、while()”文から先に進めずに無限ループに陥ります(涙)つまり!そっから先にはプログラムは進みませんので、ロボットは動きませ~ん!!!なので必ず()内には”***になるまで待つ”以外に”ある設定した時間が経過するまで待つ”の条件も入れて、どちらか一方が条件を満たしたときにwhile()文が終了して、次に進めるようにして、万が一、PING)))故障時でも動くようにプログラムしましょ~。これしないと、試合中にえらい目に遭いますよ!さっきも書きましたが、当方チームは2011年ジャパン予選で、おもいっきり食らっていました(爆笑)さてさて、話を戻しますね。マイコンの分周期タイマーとかカウンターとかで計測した時間は、前回も説明したとおり、超音波が物体にあたり跳ね返って戻ってくる往復の時間なので、計測時間の半分が実際の距離に要した時間となります。前々回で書いた記事が役に立ちます(笑)そうです!前々回に書いた計算式で求めることができるのです。計測した時間:965(μs)であった場合の超音波センサ~物体までの距離dは、0.17221×965=166(mm)=16.6(cm)となります。超音波の反射波がかえってこなかった時や超音波センサPING)))の測定可能距離をオーバーした場合は、自動的に計測時間は18.5(ms)となります。計算してみれば判りますが、3185.6(mm)=3m以上となります。この値のようにオーバー値がきた場合には、計測不可能だったよ!というようなプログラムが必要です。今回は、かなり長文でしたが以上です。”いつもだろ、おい!”というツッコミはNGですよ(笑)ここまで読んだ方、ご苦労様でした(笑)次回は、今回が長文過ぎたので書くのを取り止めた補足等々とかを書きたいと思いま~す。以上、GRA父でした~。その1-こんにちは、GRA父です。先月がこのblog始まって以来初の更新回数でした(爆笑)娘達もblogを書かなくなっているようなので、blogタイトルを変更しようか?とも思い始めている今日この頃です。(それはないですけど。)さて、前回の”原理とか?”(?を付け忘れた・・・。本当は、その補足を書こうと思いましたが、これから書いていく時に、その補足を入れながらにしようと思います(笑)なので、今回から実際に超音波センサPING)))を例にして書きたいと思います。当方チームGRA・CHAN!に当時教えた内容を改修して(当時のままだとあまりにもヒドイので)書いていきます。(まぁ、簡単に忘れた!といわれたことが悲しいから書きはじめたというワケですが・・・。)その為、いつも通り、余計なことも書くので、ちょっと3回ぐらいの長編になりますなぁ。娘達が活動していないので、その代わりのblogネタということで(笑)»»続きを読む今回はほとんど序の序ですので、PING)))のことを書いていない内容になります。