İçeriğe geç

04 · Friction ve friction cone

Bölüm1 · Simulation
Çalışma türüCPU · Mac ya da Colab CPU
Önkoşul03
Önce öğrenVectors, Matrices & Operations
Süre~40 dk
Kodexperiments/04-friction/experiment.py · notebook
Durum✅ tam

Bu derste yap

Her adımı yapınca işaretle. Yalnız bu tarayıcıda saklanır.

Kaymaya ağırlık değil bir oran karar verir: tan θ = μ, simülasyondaki cone da buna yaklaşmak zorunda.

Unitree’nin açık temel eğitim config’i (Go2 config’inin miras aldığı) zemin friction’ını rastgeleleştirir ama kütleyi değil: num_envs = 4096 paralel kopyanın her biri friction’ını friction_range = [0.5, 1.25] aralığından çekiyor, randomize_base_mass = False (legged_robot_config.py). Kayma için doğru düğme friction’dır: bir ayağın ya da tutulan bir nesnenin kayıp kaymayacağı, nesnenin ne kadar ağır olduğuna değil, friction katsayısına ve contact kuvvetinin yönüne bağlı. Bu ders MuJoCo’da bir rampa üstündeki küpün kayma açısını ölçüyor, Coulomb yasasıyla karşılaştırıyor ve simülasyonun ondan saptığı iki yeri buluyor: eşiğin altında creep ve yöne bağlı pyramidal friction cone.

Okumadan önce · 2 soru. Önce tahmin et; nedenini ders anlatıyor.

1. Aynı rampada (μ = 0,3) 10 kg’lık küp, 0,1 kg’lık küpten daha büyük bir açıda mı kayar?

  • Evet, ağır küp rampaya daha sert bastırır ve daha büyük bir friction bütçesi alır.
  • Hayır, aşağı çeken kuvvet de friction bütçesi de mm ile ölçeklenir; kayma açısı yalnızca μ’ye bağlıdır.
  • Hayır, hafif küp daha az momentumu olduğu için daha uzun tutunur.

Neden: tan⁡θ>μ\tan\theta > \mu koşulunda kütle yok. Deney tablosunda μ = 0,3 için üç kütle de 16,75°‘de kayıyor (teori 16,70°).

2. 0,1 kg’lık ve 10 kg’lık iki küp aynı rampadan kayma açısının üstünde kayıyor. Hangisi daha hızlı ivmelenir?

  • 10 kg’lık küp, çünkü yerçekimi onu daha güçlü çeker.
  • 0,1 kg’lık küp, çünkü sürtünme onu daha az tutar.
  • Hiçbiri; ikisi de kütlenin sadeleştiği g(sin⁡θ−μcos⁡θ)g(\sin\theta - \mu\cos\theta) ile ivmelenir.

Neden: Çekiş de sürtünme bütçesi de mgm g ile ölçeklenir (Sade anlatımla); Sıfırdan yaz, Adım 2 formülü MuJoCo’ya karşı %1,2 içinde doğruluyor, Deney’de 0,1 kg ve 10 kg’lık küplerin hız eğrileri en fazla 2,1·10⁻¹² cm/s farklı.

Friction bir bütçedir. Bir yüzey bir cismi yana doğru itebilir, ama yalnızca bir sınıra kadar; bu sınır da cismin yüzeye ne kadar bastırdığıyla orantılıdır. Orantı katsayısı friction katsayısı μ’dür.

Bir kitabın üstüne telefon koy ve kitabı yavaşça eğ. Eğmek aynı anda iki şey yapar: telefonun ağırlığının daha azı kitaba bastırır (bütçe küçülür), daha fazlası telefonu aşağı çeker (talep büyür). Bir açıda talep bütçeyi aşar ve telefon kayar. Ağır bir telefon daha sert bastırır, ama tam aynı oranda daha sert de çekilir; ağırlık sadeleşir: kayma açısı yalnızca μ’ye bağlıdır.

Bir simülatör bu bütçeyi temsil etmek zorundadır. Tam kural, yan kuvvetin aynı sınıra kadar her yöne bakabileceğini söyler; yani izin verilen kuvvetler yuvarlak bir koni oluşturur. MuJoCo’nun default’u bu yuvarlak koniyi bir piramitle yaklaşıklar; piramidin düz yüzleri sınırı yöne bağımlı yapar. Ayrıca MuJoCo’nun contact’ı yumuşak olduğu için (ders 03) friction da yumuşaktır: sınırın altında bile bir cisim yavaşça creep yapabilir.

flowchart TD
    W["ağırlık m·g"] --> N["rampaya bastıran<br/>m·g·cos θ"]
    W --> P["aşağı çeken<br/>m·g·sin θ"]
    N --> B["friction bütçesi<br/>μ · m·g·cos θ"]
    B --> C{"çekiş bütçeden<br/>büyük mü?"}
    P --> C
    C -- "hayır" --> H["küp durur"]
    C -- "evet" --> S["küp kayar"]
pull = m * g * sin(theta) # gravity component along the ramp (N)
budget = mu * m * g * cos(theta) # largest friction force the surface can supply (N)
slips = pull > budget # m and g cancel: tan(theta) > mu (Build it, Step 1)
def in_elliptic_cone(f_n, f_t1, f_t2, mu): # MuJoCo's round cone, condim 3
return f_n >= 0 and f_t1**2 + f_t2**2 <= (mu * f_n)**2
BüyüklükFormül
küpü aşağı çeken kuvvetmgsin⁡θm g \sin\theta
friction limitiμ mgcos⁡θ\mu\, m g \cos\theta
kayma koşulutan⁡θ>μ\tan\theta > \mu
kayarken ivmea=g(sin⁡θ−μcos⁡θ)a = g(\sin\theta - \mu\cos\theta)
elliptic conef1≥0, f12≥∑ifi2/μi−12f_1 \ge 0,\ f_1^2 \ge \sum_i f_i^2/\mu_{i-1}^2

mm küpün kütlesi, gg yerçekimi, θ\theta rampa açısı, μ\mu kayma friction katsayısıdır; f1f_1 yüzey normal’i boyunca contact kuvveti, f2,f3f_2, f_3 (daha yüksek condim ile daha fazlası) ise her biri kendi katsayısı μi−1\mu_{i-1} ile sınırlanan teğetsel bileşenlerdir.

Matematik ayrıntısı: rampada Coulomb yasası ve simüle edilen cone neden sapar

Kayma koşulu. Statik friction en fazla μN\mu N sağlayabilir; rampada normal kuvvet N=mgcos⁡θN = m g\cos\theta‘dır. Küp mgsin⁡θ≤μ mgcos⁡θm g\sin\theta \le \mu\, m g\cos\theta olduğu sürece durur. mgcos⁡θm g\cos\theta‘ya bölmek tan⁡θ≤μ\tan\theta \le \mu verir: kütle ve yerçekimi sadeleşir (OpenStax University Physics 1, §6.2). Eşiğin üstünde net aşağı yönlü kuvvet mg(sin⁡θ−μcos⁡θ)m g(\sin\theta - \mu\cos\theta)‘dır; tablodaki ivme buradan gelir.

Cone’lar. Bir contact kuvveti ff friction cone’un içindeyse kabul edilebilirdir (Computation · Contact). Elliptic cone tablodaki eşitsizliktir. Pyramidal cone, nn = condim olmak üzere 2(n−1)2(n-1) negatif olmayan kenar kuvvetinden kurulur; condim=3 için 4 kenar. Piramidin yüzleri düzdür; kesiti çember değil çokgendir ve izin verdiği friction limiti, kaymanın contact frame’ine göre yönüne bağlıdır. Doküman elliptic cone’u fiziksel gerçekliğin daha iyi modeli olarak tanımlıyor; pyramidal cone ise bazen daha hızlı ve sağlam (option/cone).

Creep. Friction constraint’i de normal constraint gibi yumuşak çözülür; bu yüzden eşiğin altında küçük, sabit bir kayma hızına izin verilir. Doküman buna slow slippage diyor ve iki önlem sayıyor: impratio > 1 ile elliptic cone’lar ya da noslip solver’ı (Modeling · Slow slippage).

Tek μ. geom/friction üç sayı tutar (kayma, burulma, yuvarlanma; default 1 0.005 0.0001). Tek bir kayma katsayısı var, yani ayrı statik ve kinetik friction yok. Bir contact çiftinde, bir geom’un priority’si yüksek değilse eleman bazında maksimum kullanılır (geom/friction, Contact parameters).

