LeRobot documentation

YAM

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.7.0).
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