Pixels to Motors DAY 192
mechArm 270 Pi 動的追従の限界を探る Log#10

視点を増やす日 ── 設計判断とiPhone 2台体制の物理構築

FROM / Log #9
視差問題の浮上
TOP BLIND: Y / 水平
→
TO / Log #10
視点を増やす
TOP SIDE FULL: X / Y / Z
💡 Key Takeaway ── 本日の達成
01 / 設計
設置位置の選定
マット手前 / 水平視線 / レンズ高さ ≈ マット面の B案を採用
02 / 運動学
γ-lookup逆引き
既存FK scanに姿勢列を事後計算で追加、平行スライドを解く
03 / 物理
2台カメラ並列
Iriun + Continuity Camera で2台を独立デバイス化
01

Log#9で何が見えていたか

設計思想の転換

段階分け追従 → コマ撮り連続追従

旧設計思想破棄
  • 構造APPROACH → DESCEND → refine
  • 駆動停止 → 観察 → 計算 → 動作
  • 姿勢3関節同方向リーチ伸縮
新設計思想採用 ★
  • 構造段階分けせず連続制御
  • 駆動動作中も観察・動作を並行
  • 姿勢グリッパー水平・高さ一定
同時浮上した3つの要件

Log#10のスコープを規定する要件群

要件 01 / 視差
上カメラは斜め視点
高さが変わるとTIP画面位置に視差。Log#8「TIP_X 61.4mm シフト」の正体
要件 02 / 制御
コマ撮り連続追従
Log#4で部分実装。姿勢遷移の最中も追従し続ける徹底が必要
要件 03 / 運動学
平行スライド
j4も含めた姿勢拘束付きの運動学が必要
Log#9 実測値
4.786
mm / deg
DISCARDED
この値の正体
リーチ伸縮の感度
NOT 平行スライド
必要な新値
平行スライドの感度
TODO
"
上カメラだけで
高さ・水平の検証はできない
Log #9
引き継ぎ書
02

横カメラの設置位置 ── 3案を1案に絞る

横カメラの主目的

何を見るために置くのか

目的 01
Y が一定であるか
平行スライド時の高さ検証
目的 02
水平姿勢
グリッパーが傾いていないか
目的 03
TIP軌跡が直線か
x / z 平面での経路検証
設置位置の比較

A / B / C ── どこに置けば何が見えるか

TOP-DOWN VIEW MAT 620 × 450 mm ARM BASE BLOCK A A B C
A
左右脇
B
手前側
C
奥側
↑案を選択
A ── マット左右脇不採用
見える方向
X + Y
グリッパー
△ 肩・肘で隠れる
上カメラ映り込み
△ 視野内
B ── マット手前側採用 ★
見える方向
Z + Y
グリッパー
◎ 常に最前列
上カメラ映り込み
◎ 俯瞰の死角
C ── マット奥側不採用
見える方向
Z + Y
グリッパー
✕ ベースに隠れる
上カメラ映り込み
◎ 死角
B案 仕様確定 マット手前 / 水平視線
⟷
位置
30〜50 cm
↕
レンズ高さ
マット ±50 mm
→
視線
水平
⊥
固定
卓上三脚
03

平行スライド運動学 ── 制約条件と解法

グリッパーの掴み方

上から掴む vs 横から掴む

上から掴む不採用
24 mm GRIPPER pitch ≈ 90°
  • 姿勢フィンガー軸 = 重力方向
  • 先端真下 (pitch ≈ 90°)
  • 適合性立方体ブロックの上面が小さく不向き
横から掴む採用 ★
24 GRIP pitch ≈ 0° Y=12
  • 姿勢フィンガー軸 = 水平
  • 先端前方 (pitch ≈ 0°)
  • 適合性側面から確実に掴める
赤ブロック高さ
24
mm
INPUT
TIP目標 Y
12
mm (中心高さ)
TARGET
Log#9 DESCEND姿勢
J1=87.74
J2=−10.0
CONFIRMED
運動学の制約条件

3つの制約を同時に満たす

制約 01
TIPの y = 12mm 一定
制約 02
フィンガー軸 = 水平
制約 03
TIPの x, z のみ変化
6軸を3グループに分解

関節の役割分担 ── ②が平行スライドの本体

