【ROS2】VLAを4軸ロボットアームに適用、成功率69%を達成
2026年11月05日
- ROS2
フィジカルAIの中核技術として、VLA(Vision-Language-Action)モデルが注目を集めています。ただ、公開されている学習済みモデルの多くは、6軸ロボットアームのデータで学習されています。そこで、ROS2で制御する4軸ロボットアームでもVLAが動くのかを検証しました。シミュレーションで作成したデータに、実機のデータを加えて学習しました。その結果、キューブを持ち上げる動作の成功率は69%に達しました。
VLAとは
VLAは、Vision(視覚)、Language(言語)、Action(行動)を一つのモデルで扱うAIです。例えば「赤いキューブを持ち上げて」と指示すると、言語の指示を理解し、カメラの画像から赤いキューブを認識します。その上で、ロボットの動作を直接出力します。これまでのロボットは、物体の位置を認識し、どう動かすかをプログラムで細かく決める必要がありました。VLAは、画像と言語を理解するAIモデルを基に、ロボットの動作データを大量に学習させて作られます。そのため、対象物や指示が多少変わっても、学習内容を生かして動作を組み立てられるのが特長です。
Isaac Simでのシミュレーションとファインチューニング
今回は、Hugging Faceが公開する小型のVLA「SmolVLA」を使用しました。一般的なGPUを搭載したパソコンでも学習・推論できるモデルです。まず、追加の学習をしないゼロショットで、4軸ロボットアームを動かしてみました。アームの根元はキューブの方向へ回りましたが、その先は6軸アーム向けの動きになり、キューブをつかめませんでした。そこで、NVIDIAのロボットシミュレーター「Isaac Sim」で模倣学習用のデータを作成し、ファインチューニングしました。教師データには、キューブの上に移動し、真下に下ろしてつかみ、持ち上げるまでの動きを使いました。この動きを、逆運動学で各モーターの目標角度に変換しています。148エピソード分のデータで学習した結果、シミュレーター上ではキューブをつかめるようになりました。

Isaac Simを使用した再学習の様子
実機での動作検証
実機では、VLAの推論とアームの制御を別々のパソコンに分け、ROS2の通信でつなぎました。推論用パソコンでは、カメラ画像をSmolVLAに入力し、各モーターの目標角度を求めます。この値をVLA用のROS Nodeから送信し、制御用パソコンのコントローラー ROS Nodeが制御ボード経由でアームを動かします。アームの現在の角度は逆の経路で推論側に戻り、次の推論に使われます。

実機を使用した実行の流れ
実機の成功率を42.5%から69%へ
シミュレーターで学習したモデルは、そのままでは実機で動きませんでした。教師データの画像と、実機のカメラ画像の差が大きかったためです。そこで、シミュレーションの環境にエピソードごとのばらつきを持たせました。環境光の明るさ、床の色、カメラの位置と角度、アームの初期姿勢を毎回変えています。このデータで再学習した結果、実機でも教師データに近い動作ができるようになりました。成功率は、実機で各条件200回ずつ試行して測定しました。
| 条件 | エピソード数 | 学習ステップ数 | 成功率 |
|---|---|---|---|
| ①シミュレーション | 1000 | 10万 | 39%(78/200) |
| ②シミュレーション | 4000 | 20万 | 42.5%(85/200) |
| ③②+実機データ | 4000+100 | 20万+3000 | 69%(138/200) |
シミュレーションのデータを4倍にしても、成功率の伸びは3.5ポイントにとどまりました。一方、実機で集めた100回分のデータを②に追加で学習させると、成功率は69%まで向上しました。
ファインチューニングしたVLAでキューブの持ち上げに成功
6軸ロボットアームのデータで学習されたVLAをファインチューニングし、4軸ロボットアームで動かすことができました。シミュレーションだけの学習には改善の余地が残りましたが、実機データを少量加えることで成功率は大きく向上しました。今後は、他のVLAモデルの検証や、複数の指示に対応する学習、地形データを使った学習に取り組む予定です。ROS2を使ったロボットシステムの設計・実装から、シミュレーション、運用システムの開発まで、当社が支援します。
今回のようなフィジカルAIの検証についても、ご相談いただけます。
詳しくはROS2サービスページをご覧ください。
今回のようなフィジカルAIの検証についても、ご相談いただけます。
詳しくはROS2サービスページをご覧ください。
ROSの表記について
ROS2の正式な表記は、間にスペースを入れた「ROS 2」です。ただし、日本語では可読性の観点からスペースなしで表記されることが多いため、本サイトでも「ROS2」としています。