以前の記事では、Physical AIの実機実験のために導入したOpenArmをご紹介しました。

本記事では、実験の一環で導入した遠隔操縦用ロボットアームであるOpenArms Miniについて、概要から調達、組み立て、遠隔操縦を実行するまでの流れを紹介します。

導入までの経緯

ロボットアーム実機を使って大量のデータセットを収集するには、操作者にかかる時間や労力のコストを可能な限り小さく抑えることが求められます。しかし、OpenArmのリーダー・フォロワー間で遠隔操縦を行う場合、アーム自体の重量が大きいために操縦には相応の労力を要する上に、本体サイズの大きさと設置した台の高さが操作者の身長に合わないこともあり、身体的な負担が課題に挙がっていました。解決策を検討する中で、Enactic社もOpenArmと同じ関節配置を採用した「操縦専用の小型アーム」の開発を進めていることを知り、OpenArm同士による遠隔操縦以外の手段を模索する価値があると判断するに至りました。

OpenArmの概要

OpenArmは、東京に拠点を置くEnactic社が開発しているフルオープンソースの7自由度双腕ロボットアームです。Physical AIの研究開発等をターゲットに設計されており、リーダー・フォロワー構成による双腕テレオペレーション、模倣学習、シミュレーション、実世界でのデータ収集といった用途に利用できます。

概観を次図に示します。人間の上半身を模した形状で、アーム2本が中央の背骨に相当するフレームに固定された構造です。詳細は以前公開した導入記事を参照ください。

OpenArmの概観

OpenArms Miniの概要

OpenArms Miniは、Feetech社製サーボモータをベースとした3Dプリント可能な小型のリーダーアームで、リポジトリにてApache 2.0ライセンスで公開されています。片腕あたり6自由度+グリッパー1自由度の計7自由度の構成です。小型軽量で扱いやすいため、OpenArm同士の遠隔操縦で課題となっていた操縦者の身体的負担や労力を軽減でき、データセット収集を効率化できます。また部材コストも2本で約5万円と比較的安価で導入コストも抑えられます。ソフトウェア面ではLeRobotのフレームワークから扱うこともでき、キャリブレーションから遠隔操縦までを統一的な手順で行えます。

導入したOpenArms Miniの概観

調達・組み立て・配線

OpenArms Miniの調達にあたっては、アーム本体を構成する部材を3Dプリントで作製し、骨格部分にはモノタロウで購入したアルミフレームを使用しました。サーボモータとIF基板は秋月電子通商で購入しています。

実際の組み立てはOpenArms MiniのREADMEにあるassembly orderの項で述べられているように、写真をながめつつ肩から手先へ向かう順に手探りで組み立てました。左右鏡面対称に設計されていないパーツがあるのと、SO-101ほど詳細な組み立て手順が整備されているわけではないために難易度は多少上がりつつも、慣れている人であれば問題なく組み上げられる情報量であると感じました。

OpenArms Miniリポジトリにある完成図写真
画像出典:OpenArms Miniリポジトリ

3Dモデルの改良

実際にOpenArms MiniでOpenArmをテレオペレーションしようとすると、OpenArmとOpenArms Miniでは肘部分の可動範囲が異なっていることがわかりました。OpenArmは腕を一直線に伸ばしたところから90度を超えて135度くらいまで曲がるのに対し、OpenArms Miniは腕を一直線に伸ばしたところから90度までしか曲がりません。また、この範囲を超えて肘を大きく曲げると、部材がサーボのケーブルに接触し、断線するおそれがありました。

OpenArmの肘関節の最大可動域と改良前のOpenArms Miniの肘の可動域の比較
OpenArmの肘関節の最大可動域と改良前のOpenArms Miniの肘の可動域を比較

加えて、OpenArms Miniでは二の腕部分が長いため、モータ付属のケーブルでは長さが足りず、延長が必要でした。さらに、二の腕部分には回転方向の物理的なロック機構がなく、360度回転してしまう構造になっていたため、過剰な回転による断線や誤操作のリスクがありました。

以上の3点を踏まえ、肘部モデルを改良することにしました。ベースとなる3DモデルはSO-101のものを参考にし、次図に示す構造としました。

改良した二の腕の部分の3Dモデル

この改良により、以下のように肘を十分に曲げられるようになりました。

OpenArms Miniの改良後の肘の可動域

本改良は現在、OpenArms MiniリポジトリへのPull Requestからダウンロードすることができます。

動作確認

設置

OpenArms Miniの設置は、背骨に相当する鉛直なアルミフレームにアーム本体をボルトで固定した上で、逆T字になるように背骨下部へ水平向きのアルミフレームを追加してクランプで机と固定しています。こうすることでOpenArms Miniの設置高さや設置場所を手軽に変更でき、取り回しを良くする狙いがあります。

OpenArms Miniを実際に設置した様子

