SO-101 Seyir Defteri

Hazır alınmış bir SO-101 çiftinden XOX oynayan bir politikaya: yapılanlar, öğrenilenler, sıradakiler.

Beyaz tahta daha geniş bir ekran istiyor — notlar sırayla aşağıda.

●not

Kurulum: kutudan çıkış

Hazır alınmış bir SO-101 leader + follower çifti. Motor ID'leri (1–6) ve baudrate (1.000.000) satıcı tarafından yazılmıştı, lerobot-setup-motors adımı atlandı. Proje so101/ altında kendi sanal ortamıyla kuruldu: lerobot[feetech,dataset,viz,training]==0.6.1, MacBook Pro M5, 32 GB.

ilk gün
Kutuiki kol, iki USB
Portvoltajla ayır
venvlerobot 0.6.1
Kalibrasyonertesi gün
FollowerLeader
Motor voltajı~12,5 V~5,5 V
ServoSTS3215 ×6STS3215 ×6
Port (o gün)usbmodem5AB01794851usbmodem5A7C1232561

İki USB port, hangisi hangisi? Motordan voltaj oku: 12 V follower, 5 V leader. Port adları yeniden takınca değişebilir, voltaj değişmez.

#so101#kurulum
●not

Kalibrasyon

Kalibrasyon iki şey kaydeder: her motor için "orta" sayılan sıfır noktası ve eklemin gidebildiği iki uç. Teleop'ta leader eklemi kendi aralığının yüzde kaçındaysa follower da kendi aralığının aynı yüzdesine gider; bu yüzden iki kolun uçları aynı fiziksel açılara denk gelmeli. Dosyalar so101/calibration/follower.json ve leader.json, 13 Eylül 14:10.

EklemFollowerLeaderFark
shoulder_pan229°238°9°
shoulder_lift209°210°1°
elbow_flex193°193°0°
wrist_flex197°206°8°
gripper128°104°çene / tetik, normal

Hiçbir eklemde drive_mode çevirmek gerekmedi. Aynı dosya iki hafta sonra MuJoCo'ya da hizmet etti: 2048 tick kalibrasyon orta pozu, (tick - 2048) * 360 / 4096 derece.

Follower sert (1:345 dişli). Dayanağa varmadan bırakınca aralık dar kalıyor ve pozlar "eşit değil" görünüyor. Her eklemi mekanik sınıra kadar it.

"Press ENTER to use calibration file, or type c" sorusunda Enter dosyayı kullanır, c baştan kalibre eder. Bir kez yanlış tuş, 40 dakika.

Arkadaşın gönderdiği dosyalar kolların eski montajına aitti: dirsekte 78° hayali aralık, tutucu 88° kaymış. Kalibrasyon kola değil, o günkü montaja aittir.

#kalibrasyon#feetech
●not

Teleop ve üç tuzak

13 Eylül: leader'ı elle oynat, follower birebir izlesin. Beş eklemin yönü de doğru çıktı, takip hatası ortalama 1 birim (aralığın %0,5'i). Ama oraya üç tuzaktan geçerek varıldı.

takip hatası, kayıt sırasında (norm birim, -100..100)
shoulder_pan0.64birim
shoulder_lift1.75birim
elbow_flex2.25birim
wrist_flex1.36birim

--robot.max_relative_target=2 freni dirseği kilitledi. Kontrolcü sadece P ile çalışıyor; hedef ile konum farkı 2 birimle sınırlanınca yerçekimi yükündeki dirseği kıpırdatacak kuvvet oluşmadı. Fren yok, resmî akış neyse o. Hashtag Robotics 5.0 kullanıyor; gerekmedikçe verme.

İki kol masada aynı yöne bakmalı, operatör arkada. Birbirine dönük durunca omuz ve taban aynada gibi "ters" görünür, aslında doğrudur. drive_mode çevirme, düzeni düzelt.

Teleop açıkken seri porta ikinci bir süreç dokunursa ikisi de düşer: "multiple access on port". Önce kapat, sonra oku.

#teleop
◐not

Kameralar

