Índice:

Estabilizador de câmera portátil: 13 etapas (com imagens)
Estabilizador de câmera portátil: 13 etapas (com imagens)

Vídeo: Estabilizador de câmera portátil: 13 etapas (com imagens)

Vídeo: Estabilizador de câmera portátil: 13 etapas (com imagens)
Vídeo: PARECE ATÉ MENTIRA! Olha esse estabilizador BlitzWolf BW-BS14 Pro - Unboxing e Impressões 2024, Novembro
Anonim
Estabilizador de câmera portátil
Estabilizador de câmera portátil

Introdução

Este é um guia para a criação de um equipamento de estabilização de câmera portátil de 3 eixos para uma GoPro usando uma placa de desenvolvimento Digilent Zybo Zynq-7000. Este projeto foi desenvolvido para a classe CPE Real-Time Operating Systems (CPE 439). O estabilizador usa três servos e uma IMU para corrigir o movimento do usuário e manter o nível da câmera.

Peças necessárias para o projeto

  • Digilent Zybo Zynq-7000 Development Board
  • Sparkfun IMU Breakout - MPU 9250
  • 2 Servos HiTec HS-5485HB (compre movimento de 180 graus ou programe de 90 a 180 graus)
  • 1 Servo HiTec HS-5685MH (compre movimento de 180 graus ou programe de 90 a 180 graus)
  • 2 Suportes Servo Padrão
  • 1 breadboard
  • 15 fios de ligação macho-macho
  • 4 fios de ligação macho-fêmea
  • Cola quente
  • Pega ou punho
  • Cavilha de madeira de 5 mm de diâmetro
  • GoPro ou outra câmera e hardware de montagem
  • Fonte de alimentação capaz de produzir 5V.
  • Acesso à impressora 3D

Etapa 1: Configuração do Hardware Vivado

Configuração de Hardware Vivado
Configuração de Hardware Vivado

Vamos começar criando o design de bloco subjacente para o projeto.

  1. Abra o Vivado 2016.2, clique no ícone "Criar Novo Projeto" e clique em "Avançar>".
  2. Nomeie seu projeto e clique em "Avançar>".
  3. Escolha o projeto RTL e clique em "Avançar>".
  4. Digite na barra de pesquisa xc7z010clg400-1 e selecione a peça e clique em "Avançar>" e "Concluir".

Etapa 2: Configurando o Design do Bloco

