「幅80cmの通路を歩けた」という動画を作った後で、問いを変えました。少し違う場所から入っても通れるのか。工場への導入を考えるなら、成功した一例より、どの条件で失敗するかを知りたいからです。
今回の目的は、同じ歩行制御でも通路幅・進入位置・進入角によって接触の有無が変わるかを確かめ、出口に着いたことだけでは見落とす失敗を計測することです。実機に必要な最小通路幅を決める試験ではありません。
結論は、この制御では進入条件によって壁接触が起き、出口への到達だけを合格にすると見逃す、ということです。今の制御をそのまま現場へ適用できるとは判断できません。次の改善対象は、接触した進入条件での制御です。
Isaac Sim上のG1で、通路幅と開始位置を変えた36試行を行いました。同じ80cm幅・同じ進入角でも、中央開始は判定を満たし、開始位置を5cmずらすと壁への接触を検出しました。通路幅だけで、この制御の適用範囲は決まりませんでした。
出口まで全身が抜けたのは36/36試行。しかし、接触と全身の余裕まで条件に入れると、判定を満たしたのは18/36試行でした。
同じ80cmでも、開始位置で結果が変わる
比較する動画は、どちらも速度指令0.5m/s、進入角-2度、seed100。変えたのは開始時の横位置だけです。動画はそれぞれ等倍で、接触した側も途中で切らずに示します。
36試行の中の対応する計測では、中央開始の壁合力は0N、全身形状の余裕下限は29.0mmでした。-5cmからの開始では壁合力の最大値が691.9Nとなりました。どちらも全身は出口を抜けています。到達だけを成功とすると、この差が消えてしまいます。
これは、開始位置が違えば必ずこの結果になるという主張ではありません。全体の36試行も、続けて載せます。
幅と開始位置を変えた結果
内幅70・80・90・100cm、開始位置は通路中心から-5・0・+5cm。各組で進入角を-2・0・+2度に変えた3試行を行いました。対応するseedは100・101・102で、全幅・全開始位置に同じ組合せを使っています。
表は今回の判定を満たした本数です。各マスの分母3は、完全に同じ条件を3回繰り返した値ではなく、小さく進入角を変えた試行です。現場での成功確率を推定した数字ではありません。
表は横にスクロールできます。
| 通路の内幅 | 開始位置 -5cm | 中央 | 開始位置 +5cm |
|---|---|---|---|
| 70cm | 0/3 | 0/3 | 0/3 |
| 80cm | 1/3 | 2/3 | 2/3 |
| 90cm | 1/3 | 2/3 | 2/3 |
| 100cm | 2/3 | 3/3 | 3/3 |
今回の4つの幅には、9試行すべてで判定を満たした幅はありませんでした。 ただし、試していない中間の幅や、異なる床・荷物・速度まで通れるとは言えません。
失敗も一種類にまとめませんでした。
表は横にスクロールできます。
| 内幅 | 判定を満たした | 壁接触あり | 余裕を確認できず | その他の失敗 |
|---|---|---|---|---|
| 70cm | 0 | 8 | 1 | 0 |
| 80cm | 5 | 4 | 0 | 0 |
| 90cm | 5 | 1 | 3 | 0 |
| 100cm | 8 | 0 | 1 | 0 |
1m幅では9試行とも壁接触力は0Nでした。残る1試行は、形状を包む箱の余裕下限が約-5.5mmだったため判定を通していません。「1mでも接触した」という結果ではなく、より細かな形状評価を行うか、制御の余裕を増やして再確認する課題です。
「壁接触あり」は壁側の力センサーで検出したもの。「余裕を確認できず」は、壁の力は検出されなかったものの、全身を包む保守的な箱では壁との間隔が正とならなかったものです。箱同士が重なったことだけで、実際にぶつかったとは断定していません。接触と余裕不足が同時にある場合は、接触に分類しています。
何を満たしたら通過としたか
肩、腕、指、脚など形状のある51部位を対象にしました。全身の最後尾を含む箱が出口を5cm以上越え、その状態で0.5秒以上歩き続けること。加えて、壁接触力が検出されず、全身形状の余裕下限が正で、転倒しないことを要求しています。出口で停止する制御は含みません。
左右の壁の合力を毎秒200回記録し、各部位の姿勢から形状の余裕も計算しました。形状を包む箱を使うため、余裕の値は正確な表面間距離ではなく下限です。保存した姿勢から退出と余裕を再計算し、実行中の記録との一致を全36試行で確認しています。
壁センサーは、事前の接触する対照試験で動作を確認しています。一方、個々の接触点を返すイベント取得はこの環境で確認できませんでした。その空ログを「接触なし」の根拠にはしていません。
今回、実装したこと
歩行にはUnitree公開の学習済み方策と、その対応モデルを使いました。新しく学習させたものではありません。世界座標で目標の進路と横ずれの補正を計算し、身体基準の速度指令へ変換します。身体の位置を強制的に移動させたり、足をアニメーションで動かしたりしていません。
物理更新は200Hz、方策更新は約33.3Hz。最初の2秒は前進指令0、その後1秒で0.5m/sへ立ち上げます。壁は長さ4m、高さ1.5m、最大試験時間は20秒です。36試行の途中でゲインやモデルを調整していません。
位置と向きはシミュレータから取得しています。Visual SLAMによる測位、Nav2による経路生成、実機での歩行を検証した結果ではありません。
導入検討にどう使うか
この表が示すのは、今回のモデルと制御で確認した条件です。実機に必要な通路幅を、そのまま指定する表ではありません。
現場の通路を再現して同じ評価をするなら、幅に加え、どの位置・向きから入るかを試験条件に含めます。今回の80cm比較では、開始位置5cmの違いが接触の有無に結びつきました。位置推定誤差を5cmまで許容できる、という意味ではありません。開始位置のずれと、移動中の測位誤差は別の試験が必要です。
次に問うのは、荷物を持った姿勢、床の条件、停止や切り返し、視覚から推定した位置で動かした場合にも同じ条件が通用するか。失敗した条件を残しておけば、進入位置を制限するのか、制御を改善するのか、通路を広げて再検証するのかを考える材料になります。
同じように通路歩行を評価する場合は、到達に加えて壁接触と全身の余裕を確認し、進入条件も変えて試す必要があります。本記事に示した条件と判定方法は、その評価項目を考える材料になります。歩行方策の出典はUnitree公式実装です。
チームゼットでは、現場のレイアウトや動作条件をシミュレーションにつなぎ、評価コードの実装と失敗条件の切り分けを進めています。検証したい通路や動作がある方は、開発のご相談からお知らせください。