locomotion op• Data kinds: points × normals × vector × scalar × scalar → table
• Call: import fullseye as fs; fs.ledger.static_contact_force_lp(contacts, normals, com, mass, mu, gravity: 'float' = 9.81, n_facets: 'int' = 8) -> 'dict' (to call the implementation directly, import locomotion; locomotion.static_contact_force_lp(contacts, normals, com, mass, mu, gravity: 'float' = 9.81, n_facets: 'int' = 8) -> 'dict'; from the registry, opsdrive.get("static_contact_force_lp"))
• GPU: none (CPU reference implementation only)
Static contact-force distribution under linearised friction cones (scipy.optimize.linprog).
> The detailed description below is the original text — the summary and the headings are translated.
静的な接触力の配分。各接触 i の力を、摩擦錐を n_facets 角の多角錐で内側から近似した生成ベクトル g_ik = n_i + μ·t_ik(t_ik は接平面の単位ベクトルを等角に回したもの)の非負結合 f_i = Σ_k λ_ik g_ik で表し、静的な釣り合い
Σ f_i + m·g = 0, Σ (p_i − c) × f_i = 0 (g = (0, 0, −gravity))
を満たす λ ≥ 0 を線形計画で探す。目的は 法線力の最大値の最小化(荷重を均す)に、接線力の L1 和を 1e-3 の重みで足したもの(足どうしで押し合う内力 = 解の不定さを消す)。
• 多角錐は錐の内側(頂点が錐面の上)なので、ここで実行可能なら真の摩擦錐でも実行可能。逆は n_facets が小さいと成り立たない(縁の近くは保守的)。
• 平地(法線がすべて +z)では、μ > 0 なら「解がある ⇔ COM の地面への射影が支持多角形の内側」(接線力は z = 0 の点で水平な軸のまわりのモーメントを作れない)。com_support_margin と突き合わせる門が tests にある。
• contacts (N, 3) [m]、normals (N, 3)(正規化する。外向き = 地面から足へ)、com (3,) [m]、mass [kg] > 0、mu ≥ 0(0 なら摩擦なし = 法線だけ)。
• 返り値 {"feasible", "forces" (N, 3) [N] か None, "normal" (N,), "tangential" (N,), "max_normal", "residual"(釣り合いの残差 [N]、[N·m]), "status", "message"}。解が無ければ feasible = False、力は None。
空の入力(contacts が 0 要素)は ValueError で拒否する。
English: friction cones are replaced by inscribed n_facets-sided pyramids, so a feasible answer here is feasible for the true cone. The LP minimises the largest normal force plus 1e-3 x the L1 tangential force. On flat ground with mu > 0, feasibility is equivalent to the COM projection lying inside the support polygon.
• Sample-data catalog (download URLs / licences) — 2-D uses skimage.data (BSD/public domain) plus synthetic images; 3-D lists download URLs for real data sources (Stanford, PDS, …).
• Operator provenance and references — the sources of the research/methods this op family came from.
• The canonical algorithm (author, year) and its uses are named in the family usage guide above.
• walking_ops_tour — py -3.11 examples/walking_ops_tour.py
table as input)course_layout · course_occupancy · course_contains · world_build · world_camera · world_move · lidar_scan · rss_longitudinal_same
locomotion)contact_points · com_from_silhouette · support_polygon · com_support_margin · gait_phase · support_line_margin · lipm_capture_point · capture_margin
*Provenance: locomotion.py — DRIVE operator registry. This per-op note is generated by tools/opdocs.py md (do not hand-edit).*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.