2025年06月22日
先月の週末にチューリッヒで開催された、Mimic x Loki Robotics x OpenAI Robotics HackにBRCKD.aiというチームで参加し、「ブロック組み立てロボット」を作り上げて優勝しました。これはMimic Robotics、Loki RoboticsとOpenAIが協賛するハッカソンで、LLMなどの生成AIを活用することでロボットがどう進化できるか、みんなで色々なアイデアを試してみよう!という趣旨のイベントです。ハッカソンで作るロボットについてのルールはたった二つで、
また、審査の対象は口頭のプレゼンと実機デモだけで、スライドや動画は不要、というルールでした。ハッカソンでは往々にして、巧みなプレゼンに目がくらまされて実際の試作品はあまり動いていなくても高評価を受けてしまう、ということが多いので、実際のデモだけを見るという方針はとてもよかったと思います。
こちらの公式ビデオを見てもらうと当日の雰囲気が分かると思います。
私たちのチームは5名で、同じラボの博士課程学生のGavinとChenyu、同じチューリッヒ工科大の学生のZeno、そしてこのハッカソンに参加するためにわざわざイギリスのエディンバラから飛んできたAlexがいました。ざっと見た感じでは他のチームの参加者たちはもともとソフトウェアが専門だったが最近ロボットもやり始めた、という人が多そうだったので、もともとロボット畑出身の私とGavinの専門の強味を活かしつつ、ソフトウェアやAIに強い他のメンバーで生成AI活用パートを固める、という堅実な方針を立てました。どんなロボットを作るかはある程度チームメンバーと相談していたのですが、
の二つまで絞ったところで、チーム内で意見が分かれてしまいました。私はレゴロボット派だったのですが、レゴブロックそのものを組み立てるには精度と器用さが必要なので難しく、磁石を仕込んだキューブを3Dプリンタで量産すれば良いのではと提案していました。ロボットがキューブを持ち上げるには専用のエンドエフェクタを使い(電磁石などを組み込んで簡単にキューブを掴んで離せるようにする)、既に組み立ててあるキューブの塊に近づければ勝手にピッタリくっついてくれる、という想定です。ただ、これだと専用ハードウェアの開発にかなり時間をかけないといけないのと、自作した磁石入りのブロックしか組み立てられないので汎用性の主張が弱まる、というのが他のメンバーの懸念でした。
そうして議論が行き詰っていたときに…
開催場所のmimic roboticsのオフィスに、「ちょうどいい感じのブロック」が見つかりました!これくらいのサイズならロボットでもあまり苦労せずに組み立てられそうです。そうして、レゴロボットを作ろうということでチームで一致しました。
ハッカソンで難しいのは、週末で開発を終える必要があるのであまりに難しい高度な技術を実装するのには間に合わない一方で、あまりに単純なことをしようとするとショボすぎてインパクトが薄まってしまう、ということです。
この矛盾に対してバランスを取るため、私たちのチームは早いうちに、ロボットを直接指令するプログラム(ブロックを掴んで組み立てる動作を生成するPythonスクリプト)についてはAIを一切使わない、という少々極端な決断をしました。真の意味でAIを完全に活用するなら模倣学習などでブロックを組み立てる動作をロボット自身に学ばせるべきかもしれませんが、AIには全体の設計図を作る部分だけを任せ、ロボットの関節レベルの動きは最もプリミティブなロボット制御法(逆運動学)で行いました。
結果的にこの作戦は成功したと言えます。こうすることで私とGavinはブロックをロボットで組み立てる動作を作りこむのに集中し、他のメンバーはお題の単語からいかにAIを使ってモザイク画を生成して、私たちのプログラムに送る(X, Y)の位置に大きさZのブロックを配置して
というハイレベルな指令に変換するか、ということに集中でき、うまく分業して効率よく開発が進められました。
面白かったのが、開発中に私とGavinで何度もロボットを動かしてブロックを組み立てる動作を調整していたのですが、しょっちゅう他のチームの人から「ずいぶんスムーズに動いているけどどんな学習ポリシーを使ってるんだ?」と聞かれたことです。
最終日の朝にはロボットの基本的な動作プログラムは完成したので、私は近くのホームセンターで段ボールを買ってきて、ブロックのパーツフィーダーを作っていました。
それまでは、事前に指定されたエリアに人間が毎回新しいブロックを置いていました(ロボットは環境認識は一切しておらず、全てフィードフォワードの動きです)。パーツフィーダーがあれば、完全自動で組み立てることができます。
動画の通りパーツフィーダー自体は一応機能はしたのですが、斜めに掴む必要があり、全て水平に掴むのに比べて位置の登録がややこしいことが分かった(それもあって、動画ではブロックを設置するのには失敗しています)ので、残念ながら最終デモでは「ロボットが一個ブロックを取ったら、人間がパーツフィーダーからブロックを拾って規定の位置に置く」という半自動化されたバージョンを見せることになってしまいました。
最終的な組み立て動作はこのようになりました。
最終的にデモで見せたシステムがこちらです。
そしてこちらが、ロボット内の処理の流れをまとめたシステム図です。
まずChatGPT API を駆使しお題の単語をモザイク画に変換します。ここでもいろいろな工夫があり、
など、不確定なAIからいかに安定した出力を得るか、Zenoが試行錯誤していました。
モザイク画が得られても、そこからどういう順番で組み立てればいいかの計画を立てなければいけません。ブロックは3種類あることと、下からしか組み立てられないという条件を考慮した上で一つ一つどういう順番で組み立てるかを出力するアルゴリズムをAlexが実装していました。
そしてロボットと機械学習両方の経験が豊富なChenyuが、全てのシステムをいい感じに統合してくれました。
出場チームの中で、一番ロボットがしっかり動いていたことと、既存のロボット制御則と生成AIをうまく活用することでロボットの可能性を広げられそうな点が評価され、優勝することができました。景品はChatGPT Pro 10か月分でした。嬉しい!
この結果はもちろん嬉しいのですが、現在の学習ベースのロボット制御の限界も示しているのかな、と個人的には思っています。週末の2日間という短期間で模倣学習に挑んだチームもいたのですが、なかなか安定してデモが動かせたチームはいませんでした。現状では、逆運動学などの単純な古典的な制御法で解決できる部分があれば複雑なことはせずにさっさと解決してしまって、生成AIでしか解決できない問題に対してピンポイントで限られた範囲で活用するのがいいのだと思います。
私たちのチームは、Loki RoboticsからAgilex社のPiPERというロボットアームをお借りして使っていました。こちらのアームは、2500ドルで6自由度あるのでかなりお得だと思ったのですが、少なくとも私たちが使った個体については使いこなす上で重要な問題があったので、週末という短期間触れただけの感想であると前置きした上で、一応書いておきます。
制御するソフトウェアとしては、公式のpiper_sdkを使いやすいようにラッピングしてある
Reimagine-Roboticsのpiper_controlが一番安定していました。
robot.reset()
を呼ぶ度に(ティーチングモードから切り替えた時や、ロボットが異常停止した時にリセットする必要があります)ロボットの関節角度制御のオフセットが変わるようで、少なくとも私たちが使っていた位置制御モード(set_cartesian_position
)の場合は同じ位置指令を送っても、ぴったり同じ位置には戻ってくれませんでした。ブロックを正確に掴んで設置することが困難なほどずれてしまったので、リセットする度にブロックの位置の座標登録をしなおさないといけませんでした。ちなみに、デモの直前にもロボットが一旦異常停止してしまって、ギリギリまで座標を再設定する羽目になりヒヤヒヤさせられました。
もしかしたら対処法があるのかもしれませんが、このままだと精度に問題があり、ちゃんとしたロボットとして使うには難しいかもしれないという印象を受けました。公式情報では0.1mmの繰り返し精度があるとのことですが、私たちの場合は異なりました…。
□