Hugging Face Hub からロボットハードウェアへ:Strands Agents と LeRobot の連携
Hugging Face は、Strands Agents と LeRobot を活用して AI モデルを直接ロボットハードウェアへ展開する取り組みを発表し、開発と実装の壁を低減した。
キーポイント
プラットフォームとハードウェアの統合
Hugging Face は同社の Hub を基盤とし、Strands Agents(エージェント機能)および LeRobot(ロボット学習ライブラリ)を組み合わせて、AI モデルを物理的なロボットに直接展開する仕組みを確立した。
開発・実装の民主化
複雑なハードウェア制御や推論パイプラインの構築を抽象化し、研究者や開発者が AI モデルから実機動作までのサイクルを迅速に回せる環境を提供する。
オープンソース生態系の強化
既存の Hugging Face 上のモデル資産を活用可能にし、ロボット分野におけるオープンソースコミュニティと開発ツールの連携を深化させる。
影響分析・編集コメントを表示
影響分析
この発表は、AI モデルの開発と物理的な実装の間にある大きなギャップを埋める重要な一歩であり、ロボティクス分野における「モデルからモノへ」の変換コストを劇的に低下させる。これにより、中小企業や個人開発者でも高度なロボット制御システムの実証が可能になり、業界全体のイノベーションスピードが加速すると予想される。
編集コメント
モデル開発とハードウェア制御の統合をワンストップで可能にするこの動きは、ロボティクス分野の実用化を加速させる決定的な転換点となるだろう。特にオープンソースコミュニティとの親和性が高く、即座に実装テストが可能な点は注目すべき価値がある。
- 構築するもの
- 前提条件
- ステップ 1 - サンプルのセットアップ
- ステップ 2 - デモの記録と Hub へのプッシュ
- ステップ 3 - シミュレーションでのポリシー実行
- ステップ 4 - ポリシーを物理ハードウェアへデプロイ
- ステップ 5 - メッシュによる複数ロボットの協調制御
- サンプルアプリケーションで試す
- セキュリティに関する考慮事項
- クリーンアップ
- これらの要素がどのように連携するか
- 次のステップ
- リソース
- 著者
*Strands Robots における LeRobot の統合のウォークスルー - Hugging Face Hub のデータセットから物理ロボットまで、1 つのエージェントループで完結。オンディスク形式はシミュレーション用と実機用のデータセットで共通し、ポリシーは文字列を切り替えるだけで変更可能。*
ロボットをお持ちで、Hugging Face Hub にデモデータのフォルダがあり、学習させたい新しいタスクがある場合、現在は 5 つの別々のツールが必要です:新しいデモを記録するためのツール、トレーニング用のツール、シミュレーションでのテスト用ツール、ハードウェアへのデプロイ用のカスタムコード、そしてロボットが複数ある場合の協調制御用ツールです。これらの部品はそれぞれ単独では機能しますが、互いに連携しません。
Strands Robots は、AWS からのオープンソース SDK(Apache 2.0)であり、ロボット抽象化機能、シミュレーション、および LeRobot スタックを AgentTools として公開し、これらを単一の Strands エージェントに統合して構成するものです。この統合は意図的に軽量に設計されており、ハードウェアでの記録やキャリブレーションは LeRobot 独自のスクリプトが担当し、エージェントが実際にオーケストレーションを行う部分のみを Strands AgentTools が担います。シミュレーションツールは、LeRobot がハードウェアで書き出すのと同じ形式で LeRobot データセット(LeRobotDatasets)を記録します。GR00T と LerobotLocal は、共通インターフェースの背後でポリシー推論(policy inference)を担当し、MolmoAct2 チェックポイントは LerobotLocal のパスを通じて実行されます。ピアメッシュ(peer mesh)によってエージェントは遠隔ロボットへ展開されます。データセット形式は LeRobot が書き出したまま厳密に維持され、エージェントループがそれを繋ぎ合わせる接着剤となります。
本記事では、単一のエージェント内で完結する 5 つのステップを解説します。まず LeRobot AgentTools を用いてエージェントを構築し、シミュレーション環境で LeRobotDataset としてデモを記録します。次に、同じロボット上でポリシーを実行し、1 つのキーワード引数を変更するだけで、そのエージェントコードを物理的な SO-101 にデプロイします。さらに、Zenoh メッシュを介してファーム全体にコマンドをブロードキャストすることも可能です。最後に、GitHub から動作するサンプルアプリケーションをクローンし、ローカルパソコン上でシミュレーションとして実行できます。デフォルトのパスでは、ハードウェアや GPU、Hugging Face の認証情報は不要です。本記事の実行可能な補完プログラムは examples/lerobot/hub_to_hardware.py および hub_to_hardware.ipynb にあります。ノートブックはデフォルトでシミュレーション専用であり、モックポリシーを使用します。
構築するもの
Strands Robots SDK は、LeRobot スタックを AgentTools として公開し、これらを組み合わせて単一の Strands エージェントを構築します。本記事の例示エージェントは以下の 4 つの機能を実行します:シミュレーション内で新しいデモンストレーションを記録する、その結果を LeRobotDataset として Hub にプッシュする、同じ形式に対してシミュレーション内でポリシーを実行する、そして 1 つのキーワード引数を変更するだけで、同じエージェントコードを物理ロボットにデプロイするです。ロボットが複数ある場合、エージェントは組み込みのピアメッシュを通じてフリート全体を調整できます。ハードウェアでの記録とキャリブレーションについては、LeRobot 独自の CLI(lerobot-record, lerobot-calibrate)がセットアップを担当し、その後の処理はエージェントが引き継ぎます。
図 1. *Robot("so100") はデフォルトで MuJoCo ベースのシミュレーションを使用します。mode="real" を指定すると、LeRobot に駆動されるハードウェアロボットが返されます。両方のモードは同じ DatasetRecorder と同じポリシープロバイダーを共有するため、シミュレーションでキャプチャされたデータセットとハードウェア上でキャプチャされたデータセットは、どちらも同じディスク上の LeRobotDataset 形式を使用します。
この取り組みを可能にするには、2 つの設計上の選択が必要です。第一に、Robot("so100") はデフォルトでシミュレーション(ハードウェアなし、リスクなし)を返しますが、mode="real" を指定すると LeRobot によって駆動されるハードウェア搭載ロボットが返されます。どちらのモードでもエージェントコードは同一です。第二に、LeRobotDataset を書き込む DatasetRecorder は、シミュレーションパス と LeRobot 自身のハードウェア記録の両方で共有されているため、MuJoCo でキャプチャされたデータセットと物理的な SO-101 からキャプチャされたデータセットは同じ形式になります。
Python の 5 行で全体の流れを実装できます:
from strands_robots import Robot
from strands import Agent
arm = Robot("so100") # mode="sim" (デフォルト - 安全、ハードウェア不要)
agent = Agent(tools=[arm])
agent("赤い立方体をつかんでください")
以下に、この呼び出し内で実際に何が起こっているのかをステップバイステップで説明します。
前提条件
最小構成(デフォルトのシミュレーションパス)
- Python 3.12 以上。Linux または macOS 上で動作(MuJoCo バックエンドには Apple Silicon がサポートされています)。
- エージェントの推論に使用する Strands 互換モデルプロバイダー。AWS 認証情報を持つ Amazon Bedrock、Anthropic API、OpenAI、またはローカルで実行中の Ollama。
- Strands Robots をインストールextras付きでインストール:uv pip install "strands-robots[sim-mujoco,lerobot,mesh]"
これだけです。本記事の例は、これらの 3 つだけでラップトップ上でエンドツーエンドに動作します。
Advanced (hardware deployment, real policies, Hub push)
- Hugging Face のアカウントと、データセットのプッシュやポリシーチェックポイントのプルに使用できる書き込み権限を持つトークンが必要です。
- ハードウェアパスの場合:SO-101 フォロワーとリーダーのペア、または LeRobot でサポートされている他のロボットを使用します。両方のデバイスには、~/.cache/huggingface/lerobot/calibration/ 配下にキャリブレーションファイルが必要です。
- ローカル GR00T 推論の場合:ビデオメモリが少なくとも 16 GB ある NVIDIA GPU と、Docker がインストールされた環境が必要です。本記事では gr00t_inference ツールの lifecycle="full" アクションを使用しており、これによりイメージのプル、チェックポイントのダウンロード、コンテナの起動を 1 つのコマンドで実行できます。
Step 1 - Set up the example
Strands Robots をインストールし、例示ファイルを取得します:
uv pip install "strands-robots[sim-mujoco,lerobot,mesh]"
git clone https://github.com/strands-labs/robots.git
cd robots
エージェントがデータセットをプッシュしたり、ポリシーを Hugging Face Hub からプルしたりする場合は、Hugging Face トークンをエクスポートしてください。本記事のデフォルトのシミュレーションパスではこの設定は必須ではありません。例示プログラムは Mock ポリシーを使用してエンドツーエンドで実行され、Hub へのアクセスなしでデータセットをローカルキャッシュに書き込みます。
export HF_TOKEN=hf_...
実行可能な例は、strands-labs/robots リポジトリ内の MuJoCo および LIBERO の例と同じ場所にあり、examples/lerobot/hub_to_hardware.py (Python スクリプト) と hub_to_hardware.ipynb (ノートブック) に格納されています。ノートブックが推奨される出発点です:JupyterLab で開き、ハードウェアを接続せずにシミュレーションモードで上から順にセルを実行してください。
ステップ 2 - デモの記録と Hub へのプッシュ
シミュレーションツールは、LeRobot がハードウェア上で書き込むのと同じ形式で LeRobotDatasets を記録します。ハードウェアは不要です。シミュレーションツールの start_recording アクションは、同じ DatasetRecorder クラスを介して動作し、関節状態とアクションのパラレル形式スキーマが同一であり、カメラごとの MP4 レイアウトも同一です。エージェントのプロンプトはほぼ同じです:
from strands import Agent
from strands_robots import Robot
robot = Robot("so100") # デフォルトで mode="sim"
agent = Agent(tools=[robot])
agent(
"'赤い立方体をつかんで箱に入れる'というデモを、FPS 30 で Mock ポリシープロバイダーを使用して記録してください。データセットを my_user/cube_picking_sim に書き込み、完了したら Hub にプッシュしてください。"
)図 2. *MuJoCo シミュレーションにおける記録シーン:地上平面にある赤い立方体に向かって SO-100 アームが伸びている様子を LeRobotDataset としてキャプチャ。このデフォルトパスでは、ハードウェアも GPU も Hugging Face の認証情報も不要です。*
Mock ポリシーは意図的なものです:これは訓練済みのチェックポイントなしにワークフローをエンドツーエンドで実行できるように、プレースホルダーの関節動作を生成します。ロボットは把持を完了するのではなくランダムな動きを行い、記録は構造的には完全です(有効な関節状態、有効なカメラフレーム、形式が整った LeRobotDataset エピソード)。ただし、デモ自体はトレーニングデータとして有用ではありません。以下のステップ 3 では、GR00T または LerobotLocal を実装して実際の把持動作を実現します。このステップで実際にキューブのピッキングを行うには、--policy lerobot_local --checkpoint allenai/MolmoAct2-SO100_101 を実行してください(これは MolmoAct2 チェックポイント で、config.json から自動検出され、LerobotLocal パス経由でルーティングされます)。プロンプト、データセット形式、およびエージェントコードは変更されません。
次の展開が証明となります。LeRobot の独自データセットローダーは、Strands 固有のコードパスなしにシミュレーション記録データを読み込みます:
from lerobot.datasets.lerobot_dataset import LeRobotDataset
dataset = LeRobotDataset("my_user/cube_picking_sim")
print(dataset.features)
{'observation.state': Sequence(...),
'observation.images.front': VideoFrame(...),
'action': Sequence(...),
'episode_index': Value(...), 'frame_index': Value(...), ...}
この features dict は、Hugging Face Hub 上の任意の LeRobot データセットと同じ形状をしています。同じ列名、同じ parquet+MP4 のレイアウト、そして同じローダーパスです。ハードウェアで記録されたデータを消費するトレーニングスクリプトは、シミュレーションで記録されたデータも変更なしにそのまま消費します。必要であれば、シミュレーションからプッシュしたデータセットを、ハードウェアの録画と同じ Hub リポジトリ内に並べて置くことも可能です。
*記録された LeRobotDataset のエピソードのうち 1 つを、レコーダーが書き込んだカメラごとの MP4 から再生したもの。トレーニングスクリプトが読み取るディスク上の動画と同一です。
ハードウェアでの録画
シミュレーションではなく物理的な SO-101 でデモンストレーションを記録するには、LeRobot の record CLI を直接使用します。Strands による統合では、このコマンドを AgentTool としてラップしていません。なぜなら LeRobot はすでにその作業をきれいにこなしているからです。
lerobot-calibrate --robot.type=so101_follower --robot.id=my_follower
lerobot-calibrate --robot.type=so101_leader --robot.id=my_leader
lerobot-record \
--robot.type=so101_follower --robot.id=my_follower \
--teleop.type=so101_leader --teleop.id=my_leader \
--dataset.repo_id=my_user/cube_picking \
--dataset.single_task='Pick up the red cube and place it in the box' \
--dataset.num_episodes=25 \
--dataset.push_to_hub=true
このコマンドによって Hub にアップロードされるデータセットは、シミュレーションの記録と同じ形式です。これ上でポリシーをファインチューニングするには、LeRobot のトレーニング CLI(lerobot-train)を実行してください。トレーニング自体はこの投稿の範囲外であり、標準的な LeRobot ワークフローに従います。ステップ 3 以降では、エージェントは元のチェックポイントかファインチューニング済みのチェックポイントを相互に切り替えて使用します。SO-101 ハードウェアセットアップの詳細、キャリブレーションの手順、トラブルシューティングについては、例フォルダの README をご覧ください。
ステップ 3 - シミュレーションでポリシーを実行する
データセットが Hub にある状態で、次のステップはポリシーの実行です。この例では、デフォルトのシミュレーションモードで Robot() ファクトリを使用し、gr00t_inference をアタッチしてエージェントが推論コンテナを管理できるようにしています:
from strands import Agent
from strands_robots import Robot, gr00t_inference
robot = Robot("so100") # mode="sim" by default
agent = Agent(tools=[robot, gr00t_inference])
agent(
"Start GR00T inference on port 5555 with the cube-picking checkpoint "
"from my_user/cube-picker. Then ask the robot to pick up the red cube."
)
内部では、エージェントは gr00t_inference(action="lifecycle", lifecycle="full", ...) を実行して GR00T コンテナイメージ を取得し、Hub からチェックポイント(学習済みモデルの保存ファイル)をダウンロードした上で推論サービスを開始します。その後、policy_provider="groot" を指定してシミュレーション上のロボットに対して run_policy アクションを実行し、GR00T サービスのホストとポートを policy_config 辞書に渡します(コンテナはポート 5555 でアクセス可能です)。このポリシーによるアクションチャンクでシミュレーションが進行し、その結果のレンダリングは Simulation.render を介して利用できます。
図 3. *学習済みポリシー(GR00T または MolmoAct2 のチェックポイント)を使用すると、エージェントは SO-100 を駆動してシミュレーション内で赤い立方体を把持します。これは Mock ポリシーが模倣する動作です。*
コンテナや ZeroMQ (ZMQ) を使用しないプロセス内推論を好む開発者の場合は、gr00t_inference の代わりに Hub リポジトリから読み込まれた LerobotLocalPolicy インスタンスに置き換えてください。プロバイダーは lerobot/ 組織内のすべてのモデル ID をプロセス内パスへルーティングします:
from strands_robots.policies import create_policy
policy = create_policy("lerobot/act_aloha_sim_transfer_cube_human")
LerobotLocalPolicy は、ACT、Diffusion Policy、SmolVLA、π0、および π0.5 をサポートしており、LeRobot 独自のポリシーレジストリが config.json から解決可能なものはすべて利用可能です。フローマッチングポリシー(π0、SmolVLA)で rtc_config が提供されている場合、Real-Time Chunking は自動的に有効になります。
NVIDIA の最近リリースされた Cosmos 3 も、同じインターフェースの背後にあるポリシープロバイダーとして利用可能です。そのため、どのプロバイダーを指してもエージェントコードは変更されません。
*注:LerobotLocalPolicy は trust_remote_code=True で Hugging Face モデルを読み込みます。STRANDS_TRUST_REMOTE_CODE=1 を設定してオプトインし、信頼できる組織からのチェックポイントのみを読み込んでください。
ステップ 4 - ポリシーを物理ハードウェアにデプロイする
これはステップ 3 のコードと同じですが、キーワード引数の一つが変更されています。Robot ファクトリは、LeRobot の make_robot_from_config で駆動されるハードウェアバックドのロボットを返します:
robot = Robot(
"so100",
mode="real",
port="/dev/ttyACM0",
data_config="so100_dualcam",
cameras={
"front": {"type": "opencv", "index_or_path": "/dev/video0", "fps": 30},
"wrist": {"type": "opencv", "index_or_path": "/dev/video2", "fps": 30},
},
)
agent = Agent(tools=[robot, gr00t_inference])
agent(
"Start GR00T inference on port 5555 with the cube-picking checkpoint "
"from my_user/cube-picker. Then ask the robot to pick up the red cube."
)
同じエージェントプロンプトが、今度は物理的なアームに対して実行されます。ハードウェアパスでは、関節コマンドやカメラ読み取りのために LeRobot のロボット抽象化(robot abstraction)が使用され、ポート 5555 で到達可能な GR00T コンテナがアクションチャンクを生成します。
SO-101 に対してこの処理を実行する前に、フォロワーとリーダーの両方のキャリブレーション(較正)が完了している必要があります。各デバイスごとに LeRobot のキャリブレーションコマンド(lerobot-calibrate)を一度実行してください。ファイルは ~/.cache/huggingface/lerobot/calibration/ 以下に保存され、ハードウェアに触れる Strands コードパスはそこから読み取ります。もしキャリブレーションが欠落している場合、エージェントは LeRobot ドライバーレイヤーからのエラーを表示します。
Step 5 - メッシュで複数のロボットを協調させる
これまでは一度に一台のロボットしか操作していませんでした。The mesh は、Strands Robots が複数台のロボットを扱うための仕組みです。机の上のリーダーアームが別の部屋のフォロワーアームをテレオペレーションする様子や、5 台の SO-101 が並行して同じ倉庫タスクを実行している様子、あるいはヒューマノイドがモバイルベースと協調している様子を想像してください。これらすべてがメッシュパターンです。このメッシュはオープンソースのピアツーピアプロトコルである Zenoh を基盤として構築されており、IP アドレスの管理やディスカバリーコードの記述、ブローカーの選択を行う必要はありません。新しいロボットは接続された瞬間に自動的にメッシュ上に現れ、エージェントは一度にすべてのロボットと通信できます。
すべての Robot() および Simulation() は、自動的に Zenoh ピアメッシュに参加します。robot_mesh ツールは、エージェントに対して、発見、構造化されたコマンド、ブロードキャスト、緊急停止などのフリート運用のための語彙を提供します:
agent = Agent(tools=[robot_mesh])
agent(
"List every robot and simulation on the mesh. "
"Then send 'go to home pose' to each one in parallel."
)
エージェントは、ローカルおよび発見されたピアを列挙するために robot_mesh(action="peers") を呼び出し、その後、タイムアウト付きで構造化コマンドをすべてのピアに送信するために robot_mesh(action="broadcast", ...) を呼び出します。このトラフィックを AWS IoT Core 経由でルーティングしてクロスネットワークフリートを可能にするには、[mesh-iot] エクストラを追加してください。プロジェクトドキュメントにある robot_mesh ツールのアクションリファレンスでは、購読 (subscribe)、監視 (watch)、受信トレイ (inbox)、および構造化されたピアツーピアコマンドを含む完全な語彙がカバーされています。
デフォルトでは、物理的に作動するすべてのメッシュアクションは、実行前に人間の承認による割り込みを待機します。これには、フリート全体のブロードキャストと緊急停止、および単一ピアへの通知 (tell)、送信 (send)、停止 (stop) が含まれます。このセットは STRANDS_MESH_HITL_ACTIONS 環境変数で調整できます(all、none、またはカンマ区切りのサブセットのいずれかを設定)。この例を初めて実行すると、ターミナルに robot_mesh-broadcast-approval プロンプトが表示されます。ブロードキャストを承認するには、y (または yes / approve) と入力してください。承認は LLM のツール引数とは別の経路で提供されるため、コマンド本文に承認フラグを忍ばせようとするプロンプトインジェクション攻撃でも、このゲートを迂回することはできません。
トランスポートは、エージェントコードに触れることなくスケーリングします。組み込みの Zenoh メッシュは自動的なフォールバックとして機能し、LAN 上ではブローカーなしでピアディスカバリーを Zenoh マルチキャストが処理します。また、[mesh-iot] エクストラを追加することで、AWS IoT Core(MQTT5 with mTLS)を経由してクラウド上のフリートへトラフィックをルーティングし、LAN とクラウドの両方を 1 つの API の背後に集約する BridgeTransport を使用します(STRANDS_MESH_BACKEND=bridge で選択可能)。
本番環境用のフリートでは、Arm と共同開発したデバイス認識型ネットワークレイヤーである Device Connect が、ディスカバリー、プレゼンス、構造化 RPC、イベントルーティング、および安全性の管理を担当します。同じ robot_mesh ツールは、Device Connect が利用可能な場合はそちらを経由して処理し、そうでない場合は組み込みの Zenoh メッシュにフォールバックします。そのため、本記事のエージェントコードはどちらの場合でも変更されません。セットアップと現在の可用性については、Device Connect のドキュメント を参照してください。
サンプルアプリケーションで試す
完全なサンプルは、GitHub の strands-labs/robots リポジトリ内の examples/lerobot フォルダにあります。これには 5 つのステップすべてが、単一の CLI スクリプト(hub_to_hardware.py)とノートブック(hub_to_hardware.ipynb)にパッケージ化されています。CLI のデフォルト実行では、Mock ポリシーを使用してシミュレーション上でエンドツーエンドで動作します。GPU も Docker も必要なく、Hugging Face の認証情報も不要です。
uv pip install "strands-robots[sim-mujoco,lerobot,mesh]"
git clone https://github.com/strands-labs/robots.git
cd robots
export STRANDS_MESH_LOCAL_DEV=1
python examples/lerobot/hub_to_hardware.py
記録されたデータセットは ~/.cache/huggingface/lerobot/local/strands-cube-pick/ に保存されます。ローカルに保持するのではなく Hugging Face Hub へプッシュしたい場合は、HF_TOKEN を書き込み権限でエクスポートした後に --hf-user <your-user> パラメータを指定してください。ステップ 3 で実際の把持動作を実現するには、--policy groot --checkpoint <hf_repo> (Docker と NVIDIA GPU が必要) または --policy lerobot_local --checkpoint <hf_repo> (GPU と STRANDS_TRUST_REMOTE_CODE=1 が必要) を指定します。
ノートブック (examples/lerobot/hub_to_hardware.ipynb) は、各ステップの間に解説を挟みながら、セル単位で同じワークフローを追跡します。JupyterLab で開き、シミュレーションモードで上から順に実行してください。
セキュリティに関する考慮事項
このセットアップで紹介されたコードスニペットは、HuggingFace を用いて Strands Robots を設定する「Hello World」例です。より本格的なプロダクション環境での利用においては、ユーザーが認識しておくべき重要な考慮点がいくつかあります:
プロンプトインジェクション
信頼できないデータをエージェントに供給すると、プロンプトインジェクションが発生し、信頼性の低いコンテキストが LLM の指示として扱われるリスクがあります。これらのロボットが物理空間で動作することを考えると、これは追跡すべき重要なリスクです。この挙動を緩和するためには、開発者はロボットに対して信頼できるソースからのデータのみを提供するように注意する必要があります。すべての入力データを信頼できない場合、開発者はエージェントに利用可能なツールを制限し、ロボットが安全性に関わる重要な行動をとらないようにするべきです。
ロボットメッシュ認証の動作
このブログのコードスニペットで共有されている STRANDS_MESH_LOCAL_DEV=1 設定は、認証やアクセス制御なしにロボットメッシュを初期化します。つまり、同じネットワーク上のあらゆるデバイスがロボット群に対してコマンドを提供できることになります。これは信頼された開発環境では許容されますが、信頼できないネットワークや本番環境には適していません。これらのユースケースでは、STRANDS_MESH_AUTH_MODE=mtls の設定が必要です。
群全体へのアクションに対するオペレーター承認
robot_mesh ツールの物理的アクチュエーション(physically-actuating actions)は、ネットワーク上のピアに影響を及ぼします。broadcast と emergency_stop はすべてのピアに到達しますが、tell、send、stop は単一のターゲットピアのみを対象とします。エージェントがこれらのコマンドを自律的に発行する(またはプロンプトインジェクションの下で実行する)ことを防ぐため、デフォルトではこれら 5 つのアクションすべてが、人間を介したループ(human-in-the-loop)による割り込みによって制限されています。エージェントが制限されたアクションを呼び出すと、Strands ランタイムはエージェントループを一時停止し、LLM のツール引数に対するオペレーターによる承認をオフバンドで求めます。STRANDS_MESH_HITL_ACTIONS 環境変数を使用して、制限対象のセットを変更できます(all、none、またはカンマ区切りのサブセット)。アクションごとのレート制限、コマンド検証、監査証跡は、この割り込み処理と併行して実行されます。エージェントループ外(単なるスクリプトやユニットテスト)では、制限されたアクションは失敗します。
クリーンアップ
前述のワークフローは、GR00T コンテナを起動し、ハードウェア上でシリアルポートを開き、ローカルデータセットキャッシュに書き込みます。環境をクリーンな状態に戻すには:
- GR00T 推論コンテナを停止する:agent.tool.gr00t_inference(action="stop", port=5555) を実行するか、lifecycle="teardown" を使用してコンテナ自体も削除してください。
- シリアルポートを解放する:ハードウェアパスを実行した場合、SO-101 フォロワーとリーダーの接続を切断してください。
- 任意でローカルのデータセットキャッシュを削除する:記録されたデータセットは ~/.cache/huggingface/lerobot/<repo_id> の下に保存されます。Hugging Face Hub にプッシュしたデータセットには影響しません。
これらの要素がどのように連携するか
この統合における中心的な設計上の選択は、Strands Robots が LeRobot がすでに提供している機能を再実装しないという点です。ハードウェア抽象化(Hardware Abstraction)、キャリブレーション、およびデータセット形式は、すべて上位のレポジトリ(upstream)に維持されます。Strands は、これらを自然言語から構成可能にするための AgentTool 表面層を追加するだけです。
これには2つの帰結があります。ユーザーにとっては、Hub 上のすべてのデータセットがエージェントによって拡張・微調整・デプロイ可能な資産となり、変換ステップは不要となります。開発者にとっては、シミュレーションデータとハードウェアデータが単一のファイル形式を共有するため、一方のために書かれたトレーニングスクリプトを変更せずに他方でも利用可能です。シミュレーションと実機の違いは、アーキテクチャ上の隔たりではなく、デプロイ時の詳細事項へと変わります。
ここから先へ進むには
図 4. *Strands Robots カタログは、アーム、ヒューマノイド、四足歩行ロボット、そしてハンドを網羅しており、すべてが同じ MuJoCo シミュレーション内にあり、同じ Robot() ファクトリーによって管理されています。本記事で取り上げられている SO-100 は、サポートされている多くの実装体の一つに過ぎません。
Strands Robots の公式ドキュメント Strands Robots documentation では、ロボットカタログ、シミュレーション、ポリシープロバイダー、メッシュ、Device Connect について詳しく解説されています。より大規模なワークロードに対応するため、strands-labs/robots-sim リポジトリには、Isaac Sim や Newton を含む重負荷向けのシミュレーションバックエンドや、LIBERO ベンチマークの例が用意されています。両方のバックエンドは本記事で示された同じ Robot 抽象化(Robot abstraction)に接続されるため、スケールアップしてもエージェントコードは変更されません。
貢献は Apache 2.0 ライセンスの下で歓迎されます。このワークフローを使用して何かを構築した場合は、何がうまくいき、何が失敗したかを明記して issue を開いてください。開発者のフィードバックが直接必要な箇所に届くことで、SDK の改善速度が最も高まります。
リソース
- Strands Robots (SDK, AgentTools, Robot factory): github.com/strands-labs/robots, Apache 2.0 ライセンス
- Strands Robots ドキュメント(完全版): strands-labs.github.io/robots
- Strands Robots Sim (例、シミュレーションバックエンド): github.com/strands-labs/robots-sim
- 本記事の例: examples/lerobot/hub_to_hardware.py および hub_to_hardware.ipynb
- How to Build Physical AI Agents: Natural Language for Real-World Robotics: Live Stream and Blog
- Diving Deep on Physical AI | S1E4 | Automate with NVIDIA NeMo Agent Toolkit and Bedrock AgentCore: Live Stream
- LeRobot: github.com/huggingface/lerobot - データセット、ポリシー、ハードウェアドライバ
- Strands Agents SDK: github.com/strands-agents/harness-sdk
- SmolVLA: SmolVLA
- Pi0: Pi0
- NVIDIA Isaac-GR00T N1.7: GR00T N1.7
- NVIDIA Cosmos3 Nano: Cosmos 3 Nano
Authors
Cagatay Cali氏は、AWSでアジェンティックAIとロボティクスに注力する研究エンジニアです。彼は、開発者が自然言語を通じてロボットシステムを制御できるようにし、あらゆるスキルレベルのビルダーがエージェントおよびロボティクスの開発にアクセス可能となるよう、AIエージェントと物理的ロボットを接続するインターフェースを設計しています。
Sundar Raghavan氏は、AWSのアジェンティックAI基盤チームに所属するシニアソリューションアーキテクトです。彼はAmazon Bedrock AgentCoreの開発者体験を主導し、SDKおよびCLIの所有権を持ち、フレームワークとエコシステム統合戦略を推進しています。彼の焦点は、開発者がAWS上で生産環境向けAIエージェントを構築、展開、スケールする方法にあります。現在、その焦点を物理的AIへと拡張し、Strands Robotsでの共同作業を通じて、ロボティクス分野にも同じアジェンティック開発者体験をもたらすことに注力しています。
原文を表示
- What you'll build
- Prerequisites
- Step 1 - Set up the example
- Step 2 - Record demonstrations and push to the Hub
- Step 3 - Run a policy in simulation
- Step 4 - Deploy the policy to physical hardware
- Step 5 - Coordinate multiple robots with the mesh
- Try it using the sample application
- Security Considerations
- Clean up
- How this fits together
- Where to go from here
- Resources
- Authors
*A walkthrough of the LeRobot integration in Strands Robots - one agent loop, from a Hub dataset to a physical robot, with sim-to-real datasets in the same on-disk format and policies you swap with a string.*
You have a robot, a folder of demonstration data on the Hugging Face Hub, and a new task you want it to learn. Today that takes five separate tools: one to record new demonstrations, another to train, a third to test in simulation, custom code to deploy on hardware, and yet another to coordinate when you have more than one robot. The pieces work on their own. They don't talk to each other.
Strands Robots is an open source SDK from AWS (Apache 2.0) that exposes robot abstractions, simulation, and the LeRobot stack as AgentTools that you compose into a single Strands agent. The integration is deliberately thin: LeRobot's own scripts handle hardware recording and calibration, and the Strands AgentTools come in for the parts an agent actually orchestrates. The simulation tool records LeRobotDatasets in the same format LeRobot writes on hardware. GR00T and LerobotLocal serve policy inference behind a common interface, and MolmoAct2 checkpoints run through the LerobotLocal path. A peer mesh fans the agent out to remote robots. The dataset format stays exactly as LeRobot wrote it; the agent loop is the glue.
This post walks you through five steps inside a single agent: build the agent over the LeRobot AgentTools, record a demonstration as a LeRobotDataset in simulation, run a policy on the same robot, deploy the same agent code to a physical SO-101 with one keyword argument change, and broadcast commands across a fleet over the Zenoh mesh. At the end, you can clone the working sample application from GitHub and run it on your laptop in simulation. No hardware, no GPU, no Hugging Face credentials needed for the default path. The runnable companion to this post lives at examples/lerobot/hub_to_hardware.py and hub_to_hardware.ipynb. The notebook is sim-only and Mock-policy by default.
What you'll build
The Strands Robots SDK exposes the LeRobot stack as AgentTools that you compose into one Strands agent. The example agent in this post does four things: record new demonstrations in simulation, push the result to the Hub as a LeRobotDataset, run a policy in simulation against that same format, and deploy the same agent code to a physical robot with one keyword argument change. When you have more than one robot, the agent can coordinate the whole fleet through a built-in peer mesh. For hardware recording and calibration, LeRobot's own CLIs (lerobot-record, lerobot-calibrate) handle the bring-up; the agent picks up from there.
Figure 1. *Robot("so100") defaults to a MuJoCo-backed simulation; mode="real" returns a hardware robot driven by LeRobot. Both modes share the same DatasetRecorder and the same policy providers, so a dataset captured in sim and a dataset captured on hardware use the same on-disk LeRobotDataset format.*
Two design choices make this work. First, Robot("so100") returns a simulation by default (no hardware, no risk), and mode="real" returns a hardware-backed robot driven by LeRobot. The agent code is identical across both modes. Second, the DatasetRecorder that writes a LeRobotDataset is shared between the simulation path and LeRobot's own hardware recording, so a dataset captured in MuJoCo and one captured from a physical SO-101 are in the same format.
The whole workflow in five lines of Python:
from strands_robots import Robot
from strands import Agent
arm = Robot("so100") # mode="sim" (default - safe, no hardware)
agent = Agent(tools=[arm])
agent("Pick up the red cube")
What follows is what's actually happening inside that call, step by step.
Prerequisites
Minimal (default simulation path)
- Python 3.12+, on Linux or macOS (Apple Silicon supported for the MuJoCo backend).
- A Strands-compatible model provider for the agent's reasoning. Amazon Bedrock with AWS credentials, the Anthropic API, OpenAI, or Ollama running locally.
- Strands Robots installed with the install extras: uv pip install "strands-robots[sim-mujoco,lerobot,mesh]"
That's it. The example in this post runs end-to-end on a laptop with these three.
Advanced (hardware deployment, real policies, Hub push)
- A Hugging Face account and token with write permission, for pushing datasets and pulling policy checkpoints from the Hub.
- For the hardware path: an SO-101 follower and leader pair, or any other LeRobot-supported robot. Both devices need calibration files under ~/.cache/huggingface/lerobot/calibration/.
- For local GR00T inference: an NVIDIA GPU with at least 16 GB of video memory and Docker installed. The post uses the gr00t_inference tool's lifecycle="full" action, which pulls the image, downloads a checkpoint, and starts the container in one call.
Step 1 - Set up the example
Install Strands Robots and get the example files:
uv pip install "strands-robots[sim-mujoco,lerobot,mesh]"
git clone https://github.com/strands-labs/robots.git
cd robots
Export your Hugging Face token if you want the agent to push datasets or pull policies from the Hub. This is optional for the default simulation path in this post; the example runs end-to-end with the Mock policy and writes the dataset to your local cache without needing Hub access.
export HF_TOKEN=hf_...
The runnable example lives at examples/lerobot/hub_to_hardware.py (Python script) and hub_to_hardware.ipynb (notebook), in the strands-labs/robots repository alongside the MuJoCo and LIBERO examples. The notebook is the recommended starting point: open it in JupyterLab and run cells top-to-bottom in simulation mode without any hardware connected.
Step 2 - Record demonstrations and push to the Hub
The simulation tool records LeRobotDatasets in the same format LeRobot writes on hardware. No hardware required. The Simulation tool's start_recording action writes through the same DatasetRecorder class: same parquet schema for joint states and actions, same per-camera MP4 layout. The agent prompt is almost identical:
from strands import Agent
from strands_robots import Robot
robot = Robot("so100") # mode="sim" by default
agent = Agent(tools=[robot])
agent(
"Record a demonstration of 'pick the red cube and place it in the box' "
"using the Mock policy provider at FPS 30. Write the dataset to "
"my_user/cube_picking_sim and push to the Hub when done."
)
Figure 2. *The recording scene in MuJoCo simulation: the SO-100 arm reaching toward a red cube on the ground plane, captured to a LeRobotDataset. No hardware, no GPU, no Hugging Face credentials needed for this default path.*
The Mock policy is intentional: it generates placeholder joint actions so the workflow runs end-to-end without a trained checkpoint. The robot moves through random motions rather than completing the grasp, and the recording is structurally complete (valid joint states, valid camera frames, a well-formed LeRobotDataset episode), but the demonstration itself isn't useful as training data. Step 3 below swaps in GR00T or LerobotLocal for real grasping behavior. To see actual cube-picking in this step, run --policy lerobot_local --checkpoint allenai/MolmoAct2-SO100_101 (a MolmoAct2 checkpoint, auto-detected from its config.json and routed through the LerobotLocal path); the prompt, dataset format, and agent code stay the same.
The proof is what happens next. LeRobot's own dataset loader reads the sim-recorded data with no Strands-specific code path:
from lerobot.datasets.lerobot_dataset import LeRobotDataset
dataset = LeRobotDataset("my_user/cube_picking_sim")
print(dataset.features)
# {'observation.state': Sequence(...),
# 'observation.images.front': VideoFrame(...),
# 'action': Sequence(...),
# 'episode_index': Value(...), 'frame_index': Value(...), ...}
This features dict is identical in shape to any LeRobot dataset on the Hub: same column names, same parquet+MP4 layout, same loader path. Training scripts that consume hardware-recorded data consume the sim-recorded data without modification. Datasets pushed from sim sit alongside hardware recordings in the same Hub repository if you want them to.
*A single episode from a recorded LeRobotDataset, played back from the per-camera MP4 the recorder wrote, the same on-disk video a training script reads.*
Recording on hardware
To record demonstrations on a physical SO-101 instead of simulation, use LeRobot's record CLI directly. The Strands integration doesn't wrap that command as an AgentTool because LeRobot already does the job cleanly:
lerobot-calibrate --robot.type=so101_follower --robot.id=my_follower
lerobot-calibrate --robot.type=so101_leader --robot.id=my_leader
lerobot-record \
--robot.type=so101_follower --robot.id=my_follower \
--teleop.type=so101_leader --teleop.id=my_leader \
--dataset.repo_id=my_user/cube_picking \
--dataset.single_task='Pick up the red cube and place it in the box' \
--dataset.num_episodes=25 \
--dataset.push_to_hub=true
The dataset that lands on the Hub from this command is in the same format as the simulation recording. To fine-tune a policy on it, run LeRobot's training CLI (lerobot-train); training itself is out of scope for this post and follows the standard LeRobot workflow. From Step 3 onward, the agent picks up either the original or a fine-tuned checkpoint interchangeably. For full SO-101 hardware setup, calibration walkthroughs, and troubleshooting, see the README in the example folder.
Step 3 - Run a policy in simulation
With the dataset on the Hub, the next step is to run a policy. The example uses the Robot() factory in its default sim mode, then attaches gr00t_inference so the agent can manage the inference container:
from strands import Agent
from strands_robots import Robot, gr00t_inference
robot = Robot("so100") # mode="sim" by default
agent = Agent(tools=[robot, gr00t_inference])
agent(
"Start GR00T inference on port 5555 with the cube-picking checkpoint "
"from my_user/cube-picker. Then ask the robot to pick up the red cube."
)
Under the hood, the agent runs gr00t_inference(action="lifecycle", lifecycle="full", ...) to pull the GR00T container image, download the checkpoint from the Hub, and start the inference service. It then runs a run_policy action on the simulated robot with policy_provider="groot", passing the GR00T service's host and port in the policy_config dict (the container is reachable on port 5555). The simulation steps with the policy's action chunks, and a render of the result is available via Simulation.render.
Figure 3. *With a trained policy (a GR00T or MolmoAct2 checkpoint), the agent drives the SO-100 to grasp the red cube in simulation, the behavior the Mock policy stands in for.*
For developers who prefer in-process inference (no container, no ZeroMQ (ZMQ)), swap gr00t_inference for a LerobotLocalPolicy instance loaded from a Hub repository. The provider routes any model ID under the lerobot/ organization to the in-process path:
from strands_robots.policies import create_policy
policy = create_policy("lerobot/act_aloha_sim_transfer_cube_human")
LerobotLocalPolicy supports ACT, Diffusion Policy, SmolVLA, π0, and π0.5, anything LeRobot's own policy registry can resolve from a config.json. Real-Time Chunking turns on automatically for flow-matching policies that ship an rtc_config (π0, SmolVLA).
NVIDIA's recently released Cosmos 3 is also available as a policy provider behind the same interface, so the agent code stays the same whichever provider you point it at.
*Note: LerobotLocalPolicy loads Hugging Face models with trust_remote_code=True. Set* STRANDS_TRUST_REMOTE_CODE=1 *to opt in, and only load checkpoints from organizations you trust.*
Step 4 - Deploy the policy to physical hardware
This is the same code as Step 3, with one keyword argument changed. The Robot factory returns a hardware-backed robot driven by LeRobot's make_robot_from_config:
robot = Robot(
"so100",
mode="real",
port="/dev/ttyACM0",
data_config="so100_dualcam",
cameras={
"front": {"type": "opencv", "index_or_path": "/dev/video0", "fps": 30},
"wrist": {"type": "opencv", "index_or_path": "/dev/video2", "fps": 30},
},
)
agent = Agent(tools=[robot, gr00t_inference])
agent(
"Start GR00T inference on port 5555 with the cube-picking checkpoint "
"from my_user/cube-picker. Then ask the robot to pick up the red cube."
)
The same agent prompt now runs against a physical arm. The hardware path uses LeRobot's robot abstraction for joint commands and camera reads, and the GR00T container reachable on port 5555 generates the action chunks.
Before this runs against your SO-101, calibration for both follower and leader has to be in place. Run LeRobot's calibration command (lerobot-calibrate) once per device; the files land under ~/.cache/huggingface/lerobot/calibration/ and any Strands code path that touches the hardware reads them from there. If a calibration is missing, the agent surfaces the error from the LeRobot driver layer.
Step 5 - Coordinate multiple robots with the mesh
Up to now we've driven one robot at a time. The mesh is how Strands Robots handles more than one. Picture a leader arm on your desk teleoperating a follower arm in another room, or five SO-101s running the same warehouse task in parallel, or a humanoid coordinating with a mobile base. All of those are mesh patterns. The mesh is built on Zenoh, an open source peer-to-peer protocol, and you don't manage IP addresses, write discovery code, or pick a broker; new robots show up on the mesh the moment they come up, and the agent can talk to all of them at once.
Every Robot() and every Simulation() joins a Zenoh peer mesh automatically. The robot_mesh tool gives the agent a vocabulary for fleet operations such as discovery, structured commands, broadcasts, and emergency stop:
agent = Agent(tools=[robot_mesh])
agent(
"List every robot and simulation on the mesh. "
"Then send 'go to home pose' to each one in parallel."
)
The agent calls robot_mesh(action="peers") to enumerate locals and discovered peers, then robot_mesh(action="broadcast", ...) to send the structured command to every peer with a timeout. Add the [mesh-iot] extra to route this traffic over AWS IoT Core for cross-network fleets. The robot_mesh tool's action reference in the project documentation covers the full vocabulary: subscribe, watch, inbox, and structured peer-to-peer commands.
By default, every physically-actuating mesh action pauses for a human approval interrupt before it runs: the fleet-wide broadcast and emergency_stop, plus the single-peer tell, send, and stop. You can tune this set with the STRANDS_MESH_HITL_ACTIONS environment variable (set it to all, none, or a comma-separated subset). The first time you run this example, you'll see a robot_mesh-broadcast-approval prompt in your terminal; type y (or yes / approve) to authorize the broadcast. The approval is delivered out-of-band of the LLM's tool arguments, so a prompt-injection attempt that tries to slip an approval flag into the command body cannot bypass the gate.
The transport scales without touching agent code. The built-in Zenoh mesh is the automatic fallback: on the LAN, Zenoh multicast handles peer discovery with no broker, and adding the [mesh-iot] extra routes traffic through AWS IoT Core (MQTT5 with mTLS) for cloud fleets, with a BridgeTransport that fans LAN and cloud behind one API (select it with STRANDS_MESH_BACKEND=bridge).
For production fleets, Device Connect, a device-aware networking layer developed in collaboration with Arm, handles discovery, presence, structured RPC, event routing, and safety. The same robot_mesh tool dispatches through Device Connect when it is available and falls back to the built-in Zenoh mesh otherwise, so the agent code in this post is unchanged either way. See the Device Connect documentation for setup and current availability.
Try it using the sample application
The full sample is on GitHub at strands-labs/robots in the examples/lerobot/ folder. It packages all five steps into a single CLI script (hub_to_hardware.py) and a notebook (hub_to_hardware.ipynb). The CLI defaults run end-to-end in simulation with the Mock policy. No GPU, no Docker, no Hugging Face credentials needed.
uv pip install "strands-robots[sim-mujoco,lerobot,mesh]"
git clone https://github.com/strands-labs/robots.git
cd robots
export STRANDS_MESH_LOCAL_DEV=1
python examples/lerobot/hub_to_hardware.py
The recorded dataset lands at ~/.cache/huggingface/lerobot/local/strands-cube-pick/. To push to the Hugging Face Hub instead of keeping it local, pass --hf-user <your-user> after exporting HF_TOKEN with write scope. For real grasping behavior in Step 3, pass --policy groot --checkpoint <hf_repo> (requires Docker + NVIDIA GPU) or --policy lerobot_local --checkpoint <hf_repo> (requires a GPU and STRANDS_TRUST_REMOTE_CODE=1).
The notebook (examples/lerobot/hub_to_hardware.ipynb) walks through the same workflow cell by cell, with narration between each step. Open it in JupyterLab and run top-to-bottom in simulation mode.
Security Considerations
The code snippets shown in this setup represent a “hello world” example of setting up Strands Robots with HuggingFace. For more serious, production-ready use cases there are some important considerations users should be aware of:
Prompt Injection
Supplying untrusted data into agents can lead to prompt injection, where untrustworthy context is treated as LLM instructions. Given the actuation of these robots in physical space, this is an important risk to track. To mitigate this behavior, developers should be careful to feed the robots only data that comes from a trusted source. If not all input data can be trusted, developers should restrict the tools available to the agent to prevent the robots from making safety-critical actions.
Robot Mesh Auth Behavior
The STRANDS_MESH_LOCAL_DEV=1 setting shared in the code snippets in this blog initializes the robot mesh without authentication or access controls. This means that any device on the same network can provide commands to the robot fleet. This is acceptable for trusted development environments, but is not suitable for untrusted networks or production environments. For these use cases, STRANDS_MESH_AUTH_MODE=mtls is required.
Operator approval for fleet-wide actions
The robot_mesh tool's physically-actuating actions affect peers on the network: broadcast and emergency_stop reach every peer, while tell, send, and stop reach a single targeted peer. To prevent an agent from issuing these commands autonomously (or under prompt injection), all five are gated behind a human-in-the-loop interrupt by default. When the agent invokes a gated action, the Strands runtime pauses the agent loop and asks the operator to approve out-of-band of the LLM's tool arguments. You can adjust the gated set with the STRANDS_MESH_HITL_ACTIONS environment variable (all, none, or a comma-separated subset). Per-action rate limits, command validation, and an audit trail run alongside the interrupt. Outside an agent loop (a bare script or unit test), the gated actions fail closed.
Clean up
The preceding workflow starts a GR00T container, opens serial ports on hardware, and writes a local dataset cache. To return your environment to a clean state:
- Stop the GR00T inference container: agent.tool.gr00t_inference(action="stop", port=5555), or use lifecycle="teardown" to remove the container as well.
- Release the serial ports: if you ran the hardware path, disconnect the SO-101 follower and leader.
- Optionally remove the local dataset cache: the recorded dataset lives under ~/.cache/huggingface/lerobot/<repo_id>. Datasets you pushed to the Hub are unaffected.
How this fits together
The integration's central design choice is that Strands Robots doesn't reimplement what LeRobot already provides. Hardware abstraction, calibration, and the dataset format stay upstream. Strands adds the AgentTool surface that makes them composable from natural language.
Two consequences follow. For users, every dataset on the Hub is an asset an agent can extend, fine-tune from, and deploy against with no conversion step. For developers, simulation data and hardware data share a single file format, so training scripts written for one consume the other unchanged. The line between sim and real becomes a deployment detail, not an architectural divide.
Where to go from here
Figure 4. *The Strands Robots catalog spans arms, humanoids, quadrupeds, and hands, all in the same MuJoCo simulation and behind the same Robot() factory. The SO-100 in this post is one of many supported embodiments.*
The full Strands Robots documentation covers the robot catalog, simulation, policy providers, the mesh, and Device Connect in depth. For larger workloads, the strands-labs/robots-sim repository hosts heavier simulation backends including Isaac Sim and Newton, plus a LIBERO benchmark example. Both backends plug into the same Robot abstraction shown in this post, so the agent code stays the same as you scale up.
Contributions are welcome under Apache 2.0. If you build something with this workflow, open an issue with what worked and what didn't. The SDK improves fastest when developer feedback lands directly on the surface that needs it.
Resources
- Strands Robots (SDK, AgentTools, Robot factory): github.com/strands-labs/robots, Apache 2.0
- Strands Robots docs (full documentation): strands-labs.github.io/robots
- Strands Robots Sim (examples, simulation backends): github.com/strands-labs/robots-sim
- The example: examples/lerobot/hub_to_hardware.py and hub_to_hardware.ipynb
- How to Build Physical AI Agents: Natural Language for Real-World Robotics: Live Stream and Blog
- Diving Deep on Physical AI | S1E4 | Automate with NVIDIA NeMo Agent Toolkit and Bedrock AgentCore: Live Stream
- LeRobot: github.com/huggingface/lerobot - datasets, policies, hardware drivers
- Strands Agents SDK: github.com/strands-agents/harness-sdk
- SmolVLA: SmolVLA
- Pi0: Pi0
- NVIDIA Isaac-GR00T N1.7: GR00T N1.7
- NVIDIA Cosmos3 Nano: Cosmos 3 Nano
Authors
Cagatay Cali is a Research Engineer at AWS focused on Agentic AI and robotics. He designs interfaces that connect AI agents to physical robots, enabling developers to control robotic systems through natural language and making agents and robotics development accessible to builders at any skill level.
Sundar Raghavan is a Sr Solutions Architect at AWS on the Agentic AI Foundations team. He leads the developer experience for Amazon Bedrock AgentCore, owning the SDK and CLI, and drives the framework and ecosystem integrations strategy. He focuses on how developers build, deploy, and scale production AI agents on AWS. He is currently extending that focus into physical AI, collaborating on Strands Robots to bring the same agent developer experience to robotics.
関連記事
エージェント性は十分か?独自ツールを用いたオープンモデルのベンチマーク調査
Hugging Face が、独自に構築したツール環境において、オープンソースモデルがどれほど「エージェント性」を発揮できるかを評価するベンチマーク手法を発表しました。
AI コーディングエージェントがロボットに GPU 取り付けやジップタイ切断を教示
Ars Technica は、計算リソースとトークン予算を与えられた AI コーディングエージェントが、自律的にロボットアームの訓練プログラムを策定し、GPU の挿入やジップタイの切断といった物理作業を習得した事例を紹介している。
Domyn と AISquared が Ai2 のオープンリリースをどう活用したか
Domyn と AISquared は、透明性やライセンス管理が不可欠な規制業界向けに AI モデルを開発する際、Ai2 のオープンソースリリースを活用している。これにより顧客の信頼とコンプライアンス確保を実現している。
今日のまとめ
AI日報で今日の重要ニュースをまとめ読み