Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5

Mobil como Sensor Giroscopo para OpenCPN
#1

Buscando informacion en internet, me he topado con una interesante aplicación para Android y para la raspberry.
Se trata de utilizar un móvil como sensor acelerómetro, enviar los datos a la raspbery y de esa manera visualizar la escora y el cabeceo en OpenCPN.
Esto va para Simbad que tiene una colección de mobiles viejos. Uno de ellos lo puede usar como sensor.
Que necesitamos, un mobil con Android y la raspberry. Para el móvil descargaremos he instalaremos una app  que leerá los datos del sensor acelerómetro del móvil y los enviara por red WiFi a la Raspberry.
La app para el móvil se llama Wireles IMU y se encuentra por la app Google Play del móvil Android.
[Imagen: Screenshot-20230321-003721-Google-Play-Store.jpg]

La instalamos y luego la podemos abrir. Donde pone Target IP Address hay que poner la dirección que aparezca en la raspberry cuando la conectemos al móvil o a nuestra red del barco bien via router o via gateway o por punto de acceso.


[Imagen: Screenshot-20230321-003646-Wireless-IMU.jpg]
 Luego veremos como obtener esta dirección.

Para la raspberry necesitaremos un script en Python para que pueda leer los datos enviados por el móvil, interpretarlos, convertirlos y finalmente enviarlos a un puerto para que los pueda leer OpenCPN.
Este es el script:
Código:
# -------------------------------------------------------
import socket, traceback
import pynmea2
import math
import time

host = '192.168.71.15'
port = 5555

red = "0.0.0.0"
puerto = 2947

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
s.bind((host, port))
x = 0
y = 0
z = 0

def dist(a,b):
    return math.sqrt((a*a)+(b*b))

def get_y_rotation(x,y,z):
    radians = math.atan2(x, dist(y,z))
    return -math.degrees(radians)

def get_x_rotation(x,y,z):
    radians = math.atan2(y, dist(x,z))
    return math.degrees(radians)

while 1:
    try:
        message, address = s.recvfrom(8192)
        #print (message)
        x = (message[15:-73])
        y = (message[25:-65])
        z = (message[33:-57])

        x = float((x.decode(("utf-8"))))
        y = float((y.decode(("utf-8"))))
        z = float((z.decode(("utf-8"))))
        pitch =  get_x_rotation(x, y, z)
        roule =  get_y_rotation(x, y, z)
        print ("x rotation: " , pitch)
        print ("y rotation: " , roule)
        ropi=pynmea2.XDR('II','XDR', ('A',str(round(roule,2)),'D','ROLL','A',str(round(pitch,2)),'D','PITCH'))
        ropi1=str(ropi)
        ropi2=ropi1+"\r\n"
        ropi2= bytes(ropi2, 'utf-8')
        s.sendto(ropi2, (red, puerto))
        time.sleep(0.2)
    except (KeyboardInterrupt, SystemExit):
        raise
    except:
        traceback.print_exc()
# -------------------------------------------------------
Para poderlo utilizar, teneis que abrir un terminal en la Raspberry y teclear

sudo nano imu_mobil.py

Se os abrira una pantalla en ella copiais el scrip de arriba
[Imagen: 2023-03-21-01-00-1.jpg]

[Imagen: 2023-03-21-01-00-2.jpg]
[Imagen: 2023-03-21-01-03.jpg]
Lo guardais con ctrl+x contestais que s luego y enter y queda guardado. Os teneis que fijar en que directorio lo habeis guardado.


Ahora teneis que activar el Mobile Hotspot und  Tethering en el mobil para que la raspberry se pueda conectar al mobil via WiFi.  Pulsais otra vez en Mobile Hotspot y os aparecera  el nombre de rd y la contraseña.

[Imagen: Screenshot-20230321-011408-Settings.jpg]

[Imagen: Screenshot-20230321-011515-Settings.jpg]
[Imagen: Screenshot-20230321-011424-Settings.jpg]
Estos datos son para poner en la raspberry. Pulsais el icono de red. Os aparecera la lista de redes disponible. Buscais y marcais la de vuestro mobil y os pedira la contraseña que visteis al pulsar Mobile Hotspot. A continuacion se debera conectar al mobil.
Para saber direccion de red, habris de nuevo un terminal y tecleais:
sudo ifconfig

[Imagen: 2023-03-21-01-20.jpg]

Os aparecera la informacion de red de la raspberry. En el ultimo parrafo esta la informacion de red. Ese es el valor que teneis que poner en la app Wireles IMU del mobil.

[Imagen: 2023-03-21-01-21.png]


[Imagen: 2023-03-21-01-21-1.png]
 Esta direccionla teneis que poner en el script de python imu_mobil.py donde pone