İki görüş, 640×480, 30 fps. Bilek kamerası kutudan çıkan modül; ön/üst görüş için önce MacBook'un kendi kamerası kullanıldı, iki hafta sonra sabit bir Logitech C310 tepeye alındı.

AdDonanımOpenCV indexNe görüyor
wristUSB2.0_CAM1, Sonix 05A3:9230, bileğe monte0iki çene ve aralarındaki nesne
front (v2, eski)MacBook dahili kamera1tahta, halka, kol; ekran açısına bağlı
top (16 Eylül)Logitech C310, masanın üstünde1tahta, iki bölge, kol tabanı; tepeden
Logitech C310'dan tepeden görünüm: ızgara, halkalar ve kol tabanı Eğitim verisindeki ön kamera kareleri: laptop gövdesi altta, ızgara ortada

Ders: kamera bir donanım değil, bir sözleşme

İlk robot denemesinde politika dinlenme pozundan çıkmadı. Sebep laptop ekranıydı: kayıt gecesi ekran daha öne eğikti, denemede daha dik. Model bu görüntüyü hiç görmemişti. Ekran eğitimdeki açıya getirilince kol yüzüğe gitti. Kayıt başladıktan sonra kameranın yeri, açısı, ışığı bir daha değişmez; laptop kamerası bunu vaat edemez, masaya sabitlenmiş C310 eder.

Elenenler: GoPro Hero 5 USB'den kamera değil hafıza kartı olarak görünüyor, HDMI yakalama kartı ister. iPhone Continuity Camera Mac'te kamera olarak listeleniyor, yedek olarak duruyor. Hashtag'in kulesindeki 32×32 mm modül (referans: Innomaker U20CAM-1080P) sadece kuleye birebir oturmak istenirse.

#kamera#c310
●deney

İlk veri seti: ring-center-v2

14 Eylül, data/ring-center-v2. Görev cümlesi: "Pick up the white ring and place it in the center square of the grid."

10

bölüm
8 040kare, 30 fps
21–33 sbölüm süresi
170 MBdisk
bir bölümün ritmi
Recordinghalkayı al, ortaya koy, kolu geri getir, →
Resethalkayı yeni noktaya koy, leader'a dokunma
Kötü bölüm← ile sil, tekrar çek
BitirEsc

Sabit tutulanlar: aynı halka, tahta aynı yerde, aynı başlangıç pozu, aynı ışık. Değişen tek şey halkanın başlangıç noktası, 15×15 cm'lik bir alan içinde.

Bölüm bitince video kodlanırken follower birkaç saniye takip etmez; o sırada leader oynatılırsa sonraki bölümde follower tam hızla sıçrar. --dataset.streaming_encoding=true bu donmayı kaldırdı.

Komutları tam yolla ver. Bir kez data/ içinden çalıştırılınca kalibrasyon bulunamadı, veri yanlış yere yazıldı. ring-center-v1 bu yüzden çöp.

Geriye bakınca

Bu veri setinin üç kusuru ancak robotta ortaya çıktı: her bölümün başında 5–7 saniye hareketsiz bekleme vardı, ön kamerada leader ve elim görünüyordu, ve 10 bölüm her iki yöntem için de tabanın altında. Üçü de bir sonraki kayıt protokolünde düzeltildi.

#dataset#lerobot-record
●deney

ACT eğitimi

ACT (Action Chunking with Transformers): iki kamera görüntüsü ve altı eklem açısından, gelecek 100 adımlık (3,3 s) hareket dizisini tek seferde tahmin eden bir transformer. Adım adım değil öbek öbek tahmin ettiği için az veriyle akıcı hareket öğrenir. SO-101 için standart ilk politika.

52 M

parametre
20 000adım, batch 8
1,05 sadım süresi, M5 MPS
5 sa 17 dktoplam
MetrikBaşlangıçSon (adım 20k)
l1_loss0,670,076
loss0,091
kld_loss0,002
epoch19,9

Kontrol noktaları her 5 000 adımda checkpoints/ altına. caffeinate -i ile gece boyu; terminal kapanırsa --resume=true.

Kayıp değerinin düşmesi görevin öğrenildiğini söylemez; eğitim verisinin ezberlenebildiğini söyler. Asıl test bir sonraki kartta.

#act#mps
●deney

Offline sağlama ve MuJoCo replay

Robota dokunmadan yapılan sağlama: politika, kayıttaki gerçek kamera karelerini sırayla alır ve tıpkı robotta olduğu gibi 100 adımlık chunk'lar üretir. Ürettiği aksiyon kayıttaki aksiyonla karşılaştırılır. Kod so101/sim_check/act_offline_check.py.

Bölüm 0: kayıt siyah, ACT tahmini kırmızı, follower durumu mavi; noktalı çizgiler chunk sınırı
panliftelbowwrist_flexwrist_rollgripperort.
ACT hatası (MAE, 10 bölüm)1,23,13,42,30,40,81,85
Leader–follower takip hatası0,61,82,31,40,21,41,3

Birim: normalize motor konumu (-100..100). Politikanın hatası, kayıt sırasında follower'ın leader'ı takip hatasıyla aynı seviyede; gripper'ın açılıp kapanma zamanı da tutuyor.

MuJoCo'da oynatma

Aynı yörüngeler SO-101'in MuJoCo modelinde yan yana oynatıldı: solda kayıt, sağda tahmin. Uç nokta farkı ortalama 8 mm, en kötü 24 mm. Dönüşüm: normalize birim, kalibrasyon aralığıyla tick, sonra derece. Izgara adımı iki hafta sonra Hashtag verisinde tam 80 mm çıkınca bu dönüşümün doğruluğu da kanıtlanmış oldu.

MuJoCo'da yan yana: solda kayıt, sağda ACT tahmini
#sim_check#mujoco
●deney

Robotta ilk deneme

Bu LeRobot sürümünde lerobot-record politika almıyor; robotta çalıştırma lerobot-rollout ile. Üç deneme, üç farklı sonuç, hepsi aynı hikâyeyi anlatıyor.

üç deneme
1ekran açısı farklı
kol dinlenme pozunda
her 100 karede bilek kıpırdıyor
2açı eşleştirildi
kol yüzüğün üstüne gitti
yaklaş–çekil döngüsü, gripper açılmadı
3operatör kadrajda
kol yine dinlenmede
iki küçük hamle, geri

Deneme 1. Rerun'daki aksiyon grafiği periyodikti: her 100 karede, yani her ACT chunk'ında, bilek biraz kalkıyor, chunk sınırında geri iniyor. Politika "dinlenme pozunda kal" diyordu. Eğitim karelerine bakınca fark ortaya çıktı: kayıt gecesi laptop ekranı daha öne eğikti, ızgara ortada, alt şeritte laptop gövdesi; denemede ekran daha dikti, arka duvar ve lamba görünüyordu.

Deneme 2. Ekran eğitimdeki açıya getirildi. Kol dinlenmeden çıktı, yüzüğün üstüne uzandı, sonra asılı kaldı: yaklaştı, geri çekildi, yine yaklaştı. Gripper hiç açılmadı; eğitim verisinde gripper kol yüzüğe vardıktan sonra açılıyor, kol oraya hiç varmadı. Temporal ensembling (--policy.temporal_ensemble_coeff=0.01 --policy.n_action_steps=1) checkpoint üstüne yüklenebiliyor, M5'te adım başına 40 ms; denendi, davranış değişmedi.

Deneme 3. Kayıt sırasında ön kameranın sol yüzde kırkında kolum ve gövdem vardı. Kol yine dinlenme pozuna yapıştı.

Replay testi: pipeline mi, düzen mi?

lerobot-replay ile bölüm 0'ın kayıtlı aksiyonları follower'a birebir oynatıldı, 34 saniye, bölüm süresiyle aynı. Kol doğru hareketi yaptı ama yüzüğü birkaç santim ıskaladı. Yani robot, kalibrasyon (dosya 13 Eylül, kayıttan önce, değişmemiş), veri ve politika doğru; kayıttan bu yana yüzük ya da kol tabanı birkaç santim kaymış ve 10 bölümle eğitilmiş politika bunu tolere edemiyor.

Üç denemenin ortak paydası: politika eğitimde görmediği bir görüntüye düşünce en güvenli şeye, başlangıç pozuna yapışıyor. Kamera açısı, kadrajdaki insan, kaymış yüzük: hepsi aynı hata sınıfı.