Agora começaremos a gerar o design de bloco adicionando e configurando o bloco de IP Zynq.

  1. No painel esquerdo, em IP Integrator, clique em "Create Block Design" e em "OK".
  2. Clique com o botão direito na guia "Diagrama" e escolha "Adicionar IP …".
  3. Digite "ZYNQ7 Processing System" e clique na seleção.
  4. Clique duas vezes no bloco Zynq que aparece.
  5. Clique em "Importar configurações XPS" e importe o arquivo "ZYBO_zynq_def.xml" fornecido.
  6. Vá para "MIO Configuration" e selecione "Application Processor Unit" e ative o Timer 0 e os timers Watchdog.
  7. Na mesma guia, em "I / O Peripherals", selecione ENET 0 (e altere o menu suspenso para "MIO 16.. 27", USB 0, SD 0, UART 1, I2C 0.
  8. Em "GPIO", marque GPIO MIO, Reinicialização ENET, Reinicialização USB e Reinicialização I2C.
  9. Agora navegue até "Configuração do relógio". Selecione FCLK_CLK0 em PL Fabric Clocks. Em seguida, clique em "OK".

Etapa 3: Criar Bloco de IP PWM personalizado

Este bloco de IP permite que a placa envie um sinal PWM para controlar o movimento dos servos. O trabalho foi fortemente baseado no tutorial de Digitronix Nepal, encontrado aqui. A lógica foi adicionada para desacelerar o relógio, de forma que o pulso fosse emitido na taxa correta. O bloco recebe um número de 0 a 180 e o converte em um pulso de 750-2150 useg.

  1. Agora, na guia Ferramentas perto do canto superior esquerdo, clique em "Criar e empacotar IP …" e clique em Avançar.
  2. Em seguida, selecione "Criar um novo periférico AXI4" e clique em Avançar.
  3. Nomeie seu bloco de IP PWM (nós o chamamos de pwm_core) e clique em Avançar e, em seguida, clique em Avançar na próxima página também.
  4. Agora clique em "Editar IP" e clique em Concluir. Isso abrirá uma nova janela para editar o bloco pwm.
  5. Na guia "Fontes" e em "Fontes de design", expanda 'pwm_core_v1_0' (substitua pwm_core pelo seu nome) e abra o arquivo que se torna visível.
  6. Copie e cole o código fornecido em 'pwm_core_v1_0_S00_AXI.v' no arquivo zip na parte inferior do projeto. Ctrl + Shift + R e substitua 'pwm_core' pelo seu nome para o bloco de ip.
  7. Em seguida, abra 'name _v1_0' e copie o código fornecido no arquivo 'pwm_core_v1_0.v'. Ctrl + Shift + R e substitua 'pwm_core' pelo nome.
  8. Agora navegue até a guia 'Package IP - name' e selecione "Customization Parameters".
  9. Nesta guia, haverá uma barra amarela na parte superior que contém um texto vinculado. Selecione esta opção e "Parâmetros ocultos" aparecerá na caixa.
  10. Agora vá para "Customization GUI" e clique com o botão direito em Pwm Counter Max e selecione "Edit Parameter…".
  11. Marque as caixas "Visível na GUI de Personalização" e "Especificar Intervalo".
  12. Altere o menu suspenso "Tipo:" para Intervalo de inteiros e defina o mínimo como 0 e o máximo como 65535 e marque a caixa "Mostrar intervalo". Agora clique em OK.
  13. Arraste Pwm Counter Max sob a árvore 'Página 0'. Agora vá para "Review and Package" e clique no botão "Re-Package IP".

Etapa 4: adicionar bloco de IP PWM ao projeto

Adicionar bloco de IP PWM ao projeto
Adicionar bloco de IP PWM ao projeto

Estaremos adicionando o bloco de IP no design do bloco para permitir que o usuário acesse o bloco de IP PWM através do processador.

  1. Clique com o botão direito na guia do diagrama e clique em "Configurações de IP …". Navegue até a guia "Repository Manager".
  2. Clique no botão de adição verde e selecione-o. Agora encontre ip_repo no Gerenciador de Arquivos e adicione-o ao projeto. Em seguida, clique em Aplicar e em OK.
  3. Clique com o botão direito na guia do diagrama e clique em "Adicionar IP…". Digite o nome do seu bloco de IP PWM e selecione-o.
  4. Deve haver uma barra verde na parte superior da tela, primeiro selecione "Executar automação de conexão" e clique em OK. Em seguida, clique em "Executar automação de bloco" e clique em OK.
  5. Clique duas vezes no bloco PWM e altere Pwm Counter Max para 1024 de 128.
  6. Passe o ponteiro do mouse sobre PWM0 no bloco PWM. Deve haver um pequeno lápis que aparece quando você faz. Clique com o botão direito e selecione "Criar porta …" e clique em OK quando uma janela abrir. Isso cria uma porta externa para a qual o sinal deve ser passado.
  7. Repita a etapa 6 para PWM1 e PWM2 também.
  8. Encontre o pequeno ícone de seta dupla circular na barra lateral e clique nele. Ele irá regenerar o layout e o design do bloco deve ser semelhante à imagem acima.

Etapa 5: Configurar o Wrapper HDL e definir o arquivo de restrições

Configurar o Wrapper HDL e definir o arquivo de restrições
Configurar o Wrapper HDL e definir o arquivo de restrições

Agora vamos gerar o projeto de alto nível para nosso projeto de bloco e, em seguida, mapear PWM0, PWM1 e PWM2 para pinos Pmod na placa Zybo.

  1. Vá para a guia "Fontes". Clique com o botão direito do mouse no arquivo de design do bloco em "Fontes de design" e clique em "Criar Wrapper HDL…". Selecione "Copiar wrapper gerado para permitir edições do usuário" e clique em OK. Isso gera o projeto de alto nível para o projeto de bloco que criamos.
  2. O Pmod para o qual enviaremos é JE.
  3. Em Arquivo, selecione "Adicionar fontes…" e selecione "Adicionar ou criar restrições" e clique em Avançar.
  4. Clique em adicionar arquivos e selecione o arquivo "ZYBO_Master.xdc" incluído. Se você olhar neste arquivo, você notará que tudo está sem comentário, exceto por seis linhas "set_property" em "## Pmod Header JE". Você notará que PWM0, PWM1 e PWM2 são os argumentos para essas linhas. Eles mapeiam para o pino 1, pino 2 e pino 3 do JE Pmod.

Etapa 6: Gerando Bitstream

Precisamos gerar o fluxo de bits para o design de hardware para exportar para o SDK antes de prosseguirmos.

  1. Em "Programa e depuração" na barra lateral, selecione "Gerar fluxo de bits". Isso executará a síntese, a implementação e, em seguida, gerará o fluxo de bits para o design.
  2. Corrija todos os erros que aparecerem, mas os avisos geralmente podem ser ignorados.
  3. Vá para Arquivo-> Iniciar SDK e clique em OK. Isso abrirá o SDK Xilinx.

Etapa 7: Configurando o Projeto no SDK

Esta parte pode ser um pouco frustrante. Na dúvida, faça um novo BSP e substitua o antigo. Isso nos economizou muito tempo de depuração.

  1. Comece baixando a última versão do FreeRTOS aqui.
  2. Extraia tudo do download e importe o FreeRTOS para o SDK clicando em Arquivo-> Importar e, em "Geral", clique em "Projetos existentes no espaço de trabalho" e em Avançar.
  3. Vá para "FreeRTOS / Demo / CORTEX_A9_Zynq_ZC702" na pasta FreeRTOS. Importe apenas "RTOSDemo" deste local.
  4. Agora gere um Pacote de Suporte de Placa (BSP) clicando em Arquivo-> Novo Pacote de Suporte de Placa.
  5. Selecione "ps7_cortexa9_0", marque "lwip141" e clique em OK.
  6. Clique com o botão direito na pasta azul RTOSDemo e selecione "Referências do projeto".
  7. Desmarque "RTOSDemo_bsp" e verifique o novo BSP que acabamos de criar.

Etapa 8: Modificações do código FreeRTOS

O código que fornecemos pode ser separado em 7 arquivos diferentes. main.c, iic_main_thread.c, xil_printfloat.c, xil_printfloat.h, IIC_funcs.c, IIC_funcs.he iic_imu.h. O código em iic_main_thread.c foi adaptado da biblioteca de Kris Winer, que pode ser encontrada aqui. Transformamos principalmente seu código para incorporar tarefas e fazê-lo funcionar com a placa Zybo. Também adicionamos funções para calcular a correção da orientação da câmera. Deixamos várias instruções de impressão que são úteis para depuração. A maioria deles está comentada, mas se você sentir necessidade, pode removê-los.

  1. A maneira mais fácil de modificar o arquivo main.c é substituir o código pelo código copiado de nosso arquivo main.c incluído.
  2. Para criar um novo arquivo, clique com o botão direito na pasta src em RTOSDemo e selecione C Source File. Nomeie esse arquivo "iic_main_thread.c".
  3. Copie o código do "iic_main_thread.c" incluído e cole-o no arquivo recém-criado.
  4. Repita as etapas 2 e 3 com os arquivos restantes.
  5. requer uma instrução de ligação no gcc. Para adicionar isso ao caminho de construção, clique com o botão direito do mouse em RTOSDemo e selecione "C / C ++ Build Settings".
  6. Uma nova janela se abrirá. Navegue para ARM v7 gcc linker-> Bibliotecas. Selecione o pequeno arquivo de adição no canto superior direito e digite "m". Isso incluirá a biblioteca matemática no projeto.
  7. Construa o projeto com Ctrl + B para confirmar se tudo funciona. Verifique os avisos gerados, mas você pode ignorá-los.
  8. Existem alguns lugares que precisarão de modificação, principalmente a declinação magnética de sua localização atual. Explicaremos como alterar isso na parte de calibração do tutorial.

Etapa 9: Impressão 3D para estabilizador

Impressão 3D para estabilizador
Impressão 3D para estabilizador

Você precisa imprimir em 3D algumas partes para este projeto. Provavelmente, é possível comprar peças de dimensões / tamanhos semelhantes às nossas peças impressas.

  1. Use os arquivos fornecidos para imprimir o braço e o suporte para a GoPro.
  2. Você precisa adicionar uma estrutura ao arquivo.stl.
  3. Apare / limpe as partes excedentes do andaime depois de impresso.
  4. Você pode substituir o pino de madeira por uma peça impressa em 3D, se desejar.

Etapa 10: Montagem das peças

Montagem das peças
Montagem das peças

Existem várias peças para montar o estabilizador. Os suportes adquiridos vêm com 4 parafusos auto-roscantes e 4 parafusos com porcas. Uma vez que existem 3 servos, um dos chifres do servo precisa ser pré-rosqueado para permitir que 2 dos parafusos passem.

  1. Solde 8 pinos no breakout da IMU, 4 de cada lado.
  2. A IMU é fixada ao suporte impresso em 3D para a GoPro no centro do suporte.
  3. Oriente o suporte de forma que os orifícios de montagem do servo fiquem no seu lado esquerdo. Coloque a IMU na borda mais próxima a você, com os pinos pendurados na borda. Em seguida, coloque o suporte GoPro na parte superior da IMU, fixando a IMU e o suporte no lugar no suporte.
  4. Conecte um HS-5485HB ao suporte do servo que está integrado ao braço impresso em 3D.
  5. Aparafuse o suporte GoPro no servo conectado ao braço, certificando-se de que o servo esteja definido de forma que esteja no meio de sua faixa de movimento.
  6. Em seguida, conecte o servo HS-5685MH a um suporte servo. Em seguida, bata no chifre do servo com um dos parafusos. Agora prenda o servo na parte inferior do último suporte do servo.
  7. Agora prenda o último servo ao suporte no qual o servo HS-5685MH está aparafusado. Em seguida, aparafuse o braço neste servo, certificando-se de que o braço esteja aparafusado de forma que possa se mover 90 graus em cada direção.
  8. Para terminar a construção do cardan, adicione um pequeno pedaço do pino de madeira para conectar entre o suporte GoPro e o braço impresso em 3D. Agora você montou o estabilizador.
  9. Por último, você pode adicionar uma alça conectada ao suporte inferior do servo.

Etapa 11: conectando o Zybo ao estabilizador

Conectando Zybo ao Estabilizador
Conectando Zybo ao Estabilizador

Há algumas coisas a serem observadas ao fazer isso. Você quer ter certeza de que os 5V da fonte de alimentação nunca vão para a placa Zybo, pois isso causaria problemas com a placa. Certifique-se de verificar seus jumpers para confirmar que nenhum fio está sendo trocado.

  1. Para prender o Zybo ao estabilizador, você precisará de 15 jumpers masculino para masculino e 4 jumpers masculino para feminino.
  2. Primeiro, conecte dois jumpers à fonte de alimentação de 5 V ao longo dos trilhos + e - da placa de ensaio. Eles fornecerão energia para os servos.
  3. Em seguida, conecte 3 pares de jumpers aos trilhos + e - da placa de ensaio. Estes serão os poderes de cada um dos servos.
  4. Conecte a outra extremidade dos jumpers + e - em cada um dos servos.
  5. Conecte um jumper entre o trilho - da placa de ensaio e um dos pinos GND no Zybo JE Pmod (veja a etapa 5 da imagem). Isso criará um terreno comum entre a placa Zybo e a fonte de alimentação.
  6. Em seguida, conecte um fio de sinal ao pino 1, pino 2 e pino 3 do JE Pmod. O pino 1 é mapeado para o servo inferior, o pino 2 é mapeado para o servo na extremidade do braço e o pino 3 é mapeado para o servo do meio.
  7. Conecte os 4 fios fêmeas aos pinos GND, VDD, SDA e SCL do breakout IMU. GND e VDD são plugados no GND e 3V3 nos pinos JF. Conecte o pino SDA no pino 8 e o SCL no pino 7 no JF (veja a imagem da Etapa 5).
  8. Por último, conecte o computador à placa usando um cabo micro usb. Isso permitirá a comunicação direta e a programação da placa Zybo.

Etapa 12: Correção do Norte Verdadeiro

Correção do Norte Verdadeiro
Correção do Norte Verdadeiro

A calibração do magnetômetro na IMU é importante para o correto funcionamento do dispositivo. A declinação magnética, que corrige o norte magnético para o norte verdadeiro.

  1. Para corrigir a diferença entre o norte magnético e o norte verdadeiro, você precisa usar uma combinação de dois serviços, o Google Maps e a calculadora de campo magnético da NOAA.
  2. Use o Google Maps para encontrar sua latitude e longitude de sua localização atual.
  3. Pegue sua longitude e latitude atuais e conecte-as à calculadora de campo magnético.
  4. O que é retornado é a declinação magnética. Insira este cálculo no código na linha 378 de "iic_main_thread.c". Se sua declinação for leste, subtraia do valor de guinada; se for oeste, adicione ao valor de guinada.

* a foto foi tirada do guia de conexão MPU 9250 da Sparkfun, encontrado aqui.

Etapa 13: Executando o programa

Executando o Programa
Executando o Programa

O momento que você estava esperando! A melhor parte do projeto é vê-lo funcionando. Um problema que observamos é que há desvio dos valores relatados da IMU. Um filtro passa-baixa pode ajudar a corrigir esse desvio, e mexer no magnetômetro, calibrações de aceleração e giroscópio também ajudará a corrigir esse desvio.

  1. Primeiro, crie tudo no SDK, isso pode ser feito pressionando Ctrl + B.
  2. Certifique-se de que a fonte de alimentação esteja ligada e definida para 5V. Verifique se todos os fios estão indo para seus lugares corretos.
  3. Em seguida, para executar o programa, pressione o triângulo verde na parte superior central da barra de tarefas.
  4. Quando o programa for executado, todos os servos serão redefinidos para suas posições 0, portanto, esteja pronto para o movimento do equipamento. Assim que o programa for inicializado, os servos voltarão às suas posições de 90 graus.
  5. Uma função de calibração do magnetômetro será executada e as instruções serão impressas no terminal UART, ao qual você pode se conectar por meio de um monitor serial como 'putty' ou o monitor serial fornecido no SDK.
  6. A calibração fará com que você mova o dispositivo em uma figura 8 por cerca de 10 segundos. Você pode remover esta etapa comentando a linha 273 de "iic_main_thread.c". Se você comentar, você precisa descomentar as linhas 323 - 325 "iic_main_thread.c". Esses valores foram inicialmente coletados da calibração do magnetômetro acima e, em seguida, inseridos como valores.
  7. Após a calibração, o código de estabilização será inicializado e o dispositivo manterá a câmera estável.

Recomendado: