Tabla de contenido:

Estabilizador de cámara de mano: 13 pasos (con imágenes)
Estabilizador de cámara de mano: 13 pasos (con imágenes)

Video: Estabilizador de cámara de mano: 13 pasos (con imágenes)

Video: Estabilizador de cámara de mano: 13 pasos (con imágenes)
Video: FeiyuTech SCORP-C Estabilizador gimbal de cámara de 3 ejes para cámara DSLR reflex mirrorless 2024, Mes de julio
Anonim
Estabilizador de cámara de mano
Estabilizador de cámara de mano

Introducción

Esta es una guía para crear una plataforma de estabilización de cámara portátil de 3 ejes para una GoPro utilizando una placa de desarrollo Digilent Zybo Zynq-7000. Este proyecto fue desarrollado para la clase CPE Real-Time Operating Systems (CPE 439). El estabilizador usa tres servos y una IMU para corregir el movimiento del usuario para mantener la cámara nivelada.

Piezas necesarias para el proyecto

  • Placa de desarrollo Digilent Zybo Zynq-7000
  • Escape de Sparkfun IMU - MPU 9250
  • 2 Servos HiTec HS-5485HB (compre movimiento de 180 grados o programe de 90 a 180 grados)
  • 1 Servo HiTec HS-5685MH (compre movimiento de 180 grados o programe de 90 a 180 grados)
  • 2 soportes de servo estándar
  • 1 tablero
  • 15 cables de puente macho a macho
  • 4 cables de puente macho a hembra
  • Pegamento caliente
  • Agarre o manija
  • Taco de madera de 5 mm de diámetro
  • GoPro u otra cámara y hardware de montaje
  • Fuente de alimentación capaz de generar 5V.
  • Acceso a impresora 3D

Paso 1: Configuración del hardware de Vivado

Configuración del hardware de Vivado
Configuración del hardware de Vivado

Comencemos con la creación del diseño de bloque subyacente para el proyecto.

  1. Abra Vivado 2016.2, haga clic en el icono "Crear nuevo proyecto" y haga clic en "Siguiente>".
  2. Ponle un nombre a tu proyecto y haz clic en "Siguiente>".
  3. Elija el proyecto RTL y presione "Siguiente>".
  4. Escriba en la barra de búsqueda xc7z010clg400-1 y luego seleccione la parte y presione "Siguiente>" y "Finalizar".

Paso 2: Configurar el diseño de bloques

