SlideShare una empresa de Scribd logo
1 de 24
SAMSA Documentación
1) HARDWARE
ESTRUCTURA MECANICA ,[object Object],[object Object],[object Object],[object Object],peso:  9,0 g velocidad:  60º / 0,14s  torque:  1,3 Kg/cm trabajando a 6V
Detalle del ensamblaje, conexionado y cableado.
TARJETA WIRING Microcontrolador Atmel AVR / ATmega128 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
DISPLAY ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
ANTENAS + ENCODER ,[object Object],[object Object],[object Object],[object Object],[object Object]
Micrófono, IR ranger, Acelerómetro ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],El mini-circuito también contiene:
ALIMENTACION ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
2) SOFTWARE
Diagrama en bloques del software (rutinas principales - bajo nivel)
ISR (TIMER2_OVF_vect) servo2 act_display perifer angulo_des [6][3] incremento [6][3] display[8] accel [3] encoder ranger[20]  rngr_ps sound servo (1 servo) osc_ant antenas posicion (1 pata) global (6 patas) parcial (3 patas) acostado parado caminata1 alfabetagama (cinemática inversa) posicion2 (n patas) postura (6 patas) caminata3 active_delay mov_tronco paseo cls writePixel readPixel togglePixel readScreen writeScreen merge linea_v linea_h cuadrado borraZona borraCuadrante loadChr scroll lsm rotaciones conway scroll_text medidor umbral_rngr umbral_snd shape source espejaime[3] audio
CONTROL DE SERVOS FUNCIONAMIENTO DE UN SERVOMOTOR El espaciado de los pulsos no debe exceder los 20ms, de lo contrario el servo pierde fuerza y velocidad El servo tiene un rango de acción de 180º
¿Cómo controlar 18 servos independientes simultáneamente? 1) Cantidad de I/O en el microcontrolador ATmega128: 53 I/O 2) Función PWM del microcontrolador Permite gestionar el control “por hardware” sin consumir tiempo del programa… Pero, sólo está disponible en 6 salidas. 3) PWM “simulado” por software 4) un “timer” que genera interrupciones periódicamente, por ejemplo cada 20ms. Complica enormemente la programación, si pretendemos usar el mismo procesador para cumplir simultáneamente otras tareas… A menos que implementemos: Pero… si cada servo necesita un pulso de hasta 2,5 ms, en un período de 20ms apenas podríamos controlar 8 de ellos, y no nos quedaría tiempo para el resto de las tareas!!! ¿SOLUCIÓN?
5) Tenemos que generar varias señales al mismo tiempo. ¿Cómo? 6)  La clave es no usar “delays” sino generar las señales con los propios tiempos de procesamiento del programa. Ejemplo: ponemos varios  pines a “1” y en un “loop” los vamos apagando según el ángulo de cada servo.  7) Limitación: mayor cantidad de servos simultáneos mayor tiempo total del “loop” menor resolución de cada servo todos los pines a “1” x > ang1    servo1 “0” x > ang2    servo2 “0” x > angN    servoN “0” x ++ LOOP tiempo total del loop, TL(ms) = resolución de los servos
Solución práctica adoptada ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],encoder encoder encoder encoder encoder encoder encoder encoder 28 – 32ms 24 - 28ms 20 - 24ms 16 - 20ms 12 - 16ms 8 - 12ms 4 - 8ms 0 - 4ms tiempo periféricos display servos interrupción accel Z columna 7 Act. variables 7 accel Y columna 5 anillo3 (6 servos) 6 accel X columna 3 anillo2 (6 servos) 5 - columna 1 anillo1 (6 servos) 4 audio columna 6 Act. variables  3 det. “stop” P2 columna 4 anillo3 (6 servos) 2 det. “stop” P1 columna 2 anillo2 (6 servos) 1 IR ranger columna 0 anillo1 (6 servos) 0
LA “CAMINATA” grupo 1 grupo 2
CINEMATICA INVERSA (introducción) Hasta ahora hemos manejado los servos en forma directa, indicándoles el ángulo en que deben posicionarse. Agrupando los servos en “patas”, controlando simultáneamente subgrupos de estas patas y usando simetrías simples, pudimos realizar movimientos relativamente complejos, como la caminata.. Sin embargo, este sistema se muestra limitado para implementar otro tipo de movimientos, en los que precisamos controlar la posición de cada pata en coordenadas cartesianas (en cm) y no “a ciegas”, basados en los ángulos. Esto nos permitirá, por ejemplo, realizar movimientos “con el tronco”, cambios de “postura”, y cualquier tipo de movimientos en los que haya que variar controladamente una coordenada sin afectar a las otras.
CINEMATICA INVERSA (problema) El problema consiste en hallar los 3 ángulos de los servos de una pata, en función de las coordenadas x, y, z (en cm) de la punta de la misma. 2 de los servos actúan en un plano “vertical” y el otro en un plano “horizontal” a b x’ z c a =  “muslo”  = 4,63 cm b =  “pierna”  = 7,35 cm    y  son los ángulos buscados servo 3 servo 2 servo 1 y  x’ 4 cm 4 cm x 4 cm =  distancia entre el servo 1 y el eje del servo 2 eje del servo 2 x’  es la proyección del dibujo de la izquierda en el plano horizontal  es el ángulo buscado
CINEMATICA INVERSA (solución) ,[object Object],[object Object],[object Object],Nota: en el programa, los ángulos son calculados en rad. y convertidos a grados (*180/PI) y las funciones trigonométricas inversas son calculadas utilizando únicamente atan(). También puede haber un cambio de signo o la suma de un “desfasaje” para que los resultados queden en el cuadrante adecuado.
DISPLAY directo a un puerto paralelo de la Wiring 3 bits de control para seleccionar la columna funciones básicas del display 7445 Lee un carácter de la EEPROM y lo carga en el buffer loadChr Apaga todos los pixels de uno de los 4 cuadrantes en que se divide la pantalla borraCuadrante Apaga todos los pixels de una zona rectangular de la pantalla borraZona Dibuja un cuadrado cuadrado Dibuja una línea horizontal linea_h Dibuja una línea vertical linea_v Superpone el contenido del buffer en la pantalla, usando la funcion booleana “OR” merge Sustituye el contenido actual de la pantalla por el del buffer writeScreen Copia todo el contenido de la pantalla a un “buffer” readScreen Invierte el estado de un pixel togglePixel Lee el estado de un pixel readPixel Enciende un pixel writePixel Apaga todos los pixels de la pantalla cls comentario función
Encoder óptico El encoder óptico consiste en un emisor IR, una rueda perforada y dos fototransistores colocados de tal manera que generen sendas ondas cuadradas, desfasadas 90º (en “cuadratura”). en un sentido… en el otro sentido… señales generadas por el encoder siendo [n-1] y [n] dos lecturas consecutivas del encoder, hacemos un XOR “cruzado” de la siguiente manera: (FT1[n-1] xor FT2[n]) + 2*(FT2[n-1] xor FT1[n]) DECODIFICACION 1 – movimiento en un sentido 2 – movimiento en el otro sentido 3, 0 – no hay movimiento el resultado que obtenemos es siempre 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 FT2 FT1
AUDIO Es posible que en el futuro implementemos un segundo procesador hardware, completamente dedicado a procesar la señal proveniente del micrófono. Por el momento estamos utilizando un único microcontrolador para todas las tareas, lo cual, en el caso del audio, limita las posibilidades prácticamente a tener una medida aproximada de la intensidad del sonido, cada cierto lapso. Expresado en bloques, el procesamiento actual del audio sería el siguiente: HARDWARE SOFTWARE audio () interrupción rutinas de “alto nivel” ,[object Object],[object Object],[object Object],[object Object],ADC ATmega MIC AMP DC blocking rectificación noise gate logaritmo pasa-bajos
“ Multitasking” Una de las preocupaciones fundamentales en todos mis proyectos, es el aprovechamiento al máximo de los tiempos del procesador, y la posibilidad de controlar el mayor número posible de dispositivos simultáneamente, usando un solo microcontrolador. De esta manera, vemos como el robot puede efectuar movimientos complejos al mismo tiempo que despliega información en el display y monitorea todos los sensores. Esto se consigue, en SAMSA, usando varias estrategias: 1) Interrupciones periódicas para atender al hardware. 2) Sustituyendo todos los tiempos de espera (delay) por “active_delay”. 3) Implementando variables locales estáticas en las funciones y procedimientos y haciendo que su ejecución sea “segmentada”. Por ejemplo, cada vez que llamamos a la rutina que dibuja círculos, esta dibuja sólo un punto del círculo. active_delay ,[object Object],[object Object],[object Object],[object Object]

