LeRobot documentation

YAM

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

YAM

YAMは、I2RT Robotics製の、模倣学習とエンボディドAI向けの6自由度アームです。LeRobotでは、yam_followerが線形DM4310グリッパーを備えた標準的なYAM v1アーム1本を駆動し、bi_yam_followerが2本を駆動します。lerobot-calibrate、lerobot-rollout、lerobot-replayと組み合わせて使用してください。LeRobotにはまだYAMリーダーアームがないため、YAMはポリシーによって駆動するか、データセットの再生によって駆動されます。

I2RTのガイドに従って腕を組み立て、配線してください。このページではLeRobot側の説明を行います。

ガイド対象範囲
YAM アームシリーズ開梱、マウント、配線、モーターとグリップ
ソフトウェアセットアップCANアダプタ、ビットレート、固定インターフェース名
YAM Cell2つのフォロワーとリーダーを備えたバイマニュアルステーション
YAM follower arm with the linear gripper YAM Cell bimanual station

YAM フォローア(左)と YAM Cell 両手ステーション(右)。LeRobot がフォローアを駆動します。画像は I2RT Robotics のご提供によるものです。

ハードウェアと安全性

各アームにはID 1から7までの7つのモーターが搭載されています。関節1から3にはDM4340、関節4から6およびグリップにはDM4310が使用されています。YAM Pro、Ultra、BIG YAMおよびその他のグリップは、現時点ではサポートされていません。

必要なのは:

  • Linux, and one USB-to-CAN adapter per arm (SocketCAN, classic CAN at 1 Mbit/s).
  • すべてのモーターの CAN タイムアウトは最大 400 ms(8000 ticks、I2RT の値)に設定してください。例えば、I2RT SDK の set_timeout.py --timeout を使用します。このタイムアウトは、LeRobot がコマンドの送信を停止した場合の最後の安全策であり、この設定がない場合、LeRobot はトルクを有効にしません。
  • 初回接続時のインターネットアクセス: 重力補償は、lerobot/robot-urdfs バケットから YAM モデルをダウンロードし、HF_LEROBOT_HOME/robot-urdfs/yam/v1 以下にキャッシュします。

アームを安定した面に固定し、作業スペースを空けておいてください。接続を解除するとトルクがオフになり、アームは重力で落下します。まずアームを支えてください。動作中に電源またはCANアダプタの接続が切断された場合は、プログラムを停止し、アームを支えたうえで、再接続してください。

LeRobot🤗のインストール

インストールガイドに従って、YAMサポートをインストールします:

pip install -e ".[yam]"

これにより、アーム用にmotorbridgeとpython-can、重力補償用にplacoがインストールされます。

ハードウェアを接続する

両アームは同じモーターIDを使用するため、それぞれに独立したCANインターフェースが必要です。

lerobot-setup-can --mode=setup --interfaces=can0 --use_fd=false

2つのアームを使用する場合は、--interfaces=can0,can1 を使用します。このコマンドは sudo ip link を用いて Linux インターフェースを設定し、モーターコマンドは送信しません。2つのアームを使用する場合、再起動後に can0 と can1 が入れ替わる可能性があります。各インターフェースがどのアームを駆動しているかを確認するか、I2RT の ソフトウェアセットアップ を使用して can_follower_l のような固定名を割り当て、それらの名前をポートとして使用してください。

デバイスタイプ

型デバイス
yam_follower単一フォロワー
bi_yam_follower両手フォロワー

2つのアームがある場合、各アームのオプションを--robot.left_arm_config.<option>と--robot.right_arm_config.<option>で設定します。

キャリブレーション

キャリブレーションでは、グリップの限界位置(完全に閉じた状態と完全に開いた状態)のみを測定します。関節は工場出荷時のゼロ位置を維持したままです。以下に示すように、まずアームを折りたたんでください。測定中はトルクがオフになっています。アームを支えながら、手動でグリップのみを動かしてください。各プロンプトでEnterを押してください。既存のキャリブレーションがある場合、接続すると制御が開始されます。既存のキャリブレーションを再利用するにはEnterを押してください。再度測定するにはcを入力してください。LeRobotは、トルクをオフにする前にアームを支えるよう求めます。

YAM arm in its folded position Linear DM4310 gripper

すべての関節がゼロの折り畳み姿勢(左)、および線形DM4310グリップ(右)。画像はI2RT Roboticsの提供によるものです。

単一アーム
2つのアーム
lerobot-calibrate --robot.type=yam_follower --robot.port=can0 --robot.id=yam

後続のコマンドでも同じ--robot.idを使用してください。これにより、LeRobotが保存されたファイルを読み込みます。

観察とアクション

片腕には、観測とアクションの両方でjoint_1.posからjoint_6.pos、そしてgripper.posが含まれます。関節は度数法の絶対角度であり、グリップは0(閉)から100(開)の範囲です。use_degrees=falseにすると、I2RTやMolmoAct2のデータと同様にラジアンと0から1の範囲に切り替わります。use_velocity_and_torque=trueにすると、.velと.torqueの観測が追加されます。アクションは関節の絶対目標値であり、関節の制限値にクリップされます。

2つのアームは、left_およびright_プレフィックスを付けた同じ名前を使用します。アームに設定されたカメラもプレフィックスが付与されますが、トップレベルの--robot.camerasは名前をそのまま保持します。

ポリシーの実行

接続前に、すべての関節がゼロになるようにアームを折りたたみ位置に配置してください。LeRobot は、各関節が測定位置から 11.5° 以内にあることを確認してから、その測定位置から制御を開始します。ポリシーがアクションを送信するまで、何も動きません。

lerobot-rollout \
  --robot.type=yam_follower --robot.port=can0 --robot.id=yam \
  --robot.cameras='{"wrist": {"type": "opencv", "index_or_path": 0, "width": 640, "height": 480, "fps": 30}}' \
  --policy.path=<user>/<policy> \
  --task="Pick up the cube"

2つのアームを使用する場合は、--robot.type=bi_yam_follower --robot.id=bimanual_yam --robot.left_arm_config.port=can0 --robot.right_arm_config.port=can1を使用します。ロールアウトを記録するには、--dataset.repo_id=<user>/rollout_<name>を追加してください。推論を実行してポリシーを評価するを参照してください。lerobot-replayは、同じ--robot.*オプションを使用して、記録されたエピソードを再生します。

最初のアクションの前に、およびcommand_timeout_s(1秒)間アクションが届かない場合、アームは現在の姿勢を保持します。idle_mode=floatの場合、関節は重力補償と軽い減衰が適用され、手動でアームを動かすことができます。この間、グリップの開閉は維持され、トラッキングは手動で動かした位置から再開されます。

安全性

  • モーターの故障またはフィードバックの欠如により、すべてのコマンドが停止します。2つのアームがある場合、いずれかのアームで故障が発生すると、両方のアームが停止します。続行するには、切断してから再接続してください。
  • 重力モデルは、カメラやペイロードを装着していない標準アームをカバーしています。いずれかを追加した後、フロートモードでアームがドリフトしないことを確認し、ドリフトが発生する場合はgravity_factorsを調整してください。

設定オプション

オプションデフォルト説明
port必須SocketCANインターフェース、例えばcan0
use_degreestrue角度は度、グリップは0〜100のスケールです。falseを指定すると、ラジアンと0〜1のスケールになります。
use_velocity_and_torquefalse.vel と .torque の観測値を追加します
idle_modeholdアクションが届かない場合、holdでポジションを維持するか、floatにするか
command_timeout_s1.0アイドルモードに入るまでの、アクションのない秒数
initial_position_degすべてゼロ必須の初期位置。Noneを指定するとチェックがスキップされます
initial_tolerance_deg11.5初期位置からの許容距離
gripper_force_limit_n50.0グリップがオブジェクトでブロックされた後の指の力
gravity_factors[1.0, 1.1, 1.1, 1.2, 1.0, 1.0]重力補償の関節ごとの乗数
cameras{}アームに取り付けられたカメラ

例: MolmoAct2

lerobot/MolmoAct2-BimanualYAM-LeRobot は、allenai/MolmoAct2-BimanualYAM を LeRobot 形式に変換したもので、公開された正規化統計情報が含まれています。ラジアンと 0〜1 のグリッパーで 2 本の YAM アームを用いて学習され、カメラは上、左、右の順で 3 台使用されています。詳細は MolmoAct2 を参照してください。

pip install -e ".[yam,molmoact2,dataset]"

lerobot-rollout \
  --robot.type=bi_yam_follower --robot.id=bimanual_yam \
  --robot.left_arm_config.port=can0 --robot.right_arm_config.port=can1 \
  --robot.left_arm_config.use_degrees=false --robot.right_arm_config.use_degrees=false \
  --robot.cameras='{
    "top": {"type": "opencv", "index_or_path": "/dev/v4l/by-id/TOP_CAMERA", "width": 640, "height": 480, "fps": 30},
    "left": {"type": "opencv", "index_or_path": "/dev/v4l/by-id/LEFT_CAMERA", "width": 640, "height": 480, "fps": 30, "fourcc": "MJPG"},
    "right": {"type": "opencv", "index_or_path": "/dev/v4l/by-id/RIGHT_CAMERA", "width": 640, "height": 480, "fps": 30, "fourcc": "MJPG"}
  }' \
  --policy.path=lerobot/MolmoAct2-BimanualYAM-LeRobot \
  --inference.type=rtc --inference.rtc.execution_horizon=20 --inference.queue_threshold=20 \
  --device=cuda --interpolation_multiplier=2 \
  --interactive=true --play_sounds=false \
  --task="Pick up the red block and place it in the green bin"

/start を入力してポリシーを実行し、/subtask <text> で指示を変更し、/reset で初期位置に戻し、/stop で終了します。リターンは一定時間持続し、YAM の速度制限も引き続き適用されるため、初期位置から遠い位置にあるアームは途中で停止する可能性があります。

Float モードを使用すると、任意の位置からポリシーを開始できます。--robot.left_arm_config.idle_mode=float --robot.right_arm_config.idle_mode=float を追加してください。最初の /start の前、および /reset が完了してから 1 秒以内に、アームを手動で希望する位置まで移動し、そこからポリシーを実行するには /start を入力してください。このために /stop を使用しないでください。セッションを終了し、トルクを無効にしてしまいます。

トラブルシューティング

問題確認
CANインターフェースが存在しないか、ダウンしていますアダプターの電源とUSBケーブルを確認し、ip link showを実行してください。lerobot-setup-canを再度実行してください。
missing or stale motor feedback24 V電源、CAN配線およびターミネーション、モーターID 1〜7、およびportがこのアームのインターフェースであることを確認してください。
誤った腕が動きます各インターフェースがどのアームを駆動しているかを確認するか、インターフェースに固定の名前を割り当ててください。
unsafe motor CAN timeoutI2RT SDK を使用して、すべてのモーターの CAN タイムアウトを最大 400 ms に設定します。
not within initial_tolerance_deg接続する前に、すべての関節をゼロにしてアームを折りたたんでください。
接続時に再度キャリブレーションを求められますキャリブレーション時と同じ--robot.idを使用してください。
アームがフロートモードでドリフトするアームのカメラやペイロードに対してgravity_factorsを調整します。
MolmoAct2は腕を誤った位置に移動させます両方のアームでuse_degrees=falseを設定してください。モデルはラジアンと0〜1のグリップを使用します。

参考文献

Update on GitHub