İçeriğe geç

44 · Söyle, gör, planla, tut

BölümBitirme projesi
Çalışma türüCPU · Mac ya da Colab CPU
Önkoşul21, 24, 31, 39, 42
Önce öğrenyok
Süre~180 dk
Kodexperiments/44-capstone/experiment.py
Durum✅ tam

Bu derste yap

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

Bir sistem, katmanlarının çarpımı kadar iyidir ve her katmanın ölçülebilen bir sözleşmesi olmalıdır.

Önceki her ders tek bir katmanı, diğerlerini ideal kabul ederek test etti: ders 16’nın grasp’i küpün gerçek konumunu biliyordu, ders 21’in perception’ı tek bir kırmızı küp gördü, ders 42’nin agent’ı ground truth’u find_object’ten aldı. Bir araya gelince katmanlar birbirini etkiler: bir IK reddi modele metin olarak döner ve sonraki adımını değiştirir; küçük bir kamera hatası boş bir gripper olarak ortaya çıkar. Bu bitirme projesi bütün zinciri simüle SO-101 üzerinde kuruyor, uçtan uca ölçüyor ve her başarısızlığı bir katmana yazıyor.

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

1. Seri bağlı 5 katmanlı bir sistem uçtan uca %90 başarılı olmalı. Eşit paylaşımda her katman neye ulaşmalı?

  • 0,90, sistemle aynı.
  • 0,886, 30/30 geçen bir katmanın Wilson alt sınırı.
  • 0,979, çünkü seri katmanlar çarpılır (0,979^5 ≈ 0,90).

Neden: Ana fikir: güvenilirlik çarpılır, beş çok iyi katman yine de vasat bir sistem yapabilir; eşit paylaşım pi=P1/Lp_i = P^{1/L}.

2. Bir kamera biraz kaymış. Başarısızlık genellikle nerede ortaya çıkar?

  • Kamera sürücüsünde, bir hata mesajı olarak.
  • Hiçbir yerde; küçük kamera hataları birbirini götürür.
  • Birkaç katman sonra, örneğin boşluğa kapanan bir gripper olarak; kameranın kendisi hata raporlamaz.

Neden: Boz, 2°‘lik eğim; harness her sözleşmeyi kontrol etmeli ve ilk bozulanı suçlamalı.

Robotu bir microservice zinciri olarak düşün: bir cümleyi fonksiyon çağrısına çeviren bir dil modeli, küplerin nerede olduğunu söyleyen bir kamera servisi, bir doğrulayıcı, bir hareket planlayıcısı, bir gripper ve bir hakem; her birinin bir API’si ve kontrol edilebilen bir sözleşmesi var.

Buradan iki şey çıkar. Güvenilirlik çarpılır: uçtan uca başarı oranı servislerin oranlarının çarpımıdır, beş çok iyi katman yine de vasat bir sistem yapabilir. Ve hatayı gösteren servis çoğu zaman sebep olan değildir: biraz kaymış bir kamera hiç hata üretmez, başarısızlık üç servis sonra boşluğa kapanan bir gripper olarak ortaya çıkar. Distributed tracing benzeri bir şeye ihtiyacın var: her sözleşmeyi kontrol eden ve ilk bozulanı suçlayan bir harness.

Zinciri yönetilebilir tutan bir tasarım kuralı var: geometri dil modelinden hiç geçmez. Model bir tool adı ve bir nesne adı üretir; her koordinat kameradan, her eklem açısı inverse kinematics’ten gelir.

flowchart TD
    U["konuşma tarzı komut<br/>(metin)"] --> L["dil modeli<br/>(Ollama, tool'lar)"]
    L -- "pick(object) / place(target)" --> T["tool katmanı"]
    C["tepeden RGB-D kamera<br/>→ perception (x, y)"] --> T
    T --> V["validation<br/>workspace, IK artığı, joint marjı"]
    V --> M["hareket, grasp, bırakma<br/>IK, min-jerk, scripted_pick"]
    M --> R["MuJoCo'da SO-101"]
    T -. "holding / closed on nothing /<br/>reddedildi" .-> L
    R --> H["harness<br/>hüküm simülatör state'inden"]