#lerobot-rollout#replay
●şema

Neden çalışmadı: ezber mi, genelleme mi

Ağ, "görüntü + eklem açıları (+ cümle) → sonraki 100 eklem hedefi" fonksiyonunu öğreniyor. Servo okumaları kolun şu an nerede olduğunu, kameralar nesnelerin nerede olduğunu söylüyor. Kilit nokta: ağ sadece veride değişen şeyleri kullanmayı öğrenir.

ne öğrenildi, ne öğrenilmedi
Halka her bölümde farklı yerde
bilek kamerası bilgi taşıyor
kavrama halkaya göre ayarlanıyor ✓
Izgara hep aynı yerde
üst görüntü bilgi taşımıyor
hücre = sabit eklem açıları ✗

Tam ezber değil, ama ezbere yakın: gördüğü aralıkta genelleme, dışında ezber. Bir garajda park etmeyi öğrenmiş biri gibi. Gözünü kullanır, çöp kutusu yerinden oynamışsa fark edip direksiyonu düzeltir; ama başka bir garaja sokarsan yine eski yerde döner.

LLM bunu çözmez

Hashtag Robotics mimarisinde LLM'in (Strands Agent) işi "hangi hamle" sorusu: tahtaya bakar, yasal hücreyi seçer, 18 sabit cümleden birini üretir. Cümle politikaya gider. Politika "top left cell" için eğitimde neredeyse oraya gider; tahta 10 cm kaydıysa eski yere. LLM'in "tahta 10 cm sağda" diyebileceği bir kanal yok; cümleye eklesen bile politika o kelimeleri hiç görmedi. LLM hatayı üst kameradan fark edip yeniden deneyebilir, düzeltemez.

Taşınabilirlik için üç yol

YolNe isterKarar
Fikstür: tahta, çerçeveler, kol tabanı ve kamera tek plakadakontrplak, vidaönerilen; "istediğim yere koyayım" geometriyi hiç bozmaz
Veri çeşitliliği: tahta her bölümde farklı yer ve açıdabirkaç yüz bölüm, birkaç eğitim turusonra; Hashtag bile yapmamış
Hibrit: ArUco ile tahtayı bul, klasik kontrolle yerleştirkamera-robot kalibrasyonu, IKLeRobot dışı, ayrı proje

Taş bekleme bölgesinde 2–3 cm kaymış: olur. Tahta 5 cm kaymış veya dönmüş: yanlış hücre. Kamera oynamış: çalışmaz. Başka masa, aynı fikstür ve kamera: ışıkla düşer ama çalışabilir.

#genelleme#dağılım kayması
●şema

MuJoCo XOX tezgâhı

Görüş politikası simde çalıştırılamaz, kamera görüntüsü yok. Ama simülasyon iki şey için işe yaradı: Hashtag Robotics'in tezgâhını görmek ve yörüngeleri kontrol etmek. Kod so101/sim_check/xox_*.py, üst repodaki .venv (mujoco 3.12).

MuJoCo'da XOX tezgâhı: solda 3/4 görünüm, sağda üst kamera

Tezgâh nasıl bulundu

Satıcı ölçülü fikstür çizimi yayımlamamış. Onun yerine 195 gösterimin eklem kayıtları (sadece parquet, 8 MB, video yok) indirildi; her bölümde gripper'ın kapandığı ve açıldığı kare ileri kinematikle uç nokta konumuna çevrildi. Bırakma noktaları hücreye göre ortalandı, üstüne 3×3 ızgara oturtuldu.

80,0 mm

ızgara adımı (tasarım 80)
8 mmartık, ortalama
234 mm öndetahta merkezi, tabandan
robotun sağı / soluX / O bölgesi

Kalibrasyon satıcının değil bizim follower'ınki; adımın tam tutması dönüşümün yeterince doğru olduğunu gösterdi. Taşlar mocap gövde: gripper kapanınca çene ucuna yapışır, açılınca komuttaki hücreye oturur (kayıtlar doğrulanmış başarılı yerleştirmeler; ham bırakma noktası hücreden 10–50 mm sapıyor).

