notes
Robotics

失敗しない IK は「到達可能集合への射影」で作る

解析 IK は関節限界外の目標を却下する。却下の代わりに min ‖FK(q) − target‖² を関節限界下で解いて最近傍の可達点を返せば、入力が範囲外でも常に解が出る。teleop 向け。正確な到達が要る動作 (pick) には strict モードを残す

要点: 到達可能集合は有限なので「どんな点でも届く IK」は物理的に存在しない。作れるのは「範囲外の入力でも解を返す IK」で、実体は 到達可能集合への射影 (最近傍の可達点を返す)。平面 2 関節なら制約境界ごとの 1 次元探索で厳密に解け、計算量は数 µs。

解析 IK が失敗する 5 分類#

判定条件幾何的な意味
YawOutOfRangeatan2(y, x) ∉ [yaw_min, yaw_max]旋回範囲外
OutOfReach|cos γ| > 1肩からの距離 ρ が l1+l2 より遠い / |l1−l2| より近い (環状領域外)
Q1OutOfRangeq1 ∉ [q1_min, q1_max]肩関節限界
Q2OutOfRangeq2 ∉ [q2_min, q2_max]肘 (beam) 関節限界
CoupledLimitq2 − q1 > α または q1 − q2 > β状態依存の干渉限界 (URDF で表現不能)

いずれも「目標点が到達可能集合の外」なので、solver が正しく計算した結果である。

射影 IK の手順#

  1. 解析解を出す。全制約を満たせば ok = true、そのまま返す。
  2. 満たさない場合、次を解く。

2 次元 (q1, q2) の問題で、実行可能領域は 6 本の直線で囲まれた凸多角形。最小値は内点 (= 解析解、ここには無い) か境界上にある。6 本の境界線それぞれで 1 次元探索 (golden section、区間は多角形との交線) をして、最小距離の点を選ぶ。 base yaw は独立に clamp。OutOfReach は cos γ を ±1 に clamp すると、目標方向へ腕を伸ばし切った点 (半径方向の射影) になる。 3. 射影後の q と、FK で戻した実到達点 achieved を返す。ok = true にしつつ clamped = true、reason = "projected:<境界名>" で届かなかった事実を残す。

使い分け (射影を全部に適用しない理由)#

  • teleop (jog): 射影を使う。上位は achieved を自分の target に採用すると、境界に沿って滑る。「押しても動かない」「戻される」感触が消える。
  • 正確な到達が要る動作 (pick / place): strict を残す。射影距離 > 許容値 (例 5 mm) なら失敗として返す。射影で成功扱いにすると、届いていないのに把持動作へ進む。
  • 障害物 (keepout) 判定は別問題。射影 IK は関節限界だけを扱う。

到達範囲そのものを広げる場合#

射影は範囲外を隠す手段であり、範囲は変わらない。範囲を広げるのは機構側 (関節限界、干渉) の話で、ソフトでは変えられない。

関連#

最終更新:

On this page