毎日コミュニケーションズ刊 吉野耕司 著 「60日でできる!二足歩行ロボット自作入門」 で例として製作したロボット「Pen4」について、書籍の中での完成状態を起点とした 追加の製作や試行錯誤の記録を記した製作日誌です。
うまくいった試行については、製作記事のページとしてまとめる予定です。 新しい物から古い物の順で書いています。
右がこれまでの電源ユニットで左が今回作った電源ユニットです。小型・軽量化になりました。
RCサーボに供給する動力系にOKL-T/6-W12N-Cを使い、マイコン等に供給する制御系は、更新前の電源ユニットと
同じ3端子レギュレータ LM2940CT-5.0を使いました。
コンデンサはデータシートに載っていた回路図と同じにしたいところでしたが、コンデンサだけ通販すると 送料がもったいない気がしたので、別のDC-DCコンバータ様にストックしてあった10V 220μFのOS-CONを付けました。
ロボットを動かしてみた感じ、特に問題無さそうでした。DC-DCコンバータの出力が5V4Aから5V6Aにアップした せいか、若干モーターのトルクがアップして、膝サーボの定常偏差が少なくなったようでした。
このチップには設定できる項目がたくさんありますが、一通りマニュアルに目を通したのち、とりあえずCTRL_REG1=0x0Fを セットし、各軸の測定を有効にした他はデフォルトのまま行けそうろ判断したので、そのまま使ってみました。 特に気にした設定項目は、1秒間に何回測定が行われ、読み出し可能かと、測定のフルスケールでそれぞれ以下の通りとしました。
Digital output data rate: 95Hz(たぶんこれがサンプリングレートだろう・・・と思います。)
Full scale: +-250 dps(degree per second)
Digital output data rateは、制御サイクルの50Hzより速いからOKとしました。Full scaleは、更新前のPG-03に
使われているジャイロスター EN-03?(いくつか手元にあるPG-03のケースを開けてみたら、ジャイロの
種類がいくつかありました。ジャイロスターのバージョン違いみたいです。たぶん、型番はEN-03であっていると思います)
の測定レンジが+-300dpsなので、
それに近い+-250dps(デフォルト)としました。
マニュアルを見ると特に内蔵のローパスフィルタ&ハイパスフィルタ等、Pen4にもっと適した設定が出来そうな感じがするので、
おいおい試していこうと思っています。
こんな感じで制御ソフトに組み込んで、適当にフィードバックゲインを調整したところ、ちょっと歩かせた感じでは 以前と同じように安定化されて歩けました。
今日のところは配線まで終えたので、次はプログラムの変更をします。
測定は写真のように、ロボットはジョイパッドで無線操縦し、測定は別途用意したマイコンで行いました。
10kオームの抵抗とセンサで3.3Vを分圧し、mbedLPC1768のA/D入力で測定しました。
「ON/OFFが分かればよい」というスタンスで回路を組んだので、ノイズの事はとりあえず考えないでやりました。
今後測定の精度を上げたくなった時は、線をシールドするとか、適当なローパスフィルタを入れるとか標準的な対策を
しようと思っています。
サンプリングレートは、なんとなくRCサーボのPWMパルスの周波数と同じ、約50Hzにしてみました。下の
グラフが測定結果です。縦軸が電圧(V)、横軸は時間です。足が上がった時、すなわちセンサがスイッチOFF状態になり、
測定結果が電源電圧の3.3V近くになった状態をトリガとして、5秒間測定しました。
硬くて滑る床にて測定
柔らかくて滑らない床にて測定
こんな感じで硬い床(机の上)と柔らかい床(木目柄のビニールクッションシート)の両方共うまく 測定でしました。硬い床では1歩でだいたいピークが1つでした。柔らかい床は、少し前後に揺れながら 歩いていたことが現れて、1歩に複数回ピークが見えました。いい感じに取れたので、常時使えるように 装備する方向で考えようと思いました。
足裏が接地した時にセンサの中央が押されるように2mmのワッシャを
貼りつけました。スイッチトラベルは0.05mmですが、柔らかい床でも反応するように厚めのものを選びました。
また、その他の部分は高さ調節のため、3mmと2mmを重ねて貼りつけました。厚さはそれぞれ以下の通りです。
今日のところは、この足裏の状態で硬くて滑りやすい「机の上」と、柔らかくて滑らない「床の上」で歩行に支障ない 所まで確認しました。
基本的な確認が簡単にできればよいので、右手に針金で作ったフックを取付ました。
運んでみる対象は、ペットボトルのキャップに、フックと同じ針金で取っ手を付けたものです。
プラモデル用のスプレー缶の上に置いたキャップまで歩いて近づき、フックで持ち上げます。
フックに引っかけてあるキャップを、スプレー缶まで近づいて上に乗せます。
こんな感じで一応出来ました。上半身を大きく揺らしながら歩くので、フックに引っかけてあるものが 吹っ飛んでしまうのではないかと懸念しましたが、意外と平気でした。キャップのハンドリングに意外と 時間がかかっていますが、これについては、けっこう練習の影響が大きく出るな〜と感じました。 ちなみに、ムービーは2回ほど練習した後で撮影しました。
次はカメラからの映像をPCの画面で見ながら同じようなことをやってみて、どんな感じか見て、操縦 方法まで含めて、どういう機能があると効率よく操縦できるのか考えてみようかと思いました。
XYZの座標軸の原点は肩のロール軸のところで、方向は脚の計算に使っている座標軸とおなじです。
そして、ジョイパッドの操作は以下のようになっています。
今後の方向としては、例えば「そのまま手を伸ばしても届かない位置まで指示が動いた場合は自動的に一歩前に出る」といった 機能を実装してみようかと思っています。
両方特に問題無くコンパイルできました。Windows 7と8のカーネルが基本的に同じことを考慮すると、7,8共に32bit版でも64bit版でも OKの様です。
今日時点の最新版は、Windows8のタッチパネル機能や「アプリ」に対応した2012です。調べた所によると、Pen4号用の様なデスクトップ
アプリケーションを作る部分は2010と変わらないようなので、使えるでしょう。
ただ、Windows 8 でも2010は使えるので、本で使っている2005により操作性が近い2010をお勧めします。
いちおう可能でしたが、制御ソフトの改良の余地が大きいな〜と思いました。御覧の通り
床スペースが小さい部屋に住んでいて、テストコースも狭い一方、Pen4号は背の高さの
割に横幅が広いのでUNIにはあった「真横に歩ける機能」は復活した方が良い気がしました。
また、こうして具体的にコースを設定して誘導してみたところ、前回更新時に書いた「一歩だけ進む機能」 が意外と便利だったので、当面の間残すことにしました。
この辺りを補うため、更新したマイコンの計算パワーを生かし、操縦の途中、ロボット搭載マイコン で歩行モーションを生成しながら方向転換する機能を追加しました。
操縦操作としては、十字キーの左右を押している間、その場で方向を変え、キーの上を押したら足を 揃え、その後はその方向へ歩けるようになる・・・というものです。
特に問題無くうまくいったので、次は歩幅を任意に変えて一歩ずつ前後進できる機能を追加し「ちょうど手が届く位置 まで容易に移動・位置決めできる」様にする方向でいこうと思っていますが、次の悩みどころは「どういうジョイパッドの 操作で歩幅を指示するか」です。
また、ジョイパッドからの操作で腕を任意に動かす機能も作ってみようかな・・・とも思っています。
ハッチを閉じて動かすと、現状の首というか、頭というかが無い状態がさびしいので、何かそれっぽい飾りをつけようと思っています。
状態遷移図メモ
ジョイパッド(Xbox360用)とのコマンド対応表
「ボタンを押すと一歩だけ歩いて止まる」という機能も作ってみたのですが、特に専用の 機能が無くても一歩だけ進ませる操作に問題なかったので不要な機能でした。
最後に追加したモーションがおかしいものと思い詳細にチェックしましたが特におかしいことは 無かったので、範囲を広げて調べたところ13.05.19のところで作った、モーションデータ等を PCからロボットに送る通信プログラムで、データの取りこぼしのためモーションデータが欠けている のを見つけました。
通信プログラムは取りこぼしが起きないように改善済なので、再度全てのモーションデータを送りなおした ところスムーズに動くように直りました。
モーションそのものがスムーズに直ったところで、改めて旋回率の高いモーションを高速度撮影し、 様子を見てみました。
重心移動のタイミングについて、UniのままよりもPen4号用に適用したモーション生成クラスの改善 を反映した方が良さそうなので、その方向で調整を進める事にしました。
今日のところは、UniとPen4号の関節の構成の違いに関係するコードを機械的に修正しました。
元々、Pen4号のプログラムはUniのプログラムを清書したようなものなので、とくに考えなくても 今までのモーションときれいに馴染むはずなのですが、歩かせてみるとモーションの切り替え部分に、うまく つながっていないため「ビクッ」と動く部分があったので、来週以降ゆっくり見直そうと思いました。
使い方としては曲がりたい方向の足の軌跡をこれにすると、足が地面を離れる前に前に送り始める 形になるので、進路を変える事が出来ます。(どれくらい進路が変わるかは、同じ軌跡を使っても、 足と床との摩擦係数により変わります・・・)
その他、制御サイクルに収める対策の一つとしてXBeeのボーレートをデフォルトの9600bpsから57600bpsに変えてみました。 仕様の最高速度までまだ余裕があるためか、特に問題無く、ケーブルでつないでいる時並みに安定している感じでした。
特に初めの一歩と最後の一歩の計算を直し、ひじを曲げた状態で腕を振って歩くようにしました。
この後は、手で何かを押したり、両腕で抱えたり出来るようにするための細かい位置調整と、 歩行の経路を意図したとおりに辿れるようにする機能などを作ろうと思っています。
どこのタイミングで進路がそれるのかや、支持脚切り替え時に荷重条件が変わるため、膝関節の
定常偏差が変わり、少し腰が浮くところなどが実際に見る事が出来て面白いです。
細かい制御方法の調整結果確認に使えそうで良いと思いました。
今週は操縦システム(ジョイパッドの情報をXBee経由でロボットに伝える)のプログラミングでもしようと 思っていたのですが、うまく歩かない状態が気になるので、今の部屋の床で、とりあえず転ばずに歩く モーションをつくりつつ、ジャイロのフィードバックのゲインの値などを調整しました。
歩行モーション作成途中の動画
まだ動きが変なので、おいおい調整しようと思います。
その他、SDカードに記録してあるモーションデータのCSVファイルから、データを読み出しながら
スムーズに動くか(データの読み出し待ち時間のためにデータ更新サイクルが乱れないか)試してみました。
特に問題ありませんでした。
処理が間に合わないようならば、モーションデータのファイル形式をバイナリ形式にして、データ変換処理を
軽くしようかと考えていましたが、大丈夫でした。ファイル形式変更は、CPUの計算リソースを別の処理に多く
割り当てたくなった時にしようと思います。
次は、足先の軌道のみ前もって計算し、リアルタイムで逆運動学計算をしながら歩けるか試してみようと思います。
これが出来ると、加速度/角速度センサーなどの情報を、腰や足首等の1関節の動きにフィードバックするのではなく、
歩行モーション全体にフィードバックできるようになるので、歩行の安定をだいぶ高められるのではないかと思っています。
結果は比較的簡単に動きました。配列を256にすると暴走するので、まあ何とかメモリが足りたというところでしょうか?
モーションを一気に計算してみて、浮動少数点の数値計算が、WindowsXPの出始めの頃のパソコンよりも、むしろ速いくらいに感じました。
生成されたモーションデータのcsvファイルを、PCで計算したものと比較もしてみました。
RCサーボに出力する数値も完全に一致していたので、計算と中の桁落ちなども、Pen4を動かす程度ならば、気にしなくても良さそうです。
なかなかいい感じでした。
これで歩行モーションが作れるはずなので、pen4_vcで、足の位置を座標で指定して、各関節の角度から、
PWMパルスの幅を求める計算がうまく働くか確認しました。写真は右足を前に30mm、左足を後ろへ30mm動かす
様指示してみたところです。
特に問題なかったので、次は、これまでの自分のロボットではリソースの都合で出来なかった、歩行中に歩行のサイクルや スピードを変える機能を実装するため、どうするのがうまい方法か検討しました。
UNIで使っていた7.2V/700mAhのNiMH電池です。元はひと固まりでパックされていたものを、積み込むスペースの
都合で2分割して物干し竿用の熱収縮チューブでパックしなおしています。
最後に使ってから5年くらいたっていますが、充電できたのでとりあえず使ってみる事にしました。
電池と電源ユニットを取り付けたところです。(背中側から見ています)
RCサーボとジャイロが正常に動作しているか、動作確認しました。写真は
その途中で立たせてみたところです。
I/Oボード取り付けにあたっては、Pen4の元の位置では電源ユニットが入らなかったので、
背中側へ5mm動かしました。
ジャイロの機種を変更することも考えましたが、元々付いているGWS-PG03を追加できるよう、設計時から予めスペースをとってあり、 取付が楽なので、結局同じ機種のジャイロを追加しました。
XBeeの参考資料として購入したキット付きの本をだいたい読み終わったので、その他、Webで使用例なども
参考にしながら1:1通信用としてATモードで設定を行いました。
とっかかりの作業として、Pen4号から既存のマイコンボードを取り出し、PS2コントローラの受信機他、使わない物の 配線を外してフレーム内を綺麗にしました。そして、新しいマイコンボードの構成品を基板の上に仮付けしました。
というわけで、ここから先は本サイトの他のロボット同様、普通の工作の記録になります。