Oyun 1'in son hamlesi simde

Arayüz

  • Pencere: mjpython sim_check/xox_sim.py --viewer
  • Tuşlar: 1–9 hücre (numpad düzeni), X/O taş; oynat Enter, oyun 1'in sıradaki hamlesi G, sıfırla R
  • Video: --game 1 --out outputs/sim_check/xox_game1.mp4
#mujoco#xox
●kaynak

SmolVLA mı, ACT mi; kaç bölüm?

Soru: SmolVLA ile eğitirsek daha az veriyle olur mu? Kaynaklı cevap: hayır. SmolVLA'nın kazandırdığı şey az veri değil; aynı veriyle daha yüksek başarı, ışığa ve arka plana dayanıklılık ve dil komutu.

KaynakBulgu
LeRobot SmolVLA dokümanı~50 bölüm, 5 konum × 10; 25 bölüm "yetmedi"
lerobot issue #123930 bölümle SmolVLA başarısız, aynı veriyle ACT çalıştı
ggando.com, 2026-0350 bölüm / 30 cm alan başarısız; 75 bölüm / 10 cm başarılı; SmolVLA %60–80, ACT %80
SmolVLA makalesi, SO-101SmolVLA %90 eğitim konumlarında, %50 yeni konumda; ACT %70 / %40
SO-101 VLA benchmark, 2026-06, 100 gösterimπ0.5 %56, ACT %34, SmolVLA %32,5
SEVO, 2026-05ışık, arka plan ve dikkat dağıtıcıyı kayıtta çeşitlendirmek genellemenin en önemli faktörü
veri sayısı: taban ve tavan
bizim ring-center-v210 bölüm
LeRobot docs tabanı50 bölüm
ggando, başarılı koşu75 bölüm

Konum çeşitliliği pahalı: konum başına 10 gösterim, alan büyüdükçe daha fazla. Küçük alan + çok tekrar, büyük alan + az tekrardan iyi.

Kararımız: SmolVLA, ama 50 bölüm tabanıyla. Sebep az veri değil; XOX'un 18 görevini tek politikada cümleyle ayırt etmesi ve Hashtag reçetesinin bu olması.

Kaynaklar: LeRobot SmolVLA · issue #1239 · ggando · SmolVLA makalesi · benchmark

#smolvla#act#veri
●kaynak

Sim sentetik veri üretir mi?

Soru: MuJoCo'da sentetik veri üretsek? Kaynaklı cevap: 2026 itibarıyla hayır. MuJoCo'da eğitilip gerçek SO-101'e aktarılmış tek bir ACT/SmolVLA politikası yayımlanmamış; topluluğun MuJoCo ortamlarının hepsi "sim-only" ya da "phase 2 unstarted".

Ne çalışmışKoşulSonuç
Squint: görsel RL, ağır domain randomizationRTX 3080+, bilek kamerası, siyah fon, küp/kutugerçekte %91, 8 görev
NVIDIA Isaac + GR00T N1.6, 75 sim gösterimRTX 4090 sınıfı, Dockersimde %50–70; gerçekte pick %95→%75, uçtan uca %50→%40
DreamGen: video dünya modeli, "nöral yörüngeler"13 gerçek + 40 sentetik, tic-tac-toeGR00T N1 %21 → %45
HIL-SERL SO-101 bloguMuJoCo → gerçek RL"başarısız", gerçek robotta devam

LeRobot ekibi simi RL yığınını test etmek ve benchmark için kullanıyor; SO-101 için resmî sim veri seti ya da simde eğitilmiş checkpoint yok. Hashtag Robotics'te sim, chunk'ı gerçek kola göndermeden önce fizikten geçirmek için var.

Bizim simülasyon görselleştirme ve yörünge kontrolü için kalıyor. Çeşitlilik simden değil kayıt protokolünden gelecek: 5 konum × 10 bölüm, sonra tahta durumu çeşitliliği.

Kaynaklar: Squint · NVIDIA sim-to-real kursu · DreamGen · LeRobot il_sim

#sim-to-real
●kaynak

Hashtag Robotics reçetesi

