上カメラはマット平面の俯瞰。homographyでpx→mm変換できるのはX-Z座標だけで、爪先の絶対高さ(Y方向)は最初から取れない。それでも「j2を浅くすれば肘が伸びて爪先が下に出る」という幾何学的直感から、XZ収束を降下完了のシグナルにしていた。
DESCENDループの先頭でiPhone 11(横カメラ)を1フレーム取り、detect_tip_side() でTIPのpixel座標をprintするだけのパッチ。横で人間が見て「降りていないな」と気づくしかない。横カメラから見えたのは、j2が進む間にtip_side_yが「降下→停滞→上昇」と動くことだった。
cv2.VideoCapture(1) → warmup 5フレーム → 1枚読み → releasedetect_tip_side(frame_side) 緑シール2点の中点[DESCEND-SIDE] tip_side=(x, y) log only初回有効な tip_side_y を descend_start_y として記録。以降は delta_y を見て、+30px なら降下成功、5フレーム見て +10px 未満なら no-progress と確定。j2モードで no-progress なら j1モードへ自動切替して降下方向を変える。
delta_y ≥ 30px → DESCEND-DONE / loop breakdelta_y < 10px かつ 有効フレーム ≥ 5 → mode = "j1"j2 -= 0.5°(デフォルト、初期段階で降下するか試す)j1 += 1.0°(j1上限 110° まで、確実に降下する方向)