「動く」で終わらせず、数字と追試で裏取りする
認識モデルの精度、方策(ロボットの意思決定)の成功率、そして実際のFR5コントローラのソフトウェアを使った 追試まで、主張はすべて実行結果で裏取りしています。
部品を見分ける2つの手首カメラによる認識
ロボット手首の左右カメラが、接近しながら部品の種類と向きを認識します。学習データも本物のカメラ位置・ 本物の腕の動きに合わせて作り直しました。
種類の認識
実行中(in-loop)で100.0%。オフライン評価でも100.0%、角度誤差0.70°。合格ラインは種類99%・角度10°以内 — 大きく上回る。
向き(角度)の認識
実行中の角度誤差0.87°(平均)。部品をどの向きでトレイに置くかに直結する数値で、実運用でも十分な精度。
データの作り直し
手首カメラは腕と一緒に動くため、背景も撮影角度も一から変わる。データ生成・認識モデルとも作り直して上記の精度に到達。
仕分けを判断する方策(ロボットの意思決定)の学習
「熟練の手本を真似る」→「その手本の癖にノイズを混ぜて頑健化」→「試行錯誤(強化学習)でさらに伸ばす」の3段階。 仕上げの一手前まで手本を超えられない技術的な壁があり、それを破る修正を入れてから最終結果に到達しました。
「エキスパートを超える」の意味
比較対象の90.8%は、人がルールを書いて作った手本(熟練エキスパート)の成績です。強化学習の方策はこれを 統計的に明確な差(p=2.9e-23)で上回りました — たまたまの誤差ではないという意味です。 比較方法は同じ条件を両者に完全一致させる社内標準の手法(CRN対応比較)を使用しています。
学習の途中で見つかった落とし穴
開発の途中、特定の部品(向き0度のボルト)だけを毎回間違える現象がありました。原因は、ロボットが 「まだ部品を認識する前」のダミー値(角度0)と、「認識し終えた後の本物の値」(角度0のボルト)が 数値として区別できていなかったこと — 方策から見ると「未確定」と「確定した0度」が同じ信号に 見えていたのです。ダミー値を絶対に現れない値に変えるだけの修正で解消し、最終結果(99.0%、誤仕分けゼロ)に つながりました。地味ですが、こうした一つ一つのバグ潰しが精度を作っています。
実機コントローラでの追試シミュレーションの計画通りに動くか
学習はすべてシミュレーション内で行っていますが、「実際のFR5を制御するソフトウェア(実機と同じ コントローラ、ハードウェアだけ無い環境)」に方策の軌道を1本流し、計画通りに追従できるかを確認しました。 実ロボットは動かしていません — これは実機投入前の最終チェック手順の一つです。
| 確認項目 | 結果 |
|---|---|
| ツール座標(グリップ位置)の再現 | 誤差0.00° 完全一致 |
| 肘を上げた姿勢での軌道追従(最も厳しい姿勢) | 誤差0.0002° |
| 速度・加速度が実機コントローラの実測特性と一致するか | 警告0件(許容幅±20%に対し実測+4%以内) |
この追試が示すこと
方策が計画した動きを、実際のFR5コントローラのソフトウェアが忠実に再現できることを確認しました。 「教える→検証する→書き出す→実機コントローラで確かめる」という一連のパイプラインが、この新しい方策でも 崩れずに機能しています。次は、実運用の環境(照明など)に対する頑健性です — ②頑健性の監査へ。
SSOT:docs/cellsort-v3-plan.md、docs/cellsort-v3-simmachine-gap.md。
ONNXエクスポートの数値一致も確認済み(方策の書き出し形式が変わっても結果が変わらないことの確認)。