Quando os FPGAs devem ser usados ​​em robótica?

12

O FPGA tem bons pontos, como muitos pontos de IO, mas, novamente, você precisa pensar em um nível muito baixo com chinelos e ser pioneiro em áreas onde as coisas ainda não estão maduras - por exemplo, veja esta pergunta aqui sobre ferramentas de desenvolvimento em FPGAs - este é o meu entendimento atualmente! Agora, o FPGA foi usado para criar excelente destreza em mãos robóticas como aqui . Agora, algumas pessoas comercializam FPGA para prototipagem rápida e projetos "avançados" , como aqui , não os compreendo completamente: se você não precisa de muitos pontos de IO para coisas como sensores, por que escolher o FPGA para um robô? então

Quando o FPGA deve ser escolhido para um projeto em robótica?

hhh
fonte
Se você precisar de paralelismo, há um senso de usar o FPGA, pois você pode conseguir isso. Além disso, você pode personalizar seu próprio "design de chip" e "facilmente" atualizar algumas funcionalidades sem o novo chip de hardware. Vi exemplos de detecção de vários objetos da câmera em tempo real. Com certeza é uma sobrecarga para projetos menores.
Gossamer

Respostas:

4

Não sei ao certo o que na pergunta vinculada sobre ferramentas de desenvolvimento faz você pensar que elas não são maduras. É verdade que a maioria deles é proprietária e não de código aberto. Mas eu pensei que as ferramentas estavam bem maduras, mesmo quando essa pergunta foi feita três anos atrás. Hoje , o Xilinx , Altera e Lattice têm ambientes de desenvolvimento disponíveis gratuitamente, que são executados no Windows e Linux com suporte de 32 e 64 bits. Se você insiste em código aberto, o Icarus Verilog pode fazer bastante. Mas eu pessoalmente me ateria às ferramentas específicas do fornecedor.

Os FPGA são mais do que apenas um monte de chinelos configuráveis. Considere o Altera NIOS II . Um processador de núcleo macio de 32 bits capaz de executar o Linux. Misture e combine comunicações e outros periféricos do OpenCores ou da Xilinx , Altera ou Lattice e você construiu um microcontrolador personalizado com tudo o que precisa e nada do que não precisa. Você pode até escrever código C para o processador NIOS II e ter certas funções implementadas diretamente no hardware FPGA, se precisar da velocidade. Esse nível alto é suficiente para você pensar?

Os FPGA têm um alto custo de investimento inicial. Mas é mais barato e fácil adicionar funcionalidades posteriormente no processo de design. Isso é o que se entende por projetos "prospectivos". Considere um projeto em que você deseja adicionar alguns motores adicionais ao seu robô, mas você ficou sem geradores PWM no seu microcontrolador. O que você faz? Adicionar outro microcontrolador? Compre chips PWM separados e conecte-os a uma interface de comunicação? E se todas as suas interfaces de comunicação estiverem em uso? Com um FPGA, isso é reduzido quase inteiramente a uma operação de copiar e colar. É muito mais fácil, mais barato e mais rápido escalar um design para incluir novas funcionalidades sem comprar tanto hardware adicional com um FPGA.

Mas provavelmente o maior motivo para usar um FPGA é a velocidade. Não estou falando de pura velocidade do relógio. Mas quando você precisa que muitas coisas aconteçam simultaneamente. Como Gossamer mencionou, o paralelismo é o que os FPGA são realmente bons. Os projetos de filtro se beneficiam especialmente desse tipo de arquitetura paralela. Se você precisar filtrar e responder a um sensor que muda rapidamente, precisará de um FPGA. Eles também são muito bons no processamento de vídeo, pois isso também se beneficia do processamento paralelo.

Tomemos, por exemplo, este robô manual de alta velocidade . Ele precisa processar o vídeo da câmera de visão de alta velocidade (1000 quadros por segundo), bem como os sensores táteis, e responder manipulando vários atuadores em apenas alguns milissegundos. Esse tipo de projeto é quando você precisa escolher FPGAs.

processamento de visão massivamente paralelo

