miércoles, 14 de diciembre de 2011

Estado del proyecto Cerea



Os comento un poco el estado del proyecto, ya que tengo muchos frentes abiertos.

Version windows, implementando patrones de paralelismo, bases de datos de trabajos, multisector para herbicida.
Version android, implementada generacion de kml, resolviendo problemas con la fragmentación, esto me está tocando los eggs ya, peta el gesto de pellizco con la 3.0 y no doy con ello. Van 343 descargas ( me parece acojonante, dado que no deja de ser una frikadadilla).
Me sorprende que lo han sacado en combine forum de lefebure. En Alemania tiene 10 descargas, y se lo ha descargado alguien en los emiratos arabes. ( pa medir las hectareas del campo de petroleo?)

He tenido algunos correos pidiendolo para iphone e ipad, y dado que me regalaron uno ( regalaco) me he liado la manta a la cabeza, he pillado un mac, turra a leer, estudiar y practicar y estoy resolviendo el tema opengl. Comentario, las herramientas de desarrollo de la manzanita son buenísimas, y entre objective c ( lenguaje de la manzana) y java( del androide), son un dolor ambos,

La conexion de manzanas y androides a gps usb pasa, a dia de hoy, por arduino. Estoy a punto de comprar una para testear ambos.

La parte mas ambiciosa de todo es integrar el rtklib en cerea, esto dará bastante guerra, aunque como está en mi viejo amigo C, se llevará bien con Python y con la manzana y mal con el androide.

Como veis, el berenjenal es grande!!

Para los que me preguntan que tablet comprar, que le tengo pedirva los reyes, a dia de hoy,

Version windows sigue siendo lo mas maduro, lo mas conectable, y lo mas trabajado.
Version Android, buena pinta y aceptacion, le falta madurez.
Versión IOS, en pañales, pero a buen ritmo

Los plazos de release, lo mas rapido que se pueda.

Saludos a todos y gracias por los comentarios en el android market y foros agroterra.

viernes, 28 de octubre de 2011

Desde ayer , podéis descargar el prototipo de Cerea del android market.
Le faltan funcionalidades que iré completando en los próximos días.

Me he decidido a subirlo debido a la gran cantidad de correos que he recibido pidiéndome la versión.

Toda sugerencia será bien recibida.

Saludos.

jueves, 8 de septiembre de 2011

Cerea en Android

Aunque me falta aún mucho por andar hoy he programado la que considero la parte más importante desde el punto de vista del rendimiento del programa, la capacidad de pintar la trayectoria seguida.

El camino hasta aquí ha sido largo y penoso ( hasta que he empezado a enterarme con java han pasado 5 meses de lecturas tediosísimas).

En las primeras pruebas de carga del sistema estoy consiguiento ratios de 10 fps en un samsung galaxy ace ( smartphone mediocre) con 10000 puntos de gps ( 3 h de trabajo con un gps de 1Hz aprox).
Ha continuado a esa tasa hasta las 17000 puntos ( 5 horas de trabajo) que ha bajado a 9fps.
Es decir, puede con ello.





Tengo programado casi toda la parte de opengl ( la gráfica), y diseñada la UI ( botoncitos).
Pongo unas imágenes para que veais que no se ve nada mal.


Arranca desde el launcher ( con icono y todo, thks http://esthergordo.blogspot.com/).

Esta pantalla es muy parecida a la versión de pc.

Como con todos los botones fuera queda muy apelotonado le he metido que al primer toque de pantalla se quiten de la vista un un bonito efecto de fading out.


En la foto de encima veis como se escamotean los botones.


queda toda la pantalla para ver el trabajo realizado.

Al siguiente toque salen a la vista de nuevo.

Creo que superado este hito todo lo demás será coser y cantar ( aunque, siempre hay sorpresas desagrabables)


Sobre el input de datos, de momento sólo desde fichero. Le voy a poner tres posibilidades de entrada, desde el gps del teléfono ( supongo que la precisión será malísima), desde bluetooth, y desde fichero de momento.


Respecto a los patrones de guiado, no los he programado y no se si lo haré porque al final se usan muy poco.


Como comentario general, el tener toda la matemática currada en python ayuda un montón, porque no hay que repensar las cosas, simplemente se copian, se javean y listo.

Estoy deseando de tener tiempo para ponerme con el multitouch para zoom panning y rotación, elevación..., al estilo google maps.

Estará disponible en el Android Market gratis cuando lo acabe ( previsto antes del 1 de octubre)

Saludos.


miércoles, 6 de abril de 2011

Cerea 1.1.2

En la versión anterior había un bug y se ponía en pantalla el PDOP en lugar del HDOP , aquí está corregido

martes, 5 de abril de 2011

Cerea 1.1.1


He dejado en


una versión de cerea con líneas laterales y con HDOP en pantalla
hay que descargar el fichero descomprimir en el directorio dist del cerea que ya teneis descargado.



martes, 1 de marzo de 2011

Filtro de Kalman.

Por fin, he implementado el filtro de Kalman al programa Cerea. Y esto, ¿Para qué sirve?.

El filtro, en general, sirve para fusionar datos de diferentes sensores, por ejemplo, de dos gps a la vez, de un gps y una brújula electrónica, etc.

En la aplicación particular del Cerea, fusiono los datos del gps con un modelo matemático cinemático de un vehículo, con la hipótesis de restricción no holónoma ( esto es, sin deslizamiento lateral, sabemos que en un tractor, trabajando en el barro, la no holonomía puede estar en entredicho).

En la fusión y dadas las características del algoritmo, doy poco peso a las estimaciones de posición que me da el modelo y doy mucho peso a las estimaciones del ángulo del vehículo.

Un error común es suponer que el gps mide el yaw o cabeceo del vehículo. Es incierto, el gps mide el ángulo del vector velocidad. Mediante el filtro de Kalman, un modelo de triciclo de ackerman y usando como variables de control el módulo de la velocidad y el ángulo de este vector se puede cálcular el ángulo de yaw del vehículo.

Beneficios:
  • En parado, no hay bailoteo del vehículo ( el gps en parado da ángulos falsos). El ángulo es filtrado y el vehículo permace parado.
  • Reproduce la cinemática de marcha atrás, esto no me lo esperaba, pero cuando das marcha atrás el modelo se mueve como el vehículo. (* Parece que si, pero no lo reproduce, tengo que imponerle la restricción de máximo ángulo de giro de las ruedas)
  • Me permite aumentar el frame rate del programa, es decir, puedo tener 1 dato de gps por segundo y estimar los estados intermedios, subiendo a 20Hz, por ejemplo
  • Sirve para integrar nuevos sensores, por ejemplo, una unidad de guiado inercial.

El programa:

def kf_predict(X, P, A, Q, U):
dt =1.0
v = float(U[0])
titagps = float(U[1])
alfa= titagps
tita =float(X[2])
ganma= alfa-tita
b = 3.0
xpunto = v *cos(alfa)
ypunto = v* sin(alfa)
titapunto =v/b*sin(ganma)
BU = array([[dt*xpunto],[dt*ypunto],[dt*titapunto]])
#X = dot(A, X) + dot(B, U)
X = dot(A,X) + BU

P = dot(A, dot(P, A.T)) + Q
return(X,P)

def kf_update(X, P, Y, H, R):
IM = dot(H, X)
IS = R + dot(H, dot(P, H.T))
K = dot(P, dot(H.T, inv(IS)))
X = X + dot(K, (Y-IM))
P = P - dot(K, dot(IS, K.T))
#LH = gauss_pdf(Y, IM, IS)
return (X,P,K,IM,IS)


for line in f_in:
campo = line.split(",")
x = float(campo[2])
y = float(campo[3])

aux = float(campo[5].split(";")[0])
titav = 450 -aux
titav = titav-floor(titav/360)*360

if i ==0:
x_ant = x
y_ant= y
i+=1
x=x-x_ant
y=y-y_ant
v= float(campo[4])*0.514

if i == 1:
# Initialization of state matrices
X = array([[x], [y],[radians(titav)]])
P = diag((0.01, 0.01, 0.01))
A = array([[1, 0, 0], [0, 1, 0], [0, 0, 1]])
Q =10* eye(X.shape[0])
U=array([[v],[radians(titav)]])
Z=array([[x],[y]])
H = array([[1, 0, 0], [0, 1,0]])

R=array([[.25],[.25]])
(X, P) = kf_predict(X, P, A, Q, U)
(X, P, K, IM, IS) = kf_update(X, P, Z, H, R)
i+=1










Sobre los resultados, en el gráfico del ángulo del vehículo se aprecia, en la parte final , en rojo una zona ruidosa, el vehículo pintado por el programa oscila rotando en parado. Al aplicar el filtro permance quieto. Se ve en azul que el ángulo salta entre 0 y 360º. ( estos saltos son artificiales, porque al pasar los radianes a grados y meterlos dentre de una única vuelta de circunferencia ocurre esto).


domingo, 20 de febrero de 2011

Subida la versión 1.1 de nuevo

He vuelto a subir los archivos, porque me los han quitado de los servidores.
http://www.fileserve.com/file/2v8tyyB