関節が5つの腕に、6つの数で決まる手先の状態を指定すると、正確に届く見込みは数学的にゼロになる。SO-100がそれでも動くのは、制御モデルが関節の角度をじかに出力し、逆運動学という計算を丸ごと避けているからだ。

機械学習の実務者がロボットの学習に取り組むとき、最初の壁になるのは機械を直接動かすことへの気後れである。ロボットアームSO-100を題材にした英語の解説は、その壁を越えるために、腕の構成、データの記録、目標の追い方、機械学習の制御モデルによる駆動、状態の表し方を順に説明する。内容はすべて新型のSO-101にも当てはまり、大半はどのロボットアームにも通用する。本稿はこの解説を日本語で全文たどりながら、公開されているシミュレーション用のモデルと論文で数値を確かめ、2つの検算を加える。資料の取得日は2026年9月19日である。制御の話に入る前に、SO-100とSO-101がどんな腕なのかを、開発元の部品表と組み立ての説明書から整理しておく。

SO-100とは、3Dプリンターの部材と同じサーボ12個で組む公開設計のロボットアーム

SO-100は、The Robot Studioがハギングフェイスと協力して設計した最初のロボットアームである。設計データは無償で公開されており、誰でも部品を買い集めて自分で組める。骨格にあたる部材は3Dプリンターで作り、関節にはFeetech製のサーボSTS3215を入れる。ロボット学習用のソフトウェアLeRobotで動かすことを前提に作られている。

一式は操作用の腕と作業用の腕の2本で、サーボは1本に6個、合わせて12個を使う。開発元の部品表では、12個とも同じSTS3215である。ほかに要るのはモーター制御基板2枚、電源2個、USB-Cケーブル、机に固定するクランプ、ドライバーで、部品表の合計は232ドル、欧州で244ユーロになる。作業用の腕1本だけなら123ドル、欧州で128ユーロで済む。

同じサーボを使いながら、2本の腕の役割は違う。操作用の腕は人が手で動かすので、軽く動かなければならない。そこでSO-100では、操作用の腕に入れる6個のサーボから歯車を抜く。LeRobotの組み立ての説明書によれば、こうするとサーボは角度を読み取る部品としてだけ働き、摩擦が減って操作しやすくなる。後の節で見るように、操作用の腕の角度は学習の正解になる。歯車を抜く作業は、その角度を人の手の動きに近づけるための工夫である。

SO-101とは、歯車を抜く作業をなくし、操作用の腕の減速比を関節ごとに変えた後継機

SO-101はSO-100の次世代版である。開発元は改良点を3つ挙げている。配線を見直したこと、歯車を抜く作業が要らなくなり組み立てやすくなったこと、操作用の腕のモーターを新しくしたことだ。開発元はSO-100の説明書をすでに非推奨の扱いにしており、現行の説明書はSO-101向けに書かれている。

3つ目の改良が、歯車を抜かずに済む理由でもある。SO-101の操作用の腕は、減速比の違う3種のSTS3215を関節ごとに使い分ける。肩の旋回と肘の曲げは191分の1、肩の上下は345分の1、手首の曲げ、手首のひねり、手先の開閉は147分の1である。LeRobotの説明書は狙いを、腕が自重を支えられ、しかも大きな力をかけずに動かせるようにするためだと説明している。腕全体の重さがかかる肩の上下には減速比の大きいサーボを置いて垂れ下がりを防ぎ、先端に近い軽い関節には減速比の小さいサーボを置いて手応えを軽くしたわけだ。歯車を抜けば軽く動く代わりに、腕を支える抵抗も減る。SO-101は減速比の使い分けで、軽さと支えの両立を図った。

操作用の腕の歯車は、SO-100では抜き、SO-101では関節ごとに減速比を変える
操作用の腕の歯車は、SO-100では抜き、SO-101では関節ごとに減速比を変える

作業用の腕は6個とも345分の1で、SO-100から変わらない。したがって、関節の数と並び、位置制御という方式、本稿が以下で扱う制御の性質は、2つの機種で共通である。

SO-100とSO-101の構成の比較、違いは操作用の腕と組み立ての手間に集中する

2つの機種の構成を、開発元の部品表と説明書から並べると次のようになる。

表1 SO-100とSO-101の構成

区分SO-100SO-101
位置づけ最初の機種。説明書は非推奨後継機。現行の説明書の対象
関節の数1本に6つ1本に6つ
サーボの数2本で12個2本で12個
サーボの種類1種3種 (345分の1が7個、191分の1が2個、147分の1が3個)
作業用の腕6個とも同じサーボ6個とも345分の1
操作用の腕6個とも歯車を抜く歯車は抜かず、減速比を関節ごとに変える
配線当初の設計見直して改良
部材の樹脂PLA、充填率13%PLA+、充填率15%
2本一式の部品代232ドル229.88ドル
作業用1本の部品代123ドル121.94ドル

出所: The Robot Studioの部品表と説明書、LeRobotの組み立ての説明書。部品代は3Dプリンターの部材を含まない

部品代はほとんど変わらない。SO-101の229.88ドルは、サーボ12個 (単価13.89ドル)、モーター制御基板2枚 (同10.6ドル)、電源2個 (同10ドル)、ケーブル7ドル、クランプ9ドル、ドライバー6ドルを足した額で、部品表の合計と一致する。同じ一式は欧州で226.3ユーロ、人民元建てで1,343.16元、作業用の腕1本なら欧州で124.3ユーロである。違いは金額ではなく、操作用の腕の作りと組み立ての手間に集中している。SO-101の3Dプリンター用のデータは、操作用と作業用がそれぞれ1つのファイルにまとめられ、造形台が220ミリ四方の機種向けと、205ミリ×250ミリの機種向けが用意されている。部材は2本に共通のものが9点、操作用だけのものが持ち手や引き金など3点、作業用だけのものが動く側の爪など2点である。

日本でも部品はそろう。開発元の部品表には購入先として秋月電子通商が載っており、サーボは1個2,980円、モーター制御基板は980円、電源は1,550円である。この3品目を2本分そろえると40,820円になる。組み立てキットを扱う販売元は9社あり、うちSeeed Studioのキットは秋月電子通商でも買える。SO-101を2本使う応用例も公開されている。移動台、300ワット時の電池、手首のカメラ2台、頭部の深度カメラを組み合わせた双腕の移動ロボットXLeRobotで、総額は660ドルとされる。

サーボには電圧の違う2つの版もある。回転を止められた状態で出せる最大のトルクは、7.4ボルト版が1.62ニュートンメートル (6ボルトで動かしたとき)、12ボルト版が2.94ニュートンメートルで、開発元は7.4ボルト版で足りるとしている。この数字は、後の節でモーターの弱さを扱うときにもう一度使う。

ロボットアームの制御は、毎秒30回の目標角度を5つの関節へ送ることに尽きる

SO-100は、骨にあたる部材6つと、その間をつなぐ関節5つでできている。この5つが、物をつかむ手先の位置と向きを決める。手先そのものも開閉するので、関節と部材がもう1つずつ加わる。作業用の腕では、土台から順に、肩の旋回、肩の上下、肘の曲げ、手首の曲げ、手首のひねり、手先の開閉の6つの関節が並ぶ。

SO-100の6つの関節と、それぞれが担う動き
SO-100の6つの関節と、それぞれが担う動き

各関節にはサーボが入っている。サーボはモーター、減速機、回転角を測るエンコーダー、制御回路の4つからなる。制御回路はその関節の目標角度を受け取り、エンコーダーから現在の角度を読む。そして1秒に何回も、加えるべきトルクを決め、それに対応する電圧をモーターへ送る。電圧はトルク、ギア、速度で決まる。

制御モデルからサーボへ、目標角度が届くまでの流れ
制御モデルからサーボへ、目標角度が届くまでの流れ

したがって腕を動かすとは、1秒に数十回、全関節の目標角度を伝えることにほかならない。ロボット学習用のソフトウェアLeRobotでは毎秒30回である。これを関節の位置制御と呼ぶ。サーボの制御法はほかにもあるが、SO-100が使うのはこの方式である。目標角度を出す側が制御モデルで、サーボの外に置かれる。ロボット学習の分野では方策と呼ばれる。

公開されているシミュレーション用のモデルも同じ作りになっている。グーグル・ディープマインドが配布するモデル集MuJoCo Menagerieには、開発元のThe Robot Studioが公開した設計データから起こしたSO-100のモデル (第1.3版) が収められており、6つの関節すべてが位置制御で動く。以下、これを公開モデルと呼ぶ。関節が動かせる範囲は次の通りである。

表2 SO-100の公開モデルで関節が動かせる範囲

関節下限上限
肩の旋回−110.0度110.0度
肩の上下−190.2度10.0度
肘の曲げ−10.0度179.9度
手首の曲げ−95.1度95.1度
手首のひねり−159.9度159.9度
手先の開閉−10.0度100.3度

出所: MuJoCo MenagerieのSO-100のモデル。ラジアンから度への換算は記者

サーボを構成する減速機とモーターは、産業用ロボットでは日本の上場企業が主要な供給元になっている部品でもある。ハーモニック・ドライブ・システムズ (6324)、ナブテスコ (6268)、安川電機 (6506) がその例で、関節1つの原価のどこに金がかかるかは関節部品の原価を分解した記事で扱った。

実演データの正解は操作用の腕の角度で、作業用の腕との差が力を表す

目標角度を送るという仕組みは、そのまま実演データの記録法にもなる。SO-100の一式は2本の腕からなる。人が手で動かす操作用の腕と、それを真似て動く作業用の腕で、英語ではそれぞれリーダー、フォロワーと呼ばれる。操作用の腕は、人が小さな力で動かせるように作られている。その関節角度はサーボから読み取られ、目標角度として作業用の腕へ送られる。作業用の腕は操作用の腕の関節角度を写すように動く。英語の解説はこの追従の様子を、関節ごとに色を分け、操作用の腕の角度を太く淡い線、作業用の腕の角度を細い線で重ねた記録で示している。

このとき操作用の腕の関節角度、作業用の腕の関節角度、取り付けたカメラの画像を時系列で記録しておけば、入力と出力の組からなる遠隔操作のデータができあがる。操作用の腕の角度が出力、つまり学習の正解で、残りが入力である。

なぜ作業用ではなく操作用の腕の角度を正解にするのか。英語の解説はここを説明していないが、模倣学習の手法ACTを提案した2023年4月23日付の論文が理由を述べている。「作業用ではなく操作用の腕の関節位置を使うことが重要である。加える力の大きさは、下位のPID制御を通じて、両者の差によって暗黙のうちに決まるためだ」。次の節で見るように、サーボは目標角度と現在の角度の差に比例したトルクを出す。物を強く押したいとき、操作者は操作用の腕を物の奥まで押し込む。作業用の腕は物に阻まれて止まるが、目標との差が開いた分だけ強く押す。作業用の腕の角度を正解にすると、この差、すなわち力の情報が消えてしまう。同じ論文の装置では、遠隔操作と記録はどちらも毎秒50回で行われている。

ダンパーの強さは固定なのに、慣性モーメントは腕の伸ばし方で10倍以上変わる

SO-100のサーボはPID制御を使う。PID制御は3つの部品にたとえられる。関節を目標角度へ引くばね (比例のP)、目標を行き過ぎないよう止めるダンパー (微分のD)、そして積分の項 (I) である。Iの項は、いつまでも残る一方向のずれを時間をかけて測り、それを消すのに要るトルクを上乗せする。重力がばねの力を打ち消して釣り合いの点を目標からずらすような外力を、これで相殺する。SO-100はこのIの項をゼロに設定しており、残り続けるずれは補正しない。公開モデルでも、関節の駆動は比例の強さ50と減衰比1だけで定義され、積分の項は無い。

PとDの釣り合いを取るのは簡単ではない。減衰が足りなければ目標を行き過ぎ、強すぎれば動きがのろくなる。行き過ぎない最小の減衰を臨界減衰と呼び、このばねでは、減衰の強さDが2·√(P·J) に等しいとき成り立つ。Dは角速度あたりに加えるトルク、Jはその関節が振り回すものすべての慣性モーメントである。