Más contenido relacionado

Más de Pablo Gindel

Microcontroladores 5 – comunicación (SPI & I2C)
Microcontroladores 5 – comunicación (SPI & I2C)Microcontroladores 5 – comunicación (SPI & I2C)
Microcontroladores 5 – comunicación (SPI & I2C)Pablo Gindel
 
Microcontroladores 4 – comunicación (uart)
Microcontroladores 4 – comunicación (uart)Microcontroladores 4 – comunicación (uart)
Microcontroladores 4 – comunicación (uart)Pablo Gindel
 
Microcontroladores 3 – conversor A/D; DSP
Microcontroladores 3 – conversor A/D; DSPMicrocontroladores 3 – conversor A/D; DSP
Microcontroladores 3 – conversor A/D; DSPPablo Gindel
 
Microcontroladores 2 – GPIO y PWM
Microcontroladores 2 – GPIO y PWMMicrocontroladores 2 – GPIO y PWM
Microcontroladores 2 – GPIO y PWMPablo Gindel
 
Microcontroladores 1 – arquitectura
Microcontroladores 1 – arquitecturaMicrocontroladores 1 – arquitectura
Microcontroladores 1 – arquitecturaPablo Gindel
 
Electrónica 5 – electrónica digital
Electrónica 5 – electrónica digitalElectrónica 5 – electrónica digital
Electrónica 5 – electrónica digitalPablo Gindel
 
