2足歩行ロボット(2L2)の製作日誌
製作の区切りごとに、古い物から新しい物の順に書いてあります。
03.01.12
有線テスト用スイッチの追加
ROBOO−ONE会場で無線もPCも使わずに歩行テストが出来るように
有線のリモコンボックスを接続しました。リモコンボックスは97年ころ
車両型ロボットW4のテスト用に製作したものが(ジャンクボックスの底に)
残っていたので、これを流用しました。トグルスイッチを1つ接続しただけなので、
テスト出来るのは前進・後進のみです。
接続先はサブCPUです。起動の時にこのスイッチをONにしておくと、RC受信機
の代わりにこちらのスイッチが読み取られ、以降メインCPUからRC受信機の
ステータスをリクエストされた時、サブCPUはRC受信機からの入力として
このスイッチの状態を返すようにサブCPUのソフトを変更しました。
テストコース
長い間机の上で、1点に転倒防止の糸をつけて歩行テストを行ってきて、不足を
感じていませんでしたが、最近机が狭く感じています。毎日ごくわずかしか製作は
進まないので意識していませんでしたが、以前の記録を読み直していて、
2L1の始めのころ(ほとんどその場から
動かなかった)と比較するとかなり移動能力がアップしてきていることに気が付きました。
なにか使いやすくて邪魔にならない、転倒防止フックの保持方法を考えた方が良いと
思いました。
動作パターン
03.01.18
関節パラメーターの調整
ROM化の練習
内蔵マイコン用のプログラムのどこを、どう変えるとROM版になるのかを思い出すため、
一度プログラム(歩行パターンデータをソースに含む)をROM化してみました。
特に問題なく動きました。
メインCPU用ソフトの改善
ほぼ一定の時間(20msec)でまわる無限ループの中でRCサーボ用PWMパルスを作っていますが、
途中、時間のかかる処理を挟んだ時に、20msecでまわりきれない時があります。この場合は
PWMパルスが途切れることとなってしまいます。これは主にサブCPUとの通信を行う
時に発生し、当初は1〜2%程度ならパルスが抜けても、ロボットの固有振動数?からみて
十分無視できるだろうと思っていたのですが、どうやら歩行の安定を損なう原因となっているよう
です。(歩行パターンの切れ目でロボットがピクッとなる)そこで改善を試みてみました。
メインCPUからサブCPUにRC受信機の読み取り結果をリクエストし、サブCPU
からデータを受け取るまでの待ち時間が、パルスが欠ける主な原因のように思ったので、
リクエストと受け取り間での間にPWMパルス発生の処理を挟み、何もしないで待つ時間を
減らす様にしてみました。が、今のところうまくプログラムが動かず通信ロック状態で
ロボットが止まってしまいました。
どうやらアルゴリズムや通信タイミングの検討が足りないか、もしくはH8のシリアル通信用バッファや
フラグの動きを誤解している様です。
RC受信機データ通信フォーマットの変更
リクエストコマンド(1バイト)+データ(1chあたり8ビット/合計4バイト)の5バイト
でRC受信機データをサブCPUから受け取っていましたが、これを通信時間短縮のため
リクエストコマンド(1バイト)+データ(1chあたり2ビット/合計1バイト)に変更しました。
03.01.26
CPU間通信 待ち時間の短縮
プログラムを書きながら思うこと
6L1やそれ以前のロボットを製作していた頃は、アセンブラと、UVEPROM
やEEPROMなど、マイコンボードから外さないと書けないROMを使い、今ほど強力
でないパソコンでやっていました。それに比べれば、ずっと効率的になっている
とはいえ、PC用のプログラム開発に比べると、
ロボット搭載のマイコンについては、C言語のレベルでステップ実行しトレースする
様な環境を持っていないのでデバグの効率が良くありませせん。
何か安くていい方法は無いものかと思いました。
歩行テスト
いつもテストしている机以外の傾斜や摩擦の違う場所でテストしようと、部屋の外に持ち出し
何種類かのテーブルやPタイルの床等を歩かせてみました。やはり不安定で数回転倒しました。
転倒防止用のひもを手で持ちながら様子を見ていたのですが、油断してまともに倒してしま
いました。幸いどこも壊れておらず、調整も狂っていない様で2L1v6以降の改善の
成果?と思いました。しかし、次も壊れないとは限らないので、歩行の安定を増すため、
もう少し静的に安定な状態
が長い歩行パターンに変えると共に、歩行速度を下げました。
(計算値で約2.9m/分です。)
ROBO−ONE用の足
やはり前回のように、いきなりコケて壊れるとつまらないので、手っ取り早く安定を増すため、
一回り大きな足を用意しました。ちなみにムービーに映っている足は90mm×60mmの長方形
からかかと側の角を落としたもので、新しい足は110mm×60mmの長方形からかかと側の
角を落としたものです。足を前後方向に10mmずつ伸ばした形です。
03.01.26
第3回ROBO−ONEへの参加
行ってきました。結果は予選25位(16位までが決勝進出)で好成績と
いうわけではありませんが、デモの2分の間
いつものとおりに動いてよかったです。予選の日は控え室が大混雑だったことと
、控え室のモニターに競技の中継がされていなかったことのため、多くを見逃してしまい
残念でした。反対に決勝の日は混雑と中継が改善されたので大いに楽しめました。
競技では新しい試みを幾つか見かけ、また新しい遊び方を見た気がしました。
03.02.16
プログラムの改善
SCB8のプログラム(操縦用)は4L1のプログラムを行き当たりばったりに
拡張してきたものなので
小さなプログラムとはいえ、だんだんと見通しが悪くなってきました。
そこで、main関数内で機能的にまとまりのある
部分を関数として外に出したり、変数を引数として扱いやすいように構造体にまとめたり
といった作業をしました。
サーボコントローラー7のCPUアップグレード
03.02.23
歩行パターンデータの密度変更
歩行速度を例えば16m/分にしようとした場合、1歩の歩幅を70mmとすると
1分間に 16m * 1000 / 70mm = 228.57 歩 歩くことになります。
そして1歩あたりの時間は 60秒 / 228.57歩 = 0.263秒になります。
今までの2L2v1はRCサーボのPWMパルスを1秒間に50回生成し、その2回に1回
の割合で足先の指定位置を変えていました。(メモリー節約のためデータを間引いていました)
よってデータを 1 / 25 = 0.04秒に1回ずつ
変えていたことになります。
このままのデータの密度では 0.263 / 0.04=6.575となり、軌道の分割が
粗過ぎると思いました。そこで、目標に近づけるための手軽な第1歩としてPWMパルス1回毎に
指定位置を変えるように変更しました。
いままでも25個のデータそれぞれの中間では、線形補間を行っていましたが、
データの密度を上げたことにより、モーターの駆動音ではっきり分かるほど動きが
スムーズになりました。
今後RCサーボのPWMパルスの周期が一つの壁になりそうだと感じました。
03.03.02
歩行パターンの作成
今までは、足の付け根(仮重心として設定している計算の基準点)
がジグザグに進むような、直線から構成される軌道を
使っていましたが、新しくcos関数から作った曲線軌道を試してみました。
多少なりともスムーズに歩くような改善をもくろみましたが、今日のところは、
かえって不安定になりました。なかなかうまくいかないものです。
RCサーボ「サンワ SX-101Z」のテスト
RCジャイロの信号測定のついでに、SX−101Zの入力周波数をどこまで上げられるのか
試してみました。「使える」かどうかはさておき、50Hz、100Hz、150Hzと
上げていったところそれらしく動いていました。手で負荷をかけてみた感じでは、保持トルクは
上昇傾向でした。
03.03.09
歩行パターンの調整
先週作った歩行パターンで、体を揺らす周期と振幅を動かして様子を見ながら調整しました。
まあ、感触としては歩行速度アップに効果がありそうだと思いました。
第4回ROBO-ONEのルール
公式HPにアナウンスがありました。
2L2の場合、シーケンス再生機能を足すだけでOKみたいなので、
ソフトを少し直せば出られそうです。また、日程も2日間
の様なので、ロボットを持って遊びに行こうかと思いました。
03.03.16
SCB8に関する検討
03.03.23
電源関連テスト
主にひざ関節の定常偏差を一定にすることを目的として、動力系にステップダウン
DC-DCコンバーター(TRACO POWER製 TSI-5.0S4ROP、RSコンポーネンツから購入)を
入れてみました。そのついでに、
制御系用と動力系用に分かれていた
電池を一つにまとめてみました。
結果はいつも使っているSONY NP-F550(7.2V 10.8Wh)では、マイコンの起動が完了しPWMパルスが出ている状態で
動力系統のスイッチを入れた瞬間にNP-F550の過電流保護回路が働きロボットが止まりました。
次にSONY NP-F730(7.2V 19.4Wh)で試したところ歩かせることが出来ました。
(実際のところ電圧が変わって、重心も変わっているのに歩行パターンを直していないため
すぐに転びますが・・・)
ちなみに2L1v6の時に計測した消費電流は歩行時2.2A程度でした。たぶん2L2v1も
似たようなものだと思います。
製作中のスナップ。
はみ出しているものがDC-DCコンバーターです。
重量は少し増えて1870gになりましたが、電圧が6Vから5Vに下がったので、「弱った」様に
見えました。何か問題が出ないかどうかしばらく様子を見ようと思いました。
03.10.11
半年ぶりの起動
W6が一区切りつき、W6のNo.2サブCPUのプログラムが形になったので、2L2v1にも
同タイプのプログラムを導入しようと、半年ぶりに起動しました。(03.03.16の日誌の続きです。)
現在1つしか手元に無いステップダウンDC-DCコンバーターをW6から2L2に積み替え、
足も対角線長さで約100mmの、小さめのものに戻しました。足を戻すついでに、買ったけれど
付けていなかったベアリングを足首のロール軸に埋め込みました。
腕はW6に行ってしまっているので、無い状態です。この状態で数回試しに歩かせながら、
歩行サイクル等を調整し、ひとまず倒れないで歩ける歩行動作データを作っておきました。
腕用RCサーボの接続先変更
RCサーボの接続先については、周期的な動作が必要なものと、必要無いものという考え方で、
脚用をメインCPU、腕用をサブCPUに分けていましたが、プログラムの取り扱い易さが
今ひとつだと感じていたので、考え方を変え、
20msec周期のループに含ませるものをメインCPUへ、そうでないものをサブCPUへ、
という考えにより、腕用サーボの接続先をメインCPUに変更しました。
圧電ブザーの再搭載
2L1v5で一時期載せていて、その後外していた圧電ブザーをまた載せました。
接続先はサブCPUで、制御用のプログラムはW6から移植しました。
今は電源投入時にPCのように鳴ります。メインCPUからのコマンドでも鳴らせるように
しました。ちょっとしたモニタ用に便利です。
03.10.18
SCB8(ロボット内臓のマイコンボード)の改造
腕用RCサーボの接続先をメインCPUに変更するため、まず回路図を書き換えてから、
それに合わせて配線を変えました。SCB8をW6に載せることはもう無いので、W6と
2L2でこのボードを共用していたときに、W6だけが使っていた部分の配線を撤去しました。
足の大きさ
第5回ROBO-ONEのルールに新しい足の大きさの規定が出ていました。要約すると
「脚の長さの0.7以下」とのことです。2L2でこの比率がいくらか測ってみました。
2L2の脚長は226mm、足の対角線寸法は101mmなので 、
約0.45でした。まだ余裕があるなと思いました。
関節の原点調整
RCサーボの位置データを16ビットに変えたことにより、PWMパルスの可変幅と分解能が
変わりました。(RCサーボの軸の可動角にして90度−>180度)これに合わせるため
各関節のサーボホーンの取り付け角度を調整しました。
03.10.25
RCサーボの交換
左足首のピッチ軸のRCサーボが、手で動かしてみると異様に抵抗が大きいことに気が付きました。
ちょっとギア側をあけて見たところ、ギアには異常は無さそうです。一応動いてはいるのですが
、これほど抵抗が大きいければ、だいぶパワーロスがありそうに思われます。そんな理由で
、異常なRCサーボ(S9303)は部品取り用に取っておき、とりあえず
新しい(といっても買ってから5年くらいたってますが・・・)同形式のRCサーボと交換しました。
今のところ異常の原因を詳細に調べていませんが、モーターのブラシに異常でもあるのでしょうか?
そのうち気が向いたら調べようと思います。
関節パラメータファイルの調整
先週に引き続き、足先座標の予定位置と実際の位置を近づけるため、関節パラメータファイルの
RCサーボに関係する部分のパラメータを調整しています。(脚の長さ等の骨格パラメータは
ロボットの構造に変更が無いので同じままです)
ちょっと歩行テスト
関節の稼動範囲が広がったので、歩幅を広め(100mm)にとって歩かせてみました。
小刻みに歩かせると「ヨチヨチ歩き」みたいに見えるので、「こっちのほうがカッコ良いかな」
と思いました。
ムービーのダウンロード
03.11.02
電源の容量
いま2L2はリチウムイオン電池 SONY NP-F730 (7.2V 19.4Wh) 1つで動かしています。
そして動力系はTSI-5.0S4ROPで5Vに安定化しています。以前から動力系で短絡等の
過負荷状態が生じたときに、電池とDC-DCコンバータのどちらの保護回路が先に働くのか
気になっていました。(SONYの電池は仕様が不明なので・・・)
わざとでは無いのですが、RCサーボのコネクタを触っているときに短絡させてしまいました。
そのときには、RCサーボの音が止まりましたが、マイコンにリセットはかかりませんでした。
そんなふうに、期せずしてNP-F730は少なくとも5V4Aまでは、瞬間的にはとれるのかと思いました。
(電池の保護回路よりも、DC-DCコンバータの保護回路の反応の方が断然早い
だけということかもしれませんが・・・)
プログラムの整理と「ロボコンマガジン踏み?」の検討
第5回ROBO−ONEの規定演技である「ロボコンマガジン踏み?」が、2L2に可能かどうか
考えながら、PC側の歩行パターンを計算するプログラムから、トライが済んだ部分を消すなどして
整理しました。
元々2L2は平地の歩行のみ考えて、リンクで増力する分RCサーボの必要パワーを下げ、その
結果関節の稼動範囲が狭くなるのは我慢する。という考えで作りました。
2L2の様な、オープンループ制御?のロボットが
段差を上るためには、足の長さ×2以上の歩幅で重心移動できる必要があると思っていますが、
2L2の脚でそれをするためには、もっと背を高くし、腰に関節を付けて上半身も重心移動に
参加させる必要がありそうだと思いました。
(つま先の先端だけで歩ける程のバランス制御ができればこの限りではないと思います)
03.11.09
歩行をより安定にするために
2003/10/25の歩行テストの時から考えていたことを少し書いてみます。
歩行パターン(足先の軌道)を計算する時、歩き始めにひざを少し曲げて腰を落とします。
素直に「幾何的計算から20mm腰をZ軸方向に移動」の足先軌道を計算して実際に動かしてみると、
下図に示すように、負荷に応じて少し深くひざが曲がり、重心が足首の関節の上から外れます。
すると、足首周りのモーメントが発生し、足首の関節も無負荷で動かした時と比較して
ひっくり返る方向に動きます。
黒:計算/灰色:実際
(図の中にはひざの影響だけ描きました。)
先日の歩行テストに使った歩行パターンは、ただ腰を落とすと重心が後退するので、
その分だけ前方向にも
腰を動かす様な軌道を使いました。たとえば「Z = -20mm, X = 10mm」といった感じです。
今まではずっとこういった感じで、腰もしくは足先の軌道に、荷重による各関節の定常偏差を
打ち消すようなオフセット値を加減して調節していました。この調節をしないならば、一回り
大きな「足」と一段と強力モーターが必要になるため、やらないよりは、やったほうが良いのですが
、歩行の各フェーズ(片足で立っているときと、両足で立っているとき等)で荷重が変化する
ことが考慮されていないため、体が揺れる一つの原因になっていたと考えられます。
動力系の電源がNi-Cd電池直結で安定化されていない時は、この定常偏差が電池の残量によって
常に変わるため有効な対策がとれないでいましたが、いまは動力系の電源も安定化したので
定常偏差が一定に近づいています。
そこで、今度は歩行の各フェーズでひざのRCサーボにかかる荷重を簡単なモデルで計算し、
歩行モーションデータ作成計算に盛り込んでみようかと思いました。今のところの感触では
ひざだけでも行えば、歩行の高速化を志向するときに、見てわかる効果が現れそうだと感じています。
04.02.15
胴体の設計
04.03.07
足先軌道生成サブルーチン
足先軌道の計算に使う、加減速パターンを一つ新しく作りました。
「指定の時刻に、指定の位置に、指定の速度で」接続するための加減速パターンです。
今までは「指定の時刻に、指定の位置に、速度ゼロで」
行く三角関数から作った加減速パターンと「等速」しかありませんでした。
で、試した結果がこれです。
(ビニールテープの間隔は、知能ロボコンのコースに合わせて床に張ったものなの
で、60cmです。)
歩いているのは、KRS2346ICSとイトーレーネツ製ブラケットで出来たロボットです。
見ると欲しくなるんですよねー。
(ちなみに、制御システムは2L2そのものです。)
04.03.14
バグフィックスとジャイロのゲイン調整
ピッチ軸のジャイロ入力をフィードバックする部分のバグ(一部の軸に、間違えて、ロール軸の
ジャイロの入力をかけてました・・・)を修正し、安定して歩くようにゲインも調節しました。
はじめの1歩で進路が少しそれる
ので、もう少しゆっくり加速した方が良さそうです。速度がのってからは安定しているので、
まだ歩行速度を上げられるかと思いましたが、モーターへの出力データをエクセルで
グラフ化して確認したところ、0.16秒/60度というカタログスペックのモーターの
速度を超えている部分がありました。ペースアップのためには、軌道の形を見直した方が
良さそうだと思いました。
いろんな場所を歩かせてみた感じ
おわり
戻る