厄介なのは、Jが一定ではないことだ。腕が関節より先に張り出すほどJは大きくなる。肩の上下の関節では、腕を折り畳んだときと伸ばしたときで10倍以上違う。ところが制御回路のDは固定されているので、関節が臨界減衰になるのはJがある1つの値のときだけである。それより腕を伸ばせば減衰不足になって行き過ぎ、畳めば過減衰になってのろのろ動く。同じ関節と同じばねでも、ダンパーの強さを3通りに変えると、目標角度への近づき方はまるで変わる。英語の解説の比較では、手先の目標位置を黒丸、目標角度を破線で示し、ばねとダンパーが出すトルクの推移を矢印と曲線で並べている。

ここで1つ検算する。減衰比は、ダンパーの強さDを臨界減衰の値2·√(P·J) で割ったものである。DとPが固定なら、減衰比は1÷√Jに比例する。折り畳んだ状態で臨界減衰 (減衰比1) に合わせた関節のJが10倍になると、減衰比は1÷√10 = 0.316まで落ちる。これを制御工学の公式に当てはめると、行き過ぎの割合は35.1%になる。目標まで30度動かせば10度以上行き過ぎる計算である。

ただし実際にはここまで悪くならない。モーター自身の回転子が大きな一定の値を慣性に上乗せするため、10倍という比は大きく縮むからだ。公開モデルでは、各関節に回転子の慣性として0.1キログラム平方メートルが設定されている。腕の側の慣性が曲げ方で変わっても、この一定の値が比の分母と分子の両方に足されるので、比は1に近づく。

もう1つ、安価なロボットアームのモーターはかなり弱く、出せるトルクが限られている。目標角度が大きく、あるいは速く変わりすぎると、ばねと減衰のトルクの和がモーターの最大トルクで頭打ちになる。すると出力は入力に比例しなくなり、臨界減衰をはじめとする都合のよい性質は失われる。目標角度を大きく飛ばすと関節が行き過ぎるのはこのためで、英語の解説の実験では、止まり切れないほど速くなったのは140度の飛びだけだった。この実験のトルクの上限はシミュレーション用モデルの3.5ニュートンメートルで、モーターはまず加速のために、次に減速のためにこの上限へ張り付く。公開モデルの定義でも力の範囲は−3.5から3.5と書かれており、数値は一致する。先に見た実物のサーボの最大トルクは1.62ニュートンメートルと2.94ニュートンメートルで、どちらもこの3.5を下回る。実機のモーターは、シミュレーションよりさらに早く上限に張り付くことになる。

関節5つでは6つの数を満たせず、狙った位置と向きに届く確率は0%になる

腕全体に戻る。5つの関節にそれぞれ動かせる範囲があるので、腕の状態は5つの角度の組で表せる。これを関節空間と呼ぶ。5つの角度を座標とする5次元の箱で、i番目の座標が関節iの角度にあたる。手先の開閉は6番目の座標を足すが、腕を動かさないのでここでは除く。一方、多くの場合に関心があるのは作業空間である。手先の位置 (x, y, z) と向き (ロール、ピッチ、ヨー) の計6つの数で表す6次元の空間だ。関節空間の点がすべて物理的に許されるわけではなく、10%以上では部材どうしがぶつかる。肩を少し下げて肘を深く曲げた状態では、接触が27か所、重なりが45ミリに達する例が示されている。

部材どうしがぶつかる関節角度の領域
部材どうしがぶつかる関節角度の領域

関節空間から作業空間への換算を順運動学と呼ぶ。土台から始めて、回転と平行移動を順に掛け合わせていくだけで、1回ごとの変換は関節の角度とその直後の部材の形で決まる。MuJoCoのようなシミュレーターは、計算の1刻みごと、初期設定では毎秒500回、順運動学を計算して腕の各部が空間のどこにあるかを求め、そこに物理法則を当てはめる。公開モデルは時間の刻みを指定していないので、この初期設定の0.002秒がそのまま使われる。

逆運動学はその逆で、作業空間の点が与えられたとき、順運動学でそこに行き着く関節空間の点を探す。順運動学に問題は無いが、逆運動学は3つの理由で厄介である。