Hedefimiz bu proje: Hashtag Robotics SO-101 tic-tac-toe. Ne yaptıklarını dosyalarından çıkardık; yayımlamadıklarını da not ettik.

Hashtag Robotics
Veri195 bölüm = 15 oyun × 13; 18 görev (kırmızı X, beyaz O × 9 hücre); 80 dakika
Düzensabit tahta 240 mm, 52 mm kare taşlar, iki 250×200 mm bekleme çerçevesi; taş çerçeve içinde serbest
Kameralarüst: 60 cm kulede 32×32 mm USB modül; bilek. 640×480, 30 fps
Cümle şablonuput the red X in the top left cell (top = tabandan uzak satır, left = robotun solu)
Modellerobot/smolvla_base tam fine-tune, 120k adım, batch 16, Colab A100, 14,7 saat
Kayıtlı oyun65 bölüm / 80k adımlık daha eski modelle; 120k için ölçülmüş başarı yok
Runtimelerobot-rollout episodic, async full-chunk (rtc.enabled=false, queue_threshold 18), max_relative_target 5.0, macOS AVFoundation
Hamle seçimiStrands Agent (Ollama vision modeli) yasal hücreyi seçer, deterministik kod 18 cümleden birini üretir
mimari
Üst kameratahta durumu
Strands Agentyasal hücre
Şablon18 cümleden biri
SmolVLA50 adımlık chunk
Doğrulamaüst kamera

Bizim farklarımız: taşlar doğaçlama (metal halka O, ince artı X), üst kamera C310, taşların bölgeleri tersti, düzelttik. Aynı olanlar: iki kamera, cümle şablonu, görev başına ~10 bölüm, SmolVLA, Colab.

#hashtag-robotics#tic-tac-toe
●kaynak

Colab bütçesi ve Mac inference

Eğitim Colab'da, çalıştırma Mac'te. İkisinin de sayısı ya ölçüldü ya kaynaktan alındı.

KalemDeğerNot
Colab Pro100 birim / ayelde var
A1005–11 birim / saat2026 ölçümleri farklı; yaklaşık
SmolVLA 20k adım, batch 64, A1004–5 saat, ~$2–4docs + topluluk
Oturum limiti12 saatcheckpoint Drive'a, --resume
Hashtag'in 120k koşusu14,7 saat, ~80 birimoturuma sığmaz; gereksiz
L4 (22 GB)batch 8–16A100 yoksa

Varsayılan reçete ucuz

LeRobot'un kurulu SmolVLA varsayılanı tam fine-tune değil: freeze_vision_encoder=True, train_expert_only=True. 450M parametrenin sadece ~100M'lik aksiyon uzmanı eğitiliyor. Toplulukta çalışan sonuçlar (ggando %60–80, Galway 8/10, cn0303) bu varsayılanla alındı. Hashtag ikisini de kapatıp tam fine-tune yapmış; belgelenmiş bir kazancı yok.

Mac'te çalıştırma

0,37 s

SmolVLA, 50 adımlık chunk, M5 MPS
1,67 s hareketchunk'ın karşılığı, 30 fps
40 msACT ensemble modu, adım başına

Sync modda SmolVLA'yı 4,5 Hz'de "kullanılamaz" bulan ekip var; Mac'te CUDA'sız ACT'i 15 Hz'de çalıştırınca başarının %90'dan %40'a düştüğünü ölçen de. Bu yüzden rollout komutunda RTC var: --inference.type=rtc --inference.rtc.execution_horizon=10 --inference.rtc.max_guidance_weight=10.0. Chunk hesabı kol hareket ederken yapılır, kol beklemez.

Kaynaklar: hardware guide · RTC · Galway · DevelopersIO

#colab#rtc#mps
◐not

Yol haritası: dört faz

Karar 16 Eylül'de verildi: gerçek teleop verisi, SmolVLA fine-tune (Colab A100), Mac'te RTC inference, sabit fikstür. Sim sentetik veri yok. Bu hafta robottan uzaktayım; haftaya devam.

dört faz
Faz 0 · donanımC310 üst kamera ✓ · baskılar ve fikstür plakası ○
Faz 1 · yüzük v350 bölüm, 5 konum × 10 · Colab SmolVLA 20k · Mac RTC
Faz 2 · XOX18 görev × 10 bölüm · satıcı checkpoint'inden fine-tune
Faz 3 · oyun katmanıhamle seçimi (Strands ya da minimax) · doğrulama
FazAmaçÇıkış ölçütü
1 · yüzük v3kayıt protokolünü öğrenmek, Colab ve RTC akışını bir kez uçtan uca görmek; ~$310 denemede 6–8 başarı
2 · XOX koşu Asatıcı checkpoint'inden uzman-only 20k, ucuz18 görev × 3 deneme tablosu
2 · XOX koşu BA zayıfsa smolvla_base tam fine-tune 40kaynı tablo, A ile karşılaştır
3 · oyunpolitika oturduktan sonrabir oyunu baştan sona oynamak

Faz 1'in gerekçesi: XOX 180 bölümlük bir kayıt; protokol hatasını orada değil 50 bölümlük bir turda öğrenmek daha ucuz.

Bizzat görülen üç hata plana girdi: kamera açısı kaydı, operatör kadrajda, yüzük konumu kaydı. Literatürde de en sık başarısızlık nedenleri bunlar.

Ayrıntılı liste so101/todo.md; kayıt planı bir sonraki kartta.

#plan
◐not

Kayıt protokolü ve XOX planı

Kurallar her bölümde aynı. Bunları tutan bir 50 bölüm, tutmayan 200 bölümden iyi.

  1. Kadrajda hareket eden tek şey follower. Leader ve operatör her iki kameranın dışında.
  2. Kamera, tahta, çerçeveler, kol tabanı oturum boyunca hiç oynamaz; ışık sabit. Bantla işaretle.
  3. Bölüm başlar başlamaz hareket. Tek hamlede kavra, hücreye bırak, gripper'ı aç, kolu başlangıca getir, → ile bölümü hemen bitir. Bozuk bölüm ←.
  4. Alınacak taş her bölümde yuvasının içinde farklı bir noktada; 1–3 cm oynat, döndür.
  5. Konum çeşitliliği küçük alanda, çok tekrarla: 5 konum × 10 bölüm.

XOX planı: 18 blok × 10 bölüm

Her blok bir görev cümlesi ve tek bir lerobot-record çağrısı; --dataset.single_task bu sürümde bölüm başına değişmiyor. Bloklar X/O dönüşümlü, üç oturum, oturum başına 6 blok, yaklaşık bir saat. Her bölüm için plan tahtada hangi taşların duracağını ve alınacak taşın yuvasını söylüyor; dataset'teki episode_index plandaki numarayla aynı olur. Üretici scripts/xox_kayit_plani.py, çıktı kayit_plani_xox.md.

#blok içitahta (önce) üst │ orta │ alttaşalınacak taş
601/10. . . │ . . X │ . . O2X yuva 3
…180 satır, her biri bir bölüm
tahta durumu kuralları
X hamlesi#X = #O
O hamlesi#X = #O + 1
bitmiş tahta yok
hedef hücre boş
doluluk 0–6
her yuva en az bir kez
X/O dönüşümlü bloklar
#protokol#kayıt planı
◌açık soru

XOX varyantları

Haftaya robotla denenecek varyantlar. Her biri bir soruya cevap veriyor; sırası maliyete göre.

VaryantDüzenVeriEğitimCevapladığı soru
V0 · yüzük v3C310 üst + bilek, ızgara, halka50 bölüm, 5 konum × 10smolvla_base, uzman-only, 20k, A100protokol ve Colab → Mac akışı çalışıyor mu
V1 · XOX doğaçlamametal halka O, ince artı X, C310, bantla çizilmiş bölgeler180 bölüm, 18 × 10Hashtag checkpoint'inden uzman-only, 20kana deneme: 18 görev, cümleyle ayırt
V2 · XOX tamV1 verisiaynısmolvla_base tam fine-tune, 40k, batch 16uzman-only yetmezse
V3 · ACT kıyasıV1 verisiaynıACT, M5'te gece, 20kaynı veride ACT ne yapıyor; ucuz karşılaştırma
V4 · Hashtag setibaskılı tahta, kare taşlar, kule180 bölümV1 reçetesisatıcı düzenine sadakat ne kazandırıyor
V5 · tahta çeşitliliğifikstür yok, tahta her bölümde farklı yerde300+ bölümV2 reçetesigenelleme; ileride
karar ağacı
V0 6/10+protokol tamam
V1 kaydet3 oturum
V1 koşu A18 × 3 deneme
zayıf görevlere +5 bölüm
V2 gerekirse