Código:
host = '192.168.71.15'
y tambien en app de android
[Imagen: Screenshot-20230321-012249-Wireless-IMU.jpg]
Luego pulsais el boton donde donde pone off y comenzara a mandar datos a la raspberry. 

En la raspberry arrancais el scripr imu_mobil.py. Si lo habeis guardado en el directorio raiz escribis en  una terminal:

sudo python3  /home/pi/imu_mobil.py

Si no os funciona lo más probable es que os falte alguna biblioteca . Las más probable es pynmea2 y socket.
Para instalarlas primero actualizar la Raspberry con :
Sudo apt-get update
Sudo apt-get upgrade.
Cuando se haya actualizado instalar las bibliotecas:

pip3 install pynmea2
pip3 install socket

[Imagen: 2023-03-21-01-05.jpg]

[Imagen: 2023-03-21-01-06.jpg]
Ahora solo queda abrir una conexion en OpenCPN.
[Imagen: 2023-03-21-01-27.jpg]

Pulsar a aplicar, luego OK. En OpenCPN Tendremos que insertar en instrumenos el cabeceo y la escora para visualizar los datos en OpenCPN
[Imagen: 2023-03-21-01-28.jpg]
Responder
#2

Eso está muy bien para entretenerse un rato.
Pero, ¿Es realmente útil?. ¿Es seguro?.
Durante el funcionamiento, ¿Puedes usar el teléfono como lo que es?.
¿Cuánto dura la batería de un smartphone con la WiFi en funcionamiento contínuo?
¿No te parece que ese sistema se parece bastante a lo que llamamos "matar moscas a cañonazos"?

Que conste que no pretendo ser destructivo y aprecio esa aportación DIY.
Responder
Agradecido por:
#3

(21-03-2023, 01:52 AM)gypsylyon escribió:  Para poderlo utilizar, teneis que abrir un terminal en la Raspberry y teclear

sudo nano imu_mobil.py

...

En la raspberry arrancais el scripr imu_mobil.py. Si lo habeis guardado en el directorio raiz escribis en  una terminal:

sudo python3  /home/pi/imu_mobil.p

Esto va más de GNU-Linux.
No hay motivo para aplicar "sudo" en esos casos.

sudo nano imu_mobil.py significa:
  • Que vas a generar ese archivo como root (administrador, Dios/Jehová/Alá y demás deidades varias del Sistema Operativo Linux, Raspbian en este caso, supongo).
  • Eso significa que ese archivo es propiedad de root y sólo el usuario root (que se invoca vía sudo o vía sudo su en Rapbian) puede editarlo.
  • Sin embargo, se va a guardar en la carpeta del usuario (/home/), que en este caso será pi.

Se habría tenido el mismo efecto si hubiéramos tecleado sólo nano imu_mobil.py. Se crearía el fichero que sería propiedad de pi y no de root, pero por lo demás, funcionaría exactamente igual y se crearía en el mismo sitio, en el home de pi.


Lo mismo con sudo python3  /home/pi/imu_mobil.py

  • Ejecutarlo como root (sudo) no aporta nada.
  • Ejecutado sólo como
  • python3  /home/pi/imu_mobil.py
  • haría el mismo efecto. Pruébalo.
  • Por último, como el terminal se abre directamente en el /home de pi, bastaría también con:
    python3  imu_mobil.py
  • Pero bueno, eso no es grave. Tampoco está mal especificar la ruta completa, sobre todo si lo llamas desde otro lado.

Ocurre con los que empiezan en Linux (a mí también me pasó, por supuesto) que se abusa de sudo y se usa muchas veces en que no aporta nada y es peligroso. Porque root, como es Dios/Jehová/Alá y demás deidades varias del Sistema Operativo Linux, puede crear el mundo (Linux) en un suspiro y puede destruirlo por completo también en un suspiro.

Hay un "gracioso" comando por ahí que es estupendo para cargarse todo el sistema operativo en una breve orden, que no pienso reproducir.

Por otra parte, no sería muy difícil hacer que se ejecute automáticamente al arrancar el sistema.

Gracias por el aporte, Gypsylyon.
Bier

Sausalito III (Puma 26)
Pumeros: http://clubpuma.ning.com/

Responder
Agradecido por: Parazoa, jiauka
#4

(23-03-2023, 08:25 AM)Tehani escribió:  Eso está muy bien para entretenerse un rato.
Pero, ¿Es realmente útil?. ¿Es seguro?.
Durante el funcionamiento, ¿Puedes usar el teléfono como lo que es?.
¿Cuánto dura la batería de un smartphone con la WiFi en funcionamiento contínuo?
¿No te parece que ese sistema se parece bastante a lo que llamamos "matar moscas a cañonazos"?

Que conste que no pretendo ser destructivo y aprecio esa aportación DIY.

