Proyecto AndroidePortada | Acerca de | Ayuda | FAQ | Páginas especiales | Registrarse/Entrar

Categorías: Estructura | Electrónica | Programas
Versión para imprimir | Aviso legal | Política de protección de datos | Revisión actual

Estructura de comunicaciones

(Diferencia entre revisiones)

Revisión de 15:58 11 mar 2008
Migrassi (Discusión | contribuciones)

← Ir a diferencia anterior
Revisión de 16:06 11 mar 2008
Migrassi (Discusión | contribuciones)

Ir a siguiente diferencia →
Línea 141: Línea 141:
Me parece que, al menos inicialmente, para el bus de comunicación intermódulos deberíamos adoptar [http://www.i2c-bus.org/ I2C], por su facilidad de implementación y compatibilidad con cualquier microcontroloador que se elija luego para cada parte. El módulo principal que mencionábamos antes haría de Master y cada módulo de operación (pie, rodilla, cadera, etc) sería un Slave. Me parece que, al menos inicialmente, para el bus de comunicación intermódulos deberíamos adoptar [http://www.i2c-bus.org/ I2C], por su facilidad de implementación y compatibilidad con cualquier microcontroloador que se elija luego para cada parte. El módulo principal que mencionábamos antes haría de Master y cada módulo de operación (pie, rodilla, cadera, etc) sería un Slave.
-Hacia afuera propongo que el mencionado módulo principal de comunicaciones se base en algún PIC con soporte para [http://es.wikipedia.org/wiki/USB USB], además de [http://es.wikipedia.org/wiki/Puerto_serie puerto serie]. De este modo podríamos conectar una PC mediante un cable USB cuando necesitamos transferir muchos datos, modificar el programa, etc. y dejar el puerto serial para conectar a cualquier medio inalámbrico, seguramente algun módulo RF (esperemos más confiable que los Wenshing), Zigbee, Bluetooth o lo que fuere.+Hacia afuera propongo que el mencionado módulo principal de comunicaciones (MPC) se base en algún PIC con soporte para [http://es.wikipedia.org/wiki/USB USB], además de [http://es.wikipedia.org/wiki/Puerto_serie puerto serie]. De este modo podríamos conectar una PC mediante un cable USB cuando necesitamos transferir muchos datos, modificar el programa, etc. y dejar el puerto serial para conectar a cualquier medio inalámbrico, seguramente algun módulo RF (esperemos más confiable que los Wenshing), Zigbee, Bluetooth o lo que fuere.
 + 
 +El mismo MPC debería también gestionar el teclado y display que mencionaba [[Usuario:Mastromec|Mastromec]] ya que también son una forma de comunicación.
 + 
 +Podríamos considerar además la posibilidad de agregarle un sensor IR, de modo de poder enviar comandos de acción directa con un control remoto de mano. Me refiero a paradas de energencia y otros comando útiles para las demos, je, je [http://www.youtube.com/watch?v=EKU7omqjvn8 Asimo falling down]
--[[Usuario:Migrassi|Migrassi]] 13:58 11 mar 2008 (ARST) --[[Usuario:Migrassi|Migrassi]] 13:58 11 mar 2008 (ARST)

Revisión de 16:06 11 mar 2008

Comunicaciones externas

Aunque todavía está por definir, por el momento yo pienso en un transmisor y un receptor en comunicación constante, pero intercalada. Desde el robot se transmite un paquete de datos con información de estado de sensores y luego se pasa a espera de recepción. El otro lado (una PC de comando) recibe este paquete e inmediatamente transmite órdenes, si es necesario, o un OK, y pasa a su vez a espera. La situación se mantiene indefinidamente, y sólo se modifica cuando por un comando desde la computadora, o por una solicitud del programa del robot, se establece —momentáneamente— la transmisión de un bloque de datos más amplio, por ejemplo, una descarga de rutinas. O un informe más detallado de estado del robot (posiciones, temperaturas, registros de movimientos realizados, etc).

Este sistema lo implementé en un robot (uno de tres ruedas) que funciona en contacto con una PC u otra computadora. La RF está implementada con módulos TWS y TRS de Wenshing, aunque seguramente en el robot hay que buscar alternativas más profesionales. El diseño lleva un PIC16F628A en el lado de transmisión y uno igual en el lado de recepción. Esto porque había cosas que me resultaba difícil compartir, por lo cual me pareció que el costo de un PIC más no era importante ante la simplificación en el uso y en la programación (agregado el 10 de marzo por Edu).

--Edu 21:34 9 mar 2008 (ARST)


Se podría decir entonces, que el robot tendrá un módulo de comunicaciones gestionado por (al menos) un micro-----. Ese módulo será independiente del resto del sistema y lo contactará solo cuando sea necesario.
Así como este módulo, es posible que aparezcan otros más...

Siguiendo el lineamiento entonces puede pasar que tengan que coexistir muchos distintos módulos dedicados, cada uno, a tareas específicas, que tengan en común el mismo diseño electrónico (como para que ayude a que el costo de diseño sea más bajo).

Comunicación interna

Además es seguro que entre módulos sea necesaria alguna forma de comunicación interna que normalmente se resuelven por un bus y un protocolo.
El protocolo puede ser uno que dependa del tipo de micros utilizados o que sea uno completamente nuevo.

        ________
       |        |
Al ext.|Mod.    |.............<---- bus interno
       |Comunic.|            .
       |________|            .
                             .
        ________             .
       |        |            .
(¿?)   |Mod.    |.............
       |(---)   |            .
       |________|            .
                             .
        ________             .
       |        |            .
(¿?)   |Mod.    |.............
       |(---)   |            .
       |________|            ........al resto de los módulos


       Figura 1.

Aún así, el método de interconectar todos los módulos a un mismo bus podría resultar lento. Esto obligaría a disponer los módulos en una especie de estructura de árbol. ( es fácil decirlo pero habría que demostrar que la comunicación entre módulos dispuestos en una estructura de árbol puede llegar a ser, en determinadas circunstancias o siempre, mas eficiente que la comunicación entre módulos colgados a un mismo bus). Implica que todos los módulos preprocesen información de otros módulos que tienen por detrás.
Podría pasar que, (por dar un ejemplo), cada tobillo del robot necesite su propio módulo. Lo mismo la cadera, y así varios otros puntos clave del robot. De ser así hay que prever el espacio y el lugar para colocar cada uno de esos módulos.

En este punto es posible que se haga necesario comenzar a pensar entonces en un algoritmo para las comunicaciones internas entre módulos.

Resumiendo lo anterior, los planteos serían:

--Adrian S.A. 11:35 10 mar 2008 (ARST)



Parece que está bien separar los modulos para un control más específico, y para acelerar la comunicación. Ahora creo que deberíamos disponer de un módulo de control local de todo lo referente a movimientos, para evaluación, Pap y cambio de variables simples. Se me ocurre tener en alguna parte un teclado flexible con una pantallita de dos líneas, y usar algún protocolo para comunicarme con la central dentro del androide.

--Mastromec 14:30 10 mar 2008 (ARST)


Como opción para la comunicación con el exterior, yo implemente módulos Zigbee que son de muy bajo consumo, tienen interfaz uart (lo uso a 115200 bps) y se puede trabajar con varios módulos simultáneos en una misma red (topologia COORDINADOR/CLIENTES). También es una opción para usar como "teclado remoto" si quieren :)

Por otro lado, se me ocurre que podemos crear un protocolo, como decía Adrian, genérico para todo el sistema de manera que haya 3 partes centrales en el androide:

1- Cabeza: Control general del sistema y comunicación con el exterior. 2- Torso y Caderas: Se encargaría de la movilidad y de actualizar las variables de su estructura, etc. (todavía falta para especificar mas funcionalidades) 3- Piernas: Maneja los motores, las mediciones de posición, actualiza los datos en su estructura, etc.

Veran que menciono una "Estructura", esto es porque pense en la posibilidad de tener un Propeller (por la capacidad de 8 cogs al mismo tiempo, puede ser cualquier otro) como un dispositivo de "base de datos". Es decir, la idea es simplificar cuestiones para la inteligencia de la cabeza y que ésta solo interactúe con los otros dos modulos para tomar decisiones.


        ________      _____
       |        |    |     |
Al ext.|Mod.    |....| CPU |...<---- bus interno
       |Comunic.|    |     |  .
       |________|    |_____|  .
                              .
                   ________   .
                  |        |  .
(¿?) Modulos .....|Mod.    |...
        2º        |TORSO   |  .
                  |________|  .
                              .
                   ________   .
                  |        |  .
(¿?) Modulos .....|Mod.    |...        _________
        2º        |PIERNAS |  .       |         |
                  |________|  ........| Memoria |
                                      |  Datos  |
                                      |_________|
                 Figura 2.

Con lo cual cada módulo puede acceder a la base de datos para ir grabando sus mediciones y la CPU tendría una tarea cada X tiempo para enviar los datos que sean necesarios al exterior. En dicha memoria podríamos guardar los datos que menciona Juan.

Marianobustos 15:13 10 mar 2008 (ARST)


Se me ocurre que debería haber un módulo dedicado al equilibrio (balance/equilibrium):
De esta manera, como el equilibrio tiene que ver con todos los elementos móviles del sistema, sería mas fácil programar al respecto.

        ________      _____
       |        |    |     |
Al ext.|Mod.    |....| CPU |...<---- bus interno
       |Comunic.|    |     |  .
       |________|    |_____|  .
                              .
                   ________   .
                  |        |  .
 ¿?) Modulos .....|Mod.    |...
        2º        |TORSO   |  .
                  |________|  .
                              .
                   ________   .
                  |        |  .
 ¿?) Modulos .....|Mod.    |...        _________
        2º        |PIERNAS |  .       |         |
                  |________|  ........| Memoria |
                              .       |  Datos  |
                              .       |_________|
                              .
                   ________   .
                  |        |  .
    (¿?)     .....|Mod.    |...
                  |BALANCE |  .
                  |________|  .
                 (equilibrio) .
               Figura 3.