Her katman önceki bir dersten geliyor: dil 42’den (Ollama tool’ları, temperature 0, seed 0), perception 19–21’den (tepeden RGB-D kamera, HSV maskesi, depth back-projection), validation ve hareket 10, 13 ve 15’ten, grasp 16’dan (servo sıkması, weld yok), harness 25’ten.

Harness başarısız bir episode’u pipeline sırasında sözleşmesini ilk bozan katmana yazar: dil (istenen küpü hiç pick etmedi ya da hiç bırakmadı) → perception (görmedi ya da tahmin gerçek konumdan 8 mm’den fazla uzakta) → IK/limits (validation reddetti) → grasp (küp ≥ 4 cm kalkmadı) → bırakma (kutuda değil). Agent’ın report_result’u kaydedilir, hiçbir zaman hükme katılmaz.

layer = attribute(broken_contracts(episode)) # first broken contract, in pipeline order (Build it, Step 3)
p_end_to_end = math.prod(pass_rates) # layers in series multiply
per_layer = 0.90 ** (1 / 5) # even split: 0.979 per layer for 0.90 end to end
lo, hi = wilson(26, 30) # lesson 25: [0.70, 0.95]
BüyüklükFormül
uçtan uca başarıPuc¸tan uca=∏i=1LpiP_{\text{uçtan uca}} = \prod_{i=1}^{L} p_i
eşit bütçepi=P1/Lp_i = P^{1/L}
Wilson %95 aralığı, nn‘de kkders 25

LL seri katman sayısı, pip_i katman ii‘nin kendisine ulaşan episode’lar arasındaki geçme oranı, PP hedef uçtan uca oran.

Matematik ayrıntısı: çarpım burada neden tam, 30 episode neyi kanıtlayabilir

Çarpım tanım gereği tamdır. pi=gec¸eni/ulas¸anip_i = \text{geçen}_i / \text{ulaşan}_i ile katman i+1i+1‘e ulaşan episode’lar katman ii‘yi geçenlerdir, yani ∏ipi=gec¸enL/ulas¸an1\prod_i p_i = \text{geçen}_L / \text{ulaşan}_1. Bu muhasebe için bağımsızlık gerekmez; yalnızca ayrı ölçülmüş katmanlardan yeni bir sistemi tahmin etmek için gerekir.

Her paylaştırmada her katman hedefin üstünde olmalı. Her çarpan en fazla 1’dir; dolayısıyla her jj için P=∏pi≤pjP = \prod p_i \le p_j: hiçbir katman istediğin sistemden kötü olamaz.

Temiz otuz episode bir kanıt değildir. k=nk = n için Wilson alt sınırı n/(n+z2)n / (n + z^2): n=30n = 30‘da 0,886, eşit bir 5 katmanlı bütçenin istediği 0,979’un altında.

Kamera eğimi geometrisi. Yüksekliği hh olan bir kameranın küçük bir α\alpha eğimi, bir ışının masaya değdiği noktayı yaklaşık h αh\,\alpha kadar kaydırır: 0,6 m’de derece başına yaklaşık 1 cm (Sıfırdan yaz, Adım 1).

Daha derine: ders 25 (başarı oranları ve aralıklar), ders 21 (perception hatası), ders 42 (validation ve yanlış iddialar); birincil kaynak: E. B. Wilson, “Probable inference, the law of succession, and statistical inference” (1927).

Bir arayüz bir tip artı bir sözleşmedir. Kontrol edemediğin bir sözleşme bir umuttur.