embedded.kyle
fonte
Você poderia esclarecer que "os FPGA têm um alto custo de investimento inicial"? Relacionado aqui : os preços parecem muito baixos. Você quer dizer alto custo de treinamento ou alguma outra figura?
Hhh #
1
@hhh Eu não estava falando sobre o custo de chips brutos. Eu estava falando sobre custo de desenvolvimento. Considere um kit de desenvolvimento de microcontrolador, como no PandaBoard . Contém um ARM Cortext A9 por US $ 181. Uma placa de desenvolvimento de FPGA que pode conter um A9 como o Cyclone V custa US $ 1.099.
embedded.kyle
@hhh É claro que existem kits de desenvolvimento de FPGA mais baratos. Mas eu estava tentando encontrar uma métrica para comparar duas coisas que são tão diferentes. Portanto, um kit de desenvolvimento que possui (muito) aproximadamente o mesmo poder de processamento é cerca de 10x mais.
embedded.kyle
@hhh O ARM mais barato da Mouser é de US $ 0,80 . O FPGA mais barato é de US $ 2,80 .
embedded.kyle
2
@hhh Essa mão está na pesquisa de ponta com provavelmente dezenas, senão centenas, milhares de dólares em equipamentos personalizados. O processamento de vídeo em geral tende a estar na extremidade superior. Veja aqui e aqui . E nem provavelmente poderia processar vídeo de 1kfps. Mais como 30-60fps. O quadro que você listou não possui nenhuma entrada de vídeo. Embora certamente pudesse controlar os atuadores e processar os sensores táteis. Desafiadoramente pode emular a mão que você vinculou.
embedded.kyle
2

Eu acho que pode haver um equívoco sobre o que realmente é um FPGA e quando ele é usado em projetos. Então deixe-me tentar explicar essa parte primeiro.

FPGAs e quando alguém pode querer ter um ...

Correndo o risco de simplificar, um FPGA é pouco mais que um processador que é 'reconfigurável'.

Por que alguém iria querer um microprocessador 'reconfigurável'? Bem, porque custa muito caro fabricar um processador de silício para fazer isso por um, dois ou mesmo duzentos chips. Você precisaria executar lotes de milhares de chips para torná-lo economicamente viável.

Como nenhum projeto é livre de bugs na primeira vez, seguir a rota do silício efetivamente compromete uma empresa a pelo menos dois, se não mais testes, todos com enormes custos de fabricação.

O que significa essencialmente que pouquíssimas empresas comerciais se interessarão em projetar e trazer à fabricação algo que não seja chip com apelo comercial suficientemente amplo.

Então, se você vir para cima com um design brilhante que justifica um microprocessador personalizado, então você pode tentar trazer a sua ideia para a vida com um orçamento apertado pela implementação em um FPGA, onde o chip real é simplesmente uma coleção de portas, e um 'program' (tipicamente VHDL ou Verilog) organiza esses portões em um microprocessador real.

Mas isso é um caminho completamente diferente (projeto de microprocessador!) ...

O que me leva a sugerir que

... FPGAs não são essenciais para a robótica - pelo menos no início

O que você precisa para robótica é um processador . Um FPGA é apenas um tipo especial de processador (reconfigurável).

Você pergunta se você 'deveria'? Bem, isso depende do seu conhecimento e também de onde estão seus interesses reais - primeiro o design do microprocessador ou a robótica primeiro?

Se os microprocessadores são a sua paixão, então, por todos os meios! E a robótica é uma excelente área de aplicação para microprocessadores personalizados - talvez um córtex visual com muitas vias de decisão paralelas manipuladas diretamente no hardware, ou multiplicação especial de tensores no hardware - basicamente qualquer coisa que os processadores genéricos não possam lidar bem de prateleira.

Mas se você pretende projetar microprocessadores em FPGAs, é claro que precisará de todo esse conhecimento de baixo nível mencionado e muito mais - porque, fundamentalmente, você estará projetando seu próprio processador. O que não tem nada a ver com robótica, mesmo que seu aplicativo de destino possa ser robótico.

A maioria dos designers provavelmente pode encontrar um processador existente que fará a maior parte do que for necessário.

Então eu acho que você provavelmente não precisa de um FPGA.

Um roteiro inicial: de recursos comerciais a (talvez) um FPGA ...

O primeiro objetivo, na minha opinião, é tentar transformar todos os seus conceitos criativos em um robô funcional (um desafio bastante intenso por si só).