1つ目は、順運動学が1対1の対応でないことだ。関節空間の各点は作業空間の1点に対応するが、関節空間の複数の点が作業空間の同じ点に対応しうる。産業用ロボットアームのUR5eでは、肘を上に張った形と下に落とした形が、手先のまったく同じ位置と向きを与える。

関節の角度が違っても、手先の位置と向きは同じになる
関節の角度が違っても、手先の位置と向きは同じになる

したがって制御モデルが目標の座標を次々に出力する場合、どの答えを選ぶかに注意しないと、かけ離れた関節角度の間を飛び移ってしまう。UR5eの手先に同じ円を描かせる実験では、逆運動学を毎回最初から解く方法と、1つ前の答えを出発点にして解く方法とで、腕の動きがまったく違ってくる。

2つ目は、順運動学が作業空間を埋め尽くさないことである。作業空間の大半の点には、対応する関節角度が存在しない。遠すぎる、あるいは関節の範囲を外れるためだ。SO-100ではこれが特に深刻になる。順運動学は滑らかな対応で、出発点の関節空間は5次元、行き先の作業空間は6次元である。5次元のものを滑らかに写した先は、たかだか5次元の面にしかならず、6次元の体積、数学でいうルベーグ測度は0になる。紙をどう曲げても部屋の体積を占めないのと同じ理屈である。平たく言えば、手先の目標の向きと、腕の届く範囲にある目標の位置を偏りなく無作為に選ぶと、SO-100がそこへ正確に届く確率は0%になる。

伸ばし切る最後の1ミリに、肘は10.3度回らなければならない

3つ目は、順運動学に特異点があることだ。特異点とは、関節をどう動かしても手先を動かせない方向が生じる腕の形を指す。数学では、順運動学の微分にあたるヤコビ行列の階数が落ちる配置と定義される。腕を伸ばし切ったときがその例である。特異点へ一定の速さでまっすぐ近づく、あるいはそこから離れると、必要な角速度とトルクは無限大へ向かう。手先の速さを保ったまま腕を伸ばし切る動きがこれにあたる。

理由は、手先の届く距離が伸ばし切ったときに最大になり、そこでは肘の角度を変えても距離がほとんど変わらなくなるからだ。山の頂上では、少し歩いても高さがほとんど変わらない。だから最後のεだけ距離を稼ぐには、およそ√εの肘の角度が要る。そして√εの傾きは0で無限大になる。

これをSO-100の寸法で確かめる。公開モデルから求めた部材の長さは、上腕が116.0ミリ、前腕が135.0ミリで、合わせて251.0ミリである。上腕と前腕の2本で届く距離は、余弦定理からr = √(l1² + l2² + 2·l1·l2·cosθ) と書ける。θは伸ばし切った状態からの肘の角度である。伸ばし切る近くではr ≈ (l1+l2) − c·θ² と近似でき、係数cはl1·l2 ÷ (2(l1+l2))、SO-100の寸法では0.0312 (メートル毎ラジアン2乗) になる。残りの距離がθの2乗に比例するので、θは残りの距離の平方根に比例する。

表3 伸ばし切るまでの残りの距離と、それに要る肘の角度

残りの距離肘の角度1ミリあたり
50ミリ73.8度1.5度
10ミリ32.6度3.3度
1ミリ10.3度10.3度
0.1ミリ3.2度32.4度

出所: SO-100の公開モデルの部材の長さから記者が計算。上腕と前腕の2本に単純化している

最後の10ミリを伸ばすのに肘は32.6度回り、そのうち最後の1ミリだけで10.3度を使う。丸める前の値では10.26度÷32.55度で、距離では1割の区間に角度の31.5%を費やす計算になる。これは1÷√10にほぼ等しい。手先が一定の速さで進むなら、肘は終わりに近づくほど速く回らなければならない。

伸ばし切る近くで、関節の速さがモーターの上限を超える
伸ばし切る近くで、関節の速さがモーターの上限を超える

