2013年5月5日日曜日

ロビ のサーボからステータスを取得してみる

 腰をダメにしてから全然運動しなくなってしまったんですが、昨日は久しぶりに軽く体を動かしたら、早速、二の腕が筋肉痛になってしまいました。今日は、おとなしく机に向かって、マイコンいじりです。
 さて、巷でも結構人気があるらしいディアゴのロビですが、現時点では、首部の水平動作と右腕(胴体とは繋がっていない)までが出来上がっている状態です。右腕の肘のサーボは以前にKinectを使って遊んでみました。本格的に動き出すのはまだ先だと思いますので、今回は首部分を使って、なにか遊べないかと考えてみました。ネットなどで色々調べていらっしゃる方々の情報を見させてもらうと、ロビで使われているサーボはROBO XEROに使われているFutabaのロボット用コマンドサーボと同じ中身と思われます。(コネクタは特殊ですが。)そこで、コマンド型のサーボの特長でもあるサーボ側ステータスの取得をしてみようと思います。
 TTLレベルでのシリアルコマンド制御になりますが、特長として、1本の信号線で送受信を行わなければなりません。つまり、半二重です。TTLレベルでのシリアル通信はマイコンの得意分野ですが、通常は全二重で、送信ラインと受信ラインは独立です。そこで、こちら(ディアゴのロボザックとかROBO XEROのときに色々と参考にさせてもらっていたサイトです)に掲載されていた回路を使わせていただいて、ロビのサーボをArduino Mega(互換ボード)で制御しました。




 USB-TTL変換でPCと通信もできるのと、ジャンパでTTLレベルでマイコンに直結できるようにして、今回は、Arduino に接続しています。


 ロビの首サーボをトルクOnにして、定常電流を定期的に取得して、取得した電流値がある閾値を超えた場合は、外部から力を加えられたと判断して、ロビのステータスが一段階変わります。(機嫌が悪くなる。)五段階のステータスで目の色を青から赤へ変化させ、五段階目でブチ切れて、イヤイヤをして、また、元の青色に戻ります。