Ahora comenzaremos a generar el diseño del bloque agregando y configurando el bloque IP de Zynq.

  1. En el panel de la izquierda, en IP Integrator, haga clic en "Crear diseño de bloque" y luego haga clic en "Aceptar".
  2. Haga clic derecho en la pestaña "Diagrama" y elija "Agregar IP …".
  3. Escriba "Sistema de procesamiento ZYNQ7" y haga clic en la selección.
  4. Haga doble clic en el bloque Zynq que aparece.
  5. Haga clic en "Importar configuración de XPS" e importe el archivo "ZYBO_zynq_def.xml" proporcionado.
  6. Vaya a "Configuración MIO" y seleccione "Unidad de procesador de aplicaciones" y habilite los temporizadores Timer 0 y Watchdog.
  7. En la misma pestaña, en "Periféricos de E / S", seleccione ENET 0 (y cambie el menú desplegable a "MIO 16.. 27", USB 0, SD 0, UART 1, I2C 0.
  8. En "GPIO", marque GPIO MIO, ENET Reset, USB Reset y I2C Reset.
  9. Ahora navegue hasta "Configuración del reloj". Seleccione FCLK_CLK0 en PL Fabric Clocks. Luego, haga clic en "Aceptar".

Paso 3: Cree un bloque de IP PWM personalizado

Este bloque de IP permite que la placa envíe una señal PWM para controlar el movimiento de los servos. El trabajo se basó en gran medida en el tutorial de Digitronix Nepal, que se encuentra aquí. Se agregó lógica para ralentizar el reloj de modo que el pulso saliera a la frecuencia correcta. El bloque toma un número de 0 a 180 y lo convierte en un pulso de 750-2150 usec.

  1. Ahora, en la pestaña Herramientas cerca de la esquina superior izquierda, haga clic en "Crear y empaquetar IP …" y presione Siguiente.
  2. Luego seleccione "Crear un nuevo periférico AXI4" y presione Siguiente.
  3. Nombre su bloque de IP PWM (lo llamamos pwm_core) y haga clic en Siguiente y luego haga clic en Siguiente en la página siguiente también.
  4. Ahora haga clic en "Editar IP" y presione Finalizar. Esto abrirá una nueva ventana para editar el bloque pwm.
  5. En la pestaña "Fuentes" y en "Fuentes de diseño", expanda 'pwm_core_v1_0' (reemplace pwm_core con su nombre) y abra el archivo que se vuelve visible.
  6. Copie y pegue el código proporcionado en 'pwm_core_v1_0_S00_AXI.v' en el archivo zip en la parte inferior del proyecto. Ctrl + Shift + R y reemplace 'pwm_core' con su nombre para el bloque de ip.
  7. A continuación, abra 'nombre _v1_0' y copie el código proporcionado en el archivo 'pwm_core_v1_0.v'. Ctrl + Shift + R y reemplace 'pwm_core' con el nombre.
  8. Ahora navegue a la pestaña 'IP del paquete - nombre' y seleccione "Parámetros de personalización".
  9. En esta pestaña habrá una barra amarilla en la parte superior que tiene texto vinculado. Seleccione esto y "Parámetros ocultos" se mostrarán en el cuadro.
  10. Ahora vaya a "Personalización GUI" y haga clic con el botón derecho en Pwm Counter Max y seleccione "Editar parámetro …".
  11. Marque las casillas "Visible en la GUI de personalización" y "Especificar rango".
  12. Cambie el menú desplegable "Tipo:" a Rango de enteros y establezca el mínimo en 0 y el máximo en 65535 y marque la casilla "Mostrar rango". Ahora haga clic en Aceptar.
  13. Arrastre Pwm Counter Max debajo del árbol 'Página 0'. Ahora vaya a "Revisar y empaquetar" y haga clic en el botón "Volver a empaquetar IP".

Paso 4: agregue el bloque de IP PWM al diseño

Agregar bloque de IP PWM al diseño
Agregar bloque de IP PWM al diseño

Agregaremos el bloque de IP en el diseño del bloque para permitir que el usuario acceda al bloque de IP de PWM a través del procesador.

  1. Haga clic derecho en la pestaña del diagrama y haga clic en "Configuración de IP …". Vaya a la pestaña "Administrador de repositorios".
  2. Haga clic en el botón verde con el signo más y selecciónelo. Ahora busque ip_repo en el Administrador de archivos y agréguelo al proyecto. Luego presione Aplicar y luego Aceptar.
  3. Haga clic derecho en la pestaña del diagrama y haga clic en "Agregar IP …". Escriba el nombre de su bloque de IP de PWM y selecciónelo.
  4. Debería haber una barra verde en la parte superior de la pantalla, primero seleccione "Ejecutar automatización de conexión" y haga clic en Aceptar. Luego haga clic en "Ejecutar automatización de bloques" y haga clic en Aceptar.
  5. Haga doble clic en el bloque PWM y cambie Pwm Counter Max a 1024 de 128.
  6. Pase el puntero del mouse sobre PWM0 en el bloque PWM. Debe haber un lápiz pequeño que aparezca cuando lo haga. Haga clic derecho y seleccione "Crear puerto …" y haga clic en Aceptar cuando se abra una ventana. Esto crea un puerto externo al que se pasará la señal.
  7. Repita el paso 6 para PWM1 y PWM2 también.
  8. Busque el pequeño icono circular de doble flecha en la barra lateral y haga clic en él. Regenerará el diseño y el diseño de su bloque debería verse como la imagen de arriba.

Paso 5: configurar el contenedor HDL y configurar el archivo de restricciones

Configurar el contenedor HDL y configurar el archivo de restricciones
Configurar el contenedor HDL y configurar el archivo de restricciones

Ahora vamos a generar el diseño de alto nivel para nuestro diseño de bloque y luego mapear PWM0, PWM1 y PWM2 a los pines Pmod en la placa Zybo.

  1. Vaya a la pestaña "Fuentes". Haga clic con el botón derecho en el archivo de diseño de bloque en "Fuentes de diseño" y haga clic en "Crear envoltorio HDL …". Seleccione "Copiar contenedor generado para permitir las ediciones del usuario" y haga clic en Aceptar. Esto genera el Diseño de Alto Nivel para el Diseño de Bloque que creamos.
  2. El Pmod al que saldremos es JE.
  3. En Archivo, seleccione "Agregar fuentes …" y seleccione "Agregar o crear restricciones" y haga clic en Siguiente.
  4. Haga clic en agregar archivos y seleccione el archivo "ZYBO_Master.xdc" incluido. Si miras en este archivo, notarás que todo está descomentado excepto por seis líneas "set_property" debajo de "## Pmod Header JE". Notará que PWM0, PWM1 y PWM2 son los argumentos de estas líneas. Se asignan al Pin 1, Pin 2 y Pin 3 del JE Pmod.

Paso 6: Generación de Bitstream

Necesitamos generar el flujo de bits para que el diseño de hardware se exporte al SDK antes de continuar.

  1. En "Programar y depurar" en la barra lateral, seleccione "Generar flujo de bits". Esto ejecutará la síntesis, luego la implementación y luego generará el flujo de bits para el diseño.
  2. Corrija los errores que aparezcan, pero las advertencias generalmente se pueden ignorar.
  3. Vaya a Archivo-> Iniciar SDK y haga clic en Aceptar. Esto abrirá el SDK de Xilinx.

Paso 7: Configuración del proyecto en SDK

Esta parte puede resultar un poco frustrante. En caso de duda, cree un nuevo BSP y reemplace el anterior. Esto nos ahorró un montón de tiempo de depuración.

  1. Comience descargando la última versión de FreeRTOS aquí.
  2. Extraiga todo de la descarga e importe FreeRTOS al SDK haciendo clic en Archivo-> Importar y, en "General", haga clic en "Proyectos existentes en el espacio de trabajo" y luego haga clic en Siguiente.
  3. Vaya a "FreeRTOS / Demo / CORTEX_A9_Zynq_ZC702" dentro de la carpeta FreeRTOS. Solo importe "RTOSDemo" desde esta ubicación.
  4. Ahora genere un paquete de soporte de placa (BSP) haciendo clic en Archivo-> Nuevo paquete de soporte de placa.
  5. Seleccione "ps7_cortexa9_0", marque "lwip141" y haga clic en Aceptar.
  6. Haga clic derecho en la carpeta azul RTOSDemo y seleccione "Referencias del proyecto".
  7. Desmarque "RTOSDemo_bsp" y marque el nuevo BSP que acabamos de crear.

Paso 8: Modificaciones del código FreeRTOS

El código que proporcionamos se puede dividir en 7 archivos diferentes. main.c, iic_main_thread.c, xil_printfloat.c, xil_printfloat.h, IIC_funcs.c, IIC_funcs.hy iic_imu.h. El código de iic_main_thread.c se ha adaptado de la biblioteca de Kris Winer, que se puede encontrar aquí. Principalmente transformamos su código para incorporar tareas y hacerlo funcionar con la placa Zybo. También agregamos funciones para calcular la corrección de orientación de la cámara. Hemos dejado en varias declaraciones de impresión que son útiles para depurar. La mayoría de ellos están comentados, pero si sientes la necesidad de hacerlo, puedes descomentarlos.

  1. La forma más fácil de modificar el archivo main.c es reemplazar el código con el código copiado de nuestro archivo main.c incluido.
  2. Para crear un nuevo archivo, haga clic con el botón derecho en la carpeta src en RTOSDemo y seleccione C Source File. Nombra este archivo "iic_main_thread.c".
  3. Copie el código del "iic_main_thread.c" incluido y péguelo en su archivo recién creado.
  4. Repita los pasos 2 y 3 con los archivos restantes.
  5. requiere una instrucción de enlace en gcc. Para agregar esto a la ruta de compilación, haga clic derecho en RTOSDemo y seleccione "Configuración de compilación C / C ++".
  6. Una nueva ventana se abrirá. Vaya al vinculador ARM v7 gcc-> Bibliotecas. Seleccione el archivo de adición pequeño en la esquina superior derecha y escriba "m". Esto incluirá la biblioteca de matemáticas en el proyecto.
  7. Cree el proyecto con Ctrl + B para confirmar que todo funciona. Compruebe las advertencias que se generan, pero es posible que pueda ignorarlas.
  8. Hay un par de lugares que necesitarán modificaciones, principalmente la declinación magnética de su ubicación actual. Explicaremos cómo cambiar esto en la parte de calibración del tutorial.

Paso 9: Impresión 3D para estabilizador

Impresión 3D para estabilizador
Impresión 3D para estabilizador

Necesita imprimir en 3D un par de partes para este proyecto. Probablemente uno pueda comprar piezas que sean de dimensiones / tamaños similares a nuestras piezas impresas.

  1. Utilice los archivos proporcionados para imprimir el brazo y el soporte de sujeción de la GoPro.
  2. Necesita agregar andamios al archivo.stl.
  3. Recorte / limpie las partes del andamio sobrante una vez impresas.
  4. Puede reemplazar la clavija de madera con una pieza impresa en 3D si lo desea.

Paso 10: Montaje de las piezas

Ensamblaje de las piezas
Ensamblaje de las piezas

Hay varias partes para ensamblar el estabilizador. Los soportes comprados vienen con 4 tornillos autorroscantes y 4 pernos con tuercas. Dado que hay 3 servos, uno de los cuernos del servo debe estar previamente roscado para permitir que pasen 2 de los pernos.

  1. Suelde 8 pines en la ruptura de la IMU, 4 en cada lado.
  2. La IMU está unida al soporte de sujeción impreso en 3D para la GoPro en el centro del soporte.
  3. Oriente el soporte de modo que los orificios de montaje del servo estén en su lado izquierdo. Coloque la IMU en el borde más cercano a usted, con las clavijas colgando del borde. Luego, coloque la montura GoPro en la parte superior de la IMU, pegando la IMU y la montura en su lugar en el soporte.
  4. Conecte un HS-5485HB al soporte del servo que está integrado en el brazo impreso en 3D.
  5. Atornille el soporte de GoPro en el servo adjunto al brazo, asegurándose de que el servo esté configurado de modo que esté en el medio de su rango de movimiento.
  6. A continuación, conecte el servo HS-5685MH a un soporte de servo. Luego toque la bocina del servo con uno de los tornillos. Ahora conecte el servo a la parte inferior del último soporte del servo.
  7. Ahora conecte el último servo al soporte en el que está atornillado el servo HS-5685MH. Luego, atornille el brazo en este servo, asegurándose de que el brazo esté atornillado para que pueda moverse 90 grados en cada sentido.
  8. Para terminar la construcción del cardán, agregue una pequeña pieza de la clavija de madera para conectar entre el soporte GoPro y el brazo impreso en 3D. Ahora ha montado el estabilizador.
  9. Por último, puede agregar un mango conectado al soporte del servo inferior.

Paso 11: Conexión de Zybo al estabilizador

Conexión de Zybo al estabilizador
Conexión de Zybo al estabilizador

Hay un par de cosas con las que debe tener cuidado al hacer esto. Desea asegurarse de que los 5 V de la fuente de alimentación nunca entren en la placa Zybo, ya que esto provocaría problemas con la placa. Asegúrese de verificar sus puentes para confirmar que no se están intercambiando cables.

  1. Para sujetar el Zybo al estabilizador, necesitará 15 saltadores macho a macho y 4 saltadores macho a hembra.
  2. Primero, conecte dos puentes a su fuente de alimentación de 5V a lo largo de los rieles + y - de la placa de pruebas. Estos suministrarán energía a los servos.
  3. Luego, conecte 3 pares de puentes a los rieles + y - de la placa de pruebas. Éstos serán la potencia de cada uno de los servos.
  4. Conecte el otro extremo de los puentes + y - en cada uno de los servos.
  5. Conecte un puente entre el riel - de la placa de pruebas y uno de los pines GND del Zybo JE Pmod (consulte la imagen del paso 5). Esto creará un terreno común entre la placa Zybo y la fuente de alimentación.
  6. A continuación, conecte un cable de señal al pin 1, pin 2 y pin 3 del JE Pmod. El pin 1 se asigna al servo inferior, el pin 2 se asigna al servo en el extremo del brazo y el pin 3 se asigna al servo medio.
  7. Enchufe los 4 cables hembra en los pines GND, VDD, SDA y SCL de la ruptura IMU. GND y VDD se conectan a GND y 3V3 en los pines JF. Enchufe el pin SDA en el pin 8 y SCL en el pin 7 del JF (vea la imagen del paso 5).
  8. Por último, conecte la computadora a la placa mediante un cable micro usb. Esto permitirá la comunicación uart y le permitirá programar la placa Zybo.

Paso 12: Corrección del norte verdadero

Corrección del norte verdadero
Corrección del norte verdadero

La calibración del magnetómetro en la IMU es importante para el correcto funcionamiento del dispositivo. La declinación magnética, que corrige el norte magnético al norte verdadero.

  1. Para corregir la diferencia entre el norte magnético y el verdadero, debe utilizar una combinación de dos servicios, Google Maps y la calculadora de campo magnético de la NOAA.
  2. Utilice Google Maps para encontrar su latitud y longitud de su ubicación actual.
  3. Tome su longitud y latitud actuales y conéctelo a la calculadora de campo magnético.
  4. Lo que se devuelve es la declinación magnética. Inserte este cálculo en el código de la línea 378 de "iic_main_thread.c". Si su declinación es este, reste del valor de guiñada, si es oeste, agregue al valor de guiñada.

* La foto fue tomada de la guía de conexión MPU 9250 de Sparkfun, que se encuentra aquí.

Paso 13: Ejecución del programa

Ejecutando el programa
Ejecutando el programa

¡El momento que estabas esperando! La mejor parte del proyecto es verlo funcionando. Un problema que hemos notado es que hay una desviación de los valores informados por la IMU. Un filtro de paso bajo puede ayudar a corregir esta deriva, y jugar con el magnetómetro, la aceleración y las calibraciones del giróscopo también ayudarán a corregir esta deriva.

  1. Primero, compile todo en el SDK, esto se puede hacer presionando Ctrl + B.
  2. Asegúrese de que la fuente de alimentación esté encendida y configurada en 5V. Verifique que todos los cables vayan a sus lugares correctos.
  3. Luego, para ejecutar el programa, presione el triángulo verde en el centro superior de la barra de tareas.
  4. Cuando se ejecute el programa, todos los servos se restablecerán a sus posiciones 0, así que prepárate para que el equipo se mueva. Una vez que el programa se inicializa, los servos volverán a sus posiciones de 90 grados.
  5. Se ejecutará una función de calibración del magnetómetro y se imprimirán las instrucciones en el terminal UART, al que puede conectarse a través de un monitor en serie como 'putty' o el monitor en serie que se proporciona en el SDK.
  6. La calibración hará que mueva el dispositivo en forma de 8 durante unos 10 segundos. Puede eliminar este paso comentando la línea 273 de "iic_main_thread.c". Si lo comenta, debe descomentar las líneas 323 - 325 "iic_main_thread.c". Estos valores se recopilaron inicialmente de la calibración del magnetómetro anterior y luego se conectaron como valores.
  7. Después de la calibración, el código de estabilización se inicializará y el dispositivo mantendrá la cámara estable.

Recomendado: