Physical AI で実際にロボットアームを動かしてみた

2025年12月24日掲載

キービジュアル

この記事はソフトバンク アドベントカレンダー2025に参加しています。24日目の記事を担当する菅谷です。

普段はIoTビジネス領域のAIデバイスにおける技術調査、フィージビリティスタディ、プロトタイピングに携わっています。

昨今Physical AIの進歩が加速しています。ロボットの基盤モデルを使うことで少量の教師データでも動作を生成し、自律的に動かすことが可能となってきました。

本記事ではNvidiaがオープンモデルとして提供しているNVIDIA Isaac GROOT N1.5とLeRobotのオープンソースのロボットアームであるSO-101 Armsを用いて、Physical AIで実際にロボットを動かしてみた様子を紹介します。

目次

  • Physical AIでロボットアームを動かしてみた内容の記事です。
  • ロボット初心者でも理解しやすい内容の記事です。

登場人物

SO-101 Armsについて

SO 101はHuggingfaceが公開したオープンソースのロボットアームです。骨格の設計図がGithubのレポジトリに公開されています。

SO-ARM100

Hugging Faceが主導するロボット制御プロジェクト「LeRobot」向けに設計されており、LeRobotのライブラリおよびデータセット形式に対応しています。そのため、AIによる模倣学習(Imitation Learning) を低コストでスピーディーに実践できる標準機として注目されています。次の2つのアームが含まれています。

  • リーダアーム(左) : 人が操作するためのコントローラ的なアーム
  • フォロワーアーム(右) : 実際に物を掴んだり動かしたりするアーム

NVIDIA Isaac GROOT N1.5

GR00T N1.5は、ヒューマノイドロボット向けの汎用的な推論・スキル学習のためのオープンな基盤モデルです。以下の2つの主要コンポーネントが組み合わさっています。

  • 視覚言語基盤モデル (Vision-Language Foundation Model) : 画像と言語を理解する部分。
  • 拡散Transformerヘッド (Diffusion Transformer Head) : 連続的なロボットの動きをノイズ除去プロセスを通じて生成する部分。視覚言語基盤モデル によって生成したアクションプランを正確かつ連続的なロボットの動きへと変換します。

ロボットの学習方法について

ロボットの学習には大きく分けて模倣学習と強化学習の2つの手法があります。

模倣学習(Imitation Learning)

  • 仕組み : 人間がロボットを操作したり、人間自身の動きを撮影し「教師データ」を作成します。ロボットはこのデータを手本として動き方を学習します。
  • メリット : 人間にとって直感的に教えやすく、学習が比較的早く収束する。
  • デメリット : 手本にない状況への対応が苦手で、汎化が弱い。

強化学習(Reinforcement Learning)

  • 仕組み : 試行錯誤と報酬で自ら最適解を見つけるアプローチ。うまく行ったら「報酬(アメ)」、失敗したら「ペナルティ(ムチ)」という報酬関数を設定する。はじめはロボットはランダムに動いているが、徐々に動きが最適化されてくる。
  • メリット : 報酬関数を適切に設定できれば、自律的に動きを学習できる。
  • デメリット : 報酬関数の設定の難易度が高い。また、試行錯誤中SO101に転倒や衝突など危険な行動もあり得るため、機体の損傷リスクがある。

SO101はリーダーアームでフォロワーアームを操作することで模倣学習用の学習データを簡単に作成することができます。今回はGROOT N1.5でSO-101を動かすために模倣学習によるfine tuningを試してみることにしました。

実機を動かすまでの流れ

SO-101のフォロワーアームをPhysical AIで動かすための流れは以下のようになります。

  1. SO101のリーダアームを用いてフォロワーアームを動かし、タスクの実行を記録し教師データを作成する。
  2. 教師データを用いてGROOT N1.5をfine tuningする。
  3. fine tuningしたモデルでSO101のフォロワーアームを動かす。

LeRobotのライブラリではそれぞれの工程に対応したコマンドが用意されているため、ロボット初心者でも簡単にPhysical AIを試すことができます。

1. 教師データ作成

