最初の20回は全部無駄になった|誰でもできるフィジカルAI 第5回:テレオペで模倣学習データを集めるときの3つの落とし穴

最初の20回は全部無駄になった|誰でもできるフィジカルAI 第5回:テレオペで模倣学習データを集めるときの3つの落とし穴

第4回で、Amazonで買ったロボットアームを組立済みキットで用意し、Windowsだけでテレオペ(遠隔操作)まで動かしました。リーダーを手で動かすと、フォロワーが同じ動きを再現するところまでです。今回はその先、ロボットに「お手本」を見せてデータを貯めます。

先に、今回やったことを書きます。私が20回、リーダーアームを操作して「積み木を掴んで箱に入れる」動作を実演し、その一部始終を模倣学習用のデータセットとして自宅PCに記録しました。 これは第6回で、ロボットが自分でこの作業をできるようになるための教材です。人がやって見せた動きを、そのまま学習素材に変える工程です。

VLA(第1回で説明した、画像と言葉から動作を直接出すモデル)は、この「人の実演データ」から動き方を学びます。だから今回集めるデータの質が、次回の成否をそのまま決めます。派手さはありませんが、フィジカルAIで一番地味に効く工程です。

使った環境は第4回と同じ、Windows 11 Pro、RTX 5090、SO-ARM101(Advanced Kit)です。今回もWSL2は使いません。

今回のゴール(3つ)

  • テレオペで「積み木を掴んで箱に入れる」お手本を、人が20回実演する
  • その映像と関節の動きを、LeRobotのデータセット形式で自宅PCに記録する
  • 記録したデータをブラウザで再生し、学習に使える品質かを確認する

3つ目まで通れば、第6回の「自宅のGPUで学習させる」に必要な素材が揃います。

そもそもテレオペは「マスタスレーブ」で、まだAIは動いていない

作業に入る前に、今やっていることの正体をはっきりさせます。第4回のテレオペは、古典的な用語でいうマスタスレーブ方式です。リーダー(マスタ)の各関節の角度を毎回読み取って、フォロワー(スレーブ)に「同じ角度になれ」と指令する。それを1秒間に何十回も繰り返しているだけで、間にAIも軌道計算も入っていません。

ここが今回の肝です。AIがまだ何もしていないからこそ、人の実演がそのまま「正解データ」になります。 ロボットの動きは100%人間が作っている。その「画像+言葉の指示」と「そのとき人が出した動作」のペアを大量に集めておけば、次回それを教材にAIが動き方を学べる。データ収集とは、AIに教えるための正解集めです。

補足を2つ。このテレオペは単方向で、フォロワーが物に触れた感触はリーダーに返ってきません。操作者は手応えなしに、カメラ映像と目視だけで操作します。そしてテレオペ中のリーダーは力が抜けた読み取り専用状態です。この2つの性質が、この後の「掴む物の選び方」に効いてきます。

掴む物は「硬くて・形が変わらない物」を選ぶ

最初の関門は、実は技術ではなく物選びでした。私は3回、対象物を変えています。

最初は色付きのサイコロにしました。ところが1.5cm角と小さく、掴む位置合わせの精度がシビアで、640×480のカメラ映像では小さく映りすぎます。位置がわずかにずれるだけで掴み損ねる。学習の難易度も上がるので却下しました。

次にスポンジを試して、これはもっと明確に駄目でした。柔らかい物は、掴むたびに潰れ方が変わって形が安定しません。しかも前述の通りこのグリッパーには力覚がないので、「どこまで閉じれば保持できて、どこから潰すか」を映像だけで判断することになり、20回の実演を同じ品質で揃えるのが難しい。

最終的に選んだのは木の積み木です。3〜4cm角、硬くて変形せず、転がらず、木目で白マット上に映える。掴む前後で見た目と掴み方が毎回同じになる物、これが正解です。 形が真四角である必要はありません。丸でも円柱でも、毎回同じように掴めるならいい。避けるべきは「柔らかさ」のほうです。

初回は「1個だけ」置く。複数を並べない

物が決まって、次に迷ったのが個数です。「積み木を5個並べて1個ずつ取る」ほうが効率的では、と考えました。結論はこうです。初回は必ず1個だけにします。

理由は、指示文が1つだからです。今回の指示は「Put the block in the box」の一文だけ。5個ある中から1個取ると、モデルは「なぜこの1個なのか」を学べません。あるエピソードでは右を、別のエピソードでは左を取ると、同じ映像・同じ指示なのに正解の動きがバラバラになり、少ないデータでは学習が破綻します。残りの4個が背景に映り込むのも邪魔になります。

初回データ収集の鉄則は「1タスク=1対象=1つの明確な正解」です。積み木は1個だけマットに置き、掴んで箱に入れる。これで1エピソード。複数個の課題は、第6回で1個版の学習が成功してからの発展課題にします。

カメラは斜め上から、引いて全体を入れる

環境カメラ(俯瞰カメラ)の位置決めも一手間でした。付属カメラが広角なので、近づけると全体が入らず、アームにもぶつかりそうになります。

