Målgruppe: Denne artikkelen er for fastvareingeniører, UX-designere og OEM-produktledere som trenger å forstå algoritmene for gjenkjenning av bevegelser som kjører på lesepennene B1, B2, F8, K7, KF1, L5, P2, Q6, Q8, T2 og Y6. Vi antar at du enten designer et tilpasset menygrensesnitt eller vurderer hvordan du kan legge til bevegelser i en eksisterende ordbokapplikasjon, og at du trenger å vite hvilken gjenkjenningsgrad, latenstid og CPU-belastning du kan forvente.
En lesepegebevegelse er en sekvens av berøringsprøver innhentet over 30 ms til 500 ms. Fastvaren konverterer disse prøvene til en diskret bevegelseskode (TAP, SWIPE_LEFT, SWIPE_RIGHT, SWIPE_UP, SWIPE_DOWN, LONG_PRESS, DOUBLE_TAP, CIRCLE) som applikasjonslaget knytter til en UI-handling. Konverteringen er liten nok til å kjøre på alle de 11 modellene, men er tunet ulikt per modell fordi sensoroppløsningen, prøvehastigheten og vertsprosessorens CPU-budsjett varierer. Denne artikkelen dekker algoritmen, tuningsverdiene og feilmodusene som kjøpere bør planlegge for.
1. Bevegelsesvokabularet
På tvers av de 11 modellene vi leverer, er bevegelsesvokabularet konsistent:
| Bevegelse | Prøvevindu | Brukes på |
|---|---|---|
| TAP | 30 ms til 250 ms berøring + slipp | Alle 11 modeller (via knapperstatning på sonemodeller) |
| LONG_PRESS | 600 ms til 2000 ms kontinuerlig berøring | K7, KF1, L5, Q8, T2 |
| DOUBLE_TAP | To trykk innen 300 ms | L5, Q8, T2 |
| SWIPE_LEFT / RIGHT | 50 ms til 250 ms kontinuerlig drag, ≥ 8 mm | K7, KF1, L5, Q8, T2 |
| SWIPE_UP / DOWN | Samme, vertikal retning | L5, Q8, T2 (kun) |
| CIRCLE | Lukket sløyfebane, ≥ 12 mm omkrets | Q8, T2 (premiumfunksjon) |
De enkle sonemodellene (B1, B2, F8, P2, Q6, Y6) kjører ikke bevegelser i det hele tatt fordi de ikke har noen 2D-berøringssensor. De erstatter dette med 4 til 8 diskrete knappesoner. Denne artikkelen fokuserer på matriksmodellene.
2. Algoritme-pipelinen
Algoritmen for bevegelsesgjenkjenning kjører i fire trinn. Hvert trinn har et hardt CPU-budsjett; hvis et trinn overskrider sitt budsjett, droppes bevegelsen (ingen kommando sendes ut) fremfor å bli feilgjenkjent.
Trinn 1: Prøveinnhenting. Berøringskontrolleren rapporterer koordinater ved 80 Hz til 120 Hz. Vertsmikrokontrolleren leser dem via I2C ved 100 kHz til 400 kHz på K7/KF1/L5, og via SPI ved 10 MHz på Q8/T2. Hver prøve er en tuppel (x, y, t).
Trinn 2: Avprelling og utelukkelse av avvikere. To prøver innen 4 mm og 20 ms slås sammen til én. En prøve som avviker mer enn 12 mm fra det løpende tyngdepunktet, droppes som avviker. Dette trinnet tar 0,4 ms per prøve på L5.
Trinn 3: Trekkuttrekk. Fra den rensede prøvestrømmen beregner vi 7 trekk: total forflytning, total banelengde, gjennomsnittlig hastighet, topphastighet, dominerende retningsvinkel, krumning og varighet. Disse er input til klassifisereren.
Trinn 4: Klassifisering. Vi bruker en mønstermatchingsscorer for de 6 retningsbestemte sveipene og en tilstandsmaskin for de tidsbaserte bevegelsene (TAP, LONG_PRESS, DOUBLE_TAP). Tilstandsmaskinen og mønstermatcheren bruker til sammen 1,6 ms per bevegelse på L5.
Totalt budsjett per bevegelse på L5: 0,4 + 1,6 + trinn 4-klassifiserer = 2,4 ms, pluss håndtering av interruptoverhead, gir en margin på 6 ms før interframebudsjettet på 8,3 ms overskrides.
3. Mønstermatcheren for sveip
Hver av de 6 retningsbestemte sveipene (venstre, høyre, opp, ned, pluss de to diagonalene på T2) har en mal. Malen er en 16-punkts polylinje av den forventede prøvebanen, normalisert til en lengde på 12 mm og sentrert rundt origo. Under gjenkjenning normaliserer vi inputprøvestrømmen på samme måte (translaterer tyngdepunktet til origo, skalerer til 12 mm, gjenprøver til 16 punkter) og beregner gjennomsnittlig euklidsk avstand mellom input og mal i hvert punkt.
Matchingsscoren er 1 - (gjennomsnittlig_avstand / 12). En score på 1,0 er et perfekt treff; en score på 0,0 er ortogonal. Klassifisereren returnerer malen med høyest score, forutsatt at denne scoren overstiger 0,78. Alt under 0,78 klassifiseres som «unknown» og ignoreres.
Terskelen 0,78 ble tunet på et datasett med 1 200 bevegelser innsamlet fra 30 barn i alderen 4 til 9 ved våre to lokasjoner. Vi målte en sann positiv-rate på 96,4 % og en falsk positiv-rate på 0,6 % på L5 med denne terskelen. Strammes den til 0,82, synker falsk positiv-rate til 0,2 %, men sann positiv-rate synker til 91,7 %; løsnes den til 0,72, stiger falsk positiv-rate til 2,4 % og sann positiv-rate til 98,6 %.
4. Tilstandsmaskinen for tidsbaserte bevegelser
TAP, LONG_PRESS og DOUBLE_TAP er tidsavhengige og kan ikke klassifiseres ut fra prøveformen alene. Vi bruker en endelig tilstandsmaskin med 5 tilstander:
- IDLE: ingen berøring til stede.
- TOUCH_DOWN: første prøve mottatt, overgang til PRESS.
- PRESS: berøring holdes, start langtrykk-timeren.
- RELEASE: berøring sluppet, evaluer TAP mot LONG_PRESS mot DOUBLE_TAP.
- WAIT_DOUBLE: sluppet, venter opptil 300 ms på et nytt trykk.
Overganger styres av 4 terskler:
- LONG_PRESS_TIME: 600 ms (konfigurerbar 400 til 2000 ms).
- DOUBLE_TAP_GAP: 300 ms.
- TAP_MAX_DURATION: 250 ms.
- TAP_MAX_DISPLACEMENT: 4 mm.
Tilstandsmaskinen er implementert som en switch i berørings-ISR-en og tar 0,06 ms per overgang på L5. Total gjenkjenningslatenstid for en TAP er trykkets varighet pluss ett intervall mellom prøver, som er 280 ms til 320 ms i verste fall, men typisk 130 ms til 180 ms.
5. CPU- og minnekostnad
Den komplette bevegelsespipelinen (mønstermatcher + tilstandsmaskin + trekkuttrekk) på L5 forbruker 1,9 MIPS CPU ved en bevegelsesrate på 3 bevegelser per sekund. L5-verts-SoC-en har 240 MIPS tilgjengelig etter lyd og OCR, så bevegelsesmotoren er så godt som gratis.
Minnekostnaden er 4,2 KB kode (i flash) og 1,1 KB arbeidsminne (for den 16-punkts malen og prøvebufferen). På K7 og KF1 koster den samme pipelinen 5,1 KB kode og 1,4 KB RAM fordi mikrokontrolleren i lavere klasse kompilerer malene med mindre optimalisering.
Q8 og T2 legger til en CIRCLE-bevegelsesklassifiserer ved hjelp av en 24-punkts Hough-transform-lignende sløyfe. Dette legger til 3,4 KB kode og 0,8 KB RAM, og kjører på 4,1 MIPS under klassifisering. CIRCLE er en premiumfunksjon og er deaktivert som standard på Q8 og kun aktivert på T2, med mindre OEM-kjøperen ber om den på Q8.
6. Latenstid: fra trykk til handling og fra sveip til handling
Ende-til-ende-latenstid fra fysisk bevegelsesfullføring til vertsutsending av handling:
| Bevegelse | L5 / Q8 / T2 | K7 / KF1 |
|---|---|---|
| TAP | 130 ms til 180 ms | 180 ms til 240 ms |
| LONG_PRESS | 620 ms til 720 ms | 700 ms til 820 ms |
| DOUBLE_TAP | 320 ms til 420 ms | 400 ms til 520 ms |
| SWIPE (hvilken som helst API) | 55 ms til 65 ms | 75 ms til 95 ms |
| CIRCLE | 80 ms til 110 ms (kun T2) | n/a |
Disse tallene inkluderer berøringskontrollerens rapporthastighet, I2C/SPI-overføringstiden, algoritmeutførelsen og vertsapplikasjonens responstid.
7. Tilpasning for ulike brukergrupper
Standardtersklene er tilpasset barn i alderen 4 til 9 år. For voksne brukere (lærere, foreldre) er bevegelsene større og raskere, noe som faktisk forbedrer gjenkjenningsnøyaktigheten til 98,5 % sann positiv ved samme terskel. For barn yngre enn 4 år kan OEM-kjøperen be om en mykere bevegelsesprofil via fastvarekonfigurasjon:
- LONG_PRESS_TIME hevet fra 600 ms til 900 ms.
- TAP_MAX_DISPLACEMENT hevet fra 4 mm til 6 mm.
- SWIPE_MIN_DISPLACEMENT senket fra 8 mm til 5 mm.
Denne profilen kalles KIDS_PROFILE_V1 og er tilgjengelig på alle 11 modeller via et fastvare-byggflagg. Et OEM-program som retter seg mot aldersgruppen 2 til 4 år bør be om denne profilen.
8. Akseptansetest for OEM-kjøpere
Vi anbefaler følgende akseptansesuite med 5 tester for bevegelsesgjenkjenning:
- Gjenkjenningsrate for SWIPE_LEFT ≥ 96 % på 100 forsøk av 3 ulike testere.
- Gjenkjenningsrate for SWIPE_RIGHT ≥ 96 % på 100 forsøk.
- Falsk-positiv rate for TAP ≤ 1 % over 1 000 sekunder uten berøring.
- Gjenkjenningslatens for LONG_PRESS mellom 600 og 800 ms.
- Gjenkjenningsrate for DOUBLE_TAP ≥ 92 % på 100 forsøk.
Testere bør hentes fra målgruppen. En prøve som kun testes av voksne ingeniører, vil rapportere oppblåst nøyaktighet fordi voksnes bevegelser er mer konsistente. Vår interne validering bruker 30 barn i alderen 4 til 9 år pluss 10 voksne, og den publiserte sann-positive-raten på 96,4 % er kun for barn.
9. Vanlige feilmoduser
I OEM-programmer har vi sett følgende feil ved bevegelsesintegrasjon:
- Vertsapplikasjonen poller for bevegelser i en 50 ms-løkke i stedet for å bruke avbrudd, noe som legger til 50 ms latens. Bruk alltid bevegelsesavbrudd, ikke polling.
- Applikasjonen aktiverer DOUBLE_TAP, men glemmer å sette DOUBLE_TAP_GAP til 300 ms, noe som fører til at hvert trykk klassifiseres som et dobbelttrykk.
- Applikasjonen kobler CIRCLE til "Neste side", men barnas sveip er for små (5 mm i stedet for 12 mm) og algoritmen klassifiserer dem som støy. Senk CIRCLE_MIN_CIRCUMFERENCE fra 12 mm til 8 mm hvis målgruppen er yngre brukere.
- Applikasjonen deaktiverer LONG_PRESS, men lar tidtakeren gå, noe som kontinuerlig sløser 0,04 MIPS med CPU. Sett LONG_PRESS_ENABLE = 0 for å hoppe over tidtakeren.
For mer om berøringssensoren som mater bevegelsesmotoren, se Lesepenn – berøringsnøyaktighet og jitter-test. For hvordan bevegelser kobles til UI-handlinger i referanseordbokapplikasjonen, se Lesepenn – ordbokfilformat og utgave. For hvordan vertens SoC planlegger bevegelsesoppgaven mot OCR og lyd, se Lesepenn – fastvarearkitektur forklart. For OEM-spraåk og akseptanskriterier, se Lesepenn – OEM- og ODM-spesifikasjonsmal. For å be om en bevegelsestestrapport med histogrammer fra 5 testere fra din prøvebatch, se /request-a-quote.
10. Spraåket som skal inn i en OEM-kontrakt
En forsvarlig OEM-spesifikasjon for bevegelsesgjenkjenning inkluderer:
- Liste over bevegelsesvokabular med tilgjengelighet per modell.
- Terskel for malkontrollør (standard 0,78, konfigurerbar 0,70 til 0,85).
- LONG_PRESS_TIME (standard 600 ms).
- DOUBLE_TAP_GAP (standard 300 ms).
- TRUE_POSITIVE_RATE ≥ 96 % på testsettet med 1 200 bevegelser for barn.
- FALSE_POSITIVE_RATE ≤ 1 % på 1 000-sekunders test uten berøring.
- Latensstabell fra bevegelse til handling per bevegelsesklasse.
En leverandør som ikke kan forplikte seg til disse tallene, kjører ennå ikke algoritmen med produksjonskvalitet. Vi publiserer bevegelsestestrapporten per modell med hver produksjonsbatch uten ekstra kostnad.
Relatert lesing
- Lesepenn – berøringsnøyaktighet og jitter-test
- Lesepenn – berøringsskjermkontroller og bevegelse
- Lesepenn – fastvarearkitektur forklart
- Lesepenn – ordbokfilformat og utgave
- Lesepenn – kvalitetskontroll og AQL-standarder
- Lesepenn – skjermens luminansjevnhet
Tilleggslesing: gestkombinasjoner og flerfingerssekvenser
I tillegg til enkeltgestvokabularet i del 1 støtter fastvaren på L5, Q8 og T2 et lite sett med tofingergestkombinasjoner for avanserte brukere:
- TWO_FINGER_TAP: tilsvarer en tilbakeknapp i ordbokappen.
- TWO_FINGER_SWIPE_LEFT: tilsvarer en «side tilbake»-kommando i lesere for langt innhold.
- PINCH: zoom inn eller ut av ordbokteksten med 25 % per knipebevegelse.
Disse kombinasjonene er ikke i standardvokabularet og er deaktivert som standard. OEM-kjøpere kan aktivere dem via et byggeflagg i fastvaren, mot en kostnad på 0,8 KB ekstra kode og 0,3 KB ekstra RAM.
Gestmotoren støtter også en strømsparende «trykk for å vekke»-modus på L5, Q8 og T2. I denne modusen poller berøringskontrolleren med 8 Hz i stedet for 120 Hz, og bruker kun 0,2 mW. Når et trykk registreres, veksler kontrolleren til 120 Hz innen 12 ms. Denne modusen er aktivert som standard på Q8 og T2 fordi de har større batterier, og deaktivert på L5 fordi det mindre batteriet ikke tåler vekkeforsinkelsen ved hvert ordbokoppslag.
Blant de over 47 000 enhetene som er sendt siden 2023, utgjør gestrelaterte feltfeil 1,1 % av alle RMA-er. Den dominerende årsaken er en fastlåst berøringssone på grunn av væskeinntrengning (38 %), etterfulgt av delaminering i overflatebelegget ved sensorens kant (24 %) og fastvarelåsing (18 %). Andelen på 1,1 % er langt lavere enn feilraten for berøring på 4,2 %, fordi gester kun brukes på premiummodellene som har bedre tetting og strengere AQL på berøringssensoren.