Isso se refere ao hardware que pesa pouco, porque um robô ambulante (do tamanho de um gato gordo, 6 pernas com 3 DOF) deve carregá-lo. Por causa disso, será necessário fazer muita trigonometria (usando matemática matricial ou não, ainda não tenho certeza) e é daí que vem a pergunta.
PIC, Arduino ou AVR barato não são rápidos o suficiente para calcular tudo 100 / segundo e manter em mente coisas como inércia e prevenção de obstáculos, ou mesmo caminhos / andamentos de força bruta.
O plano A é levar o cérebro ao robô. Seja microprocessador, micro ITX, nettop ou outro; o que é um hardware eficiente para fazer trigonometria / matemática matricial rapidamente?
Pesquisei on-line e esperava descobrir sobre os microcontroladores AVR, x86 ou ARM especializados nisso, mas sem sorte lá.
O plano B é ter uma máquina x86 conectada via Wi-Fi para fazer o trabalho pesado. Ótimo para prototipagem também, mas eu gostaria que isso migrasse para o plano A, eventualmente, quando o hardware miniaturizar. Mas, mesmo assim, qual CPU de desktop pode fazer a trigonometria mais rapidamente?
O plano C é distribuir a carga e ter um microcontrolador / núcleo de baixo consumo de energia para cada perna, embora essa não seja a melhor solução por muitas razões, eu gosto da capacidade de extensão dela.
Ainda não decidi o idioma e / ou a biblioteca usada, mas prefiro Pascal e C ++.
(sugestões de tags mais adequadas são bem-vindas, sou novo aqui)
fonte
Respostas:
Não parece que seu aplicativo seja realmente tudo isso intensivo em computação. Um dsPIC, por exemplo, pode executar instruções de 400 k para cada uma de suas iterações. Isso é muito. No entanto, será útil ter boa capacidade de E / S de baixo nível, geradores de PWM, temporizadores e similares.
Seno e cosseno não são realmente tão difíceis de fazer em uma máquina inteira como um dsPIC. Eu já fiz isso algumas vezes. O truque é escolher a representação correta para os ângulos. Os radianos podem ser bons do ponto de vista teórico, mas são inconvenientes em termos computacionais. Degress é artificial e simplesmente bobo. Use o intervalo completo de qualquer número inteiro do tamanho da máquina para representar uma rotação completa. Por exemplo, em um dsPIC, que é um processador de 16 bits, uma rotação completa tem 65536 contagens, o que é muito mais precisão e resolução do que você precisa para controlar um robô ou que pode ser medido de qualquer maneira.
Uma vantagem dessa representação é que todo o acondicionamento acontece automaticamente apenas devido ao modo como as entradas e subtraições inteiras não assinadas funcionam. Outra vantagem significativa é que essa representação se presta particularmente bem ao uso de tabelas de pesquisa para seno e cosseno. Você só precisa armazenar 1/4 de ciclo. Os dois bits superiores do ângulo informam em que quadrante você está, que informa se deve indexar na tabela para frente ou para trás e se deve negar o resultado ou não. Os próximos N bits inferiores são usados para indexar na tabela, com a tabela com 2 N segmentos (2 N +1 pontos). Observe que a indexação na tabela para trás está apenas complementando os bits de índice da tabela.
Você pode dar à mesa pontos suficientes para que escolher a resposta mais próxima seja boa o suficiente. Por exemplo, se a tabela tiver 1024 segmentos, o seno e o cosseno serão computados no 1/4096 mais próximo de um círculo. Isso será suficiente para controlar um robô. Se você quiser mais precisão, poderá aumentar a tabela ou usar os bits inferiores restantes do ângulo para interpolar linearmente entre as entradas adjacentes da tabela.
De qualquer forma, o ponto é que parece que seus requisitos para este processador não correspondem ao problema declarado. Eu provavelmente usaria um dsPIC33F. É certamente pequeno, leve e muito mais eficiente em termos de energia do que um processo de computação de uso geral como um x86 em um computador de placa única.
fonte
Você vai lidar com muitos sinais de entrada. Você não precisa necessariamente de uma CPU com alto rendimento; muitos sinais podem ser processados em paralelo. Este é o território típico do DSP. Obviamente, você também deseja a funcionalidade geral da CPU. Isso não é problema. Existem muitas CPUs com DSP's integrados.
Um design de chip típico para essas aplicações é um Cortex-M4. Isso vem com um DSP integrado e as versões -M4F também possuem uma FPU. Isso pode não ser necessário, a trigonometria pode ser feita facilmente em matemática de ponto fixo.
fonte
Algumas observações:
Você não precisa processar as operações de trigonometria na mesma CPU que executa a prevenção de obstáculos. Você pode dividir as tarefas entre dois microcontroladores e usar um protocolo de comunicação para fazê-los falar.
Para um experimento, implementei um AHRS algoritmo com um filtro Kalman em um microcontrolador ARM Cortex M0 (era um STM32, não lembro exatamente o resto, mas acho que era 32 MHz) e, usando matemática de ponto fixo, eu poderia executar em cerca de 40 amostras / segundo. Com um controlador mais rápido, você poderá carregá-lo facilmente e, é claro, pode tentar o modo FPGA ou DSP.
Eu diria que o controle das pernas não requer muita CPU e você pode controlar todas as pernas juntas, talvez separadamente das operações de trigonometria e prevenção de obstáculos (consulte 1)
fonte
A trigonometria é complicada, mas existem atalhos. Se você tem pouco poder de processamento, considere o algoritmo CORDIC.
É basicamente uma tabela de valores para [por exemplo] seno. Os ângulos podem estar em graus, radianos, o que você quiser. O ponto é que o SINE desses valores é 1/2 (0,5), 1/4 (0,25), 1/8, 1/16 ..... para qualquer fração de grau que seu robô possa usar.
Insira seu ângulo, subtraia o primeiro valor da tabela, defina seu resultado como primeiro resultado (0,5). Se, ao subtrair, seu ângulo ficou negativo, adicione o próximo valor (e subtraia 0,25). Caso contrário, continue subtraindo os ângulos e adicionando resultados.
Quando você chega ao final da tabela, tudo o que você fez foi adicionar e subtrair, mas você está muito perto. Há um "fator de violino" final para multiplicar.
A precisão [e a velocidade] do resultado depende do tamanho [e da resolução] da tabela de pesquisa.
fonte
Você pode considerar o uso de uma placa Raspberry Pi que execute um sistema GNU / Linux de uso geral. O Raspberry Pi possui vários pinos GPIO que podem ser usados para conectar servos de robôs ou placas de extensão.
http://www.youtube.com/watch?v=RuYLTudcOaM
O modelo A Raspberry Pi pode executar até 24 GFLOPs de computação de ponto flutuante de uso geral usando sua GPU usando o OpenGL ES 2, mantendo-se abaixo do orçamento de energia de 2,5W.
http://elinux.org/RPi_Hardware
Exemplo: uma configuração de robô alimentada por bateria implementada usando o Raspberry Pi.
http://www.homofaciens.de/technics-robots-R3-construction_en_navion.htm
Exemplo 2: um robô de 6 patas controlado por um raspberry pi:
http://www.youtube.com/watch?v=Yhv43H5Omfc
Exemplo 3: um robô de pêndulo invertido de 2 rodas e auto balanceado controlado por um raspberry pi:
http://www.youtube.com/watch?v=n-noFwc23y0
fonte
Para robôs de pernas, você pode criar algumas seqüências de movimento de pernas predefinidas e "reproduzi-las". É possível evitar obstáculos em tempo real com uma
fuzzy logic
implementação leve, onde tudo está novamente em formato de tabela e tudo o que você precisa fazer é escolher o valor certo e usá-lo paradefuzzyfication
processo.Tudo pode ser feito em C em um processador de alguma forma mais rápido
ARM7
. Eu tenteiAVR
e falhei, depois de gastar muito tempo transformando tudo emfixed point arithmetics
.fonte
A plataforma Texas Instruments Stellaris possui uma unidade de ponto flutuante a bordo por padrão. Não tenho certeza se o controlador ARM com clock de 80MHz é rápido o suficiente para o seu aplicativo, mas uma placa de desenvolvimento do LaunchPad é bem barata: http://www.ti.com/ww/en/launchpad/stellaris_head.html
É programável através de USB, cadeias de ferramentas gratuitas estão disponíveis para pelo menos Windows e Linux, medem cerca de 4 × 6 cm e tem mais de 30 pinos GPIO (se contei corretamente).
fonte
Você pode incorporar a placa da CPU do x86 power pc no seu aplicativo robótico com a ajuda do AVR para controlar as unidades do robô como uma placa de interface. A solução mais rápida e barata do seu problema. Mas sim, você precisa mexer bastante na codificação da arquitetura x86, mas, felizmente, pode entender muita codificação a partir de códigos de SO de código aberto. (Se sua construção mecânica suportar esse peso)
fonte