Daha derine: Vectors, Matrices & Operations (AIEFS: bir kuvveti bileşenlerine ayırmak); OpenStax University Physics 1, §6.2; MuJoCo Computation · Contact.

option/coneTanımcondim=3 contact başına satır
pyramidal (default)bir piramidin 2(n−1)2(n-1) negatif olmayan kenar kuvveti4
ellipticf1≥0, f12≥∑fi2/μi−12f_1 \ge 0,\ f_1^2 \ge \sum f_i^2/\mu_{i-1}^23

Satır, constraint solver’ın o contact için bulması gereken tek bir skaler bilinmeyendir.

Şimdi Coulomb kayma testini, kayma ivmesini ve MuJoCo’nun pyramidal cone’unu yaklaşık 40 satır NumPy ile yazacak; MuJoCo’nun hareketiyle, constraint satırlarıyla ve bir SciPy lineer programıyla karşılaştıracaksın. Adımları kendi dosyana yaz ve her adımdan sonra çalıştır. Bitmiş fonksiyonlar physai/sim.py içinde; uv run python experiments/04-friction/build.py dört adımı kontrolleriyle birlikte koşturur (çıktı build_output.txt dosyasında).

def ramp_slip(theta, mu, g=9.81):
"""Does a block on a ramp at angle theta slip (tan theta > mu), and its downhill acceleration if so."""
slips = np.tan(theta) > mu
return slips, g * (np.sin(theta) - mu * np.cos(theta)) if slips else 0.0

Bunu Deney’in 0,05°‘lik ızgarasında uygula, sonra Deney’in kendi kriterini (2 s sonunda hızlı ve ivmelenen) bu ideal bloğa uygula; blok durgunluktan sabit ivmeyle başladığı için 0,5–1,0 s ve 1,5–2,0 s’deki ortalama hızları 0,75a0{,}75a ve 1,75a1{,}75a:

== Step 1. Slip angle: tan(theta) > mu, then the Experiment's criterion on an ideal Coulomb block ==
mu arctan mu first grid angle that slips ideal block + criterion
0.3 16.70° 16.70° 16.80°
0.5 26.57° 26.60° 26.65°
0.8 38.66° 38.70° 38.75°
1.0 45.00° 45.05° 45.05°

Deney 16,75°, 26,60°, 38,70° ve 44,90° ölçtü: ideal bloğun kriteri geçtiği açıdan bir ızgara adımı önce (μ = 1’de üç). arctan⁡μ\arctan\mu‘nün hemen üstünde ideal blok o kadar yavaş ivmeleniyor ki 2 s sonunda hâlâ 2 cm/s’nin altında; MuJoCo küpü buna creep hızını (Gözlemle’de 1,42 cm/s’ye kadar) ekliyor.

Eşiğin üstünde blok g(sin⁡θ−μcos⁡θ)g(\sin\theta - \mu\cos\theta) ile ivmelenir. Deney’in 80 cm’lik rampası bunu uzun süre ölçmek için kısa; onun yerine yerçekimini eğ: yerçekimi (gsin⁡θ,0,−gcos⁡θ)(g\sin\theta, 0, -g\cos\theta) olan düz zemindeki bir küp, kayıp düşeceği bir kenar olmadan aynı fizik. x(t)x(t)‘ye bir parabol oturt:

== Step 2. Sliding acceleration (mu = 0.5): g (sin - mu cos) vs MuJoCo, fit over 0.2-1.0 s ==
theta ours (m/s^2) elliptic pyramidal
28.0° 0.2747 0.2744 0.2745
30.0° 0.6571 0.6571 0.6567
35.0° 1.6088 1.6207 1.6117
45.0° 3.4684 3.4640 3.5092

Her açıda, iki cone için de %1,2’nin içinde. Kalan fark formülden gelmiyor: kayan bir box ön kenarına devrilip zıplıyor (zaman zaman hiç contact’ı yok), fit de bu tümsekli kaymanın ortalamasını alıyor.

condim=3 için pyramidal cone her contact’ı n±μt1n \pm \mu t_1 ve n±μt2n \pm \mu t_2 boyunca dört kenar kuvvetiyle fk≥0f_k \ge 0 değiştirir. Constraint biçiminde her kenar bir Jn±μJtiJ_n \pm \mu J_{t_i} satırıdır, contact kuvveti de onların toplamı:

def pyramid_rows(j_normal, j_tangent, mu):
"""Constraint rows of MuJoCo's pyramidal cone: J_n + mu J_t and J_n - mu J_t for each tangent direction."""
return np.array([j_normal + s * m * jt for m, jt in zip(mu, j_tangent) for s in (1, -1)])
def pyramid_to_force(edge_forces, mu):
"""Contact-frame force (normal, tangential...) from the non-negative pyramid edge forces."""
f = np.asarray(edge_forces, float).reshape(-1, 2)
return np.r_[f.sum(), [m * (fp - fm) for m, (fp, fm) in zip(mu, f)]]

JnJ_n, JtJ_t‘yi contact frame’inden (d.contact[i].frame, önce normal) ve küpün contact noktasındaki nokta Jacobian’ından (mj_jac) kur, sonra MuJoCo’nun efc_J’si ve mj_contactForce ile karşılaştır:

== Step 3. Pyramid rows and edge forces vs MuJoCo (cube holding at 20°, mu = 0.5, pyramidal) ==
4 contacts x 4 rows = 16 rows · max |our rows - efc_J| = 0.0e+00
max |force from our edge sum - mj_contactForce| = 0.0e+00 N

Birebir: MuJoCo pyramidal bir contact’ı böyle kuruyor.

Birim normal kuvvetle negatif olmayan kenar kuvvetleri ∣f1∣+∣f2∣≤μ|f_1| + |f_2| \le \mu olan her teğet kuvvete ulaşır: çember değil, bir eşkenar dörtgen. Birinci teğetle ϕ\phi açısı yapan bir yönde limit bu yüzden μ/(∣cos⁡ϕ∣+∣sin⁡ϕ∣)\mu / (|\cos\phi| + |\sin\phi|):

def tangential_limit(phi, mu, cone):
"""Largest friction force per unit normal force when sliding at angle phi to the first tangent axis."""
if cone == "elliptic":
return mu
return mu / (abs(np.cos(phi)) + abs(np.sin(phi))) # pyramid: |f1| + |f2| <= mu f_n, a diamond
== Step 4. Largest friction force per unit normal force, by sliding direction (mu = 0.5) ==
phi elliptic pyramid (ours) pyramid (linprog)
0° 0.5000 0.5000 0.5000
15° 0.5000 0.4082 0.4082
30° 0.5000 0.3660 0.3660
45° 0.5000 0.3536 0.3536
MuJoCo: friction impulse / normal impulse on the cube over 0.2-1.0 s (world frame)
holding at 20° (tan 20° = 0.3640) elliptic 0.3640
holding at 20° (tan 20° = 0.3640) pyramidal 0.3640
sliding at 35° (mu = 0.5) elliptic 0.5000
sliding at 35° (mu = 0.5) pyramidal 0.5000

Dört kenar kuvveti üzerindeki SciPy lineer programı her açıda aynı sonucu veriyor. Köşegen boyunca pyramid yalnızca μ/2\mu/\sqrt2‘ye izin veriyor: 0,5 yerine 0,3536. MuJoCo’nun kendi kuvvetleri yasaya uyuyor: duran küp tam ihtiyacı kadar sürtünme kullanıyor, tan⁡20°\tan 20° = 0,3640; kayan küp cone’un sınırında, oran μ. Buradaki iki küp de bir teğet ekseni boyunca kayıyor (ϕ=0\phi = 0), iki cone’un uyuştuğu yerde. Boz’daki döndürülmüş küpün farklı bir ϕ\phi‘de kayıp kaymadığı ayrıca incelenmedi.

physai.sim artık ramp_slip, pyramid_rows, pyramid_to_force ve tangential_limit içeriyor. Ders 16, gripper bir nesneyi sıkarken sürtünme limitine ihtiyaç duyuyor. tests/test_04_friction.py bunları MuJoCo’ya sabitliyor; bir şey değiştirdikten sonra uv run pytest tests/test_04_friction.py çalıştır.

MuJoCo’da sürtünme geom başına üç sayı artı iki global seçenektir:

<option cone="elliptic" impratio="10"/> # round cone; impratio > 1 reduces creep (Math details)
<geom ... friction="1 0.005 0.0001" condim="3"/> # sliding, torsional, rolling; condim picks which act
f = np.zeros(6)
mujoco.mj_contactForce(m, d, i, f) # contact i: f[0] normal, f[1:3] friction, in its frame
f_world = d.contact[i].frame.reshape(3, 3).T @ f[:3]

Tuzaklar:

  • Dünya değil, contact frame’i. mj_contactForce kuvveti contact frame’inde, önce normal olarak döndürür; contact’ları toplamadan ya da yerçekimiyle karşılaştırmadan önce frame.T ile döndür (Adım 4).
  • İki cisim için tek μ. priority karar vermiyorsa MuJoCo iki geom’un friction’ının eleman bazında maksimumunu alır (Matematik ayrıntısı): μ = 1’lik bir gripper pad’indeki kaygan bir nesne μ = 1 alır.
  • Contact değil, satır. d.nefc satırları sayar: pyramidal condim=3 contact başına dört, elliptic başına üç (Adım 3 4 contact için 16 satır buldu).

Yazdıktan sonra · 2 soru.

1. Sıfırdan yaz, Adım 4’te μ = 0,5’lik pyramidal cone köşegen boyunca (ϕ\phi = 45°) birim normal kuvvet başına yalnızca 0,3536’lık sürtünme kuvvetine izin veriyor. Neden?

  • n±μt1n \pm \mu t_1, n±μt2n \pm \mu t_2 kenar kuvvetleri yalnızca ∣f1∣+∣f2∣≤μ|f_1| + |f_2| \le \mu‘ye ulaşır; köşegen limiti μ/2\mu/\sqrt2 olan bir eşkenar dörtgen.
  • MuJoCo hesaptan tasarruf için köşegen kaymada μ’yü yarıya indirir.
  • Lineer program 45°‘de yakınsamadı.

Neden: tangential_limit μ/(∣cos⁡ϕ∣+∣sin⁡ϕ∣)\mu/(|\cos\phi| + |\sin\phi|) veriyor; dört kenar kuvveti üzerindeki SciPy linprog da 0°, 15°, 30°, 45°‘de aynı 0,5000, 0,4082, 0,3660, 0,3536’yı buluyor. Elliptic cone her yönde 0,5000’e izin veriyor.

2. Sıfırdan yaz, Adım 1’de Deney’in kriteriyle değerlendirilen ideal bir Coulomb bloğu 16,80°‘den (μ = 0,3) itibaren kayıyor, MuJoCo küpü ise 16,75°‘den itibaren kaydı. Simüle küp kriteri neden bir ızgara adımı önce geçiyor?

  • MuJoCo dosyada yazandan daha küçük bir μ kullanıyor.
  • arctan⁡μ\arctan\mu‘nün hemen üstünde ideal blok 2 s sonunda hâlâ 2 cm/s’nin altında; simüle küp buna creep hızını ekliyor.
  • 0,05°‘lik ızgara simüle açıyı aşağı yuvarlıyor.

Neden: Kriter v2v_2 > 2 cm/s istiyor; eşiğe bu kadar yakın ideal bloğun v2=1,75av_2 = 1{,}75a‘sı çok küçük. Eşiğin altında MuJoCo küpü μ = 0,3 için zaten 0,30 cm/s’ye kadar creep yapıyor (Gözlemle).

80 × 30 × 2 cm’lik bir rampaya hizalı ve durgun yerleştirilmiş 8 cm’lik bir küp; iki geom da aynı μ’yü alıyor.

def xml(theta_deg, mu, mass, cone="pyramidal"):
return f"""
<mujoco>
<option cone="{cone}"/>
<worldbody>
<body name="ramp" euler="0 {-theta_deg} 0">
<geom type="box" size=".40 .15 .01" friction="{mu} 0.005 0.0001"/>
</body>
<body name="cube">
<freejoint/>
<geom type="box" size=".04 .04 .04" mass="{mass}" friction="{mu} 0.005 0.0001"/>
</body>
</worldbody>
</mujoco>"""