答えは「無理に近づけない」です。満たすべき条件は1つで、積み木の初期位置の全範囲・箱・アームの動く範囲が、全エピソードを通してフレーム内に収まり続けること。近くて一部が切れるより、遠くて全部映るほうが圧倒的にいい。

角度は、真上より斜め上からの俯瞰が良いです。真上だと、アームや積み木の高さ(机からどれだけ持ち上がっているか)が映像から読み取れず、すべてが同じ平面に潰れて見えます。斜め上からなら、持ち上げた・手前に来た・奥に行った、が映像に現れる。VLAはこの俯瞰カメラと手先カメラの2枚から状況を推定するので、奥行きが見える斜め視点のほうが情報量が多く、学習に有利です。LeRobotのSO-101の作例でも、斜め45度前後の俯瞰が定番です。

もう1つ。カメラのindexは接続順で変わります。第4回では手先カメラがindex1でしたが、今回は0でした。index番号を思い込みで固定せず、毎回rerunの実映像を見て「手先=爪が映る/俯瞰=箱とアームが映る」を確認してから確定するのが確実です。そして一度決めたら、20エピソード録り終わるまで一切動かしません。

ここまで整えたら、いよいよ記録です。ただしここから、当日いちばんハマった壁が来ます。

詰まり1:記録コマンドが起動直後にSSLエラーで落ちる

テレオペは動くのに、記録コマンドを実行した瞬間、こう落ちました。

ssl.SSLError: [ASN1: NOT_ENOUGH_DATA] not enough data (_ssl.c:4040)

これはアームでもデータでもありません。Windowsの証明書ストアに壊れた証明書が1枚混じっていて、Pythonのssl初期化がそこでコケています。

なぜ記録だけ落ちるのか。記録コマンドは内部でデータ管理ライブラリ(Hugging Faceのdatasets)を読み込み、それが通信ライブラリ(aiohttp)を読み込みます。そのaiohttpが起動時にSSL接続の準備をし、Windowsの証明書を全部読もうとしたところで、壊れた証明書に当たって例外を投げていました。テレオペはこのライブラリを読まないので通っていたわけです。

最初、証明書ストアの問題を吸収する truststore というライブラリを入れましたが、効きませんでした。truststoreはWindowsでは結局同じ「証明書ストアを全読みする処理」に委譲していて、根本のコケる場所を回避できないのです。

解決は、Windowsの証明書ストアを読むのをやめて、Python同梱の正常な証明書束(certifi)を読むように差し替えることでした。証明書ストア自体はいじりません(それはシステムのセキュリティ設定変更になります)。この環境のPython起動時に自動で有効化される設定ファイルを1つ置きます。

python -c "import site,os;p=os.path.join(site.getsitepackages()[0],'sitecustomize.py');open(p,'w').write('import ssl, certifi\ndef _p(self,purpose=ssl.Purpose.SERVER_AUTH):\n    try:\n        self.load_verify_locations(cafile=certifi.where())\n    except Exception:\n        pass\nssl.SSLContext.load_default_certs=_p\n')"

差し替えが効いたかは、この一行で確認できます。

python -c "import ssl; ssl.create_default_context(); print('SSL OK')"

SSL OK が出れば根本解決です。これは記録だけでなく、第6回の学習でも同じライブラリを読むので、一度やれば恒久対策になります。Windowsで機械学習をやる人が地味に踏む罠です。

詰まり2:最初の20回は「積み木を置く自分」が映っていた

SSLを越えて、記録コマンドが起動しました。ここで私は一度、20エピソード全部を無駄にしています。

録れたデータを再生したら、映っていたのは積み木を机にセットしている私の手でした。肝心の「アームが積み木を箱に入れる動作」が記録されていない。原因は操作の勘違いです。

このコマンドには実演フェーズとリセットフェーズが交互に来ます。私は「記録開始のEnterがある」と思い込んでいましたが、実際は違いました。画面に「Recording episode 0」と出た瞬間、もう録画は始まっています。 そこで私は「まず積み木を置こう」と手を伸ばしてしまい、配置シーンが実演として記録され、肝心のアーム動作が録画対象外のリセットフェーズに回っていた。フェーズが半分ずれたまま20回進んだわけです。

対処はデータを全消去しての録り直しと、ルールの明確化です。「Recording episode N」の表示(や次へ進む右矢印)が出たら、まずアームを動かす。積み木の配置は「Reset the environment」表示のときだけ。 この一点を守るだけで直りました。録り直した20回は、全部アームの動作が主役で記録できています。

なお、録り直すときは同名のデータセットに追記されてしまうので、古いフォルダを先に削除する必要があります。

rmdir /s /q C:\Users\hidek\.cache\huggingface\lerobot\hideki\block_in_box

記録中のキー操作(迷わないための整理)

