Índice:
- Etapa 1: Configuração do Hardware Vivado
- Etapa 2: Configurando o Design do Bloco
- Etapa 3: Criar Bloco de IP PWM personalizado
- Etapa 4: adicionar bloco de IP PWM ao projeto
- Etapa 5: Configurar o Wrapper HDL e definir o arquivo de restrições
- Etapa 6: Gerando Bitstream
- Etapa 7: Configurando o Projeto no SDK
- Etapa 8: Modificações do código FreeRTOS
- Etapa 9: Impressão 3D para estabilizador
- Etapa 10: Montagem das peças
- Etapa 11: conectando o Zybo ao estabilizador
- Etapa 12: Correção do Norte Verdadeiro
- Etapa 13: Executando o programa
Vídeo: Estabilizador de câmera portátil: 13 etapas (com imagens)
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:39
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
Vamos começar criando o design de bloco subjacente para o projeto.
- Abra o Vivado 2016.2, clique no ícone "Criar Novo Projeto" e clique em "Avançar>".
- Nomeie seu projeto e clique em "Avançar>".
- Escolha o projeto RTL e clique em "Avançar>".
- 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.
- No painel esquerdo, em IP Integrator, clique em "Create Block Design" e em "OK".
- Clique com o botão direito na guia "Diagrama" e escolha "Adicionar IP …".
- Digite "ZYNQ7 Processing System" e clique na seleção.
- Clique duas vezes no bloco Zynq que aparece.
- Clique em "Importar configurações XPS" e importe o arquivo "ZYBO_zynq_def.xml" fornecido.
- Vá para "MIO Configuration" e selecione "Application Processor Unit" e ative o Timer 0 e os timers Watchdog.
- 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.
- Em "GPIO", marque GPIO MIO, Reinicialização ENET, Reinicialização USB e Reinicialização I2C.
- 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.
- Agora, na guia Ferramentas perto do canto superior esquerdo, clique em "Criar e empacotar IP …" e clique em Avançar.
- Em seguida, selecione "Criar um novo periférico AXI4" e clique em Avançar.
- 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.
- Agora clique em "Editar IP" e clique em Concluir. Isso abrirá uma nova janela para editar o bloco pwm.
- 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.
- 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.
- 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.
- Agora navegue até a guia 'Package IP - name' e selecione "Customization Parameters".
- 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.
- Agora vá para "Customization GUI" e clique com o botão direito em Pwm Counter Max e selecione "Edit Parameter…".
- Marque as caixas "Visível na GUI de Personalização" e "Especificar Intervalo".
- 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.
- 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
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.
- Clique com o botão direito na guia do diagrama e clique em "Configurações de IP …". Navegue até a guia "Repository Manager".
- 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.
- 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.
- 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.
- Clique duas vezes no bloco PWM e altere Pwm Counter Max para 1024 de 128.
- 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.
- Repita a etapa 6 para PWM1 e PWM2 também.
- 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
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.
- 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.
- O Pmod para o qual enviaremos é JE.
- Em Arquivo, selecione "Adicionar fontes…" e selecione "Adicionar ou criar restrições" e clique em Avançar.
- 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.
- 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.
- Corrija todos os erros que aparecerem, mas os avisos geralmente podem ser ignorados.
- 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.
- Comece baixando a última versão do FreeRTOS aqui.
- 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.
- Vá para "FreeRTOS / Demo / CORTEX_A9_Zynq_ZC702" na pasta FreeRTOS. Importe apenas "RTOSDemo" deste local.
- Agora gere um Pacote de Suporte de Placa (BSP) clicando em Arquivo-> Novo Pacote de Suporte de Placa.
- Selecione "ps7_cortexa9_0", marque "lwip141" e clique em OK.
- Clique com o botão direito na pasta azul RTOSDemo e selecione "Referências do projeto".
- 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.
- 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.
- 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".
- Copie o código do "iic_main_thread.c" incluído e cole-o no arquivo recém-criado.
- Repita as etapas 2 e 3 com os arquivos restantes.
- 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".
- 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.
- Construa o projeto com Ctrl + B para confirmar se tudo funciona. Verifique os avisos gerados, mas você pode ignorá-los.
- 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
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.
- Use os arquivos fornecidos para imprimir o braço e o suporte para a GoPro.
- Você precisa adicionar uma estrutura ao arquivo.stl.
- Apare / limpe as partes excedentes do andaime depois de impresso.
- Você pode substituir o pino de madeira por uma peça impressa em 3D, se desejar.
Etapa 10: 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.
- Solde 8 pinos no breakout da IMU, 4 de cada lado.
- A IMU é fixada ao suporte impresso em 3D para a GoPro no centro do suporte.
- 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.
- Conecte um HS-5485HB ao suporte do servo que está integrado ao braço impresso em 3D.
- 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.
- 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.
- 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.
- 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.
- Por último, você pode adicionar uma alça conectada ao suporte inferior do servo.
Etapa 11: conectando o 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.
- Para prender o Zybo ao estabilizador, você precisará de 15 jumpers masculino para masculino e 4 jumpers masculino para feminino.
- 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.
- Em seguida, conecte 3 pares de jumpers aos trilhos + e - da placa de ensaio. Estes serão os poderes de cada um dos servos.
- Conecte a outra extremidade dos jumpers + e - em cada um dos servos.
- 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.
- 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.
- 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).
- 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
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.
- 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.
- Use o Google Maps para encontrar sua latitude e longitude de sua localização atual.
- Pegue sua longitude e latitude atuais e conecte-as à calculadora de campo magnético.
- 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
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.
- Primeiro, crie tudo no SDK, isso pode ser feito pressionando Ctrl + B.
- 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.
- Em seguida, para executar o programa, pressione o triângulo verde na parte superior central da barra de tarefas.
- 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.
- 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.
- 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.
- Após a calibração, o código de estabilização será inicializado e o dispositivo manterá a câmera estável.
Recomendado:
Projeto de estabilizador de cardan: 9 etapas (com fotos)
Projeto de estabilizador de cardan: Como fazer um cardanAprenda como fazer um cardan de 2 eixos para sua câmera de ação Na cultura de hoje, todos amamos gravar vídeos e capturar os momentos, especialmente quando você é um criador de conteúdo como eu, com certeza enfrentou o problema de vídeo tão instável
Protótipo de estabilizador de câmera (2DOF): 6 etapas
Prototype Camera Stabilizer (2DOF): Autores: Robert de Mello e Souza, Jacob Paxton, Moises FariasAgradecimentos: Muito obrigado à California State University Maritime Academy, seu programa de Tecnologia de Engenharia e ao Dr. Chang-Siu por nos ajudar a ter sucesso com nosso projeto em tal
Faça você mesmo o estabilizador de câmera Arduino: 4 etapas (com imagens)
Estabilizador de câmera Arduino DIY: Fiz um estabilizador de câmera usando arduino para um projeto escolar. Você precisará de: 1x Servo motor Arduino Uno3x1x Giroscópio MP60502x Botão1x Potenciômetro1x Placa de ensaio (1x fonte de alimentação externa)
Estabilizador de câmera para ENV2 ou outros telefones com câmera: 6 etapas
Estabilizador de câmera para ENV2 ou outros telefones com câmera: Você já quis fazer um vídeo, mas só tem um telefone com câmera? Você já fez um vídeo com uma câmera de telefone, mas não consegue segurá-lo? Bem, então este é o instrutível para você
Estabilizador de imagem universal, 2 Gyro: 6 etapas (com imagens)
Estabilizador de imagem universal, 2 Gyro: Este estabilizador de imagem pode ser usado com qualquer lente e câmera. Ele funciona da mesma maneira que o telescópio Hubble fica apontado para o mesmo objeto durante exposições de vários dias. Este estabilizador pode ser usado com sucesso com exposições moderadamente longas e moderadas