はじめに
ここでは H8から浅草ギ研製感圧センサーボード「AGB65−4FS(4 point Force Sensor)」を駆動してみます。
※このページで紹介する内容はあくまでも一例です。個別の作成のご相談ご質問はお答えできませんのでご了承下さい。このページと同じ内容についてのご質問についてはロボット掲示板にてお願いいたします。
H8マイコンとAGB65−4FS
ロボット神経システムAGB65シリーズはPCやマイコンのシリアル通信機能を使えるスキルがあれば簡単に動かすことのできるモータコントローラ、センサー群です。1つのシリアルラインを複数のAGB65シリーズで共有でき、取り外しや追加も簡単に行えますのでPCやマイコンをホストコンピュータとしたロボットの作成が容易にできます。
AGB65シリーズについてはこちらにも情報があります。
今回使用するAGB65−4FSは1つのセンサーボードに4つの感圧センサーを付けて、それぞれの荷重情報だけでなく、4点内の重心位置をXY座標で出力する機能もついています。
4点感圧センサー AGB65-4FSの詳細はこちらを参照願います。<−このページは必ず参照してください。
(以後、このページを4FSのページといいます)
AGB65シリーズは標準ではマイコンと接続するようになっております。PCと接続する場合でも変換にはAGB65−232Cというオプションボードが用意されておりますので簡単に接続できます。下の図はマイコンとつなぐ場合のイメージです。AGB65シリーズは各ボードに固有のIDがあり、これを変更できるタイプのものは1つのシリアルラインに同じ種類のボードを複数接続することができます。4FSの場合は1つのシリアルラインに16個のボードを接続できます。
<H8マイコンについて>
日本では、書籍や解説ページが沢山あるH8マイコンボードがホビー用によくつかわれており、電子部品店などでH8マイコンを搭載したCPUボードが売られています。国産のマイコンなのでデータシートが日本語というのも魅力です。
マイコンの開発で一番はじめにカベとなるのが開発環境ではないかと思います。H8のマイコンボードは多数販売されていますが、開発環境を自分で構築する必要が多いです。ここでは、開発環境が比較的ビギナー向けであるベストテクノロジー社のBTC064を使ってみます。CPUはH8/3694Fで、以前トランジスタ技術の付録についていたものと同じですので3694Fを持っている方も多いかと思います。
以降で使っているマイコンボードはこのBTC064に5V電源をつけたものです。5V電源の作り方とベストテクノロジー社の開発環境「GDL」のインストールについてはこちらを参照ねがいます。
H8マイコンボードを使ってみる のページ
H8/3694Fマイコンボードのピン配列 + 自作基板の電源出力 の図
接続
4FSはTTLレベル(0V/5V)でシリアル通信を行いますので、5V系のマイコンと直結できます。ということでH8マイコンとも直結できます。
センサーの取り付け・実際の接続
<センサ取り付け>
まずは測定するためにセンサーを固定する必要があります。4FSのページに取り付け寸法がのってます。作業場に有った適当なアルミ板に取り付け穴をあけました。実際にはロボットの足裏や、外装の内側に取り付けることになります。
4点と取り付けたところです。真ん中に4箇所ネジ穴が開いてますが、これはこの裏にモジュール部を取り付けるためにあけました。モジュールの取り付け穴ピッチは25x25mm間隔です。AGB65の取り付け穴ピッチは5mm単位なので、製図をせずに、方眼紙を板に貼りつけても正確な穴があけられるかと思います。モジュール部のサイズも、ロボットへの取り付けを考慮して29x29mmと非常に小さく作りました。
裏面にモジュール部を取り付けたところです。
<電源ケーブル>
モジュールは内部5Vで動いており、7.5V以上(25Vまで)の電源が必要です。添付されている電源ケーブルは9V乾電池用のスナップがついてます。
プログラミング中はずっと通電することもあるかと思いますので乾電池を使いたくない場合はケーブルを加工して外部電源化するのもよいでしょう。私は開発中は、1Aぐらいの出力のACアダプタを使ってます。ACジャックは秋葉原の電子部品店などでも売ってます(私は千石電商で買いました。)。ACジャックと、4FSに添付されている9V乾電池用のケーブルを切ってハンダ付けしたのが下の右の写真です。
※右の写真に「RSCに添付...」とありますが、4FSに添付されたものを使います。(写真使いまわし)
<通信ケーブル>
スタンプと4FSの接続には4FSに付属の通信ケーブルを使います。これはAGB65同士を接続するように両側にコネクタが付いています。4FSを増設するときは、4FS同士を接続しますのでこのまま使いますが、マスタとの接続の場合はこのケーブルの加工が必要です。
今回は、マイコンボードからヘッダピンが出ているので、一方に2550コネクタを取り付けしました。皆様は、このマイコンボード+5V電源回路とまったく同じということは無いと思いますので、実際にはマイコンボードに合ったコネクタを自分で取り付けたり、直接マスタ側の基板にハンダ付けすることになると思います。
TXEラインはAGB65シリーズ同士をつなぐときにだけ使いますので接続しないでOKです。写真では黄色の線ですが、線の色は決まってませんので注意して下さい(フラットケーブルを切って作っているため。別な色もある。)。
実際の接続は下の写真のようになりました。4FSが立ち上がる前にデータが送信されると通信ができなくなるので、電源はH8マイコンと4FSの両方を同じ電源を使った方が良いです。マイコン側で起動時に4FS起動終了までウェイトしてからメインプログラムを走らせれば、間違いなく4FS側でデータが受け取れます。
その他細かい接続や注意点は4FSのページを参照願います。
プログラミング〜重心を表示するプログラム
AGB65−4FSは、それぞれの荷重を数値で取得できるだけでなく、4点から重心を割り出してXY座標で返す機能もあります。ここでは、一番使われるであろうこの機能を使うプログラムを考えます。
重心読み取りのフォーマットを4FSのページで確認しますと、命令60と80があります。80の方が現在の荷重を中心にセットできるのでこちらの方を使ってみます。
<命令送信フォーマット>
[255] [ID] [長(1)] [命令(80)]
<結果返信フォーマット>
[255] [ID] [長(3)] [命令(80)] [X] [Y]
とありますので、単純に4バイトの命令を送って6バイト取得するプログラムを作れば良いようです。
ここで問題なのですが、H8/3694FはUARTが1つしかないので、読み取ったデータを何かに送信して表示、ということができません。3687FあたりならUARTが2つあるので、プログラムポートと別の方のUARTを4FSに接続すればGDLに付属のSIMPLTERMあたりでモニタできたので、これにすればよかった〜、と後悔しまたが、ここまでやって組み変えるのも面倒だったので、X軸の荷重状態だけをLEDで簡単に表示できるようにしました。
LEDの点灯については H8マイコンを使ってみる のページそのままなのでそちらを参照願います。(接続しているポートも同じ)P11とP12につないで、左に荷重したらP11を、右に荷重したらP12につながっているLEDを点灯させることにします。
ということで作ったのが次のプログラムです。
テキストデータはこちら H8_AGB65_4FS.c (右クリックで対象を保存)
GDLはシリアル送受信関数がついているので、データシートをあまり見ないでもシリアル通信機能がつかえますので便利です。
■行4
シリアル通信関数のバッファを宣言。(この辺りはベステクのサンプルプログラムにある)
■行7
命令のデータはこの4バイトで固定です。
■行10
結果を格納する変数。グローバル変数にしてます。一応。
■行15〜22
行7で設定したデータを送信します。SCI3_OUT_DATA( ) 関数は1バイトを送信する関数です。GDLでない環境の場合はこの名前でないか、こうゆう関数が無い場合がありますので注意して下さい。H8/Tiny以外のH8でも名称が違うと思います。
■行32
UARTを設定する関数。これもGDL特有のもの。
■行35〜37
LEDをつないだIOを出力設定にして、LEDを消灯してます。IOピンがHIGHで消灯、LOWで点灯です。詳しくは H8マイコンを使ってみる のページに書いてあります。
■行40
GDLのシリアル関数は割り込みを使うので、割り込みを許可します。
■行45,46
ここ、重要ですが、4FSが起動し終える前にデータを送ると、どこが通信開始かわからなくなり、正常jに通信できなくなります(非同期通信なので)。ということで適当なウェイトをかけて、4FS起動終了まで待ちます。ロボット搭載時に、マイコン側と4FS側の電源が別という構成の場合は、電源を入れる順番に注意して下さい。かならず4FSが起動終了した後にデータを送信するように。
■行52
命令送信後、ちょっとウェイトをおいてますが、ここは無くても動くかも。
■行53〜56
6バイト受信してます。複数のAGB65シリーズをつないでいる場合、受信バイト数がまちまちなので、こうゆうやりかたではなくて受信割り込みなどをつかって1バイトづつ判定し、どのボードからの返答か判別する必要があります。
■行57〜64
返信の5バイト目がXの重心位置(中心は127)、6バイト目がY、なので、5バイト目で判定してます。127プラスマイナス20でLEDが点灯します。
結果は次の通り、
右を押すと右のLEDが点灯
左を押すと左のLEDが点灯
となりました。
このような感じで簡単に重心を判定することができます。命令70は現在の重心を記憶するので、例えば、「ロボットが現在たっている状態を記憶して、そこから重心がどちらの方向に移動したか?」
ということも簡単に判定できます。
センサー取り付けのポイント
取り付け時のポイントですが、センサー部は点なので、接触部がその点以外の場合は当然荷重を検知できません。この場合、たとえば二足歩行ロボットの足裏につける場合は、足裏が床と平行に接触する場合でないと全センサーポイントからの値を読むことができません。床が水平でない場合も同様です。これではせっかくセンサーを付けた意味が無いので、全ポイントに荷重されるように構造的に改善するしかないかと思われます。
これは重要なポイントなので、浅草ギ研では引き続き、対象物が水平でなくても4点に荷重されるようなパーツを検討していきます。これらの情報については開発が終了しだい、4FSのページにてお知らせいたします。
おわりに
浅草ギ研では、4FSと同じようにコントロールできるセンサやコントローラを順次リリースする予定があります。感圧センサーだけでなく、他のセンサーやサーボモータコントローラも同様にコントロールできますので、これらを使えばロボットのアプリケーション開発に注力することができるでしょう。是非、高度なロボットを作成してみてください。
2006年4月16日
|
|
|