まずロボットを操作して、教師データを作成します。PC側の環境構築、アーム組み立て、モーターIDの割り振り、アームのキャリブレーションをインストラクションにしたがって進めます。

今回試すタスクは目の前のテープを拾って奥の箱に収納するというシンプルなものにしました。

カメラはロボットアームの手元を撮影するカメラと(wrist)と上からロボットアーム、テープ、箱を上から撮影する俯瞰カメラ(front)の2台構成にしました。

教師用データのためのLeRobotコマンドは以下の通りです。

ひたすらロボットを操作して、100試行分の教師用データを作成しました。

lerobot-record \
  --robot.type=so101_follower \
  --robot.port=/dev/ttyACM1 \
  --robot.id=my_awesome_follower_arm \
  --teleop.type=so101_leader \
  --teleop.port=/dev/ttyACM0 \
  --teleop.id=my_awesome_leader_arm \   
--robot.cameras='{"front":{"type":"opencv","index_or_path":1,"width":1920,"height":1080,"fps":30},"wrist":{"type":"opencv","index_or_path":2,"width":640,"height":480,"fps":30}}' \
  --display_data=true \
  --dataset.single_task="Grab a tape and place it in the box." \
  --dataset.push_to_hub=false \
  --dataset.episode_time_s=30 \
  --dataset.reset_time_s=15 \
  --dataset.num_episodes=100

2.fine-tuning

10月に行われたLeRobotのライブラリアップデートv0.4.0にてLeRobotのコマンドの引数にGROOT N1.5を直接指定できるようになりました。以前のバージョンまでは、fine tuning時にLeRobotのデータセット形式をGROOTに対応させるために互換用のファイルを作成する必要がありましたが、それらの工程が全て省略できるようになりました。

モデルについては、誤差から判断し5000ステップほどfine tuningしたものを使用することとしました。

GROOT N1.5のfine tuning時のGPUの要求スペックを参照して実行環境を選択してください。

fine tuningのためのコマンドは以下の通りです。

accelerate launch \
 --multi_gpu \
 --num_processes=$(nvidia-smi -L | wc -l) \
 $(which lerobot-train) \
 --policy.type=groot \
 --policy.push_to_hub=false \
 --dataset.repo_id=${HF_USER}/${YOUR_REPO_ID}  \
 --batch_size=32 \
 --steps=5000 \
 --save_checkpoint=true \
 --wandb.enable=false \
 --save_freq=1000 \
 --log_freq=100 \
 --policy.tune_diffusion_model=false \
 --output_dir=./outputs/

3. フォロワーアームを動かす

実機を動かす準備が整いました。

GROOT N1.5の推論時のGPUの要求スペックも参照してください。

実機を動かすコマンドは以下の通りです。

lerobot-record \
 --robot.type=so100_follower \
 --robot.port=/dev/ttyACM1 \
 --robot.id=my_awesome_follower_arm \
--robot.cameras='{"front":{"type":"opencv","index_or_path":1,"width":1920,"height":1080,"fps":30},"wrist":{"type":"opencv","index_or_path":2,"width":640,"height":480,"fps":30}}' \
 --display_data=false \
 --dataset.repo_id=${HF_USER}/${YOUR_REPO_ID}  \
 --dataset.num_episodes=1 \
 --dataset.single_task="Grab a tape and place it in the box."
 --policy.path=${HF_USER}/${YOUR_TRAINED_MODEL}
 --dataset.episode_time_s=30
 --dataset.reset_time_s=15

無事、Physical AIとロボットアームでテープを掴めました!

最後に

近年Hugging Faceはオープンソースハードウェアの分野にも注力しています。SO101やReachy mini等の廉価なロボットだけでなくヒューマノイド型ロボットReachy2といった様々なオープンソースハードウェアを展開しています。

今後、オープンソースのハードウェアとAIモデルを使ってより手軽にロボット開発ができるようになり、多くの活用方法が見出されることだと思います。

来年以降、ますます加速していくであろうフィジカルAIの活用・開発を今後も継続ウォッチしていきたいと思います!

それでは、ソフトバンク アドベントカレンダー2025 25日目の記事もお楽しみに!

おすすめの記事

条件に該当するページがございません