Moduł 21 · Badania: redundancja + planowanie

Redundancja dynamiczna: pasywne, podatne wykonanie

Od kinematyki (rozdz. 11) do momentu napędowego: sterowanie operacyjne (OSC), dynamicznie spójny null-space (J M⁻¹N=0), pasywność (bak energii), podatność w null-space. Warstwa WYKONAWCZA dla planowanej redundancji — most do części badawczej (WP1–WP5).

TL;DR — druga połowa redundancji

Rozdział 11 rozwiązał redundancję kinematycznie — na poziomie prędkości: q˙=J+x˙+(IJ+J)ξ\dot q = J^{+}\dot x + (I - J^{+}J)\,\xi. To wystarcza do planowania. Ale prawdziwa 7-DOF Panda ma bezwładność, grawitację i kontakt — żeby to wykonać na sprzęcie, trzeba zejść na poziom momentu napędowego.

Ten moduł to warstwa wykonawcza redundancji. Trzy rzeczy, których kinematyka nie daje:

  • Dynamicznie spójny null-space — projekcja, która gwarantuje, że ruch własny nie zaburza zadania także dynamicznie (JM1N=0J M^{-1} N = 0), nie tylko kinematycznie.
  • Pasywność (bak energii) — pozwala planować dowolną, zmienną w czasie trajektorię postawy i wykonać ją bez wstrzykiwania energii „z niczego".
  • Podatność (impedancja w null-space) — ramię może ustępować pod kontaktem w przestrzeni zerowej, chroniąc zadanie. Fundament pod planowanie interakcji.

Ten moduł spina platformę planowania z siostrzanym projektem „Franka Redundancy Control" (pełne wyprowadzenia, 5 KPI, dowód Pinocchio≡MuJoCo do 1e-8). Poniższe filmy pochodzą z tamtego, zwalidowanego sterownika i są wykonawcą dla planerów z części badawczej (WP1–WP5).

Dlaczego kinematyczna projekcja to za mało

Projektor z rozdz. 11, P=IJ+JP = I - J^{+}J, spełnia J(Pξ)=0J\,(P\xi) = 0 — ruch własny nie zmienia prędkości narzędzia. Ale moment przyłożony w tym samym kierunku może rozpędzić zadanie, bo momenty sprzęgają się przez bezwładność M(q)M(q). Potrzebna jest projekcja ważona bezwładnością (Khatib, operational space):

Λ=(JM1J)1,Jˉ=M1JΛ,N=IJJˉ        JM1N=0\Lambda = (J M^{-1} J^\top)^{-1}, \quad \bar J = M^{-1} J^\top \Lambda, \quad N = I - J^\top \bar J^\top \;\;\Rightarrow\;\; J\,M^{-1} N = 0

