Introducción
No sé por qué usted no puede encontrar fácilmente los robots de juguete que pueden ser controlados por Bluetooth. Pero que falta puede ser subsanada por un trabajo de pocas horas. Así que usted puede ver exactamente lo que quiero decir aquí es el robot que voy a describir es controlado por mí a través de un programa que se ejecuta en un Mac:
- Todo lo necesario para crear el proyecto de ejemplo Pololu . Eso incluye Windows. Que estaba desarrollando en un Mac, así que hice uso de VMWare. No puedo responder por cualquier otro emulación de Windows, dado que tiene un puerto USB y no tengo problemas experimentados con la emulación y USB en el pasado. Sólo necesitará Ventana para la configuración inicial del robot. Después de que se puede utilizar la plataforma de desarrollo de su elección. La lista de piezas es aquí . Pida el juego parcial para el controlador del motor. Usted necesitará los pines que viene con.
- Una oro BlueSMiRF módem Bluetooth de Sparkfun .
Lista de materiales:
Manual de usuario:
Cantidad | Parte # | Parte | Notas |
---|---|---|---|
1 | 1351 | Pololu Micro Maestro parcial Kit | Obtener la versión del kit, para que pueda soldar en sus propios cables para que el robot lo más compacto posible. |
3 | 1053 | Sub-Micro Servo 3.7g genéricos | Estos servos genéricos proporcionan el menor costo posible y el peso, pero puede sustituir servos, tales como elPoder HD sub-micro servo HD-1440A, para personalizar el diseño. |
2 | 1134 | Pololu Carrier con Sharp GP2Y0D810Z0F 10cm Sensor Digital Distancia | Este es un pequeño sensor de distancia con un alcance lo suficientemente largo para mantener su hexápodo fuera de problemas. |
1 | 2251 | Paquete de la batería: 4,8 V, 200 mAh | Este paquete de baterías proporcionará suficiente energía en un 5 V para alimentar el hexápodo durante cinco o diez minutos. |
3 | - | "Jumbo" clip de papel | Usado para formar las patas de la hexápodo. Estos deben ser de 6 "de largo cuando está desplegado. |
Herramientas necesarias:
- Soldador y soldadura
- Pistola de pegamento caliente
- Pelacables
- Larga nariz alicates
- Diagonal cutter
- Algunos de alambre para la conexión de las piezas
La mayoría de estas piezas están disponibles en Herramientas de sección del sitio web Pololu. Una pistola de pegamento caliente está disponible en las tiendas de artesanía para unos pocos dólares.
Construccion:
Paso 1: Conecte el conector macho, un conector de la batería.
Encuentra el 1 × 10 piezas de 0,1 "conector macho se incluye con el Maestro. Romper una nota 1 × 2 pieza y soldar a los pines GND BAT y como se muestra. Que el conector no está polarizada, por lo que debe tener cuidado de siempre conectar la batería con el negro cable conectado a tierra y el rojo cable conectado a BAT.
El conector que se muestra en la imagen es de una versión antigua de la batería. El nuevo será diferente, pero los cables negro y rojo todavía deben conectarse a los mismos pines del Maestro.
Soldar un conector de alimentación para el Maestro Micro. |
---|
Paso 2: Configuración del Maestro por el poder mismo.
Con la batería desconectada , conecte un cable (rojo) desde el terminal positivo de la cabecera macho VIN. Tenga cuidado de no dañar a corto o cualquiera de los componentes de la placa. Ahora, con la batería conectada, el Maestro debe estar encendido y parpadeando lentamente su LED amarillo, lo que indica que está esperando para detectar la velocidad de transmisión en la comunicación serial. Usted no va a utilizar la comunicación serial para este proyecto, por lo que necesita para desactivar la detección de la velocidad de transmisión en el siguiente paso.
El conector que se muestra en la imagen es de una versión antigua de la batería. Puesto que usted va a utilizar encabezado masculina, que cubre completamente los orificios de la placa, la soldadura a la parte expuesta de la clavija.
Auto de alimentación y un conector de la batería en el Micro Maestro. |
---|
Paso 3: Verifique que el Maestro y los servos están funcionando.
El Maestro Control Center se utiliza para la configuración y el control de la Micro Maestro, para la prueba, depuración de secuencias de comandos, y mucho más. Consulte la Sección 4 de la Guía del usuario de Micro Maestro para obtener instrucciones detalladas sobre cómo utilizar el Centro de Control Maestro.
Inicie el Centro de Control Maestro y configurar su Maestro para "Puerto USB dual" de modo. El LED amarillo ahora debe ser sobre todo apagado, parpadea muy brevemente una vez por segundo. En la ficha Estado, habilitar puertos servo 0, 1, y 2, y el LED amarillo comenzará doble parpadeo, lo que indica que algunos puertos están activos.
A continuación, utilizando una pieza de conector macho (incluido con el Maestro), conecte temporalmente un servo para el puerto 0.Asegúrese de conectar los cables correctamente, con el cable de color marrón o negro conectado a tierra. Usted debe escuchar un breve y agudo gemido como se active el servo, para pasar a ocupar un cargo y en medio de su rango. Después de una fracción de un segundo, cuando el servo ha alcanzado su posición, debe ser silencioso. Mover el deslizador de 1000 ms a 2000 ms para probar el movimiento del servo. Pruebe los tres puertos y los tres servos antes de continuar con el montaje.
Configure cada uno de los puertos de los servos a "Ir a" 1500 ms en el inicio. Esto hará que sea más fácil para alinear las patas más adelante.
Configure los puertos 3, 4, y 5 para las entradas. Esto es importante, ya que será la conexión de sensores más tarde y quiere evitar un cortocircuito hacia fuera!
Desconectar la batería antes de continuar.
Un servo sub-micro con lengüetas de montaje recortada. |
---|
Paso 4: Construir el cuerpo pegando los servos juntos.
Retire las lengüetas de montaje de los tres servos con cortadores diagonales. Las fichas no son necesarios para este proyecto y puede interferir con el movimiento de los servos.
A continuación, unirse a los servos con unos pocos toques de pegamento caliente, como se muestra a continuación. Usted no necesita mucho pegamento para sujetar con seguridad! Trata de alinear las esquinas precisamente para hacer superficies planas para el montaje de las otras partes.
Trate de alinear las esquinas. |
---|
Corte los cables del servo, dejando por lo menos 2 "(más si tienen menos experiencia con soldadura). Pele una pequeña cantidad de alambre del extremo de cada cable.
Corte y pele los cables de los servos, dejando aproximadamente 2 "de alambre. |
---|
Paso 5: Soldar los servos y sensores a la Micro Maestro.
Este paso requiere paciencia y cuidado. Un segundo par de manos puede ser muy útil.
El uso de soldadura a estaño los cables de los servos de manera que se puede conectar inicialmente sin soldadura adicional. En cuanto a las fotos de abajo para referencia, coloque el Maestro en el lado posterior del cuerpo y colocar los alambres medio sobre la parte frontal del Maestro y en los orificios para el canal 1. Manteniendo los cables en estos agujeros, tire del Maestro lejos del cuerpo, a continuación, toque el soldador para cada conexión de modo que la pequeña cantidad de soldadura de los cables se funde y se mantiene en su lugar. Ahora debería ser capaz de agregar más soldadura para cada una de las conexiones, hasta que los agujeros se llenan y los cables están firmemente fijados. Controlar que no haya hilos sueltos del cable, lo que podría ocasionar cortocircuitos.
Continuar, soldar el servo derecho al canal 0 y el servo izquierdo al canal 2, de modo que los servos están dispuestos en las mismas posiciones relativas que los puertos.
Conexión de los servos a los puertos 0, 1, y 2 en el Micro Maestro. |
---|
Los sensores digitales a distancia con placas portadoras recortadas. |
---|
Cortar las placas de sensores con una herramienta rotativa, muela de rectificado, corte diagonal, o una sierra de joyero, la eliminación de la parte que contiene el orificio de montaje que no sean necesarios, de modo que sean tan pequeños como sea posible. (Asegúrese de no cortar ningún rastro.) Luego soldarlas a un cable para que pueda conectarlos con el Maestro. El ejemplo siguiente utiliza un cable plano de 4 hilos, compartiendo el poder y las conexiones a tierra por los dos sensores. Cable de cinta hace que el montaje relativamente limpio, pero se puede utilizar cualquier cable que tiene disponible. Mire hacia adelante en las instrucciones para ver dónde están los sensores se va a ir, y asegúrese de que usted tiene un cable lo suficientemente largo. Piense acerca de cómo mantener los cables cerca del cuerpo y de la forma de las piernas y los servos.
Soldar los sensores a un cable de cuatro pines. |
---|
Soldar el sensor de corriente y la tierra a +5 V y tierra en el Maestro, y conectar las salidas de los sensores derecho e izquierdo a los canales 3 y 4, respectivamente. Tenga en cuenta que nosotros usamos 5 V en lugar de la tensión de la batería de forma que los canales Maestro nunca verá a voltajes más altos - y otra ventaja es que los sensores funcionan con energía USB, sin la batería enchufado
Soldar el cable sensor en el Maestro. |
---|
Ahora tiene un montaje eléctrico completo. Conecte las baterías, y los sensores deben activarse, girando sobre sus LEDs de color rojo cuando se detecta un objeto dentro de los 10 cm. Con el centro de control maestro, usted debería ser capaz de ver el cambio de valor de entrada de 255, cuando no hay ningún objeto está presente, a un valor bajo de 40 o menos, cuando se detecta un objeto. Si el LED está siempre, probablemente olvidó configurar los puertos a los insumos en el paso 3.
Paso 6: Construir las piernas.
Despliegue los clips de papel en trozos rectos de alambre. Alicates hacer abolladuras feos en el metal, así que trate de usar los dedos y el borde de una mesa para hacer esto.
Alinee los clips de papel, tanto como sea posible. |
---|
Los cables deben ser de seis pulgadas de largo. Para hacer que las patas delanteras y traseras, doble dos de ellos en 1,5 "secciones, con un ángulo de 90 ° entre las secciones, así:
El frente y las patas traseras del hexápodo. Los segmentos al final debe ser de 1,5 "de longitud. |
---|
Doble la tercera pieza en una forma de M, con secciones de longitud 1,25 ", 1,75", 1,75 "y 1,25", así:
Las patas centrales del hexápodo. Los segmentos al final debe ser 1,25 "de longitud. |
---|
Hot-pegar las piernas sobre los cuernos del servo. Utilice un cuerno recto para las patas medias y cuernos en forma de cruz o redondo para las patas delanteras y traseras.
Pegado de las piernas hexápodo a los cuernos del servo. |
---|
Con energía de la batería conectada, de manera que los servos mantener sus posiciones neutrales, poner los cuernos en los servos de manera que las piernas están tan cerca como sea posible a las posiciones neutras, como se muestra en la imagen. Fije en su lugar con los tornillos incluidos, sosteniendo las piernas a medida que los apriete demasiado para que no se aplica par a las ruedas servo frágiles.Pegamento el Maestro a la cara posterior de los servos, a ras de la parte inferior.
Colocación de las piernas y el Maestro de los servos. |
---|
Importante: No aplique nunca el par a las piernas con las manos, tratar de evitar que se muevan, o backdrive ellos. Engranajes servo puede romperse con facilidad, por lo que sólo debe siempre moverse por sus propios medios. Utilice el Centro de Control Maestro para experimentar con diferentes posiciones, en lugar de obligar a los servos.
Paso 7: Colocación de la batería y los sensores.
Pegamento de la batería a la parte delantera del hexápodo, a ras con la parte inferior, de manera que habrá como el aclaramiento tanto como sea posible. Asegúrese de que las patas del medio tienen un montón de espacio para girar a la izquierda y la derecha sin tocar la batería. Pegar los sensores a la parte superior de la batería, en ángulo a la izquierda y la derecha.
El hexápodo montado, vista frontal. |
---|
Tener cuidado de que el cableado no interfiere con el movimiento de las patas del medio. Es posible que desee a la suya ruta diferente.Utilice pequeñas gotas de pegamento caliente si es necesario para mantener los cables en su lugar.
El hexápodo montado, vista superior. |
---|
Paso 8: Toques finales.
Utilice el Centro de Control Maestro para encontrar las posiciones neutrales (donde las piernas son como se disponen simétricamente como sea posible), así como sus seguros mínimos y máximos. Ajuste las posiciones neutrales como el "Ir a" los valores para cada servo, y ajustar Min y Max valores para que el hexápodo nunca destruirse a sí misma. Ajustar los ángulos de los cables para que los seis pies toquen el suelo en la posición neutral, probablemente doblando las patas delanteras y traseras a más de 90 °.
El hexápodo montado, vista lateral. |
---|
Una última cosa, opcional que usted puede querer hacer es añadir una gota de pegamento caliente en cada pie, de modo que el metal es menos probable que rascar su superficie de trabajo. Su hexápodo está ahora listo para ser programado!
Programacion
Aires
Ahora que usted ha construido su hexápodo, es el momento para hacerlo andar. Un método de caminar hacia delante con las piernas se llama andar , y los animales o robots con muchos grados de libertad tienen una variedad de aires disponibles - los humanos pueden caminar, correr, brincar o saltar, los caballos pueden caminar, trote, galope, galope o, y así sucesivamente. Su hexápodo es tan simple que sólo tiene un modo de andar posible para el movimiento hacia adelante, llamado el modo de andar trípode .
En el modo de andar trípode, su hexápodo tiene tres pies en contacto con el suelo en todo momento: la patas delanteras y traseras en un lado y la pata central en el otro lado. El ángulo de la servo medio determina qué lado está activo y cuál es el lado hacia abajo. Se logra el movimiento hacia adelante, empujando los pies hacia atrás contra el suelo mientras los otros pies avanzar por el aire. Entonces el hexápodo desplaza su peso a los otros tres pies y se mueve hacia adelante de la misma manera. Por continuamente cambiando su peso utilizando las patas del medio, moviendo los pies levantados hacia adelante, camina hacia adelante.
Caminar hacia adelante con el Centro de Control Maestro
Usted puede ensamblar secuencias de movimiento usando la función Maestro del Centro de Control de secuenciador. Para obtener la documentación en el secuenciador, consulte la sección 4.c de la Guía del usuario de Micro Maestro .
Utilice los controles de la ficha Estado del centro de Control Maestro para mover el hexápodo para cada una de estas cuatro posiciones, pulsando el botón "Guardar marco" después de cada uno, para guardar una secuencia.
En las capturas de pantalla del Centro de Control Maestro, se puede ver que los servos están siempre ya sea a valores mínimos o máximos, que debería haber configurados como valores seguros que no causan el servo a la tensión. Sus números podrían ser ligeramente diferentes de las que se muestran aquí. Si usted ha reunido los servos en una configuración diferente o conectados a puertos diferentes, usted, por supuesto, tienen diferentes configuraciones propias de cada fotograma.
En la ficha Secuencia, usted debe ahora tener cuatro marcos de guardado. Seleccione "Reproducir en bucle" y reproducir la secuencia para ver su caminar hexápodo. Cambiar el nombre de la secuencia de "enviar" antes de continuar.
Caminar hacia adelante autónomamente
Haga clic en el botón "Secuencia Copiar Script" para convertir su secuencia en una secuencia de comandos que se pueden guardar en el Maestro. Si selecciona la opción "Ejecutar script en el arranque" opción en la pestaña Script y aplicar los ajustes, el hexápodo automáticamente comenzará a caminar. Ahora puede desconectar del USB y permita que se camine por sí solo.
Vuelva a conectar USB y haga clic en "Detener Script" o desactivar la opción "Ejecutar script en el arranque" para conseguir que deje de caminar.
Hacia atrás y girando aires
En la ficha de estado, vuelva a empezar con el capítulo 0, pero pasar por la secuencia de los movimientos en sentido inverso para llegar caminando al revés: Frame 0, 3 Frame, Frame 2, entonces el fotograma 1. Guardar esta secuencia bajo el nombre de "al revés", y la prueba de que se mueve hacia atrás su hexápodo.
En cuanto es diferente. Para crear secuencias de vuelta, tendrá que mover todo patas delanteras y traseras hacia adelante o hacia atrás juntos, en lugar de mover los dos lados en direcciones opuestas. Pruébelo, y salvar dos secuencias más: "derecha" e "izquierda", verificando que gire el hexápodo derecha e izquierda.
Ahora está listo para programar el hexápodo para evitar obstáculos.
2. Parte
Control mediante bluetooth
El primer paso es crear el proyecto Pololu exactamente como se describe. En este punto, usted tendrá un robot completo que puede funcionar de modo autónomo. Se puede programar desde Windows usando un lenguaje de scripting de Pololu se describe en el Manual .
Tenga en cuenta que la batería utilizada es este . Su conector es diferente a la descrita en el proyecto. Usted sólo tendrá que soldar un par de pines en lugar de un tipo especial de conector:
Por cierto, hay un defecto de menor importancia en el diseño de Pololu. El sensor y los servos están pegados a la batería usando pegamento caliente.Cuando la batería está cargada se calienta. Se puede adivinar el resto. Así que una vez que todo funciona, es posible que desee cambiar a una cola diferente. He utilizado epoxi.
Los hilos de alambre de los servos son muy finos. En un momento creo que algo salió mal camino provocando un cortocircuito. Me sorprendió la tarjeta del controlador aún funcionaba después de que vi el humo se levantan de ella. Así que después de que he usado algunos toques de pegamento caliente para que actúe como aislante alrededor de mi soldadura.
Me di cuenta de que no podía usar el controlador del motor a través de un concentrador USB externo, que siempre tenía que usar un cable directamente desde mi mac.
En el proceso de hacer que el robot de cortar los conectores fuera de los servos. Mantener dos de ellos con 2 o 3 pulgadas de alambre adjunto. Vamos a volver a utilizarlos más adelante.
Configuración de Bluetooth
En su modo predeterminado, el robot es controlable y secuencias de comandos a través del puerto USB. Sin embargo, dos patas de la placa están unidos a un puerto serie (funcionando a 5V, no la tensión RS232 habitual). Estos se pueden conectar directamente a un par de clavijas de la placa BlueSMiRF.
En primer lugar vamos a obtener el módem de forma independiente del robot. Así que adelante y soldadura de 6 pines a la placa de cabecera de este modo:
Ahora podemos conectar directamente a la batería del robot mediante su conector para hacer el siguiente circuito:
Convenientemente, VCC y GND están uno junto al otro, al igual que en el conector de la batería. El rojo pequeño LED marcado Estadística debe comenzar a parpadear. Esto significa que está listo para ir. Tenga cuidado de no invertir la polaridad (esto no es Star Trek) o hacer un apagado por error un alfiler.
Ahora seguir adelante y emparejarlo con el ordenador principal. En el Mac es el proceso habitual. Probablemente aparecerá como un dispositivo llamadoFirefly-algo . Ha habido varias revisiones de la documentación para BlueSMiRFs. Supuse que, correctamente, que la clave de acceso correcta es 1234.
Una vez conectado usted debe obtener un nuevo puerto serie. Mina apareció como / dev/tty.FireFly-DB29-SPP . SPP es perfil de puerto serie .Ahora necesita una aplicación de terminal que puede hablar con un puerto serie. En las máquinas Unix, puede utilizar la pantalla seguido de la ruta de acceso al archivo de prog. Vas a encontrar ayuda en la web para otros sistemas operativos. En Windows Espero que usted conseguirá un nuevo COMpuerto. No parecía importar lo que la velocidad de transmisión que elegí en esta etapa. Supongo que SPP presenta una interfaz que se parece a un puerto serie, pero que la velocidad de conexión no significa nada. Pero puedo estar equivocado y es posible que tenga que experimentar y / o leer la documentación. Puede tomar varios intento de conectar con éxito. (Le gusta demostrar que tiene el poder de decir no, si lo desea.) Cuando lo haga, verá el Conn luz LED de color verde.
Si se conecta a un minuto de encender el BlueSMiRF se puede configurar mediante la introducción de su modo de comando. Una revisión de la documentación dice que usted debe escribir + + + . Mi versión utilizado $ $ $ . Usted no va a ver a tus llaves se hizo eco en la pantalla, pero debe responder CMD . A continuación, escriba d y volver a obtener un resumen de su estado. Ahora escriba SU, 19200 (y volver) para ajustar la velocidad de transmisión en el lado del puerto serie. Se va a ir mucho más rápido que esto, pero vale la pena ser cauto al principio. Reconoce esto, pero en realidad no cambia la velocidad hasta que se reinicie el dispositivo (por ejemplo, por el poder que el ciclismo). Salir del modo de comandos escribiendo --- . En este punto, cualquier cosa que escriba en el terminal saldrá a 19200 baudios en el pin TX. Salga de la pantalla pulsando ^ A ^ X. No estoy seguro de cómo se puede probar fácilmente este corto de completar el robot. Lo he comprobado con un programa en un MSP430 Launchpad . Me gustaría tener un dispositivo de lujo de diagnóstico para leer las transmisiones seriales. Tendría que construir uno.
Por cierto, hablando con el BlueSMiRF como si fuera un puerto serial es una forma de compatibilidad con versiones anteriores. Debería ser posible hablar con él directamente a través de la API RFCOMM . Entre otras cosas, esto permitiría un mejor diagnóstico.
Configuración del Robot
Ahora tiene que configurar el robot para utilizar 19200 baudios sobre sus TX / RX pines. Conectar vía USB a la aplicación de Windows Control Center (como si hubieras hecho antes si construyes el diseño original) y configurarlo para utilizar la UART a 19200 baudios. Asegúrese de CRC está desactivado. De este modo:
Una vez hecho esto usted no necesita Windows de nuevo a menos que cambie la velocidad de transmisión.
Conexión del módem a Robot
Ahora lo que necesita para conectar el robot al módem. Dispone de 6 pines en la tarjeta de módem por lo que necesita un conector de 6 pines. Me pegan los dos tres pines que he mencionado anteriormente para hacer un conector de esta manera:
Los dos cables exteriores pueden ser soldadas entre sí, ya que no está utilizando el control de flujo, y por lo que el BlueSMiRF está libre para enviar (CTS) siempre que sea capaz de enviar (RTS), los extremos de los otros cuatro alambres pueden ser soldados directamente a la tarjeta del controlador del motor para este circuito:
Ahora viene el poco dudoso. Yo caliente pegado al tablero BlueSMiRF directamente al lado de los servos de esta manera:
Eso es dudoso porque pone los motores eléctricos directamente al lado de un dispositivo mediante radiofrecuencia. Los motores emiten mucho ruido RF.Pero no puede ser tan malo, después de todos los servos se han utilizado durante años en los modelos de radio control, Bluetooth y probablemente tiene algún corrección de errores. Parecía funcionar para mí. (Pero véase la nota siguiente).
Hablando con el Robot
Ahora tenemos que hablar con el robot. Casi todas las plataformas de desarrollo tiene una forma de hablar a los puertos serie. Yo Haskell con elSerialPort paquete. Como ya había fijado la velocidad de transmisión, he utilizado el protocolo Pololu compacto . Como el foco de este artículo es sobre hardware, sólo voy a dar el código al final. Una vez que está en ejecución, debe ser capaz de controlar el robot usando
- f - dar un paso adelante
- b - dar un paso atrás
- l - a la izquierda
- r - a la derecha
- e - leer el estado de los dos sensores de proximidad
Ahora usted es libre de código hasta lo que quieras. Experimenté con localización utilizando un método que aprendí de Eric Kidd .
Notas
De vez en cuando había caído bytes. Todavía no he elaborado una manera de recuperar el 100% fiable cuando esto sucede y no estoy seguro si es debido al ruido de RF que he mencionado anteriormente. Usted probablemente puede jugar con el parámetro de tiempo de espera en el Centro de Control de Pololu para asegurar la rentabilidad del robot a un estado conocido si las comunicaciones dejan un poco.
El controlador Apple SPP es bastante horrible. Por lo general, funciona (aparte de la necesidad molesto para hacer múltiples intentos para conectarse), pero si se interrumpe su código en el momento equivocado con ^ C (por ejemplo) se pueden encontrar encierra tanta fuerza que usted termina con un proceso zombie unkillable . El sistema operativo no parecía capaz de matar en el cierre (tal vez habría finalmente el tiempo de espera) y tuve que apagar el Mac si quería usar el robot de nuevo. Sólo ocurrió un par de veces en dos semanas de uso intensivo, pero es molesto.
Y si el robot deja de funcionar - recuerde estas baterías son muy pequeñas y están haciendo mucho, por lo que sólo puede necesitar una recarga.
Código
El código utiliza dos hilos, un servidor que se comunica con el puerto serie y un cliente para los usuarios. Esto significa que los hilos independientes puede controlar las piernas y los ojos, por ejemplo, sin las operaciones del puerto serie cada vez intercalada. Esto no está muy pulido, pero debe ser lo suficientemente bueno para comenzar la experimentación. Sólo lo he probado en Mac OS X, pero parece independiente de la plataforma para mí.
> Módulo Robot donde
> Import escondite Prelude (izquierda, derecha)
> import Control.Concurrent
> Control.Monad.Trans importación
> Importar Control.Monad.Trans.Maybe
> Control.Monad.Trans.Reader importación
> Importar Control.Exception
> System.Hardware importación. SerialPort
lado del servidor utilizando el protocolo Pololu compacto .
> sendByte :: Int -> SerialPort -> IO ()
> sendByte bs = sendChar s (toEnum b)
> getByte :: SerialPort -> IO (Maybe Int)
> getByte s = no
> b <- recvChar s
> return $ fmap fromEnum b
> setTarget :: Int -> Int -> SerialPort -> IO ()
> target canal setTarget hacer port =
> sendByte 0x84 puerto
> sendByte canal del puerto
> let (b1, b0) = objetivo `` DIVMOD 0x80
> sendByte puerto b0
> sendByte puerto b1
> getPosition canal port = $ runMaybeT hacer
> liftIO $ sendByte 0x90 puerto
> liftIO $ sendByte canal del puerto
> lo <- MaybeT $ $ liftIO getByte puerto
> hi <- MaybeT liftIO $ $ getByte puerto
> return $ Lo + 0x100 * hi
> Datos SerialCommand = Int Int setTarget
> | GetPosition Int (Maybe Int -> IO ())
> | End
> serialExec comando port =
> Comando caso del
objetivo> Canal setTarget -> setTarget canal puerto de destino
> Continuación del GetPosition ->
> getPosition canal del puerto >> = continuación
> de otra manera -> return ()
> puerto commandChannel serialThread = do
> comando <- liftIO $ commandChannel readChan
> puerto comando serialExec
> comando caso de
End> -> do
> closeSerial puerto
> return ()
> otro modo -> serialThread puerto commandChannel
Del lado del cliente
> Dirección data = left | right | Reenviar | Volver
> start = tty intentar (openSerial tty defaultSerialSettings
> {} baudrate = B19200) >> =
> o bien
> (\ ex -> do
> print (ex :: IOException)
> threadDelay 250000
> start tty)
> (\ port -> do
> commandChannel <- newChan
> forkIO $ serialThread puerto commandChannel
> commandChannel retorno)
> Tipo de RobotM un READER = (Chan SerialCommand) IO a
> writeChan '= flip writeChan
> end = $ writeChan READER 'End
> servo setServo limit = $ writeChan READER '$
> setTarget (servo canal) (servo límite)
> = setLo setServo loLimit
> Sethi = setServo hiLimit
> readEye canal cont = $ writeChan READER '$ GetPosition canal cont
> delay = 100 * 1000
> recaudar Izquierda = setLo midLegs
> recaudar derecha = Sethi midLegs
> delantero izquierdo = setLo leftLegs
> derecha = adelante Sethi rightLegs
> volver Izquierda = Sethi leftLegs
> volver Derecha = rightLegs setLo
> Izquierda = Derecha opuesto
> Justo enfrente = Izquierda
> opuesto Forward = Volver
> Volver opuesto = Avance
movimiento> Reenviar = avance
paso> Volver atrás =
> lado halfCycle direction0 dirección1 = do
> recaudar lado
> liftIO $ demora threadDelay
> move direction0 Izquierda
> move dirección1 Derecho
> liftIO $ threadDelay retardo
> Movimiento direction0 dirección1 = do
> halfCycle Izquierda direction0 dirección1
> Derecho halfCycle (frente direction0) (opuesto dirección1)
> walkcycle movimiento = Atrás Adelante
> reverseCycle movimiento = Atrás Adelante
> gire a la derecha movimiento = Adelante Adelante
> gire a la izquierda = motion Volver Volver
> withRobot tty cmds = do
> commandChannel <- inicio tty
> flip commandChannel runReaderT (cmds >> final)
> ojos = do
> readEye 4 $ impresión. (("Ojo Izquierdo =" + +). Show. Fmap (<512))
> readEye 3 $ impresión. (("Ojo Derecho =" + +) muestran fmap (<512).).
> commandLoop = do
> Tecla <- liftIO $ getChar
> Tecla caso de
> 'f' -> walkcycle
> 'b' -> reverseCycle
> ' l '- a su vez> Izquierda
> 'r' -> Giro a la derecha
> 'e' -> los ojos
> de otra manera -> return ()
> si key == 'q'
> a continuación, volver ()
> más commandLoop
> testRobot do =
> withRobot $ tty hacer
> liftIO $ print "Ready"
commandLoop>
Aquí hay algunas cosas para que usted pueda configurar. En particular, establecer los límites de los servos de manera que las patas no golpear en el cuerpo del robot, pelando los engranajes. Estos números serán un poco diferente dependiendo de exactamente cómo se construyó el robot. Es posible que desee comenzar con los límites superior e inferior más cercano a 6000, la mitad del rango del movimiento del servo.
> tty = "/ dev/tty.FireFly-DB29-SPP"
> rightLegs = Servo 0 5000 6500
> = midLegs Servo 1 5000 6500
> = leftLegs Servo 2 5000 6500
0 comentarios:
Publicar un comentario