Pergunta

Breve descrição dos requisitos

(Muitas boas respostas aqui, graças a todos, eu vou atualizar se eu nunca chegar este vôo).

detector de corridas

A ao longo de uma trilha, medindo vários parâmetros físicos diferentes em tempo real (determinista), em função da distância curvilínea. O usuário pode clicar em um botão para 'marca' waypoints durante este processo, em seguida, usa o GUI para inserir os detalhes de cada waypoint (em tempo humano, mas enquanto a aquisição de dados continua).

Em seguida, executa o sistema uma série de cálculos / filtros / modificações nos dados adquiridos, tendo em conta os condicionalismos introduzidos para cada waypoint. O resultado desse processo é uma série de correcções, também como uma função da distância curvilínea.

A terceira parte do processo envolve a execução ao longo da pista novamente, mas desta vez escrever as correções para um sistema físico que corrige a faixa (ainda em função da distância curvilínea).

Minha idéia atual para sua entrada / comentários / advertências

O que eu quero para determinar é se eu posso fazer isso com um PC + FPGA. O FPGA faria a 'aquisição de dados', gostaria de usar C # no PC para ler os dados a partir de um buffer. As informações waypoint pode ser inserido através de uma aplicação WPF / WinForms, e estocados em um banco de dados / flatfile / nada pendente 'processamento'.

Para o processamento, gostaria de usar F #.

O FPGA seria usado para 'escrever' a volta informações para a máquina física.

O único problema que eu posso prever atualmente é se o processamento de algoritmos requerem uma frequência de amostragem que faz com que a quantidade de dados para o buffer muito grande. Isto implicaria descarregando parte do processamento do FPGA - pelo menos os bits que não exigem entrada do usuário. Infelizmente, o algoritmo único pré-processamento é um filtro de Kalman, o que é difícil de implementar com um FPGA, pelo que eu pesquisei.

Eu ficaria muito grato por qualquer feedback que você gostaria de dar.

ATUALIZAÇÕES (informações extra adicionado aqui como e quando)

Na entrada para o filtro de Kalman nós estamos olhando para uma vez a cada 1 ms. Mas do outro lado do filtro de Kalman, estaríamos amostragem a cada 1m, que nas velocidades que estamos falando seria de cerca de 2 por segundo.

Então eu acho que as perguntas mais precisos seria:

  1. Kalman filtro em um FPGA - parece que é possível, mas eu não entendo o suficiente sobre qualquer assunto para ser capaz de trabalhar para fora apenas como é possível.

  2. Eu também não estou certo se uma implementação FPGA de um Kalman será capaz de ciclo a cada 1ms -. Embora eu imagino que ele não deve ser problema

  3. Se eu entendi corretamente, FPGAs não tem Hod-cargas de memória. Para a terceira parte do processo, onde iria ser o envio de uma matriz (aproximadamente) 4 x 400 de duplas para utilização como uma tabela de pesquisa, isto é viável?

  4. Além disso, seria trocar entre os dois processos (leitura / gravação de dados) implicam re-programar o FPGA de cada vez, ou pode ser instruído para alternar entre as duas? (Talvez possível apenas para correr tanto em paralelo e ignorar um ou outro).

  5. Outra opção eu vi está compilando F # para VHDL usando Avalda FPGA desenvolvedor , Eu vou estar a tentar que em breve, eu acho.

Foi útil?

Solução

Uma vez que você está se movendo ao longo de uma pista, eu tenho que assumir a frequência de amostragem não é mais do que 10 kHz. Você pode descarregar os dados para o PC a essa taxa facilmente, mesmo 12 Mb USB (full-speed).

Para o processamento grave de dados matemática, Matlab é o caminho a percorrer. Mas desde que eu não tenha ouvido falar F #, eu não posso comentário.

4 x 400 duplos não é problema. Mesmo FPGAs low-end tenho 100 das kb de memória.

Você não tem que alterar as imagens para alternar entre a leitura ea escrita. Isso é feito o tempo todo em FPGAs.

Outras dicas

Você não mencionar o seu objetivos, os clientes, orçamento, confiabilidade ou prazos, então isso é difícil de responder, mas ...

Esqueça o FPGA. Simplifique o seu design, ambiente de desenvolvimento e as interfaces a menos que você sabe que está indo para explodir suas necessidades em tempo real com outra solução.

Se você tiver o orçamento, eu primeiro dar olhada LabView.

http://www.ni.com/labview/

http://www.ni.com/dataacquisition/

LabView iria dar-lhe o sistema de aquisição de dados e interface gráfica de usuário tudo em um único PC. Na minha experiência, os desenvolvedores não escolher LabView porque ele não se sente como um ambiente 'real' de programação, mas eu definitivamente recomendo para o problema que você descreveu.