--Adrian Adrian S.A. 17:23 10 mar 2008 (ARST)


Sin dudas el esquema de dos tipos de comunicaciones, una interna entre módulos, y la otra desde un módulo principal hacia afuera es el que se necesita.

Me parece que, al menos inicialmente, para el bus de comunicación intermódulos deberíamos adoptar I2C, por su facilidad de implementación y compatibilidad con cualquier microcontroloador que se elija luego para cada parte. El módulo principal que mencionábamos antes haría de Master y cada módulo de operación (pie, rodilla, cadera, etc) sería un Slave.

Hacia afuera propongo que el mencionado módulo principal de comunicaciones (MPC) se base en algún PIC con soporte para USB, además de puerto serie. De este modo podríamos conectar una PC mediante un cable USB cuando necesitamos transferir muchos datos, modificar el programa, etc. y dejar el puerto serial para conectar a cualquier medio inalámbrico, seguramente algun módulo RF (esperemos más confiable que los Wenshing), Zigbee, Bluetooth o lo que fuere.

El mismo MPC debería también gestionar el teclado y display que mencionaba Mastromec ya que también son una forma de comunicación.

Podríamos considerar además la posibilidad de agregarle un sensor IR, de modo de poder enviar comandos de acción directa con un control remoto de mano. Me refiero a paradas de energencia y otros comando útiles para las demos, je, je Asimo falling down

--Migrassi 13:58 11 mar 2008 (ARST)