GROUP ①
yaw合わせ
j0
ベース回転
GROUP ② ★ 本体
リーチ + 高さ保持
j1 + j2 + j3
3関節協調 手首傾き相殺 (距離, y) 制御
GROUP ③
フィンガー姿勢
j4 + j5
水平挟み 垂直挟み
!
設計上の懸念
マット面干渉
TIP目標Y
12 mm
マット面まで
VERY CLOSE
干渉リスク
グリッパー底
→ 横カメラ設置直後の最初のジョブ
MAT SURFACE GRIPPER BASE 24mm TIP Y = 12mm ⚠ GRIPPER 底面が マット面に干渉?
04

解法の選択 ── γ-lookup逆引きが最適

3つの解法

α / β / γ ── どれを採用するか

α
解析的IK
β
数値解
γ
lookup逆引き
↑解法を選択
α ── 解析的IK不採用
実装難度
高
既存資産
FK scan 使わず
リスク
DH公式値不信
β ── 数値解 (ヤコビアン疑似逆)不採用
実装難度
中
既存資産
FK scan 使わず
リスク
反復計算が重い
γ ── lookup逆引き (FK scan 512,087点)採用 ★
実装難度
低
既存資産
既存lookupの拡張
理論的根拠
P008 と整合
実機キャリブ済 机上DHより誤差小 P2M コアと整合
γ-lookup逆引きの3段階フィルタ

512,087点 → 平行スライドの1点へ

  1. F1
    第1フィルタ ── ee_y ≈ 12mm (±2mm)+
    → 数千〜数万点 最大削減 高さ拘束
  2. F2
    第2フィルタ ── |gripper_pitch_world| ≤ ε (±5°)+
    水平姿勢 pitch ≈ j1+j2+j3 事後計算で追加 fk_scan_with_pose.csv
  3. F3
    第3フィルタ ── 目標 (ee_x, ee_z) に最近傍+
    → 1点確定 j0..j5 取得 send_angles() へ
γ-lookup 絞り込みプロセス
512,087 → 1 への漸減
512,087 points F1: ee_y ≈ 12mm (±2mm) 数千〜数万 points F2: |pitch_world| ≤ ε 数十 points F3: 最近傍 (ee_x, ee_z) 1 → j0..j5 を send_angles()
残課題 01
符号の確定
j1+j2+j3 ?
残課題 02
水平の実機キャリブ
オフセット補正
FK scan総点数
512,087
points
READY
05

横カメラのキャリブ計画 ── アームをキャリブ装置として使う

キャリブの3層構造

層1 / 層2 / 層3 ── どこに労力を割くか

L1
内部
L2
外部
L3
統合
↑層を選択
L1 ── 内部パラメータ (歪み補正)後回し
通常
チェスボードキャリブ
今回
取らない
運動の整合性 > 絶対精度 不足時に取得
L2 ── 外部パラメータ (位置・向き)本丸
手順 01
既知姿勢に移動
手順 02
青マーカー検出
手順 03
多項式回帰
R2R2R と整合 Unity真値 → リアル校正 追加用具なし
L3 ── 両カメラの統合仕組み化
X 左右
x_top
Y 高さ
y_side
Z 手前奥
(z_top + z_side) / 2
Z 二重取り 整合性チェック P008 の応用
"
アームそのものを
キャリブ装置として使う
層 2
解き方
06

物理設置のトラブル ── 仕様の落とし穴

トラブルシュートの流れ

Iriun単体不可 → 3代替案 → Continuity Camera採用

  1. 01
    当初想定 ── Iriun単体で2台+
    PLAN iPhone × 2 + Iriun 既存環境継続
  2. 02
    失敗 ── プルダウン切替式+
    FAIL single source only 公式表記が紛らわしい 多アプリ != 多デバイス
  3. 03
    代替案検討 ── 3案を比較+
    EVAL ① Continuity Camera ② EpocCam ③ OBS Virtual
  4. 04
    採用 ── Continuity Camera+
    DECIDE macOS Ventura+ iOS 16+ iPhone XR+ 追加コスト 0
  5. 05
    有効化 ── OpenCV から並列認識+
    RESULT Cam 0: 内蔵 Cam 1: 1920×1080 Cam 2: 1920×1080
!
落とし穴
カメラインデックスが起動順で入れ替わる
類似事故
DAY153
対策方針
起動時判定
実装
DAY193 タスク
07

役割の入れ替え ── 当初想定からの転換

カメラ役割の入れ替え

当初想定 vs 最終構成

当初想定 (Log#9引き継ぎ)改訂
  • 上カメラ既存iPhone (Iriun)
  • 横カメラiPhone 11 (Continuity)
最終構成 (現場で確定)採用 ★
  • 上カメラiPhone 14 Pro Max (Continuity)
  • 横カメラiPhone 11 (Iriun)
Continuity 相性
新機種ほど◎
→ iPhone 14 Pro
Iriun 安定性
古い機種でも安定
→ iPhone 11
割り当て原則
純正は新機種に
RULE
"
iriunカメラをiPhone11の方にして、
通常のカメラをiPhone14proに変更したよ。
こっちのほうがいいみたいだね。
現場メモ
08

2台のカメラの役割分担 ── どの軸を、どちらが見るか

軸ごとの担当カメラ

X / Y / Z ── どの軸をどちらのカメラが見るか

MAT 620 × 450 mm ARM BLOCK TOP SIDE TOP SIDE
X
左右
Y
高さ
Z
手前奥
↑軸を選択
X 軸 ── 左右主担当: TOP
TOP CAM
主担当 ◎
SIDE CAM
担当外 ✕
Homography → mm 上カメラ単独完結
Y 軸 ── 高さ主担当: SIDE
TOP CAM
担当外 △
SIDE CAM
主担当 ◎
高さ一定の検証 水平姿勢の確認
Z 軸 ── 手前奥主担当: 両方 (二重取り)
TOP CAM
担当 ○
SIDE CAM
担当 ◎
整合性チェック キャリブ診断
横カメラ設置直後の答え合わせ

机上検討の3つの懸念が一発で解消

答え合わせ 01
マット面干渉なし
底部とマット面に明確な隙間。TIP=12mmで干渉せず
答え合わせ 02
青マーカー検出可
上カメラのdetect_tip_blue_geometry()関数を流用可
答え合わせ 03
DESCEND直前を捉える
上カメラの視差で見えなかった領域を真横から追える
09

DAY193以降 ── 8ステップで PICK実機検証へ

DAY193以降の実装順序

8ステップで PICK実機検証へ向かう

  1. 01
    iPhone 11 の物理固定+
    HARDWARE 卓上三脚 レンズ高さ再現 水平視線
  2. 02
    カメラインデックスの自動検出+
    SOFTWARE Iriun + Continuity 両対応 起動時判定 DAY153の事故防止
  3. 03
    横カメラ単体テスト+
    VERIFY 青マーカー検出 上カメラ関数流用
  4. 04
    キャリブスクリプト作成+
    SOFTWARE FK scan 50〜100姿勢 両カメラ pixel記録 CSV保存
  5. 05
    pixel ↔ (z, y) 変換式の作成+
    SOFTWARE 多項式回帰 scipy / numpy
  6. 06
    整合性検証+
    VERIFY z_top vs z_side 統計的評価 ズレ領域の原因特定
  7. 07
    visual_servo_pick.py リファクタ+
    SOFTWARE 平行スライド対応 両カメラ統合 γ-lookup組み込み
  8. 08
    PICK実機検証+
    VERIFY 水平確認 Y=12mm安定 爪が届く 掴める
本日の総括

破棄したもの / 立ち上がる新構造

破棄したものLog#9で否定
  • 追従段階分け追従
  • 運動学3関節同方向リーチ伸縮
  • 数値Z係数 4.786 mm/deg
立ち上がる新構造Log#10で確立 ★
  • 追従コマ撮り連続追従
  • 運動学γ-lookup逆引き平行スライド
  • 視点上 + 横の両カメラ統合
本日の結論 ── 横カメラを置く前と後では、見える世界が違う
BEFORE
1 CAMERA
TOP Y / 水平 BLIND
X 左右○
Y 高さ✕
Z 手前奥△ 視差
水平姿勢✕
→
AFTER
2 CAMERAS
TOP SIDE X → TOP Y/Z → SIDE
X 左右◎ TOP
Y 高さ◎ SIDE
Z 手前奥◎ 二重取り
水平姿勢◎ SIDE