Ölçüm her varyantta aynı: görev başına 3 deneme, sonuç doğru hücre / yanlış hücre / düşürdü, tablo. Toplulukta konum çeşitliliği altında %60–80'in üstü nadir; hedef bu bant, 18 görevde tutarlı.

V1'de taşlar satıcınınkinden farklı olduğu için checkpoint avantajı biraz azalır; 180 bölümle sorun olmaz. Halkaların açık ahşap üstünde kontrastı düşük; koyu bant ya da koyu mat, tepeden okuma için.

#xox#deney planı
◐snippet

Komut kartı

Hepsi so101/ içinden, source .venv/bin/activate sonrası. Portlar değişirse ls /dev/cu.usbmodem*. Kameralar: top index 1 (C310), wrist index 0.

Ortak parçalar

ROBOT="--robot.type=so101_follower --robot.port=/dev/cu.usbmodem5AB01794851 --robot.id=follower --robot.calibration_dir=calibration"
LEADER="--teleop.type=so101_leader --teleop.port=/dev/cu.usbmodem5A7C1232561 --teleop.id=leader --teleop.calibration_dir=calibration"
CAMS='--robot.cameras={ top: {type: opencv, index_or_path: 1, width: 640, height: 480, fps: 30}, wrist: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30}}'

Kayıt

lerobot-record $ROBOT $LEADER "$CAMS" \
  --dataset.repo_id=fport/so101_xox_v1 --dataset.root=$PWD/data/xox-v1 \
  --dataset.single_task="put the red X in the top left cell" \
  --dataset.num_episodes=10 --dataset.episode_time_s=30 --dataset.reset_time_s=20 \
  --dataset.streaming_encoding=true --dataset.encoder_threads=2 \
  --dataset.push_to_hub=false --display_data=true
# sonraki bloklar: --resume=true

Eğitim (Colab)

pip install -q "lerobot[smolvla]==0.6.1" && hf auth login --token $HF_TOKEN
lerobot-train \
  --policy.path=HashtagRobotics/smolvla-tic-tac-toe-games-1-15-120k \
  --dataset.repo_id=fport/so101_xox_v1 \
  --rename_map='{"observation.images.top":"observation.images.camera1","observation.images.wrist":"observation.images.camera2"}' \
  --policy.empty_cameras=1 --policy.device=cuda --policy.use_amp=false \
  --policy.scheduler_decay_steps=20000 \
  --policy.repo_id=fport/smolvla_xox_v1 --policy.push_to_hub=true --policy.private=true \
  --batch_size=32 --steps=20000 --save_freq=5000 --save_checkpoint_to_hub=true \
  --num_workers=4 --seed=42 \
  --output_dir=/content/drive/MyDrive/so101/smolvla_xox_v1 --job_name=smolvla_xox_v1 --wandb.enable=false

Robotta (Mac, RTC)

hf download fport/smolvla_xox_v1 --local-dir policies/smolvla_xox_v1
lerobot-rollout --strategy.type=base $ROBOT "$CAMS" \
  --policy.path=policies/smolvla_xox_v1 --policy.device=mps \
  --inference.type=rtc --inference.rtc.execution_horizon=10 --inference.rtc.max_guidance_weight=10.0 \
  --task="put the red X in the top left cell" --duration=40 --display_data=true

Sağlama ve sim

python sim_check/act_offline_check.py --device mps
../.venv/bin/python sim_check/mujoco_replay.py --npz outputs/sim_check/ep000.npz --gif
../.venv/bin/mjpython sim_check/xox_sim.py --viewer
python scripts/smolvla_latency.py --path policies/smolvla_xox_v1 --device mps

Kalibrasyon sorusunda Enter. Teleop açıkken porta dokunma. max_relative_target verme. Komutlar tam yolla.