はじめに
浅草ギ研より新型のRCサーボコントローラであるAGB65-RSC(RC Servo Controler)が発売されました。旧タイプのSC-01と違う点は
|
RSC |
SC-01 |
駆動サーボ数 |
12サーボ |
12サーボ |
1ライン最大 |
48サーボ |
192サーボ |
通信速度 |
9600,115200 |
9600,19200,57600,115200 |
主接続 |
マイコン
(オプションボードでPCと接続)
|
PC
(マイコン接続はインバータIC必要) |
近藤サーボ |
教示機能とキャラクタリスティックチェンジ機能に対応 |
なし |
といった感じです。一長一短がありますのでSC-01も今後は継続して販売しますが、ここではよりマイコン向けとなったRSCとH8マイコンとの接続を考えてみます。
※このページで紹介する内容はあくまでも一例です。個別の作成のご相談ご質問はお答えできませんのでご了承下さい。このページと同じ内容についてのご質問についてはロボット掲示板にてお願いいたします。
AVRマイコンとAGB65−RSC
<RCサーボコントローラ AGB65−RSC>
ロボット神経システムAGB65シリーズはPCやマイコンのシリアル通信機能を使えるスキルがあれば簡単に動かすことのできるモータコントローラ、センサー群です。1つのシリアルラインを複数のAGB65シリーズで共有でき、取り外しや追加も簡単に行えますのでマイコンをホストコンピュータとしたロボットの作成が容易にできます。
AGB65シリーズについてはこちらにも情報があります。
今回使用するAGB65−RSCは1つで12個のRCサーボの位置とスピードをコントロールするもので、シリアル通信でデータを送るとRSC側でサーボを動かすパルス生成などを行ってくれます。RSC上のDIPスイッチでIDを切り替えることにより、1つのシリアルポートに4つまでのRSCを接続でき、最大48個のRCサーボをコントロールすることができます。
RCサーボについてはこちらにも情報があります。
RCサーボコントローラ AGB65-RSCの詳細はこちらを参照願います。<−このページは必ず参照してください。
(以後、このページをRSCのページといいます)
マイコンとの接続の概略は次のようになります。1ラインに4つまでのRSCを配置できます。マイコンによっては複数のシリアル通信機能(非同期シリアル通信。UARTという名前が多い。)があるものもありますのでその場合はそれぞれに4つまでつなぐことができます。
<AVRマイコンについて>
日本ではホビー用としてH8やPICと同じように使われているマイコンにAVRというものがあります。AVRマイコンには、C言語でのプログラミングに考慮されたAT-megaシリーズがあり、浅草ギ研で販売しているロボットキット「AT-WALKER」にはベストテクノロジー社のAT−mega32マイコンボード、BTC067が使われています。
マイコンの開発で一番はじめにカベとなるのが開発環境ではないかと思います。ベストテクノロジー社ではAT-mega32用のC言語開発環境GDLを無償で公開しており、これは本来であれば自分で構築しなくてはならない開発環境の設定があらかじめされている、という便利なもので、ビギナーでもすぐにプログラミングを始めることができます。
以降では、AT−WALKERのマイコンボード(BTC067に5V電源回路を追加したボード)を使用した接続・プログラミング例を紹介します。他のAT−megaのマイコンボードや、自作マイコンボードを作っている方も大体同じですので参考にしてください。
書籍で作るボードの完成品。5V電源基板の上にBTC067が載っている
AT-mega32のプログラミングについては、浅草ギ研より出ている書籍「二足歩行ロボット製作超入門」に詳しく書いてあります。また、浅草ギ研ではこのAT−mega32マイコンボードだけの販売もおこなっております。(上の写真の真ん中の部分だけ)
<RCサーボについて>
RCサーボは RCサーボの紹介 のページで詳しく説明しています。
BTC067の改造
この節は、ベステクのBTC067(AT−WALKERボードの上にのってるヤツ)を使用する場合に必要な処理ですので、自作のマイコンボードなどの場合は飛ばしてもOKです。
BTC067の場合、シリアルポート通信ポートはプログラムポートも兼ねており、PCと通信ができるような外部回路がついています。この影響により、受信(RX)を使用とすると問題が発生しますので、若干改造をする必要があります。送信の場合(TXを使用)は問題ありません。
下はBTC067についてくるマニュアルの回路図です。(R80がどうの、という記載は無視してください。図を使いまわし。)
JP1は出荷時にはつながっており、PCからプログラムが受けられるようになってます。
下の図は実際にこの状態でRXにデータを受けたときの波形です。
下の図のレンジは1マス2Vで、Highの状態は5Vですが、LOWが0Vではなく2.2V近辺に上がってしまいました。実際にプログラムでデータを受け取ろうとしましたがこの波形では全てHighと認識されてしまい、データは受け取れませんでした。
BTC067ではJP1の接続を切れますので、MAX3313(上の図の右のIC)の影響が出ないようにするために、JP1を外して実験してみます。
基板中央右に四角に囲まれた JP1 というところがあり、ハンダが盛られています。このハンダを取り去ると接続を切ることができます。
ハンダ吸い取り線でハンダをとりました。(実際にはこの上からハンダゴテをあてます)
JP1のハンダが取れて、接続が切られているのがわかります。
波形を観測すると、今度はきちんとLOWが0Vまで下がり、データを受け取ることができました。
が、しかし、今度はMAX3313の接続が切られているので、新しいプロウグラムを入れようとするとAVDUDE(*1)を起動してもプログラムが転送されません。
(*1)GDLで作ったプログラムをATmega32に転送するプログラム。詳しくは浅草ギ研の書籍「二足歩行ロボット製作超入門」かBTC067のマニュアルを参照。
この対策として、ここではJP1にプッシュスイッチを取り付けて、「プログラムを転送している間はスイッチを押す」ということにしました。
これで、プログラムの書きこみも、RXを使うこともできるようになりました。
ついでに、通信に使うピンにヘッダピンを取り付けて作業しやすくしました。
接続
RSCはTTLレベル(0V/5V)でシリアル通信を行いますので、5V系のマイコンと直結できます。ということでAVRマイコンとも直結できます。
※PICマイコンはチップによって電圧が違うものもあります。(3.3Vとかの場合は通信ラインの間に電圧変換回路が必要です。)
<通信ケーブル>
通信ラインの接続にはRSCに付属の通信ケーブルを使います。これはAGB65シリーズ同士を接続するように両側にコネクタが付いています。マスタとの接続はこのケーブルの加工が必要です。
今回は、マイコンボードからヘッダピンが出ているので、一方に2550コネクタを取り付けしました。皆様は、このマイコンボード+5V電源回路とまったく同じではない場合もあると思いますので、実際にはマイコンボードに合ったコネクタを自分で取り付けたり、直接マスタ側の基板にハンダ付けすることになると思います。
TXEラインはAGB65シリーズ同士をつなぐときにだけ使いますので接続しないでOKです。写真では黄色の線ですが、線の色は決まってませんので注意して下さい(フラットケーブルを切って作っているため。別な色もある。)。
実際に接続した写真が下記のようになります。ロボットに搭載されるので基本的にはバッテリ駆動を想定していますが、実験や開発中の場合には写真のようにACアダプタから電源を取ると電池切れの心配がありません。RSCの大きさはできるだけ小さく作りましたので34x34mmというかなり小さいサイズです。上面はほとんどコネクタだけです。
あとで、ポジションキャプチャをするので、近藤科学のロボット専用サーボをつないでみました。
<サーボ電源>
サーボを駆動するにはサーボ用のバッテリが必要です。一番多いトラブルが、RCサーボ用のバッテリを使わないためにサーボが正常に動かないというものです。コンビニなどで売っているアルカリ乾電池ではたとえ電圧が同じでも動きませんので注意してください。RSCは近藤科学の「ロボパワーセル」というニッカドバッテリと接続できるコネクタがついています。RSC側のコネクタは
日本圧着端子製B2P-VHコネクタ
ですので、他のバッテリと接続する場合はコネクタを作成する必要があります。(RSCにはコネクタ作成用のケーブルも添付されていますのでそれを切って、別のバッテリにつなぎます。バッテリをショートさせると非常に危険ですので十分注意して作業を行ってください。)
下の写真は、無線機用の30Aまで出力できる電源に、RSCや、他のRCサーボコントローラのサーボ電源用コネクタをつけたところです。電圧はつまみで調整できて5〜13Vぐらいまで調整できます。
(ALINCOのDM−330MVというもので、ツクモロボット王国で売ってます。)
私もプログラム中はこれをつかって動きを確認しながらプログラミングしてます。ニッカド電池は小さくてもサーボを動かすのに十分な電流(10A以上とか)が取り出せますが、数十A出力できるAC電源はけっこうでかくなります。
ロボットに実際に搭載する場合はバッテリで駆動しますが、プログラムを作っている最中は電池切れの心配がありますので、このようにサーボ用電源を家庭用AC100Vから電源を取ってもよいでしょう。実際に多くのロボットビルダーは家で開発するときにこのような外部電源を使っています。
この場合には当然、コネクタの改造が必要になります。AC電源が通電したまま線を切ったりするとショートして爆発したりしますので十分注意して作業してください。(私も何回かバッテリを破裂させた経験があります。AC電源はもっと危険です。)
<RSC用の電源>
RSCは内部5Vで動作しています。普通のサーボのバッテリは4.8〜6Vなので、そこから安定した5Vを作るのは難しいので、7.5V以上の電源が別に必要になります。RSC用の電源はサーボとは違い、電流をあまり流さないでも動作しますので、コンビニで買った電池でもOKです。また、RSCには9V乾電池用の電源ケーブルが添付されています。
電源は7.5V以上(25V以下)であればなんでも良いのですが、近藤科学製ロボット専用サーボにHVシリーズというのがあり、これは12Vぐらいで駆動するというロボット向きのサーボで、これを使用している場合は、サーボ用電源をRSC上のジャンパ設定によりバイパスすることができ、サーボ用バッテリ一個でサーボとRSCの両方を駆動できます。
私は実験中は、9V電池の代わりに1Aぐらいの出力のACアダプタを使ってます。ACジャックは秋葉の電子部品店などでも売ってます(私は千石電商で買いました。)。ACジャックと、RSCに添付されている9V乾電池用のケーブルを切ってハンダ付けしたのが下の右の写真です。
その他細かい接続や注意点はRSCのページを参照願います。
プログラミング〜簡単にサーボを動かしてみる
まずは簡単に、RSCのIDと、サーボ番号と、スピードを指定してサーボを動かす、というプログラムを考えてみます。
RSCのページを見ると、サーボ1つを動かす場合のフォーマットは
[255] [ID] [長(4)] [命令(2)] [サーボ番号] [サーボ位置] [Speed]
です。
今回使う開発環境はベストテクノロジー社のGDLというCコンパイラがついた統合環境です。通常はAVRの開発はGCCなどを使って開発環境を自分で設定する必要があり、ビギナーには少々敷居が高いのですが、このGDLは通常使われるような設定があらかじめされていますので簡単に使い始めることができます。また、通信系の関数もついてますので便利です。
このGDLですが、フリーのGCCを使っている関係で、頻繁にバージョンが変わります。このページで使っているGDLは浅草ギ研からダウンロードできますので、以下のプログラムはこのGDLですと間違いなく動きますが、ベストテクノロジーから最新版をダウンロードすると、逆に動かない可能性もありますので注意して下さい。
ここで使用しているGDLのダウンロードは AT-WLAKERの紹介ページ からダウンロードできます。
こちらでは浅草ギ研の書籍「二足歩行ロボット製作超入門」の紹介もありますが、この本にAT-mega32のプログラミングが詳しく書いてあります。
では、簡単に、シリアル通信で上のフォーマットのデータを送るプログラムを作ってみましょう。
テキストデータはこちら AVR_RSC_1.c (右クリックで対象を保存)
通信系の関数は、ベストテクノロジーのサンプルプログラムを見ると大体使い方はわかります。サンプルプログラムはベステクのホームページからダウンロードできます。
■行1〜3
ヘッダファイルをインクルード。
■行6
RSCへ送るデータを配列にセットしてます。フォーマットは上の通り。とりあえず、0番サーボを中心にするデータを入れてます。速度が20になってますが、適当です。少なくすると回転が速く、多くすると遅くなります。
■行9から8
タイマを使って、ほぼ正確なウェイトを作る関数です。本に詳しく説明があります。
■行21〜29
先に作った配列のサーボ番号と位置だけをセットしなおして、RSCへ送信する関数です。rs_putc( )関数は1バイト送信する関数で、これをループで7回まわして7バイト送信してます。
■行32から
メインです。
■行34,35
シリアル通信を有効にし、速度9600bpsに設定しています。
■行36
ココ重要です。RSCが立ち上がる前にデータを送信すると、どこがデータのはじまりかわからなくなるので通信ができなくなります(非同期通信なので)。よって、RSCが立ち上がるまで待ちます。今回は1つの電源でRSCとマイコン側両方を動かしていますので、このようにプログラム冒頭でウェイトをかければ問題ありませんが、ロボット搭載時などに電源が別々に入り切りできるような構成だと、マイコン側を先に電源を入れると通信ができなくなります。このような場合はRSC側を立ち上げてからマイコン側を立ち上げるように注意しましょう。
■行39〜42
一秒ごとにサーボの位置を変える命令を出してます。
このような感じで、簡単にRCサーボをAVRマイコンから動かすことができます。データ送信後はRSC側で自動的に目的位置まで指定したスピードで回転しますので、AVR側ではデータを送信後すぐに別な作業を行うことができます。
RSCは、12個のサーボを一括で動かす命令もありますので、お試し下さい。
プログラミング〜教示機能に挑戦
近藤科学のロボット専用サーボには「教示機能」と言って、サーボの位置をフィードバックする機能もあります。
サーボを動かすときには、サーボの信号線にパルスを加えますが、この教示機能はモードに入るとサーボの方からパルスを出します。
RSCではこの「モードに入る」−>「位置の値を取得」を自動で行い、結果を数値で返す機能がついています。以下ではその機能を使ってみます。
教示機能では、読み取り時はサーボが脱力になりますので、この命令を出すと 「脱力」−>「読み取り」という動きになります。よって読み取った後になにも命令を出さないと、そのサーボは脱力したままです。
RSCのページを見ると、指定したサーボのパルスを読み取る命令フォーマットは次のようになっています。
※全サーボ一括読み取りもできますが、ここではとりあえず一個だけ読みます。
<命令フォーマット>
[255] [ID] [長(2)] [命令(22)] [サーボ番号]
<結果のフォーマット>
[255] [ID] [長(3)] [命令(22)] [サーボ番号] [サーボ位置]
今度は命令を送って、データを受信するので双方向の通信になります。命令を送信したあと、6バイト受信するというのが基本の動きになります。
とりあえず作ったプログラムが下のようになります。
テキストデータはこちら AVR_RSC2.c (右クリックで対象を保存)
プログラムは基本的には先のプログラムと同じです。
■行33〜41
引数によって指定されたサーボに対してポジションキャプチャ命令を送る関数です。サーボ駆動の関数とほぼ同じで、データを送信しているだけです。
■行53〜57
かく関数をつっついて、#0でキャプチャした位置を#1に転送しています。
ということで、動かしてみた映像が下のようになります。
aviファイル2.8MB
両肩のロール軸を#0と#1につないでますが、取り付けが逆なので、上下方向も逆になります。反応が遅いのは、駆動データのスピードを20にしているからで、これをすくなくすると反応が速くなるかわりに動きがガクガクする感じになります。5ぐらいがちょうどよいかも。
KHR-1の左を見ると、ちゃんとAT-WALKERのマイコンボードとAGB65-RSCがあるのがわかります。
このようにしてAVRマイコンでも、簡単にポジションキャプチャを行うことができます。
マスタースレイブですが、 抵抗型センサーの情報をPICに取り込む方法で抵抗型センサから値を取得する方法を紹介してますが、ポテンショメータ(もしくはボリューム)や、曲げセンサー、スライド抵抗などを使って、AVRマイコンでマスタースレイブシステムを構築することもできるでしょう。
おわりに
このような感じで簡単にAVRマイコンからサーボを動かしたり、位置を読み取ったりすることができます。
ここまででとりあえず1個のサーボを動かすことができるようになったかと思います。複数の場合でも上記のプログラムを若干変更するだけで作れますので、是非トライしてみてください。
また、浅草ギ研では、同じようにコントロールできるセンサやコントローラを順次リリースする予定があります。サーボコントロールだけでなく、センサーを使った高度なロボットも同様にして作れますのでこちらも是非お試しください。
2006年4月19日
|
|
|