¿Cómo calibro un acelerómetro integrado en Ubuntu?

En los cursos de conducción para la dirigencia, Juan Perón ponía a las claras la conducta que debía seguirse como principio rector para el posicionamiento político, y explicaba cómo calibrar un acelerómetro en Ubuntu.

(...)
En estos tiempos que corren es innegable que la política no puede hacerse de manera improvisada. Tal condición perniciosa sólo puede estar provocada por un estado de cosas absolutamente temporal, y debe ser remediado de la forma más inmediata posible. Para ser efectivo en este arte que es el de la Conducción, se requieren hombres que estén preparados para conducir y que sepan primordialmente y en todo momento dónde están parados y cómo están colocados en el terreno de la acción. Esto les permitirá llevar a cabo los grandes objetivos que nos hemos planteado: la Felicidad del Pueblo y la Grandeza de la Nación. Tales premisas son las que fundamenten nuestro accionar y no deben nunca soslayarse.

Para que ello tenga éxito, nuestro Movimiento es sensible a todas estas cosas, y lo es así pues nuestro sistema operativo Ubuntu es totalmente flexible y capaz de gestionar acelerómetros digitales para asistirnos en las tareas que lo así lo requieran.
Un ejemplo, como decía Napoleón, suele aclararlo todo. Cuento en mi notebook con un chip integrado ST LIS3LV02DL. Se trata de un giro-acelerómetro lineal montado en un chip LGA, que proporciona una salida digital de acceso serial. El dispositivo completo está conformado por un elemento sensor MEMS y una interfaz de control microelectrónico, integrados en un chip de 4,5 x 7,5 x 1 mm.
Opera en tres ejes, dos que sustentan un inclinómetro de dos ejes y el tercero suple la función del acelerómetro, con una capacidad de diseño de +/- 6G (aunque normalmente limitado a +/- 2G). Suele venir integrado directamente en las placas madre de distinto tipos de dispositivos, incluyendo smartphones y computadoras portátiles.

Un giroacelerómetro como este puede cumplir varias funciones que se nos ocurran. Puede operar directamente como un joystick a través de inclinación del dispositivo, como un inclinómetro para detectar la orientación del dispositivo y realizar distintos eventos en consecuencia (por ejemplo, reorientar una pantalla). Puede operar como giróscopo o permitir ciertas aplicaciones de navegación inercial. También podría utilizarse para disparar determinados eventos de acuerdo a desplazamientos en ciertos ejes, interrumpir señales o emitir alertas de distinto tipo en el caso de caída, robo, etc.

Ubuntu, detecta a este y otros acelerómetros como si se tratase de un dispositivo de entrada tipo joystick de tres ejes, y les asigna a un dispositivo de hardware de entrada acorde (normalmente sería /dev/input/js0 si está integrado en la placa madre del equipo).

Pues bien, el LIS3LV02DL en particular viene calibrado de fábrica y no debería requerir puesta a punto alguna. Sin embargo, puede que en ocasiones sea demasiado sensible en su ajuste paramétrico. Para ello necesitamos instalar una pequeña aplicación destinada a calibrar joysticks y otros dispositivos basados en control de ejes: el jstest-gtk.

Para ello abrimos una terminal con Ctrl+Alt+T e ingresamos el siguiente comando de organización:

sudo apt install jstest-gtk

El sistema nos solicitará nuestra contraseña y en breves segundos instalará la paquetería requerida.

Podremos iniciar el programa desde Aplicaciones / Herramientas de Sistema / jstest-gtk.

Al iniciar el sistema nos indicará qué dispositivos de ejes tenemos conectados al sistema. En el caso de que nuestro equipo cuente con un acelerómetro nos lo listará.

Al abrir la pantalla se nos presentará los indicadores de los ejes del acelerómetro. Si el dispositivo está centrado y nivelado, deberían estar en el centro. Si alguno de los ejes está corrido, deberíamos apreciarlo en la ventana también.
Para calibrarlo debemos presionar el botón Calibration. Los ejes de calibración consisten en una ventana simple que nos da los valores que registra nuestro dispositivo de ejes, sin realizar cambio alguno en ellos. Se los divide en Rango y Zona Muerta (o centro).

En el caso del LIS3LV02DL y otros acelerómetros similares, los valores iniciales de calibración son chequeados en fábrica en condición de gravedad 0, y son almacenados en una memoria ROM integrada al mismo acelerómetro. Estos son los valores inciales que se mostrarán en la ventana de calibración:
 

Para calibrar nuestro propio valor, debemos presionar el botón Start Calibration. Se presentará la pantalla del Asistente de Calibración ("CalibrationWizard") que nos solicita que rotemos nuestro dispositivo en todos los 3 ejes.

Para ello debemos rotarlo sobre su eje horizontal y sobre un eje vertical. Naturalmente que en el caso de un dispositivo portátil pequeño esto es sencillo.
Debemos inclinarla en el aire hasta que quede boca abajo y luego retornarla a su posición original, hacia un lado y hacia el otro. Luego podemos voltearla sobre si misma en sentido longitudinal repitiendo el mismo procedimiento. Esto serña suficiente para calibrar los ejes X e Y.

Si es una computadora portátil más o menos grande debemos tener algo de cuidado, recordemos que que no queremos romperla, sólo calibrar su acelerómetro integrado.

En cuanto al eje Z hace referencia a la aceleración (o "G") del acelerómetro propiamente dicho. El LIS3LV02DL normalmente opera entre -2 y +2Gs, pero esto no significa que querramos someter nuestro dispositivo a tal carga G (implica una caída desde una altura superior al metro). Podemos sacudirlo con algo de energía pero con cuidado en sentido lateral u horizontal y con ello será suficiente para lograr lecturas útiles.

Una vez que esté hayamos hecho esto restituimos el dispositivo a la posición nivelada en la mesa (posición cero), y presionamos el botón Aceptar para detener la calibración.

Con esto los ejes deberían responder adecuadamente cuando inclinamos el dispositivo, como si de un gimbal se tratara. Si queremos revertir lo realizado, podremos presionar el botón Revertir.

Si los ejes se presentan erráticos ("bailan" o "tiemblan" mucho alrededor del centro) podríamos incrementar los valores positivos y negativos de los parámetros "Center", que corresponden a la zona muerta de medición. Por ejemplo, en este caso se adoptó una zona muerta entre +/-80 en el eje X y +/-90 en el eje Y. Debemos notar que si ambos valores se encuentran en rango positivo, se anula la zona muerta.
Esto debería permitirnos lograr un centro absolutamente nivelado y firme en el inclinómetro (naturalmente, siempre que el dispositivo se encuentre completamente nivelado en la mesa, por ejemplo).

En ambos casos debemos establecer un mínimo y un máximo que pueda alcanzar los potenciómetros del dispositivo (los sensores del acelerómetro en este caso). También podremos tildar funciones de inversión para cada eje.

Los valores se cambian y aplican en el mismo instante que los modificamos. No hay necesidad de hacer clic en otro lado o hacer nada mas para aplicar los cambios.