制御ソフトの変更
今までは「常に足は地面と平行」と言う条件をつけて制御していましたが、この条件を
少し変えて、ある位置よりも足を前に出したときはかかとを、後ろに下げたときはつま先を
位置計算の基準とするように制御ソフトを変更しました。
まだ歩行パターンには取り入れてませんが、計算上は1歩の歩幅をより大きく取れ、見た感じも
自然になります。(ホントになるかどうかはまだ分かりませんが・・・)
v3の時も試したのですが、関節の可動範囲と比較し足が大きすぎたので、 バランスのいい場所にかかとを接地できずに使えませんでした。v5はこの点に 留意して足の大きさと関節可動範囲を設計してあります。
タッチセンサーについては、設計段階でハッキリ検討していなかったので、いかにも取って付けた 様な、違和感のある見栄えになってしまいました。ちょっと残念です。
回路は下図のようになっています。抵抗とバッファはH8マザーボードに載っています。
また、動作波形再生の1サイクルに1回(約30Hz)しか読み込まないので
チャタリング防止回路は付けませんでした。
らくがきブロック図(37 Kbyte/jpeg)
これまでは、ロボットにCPUが載っていないケースも想定した機器構成でしたが、
考え方を変えて、「ロボットは幾つかのCPUを持っていて多少の通信機能もある」
という様に考えた機器構成に変えることにしました。
取りあえずは3個のCPUを使い、役割分担は逆運動学の計算や画像処理のような、
重い処理用(当面はPC)、
サーボ制御信号生成用(H8/3048)、その他I/O用(H8/3048)に分ける事としました。
そんなわけで先ずサーボコントローラー7から作り始めました。基板上部の20Pコネクタは
PCのパラレルポートにダイレクトに接続し、その隣のUSBのコネクタはシリアルポートに
接続します。安くて小さいのでUSBコネクタをRS232用に付けました。H8/3048にプログラム
をロードするために使います。
写真はコネクタとIC類を並べ終わったところで、配線はまだです。2L1v5の背中の
基板と入れ替えて使います。
高速化をきちんと追求しようかとも思いましたが、現状0.75Kbyte/secで何とか動いているし、 100baseの通信機器が一般化している現在、このレベルでこだわってもなんだか寂しいし 、5倍近く早くなれば十分と言う気もするし・・・そんなで、後少しチューニングし、OKとする事 としました。
以上のテストで配線、コントローラ<−−>PC方向の通信アルゴリズム、ノイズの入り具合 を見ました。
メーカー:フタバ 型式:FM 40MHz帯 型名:T4VF チャンネル数:4 購入価格:\4800 (クリスタル別売り\1000) 購入先:仙台の 石井模型 |
|
メーカー:GWS 型式:FM 40MHz帯 型名:GWR-4P チャンネル数:4 重量:5.4g 購入価格:\4050 (クリスタル付き) 購入先:秋葉原の フタバ産業 |
とりあえずサーボを4個つないで動かしてみました。赤と緑のLEDは動作確認用です。 その上にある3個の2SC945はジャイロの信号レベル変換用トランジスタです。 |
次に、ADXL202を接続しました。以前は約3mのフラットケーブル越しにパルスを受けていたので、 パルスの長さが、数パーセント程度、常に動いていましたが、マイコンとセンサーの距離が10cm 程度に近くなったので、この現象は無くなりました。
ここまででサーボコントローラー5を使っていたときに付いていたセンサーが揃い、基本的な 通信プログラムも出来てきたので、歩行用のプログラムをかけて、通信エラーに対応する カラクリを組み込もうと考えています。
今のところPC側のプログラムは、ロボットに直接アクセスする関数を新規に作り、その上の レベルのセンサーやモーターへの入出力の意味を持つ関数は、名前も、引数も同じまま、 新しい直接アクセス関数を呼ぶように中を変更し、歩行制御の関数は変更無しになっています。
波形再生のサブルーチンと横歩きの制御波形データは、ジャイロのフィードバックを 含めても、多分H8の内蔵RAM(4Kbyte)に収まると思うので、通信のロス無しでどの程度 動くのか試してみようと思いました。
足の修理
なんだか動きがおかしいと思ったら、「00.08.29」の日誌の内容と同じ股関節
が壊れました。接着面を見てみると、半分ほどしか着いていませんでした。
前回の修理は少々手抜きだったので、今日は接着剤の粘性をキチンと調節し、
下地の処理も行って接着しました。その上にボルト止めしたので、前より
だいぶ良くなったと思います。
通常、構造強度のバランスが悪い場合、ある場所を強化すると、次に弱い場所が壊れるので、
様子を見てみます。
ボルトの重さもばかにならないし、壊れたところで、別段どうと言うことはないので、
とりあえずは、右脚の同じ場所は放っておきました。
関節のガタ対策
2L1v2の時に付けていた様な、輪ゴムを復活し、サーボの出力軸のガタの影響を
少なくできないかトライしてみることにしました。
v2とv5は大分構造が違うので、輪ゴムのかけ方をいろいろ工夫してみようと思います。
圧電ブザーと赤外線リモコン受信モジュール
パソコンから切り離して動かす場合の、マン・マシンインターフェイス(おおげさ)
として「圧電ブザー」と「赤外線リモコン受信モジュール」を足しました。
動作のスタート等はラジコンで行おうかと考えていましたが、机の上でテストする時
には、赤外線リモコンの方が便利がいいので、とりあえず載せました。
リモコンのデコードを行わず、ただON/OFFに使うだけでしたら、テレビのリモコンでも、
エアコンのリモコンでも何でも良いので、手近な物がどれでも使えて便利です。
要目変更
機器構成が変わり、それに伴って要目も変わりましたので、記録のために古い要目
をここに置いておきます。トップページの要目は変更済みです。
全高 | 405mm |
全長 | 217mm |
全幅 | 140mm |
本体の重量 | 1240g(CPU含まず、モーター用バッテリー含む) |
モーター |
RC用サーボモーター |
電源 | ニッケル水素電池 |
センサー |
3軸角速度センサー(RC用 圧電振動ジャイロ) (メーカー:GWS 機種:PG-03 個数:3) 2軸加速度センサー (メーカー:アナログデバイセズ 型式:ADXL202 個数:1) 足のタッチセンサー (マイクロスイッチ 個数:4) |
CPU |
Win98 PC(運動の制御用) H8/3048F(サーボコントローラー用) PIC16C84-4(加速度センサー読み取り用) |
加速度センサーの動作確認
まっすぐ立っている状態と、数度程度、いろいろな方向に傾けた状態で、入力値の変化を見ました。
サーボコントローラー5では、転倒の判定に使える程度の感度でしたが、今度は「歩行の途中で
何とか踏み留まってはいるものの、次の一歩で倒れそうに傾いている」状態も分かりそうでした。
立っている場所の傾斜を、動作波形にフィードバックさせられるか、トライしようと思います。
足の拡大
v3でサーボを壊した経験から足を小さめに作っていましたが、3番サーボの位置保持力の不足と
出力軸のガタの多さを補うため、7×4cmから9×4cmに拡大しました。また、足の裏に
張っているゴムを、発泡ゴムから、パッキンなどに使う1mm厚のゴムシートに変えてみました。
どちらの方が、安定しやすいか差を見てみます。
サーボの破損対策の1つとして、転倒したらサーボの制御信号を止めることによって、
サーボの位置保持を止める「脱力モード」を付けようと考えています。
(転倒の判定がなかなかうまく行かないので、転倒判定が出来るようになった後の話になります)
1歩毎に遊脚が何秒地面を離れていたか計測し、左右に揺らす振幅を変えることで、 ある程度床の傾斜を吸収できました。前後方向はマイクロスイッチのつま先とかかとのどちらが 先に接地したかで重心位置を前後に調節してみましたが、いつも行き過ぎで、うまく行きませんでした。
トラ技1999年12月号で電池特集を読み、その後、デジカメの電池を手に取るたびに 「これ使ロボットに使いたい」と思っていましたが、内蔵電源にする必然性が低かったので 先送りになっていました。しかし、最近CPUを内蔵し、PC無しでも動く (注:「歩く」ではありません)環境が出来たことと、移動距離が長くなるに従い、 ロボットの近くに置いた電池ボックスが邪魔になってきたことと合わせて、容量が大きくて 軽いLi-ion電池を載せることにしました。
電池接続のアダプターは、普段ホームページ作成に使っているデジカメ用でSONY製の NP-F330(5Wh / 約700mAh)とNP-F550(10.8Wh / 約1500mAh)が使える形に作りました。 元々NP-F330がデジカメについていたので、ロボット用に同じものをと思い買いに行くと、 同等品としてNP-F550を出されました。容量が倍になっていたので驚きました。
ADXL202のデューティーサイクルの周期が1msec、サーボコントローラー7の
H8のタイマーのクロックが2MHz。とすると読みの2(1μsec)に対応する加速度は
0.008g(デューティー比50%付近の場合)となり、傾斜に直すと約0.46度になります。
と、こんな風に考えてみて、センサーのデータシートに書いてあること、計算、そして
ロボットの動きがつじつまが合うようなので、まあ、性能が出ていると結論しました。
加速度センサーテストのムービー(344 Kbyte/mpeg)
ヒザの屈伸動作のうちで、曲げたときと伸ばしたときに、水平を探すサブルーチンが
かかっています。
プリテンションゴム 1、2、3番関節にプリテンション用のゴムをかけました。基本的な考え方はv2の物 と同じで、軸のガタ(サーボのバックラッシュ)対策を目的としています。
ゴムのかけ方の方針としては、以下があります。 (脚の自重が支えられる程度の張力です) |
踏み出す前の初期状態を一定にする意味である程度効果があるように見えましたが脚が地面を
離れたときに、本来の目標角度になってしまい、接地の時にバランスを崩すケースが多く
なりました。
この件に関しては、体重を支えているときと、いないときの関係が一定ならば対処出来ると
考え、一度体を前に傾けてから、引き起こす様にしてみました。これにより、歩行のインターバルが
だいぶ長くなってしまいましたが、各サイクル間のばらつきがだいぶ減りました。
歩行プログラムの重さ
上のムービーでは
一歩のアクションの軌道分割数は24で、データの出力間隔は約0.037037秒になっています。
「あわよくば、H8/30481個で多少なりとも自律歩行させたいと」考えていましたが、
プログラムを書き進めるに従い、歩きながらの計算が重くなってきたため
「やっぱり1個では無理かな?」という感じがだんだんしてきました。
モーターの出力
力加減が出来れば、今付けているサーボモーターでも、絶対的なトルクそのものは歩くのに
十分かもしれないと思いました。
今後の方針
これ以上重くしたら歩けなくなると言う気がするので、腕を付けたり、CPUを増やして
自律歩行させたりという件に関しては、2L1ではあきらめた方がいいのかもしれないと
思いました。2L1の今後としては
目先を変えて、他のロボットで別方向から技術力アップを図った後に再度トライするならば
PGー03とADXL202の入力
胴体の傾斜調整をした後に踏み出したときの入力です。
サーボコントローラー7がコマンドを落としたとき、サーボコントローラー7とPCの両方が
読み込みモードになるときがあります。この時は255が返ってくるので、255はニュートラル
の数値に読み替えています。このグラフを見ると、サーボコントローラー5でとったデータと比べて
やけにジャイロの信号がフラットです。
なんだか怪しい・・・もしかして、ほとんど読めていないのかも・・・
もしくは
サーボコントローラー5でのジャイロの読みが狂っていたのか。機会を見て調べようと思います。
3個搭載しているはずのジャイロのプロットが2軸分しかないのは、ヨー軸のジャイロを 使っていないためです。当面の制御には必要ないと感じているため、通信時間短縮を目的として 、読み出しを止めてしまいました。
と言う方針で進めてきましたが、RCサーボの比例制御から来る誤差を (サーボ剛性?が足りない状態の事を何と表現しましょう?)力自体のフィードバック無しには 補正しきれないと感じてきたので、2L1v5の製作は当面ここまでとして、 結果をまとめながら、要素技術(2L1も2足歩行専門の実験機ですが)の実験をする 別の機体を作ることにしました。
目と手(腕)が付いた移動ロボットで、視覚と力の制御をメインテーマにしようかと思っています。 とは言っても実際に製作するハードは、W1〜5までの流れに沿った「楽しい工作」ベースの 簡単なロボットにする予定です。(2L1も気が向いたら再開しようと思っています。)
また、各関節のプリテンション発生のため、輪ゴムを使ってきましたが、輪ゴムはかけておいた 時間等によって発生する張力が刻々と変わります。よって電源と同様、ロボットの特性を一定 に保つという観点から言うと、あまり良いメカニズムとは言えないと思いました。
機械的に一定の張力を保つことは、高くつきそうな気がしますが、電源の安定化の方は それほど費用がかからないと思いますので、機会を見て電源を安定化しようと思いました。
パワーアップ
ROBO-ONEでしくみや大きさが比較的近い2足歩行ロボットの動いている様子を見て
「4L1の操縦があまり面白くなかったので2L1のラジコン化はやめようか」
という気が変わり、「静歩行でも遊べるかも」と思うようになりました。また、
同クラスの2足歩行ロボットの電源まわり、歩き方、倒れ方、壊れ方等々多くの
情報を得ることが出来たので、上記破損の修理で足首を作り直すついでに、
デジタルサーボやハイトルクタイプのサーボを使って
静歩行が出来る程度にパワーアップしてみることにしました。
換えるサーボは1番をERG-VB(13kg・cm, 0.10sec)、2番をERG-VR(8.0kg・cm, 0.07sec)、
3番をSRM-1322Z(3.6kg・cm, 0.17sec)、4番をERG-WR(8.0kg・cm, 0.07sec)としました。
(全てサンワのサーボで、ERG-WRのみデジタルサーボです)
2L1v5に小改造で付けられるサーボを試すという意味で、全関節に違う機種の
サーボを付けてみます。足首のピッチ方向のサーボ(3番)は、取付位置の都合で
そのままではハイトルクタイプを付けられないため、軸受けにベアリングが入っている、
SXー101Zとほ同寸法のサーボにしました。
足首へのベアリング取付
「ミニチュアベアリングは高価」という印象を子供の頃に持っていたので、
いままで自作ロボットの軸受けには使ったことがありませんでしたが、
東急ハンズ渋谷店で丁度良いサイズのベアリングを見つけたので、
足首のピッチ側の軸受けに付けてみました。
関節でのパワーロスが減る分、すこし駆動力がアップすることを
期待しています。
型式はMR63ZZです。売場でメーカー名を見かけませんでしたが、
多分NSK(日本精工)製だと思います。内径が3mm、外形が6mmの
ミニチュアベアリングで、1個380円でした。
その他の関節も、前回の書き込み内容に沿ってパワーアップを図りました。 定価\15000クラスのRCサーボは、SX-101Zと比較して、 サーボの軸受けのガタが少なく、標準で付いてくるサーボホーンの剛性も 高いので、ロボット全体が目に見えてしっかりした感じになりました。
動力系電源の変更
以下の理由から、しばらくの期間、動力用の電源を外部のスイッチングレギュレーターから
取るように変えることとしました。
名前の変更
大きな改造が完了したのでバージョン番号を1つ進め、名前を「2L1v6」に変えます。
v5では、サーボのトルクが足りないので、この調整を突き詰めていっても仕方がないと 思っていましたが、パワーアップを図ったので、改めて調整してみようと思いました。
いままでは、歩くときに「腰の高さを一定に保つ」「胴体はいつも水平」という条件を 付けて歩行パターンを作っていましたが、歩幅をより大きくとるため、これらの条件は 廃止しようかと考えています。
サーボホーンの交換
3番サーボのサーボホーンを、剛性が高いタイプのものと交換しました。
また、サーボロッドも真鍮のネジ棒から鉄製のものと交換しました。
以前は剛性が低く、軸のガタが多くても、加速度と角速度のフィードバックで 何とかなるのでは?と思っていましたが、力に関するフィードバック 無しには上手くゆかないようなので、先日実施した、サーボのタイプ変更も含め、 剛性を高め、足先の位置制御を正確にする方向で改造することにしました。
衝撃吸収パッドの追加
転んだとき、地面とぶつかる部分に衝撃を和らげるための「衝撃吸収パッド」を追加中です。
以前足の裏に張っていた、5mm厚のスポンジゴムを使いました。
重量の増加
主に、サーボがプラスチックギアのタイプから、金属ギアのタイプに変わった事の
影響で1450g−−>1630gに増えました。
関節のベアリング
4番関節(足首のピッチ軸)で特に問題がないようなので、新たにMR63ZZを20個
買いました。機械的ロスを減らすことにより若干のパワーアップを図る予定です。
東急ハンズ渋谷店のB1階で買いました。買いに行った日は在庫がなかったので、入荷したら
送ってもらえるように、カウンターで品代と送料を払って帰りました。欲しいものが正確に
言えれば、電話で注文して、代引きで受け取る事も出来るそうです。
(店員さんが対応してくれるので、平日の開店直後なら電話対応が出来る確率が高い
とのことでした。)
背中のカバーの新製作
転倒防止索を外して、床の上を歩かせるため、背中に内蔵している基板保護用の
カバーを新しく製作しました。
これにより、後ろ向きに転倒したとき、ドーターボードの一部が地面とあたり
折れる心配がなくなりました。
加えて、仰向けに地面に置けるようになったので、取り扱いが少し便利になりました。
腕の設計
足まわりの制御と、その他の部分の制御の関連させ方を試すために、
腕をここ数ヶ月の間、検討中です。以下の図はそれら検討案の1つです。
(とりあえずは自由度2もしくは3のを作るつもりです。)
各関節のトルク配分を変えての歩行試験など、一区切り実験が済んでいるので、しばらく 全体システムを使った試験はおいておいて、通信プログラムや、 今は1パターンしかない加減速プロファイル生成ルーチンを加えるなどの基本的な 製作をしようかと思います。
新しいPCへの移行
WinXPマシン(エプソンダイレクトのBN100)
の購入に伴い、従来パラレルポートからinpやoutpを使って
ロボットと通信する方法が使えなくなるので、Windowsのドライバをきちんと経由して
シリアル通信するように変えようかと思っていましたが、結局
WinXPの不調のため、Win98を入れてしまったので、しばらく今の路線を
保持することにしました。
最新のハードですが、既存の開発環境、周辺機器、自作ロボット等今まで
チェックした限りでは使えています。
そこで昨年の春以来、死蔵されていたH8/3067ボードを出し、うまく使えないか検討を はじめました。今ちょっと考えたところでは、背中のH8/3048のボードとシリアル で結び、H8/3067の外付けRAM(32kbyte)に制御波形データを持たせるようにしようかと思っています。
H8/3067ボードといえば、 私はアセンブラには 不慣れなので、日立のHPからモニタのソースコードをダウンロードし、多少 調節して使える様にするのに苦労しましたが、 秋月のHPを見たところ、モニタがキットに付属に変わっていますね。 これでこのキットも買いやすくなるのではないかと思いました。
全高 | 415mm |
全長 | 217mm |
全幅 | 140mm |
本体の重量 | 1450g |
合計自由度 | 12 |
モーター |
RC用サーボモーター (メーカー:双葉 機種:FP-S9303 個数:2) |
電源 |
ニッケル水素電池 (4.8V 1500mAh / 動力系統) リチウムイオン電池 (7.2V 1500mAh / 制御系統) |
センサー |
3軸角速度センサー(RC用 圧電振動ジャイロ) (メーカー:GWS 機種:PG-03 個数:3) 2軸加速度センサー (メーカー:アナログデバイセズ 型式:ADXL202 個数:1) 足のタッチセンサー (マイクロスイッチ 個数:4) |
CPU |
Win98 PC(Celeron 500MHz) H8/3048F(16MHz) |
サーボモーター
サーボモータの概略仕様と使用場所は以下の様になっています。厳密な設計計算の
基に各機種を選定したわけではなく、予算とストックの都合で適当に選びました。
機種 | トルク(kg・cm) | 速度(s/60度) | 重量(g) | 使用場所 | 説明 |
SRMー1301 (SX-101Z) |
3.3 | 0.18 | 45 | 股以外 | 汎用 |
FP-S9303 | 7.2 | 0.19 | 64.5 | 股(左右方向) | 大型オフロードカー用 |
主なv5以前からの変更点
開発のテーマ
ボードの名前
キーボードから1文字入れると2文字帰ってくる現象が起きました。 原因はわかりませんが、規則性があるのでそのままにしておくこととします。 (H8/3048Fでは起きなかったので、シリアル通信用バッファの構造の違いか何かからくるのでしょう。)
RC受信機とRCサーボの方は、特に問題なく動きました。