2足歩行ロボットの開発

はじめに

今回は流行りの2足歩行ロボットの製作です。
といっても開発当初から2足歩行を目指していたわけではなく、途中から2足に切り替えました。
よって開発経緯順に書いていきたいと思います。

RCサーボの選定

多関節ロボットを製作するにはサーボの選定は重要なファクターになります。
製作するロボットのサイズ、値段、難易度などが決まってしまうといっても過言ではないと思います。
今回は初めて作る関節ロボットなので、小型で丈夫なもので価格に見合うものを選定し、浅草ギ研取り扱いGWS製ミニサーボのMicro-MGにしました。
ミニサーボながら全段金属ギヤを採用し、6Vをかけたときに6.4kg-cmとトルクも大きく1個あたり3600円という比較的低価格なのが魅力です。
とりあえず浅草ギ研の6個パックを入手しました。

製作方法の検討

関節ロボットを構築するにはいくつか方法が考えられます。
1つはアルミ材などで1関節ごとに専用の部品を作りサーボを接続していく方法。
1品ものであれば無駄なく軽量なものが仕上がる反面、柔軟性が無く設計変更時には部品の作り直しになってしまいます。
2つ目は市販のサーボブラケットを使用する方法。
浅草ギ研ブラケットイトーレイネツブラケットなどを使用するとサーボがモジュール化され、組み合わせるだけでロボットができます。
が、Micro-MGに使えるブラケットは1700円とサーボの半分近くしてしまうので考え物です。
そこで今回はブラケットを自作することにより低価格と設計の柔軟性の両方取りを目指します。

ブラケットの設計

とりあえず浅草ギ研ブラケットを真似て設計し、3DCADで形状を検討します。

材料は1mm厚のアルミ板を想定しています。
形状的にはオリジナルよりも幅を詰めたり丸型のサーボホーンが無いので標準で付いてくるもの用に合わせたりしてはいますが、気まずいくらいコピーです。
しかし1から考えるよりは確実なものが出来るでしょう。

板金

実際に作るとなると新たな問題が発生します。
アルミ板を加工するには切って穴をあけて曲げなければなりません。
このうち「切断」と「穴あけ」は何とでもなりますが、「曲げ」は困ります。
こんなときはホーザンK-130 板金折り曲げ機が定番らしいのですが、いかんせん12200円もします。
これではケチってブラケットを自作する意味が無くなってしまいます。
そこでちょっと遠回りになりますが、曲げ曲げくんを自作してみました。
 
みようみまねでホーザンK-130をコピーしたつもりです。
ただ押さえ板に切れ目を入れていないので、3面とか4面折りはできません。

ブラケットの製作

実際に板金してサーボを組み込んだ状態です。

取付は全て2mmのビス&ナットで固定。
これを必要数揃えれば形になります。

ロボットアームの組立て

組立てといっても前述のとおりレゴかダイヤブロックのごとく繋いでいくだけで完成します。
 

この写真でブラケット以外に作ったものはハンド(ものを掴む部分)の板2枚だけです。
サーボは5個使用して自由度5。
ベースはタミヤユニバーサルプレートセット を使用しています。
あとは前回製作したロボット台車のコントロール基板が8サーボまで対応なので、延長ケーブルでつなげれば動かすことが出来ます。

サーボドライバについて

前回のロボット台車では詳しく説明しなかったので補足をかねて説明します。
8個のサーボを制御する場合個別にパルスを出力する必要があります。
web上でいろいろ調べると、CPUがハードウェアで発生するPWM波形を利用し8個分のパルスを連続で送出し、ロジックICなどで8本分に分けるというのが正当なやり方のようです。
よって出てくるパルスは階段状になります。


自作のサーボドライバはPIC1個でパルスを発生するようにしたのでやり方が異なります。
そもそも16F84はPWMをハードウェアで作り出す機能はありませんし階段状にしてしまっては通信ができません。
そこで単純にタイマー0で10msecごとに割り込みを発生させ、2回に1回だけ8本分のパルスを発生するようにしてみました。

ただし、8本分を順番に計算しているので1番と8番ではパルスを切るタイミングに微妙な誤差が生じるので注意が必要です。(ナノ秒のオーダーですが。)
計算で誤差を修正するのはめんどうなので、単純にパルスをONにするタイミングをずらすことにより対策しています。(アセンブラで記述しているので単純にNOPの数で調整できます。)
またパルスを発生しない10msecの間は上位CPUとの通信に使用しています。
こういうやり方をするとプログラミングは非常に楽になりますが、あまり分解能力はあげられなくなります。

そして2足へ・・・

コントロールボードを流用してロボットアームを動かし始めたのですが思いのほか安定しません。
サーボの性能の割にアームが長すぎるのか一旦不安定になるとケイレンが始まりだんだんそれが大きくなってしまいました。
しかたなくアームをバラして自由度を減らして短く組み直していたときに何となく「足」が組めそうな気がしてしまったのです。