Electrónica 4 – fuentes y baterías
Electrónica 4 – fuentes y bateríasElectrónica 4 – fuentes y baterías
Electrónica 4 – fuentes y bateríasPablo Gindel
 
Electrónica 3 – componentes activos y semiconductores
Electrónica 3 – componentes activos y semiconductoresElectrónica 3 – componentes activos y semiconductores
Electrónica 3 – componentes activos y semiconductoresPablo Gindel
 
Electrónica 2 – fundamentos 2; componentes pasivos
Electrónica 2 – fundamentos 2; componentes pasivosElectrónica 2 – fundamentos 2; componentes pasivos
Electrónica 2 – fundamentos 2; componentes pasivosPablo Gindel
 
Electrónica 1 – fundamentos 1
Electrónica 1 – fundamentos 1Electrónica 1 – fundamentos 1
Electrónica 1 – fundamentos 1Pablo Gindel
 
Microcontroladores 6 – interrupciones
Microcontroladores 6 – interrupcionesMicrocontroladores 6 – interrupciones
Microcontroladores 6 – interrupcionesPablo Gindel
 
Introducción a la robótica con arduino
Introducción a la robótica con arduinoIntroducción a la robótica con arduino
Introducción a la robótica con arduinoPablo Gindel
 

Más de Pablo Gindel (14)

Control remoto IR
Control remoto IRControl remoto IR
Control remoto IR
 
Audio con Arduino
Audio con ArduinoAudio con Arduino
Audio con Arduino
 
Microcontroladores 5 – comunicación (SPI & I2C)
Microcontroladores 5 – comunicación (SPI & I2C)Microcontroladores 5 – comunicación (SPI & I2C)
Microcontroladores 5 – comunicación (SPI & I2C)
 