Λ\Lambda to inercja w przestrzeni zadania („masa, jaką czujesz pchając narzędzie"), Jˉ\bar J to dynamicznie spójna pseudoodwrotność, a NN — projektor null-space z kluczową własnością JM1N=0J M^{-1} N = 0: dowolny moment włożony przez NN daje zerowe przyspieszenie narzędzia. To jest fizycznie poprawny odpowiednik IJ+JI - J^{+}J — i powód, dla którego łokieć może krążyć, a chwytak stoi.

Prawo sterowania: sterowanie operacyjne (OSC)

Moment składamy z trzech warstw — zadanie, postawa, grawitacja — potem filtrujemy pod limity (CBF-QP z rozdz. 12):

τ=J[Λ(x¨d+Kpex+Kde˙x)+μ]τtask (zadanie 6-DOF)+N(Kns(qqset)Dnsq˙)τnull (postawa 1-DOF)+g(q)grawitacja\tau = \underbrace{J^\top\big[\Lambda(\ddot x_d + K_p e_x + K_d \dot e_x) + \mu\big]}_{\tau_{\text{task}}\ (\text{zadanie 6-DOF})} + \underbrace{N\big(-K_{ns}(q - q_{set}) - D_{ns}\dot q\big)}_{\tau_{\text{null}}\ (\text{postawa 1-DOF})} + \underbrace{g(q)}_{\text{grawitacja}}

Człon zadania to impedancja kartezjańska z pełną kompensacją dynamiki (μ\mu kasuje Coriolisa/odśrodkową). Człon τnull\tau_{\text{null}} to sprężyna-tłumik dla postawy, ale przepuszczona przez NN, więc niewidoczna dla zadania. To tutaj „wchodzi" wynik planera: qset(t)q_{set}(t) (planowana postawa) i KnsK_{ns} (planowana sztywność).

Pasywność: bak energii (dlaczego można PLANOWAĆ postawę)

Gdy planer każe postawie się zmieniać (zmienne qset(t)q_{set}(t)), morfowanie sprężyny wstrzykuje energię. Naiwnie daje to pik 1641 W „z niczego" — złamanie pasywności, niebezpieczne przy kontakcie. Rozwiązanie: skończony bak energii finansujący morfing z odzyskanego tłumienia:

Hc=12Knsqqset2+Ttank,Pgen=H˙c+q˙wns    0H_c = \tfrac{1}{2} K_{ns}\lVert q - q_{set}\rVert^2 + T_{\text{tank}}, \qquad P_{\text{gen}} = \dot H_c + \dot q^\top w_{ns} \;\le\; 0

To jest klucz do połączenia z planowaniem: bak sprawia, że dowolną planowaną trajektorię postawy qset(t)q_{set}(t) można wykonać pasywnie (Pgen0P_{\text{gen}}\le 0), nawet gdy plan zmienia się w locie (MPC, WP3). Bez baku planowana redundancja byłaby niebezpieczna.

Podatność w null-space — jedno pokrętło KnsK_{ns}

Sztywność null-space KnsK_{ns} decyduje między sztywnym odrzucaniem a miękkim ustępowaniem: duże KnsK_{ns} = postawa trzymana (zakłócenie pochłonięte bez ruchu); małe KnsK_{ns} = ramię ustępuje pod siłą w przestrzeni zerowej, a tor narzędzia zostaje nietknięty. To jest wielkość, którą planer w WP4 będzie planował (pole kierunkowej impedancji) pod budżet baku.

MuJoCo · pasywny sterownik
Zewnętrzna siła (pomarańczowa strzałka) pcha łokieć W TRAKCIE jazdy chwytaka po okręgu. Przy MIĘKKIM null-space (K_ns≈3.5) łokieć USTĘPUJE w przestrzeni zerowej (~10 cm), a tor chwytaka zostaje nietknięty (błąd ~0). To podatność (compliance) planowana i wykonywana pasywnie.

Most do części badawczej (PPR)

Ten wykonawca daje cztery obiekty, na których stoi cała część badawcza — Planowanie i Pasywne wykonanie w przestrzeni Redundancji:

  • Styczna rozmaitości ruchu własnego — null(J)\mathrm{null}(J).
  • Metryka (nie euklidesowa!) — inercja Λ\Lambda / M(q)M(q).
  • Przeszkody manifoldu — limity (HOCBF), osobliwości (manipulowalność).
  • Budżet — bak energii, gwarant pasywności planowanego ruchu.

Planery z tej platformy wpinają się na wierzch:

  • WP1 — sampling (CBiRRT/BIT*) na rozmaitości ruchu własnego (globalne omijanie przeszkód łokciem).
  • WP2 — CHOMP/GPMP z metryką inercji (optymalizacja postawy w horyzoncie).
  • WP3 — MPC/MPPI na 1 DOF z budżetem baku (predykcyjna, pasywna redundancja).
  • WP4 — planowanie podatności przez kontakt (pole Kns(t)K_{ns}(t)).
  • WP5 — nauczona polityka null-space „osłonięta" pasywnością (diffusion + shield).

Formalna propozycja (z równaniami, walidacją, harmonogramem) i prototyp WP1 są w toku — patrz kolejne moduły tej ścieżki.

Ściąga

  • Dyn.-spójny null-space: N=IJJˉN = I - J^\top \bar J^\top, Jˉ=M1JΛ\bar J = M^{-1}J^\top\Lambda, Λ=(JM1J)1\Lambda=(JM^{-1}J^\top)^{-1} — własność JM1N=0JM^{-1}N=0.
  • OSC: τ=τtask+τnull+g\tau = \tau_{\text{task}} + \tau_{\text{null}} + g, filtr CBF-QP.
  • Postawa: τnull=N(Kns(qqset)Dnsq˙)\tau_{\text{null}} = N(-K_{ns}(q-q_{set}) - D_{ns}\dot q); planer daje qset(t)q_{set}(t) i KnsK_{ns}.
  • Pasywność: bak energii Pgen0\Rightarrow P_{\text{gen}}\le 0 dla planowanego qset(t)q_{set}(t).
  • Podatność: KnsK_{ns} duże = sztywno (odrzuca), małe = miękko (ustępuje).

Źródła i kod

  • Khatib, „A unified approach to motion and force control" (1987) — operational space, dyn.-spójny null-space.
  • Schindlbeck & Haddadin (ICRA 2015), Ferraguti et al. — baki energii / pasywność interakcji.
  • Siciliano & Slotine — priorytety zadań (poziom kinematyczny, rozdz. 11).
  • Siostrzany projekt Franka Redundancy Control: controller.py (OSC + null-space + EnergyTank + JointLimitQP), research_log.md, 5 KPI. Filmy powyżej to jego zwalidowany sterownik.