2 s simüle ediliyor; v1v_1 ve v2v_2, 0,5–1,0 s ve 1,5–2,0 s aralıklarındaki ortalama aşağı yönlü hızlar. Creep (eşiğin altında yavaş kayma, bkz. Matematik ayrıntısı) yüzünden “kayma” iki koşul istiyor:

def slips(v1, v2):
return v2 > 2.0 and (v2 - v1) > 0.5 # cm/s: fast AND accelerating

Kayma açısı, kendisinden büyük her açıda da kaymanın olduğu en küçük açı; grid 0,05°, arctan⁡μ\arctan\mu‘nün 3° altından 1° üstüne kadar.

Tahmin et. 10 kg’lık bir küp 0,1 kg’lıktan daha büyük bir açıda mı kayar?

Çalıştır. experiment.py, MuJoCo 3.17.0, Apple M5, dt = 2 ms, deterministic; çıktı output.txt’de.

μarctan⁡μ\arctan\mu0,1 kg1 kg10 kg
0,316,70°16,75°16,75°16,75°
0,526,57°26,60°26,60°26,60°
0,838,66°38,70°38,70°38,70°

Gözlemle.

  • Kütlenin etkisi yok: bütün sweep boyunca 0,1 kg ve 10 kg’lık küplerin hız dizileri en fazla 2,1·10⁻¹² cm/s farklı (yuvarlama).
  • Ölçülen açı teoriden en fazla bir grid adımı uzakta (en büyük sapma +0,05°). μ = 1 için script 45,00°‘ye karşı 44,90° veriyor.
  • Creep. Eşiğin en az 1° altında küp hâlâ sabit hızla hareket ediyor: μ = 0,3, 0,5, 0,8 için 0,30, 0,60 ve 1,42 cm/s’ye kadar; v2−v1v_2 - v_1 ise 0,05 cm/s’nin altında kalıyor. Yalnızca hıza bakan bir kriterle (v2v_2 > 2 cm/s) “kayma açısı” μ = 0,3 ve 0,5 için 16,35°‘ye (−0,35°) ve 26,25°‘ye (−0,32°) düşüyor. O kriterin yakaladığı şey ivmelenme değil, creep.
  • Elliptic cone hizalı küp için aynı açıları veriyor (16,75°, 26,60°, 38,70°).

Küpü rampa normali etrafında 45° döndür. Coulomb friction izotroptur, hiçbir şey değişmemeli:

μconekayma açısıteoriye göreeşiğin ≥ 0,5° altında en yüksek sabit hız
0,5pyramidal26,30°−0,27°7,40 cm/s
0,5elliptic26,60°+0,03°0,18 cm/s
0,8pyramidal37,70°−0,96°27,24 cm/s
0,8elliptic38,60°−0,06°0,34 cm/s

Default pyramidal cone’da döndürülmüş küp μ = 0,8’de neredeyse 1° erken kayıyor ve durması gereken yerde 27,24 cm/s’ye kadar kayıyor. Elliptic cone bir iki grid adımı içinde kalıyor. Makul bir mekanizma, piramidin kenarlarının contact frame’ine bağlı olması ve böylece izin verilen teğetsel kuvvetin yöne bağlı hâle gelmesi; ama bu burada ayrıştırılmadı (box–box contact noktalarının yerleşimi de rotation’la değişiyor). Bunu ölçülmüş bir uyarı olarak al: friction limitleri önemliyse (grasping, ayak kayması) cone="elliptic" kullan ya da bir sweep’le doğrula.

Bu sayıların arkasındaki hız eğrileri, μ = 0,8 için, iki sapmayı birlikte gösteriyor (plot.py aynı sweep()’i yeniden çalıştırıyor; açı başına hızlar output.txt’de yok):

μ = 0,8 için kararlı aşağı yönlü hızın rampa açısına göre log eksenli grafiği. Hizalı küp pyramidal cone'la eşiğin altında sabit bir hızla creep yapıyor (1,42 cm/s'ye kadar) ve 38,70°'den itibaren ivmeleniyor; 45° döndürülmüş küp pyramidal cone'la eşiğin çok altında bile birkaç cm/s ile kayıyor; döndürülmüş küp elliptic cone'la en yavaş kalıyor ve hemen altındaki tek bir açı dışında 38,60°'den itibaren kayıyor.

  • Menagerie SO-101 zaten cone="elliptic" ve impratio="10" kullanıyor, yani yukarıdaki slow slippage önlemini. Gripper collision geom’ları friction="1 5e-3 5e-4", condim="6" ve priority="1" kullanıyor, yani onların μ = 1 değeri nesneninkini eziyor (so101.xml). μ = 1’in baskı pad’lerle belirli bir nesne arasında tutup tutmadığı gerçek kolda henüz ölçülmedi.
  • Prosedür (bu deneyle aynı): nesneyi pad malzemesinden bir rampaya koy, yavaşça eğ, kayma açısını 5 kez kaydet, μ = tan θ. Gerçek yüzeylerde statik katsayı kinetikten büyüktür; MuJoCo’nun tek μ’sü bu farkı temsil edemez.

Hızlı kontrol · 2 soru. Bir cevaba tıkla.

1. Eşiğin altında simüle edilen küp hâlâ küçük, sabit bir hızla hareket ediyor. “Kayma” yalnızca “2 cm/s’den hızlı” demekse ne ters gider?

  • Hiçbir şey; creep her açıda 2 cm/s’nin çok altında bir yuvarlama hatası.
  • Ölçülen kayma açısı fazla büyük çıkar, çünkü creep küpü yavaşlatır.
  • Creep kayma sayılır, yani ölçülen kayma açısı fazla küçük çıkar.

Neden: Yumuşak friction creep yapar. Gözlemle’de yalnızca hıza bakan kriter μ = 0,3 için 16,35° (−0,35°), μ = 0,5 için 26,25° (−0,32°) veriyor; ivmelenme şartı bunu düzeltiyor.

2. Küp rampa normali etrafında 45° döndürülüyor. Coulomb friction izotroptur, hiçbir şey değişmemeli. μ = 0,8’de koşu ne gösterdi?

  • Default pyramidal cone neredeyse 1° erken kaydı (37,70°); elliptic cone teoriye yakın kaldı (38,60°).
  • İki cone da aynı açıyı verdi; cone yalnızca solver hızını etkiler.
  • Elliptic cone erken kaydı, pyramidal cone tam teoride kaldı.

Neden: Boz tablosu, pyramidal −0,96° ve durması gereken yerde 27,24 cm/s’ye kadar kayma. Friction limitleri önemliyse cone="elliptic" kullan ya da bir sweep’le kontrol et.

  1. Kolay. mass’ı 1000 kg yap. μ = 0,5’teki kayma açısını tahmin et, sonra düzenleyip --quick ile çalıştır.
  2. Orta. Rampaya μ = 0,3, küpe μ = 0,8 ver. Hangi açıda kayar? Sonra rampa geom’una priority="1" ekle.
  3. Zor. μ ∈ [0,5, 1,25] ile eğitilmiş policy için rampadaki kayma açısı aralığını hesapla. Sonra döndürülmüş küp ve iki cone ile pyramidal sonucun μ = 1,25’te ne kadar sapabileceğini ölç. Ders 39 · Domain randomization için not al.
  1. Değişmez, bu düzenekte 26,60°: kütle sadeleşir.
  2. Priority olmadan MuJoCo büyük μ’yü, 0,8’i kullanır, yani yaklaşık 38,7° bekle; rampada priority varken μ = 0,3, yaklaşık 16,75°. Doğrulamak için çalıştır.
  3. Teoride arctan⁡0,5\arctan 0{,}5‘ten (26,57°, script yazdırıyor) arctan⁡1,25\arctan 1{,}25‘e; döndürülmüş küpün μ = 1,25’teki sapması tahminle değil ölçümle bulunmalı.
  • tan θ = μ, kütleden bağımsız; kayma kriteri ivmelenme istediğinde MuJoCo bunu μ = 0,3–0,8 için 0,05° içinde üretiyor (μ = 1’de 45,00°‘ye karşı 44,90°).
  • Soft contact eşiğin altında creep yapıyor (burada 1,42 cm/s’ye kadar); yalnızca hıza bakan kriter creep’i kayma sanıyor.
  • Default pyramidal cone bu testte yöne bağlı (45°‘de −0,96°); elliptic değil.

Sonraki: ders 05 · Joint’ler ve actuator’ler.

Kaynaklar