Microcontroladores 4 – comunicación (uart)
Microcontroladores 4 – comunicación (uart)Microcontroladores 4 – comunicación (uart)
Microcontroladores 4 – comunicación (uart)
 
Microcontroladores 3 – conversor A/D; DSP
Microcontroladores 3 – conversor A/D; DSPMicrocontroladores 3 – conversor A/D; DSP
Microcontroladores 3 – conversor A/D; DSP
 
Microcontroladores 2 – GPIO y PWM
Microcontroladores 2 – GPIO y PWMMicrocontroladores 2 – GPIO y PWM
Microcontroladores 2 – GPIO y PWM
 
Microcontroladores 1 – arquitectura
Microcontroladores 1 – arquitecturaMicrocontroladores 1 – arquitectura
Microcontroladores 1 – arquitectura
 
Electrónica 5 – electrónica digital
Electrónica 5 – electrónica digitalElectrónica 5 – electrónica digital
Electrónica 5 – electrónica digital
 
Electrónica 4 – fuentes y baterías
Electrónica 4 – fuentes y bateríasElectrónica 4 – fuentes y baterías
Electrónica 4 – fuentes y baterías
 
Electrónica 3 – componentes activos y semiconductores
Electrónica 3 – componentes activos y semiconductoresElectrónica 3 – componentes activos y semiconductores
Electrónica 3 – componentes activos y semiconductores
 
Electrónica 2 – fundamentos 2; componentes pasivos
Electrónica 2 – fundamentos 2; componentes pasivosElectrónica 2 – fundamentos 2; componentes pasivos
Electrónica 2 – fundamentos 2; componentes pasivos
 
Electrónica 1 – fundamentos 1
Electrónica 1 – fundamentos 1Electrónica 1 – fundamentos 1
Electrónica 1 – fundamentos 1
 
Microcontroladores 6 – interrupciones
Microcontroladores 6 – interrupcionesMicrocontroladores 6 – interrupciones
Microcontroladores 6 – interrupciones
 
Introducción a la robótica con arduino
Introducción a la robótica con arduinoIntroducción a la robótica con arduino
Introducción a la robótica con arduino
 

Último

EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfJulian Lamprea
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 

Último (10)

EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 