配線図

OpenArmはUSB-CANアダプタを介してPCへ接続しますが、OpenArms Miniはこれと異なりUSBシリアルデバイスとしてPCへ接続します。OpenArms Miniの各腕にインターフェース基板が搭載されており、それぞれが独立したUSBシリアルデバイスとしてPCに認識されます。テレオペレーションの実施時は、以下の図のようにOpenArms Miniの各腕から取得した動きをLeRobotなどのソフトウェアで処理し、OpenArmへの指令値として送信します。

OpenArms MiniでOpenArmをテレオペレーションする際の配線図

ソフトウェア環境構築

OpenArmは2026年7月3日時点でLinuxでのみ動作制御可能です。

検証環境
  • Ubuntu 24.04.1 LTS(x86_64)

  • uv: 0.11.6(x86_64-unknown-linux-gnu)

  • Python: 3.12.3

  • LeRobot: 0.5.1(コミットハッシュ 73782447)

事前準備

LeRobotをインストールします。本記事ではPythonのパッケージマネージャとしてuvを使用しています。

# uv のインストール
curl -LsSf https://astral.sh/uv/install.sh | sh
source $HOME/.local/bin/env

# LeRobotのインストール
git clone https://github.com/huggingface/lerobot.git
cd ~/lerobot
uv sync --extra openarms --extra feetech --extra hardware

CANの使用に必要なユーティリティをインストールします。

sudo apt update
sudo apt install -y can-utils iproute2

CAN FDのUSBアダプタ用にgs_usbをロードします。ロードできたら、ipコマンドでCANデバイスがPCに認識されているか確認します。ACCESSの環境ではcan0,can1として表示されました。

注意:can0,can1は2ch USB-CAN FDアダプタに依存して認識されます。OpenArmのフォロワー以外にリーダーなどを繋いでいる場合はLinuxのデバイス検出順に依存してcan2,can3などになり得ます。再起動やUSBコネクタの差し直しで入れ替わることがあるため、実行前にip link showなどで対応関係を確認してください。

sudo modprobe gs_usb
ip link show

CANデバイスとして認識されたら、CANのセットアップコマンドを実行します。

uv run lerobot-setup-can --mode=setup --interfaces=can0,can1

以下のコマンドで、モータの応答確認ができます。

uv run lerobot-setup-can --mode=test --interfaces=can0,can1

次にキャリブレーションを行います。まずbi_openarm_followerを用いてOpenArm側をキャリブレーションします。キャリブレーションは以下のコマンドで実行できます。この時OpenArmの腕は真下に下げ、グリッパーは閉じた状態にしてください。

uv run lerobot-calibrate \
--robot.type=bi_openarm_follower \
--robot.left_arm_config.port=can0 \
--robot.left_arm_config.side=left \
--robot.right_arm_config.port=can1 \
--robot.right_arm_config.side=right \
--robot.id=my_bimanual_follower

次にOpenArms Miniのキャリブレーションをします。左右の腕ごとにポートを検出します。

uv run lerobot-find-port

ACCESSの環境では左腕側が/dev/ttyACM1で右腕が/dev/ttyACM0と検出されました。OpenArms Miniの腕を下方向にまっすぐ下げ、グリッパーを閉じた状態で、以下のコマンドを実行してキャリブレーションを行ってください。キャリブレーション中に、グリッパーを最大まで開くよう求められます。このときに設定した値が、OpenArm操作時におけるグリッパーの最大開閉位置となります。

uv run lerobot-calibrate \
    --teleop.type=bi_openarm_mini \
    --teleop.left_arm_config.port=/dev/ttyACM1 \
    --teleop.right_arm_config.port=/dev/ttyACM0 \
    --teleop.id=my_openarm_mini_leader

遠隔操縦

OpenArms Miniでテレオペを試す場合は以下のコマンドを実行します。この時毎回キャリブレーションを求められますが、enterでスキップしてください。

uv run lerobot-teleoperate \
  --robot.type=bi_openarm_follower \
  --robot.left_arm_config.port=can1 \
  --robot.left_arm_config.side=left \
  --robot.right_arm_config.port=can0 \
  --robot.right_arm_config.side=right \
  --robot.id=my_bimanual_follower \
  --teleop.type=openarm_mini \
  --teleop.left_arm_config.port=/dev/ttyACM1 \
  --teleop.left_arm_config.side=left \
  --teleop.right_arm_config.port=/dev/ttyACM0 \
  --teleop.right_arm_config.side=right \
  --teleop.id=my_openarm_mini_leader

うまくキャリブレーションができていると、動画のようにスムーズに動作させることができます。


本記事ではOpenArms Miniの調達から遠隔操作の動作確認までをご紹介しました。今後はこの実機を使ってデータセット取得・ファインチューニング・実機デプロイと進んでいく予定です。