Se você achar que possui gargalos de processamento específicos e significativos em seu design, o próximo objetivo é otimizar a seleção / design de seus processadores, chips ainda disponíveis comercialmente. Talvez maior, mais rápido (compensação com consumo de energia, dissipação de calor). Talvez chips menores e dedicados lidem com tarefas específicas e façam interface com o cérebro principal (compensação com complicações de algoritmo / lógica).

Somente se houver recursos com os quais você não conseguirá lidar com chips comerciais, considere a possibilidade de implementar um processador especializado dentro de um FPGA, porque nesse ponto haverá vantagens muito claras que você espera obter ao criar seu próprio ', e você pode se concentrar apenas na implementação desses recursos, com as interfaces certas para o restante do seu design.

Caso contrário, é provável que você se desvie do seu objetivo principal (o que vou assumir é realmente construir um robô!)

Conclusão: os FPGAs são uma distração para o início da robótica - até que você esteja bem no caminho da robótica - e ganhou algumas boas críticas no design de eletrônicos / microprocessadores digitais em algum lugar ao longo do caminho.

Assad Ebrahim
fonte
Posso pensar em muitos exemplos em áreas como processamento de vídeo, onde o processamento paralelo com FPGA é essencial para obter velocidade e resultados mais precisos. Falhas observadas nas quais as pessoas tentam implementar a detecção de íris ruidosa em tempo real com uma única CPU. Não. O FPGA possui suas próprias áreas específicas em que se agita, como mãos robóticas de alta destreza ou processamento de vídeo preciso / rápido. Não consigo entender justapondo FPGA e microprocessador assim. Eles são bestas muito diferentes, com seus próprios lados bons / ruins. Erro? Alguma idéia de se esse tipo de boas áreas para FPGA está listado em algum lugar?
hhh
Você certamente está certo de que há muitas áreas em que os FPGAs são uma vantagem - eu não excluí aquelas na minha resposta. A questão é onde você está na curva da experiência e quão claro você está sobre as vantagens específicas que deseja obter ao usar um FPGA. Se você não souber a resposta para isso, provavelmente não precisará de uma! (Resposta Este ecos de Jakob abaixo.)
Assad Ebrahim
1

Tendo trabalhado com FPGAs e microcontroladores em projetos de robótica, eu diria agora: seja qual for a pessoa que implementa a tarefa tem mais experiência. Se você conhece os dois igualmente bem, não estaria se perguntando. Se você não conhece bem, esses seriam os pontos a serem seguidos:

  • É necessário um tempo complexo nas portas de E / S? O controle do motor trifásico pode ter esses requisitos. Os FPGAs têm uma pequena vantagem aqui.
  • Você pode paralelizar seu algoritmo de latência super baixa? Aqui, o FPGA realmente não compete com microcontroladores, mas mais com PCs incorporados. A maioria das coisas que eu usaria no PC incorporado, mas você pode ter uma vantagem com um FPGA para alguns aplicativos específicos. O processamento estéreo denso, por exemplo, geralmente é feito em FPGAs. Muitas câmeras usam FPGAs para processar o fluxo de dados.

O que também é frequentemente usado são soluções híbridas. Com dois chips, um microcontrolador para o código do programa e um FPGA para E / S ou alguma outra tarefa. Também existem vários FPGAs que realmente possuem um microcontrolador incorporado.

Eu não seria tão duro com FPGAs como em outros posts, mas também argumentaria que, a menos que você conheça bem seu VHDL, será melhor usar microcontrolador ou ainda melhor PCs incorporados.

Jakob
fonte
Você pode mostrar alguns exemplos de projetos que ajudariam a entender que tipo de coisas é bom fazer com FPGAs e quais com microcontroladores? Suponha, por exemplo, algum robô que segue a linha: ele funciona muito bem com um único microcontrolador em uma superfície plana e limpa até linhas mais borradas que exigem nitidez de imagem / convoluções / etc. Se uma linha na floresta (ou outra superfície barulhenta), seria um desafio muito mais difícil (duvido que seja possível fazer o fpga). Você já fez algum projeto robótico do mundo real em que usou o fpga, por exemplo, para processamento de imagem / vídeo em tempo real? +1 para VHDL.
hhh