まさに繋げただけなのですがこれが自力で歩いたら楽しそうです。
というわけでここから2足の世界に文字通り「足」を踏み込みました。

路線変更が決定したので追加で作らなければならない部品の検討から始めます。
板金では「足裏」とコントロールボードを実装する「胴体の板」が必要になります。
またコントロールボードを実装するにはロボット台車のものでは大きすぎるので、小型の47mm*72mmのユニバーサル基板サイズで作成します。
電源もロボット台車の単3*4本+9Vの角電池では搭載できないので検討が必要です。
 
板金と基板を仮配置した状態です。

コントロールボードは実装面積が限られるのでCPUには40ピンの16F877は諦め、慣れた16F628を採用します。(写真の左上のチップ)

真中の縦になっている18ピンはサーボドライバの16F84A(これはロボット台車より流用)、真中の上の8ピンはモーション記録用のシリアルEEP-ROM、右のはRS-232C通信用のレベルコンバータです。
レベルコンバータに必要な4個のセラミックコンデンサは実装面積の節約のためにICソケットの内側に配置しています。
また両端の下の方に見えるのはFETでサーボの電源をソフトでON、OFF出来ないかと思って搭載しましたが、実際は容量不足になってしまって使っていません。

電源は悩んだ挙句、単4*5本+単4*4本にしました。
つまり動力に5本、制御用に4本という構成です。
006Pが1個よりも単4が4本の方が体積的にも容量的にも有利な気がしたので。
というわけでニッケル水素の単4を使用するわけですが、電池ホルダーを使っていてはかさばるだけなので、ひとまとめにパックします。
しかし動力用と制御用で別々にパックしていては、またかさばるので俵積みにしてまとめてみました。
  
パックの保護チューブにはペットボトルのラベルを使用しています。

これでほぼハード面で動かす準備は出来ました。

試運転

とりあえずパソコンとシリアルポートで接続し、連続的に細かくサーボの位置を指定して無理やり動かしてみます。
(この時点ではサーボのスピード調整機能が無く、指定した位置にフルスピードで移動することしか出来ないので一度に大きく動かすと反動で倒れてしまうのです。そこで「屈伸」では20ステップほど位置指定をしてチマチマ動かしています。)

「屈伸」(262KB mpeg1)

このままではらちがあかないのでサーボの速度を制御できるようにプログラムを改良しました。(スピードは固定で低速で駆動できるようになっただけですが。)
これによりついに第1歩を踏み出しました。(1歩あたり5ステップくらいでいけます。)

「静歩行」(398KB mpeg1)

不恰好といえば不恰好ですが私にとっては感動的な一瞬でした。
歩くことがわかったのでいろんなモーションが作れるようにパソコン側のソフトも改良しました。

(画像をクリックすると拡大します)
ロボットの絵は3DCADから転用しています。
これを使用して歩行をもう少しカッコよくしてみました。

「静歩行その2」(232KB mpeg1)

無線化

シリアルポート経由の有線で位置指定していては自力で歩いているとはいえません。
やはり無線化が1つのポイントになります。
無線は実績のある赤外線を使用します。
ロボット側は適当な位置に赤外線受光機を付ければ終わりですが、赤外線送信機は作らねばなりませんが、以前作ったDigiQコマンダーがゲームパッドサイズで液晶つきの赤外線送信機なので流用することにします。

しかし2つ問題が残ります。
1つ目はどうやってモーションを選択するか。
2つ目はどうやってデータを送信するか。
モーションデータはシリアルEEP-ROMに収めてあるので、モーションの収めてあるアドレスを直接送信することにします。
送信方法はもともとがDigiQなのでDigiQ式に送信してしまうことにします。
といってもDigiQは左右のモーターを15bit+15bit (ID 2bit+Rモータ6bit+ Lモータ6bit+チェックサム1bit=15bitでした)で送信しているのでそのままでは無理があります。
「1」と「0」を送信する方法だけ流用し、コンピュータで扱いやすい8bit単位で通信することとし、送信するときは「R(runの略)」「アドレスの上位8bit」「S(startの略)」の8bit*3、つまり3バイトを連続で送ります。
ロボット側は「S」コマンドを受けたときに指定アドレスのモーションを再生します。
また簡易的なエラーチェックとして、同じコマンドを複数回連続して受け取ったときのみスタートするようにしています。
単純ではありますがこれで無線化は完成です。

更なる改良

まずバッテリーがゴムバンドで縛り付けているだけだったのでホルダーを板金で製作。
コントロールボードも剥き出しでは危険なのでガードを製作。
それから歩行にいまいち安定感がないので足裏を大型化(前後方向に1.5倍)してしまいました。
足裏の大型化はやはり効果抜群でこんなことが出来るようになりました。

「仰向けからの起き上がり」(174KB mpeg1)


「うつ伏せからの起き上がり」(328KB mpeg1)
たった6個のサーボでもここまでできるんだと自分ながら再認識させられました。
とはいえやはり足を横にしての歩行はあまりカッコよいものではないので、いずれサーボを追加し、より自然な歩行を目指したいところです。