Presentación samsa ii

3,424 views
3,326 views

Published on

SAMSA II

An hexapod robot with 18 AX-12 servos, controlled by an Arduino Mega board.

It features advanced walking routines, full 3D body movement, etc.

C++ code developed using AVR Project IDE.

(c) 2011 by Pablo Gindel & Jorge Visca, Montevideo - Uruguay.

Published in: Devices & Hardware
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
3,424
On SlideShare
0
From Embeds
0
Number of Embeds
2,065
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Presentación samsa ii

  1. 1. SAMSA II Documentación <ul><li>Pablo Gindel & Jorge Visca </li></ul>
  2. 2. MECANICA Barra de acero 7mm Piezas kit “Bioloid”
  3. 3. Estructura de 1 pata SAMSA SAMSA II Servo-motores “ Ménsulas” en forma de “U”
  4. 4. Amortiguadores <ul><li>Soporte de plástico </li></ul><ul><li>Tubo de fibra de vidrio </li></ul><ul><li>Resorte </li></ul><ul><li>Tope </li></ul><ul><li>“ Regatón” de goma </li></ul>
  5. 5. MOTORES <ul><li>Micro-servo de 9g </li></ul><ul><li>analógico (PWM) </li></ul><ul><li>débil (bajo consumo) </li></ul><ul><li>rápido </li></ul><ul><li>rango de 180º </li></ul><ul><li>barato </li></ul><ul><li>conexión individual </li></ul><ul><li>“ tonto” </li></ul><ul><li>usado en la cabeza </li></ul><ul><li>Dynamixel AX-12+ </li></ul><ul><li>digital (half-duplex serial, 1Mb/s) </li></ul><ul><li>robusto (alto consumo) </li></ul><ul><li>lento </li></ul><ul><li>rango de 300º </li></ul><ul><li>costoso </li></ul><ul><li>conexión en cadena </li></ul><ul><li>“ inteligente” </li></ul><ul><li>usado en las patas </li></ul>
  6. 6. HARDWARE. Diagrama en bloques
  7. 7. Microcontroladores Atmega1280 (Arduino Mega) 128KB/8KB/8bit/16MHz Atmega8 (Display) 8KB/1KB/8bit/16MHz Atmega168 (Arduino Mini) 16KB/1KB/8bit/16MHz Attiny85 8KB/512B/8bit/8MHz
  8. 8. Sensor “inteligente” de distancia sensor de distancia IR (Sharp) sensores IR de corta distancia y laterales protocolo inteligente <ul><li>distancia en cm </li></ul><ul><li>distancia en mm </li></ul><ul><li>velocidad acercamiento (cm/s) </li></ul><ul><li>“ lateralidad” </li></ul><ul><li>“ eventos” </li></ul><ul><li>envío por solicitud </li></ul><ul><li>umbrales para auto-envío </li></ul><ul><li>enviar todo </li></ul><ul><li>ajustar frecuencia de muestreo </li></ul><ul><li>etc. </li></ul>
  9. 9. rutina principal generación gráficos 2D frame buffer actualización pantalla hardware (display) (bajo nivel) (alto nivel) Display matricial RGB 8x8 con firmware modificado Firmware original Firmware modificado colores 8 (1bit x color) 64 (2bit x color) modo de operación raw frame protocolo inteligente gráficos 2D no líneas, triángulos, cuadrados, círculos, etc. texto No ASCII completo animaciones No scroll (x, y), rotaciones, espejos, etc.
  10. 10. Baterías LiPo 3 celdas 11.1V / 730mAh 20C/40C Motores AX-12+ LiPo 2 celdas 7.4V / 730mAh 20C/40C Todo lo demás (Arduinos, sensores, etc.)
  11. 11. Control remoto IR Receptor IR 38KHz <ul><li>Protocolo NEC </li></ul><ul><li>Decodificación en el micro de la cabeza </li></ul><ul><li>Disparado por una interrupción </li></ul>
  12. 12. Sensor de “cuerdita” Potenciómetro Resorte Encoder magnético Pre-procesador (genera una interrupción cuando se mueve el sensor)
  13. 13. Programación AVR toolchain avrlibc avr-gcc avrdude Arduino biblioteca IDE ¿lenguaje? <ul><li>Programa central (Atmega1280) </li></ul><ul><li>AVR Project IDE </li></ul><ul><li>C++ </li></ul><ul><li>biblioteca Arduino (parcial) </li></ul><ul><li>biblioteca Wiring (parcial) </li></ul><ul><li>Firmware “Cabeza” </li></ul><ul><li>Firmware Display </li></ul><ul><li>Firmware Attiny85 </li></ul><ul><li>Arduino </li></ul>
  14. 14. tiempo … INT INT INT SRAM variables INT … ... overflow TIMER rutina principal ISR Interrupt Service Routine <ul><li>muestreo sensores </li></ul><ul><li>actualización display </li></ul><ul><li>control del hardware </li></ul><ul><li>etc. </li></ul>Multitasking basado en iterrupciones periódicas
  15. 15. “ Subsistema” de movimiento hardware.cpp ISR (TIMER2_OVF_vect) Interrupt handler ax12.cpp setMultiPosVel () envia un mensaje SyncWrite a los motores events.cpp process () verifica el tiempo de los eventos y los ejecuta double ended queue add () agrega un evento mov_bajo_nivel.cpp set_coord () convierte los eventos en ángulos y duraciones destino ang_des [][] dur_des [][] alfabetagama () cinemática inversa ang_act [][] motor_update () determina qué motores deben ser actualizados
  16. 16. Cuadro general de interrupciones periódicas Cabeza Sensores Serial ISR HardwareSerial.cpp (Arduino) SerialComm.cpp dec. mensajes variables RAM buffer polling “ bypassear” la biblioteca Arduino? período overflow tareas TIMER2 (prioridad) 4ms <ul><li>movimiento bajo nivel </li></ul><ul><li>polling de “load” de motores </li></ul>TIMER0 1ms <ul><li>movimiento alto nivel (caminatas, etc.) </li></ul><ul><li>animación display </li></ul><ul><li>polling sensores (*) </li></ul><ul><li>temporización Arduino (millis(), etc.) </li></ul>
  17. 17. Cinemática Inversa Triángulo 1 Pitágoras func. trig. inv. Triángulo 2 Pitágoras func. trig. inv. Triángulo 3 Teorema del coseno func. trig. inv.
  18. 18. La caminata <ul><li>Estilo (1 pata, 2 patas, 3 patas simultáneas) </li></ul><ul><li>Superposición parcial de pasos </li></ul><ul><li>Largo de los pasos </li></ul><ul><li>Altura de los pasos </li></ul><ul><li>Angulo de desplazamiento </li></ul><ul><li>Velocidad de desplazamiento (max. 50cm/s) </li></ul><ul><li>Trayectoria curva con centro arbitrario </li></ul><ul><li>Cambio de parámetros “al vuelo” </li></ul>
  19. 19. Movimiento del tronco <ul><li>Las puntas de las patas son 6 puntos en el espacio </li></ul><ul><li>Aplicamos transformaciones 3D (vectores, matrices, etc.) </li></ul><ul><li>Traslación 3 ejes </li></ul><ul><li>Rotación 3 ejes, con centro arbitrario </li></ul><ul><li>“ Oscilaciones” </li></ul>
  20. 20. Los motores como sensores de fuerza Red neuronal de 1 capa Carga de los 18 motores componente x componente z coeficientes (pesos)
  21. 21. Comunicación Bluetooth Administra la conexión con el módulo remoto, a 115Kb/s
  22. 22. Conductas Clase Conducta (abstracta) Función virtual pura: evaluar () <ul><li>Clases derivadas : </li></ul><ul><li>ReactLoad </li></ul><ul><li>ReactDistance </li></ul><ul><li>Empujones </li></ul><ul><li>Cuerdita </li></ul><ul><li>prioridad </li></ul><ul><li>enabled </li></ul><ul><li>action </li></ul><ul><li>enable () </li></ul><ul><li>disable () </li></ul><ul><li>evaluar () </li></ul><ul><li>Conducta_Main </li></ul><ul><li>evalua cada conducta </li></ul><ul><li>decide qué acción tomar </li></ul><ul><li>llama al módulo ejecutor </li></ul><ul><li>Conducta_Execute </li></ul><ul><li>acciones </li></ul><ul><li>Multitasking cooperativo </li></ul>LOOP
  23. 23. www.pablogindel.com FIN

×