二足歩行ロボットを作る(8)
歩ける上限は70mmになった。使うのは30mmまでにした
肩の代償は 4mm、0mm、1mm と動いて「言えない」に落ちた。歩幅の上限は、押されたあと何歩見るかで決まった
この記事に出てくる数値・結論は、MuJoCo上のシミュレーションと計算で出したものです。実機はまだ1台も組んでいません。実物で測ったのは、届いた部品の重さと寸法だけです。
この連載は「専門家として正しさを保証する記事」ではなく、開発の実況記録です。うまくいかなかったことや、後から誤りだと分かったこともそのまま書いています。
前回の約束と、2か月の空白
前回の最後に、次からは「この設計が、買える部品で本当に成立するのか」という側に移ります、と書きました。約束したのは3つです。
| 前回の約束 | この回で |
|---|---|
| 載せていない上半身を載せたら、何が変わるのか | 前半(肩を載せた話) |
| 関節にどれだけの力が要るのか | 後半(買えるサーボの力にした話) |
| その力を出せるサーボが、実際に売っているのか |
そこから2か月あきました。その間にやったことを、2つに分けて書きます。
前半:肩を2軸にしたら歩幅がいくつ落ちるか。答えは 4mm → 0mm → 1mm と動いて、最後は「1mm より細かいことは言えない」に落ちました。
後半:買えるサーボの力にしたら、前の歩き方では 18mm まで落ちました。歩き方を替えたら 70mm まで歩けました。それでも使うのは 30mm までと決めました。
どちらも、答えを決めていたのは機体ではなく測り方でした。
肩を2軸にした代償は、4mmだった
脚だけだった機体に、胴と頭と腕を載せました。肩の関節が1つ(1軸)のものと、横に開く関節を足した2つ(2軸)のものを作って比べます。2軸にすると肩が重くなり、動く関節も1つ増えます。その分、歩ける歩幅がいくつ落ちるかを測りました。
物差しはこれまでと同じです。初めの骨盤の位置を少しずつずらした7条件で、200歩ずつ歩かせます。7条件とも倒れずに歩けた歩幅(7/7)のうち、いちばん大きいものを「上限歩幅」と呼びます。
最初に出た答えは「2軸の代償は歩幅4mm」でした。
ただ、このとき2つの機体を、同じ設定で測っていました。前の歩き方には、足を振る間の横の傾きを打ち消す補正の強さ(comp)というつまみがあります。その comp を、両方とも 1.0 に置いて比べていたのです。
当時の記録には、こう残っています。
違うと書いてあるものを、揃えて比べていました。
「いちばん良い comp は機体ごとに違う」と、自分でメモに書いていました。それなのに、2つの機体を同じ comp で比べていました。掃いて確かめれば1日で済むのに、先に結論を出していました。
「違う」と書いたのは自分で、それを揃えて比べたのも自分。メモは残っていたのに、読んでいなかった。
揃えたら0mm、関節を入れたら1mm
そこで comp を 0.0 から 2.0 まで5点に振って、2つの機体を測り直しました。
| 機体 | いちばん良い comp | 上限歩幅 |
|---|---|---|
| 肩1軸 | 1.5 | 31mm(32mm で 6/7) |
| 肩2軸 | 1.5 | 31mm(32mm で 6/7) |
どちらも comp 1.5 がいちばん良く、上限は同じ 31mm でした。代償は 0mmです。
ところが、この2軸の機体には、まだ横に開く関節そのものが入っていませんでした。肩が重くなった分だけを載せていたのです。消えたのは「重くなった代償」で、「2軸で動く代償」はまだ測っていませんでした。
同じ日のうちに関節を入れて測ると、上限は 30mm になりました。代償は 1mmです。
comp は前の歩き方にしか無いつまみです。後半で歩き方を替えたので、いまの機体には comp がありません。この章の数字は「前の歩き方・サーボの速さの制限なし」の値として読んでください。
そして「言えない」
1mm が本物の差なのかを確かめるために、もう1つ試しました。重さも重心も関節の数も同じで、腕の重さを何個の球で描くかだけを変えた機体を4つ作って、同じように測ります。
物理としてはほぼ同じ機体なので、上限も同じになるはずです。結果は 30mm、31mm、30mm、30mm に割れました。
描き方を変えただけで 1mm 動くのなら、1mm はこの測り方の底です。2軸の代償の「1mm」は、この底と見分けがつきません。
| いつ | 言ったこと | 比べたもの |
|---|---|---|
| 1日目 | 代償 4mm | 両方を comp 1.0 に揃えて |
| 2日目の昼 | 代償 0mm | comp を掃いて、それぞれいちばん良い所で(関節はまだ無し) |
| 2日目の昼過ぎ | 代償 1mm | 関節を入れて |
| 3日目 | 1mm より細かいことは言えない | 描き方だけ違う4機の割れ方を見て |
4回とも、測定そのものは正しく動いていました。変わったのは、毎回比べていたものです。
だから、この回で言えるのはここまでです。前の歩き方では、肩を1軸にしても2軸にしても、上限歩幅は 30〜31mm の帯から出ない。
3日で4回答えを変えた。どれも実測で、どれもその時点では正しかった。正しくなかったのは「何と何を比べたか」のほう。
買えるサーボの力にしたら、18mmまで落ちた
ここからが後半です。ここまでの機体は、関節がいくらでも速く動ける前提で、力も 4N·m 出せることにしていました。実際に買えるサーボはそうはいきません。
候補にしたサーボを、股と膝に当ててみました。力は、カタログの値ではなく悪い個体の値にしています。電圧は低めの 9.9V、速さも1割遅い個体です。そういう個体が届いても歩けるかを見たいからです。
| 股・膝のサーボ | 力の上限 | 前の歩き方の上限歩幅(いちばん良い comp) |
|---|---|---|
| STS3215 | 2.18 N·m | 18mm |
| ST-3250 | 3.64 N·m | 14mm |
| HL-3950 | 4.41 N·m | 28mm |
| (参考)これまでの設計 | 4 N·m・速さの制限なし | 30mm |
実際に買った STS3215 では、18mm まで落ちました。
ここでも前半と同じ形が出ています。力を下げると、いちばん良い comp が下にずれるのです。comp を1点に固定して比べると、サーボの良し悪しが入れ替わって見えます。掃かないと逆の結論になるのは、肩のときと同じでした。
もう1つ分かったことがあります。速さの制限を入れずに、全部の関節の力を 2.18N·m 以下に下げただけのときは 28mm でした。速さの制限を入れると 18mm まで落ちます。そして前の歩き方のままでも、足を振る時間を 0.4 秒から 0.5 秒に延ばすと、32mm に戻りました。力の不足より、サーボの速さが足を振る速さに追いつかなかったことのほうが効いていたように見えます(見立てです)。
この頃、STS3215 が2個届きました。天秤で量ると、2個とも 57.3g。規格は 55±1g なので、2個とも規格の外です(本体だけの重さ)。部品の重さの表も、これを受けて見直しました。
歩き方を替えたら、70mmまで歩けた
そこで歩き方そのものを替えました。前の歩き方は、足を振る間の傾きを comp で打ち消しながら歩くものでした。新しい歩き方は、この先の数歩の足の置き場から、倒れないように重心をどう運べばよいかを先に計算して、そこへ向けて体を動かすもの(予見制御)です。足も、新しい形のもの(f00)に替えました。
サーボは全部 STS3215 の悪い個体のまま、同じ7条件・200歩で測ります。
| 歩幅 | 0〜30mm | 40mm | 50mm | 60mm | 70mm | 75mm | 80mm |
|---|---|---|---|---|---|---|---|
| 前の歩き方(足を振る 0.4 秒) | 18mm まで | × | × | × | × | × | × |
| 前の歩き方(足を振る 0.5 秒) | 32mm まで | × | × | × | × | × | × |
| 新しい歩き方 | 7/7 | 7/7 | 7/7 | 7/7 | 7/7 | 0/7 | 0/7 |
0〜70mm が、7条件そろって200歩歩けました。75mm と 80mm は、7条件とも10〜12歩で倒れます。70mm のときの速さは毎秒 115mm ほどで、歩幅を 0.6 秒で割った値とほぼ同じです。倒れずにずるずる滑っているのではなく、前へ歩いています。
同じ悪い側のサーボで、前の歩き方は 18〜32mm、新しい歩き方は 70mm です。足の形もこのとき替えているので、全部が歩き方のおかげとは言えません。それでも、サーボを替えなくても歩けるところまでは来ました。
強いサーボを探しに行くつもりだったのに、答えは歩き方の側にあった。部品表の値段が上がらずに済んだのは、正直うれしい。
それでも、使うのは30mmまで
70mm まで歩けるなら、70mm で歩かせればいい。そうはなりませんでした。
歩いている機体は、いつか横から押されます。人の手が当たる、ケーブルが引っかかる、床が少し傾いている。押されても立て直せるかを、歩幅ごとに測りました。骨盤を横から 0.1 秒押し、その力を 0.25N ずつ上げていき、倒れる手前の力を「押しの上限」とします。そして、どの歩幅でも 2.25N の押しには耐えることを線にしました。
最初に測ると、20mm と 25mm は線に届き、30mm から上は届きませんでした。歩幅が大きいほど、押しに弱くなります。
そこで、押されたときの手を足しました。
- 横に押されたら、次に足を置く場所を横へずらす
- 歩幅をいったん 20mm に落として4歩歩き、4歩かけて元の歩幅へ戻す
押されないときは、この手は何もしません。歩き方は手を足す前とまったく同じです。
この手は、歩幅 25mm 以上のときだけ働かせています。はじめは全部の歩幅で働かせていましたが、足踏み(歩幅 0)のときは、かえって押しに弱くなっていました(押しの上限 6.00N → 3.25N)。立て直すための手が、立て直す必要の少ない所で足を引っぱっていたのです。
この手を入れて測ると、線に届く歩幅が広がりました。最初の測り方では、35mm と 40mm も届いているように見えました。
押したあと、何歩見るか
ここで測り方を1つ直しました。それまでの押しの測り方は、押したあと6歩で止めて、倒れていなければ「耐えた」としていました。
同じ押しを、押したあと20歩まで見るようにして測り直しました。
| 歩幅(手あり) | 押したあと6歩で見ると | 押したあと20歩で見ると |
|---|---|---|
| 30mm | 線に届く | 線に届く |
| 35mm | 線に届く | 届かない(2.25N で56本のうち2〜6本が倒れる) |
| 40mm | 線に届く | 届かない(2.25N で56本のうち1〜7本が倒れる) |
倒れたのは、押したあと6〜20歩のところでした。押された直後は持ちこたえて、しばらく歩いてから倒れる。6歩で止めていたので、それが見えていませんでした。
これで、押されても歩き続けられる上限は 30mmになりました。そして、35mm 以上は使わないと決めました。70mm まで歩けることは変わりません。使ってよい上限を、押しのほうから決めたということです。
手を足していない機体も、20歩で測り直しました。6歩の記録と比べられた 0・20・25・30mm では、弱いほうの値が同じでした。6歩で甘く出ていたのは、手を足した 35mm と 40mm です。
前半の 30〜31mm は、前の歩き方で歩ける上限です。この章の 30mm は、新しい歩き方で、押しから決めた使う上限です。同じ数ですが、別のものです。
前半と後半は、別の話に見えて同じ形をしていました。肩の代償は、何と何を比べるかで答えが変わりました。歩幅の上限は、何歩見るかで答えが変わりました。答えを決めていたのは、どちらも測り方でした。
押されて、その場では立っている。でも十何歩か先で倒れる。人間でもありそうな倒れ方で、6歩で目を離していたら一生気づかなかった。
確かめていないこと
いつもどおり、今回分かっていないことを並べておきます。
| まだ分かっていないこと |
|---|
| 実機はまだ組んでいません。サーボに設定を書き込む道具はできましたが、実物にはまだ一度も書いていません |
| サーボの硬さは、まだ測っていない借りた値です。歩き方の結果はどれも、この値の上に乗っています |
| 押しは横から 0.1 秒、1回だけです。歩幅を戻している途中にもう一度押されたときは見ていません |
| 歩幅の戻し方は1通りしか試していません(20mm で4歩・4歩かけて戻す) |
| 18mm → 70mm には、足の形の違いも入っています。歩き方だけの差は分けて測っていません |