Son las mismas preguntas que me hice to cuando me tope con la página web, que por cierto era otra app y la conexión la hacía por  cable usb.
Por curiosidad  probé y resultó ser más fácil que poner en marcha un imu mpu6050. 
La app envía también los datos del gyro y del megnetometro, así que se pueden utilizar como compas también. Lo que pasa es que son los datos en bruto. La app los envía en formato json como bites. Es una sentencia con los datos de reloj, los tres ejes del gyro, los tres ejes del acelerometro y los tres ejes del magnetometro.
Si es útil, que lo decida el que lo quiera usar.
Ami me ha servido como profilaxis de burn out  y profilaxis de alceimer.
Si estoy algún día aburrido igual programo el filtro kalman para extraer el rumbo magnético del mobil y pasarlo a sentencia nmea
Responder
Agradecido por:
#5

(23-03-2023, 12:09 PM)Otoio escribió:  Esto va más de GNU-Linux.
No hay motivo para aplicar "sudo" en esos casos.

sudo nano imu_mobil.py significa:
  • Que vas a generar ese archivo como root (administrador, Dios/Jehová/Alá y demás deidades varias del Sistema Operativo Linux, Raspbian en este caso, supongo).
  • Eso significa que ese archivo es propiedad de root y sólo el usuario root (que se invoca vía sudo o vía sudo su en Rapbian) puede editarlo.
  • Sin embargo, se va a guardar en la carpeta del usuario (/home/), que en este caso será pi.

Se habría tenido el mismo efecto si hubiéramos tecleado sólo nano imu_mobil.py. Se crearía el fichero que sería propiedad de pi y no de root, pero por lo demás, funcionaría exactamente igual y se crearía en el mismo sitio, en el home de pi.


Lo mismo con sudo python3  /home/pi/imu_mobil.py

  • Ejecutarlo como root (sudo) no aporta nada.
  • Ejecutado sólo como
  • python3  /home/pi/imu_mobil.py
  • haría el mismo efecto. Pruébalo.
  • Por último, como el terminal se abre directamente en el /home de pi, bastaría también con:
    python3  imu_mobil.py
  • Pero bueno, eso no es grave. Tampoco está mal especificar la ruta completa, sobre todo si lo llamas desde otro lado.

Ocurre con los que empiezan en Linux (a mí también me pasó, por supuesto) que se abusa de sudo y se usa muchas veces en que no aporta nada y es peligroso. Porque root, como es Dios/Jehová/Alá y demás deidades varias del Sistema Operativo Linux, puede crear el mundo (Linux) en un suspiro y puede destruirlo por completo también en un suspiro.

Hay un "gracioso" comando por ahí que es estupendo para cargarse todo el sistema operativo en una breve orden, que no pienso reproducir.

Por otra parte, no sería muy difícil hacer que se ejecute automáticamente al arrancar el sistema.

Gracias por el aporte, Gypsylyon.
Bier

Y gracias a ti por la lección de Linux.
Aunque en realidad el uso del comando sudo permite a los usuarios no root ejecutar otros comandos Linux que normalmente requerirían privilegios de superusuario.
En este caso estamos creando un script en Python que usa bibliotecas en una raspberry en la que funciona openplotter, sin derechos de superusuario.
Eso significa que si no usas sudo, el script puede que no funcione porque no puede usar las bibliotecas. O que cuando lo quieras modificar no puedas grabar los cambios.
Como no cuesta mucho añadir el sudo antes de la orden vas más seguro.
Respecto a la ruta completa , es bueno acostumbrarse a hacerlo. Es además más sencillo que ir al directorio primero donde se encuentra el script.
Por otra parte en el terminal quedan grabadas las órdenes que escribimos. Con las flechas arriba o abajo podemos ir visualizando esas órdenes.
Para que se arranque al iniciarse, hay diferentes métodos . Para los script de python desgraciadamente es uno de los complicados. Para usuarios de Linux seguro que sin problemas. Pero para los inexperimentados puede ser un mundo. Aunque en este caso no lo veo útil, ya que no creo que siempre se vaya a usar el mobil como sensor. Así queces mejor hacerlo en el momento en que uno se decida a utilizarlo.
Responder
Agradecido por:
#6

Habría que hacer la prueba,  Nosabo 
Me suena un poco raro.
Evidentemente, si usas sudo funcionará, seguro.
Gracias Gypsy

Sausalito III (Puma 26)
Pumeros: http://clubpuma.ning.com/

Responder
Agradecido por:


Posibles temas similares…
Tema / Autor Respuestas Vistas Último mensaje
Último mensaje por Dunic
22-05-2022, 10:20 AM
Último mensaje por aitonos
27-07-2020, 12:21 PM
Último mensaje por Noruego
12-01-2019, 11:23 AM

Salto de foro:


Usuarios navegando en este tema: 3 invitado(s)