Se você está determinado a usar linguagens compiladas, então eu isolar o componente de aquisição de dados em tempo real para um alvo incorporado com um RTOS, e de preferência um que aproveita a MMU para agendamento e linha isolamento e permite que você escrever em C. Se você receber um verdadeiro RTOS, você deve ser capaz de programar realiably os processos que precisam ser executados, e também ser capaz de depurá-los se for necessário! Manter este sistema off-alvo tão simples quanto possível com interfaces definidas. Torná-lo fazer apenas o suficiente para obter os dados que você precisa.

Eu, então, implementar as interfaces de volta para o PC GUI usando um arquivo de interface comum para manutenção. Use interfaces padrão para transferência de dados para o PC, algo como USB2 ou Ethernet. Os chips FTDI são grandes para este material.

Aqui está uma sugestão.

Despejar o conceito FPGA. Obter uma placa de avaliação DSP de TI Escolha um com gigaflops suficiente para fazer você feliz. RAM suficiente para armazenar seu conjunto de trabalho.

Programa-lo em C. TI fornecer um núcleo pequeno RT.

Ele fala para o PC através de, digamos, uma porta serial ou ethernet, seja qual for.

Ele envia os dados do PC cozido com um aperto de mão para que os dados não se perder. Não há memória RAM suficiente nas DPS para armazenar seus dados, enquanto o PC tem momentos altos.

Sem problemas de desempenho com o DSP.

Realtime bit faz o tempo real, com MP é de RAM. O processamento é rápido, ea GUI não é tempo crítico.

Qual é a sua conexão com o PC? Net vai ser um bom ajuste se for uma conexão baseada em rede, como você pode usar fluxos de lidar com a entrada de dados.

Meu único aviso para você a respeito de F # ou qualquer linguagem de programação funcional que envolve grandes conjuntos de dados é a utilização da memória. Eles são maravilhosos e matematicamente demonstrável mas quando você está recebendo uma exceção de estouro de pilha da muitos recursions isso significa que o seu programa não vai funcionar e você perde tempo e esforço.

C # vai ser ótimo se você precisa desenvolver uma GUI, winforms e GDI + deve levá-lo a algo utilizável sem um esforço monumental.

Dê-nos mais algumas informações sobre as taxas de dados e conexão e talvez possamos oferecer mais ajuda?

Pode haver algo útil no Microsoft Robotics Studio: link de texto especialmente para o aspecto tempo real. A CCR -. Concurrency Coordenação Runtime tem um monte de presente pensado já e as ferramentas de simulação pode ajudar a construir um modelo que iria ajudar a sua análise

Parece-me que você pode fazer todo o processamento off-line. Se este for o caso, então off-line é o caminho a percorrer. Em outras palavras dividir o processo em 3 etapas:

  1. A aquisição de dados
  2. A análise dos dados
  3. correções sistema físico com base na análise de dados.

Aquisição de Dados

Se você não pode coletar os dados usando uma interface padrão, então você provavelmente tem que ir com uma interface personalizada. Difícil dizer se você deve estar usando um FPGA sem saber mais sobre a sua interface. Construção de interfaces personalizadas é caro, então você deve fazer um estudo de troca para selecionar a abordagem. Enfim, se isso é baseado FPGA, em seguida, manter o simples FPGA e usá-lo para a aquisição de dados brutos. Com a tecnologia atual de disco rígido você pode facilmente armazenar 100 dos Gigabytes de dados para pós-processamento, então armazenar os dados brutos em uma unidade de disco. Não há nenhuma maneira que você quer ser implementar mesmo um dimensional filtro 1 Kalman em um FPGA, se você não tem que.

Análise de Dados

Assim que tiver os dados em um disco rígido, então você tem muitas opções para análise de dados. Se você já sabe F #, em seguida, ir com F #. Python e Matlab ambos têm muitas bibliotecas de análise de dados disponíveis.

Essa abordagem também torna muito mais fácil para testar o seu software de análise de dados do que uma solução em que você tem que fazer todo o processamento em tempo real. Se os resultados não parecem certas, você pode facilmente executar novamente a análise sem ter que ir e recolher os dados novamente.

sistema físico correções

Tome os resultados da análise de dados e executar o detector ao longo da pista novamente alimentando-as entradas apropriadas através do cartão de interface.

Eu fiz um monte de engenharia incorporado incluindo sistemas híbridos, como o que você descreveu. Nas taxas de dados e tamanhos que você precisa para processar, eu duvido que você precisa de um FPGA ... simplesmente encontrar um fora do sistema de aquisição de dados prateleira para plugue em seu PC.

Eu acho que o maior problema que você vai correr em está mais relacionada com ligações de linguagem para as suas APIs de hardware. No passado, eu tive que desenvolver uma série de meu software em C e montagem (e até mesmo alguns Forth) simplesmente porque essa era a maneira mais fácil de obter os dados do hardware.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top