英語の解説の実験は、この通りの結果を示している。腕が手先の目標の点へ向けて伸びていく4つの場面を並べ、その時刻を縦の破線で角度と角速度の図に重ねたものだ。約8.1秒かけて腕を伸ばす間、手先は一定の速さで動いているのに、肘の曲げは約155度から約25度へ、手首の曲げは約−60度から約−10度へ、肩の上下は約−105度から約−30度へと、終わりに向けて急に動く。角速度は伸ばし切る直前に跳ね上がり、毎秒約40度というモーターの上限を突き抜ける。記者が図から読み取った始点と終点を使うと、肘の曲線は「角度 = 25 + 45.7×√(8.1 − 経過秒数)」の形でおおむね再現できる。この式では動き始めの速さが毎秒8.0度、モーターの上限の毎秒40度を超えるのは伸ばし切る0.33秒前になる。モーターは角速度にもトルクにも上限があるので、腕の動きは指示から遅れていく。

最後の1ミリに近づくほど、肘の角度が急に増える
最後の1ミリに近づくほど、肘の角度が急に増える

制御モデルに関節の角度を出力させれば、0%は問題にならない

制御回路が読むのは目標角度である。だから作業空間の点を出力する制御モデルは、その出力をまず逆運動学で関節角度に直し、それをサーボへ送ることになる。どちらの空間で出力させるかは、学習データの成り立ちで決まる。

表4 3つの制御モデルと出力の形

制御モデル出力する空間角度そのものか差分か
OpenVLA作業空間差分
ACT関節空間目標角度そのもの
π0 (公式プログラム)関節空間差分 (手先の開閉は角度そのもの)

出所: 各論文と、公式プログラムに書かれた説明

学習データが複数の種類の腕にまたがる場合は、関節角度より作業空間での差分を学ぶほうが楽なことがある。どの腕にも手先の位置と向きはあるが、関節の数や並びは腕ごとに違うからだ。OpenVLAがその例で、2024年6月13日付の論文によれば、70億パラメーターのモデルを、Open X-Embodimentに集められた現実のロボットの実演97万件で学習している。

1種類の腕だけで学習する場合、あるいは足りない関節をゼロで埋めて数を揃える場合は、関節角度を直接出力させられる。実演データはもともとその形で記録されているので、逆運動学がまるごと要らなくなる。ACTとπ0がこの方式の例である。ACTの論文は、10分ぶんの実演データだけで、現実の6つの難しい課題を80〜90%の成功率で学習したと報告している。同論文は目標角度を1つずつではなく、100個をひとまとまりにして出力させている。

出力を目標角度そのものにするか、今の状態からの差分にするかは別の選択で、両方の立場の制御モデルがある。差分は腕がどこにあっても同じに見えるので、数値の幅をそろえやすい。ACTは目標角度そのものを出力し、論文は「目標の関節位置の代わりに関節位置の差分を動作として使うと性能が落ちた」と記す。π0の公式プログラムは逆で、説明書きに「pi0のモデルは差分で表した動作で学習する。差分は動作のまとまりごとに、その最初の状態から測る。例外は手先の開閉で、常に角度そのものを使う」とある。「AI制御」とひとくくりに呼ばれる仕事の中身は制御の一語が隠す三つの職務を分けた記事で、機械としての速さを追う流れと人の体を写し取る流れへロボットが分かれていく様子は二つの極を点検した記事で取り上げた。

こうして1種類の腕に限れば、0%は問題にならない。制御モデルに関節角度を出力させ、それをそのままサーボへ送ればよいからである。残るのは学習そのもの、つまりカメラ画像と今の関節角度から次の目標角度をどう出すかだ。今の状態から次の目標角度を予測するという素直なやり方には大きな問題が2つあり、その両方を解くのがACTである。英語の解説は次回にこれを取り上げるとしている。

関節が5つの腕は、6つの数で決まる手先の状態を原理的に満たせない。伸ばし切る最後の1ミリには肘を10.3度回す必要があり、モーターはそこで追いつけなくなる。安価なロボットアームの制御が成り立っているのは、こうした幾何学上の難所を解くのをやめ、人が動かしたときの関節角度をそのまま学習の正解にしているからである。

投資家向けの個別銘柄レポートと技術デューデリジェンスのご相談はこちら。