arayüznereden → nereyene geçersözleşme
komutkullanıcı → LLMkonuşma tanımadan gelen metinyok
tool callLLM → tool katmanılook(), pick(object), place(target), report_result(...)adlar look() ile eşleşmeli; yoksa hata mesajı
görüntükamera → perception640×480 RGB + depth, fovy 50°‘den KK, extrinsics TwcT_{wc}TwcT_{wc} kalibre edildiği gibi
tahminperception → plannerbase frame’de küp (x,y)(x, y), mhata ≤ 8 mm (ders 21: 8 mm nişan hatası 30 pick’in 9’unu kaybettirdi)
planplanner → validationpre / down / lift pose’ları, artıkyarıçap 12–30 cm, artık ≤ 5 mm, down pose limitlerden ≥ 0,05 rad içeride
trajectoryhareket → servolarher 2 ms’de bir pozisyon hedefictrlrange içinde
sonkoşulgripper → LLMçene açısından “holding” / “closed on nothing”ground truth yok
hükümsimülatör → harnessküp pose’larıistenen küp kutunun içinde, kutuda başka küp yok

KK kameranın intrinsic matrisi, TwcT_{wc} world’deki pose’u (ders 19); ctrlrange her actuator’ün izin verilen komut aralığı.

Şimdi pipeline’ın sözleşmelerini önceki derslerin modüllerinden yeniden kuracak ve her birini Deney’in koşusuyla karşılaştıracaksın: ders 19–21’in kamera modeli (physai.vision), ders 09’un zinciri üzerinde ders 42’nin erişim testi, ders 25’in Wilson aralığı (physai.evaluation). Yalnızca capstone’un eklediği şey yeni, physai/capstone.py içinde. Veri Deney’in output.txt’i, bu yüzden dil modeline ya da renderer’a gerek yok; uv run python experiments/44-capstone/build.py adımları koşturur (çıktı build_output.txt dosyasında).

Gerçek kamera üst yüzün merkezini tam bir pikselde görür; perception o pikselin ışınını kalibre edilmiş kameradan küp üstlerinin düzlemine geri atar. Gerçek kamerayı eğ, ikisi ayrışır:

def tilt(deg, axis=(1.0, 1.0, 0.0)):
"""World-frame rotation of a camera that has tilted by `deg` about a horizontal axis."""
a = np.asarray(axis, float)
return axis_angle_to_mat(a / np.linalg.norm(a), np.radians(deg))
def estimate_xy(p_top, K, R_wc_true, R_wc_model, c, z_top):
"""Where perception puts a cube: the true camera images the top-face centre p_top at the nearest pixel, and
the calibrated (model) camera casts that pixel's ray back onto the plane z = z_top."""
uv = np.round(project_points(p_top[None], R_wc_true.T, -R_wc_true.T @ c, K)) # whole pixels
return ray_plane(uv, K, R_wc_model, c, z_top)[0][0, :2]
== Step 1. Perception: estimate of the requested cube (plain, filler, terse x 5 layouts) ==
K: f = 514.68 px, centre (319.5, 239.5); camera 0.6 m above the table, looking down
tilt deg median err mm max err mm > 8 mm Experiment median mm
0.0 0.4 0.7 0/15 0.4
0.5 5.1 5.6 0/15 4.9
1.0 10.1 10.6 15/15 9.8
1.5 14.9 15.5 15/15 14.9
2.0 20.0 20.6 15/15 19.8
small-angle estimate h * alpha at 1 deg: 9.9 mm

Yalnızca geometri, sıfır eğimdeki 0,4 mm piksel quantization’ı dahil, Deney’in medyanlarını 0,3 mm içinde üretiyor. 1°‘den itibaren 15 tahminin hepsi 8 mm sözleşmesini bozuyor, yine de koşu 1° ve 1,5°‘de 15’te 12 kez başarılı oldu: açık çene sözleşmenin istediğinden fazlasını tolere ediyor.

Ders 16’nın üç grasp yüksekliğinde ders 42’nin ik_position’ı, artı 12–30 cm workspace yarıçapı:

== Step 2. Reach: workspace radius and IK residual of the three grasp points ==
layout cube radius cm reach miss mm ours Experiment
0 blue 14.7 0.21 accept ok
0 green 21.2 0.13 accept ok
0 red 18.1 0.44 accept ok
1 blue 21.0 0.16 accept REJ:IK
1 green 19.2 0.31 accept ok
1 red 20.0 0.25 accept ok
2 blue 21.4 0.34 accept REJ:IK
2 green 17.6 0.27 accept ok
2 red 13.8 0.23 accept ok
3 blue 18.3 0.42 accept ok
3 green 15.9 0.19 accept ok
3 red 14.2 0.35 accept ok
4 blue 13.1 0.24 accept ok
4 green 19.8 0.26 accept ok
4 red 16.6 0.20 accept ok

Yalnızca konuma bakan kontrol, Deney’in reddettiği iki mavi küp dahil 15 küpün hepsini kabul ediyor: ders 16’nın grasp’i ayrıca çenenin aşağı bakmasını ve iki yüze kapanmasını istiyor, pan ekseninden 21,0 ve 21,4 cm’de o yönelim erişim dışında, konum değil. Zayıf sözleşme kolu gripper’ın kullanamayacağı bir poza gönderirdi.

def attribute(broken, order=ORDER):
"""First layer, in pipeline order, whose contract broke; None if all held. broken: set of layer names."""
return next((layer for layer in order if layer in broken), None)

Build script’i her episode’un tool çağrılarını ve perception hatasını output.txt’ten okuyor, bozulan sözleşmeleri işaretliyor (istenen küpün pick’i yok ya da tuttuktan sonra bırakma yok; 8 mm’nin ötesinde tahmin; istenen küpün reddedilen ya da boş pick’i; kutuda değil) ve ilkini suçluyor:

== Step 3. The harness: contracts from each logged episode, first broken layer ==
failed episodes in output.txt: 33; our first broken layer = the Experiment's on 33/33
qwen2.5:7b: language 0, perception 0, IK/limits 4, grasp 0, place 0; success 26/30
qwen3:1.7b: language 5, perception 0, IK/limits 4, grasp 0, place 0; success 21/30

Kalibre ve eğik, 33 başarısız episode’un hepsi Deney’in katmanını alıyor: atama, log’lanmış sözleşmelerin saf bir fonksiyonu, hiçbir şey koşturmadan test edilebiliyor.

def failure_budget(first_failures, n, order=ORDER):
"""Episodes that reach each layer and pass it, from the first broken layer of every failed episode.
Returns [(layer, reached, passed)]; the product of passed / reached is the end-to-end rate."""
rows, reached = [], n
for layer in order:
failed = sum(f == layer for f in first_failures)
rows.append((layer, reached, reached - failed))
reached -= failed
return rows
def even_split(P, L):
"""Pass rate every one of L layers in series needs for an end-to-end rate P."""
return P ** (1 / L)
== Step 4. Failure budget and what 30 episodes certify ==
language reached 30 passed 30 p = 1.000
perception reached 30 passed 30 p = 1.000
IK/limits reached 30 passed 26 p = 0.867
grasp reached 26 passed 26 p = 1.000
place reached 26 passed 26 p = 1.000
product of layer pass rates 0.867 = end-to-end 26/30 = 0.867; Wilson 95% [0.70, 0.95]
even split of 0.90 over 5 layers: 0.979 per layer; a layer that passed 30/30 has Wilson lower bound 0.886
clean episodes needed before the lower bound reaches 0.979: 181

Çarpım 26/30’a sadeleşiyor, aralık ders 25’in wilson’ı ve bir katmanın alt sınırı, eşit 5 katmanlı paylaşımın 0,979’una ancak art arda 181 temiz episode’dan sonra ulaşıyor.

physai.capstone, vision, foundation, kinematics ve evaluation’ın üstüne tilt, estimate_xy, attribute, failure_budget ve even_split ekliyor. tests/test_44_capstone.py onları kontrol eder: uv run pytest tests/test_44_capstone.py; uv run pytest bütün kütüphanenin testlerini koşturur.

Kütüphane parçaları Deney’inkiler: OpenCV maskeleri (ders 21), RGB-D frame için MuJoCo’nun Renderer’ı, ders 16’nın plan ve scripted_pick’i, Ollama’nın /api/chat’i. Build, bunların etrafına harness disiplinini ekliyor:

broken = broken_contracts(cmd, calls, perc_err, success) # read from the log, never from the agent
layer = attribute(broken) # first broken contract in pipeline order
lo, hi = wilson(k, n) # lesson 25, physai.evaluation

Tuzaklar:

  • Atama bir kabuldür. İlk-ihlal suçlaması eğik kameradaki mavi küp retlerini perception’a yazıyor; nedensel bir cevap karşı-olgusal koşu ister.
  • Bozulan sözleşme başarısızlık demek değildir. 1°‘de her tahmin 8 mm’den fazla şaştı ve 15 episode’un 12’si yine başarılı oldu.
  • Aynı kontrol, farklı sözleşme. Konum erişimi ile grasp-pozu erişimi iki küpte ayrışıyor (Adım 2): validation’ın hangisini uyguladığını yaz.

Yazdıktan sonra · 2 soru.

1. Sıfırdan yaz, Adım 1’de saf geometri (izdüşür, piksele yuvarla, geri at) Deney’in medyan tahmin hatalarını 0,3 mm içinde üretiyor. 1°‘de 15 tahminin hepsi 8 mm sözleşmesini bozuyor, yine de 15 episode’un 12’si başarılı. Bundan ne çıkar?

  • Bozulan sözleşme başarısızlık demek değildir; açık çene sözleşmenin istediğinden fazlasını tolere eder ve sözleşme ancak başarısızlığı öngördüğü yerde önemlidir.
  • 8 mm sözleşmesi yanlış ve kaldırılmalı.
  • Deney yanlış küpü ölçtü.

Neden: Adım 1 tablosu: 1°‘de medyan 10,1 mm (Deney 9,8); başarı ancak hata yaklaşık 20 mm’ye vardığı 2°‘de düşüyor (3/15).

2. Sıfırdan yaz, Adım 2 yalnızca konuma bakan bir erişim kontrolüyle 15 küpün hepsini kabul ediyor, ama Deney 1. ve 2. dizilimdeki mavi küpü reddetti. Fark neden?

  • Bizim IK ders 16’nınkinden daha isabetli.
  • Sözleşme farklı; ders 16’nın grasp’i ayrıca çenenin aşağı bakmasını ve iki yüze kapanmasını istiyor, bu da pan ekseninden 21,0 ve 21,4 cm’de erişim dışında.
  • Mavi küpler 12–30 cm’lik workspace’in dışındaydı.

Neden: Adım 2 tablosu, yarıçap 21,0 ve 21,4 cm (workspace içinde) ve erişim kaçırmaları 0,5 mm’nin altında; validation katmanının hangi erişim sözleşmesini uyguladığını yaz.

Sahne. Menagerie SO-101 (2 ms timestep), x 16–25 cm, y −8–10 cm aralığında rastgele, birbirinden en az 7 cm uzak üç adet 3 cm küp (kırmızı, yeşil, mavi, 30 g), (12, −18) cm’de açık bir kutu (içi 8 × 8 cm, 3 cm duvar), masanın 0,6 m üstünde ders 21’in kamerası. pick algılar, doğrular, sonra ders 16’nın fiziksel pick’ini algılanan konuma nişanlayarak koşar; modele cevabı çene açısından gelir.

def pick(self, object):
self.perceive() # arm parked, one RGB-D frame
xy = self.scene.get(f"{color_of(object)} cube") # perception estimate, never ground truth
if xy is None: return error("not visible", self.visible())
if not R_MIN <= dist(xy) <= R_MAX: return reject("outside the workspace")
poses, err = g16.plan(m, home, I, [*xy, HALF]) # lesson 16 IK: pre / down / lift
if err > 5e-3: return reject("not reachable (IK error above 5 mm)")
if margin(poses["down"]) < 0.05: return reject("too close to a joint limit")
g16.scripted_pick(m, d, [*xy, HALF]) # physical grasp, no weld
return "holding" if jaw_angle() > G_CLOSE + 0.15 else "closed on nothing"

Bir simülatör kısayolu kalıyor: scripted_pick, MuJoCo’nun contact listesinde iki çene de küpe değdiğinde sıkmayı bitirir (bir jaw-stall sensörünün yerine; değmezse 4 s timeout). place, algılanan kutu merkezinin 7,5 cm üstü için ders 10’un ik_solve’unu yumuşak bir “çene aşağı” terimiyle (ağırlık 0,003) çözer, oraya min-jerk bir geçişle gider, çeneyi açar ve kolu park eder.

Komutlar. Altı konuşma tarzı komut, her biri aynı 5 dizilimde (seed 0), qwen2.5:7b ve qwen3:1.7b ile: 60 episode.

idkomutkastedilen
plainput the red cube in the boxkırmızı
fillerum, could you grab the green block and drop it in the binyeşil
terseblue one, box, pleasemavi
asrput the read cube in the boxkırmızı (tanıma hatası)
negationthe cube that is neither red nor green goes in the boxmavi
turkishkırmızı küpü kutuya koykırmızı

Tam script: experiments/44-capstone/experiment.py. MuJoCo 3.17.0, NumPy 2.5.4, OpenCV 5.0.0, Python 3.14.7, Ollama 0.32.15, Apple M5; yüklü bir makinede yaklaşık 5 dk.

Tahmin et: en sık hangi katman bozulur?

Uçtan uca (kamera kalibre edildiği gibi):

modelbaşarıWilson %95dilperceptionIK/limitsgraspbırakmayanlış iddia
qwen2.5:7b26/30 (0,87)[0,70, 0,95]004004
qwen3:1.7b21/30 (0,70)[0,52, 0,83]504004

Hata bütçesi, qwen2.5:7b: dil 30/30, perception 30/30, IK/limits 26/30 (0,867), grasp 26/26, bırakma 26/26; çarpım, 0,867, uçtan uca orana eşit. 30/30 geçen bir katmanın Wilson alt sınırı 0,886, eşit bütçenin 0,979’unun altında: 30 episode %90’lık bir sistemi kanıtlayamaz (Sıfırdan yaz, Adım 4: 181 kanıtlardı). 30 episode deterministik bir modelle 6 sabit komut × 5 dizilim, yani aralıklar olsa olsa fazla dar; iki modelin aralıkları örtüşüyor.

Gözlemler.

  • Fiziksel katmanlar tuttu. İstenen küpün perception hatası: medyan 0,35 mm, en büyük 0,63 mm (n = 60); hiçbir başarısızlık grasp’e ya da bırakmaya yazılmadı.
  • 8 IK/limits başarısızlığının hepsi tek bir sebep: 1. ve 2. dizilimlerdeki mavi küp, (23,3, −8,0) ve (24,8, 4,3) cm’de; burada ders 16’nın grasp pose’ları (çene aşağı) 5 mm içinde birlikte ulaşılabilir değil. Validation doğru olarak reddetti, sonra iki model de başka bir küp seçti, onu kutunun üstünde bıraktı ve başarı raporladı: 8 yanlış iddianın hepsi bu hedef değiştirme, ders 42’nin bulduğu başarısızlık.
  • Validation joint aralığının kenarında çalışıyor: kontrol edilmeyen approach ve lift pose’ları bir joint limitine medyan 0,025 rad uzaktaydı (en az 0,000 rad).
  • Tool katmanı net cevap verince dil hataları toparlandı. qwen3:1.7b pick(read cube) ve pick(kırmızı küp) çağırdı, “no ‘read cube’ visible; visible objects: […]” cevabını aldı, look() çağırdı ve ikisinde de 5/5 başardı; filler’da 6 turu bitene kadar place(bin) çağırdı (0/5).
  • Agent ne zaman duracağını bilmiyor. plain’de qwen2.5:7b kırmızı küpü bıraktı, sonra artık kutuda olan küp için pick(red cube) çağırdı; validation reddetti (IK) ve görev yalnızca o pose ulaşılamaz olduğu için tamam kaldı. Determinizm. Temperature 0 ve seed 0; cevaplar bir koşu içinde tam request’e göre memoize ediliyor, bu yüzden 557 request için Ollama’ya 93 farklı çağrı gitti (modele koordinat gitmiyor). Dört koşu ve bağımsız bir inceleme koşusu aynı run signature’ı (f942d461a345) ve aynı tabloları verdi. Bu, ders 42’deki gibi bu makinede bu ağırlıklarla Ollama 0.32.15 için geçerli.

Kameranın extrinsics’i bir kez kalibre ediliyor; sonra gerçek kamera perception’ın bilmediği bir açıyla eğiliyor (yatay eksen (1,1,0)/2(1, 1, 0)/\sqrt 2 etrafında). qwen2.5:7b, plain, filler, terse komutları × 5 dizilim:

Sol: eğime göre Wilson aralıklarıyla başarı, 1,5 dereceye kadar 13/15 ve 12/15, 2 derecede 3/15. Sağ: medyan tahmin hatası 0,4'ten 19,8 mm'ye doğrusal büyüyor ve 8 mm sözleşmesini 1 derecenin biraz altında aşıyor.

eğim [°]medyan tahmin hatası [mm]başarıWilson %95perceptionIK/limitsyanlış iddia
0,00,413/15[0,62, 0,96]022
0,54,913/15[0,62, 0,96]022
1,09,812/15[0,55, 0,93]302
1,514,912/15[0,55, 0,93]302
2,019,83/15[0,07, 0,45]1201

Grasp bu yönde yaklaşık 15 mm’ye kadar hatayı tolere etti (açık çene geniş), sonra 1,5° ile 2° arasında çöktü. 2°‘de görünen belirti gripper’da, “closed on nothing”, ve her yeniden deneme aynı sapmalı tahmine nişanlandı. Bozulan ilk sözleşme, görülen ilk başarısızlığın yukarısındadır: bu başarısızlıkları perception’a yalnızca tahmini gerçekle karşılaştıran harness yazabiliyor. Ve yeniden denemek rastgele hataları düzeltir, sistematik olanları değil; donanımda her oturumdan önce masada bilinen bir konumdaki bir fiducial’ı (basılı bir işaret) kontrol et (ders 19). 1,0° ve 1,5°‘de 3 başarısızlığın ikisi 0°‘deki mavi küp retleri; perception’ın sözleşmesi önce bozulduğu için artık ona yazılıyorlar: ilk-ihlal ataması bir kabuldür, nedensel bir kanıt değildir.

Gerçek kolda henüz ölçülmedi. Prosedür, ders 40’ın donanım adımlarıyla:

  1. Follower’ı kur ve kalibre et: lerobot-setup-motors ve lerobot-calibrate --robot.type=so101_follower --robot.port=... --robot.id=... (LeRobot SO-101); LeRobot’un dereceleri ile modelin radyanları arasındaki ofseti ve işareti fit et (ders 40, Sıfırdan yaz).
  2. Masanın üstüne bir kamera sabitle, intrinsics’i ve kameradan base’e transform’u kalibre et (ders 19) ve her oturumdan önce bilinen masa noktalarındaki bir fiducial’ı 8 mm sözleşmesine karşı kontrol et.
  3. HSV eşiklerini odanın ışığında bir kez yeniden ayarla, sonra dondur (ders 21).
  4. Tool katmanını koru: IK ve validation Menagerie modelinde, joint hedefleri max_relative_target ayarlı gönderilir (ders 15, 40), e-stop tool listesinin dışında.
  5. Hüküm bir sensör ister (kutu bölgesinin bir kamera kontrolü, bir insan etiketiyle doğrulanmış), asla agent’ın raporu değil.
  6. 6 komutu en az 5 dizilimde koş; k/nk/n‘yi Wilson aralığı ve katman dağılımıyla simülasyon sayılarının yanında raporla.

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

1. qwen2.5:7b için perception, grasp ve bırakma 30/30 geçti. Bu neden 5 katmanlı 0,90’lık bir sistem için yeterince iyi olduklarını göstermez?

  • Çünkü hiç başarısız olmayan bir katman şüphelidir ve bozuk olmalıdır.
  • Çünkü 30/30’un Wilson alt sınırı yalnızca 0,886; bu, eşit bir bütçenin katman başına istediği 0,979’un altında.
  • Çünkü uçtan uca oran, katman oranlarının çarpımı değil toplamıdır.

Neden: Matematik ayrıntısı, n=30n = 30‘da n/(n+z2)=0,886n/(n + z^2) = 0{,}886 ve 0,901/5=0,9790{,}90^{1/5} = 0{,}979; Sıfırdan yaz, Adım 4 181 temiz episode gerektiğini buluyor.

2. 2°‘lik modellenmemiş kamera eğiminde görünen belirti, gripper’ın “closed on nothing” raporlaması. Harness hangi katmanı suçlar ve neden?

  • Grasp, çünkü başarısızlık orada görünür oldu.
  • Dil, çünkü agent yeniden denemeye devam etti.
  • Perception, çünkü pipeline sırasında ilk bozulan sözleşme onunki (tahmin gerçeğe 8 mm içinde).

Neden: Boz tablosu, 2°‘de medyan tahmin hatası 19,8 mm ve başarısızlıkların 12’si perception’a yazılıyor. Bozulan ilk sözleşme, görülen ilk başarısızlığın yukarısındadır.

  1. Kolay. Katman geçme oranları 0,99, 0,95, 0,98, 0,97, 0,99 ise uçtan uca oran nedir ve önce hangi katmanı iyileştirirdin?
  2. Orta. Hedef değiştirmeyi imkânsız yap: tool katmanı episode’da ilk adı geçenden farklı bir küpün pick’ini reddetsin. Yanlış iddialara ve başarıya etkisini tahmin et, sonra koş.
  3. Zor. place’ten sonra yeniden bakan ve kutu bölgesinde görülen küpleri döndüren bir verify() tool’u ekle. qwen2.5:7b onu çağırıyor mu ve başarıdan sonraki fazladan pick’i durduruyor mu?
  1. 0,99 × 0,95 × 0,98 × 0,97 × 0,99 ≈ 0,885; kaybın en büyük payını getirdiği için 0,95’lik katman.
  2. Burada hesaplanmadı. Beklenen: yanlış iddialar düşer (8 hedef değiştirme redde dönüşür), başarı değişmez (istenen mavi küp yine erişim dışında).
  3. Burada hesaplanmadı; koş.
  • Bu simülasyonda konuşma tarzı bir komuttan kutudaki küpe kadar bütün zincir qwen2.5:7b ile 26/30 başardı (Wilson [0,70, 0,95]); her başarısızlık tek bir erişim limitiydi ve agent her birini başka bir küp seçerek yanlış bir başarıya çevirdi.
  • Başarısızlıkları harness’te ölçülen arayüz sözleşmelerine göre ata; başarısızlığın görünür olduğu katman (boş bir gripper) çoğu zaman bozulan katman değildir (kameranın extrinsics’i: 2° eğim başarıyı 13/15’ten 3/15’e düşürdü).
  • Temiz 30 episode bir katmanı alttan ancak 0,886 ile sınırlar; 5 katmanlı 0,90’lık bir sistem her katmandan 0,979 ister, bunu göstermek 181 temiz episode ister.

Kaynaklar:

  • Metnin önüne konuşma: Whisper (Radford ve ark., 2022).
  • Modeli robotun yapabildiklerine bağlamak: SayCan (Ahn ve ark., 2022); başarı kontrollerini plana geri beslemek: Inner Monologue (Huang ve ark., 2022).
  • Beceri kodunu model yazar: Code as Policies (Liang ve ark., 2022); 3B value map’ler: VoxPoser (Huang ve ark., 2023).
  • Scripted grasp yerine öğrenilmiş bir policy: ders 31, ders 41; OpenVLA, SmolVLA.