改めて、記録の1周を整理します。これを知らないと1エピソード目から迷います。

  • 「Recording episode N」表示=もう録画中。すぐアームで積み木を掴んで箱に入れる
  • 入れ終わったら →(右矢印):このエピソード終了
  • 「Reset the environment」表示中に、次の積み木を置く(この間は録画されない)
  • 置いたら :保存して次のエピソード開始 → すぐアームを動かす
  • 失敗した回は ←(左矢印):直前を破棄して録り直し
  • 指定回数に達すると自動停止。途中でやめるなら Esc

多様性のコツも1つ。毎エピソード、積み木の初期位置を変えてください(右・左・手前・奥)。同じ位置ばかりだと、その位置しか掴めないモデルになります。箱の位置は固定のままです。

今回は20回で、1回あたり約3秒、合計1959フレームのデータになりました。

詰まり3:データを再生するビューアが権限エラーで開かない

記録した20エピソードを確認するため、ブラウザ用のビューアを起動したところ、また止まりました。

OSError: [WinError 1314] クライアントは要求された特権を保有していません。

これは権限の問題です。このビューアは動画フォルダへのショートカット(シンボリックリンク)を作って配信する仕組みで、Windowsは通常のユーザーにこのリンク作成を許していません。

解決は単純で、プロンプトを「管理者として実行」で起動して同じコマンドを打つだけです。データ収集そのものは通常権限で問題なく、可視化のときだけ管理者権限が要る、という切り分けです。

python -m lerobot.scripts.visualize_dataset_html --repo-id hideki/block_in_box --root C:\Users\hidek\.cache\huggingface\lerobot\hideki\block_in_box

起動すると http://127.0.0.1:9090 のようなアドレスが出て、ブラウザで開くと20エピソードを1本ずつ、2カメラの映像と関節のグラフつきで再生できます。ここで確認するのは、全エピソードでアームが積み木を掴んで箱に入れているか、掴み損ねの失敗回が混じっていないか、映像が途切れた回がないか、です。ここまで来て初めて、データ収集が完了します。

集めたデータの中身が、そのまま次回の教材になる

再生してみると、腑に落ちることがあります。画面に並ぶのは、俯瞰カメラの映像、手先カメラの映像、そして全関節の動きのグラフです。この「2つの映像+関節の数値の並び」こそが、第6回でVLAが学習する教材そのものです。

VLAは、この「そのとき何が見えていて(画像)」「人がどう動かしたか(関節の値)」のペアを大量に見て、「この状況ならこう動く」を学びます。今回私は、その正解ペアを20本、自分の手で作りました。次回はこれをGPUに食わせて、ロボットが自分で積み木を箱に入れられるようにします。

まとめ

  • テレオペはマスタスレーブ方式で、まだAIは介在していない。だからこそ人の実演がそのまま正解データになる。データ収集とは、次回AIに教えるための「お手本集め」。
  • 成否を分けるのは地味な準備。硬くて形が変わらない物を1個だけ/カメラは斜め上から引いて全体を入れ、一度決めたら動かさない/毎回置き場所を変えて多様性を出す。柔らかい物・複数個・画角ブレは初回では避ける。
  • Windowsで踏む詰まりが3つ。記録コマンドのSSLエラーはcertifiへの差し替えで恒久解決/「Recording episode」表示が出たら即アーム(配置はReset表示のときだけ)/可視化ビューアは管理者権限で起動。どれも知っていれば数分で抜けられる。
  • 集めた「2カメラ映像+関節値」20本が、そのまま第6回でVLAが学ぶ教材になる。派手ではないが、ここの質が次回の性能を決める。

第6回では、いよいよこのデータを自宅のGPU(RTX 5090)で学習させ、ロボットが自分で積み木を箱に入れるところまでいきます。今回と同じく、詰まった所も含めて正直に書きます。

「自社の作業をロボットに覚えさせたいが、どんなデータをどれだけ集めればいいのか、どこから手をつけるか一緒に整理してほしい」という方は、無料の30分オンライン診断で交通整理できます。データ設計はフィジカルAIの成否を静かに左右する部分なので、技術顧問として率直にお話しします。

この記事の技術を、現場で実装したい方へ

AI×IoTの技術顧問として、月額契約で継続伴走しています。PoC設計・技術判断・組織設計・ベンダー管理・実装支援まで、現場で動くまで一緒に進めます。受託開発(請負)ではありません。

AI技術顧問サービスの詳細無料30分オンライン診断料金一覧

About The Author

Hideki
東京大学発AIスタートアップでロボット開発室室長・画像解析室室長・動画解析室室長を務め、画像認識関連のAI特許を在籍中に3件取得。その後、KDDIグループでプロダクトリーダーとして自然言語処理パッケージの自社開発を経て、現在はAGRIST株式会社の執行役員CTO 兼 VPoEとして、農業の人手不足解決に向けた収穫ロボットの開発組織を統括しています。AI・ハード・エレキ・通信・クラウド・IoTまでを一気通貫で設計できる視点を強みに、性能だけでなく「感動やワクワク体験」までデザインできるロボットの研究を進めています。並行して、AI coordinatorとして企業のAI導入・教育機関のAI授業・地域の技術相談を月額契約で継続伴走しています。

LEAVE A REPLY

*
*
* (公開されません)