Samsa - Documentación

  • 3.
  • 4. Detalle del ensamblaje, conexionado y cableado.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 11. Diagrama en bloques del software (rutinas principales - bajo nivel)
  • 12. ISR (TIMER2_OVF_vect) servo2 act_display perifer angulo_des [6][3] incremento [6][3] display[8] accel [3] encoder ranger[20] rngr_ps sound servo (1 servo) osc_ant antenas posicion (1 pata) global (6 patas) parcial (3 patas) acostado parado caminata1 alfabetagama (cinemática inversa) posicion2 (n patas) postura (6 patas) caminata3 active_delay mov_tronco paseo cls writePixel readPixel togglePixel readScreen writeScreen merge linea_v linea_h cuadrado borraZona borraCuadrante loadChr scroll lsm rotaciones conway scroll_text medidor umbral_rngr umbral_snd shape source espejaime[3] audio
  • 13. CONTROL DE SERVOS FUNCIONAMIENTO DE UN SERVOMOTOR El espaciado de los pulsos no debe exceder los 20ms, de lo contrario el servo pierde fuerza y velocidad El servo tiene un rango de acción de 180º
  • 14. ¿Cómo controlar 18 servos independientes simultáneamente? 1) Cantidad de I/O en el microcontrolador ATmega128: 53 I/O 2) Función PWM del microcontrolador Permite gestionar el control “por hardware” sin consumir tiempo del programa… Pero, sólo está disponible en 6 salidas. 3) PWM “simulado” por software 4) un “timer” que genera interrupciones periódicamente, por ejemplo cada 20ms. Complica enormemente la programación, si pretendemos usar el mismo procesador para cumplir simultáneamente otras tareas… A menos que implementemos: Pero… si cada servo necesita un pulso de hasta 2,5 ms, en un período de 20ms apenas podríamos controlar 8 de ellos, y no nos quedaría tiempo para el resto de las tareas!!! ¿SOLUCIÓN?
  • 15. 5) Tenemos que generar varias señales al mismo tiempo. ¿Cómo? 6) La clave es no usar “delays” sino generar las señales con los propios tiempos de procesamiento del programa. Ejemplo: ponemos varios pines a “1” y en un “loop” los vamos apagando según el ángulo de cada servo. 7) Limitación: mayor cantidad de servos simultáneos mayor tiempo total del “loop” menor resolución de cada servo todos los pines a “1” x > ang1  servo1 “0” x > ang2  servo2 “0” x > angN  servoN “0” x ++ LOOP tiempo total del loop, TL(ms) = resolución de los servos
  • 16.
  • 18. CINEMATICA INVERSA (introducción) Hasta ahora hemos manejado los servos en forma directa, indicándoles el ángulo en que deben posicionarse. Agrupando los servos en “patas”, controlando simultáneamente subgrupos de estas patas y usando simetrías simples, pudimos realizar movimientos relativamente complejos, como la caminata.. Sin embargo, este sistema se muestra limitado para implementar otro tipo de movimientos, en los que precisamos controlar la posición de cada pata en coordenadas cartesianas (en cm) y no “a ciegas”, basados en los ángulos. Esto nos permitirá, por ejemplo, realizar movimientos “con el tronco”, cambios de “postura”, y cualquier tipo de movimientos en los que haya que variar controladamente una coordenada sin afectar a las otras.
  • 19. CINEMATICA INVERSA (problema) El problema consiste en hallar los 3 ángulos de los servos de una pata, en función de las coordenadas x, y, z (en cm) de la punta de la misma. 2 de los servos actúan en un plano “vertical” y el otro en un plano “horizontal” a b x’ z c a = “muslo” = 4,63 cm b = “pierna” = 7,35 cm    y  son los ángulos buscados servo 3 servo 2 servo 1 y  x’ 4 cm 4 cm x 4 cm = distancia entre el servo 1 y el eje del servo 2 eje del servo 2 x’ es la proyección del dibujo de la izquierda en el plano horizontal  es el ángulo buscado
  • 20.
  • 21. DISPLAY directo a un puerto paralelo de la Wiring 3 bits de control para seleccionar la columna funciones básicas del display 7445 Lee un carácter de la EEPROM y lo carga en el buffer loadChr Apaga todos los pixels de uno de los 4 cuadrantes en que se divide la pantalla borraCuadrante Apaga todos los pixels de una zona rectangular de la pantalla borraZona Dibuja un cuadrado cuadrado Dibuja una línea horizontal linea_h Dibuja una línea vertical linea_v Superpone el contenido del buffer en la pantalla, usando la funcion booleana “OR” merge Sustituye el contenido actual de la pantalla por el del buffer writeScreen Copia todo el contenido de la pantalla a un “buffer” readScreen Invierte el estado de un pixel togglePixel Lee el estado de un pixel readPixel Enciende un pixel writePixel Apaga todos los pixels de la pantalla cls comentario función
  • 22. Encoder óptico El encoder óptico consiste en un emisor IR, una rueda perforada y dos fototransistores colocados de tal manera que generen sendas ondas cuadradas, desfasadas 90º (en “cuadratura”). en un sentido… en el otro sentido… señales generadas por el encoder siendo [n-1] y [n] dos lecturas consecutivas del encoder, hacemos un XOR “cruzado” de la siguiente manera: (FT1[n-1] xor FT2[n]) + 2*(FT2[n-1] xor FT1[n]) DECODIFICACION 1 – movimiento en un sentido 2 – movimiento en el otro sentido 3, 0 – no hay movimiento el resultado que obtenemos es siempre 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 FT2 FT1
  • 23.
  • 24.