#16 30-10-2016 07:36:01

marcomotta
Fedora nel sangue
Da Roma
Registrato: 18-01-2009
Messaggi: 2'530
Sito web

Re: Calibrazione touch screen

Credo di aver risolto il problema delle formule. Innanzitutto avevo invertito il ruolo di (x;y) con quello di (x';y'), e poi avevo sbagliato a dar credito al link di Ubuntu, anziché a quello di Archlinux (potrò mai essere perdonato?  reddy).

Supponiamo di inserire due cerchietti alle posizioni (x₁;y₁) e (x₂;y₂). Noi clicchiamo sui cerchietti, ma, a causa dello sfasamento tra lo schermo touch screen e il proiettore che ci invia l'immagine, il click viene rilevato rispettivamente alle posizioni (x'₁;y'₁) e (x'₂;y'₂).

Il sistema corregge la posizione del click utilizzando la regola seguente:

⎡ c₀ 0  c₁ ⎤   ⎡ x'/width  ⎤   ⎡ x/width  ⎤
⎜ 0  c₂ c₃ ⎥ · ⎜ y'/height ⎥ = ⎜ y/height ⎥
⎣ 0  0  1  ⎦   ⎣    1      ⎦   ⎣    1     ⎦

Dove width e height danno, in pixel, larghezza e altezza della risoluzione dello schermo.

In altre parole, i valori della seconda e terza matrice devono essere compresi tra 0 e 1: per esempio, 0.5 indicherà un valore a metà dello schermo. Non è possibile inserire 400 o 197.

Quindi le formule corrette sono le seguenti:

c₀=(x₂-x₁)/(x'₂-x'₁)
c₁=(x₁-c₀*x'₁)/width
c₂=(y₂-y₁)/(y'₂-y'₁)
c₃=(y₁-c₂*y'₁)/height

Ora sono a buon punto nella scrittura di un programma in python3 (e Gtk 3) per calibrare la LIM, ma mi rimangono due piccoli problemi da risolvere.

1) Come distinguere, dall'output di un comando, i dispositivi calibrabili da quelli come mouse e affini? xinput_calibrator rileva (giustamente) solo i primi, mentre l'output di "xinput --list" include i dispositivi di puntamento come mouse e touchpad.

2) La guida di Archlinux dice che, per rendere permanente la matrice di trasformazione delle coordinate, bisogna scrivere un file 99-*.rules in /etc/udev/rules.d con il seguente contenuto:

https://wiki.archlinux.org/index.php/Calibrating_Touchscreen#Do_it_automatically_via_a_udev_rule ha scritto:

ENV{ID_VENDOR_ID}=="2149",ENV{ID_MODEL_ID}=="2703",ENV{WL_OUTPUT}="DVI1",ENV{LIBINPUT_CALIBRATION_MATRIX}="1 0 0  0 1 0"

Substitute your own touchscreen's vendor ID, model ID, the xrandr output name, and the calibration matrix that you calculated above. This is based on the assumption that you are using the libinput driver for your touchscreen.

Ora,  vendor ID e model ID li posso ricavare automaticamente con

$ xinput list-props $id

(nel mio caso $id è 16); ma il nome dato in output da xrandr (quello che devo sostituire a "DVI1") posso dedurlo in automatico da uno script conoscendo id e nome del touch screen (nel mio caso 16 e "SMART Technologies Inc. SMART Interactive Whiteboard Controller (SB6)", o devo necessariamente chiedere all'utente di sceglierlo?

Sospetto la seconda, ma aspetto conferme.


N.B. Se qualcuno ne ha la possibilità, potrebbe testare l'rpm che trovate alla pagina http://www.mathhelp.eu/software/calibra … stall.html?
A me sembra che funzioni (tranne il rendere permanente la matrice, visto che non l'ho ancora implementato), ma l'ho potuto testare solo su una LIM, per il momento.

Ultima modifica di marcomotta (08-11-2016 10:03:24)


La filosofia è una disciplina con obiettivi, ma senza regole. La matematica è una disciplina con regole, ma senza obiettivi.
Un giorno ho incontrato un uomo che non aveva né obiettivi né regole. Studiava filosofia della matematica.

Non in linea

Piè di pagina