quinta-feira, 12 de dezembro de 2013

Validação da Rede de Sensores Inerciais - Resultados Obtidos

Como resultados otidos,

a comparação entre as velocidades angulares obtidas pelos giroscópios e as obtidas pelas servomotores revelou que ambas as curvas apresentaram comportamentos com o mesmo padrão, no entanto, as amplitudes apresentaram algumas divergências. As figuras que se seguem, ilustram os resultados obtidos para a grandeza da velocidade angular.




Os resultados obtidos da comparação dos valores da aceleração linear não foram satisfatórios. De uma forma geral, apresentaram-se curvas que não apresentam semelhanças, salvo algumas ocasiões onde é possível observar comportamentos semelhantes apenas em alguns "picos" de aceleração, mesmo com amplitudes de diferentes ordens de grandeza. As duas figuras que se seguem ilustram exemplos da comparação entre curvas de aceleração linear.


Os resultados obtidos na comparação entre as inclinações obtidas pelos acelerómetros e as inclinações obtidas pela cinemática apresentaram-se satisfatórios. No entanto, em alguns casos foram observadas diferenças significativas nas amplitudes dos valores, mas apenas tendo como referência a inclinação baseada na cinemática direta da perna do robô, não é possível concluir sobre estas divergências. As duas figuras que se seguem representam alguns resultados obtidos para esta grandeza. No primeiro caso apresenta-se a comparação entre curvas, cuja semelhança é elevada, e no segundo caso, uma comparação onde existe a diferença nas amplitudes obtidas.



Em última análise, foi realizado o estudo da redundância sensorial, isto é, o estudo da combinação das leituras de vários sensores sujeitos à mesma situação. As figuras que se seguem representam dois exemplos para os resultados obtidos para a redundância sensorial. Em ambos os casos, foi possível observar ligeiras melhorias.


Validação da Rede de Sensores Inerciais - Grandezas a Avaliar

A validação da rede de sensores inerciais prossegue com a análise dos dados obtidos durante a realização das experiências ilustradas na publicação anterior.

Para esta validação foram avaliadas as seguintes grandezas:
- velocidade angular;
- aceleração linear;
- inclinação.

A avaliação da velocidade angular realizou-se através da comparação dos dados dos giroscópios com os dados da posição angular dos servomotores derivada. Esta comparação, para as juntas do tornozelo é realizada diretamente, no entanto, para as juntas dos joelhos e anda, os dados dos servomotores são comparados com o resultado da diferença entre os giroscópios que se encontram adjacentes ao respetivo servomotor.

Para a avaliação das restantes grandezas foi necessário recorrer ao cálculo dos valores de comparação, através de um modelo de cinemática direta desenvolvido para uma perna do robô (apenas para uma porque ambas apresentam movimentos idênticos). Na próxima figura é possível observar uma simplificação de uma perna do robô, a partir da qual partiu o desenvolvimento da cinemática direta.

Diagrama simplificado de uma perna do robô humanóide.

De seguida, seguiu-se a cadeia cinemática a partir do diagrama anterior, representada na figura seguinte.

Cadeia cinemática da perna do robô humanóide.

Esta cadeia cinemática deu origem à seguinte tabela de Denavit-Hartenberg:

Tabela de Denavit - Hartenberg para o modelo de cinemática da perna do robô humanóide.
A partir desta tabela, obtém-se a matriz que define a posição e orientação do último ponto da cadeia cinemática, em relação ao referencial global (situação na base do pé do robô).

A partir dessa matriz, é possível chegar à equação (1), que representa a relação da velocidade de um ponto do sistema cartesiano r com a velocidade das juntas , vetos q . Essa relação é estabelecida pela matriz J , a matriz do Jacobiano.

                       dr = J · dq       (1)

∆2 r = J · ∆2 q + ∆J · ∆q        (2)


Através da diferenciação de (1), obtém-se a equação (2) que permite obter a aceleração em cada ponto da perna do robô humanóide a partir da aceleração dos servomotores. Essa aceleração é utilizada como referência que serve para a avaliação da aceleração linear.

A referência para a inclinação é obtida através da matriz de transformação T que estabelece a relação entre o último referencial da cadeia cinemática com o seu referencial base. 

Sendo a matriz T,


igualando a submatriz composta pelas primeiras 3 linhas e 3 colunas,  com a matriz R


matriz que representa a mesma transformação que T mas em função dos ângulos de Euler, é possível obter a inclinação de qualquer ponto da cadeia cinemática da perna do robô humanóide. Esta inclinação servirá para avaliar os resultados da inclinação calculados pelos dados dos acelerómetros. 


Validação da Rede de Sensores Inerciais - Movimentos Realizados

A validação de toda a rede de sensores inerciais, após a sua implementação no robô humanóide, passou pela aquisição dos seus dados durante a realização de movimentos controlados por tele-operação do robô humanóide. Tal foi possível graças a um projeto anteriormente desenvolvido também como contribuição para o PHUA, no qual se desenvolveu um módulo na plataforma ROS, o qual recebe a posição espacial de um dispositivo háptico (controlado por um tele-operador), e com essa posição é calculada a posição angular dos servomotores do robô humanóide através de transformações e um modelo de cinemática inversa. O mesmo módulo ROS permite obter, a cada iteração, a posição angular de cada servomotor do robô humanóide.

Em paralelo com o módulo anteriormente referido, o módulo de aquisição de dados da rede de sensores inerciais fornecia a informação de todos os sensores envolvidos na rede.

Com todo este setup  foi possível obter as curvas da posição angular de cada servomotor e as curvas de todos os sensores inerciais da rede, durante a realização de 3 tipos de movimento:

- 1 . Agachamento;
- 2. Flexão do Joelho;
- 3. Movimento Lateral.

Tais movimentos foram realizados através  dos servomotores da parte inferior. Na figura seguinte é possível observar todos os servomotores do robô humanóide com o respetivo número ID, o qual permite identificar facilmente cada um deles.

ID dos servomotores do robô humanóide.
 
De seguida são apresentados 3 vídeos que ilustram cada tipo de movimento, juntamente com o respetivo gráfico da posição das juntas.

1 - Agachamento



Posição angular dos servomotores para movimento de agachamento.
2 - Flexão do Joelhos


 
Posição angular dos servomotores para o movimento da flexão dos joelhos.

3 - Movimento lateral



Posição angular dos servomotores para o movimento lateral.

Posicionamento da Rede de Sensores no Robô Humanóide

Com vista a proceder à validação de toda a rede de sensores inerciais desenvolvida, optou-se pela sua implementação no robô humanóide, para posterior aquisição de dados perante a realização de movimentos.

De forma a simplificar o controlo do robô humanóide, apenas foi utilizada a parte inferior, composta por anca, pernas e pés, como é possível observar na seguinte figura.

Parte inferior do Robô Humanóide do PHUA.
Nesta plataforma humanóide foi implementada toda a rede, composta por 8 unidades do modelo POLOLU e uma RAZOR. A sua distribuição pode ser observada na seguinte figura.

Distribuição das unidades inerciais.




De uma forma resumida, A vermelho estão simbolizadas as unidades inerciais POLOLU e a amarelo a unidade RAZOR. A azul encontra-se a unidade de controlo Arduino. Na anca foram implementadas 4 unidades POLOLU e a unidade RAZOR. As restantes unidades foram implementadas nos joelhos, sendo que para cada perna, uma das unidades se encontra acima e outra abaixo da junta do joelho.

Esta disposição não é obrigatoriamente definitiva, representando apenas um exemplo de uma possível distribuição das unidades, com a qual foram realizados testes de validação.

Aquisição de Dados da Rede

Caros seguidores,

há muito tempo que não publico nada no blogue mas aqui temos notícias.

Depois da placa em PCB, que sustenta todas as ligações, estar concluída, foi desenvolvido um módulo que em cooperação com a unidade de controlo Arduino, realiza a aquisição de dados de todos os sensores disponíveis.

Módulo de aquisição de dados da rede inercial.
A figura apresentada mostra a forma como funciona a cooperação entre um módulo desenvolvido em ROS e o firmware Arduino utilizado para a aquisição de dados. Após a ordem de iniciar, o Arduino realiza a operação de contagem de sensores inerciais presentes na rede, bem como a inicialização das variáveis necessárias e a comunicação com o PC, no ponto 1. De seguida, o PC faz o pedido do número de sensores, em 2, e em 3 o Arduino envia uma string com a respetiva resposta. Dentro de um loop, a cada iteração é realizado pelo PC, em 4, o pedido de uma leitura de todos os sensores, sendo essa leitura realizada em 5, pelo Arduino e enviada para o PC, sendo em 6 realizada a receção dos dados e em 7 a sua publicação  necessária para o pós processamento da informação recebida. O módulo é terminado assim que em 8 se der a ordem para tal.

quarta-feira, 5 de junho de 2013

Placas PCB de circuito impresso para implementação rede inercial

Boa tarde seguidores,

há muito tempo que não actualizo este blogue, mas ultimamente tenho andando a escrever para a dissertação.

Conforme o título sugere, agora vou-vos falar da placa de circuito impresso em PCB que irá ser destinada à implementação da rede de de sensores inercial.

Numa tentativa de tornar o hardware para esta implementação permanente, iniciei uma pequena aventura - projetar, desenhar e mandar fazer uma placa de circuito impresso.

Para tal, tive que utilizar um software dedicado à tarefa de projetar circuitos e placas de circuito, o Eagle. Neste programa, em primeiro lugar, deve-se desenvolver um esquema eléctrico do circuito pretendido.

Assim que o esquema eléctrico é concluido, através de um ícon, o Eagle gera um projeto de placa, com um módulo do qual este dispõe. Resta então organizar os componentes e desenhar as pistas que ligam os componentes.

Como resultado, surgiu uma pequena placa, que será montada em cima de um arduino UNO. Esta placa dispõe de duas camadas, pois apenas uma é insuficiente para acomodar todos os componentes e ligações necessárias. Nas figuras seguintes pode ser visto o resultado no ficheiro CAD em eagle.

Placa Circuito Impresso - Camada Superior 

Placa Circuito Impresso - Camada Inferior

Com este projeto desenvolvido, resta então proceder à manufatura das mesmas. Assim, mandei fazê-las e o resultado pode ser observado na figura seguinte.
Placa Circuito Impresso PCB
Após ter recebido esta "prenda", faltou apenas fazê-la funcionar, e para isso é suposto esta placa ser repleta de componentes :)

Após uma pequena jornada de furações em CNC e algumas horas de solda a estanho, o resultado final culminou em algo que pode ser visualizado na seguinte figura.

Placa Circuito Impresso PCB - pronta

Com a placa pronta, é possível então encaixá-la no arduino UNO e o resultado está apresentado na figura seguinte. 
Placa PCB montada no Arduino e sobre o respetivo suporte
Como é possível observar ne figura anterior, além da placa montada no arduino, encontra-se também o arduino montado num pequeno suporte. Esta é a fase seguinte na implementação da rede inercial no robô humanoide. Para a fixação desta montagem no robô humanoide, desenvolvi um apoio que não é mais que uma pequena placa de nylon acrescida de duas pequenas peças, as quais se prendem ao humanoide por clipagem. Este método de fixação foi escolhido uma vez que esta implementação futuramente poderá ter que ser implementada num sítio diferente. Como resultado deste sistema de fixação, é possível observar na figura seguinte o apoio acoplado na zona pélvica do humanoide.
Suporte arduino acoplado no humanoide

Estando o "cérebro" de toda a rede inercial acoplado ao robô humanoide, restou a tarefa de incorporar os sensores no corpo do humanoide, sensores esses que farão a obtenção dos dados a explorar mais tarde. Para esta fixação, foram desenvolvidas por mim pequenas peças, as quais são fixas ao humanoide por meio de ligação aparafusada, onde os sensores seriam incorporados também com recurso a ligações aparafusadas. Estes apoios com os sensores já montados no robô humanoide podem ser observados na figura seguinte.

Apoios de sensores

Face a todo este trabalho desenvolvido, a fase que se segue será a realização de testes com a rede inercial montada no robô humanoide, contudo, não será nesta publicação que isso será documentado, pois essa fase encontra-se em curso. Futuramente adicionarei mais notícias acerca da continuidade deste trabalho.

segunda-feira, 13 de maio de 2013

Testes Acelerómetros como "Inclinómetros"

Boa noites caros seguidores!

Venho mais uma vez dar noticias sobre os pequenos sensores...

Ora uma vez que os acelerómetros se mostraram um pouco "ruidosos" e para pequenas acelerações não se tornar evidente as movimentações, realizei alguns testes a testar a sua viabilidade como "inclinómetros", ou seja, usar estes sensores para calcular a sua inclinação em relação ao vetor da gravidade.

Para estes testes, pude contar mais uma vez com a preciosa ajuda do nosso amigo Fanuc :)

Para posições estáticas foram medidos os valores que os acelerómetros devolviam e digamos que os resultados não são desanimadores...

Com o sensor da POLOLU e tentando alinhar um dos acelerómetros (do eixo Z) com o vetor da gravidade, podem-se observar os resultados presentes na figura que se segue:

Nesta figura pode observar-se que o acelerómetro do eixo Z tem valores que rondam os 256. Isto porque para as configurações atuais, este valor corresponde a 1g. Os acelerómetros dos outros 2 eixos, como seria de esperar, têm valores próximos de 0. 

Com estes dados, calculando apenas a inclinação do eixo Z dos acelerómetros em relação ao vetor da gravidade temos:


Nesta nova figura, podemos observar que os valores da inclinação do eixo Z dos acelerómetros em relação ao vetor da gravidade ronda valores muito próximos de 0. De notar que esta curva nao apresenta qualquer filtragem, apresentando uma amplitude média de 1,5º. Aplicando um filtro de média, sendo um dos mais simples que pode ser usado, conseguiu-se uma amplitude média de 1º. Isto pode ser observado na figura que se segue.


Mais testes foram feitos com estes sensores. Por exemplo na imagem que se segue, a inclinação foi de 35º.

Como se pode observar, os valores do acelerómetro do eixo Z baixou um pouco os seus valores, mas a nossa atenção deve-se voltar para o acelerómetro do eixo Y. Usando os valores deste para calcular a inclinação do IMU, chegou-se ao seguinte gráfico:



Aqui o valor médio da inclinação ronda os 36º e não os 35º. Aqui podemos ter uma perceção do tipo de precisão que podemos ter com estes acelerómetros, contudo, para aplicação no humanoide, penso que esta gama de precisão não será de deitar fora, tendo apenas que tentar reduzir o ruido obtido nas leituras.

No gráfico seguinte pode-se observar a aplicação do mesmo filtro de média utilizado no exemplo anterior.

Neste gráfico pode-se obsrevar uma diminuição da amplitude média em relação ao gráfico anterior. No entanto, penso que seria conveniente experimentar outro tipo de filtros que reduzissem de melhor forma o ruido.

Agora, caros seguidores, devem estar a perguntar-se sobre o segundo sensor, o da RAZOR. Não! Não me esqueci dele.

Para a primeira situação do sensor anterior(alinhar o sensor do eixo Z com o vetor da gravidade), podemos então observar então os dados obtidos.


Como o sensor anterior, os resultados são semelhantes à excepção de um pormenor. O valor máximo que para as configurações do IMU tem, deveria ser próximo de 256 contudo nota-se que esse valor não é maior que 225. Tal acontece provavelmente por uma calibração mal feita ou já desajustada.

No entanto, os resultados para os valores da inclinação nesta situação que serão apresentados a seguir, não são maus de todo.


Os valores encontram-se um pouco deslocados. Em vez de 0º rondam 1.8º,no entanto, mantém uma amplitude média de 1º.

A seguir, pode-se observar os dados dos acelerómetros para uma inclinação de 35º como no exemplo do POLOLU. Como há pouco, há uma descida dos valores do acelerómetro que estaria anteriormente alinhado com o vetor da aceleração gravítica e um aumento nos valores do eixo X.

 Estes valores, com o algorítmo de conversão em inclinação deram origem ao seguinte gráfico:
 Como na inclinação anterior, os dados permitiram observar uma inclinação próxima da real e com uma amplitude média de 1º em torno dos 35.6º. Filtrando com o mesmo filtro de média, os resultados melhoram um pouco, como se pode observar na figura seguinte.

terça-feira, 7 de maio de 2013

Rede Sensores - Recurso ao Multiplexer

Boa noite,
após um dia um pouco atribulado, devo dizer que consegui um pequeno (mas importante) progresso.

Após muitas dores de cabeça que as montagens de circuito em placa branca sabem dar, com fios constantemente a sair ou de uma forma tímida a recusarem-se a colaborar, acrescido ainda de "nabices" minhas a nível da adaptação de software consegui estabelecer a muito aguardada "rede" de apenas 2 IMUs.

Tal foi conseguido, conforme já tinha referido por meio de um multiplexer a permitir a comunicação via I2C entre um Arduino Uno e 2 desses IMUs apenas com um par de fios por parte do arduino.

Pode-se dizer então que, SIM É POSSÍVEL... e SIM CONSEGUI :)

O trabalho está MUITO LONGE de estar em bom caminho... mas julgo que esta pequena vitória representa sempre um pequeno passo em frente.

Brevemente, assim que tiver uma montagem mais apreciável à vista humana publicarei algumas imagens da montagem e falarei mais também sobre a mesma.

Para os mais esquecidos, os IMUs que incorporei nesta pequena rede foram 2 minIMU-v2 9dof que comunicam como já disse via I2C.

Paralelamente a esta evolução conto em também analisar os dados das experiências recentemente realizadas no âmbito do estudo dos acelerómetros a funcionar como "inclinómetros" (sobre o qual também apresentarei publicações).

quinta-feira, 2 de maio de 2013

Experiências Fanuc - Resultados e "Feedbacks"

Saudações Caríssimos Seguidores!

Peço-vos desculpa por me ter ausentado deste blogue tanto tempo mantendo-vos desatualizados da evolução do trablho que tenho vindo a desenvolver.

Pois bem... a verdade é que já realizei alguns testes! No entanto, a análise dos dados retirados nesses testes ainda não foram 100% conclusivos. 

Passo então a expôr...

Na vertente "boa" dos testes - digamos assim - podem-se verificar para movimentos de rotação (puramente movimentos de rotação em torno de um eixo de cada vez), as seguintes imagens:

Para sensor da Pololu (o mais pequeno)


Na primeira imagem, pode-se observar o movimento do "end-effector" do fanuc a azul (a primeira linha de gráficos- cada gráfico corresponde ao movimento de cada eixo) e imediatamente abaixo, a resposta dos giroscópios (a vermelho).

Na segunda imagem os 3 gráficos, dizem respeito à comparação de cada um dos movimentos do "end-effector" do fanuc apresentados nos gráficos anteriores mas agora a vermelho observa-se a resposta doo giroscópios integrada, ou seja, a posição angular dada pelos giroscópios.

É de observar, que para estes movimentos foi obtida uma resposta por parte deste sensor bastante aceitável, contudo deve-se também fazer notar  que sempre que a posição angular do fanuc se encontra em 0, os valores dados pelo giroscópio variam para valores diferentes deste. Isto pode dever-se ao efeito do "drift" que é muito comum neste tipo de sensores, ou ainda, a uma fraca qualidade entre o controlador do fanuc e a sua leitura de posição.


Para sensor da Razor (o maior)



Neste segundo sensor, para as mesmas condições, o comportamento é semelhante, tornando difícil a diferenciação destes sensores pelo comportamento dos giroscópios aqui demonstrado. Consoante a necessidade, novos testes em movimentos de rotação serão realizados.

De salientar que estes movimentos foram realizados a uma velocidade de 50º/s.

quinta-feira, 11 de abril de 2013

Experiência Sensores no Fanuc

Durante os últimos dias tenho-me ocupado da experiência a realizar no Fanuc.

A tarefa não tem sido propriamente fácil. Isto porque na indecisão de como fazer os programas para os movimentos do braço robótico têm surgido alguns problemas. Existem essencialmente já disponíveis 2 formas de fazer os programas destes movimentos:

- Programação direta na consola do Fanuc.
- Programação com recurso a uma interface RobCOMM que permite por TCP/IP executar movimentos no braço robótico.

Neste momento o recurso ao RobCOMM é muito limitado, uma vez que não permite algumas funções.

A alternativa escolhida foi a programação por via da consola do Fanuc.

MAS... !!!!!!

Ainda existe um problema...

Através do módulo ROS consigo vizualizar a resposta dos sensores, contudo, e uma vez que preciso saber a diferença entre o resultado dos sensores e o movimento que estes estão a ter, necessito ainda da curva da ponta do Fanuc.

Este é o novo entrave... é onde tenho q focar a minha atenção. Caso contrário, tenho a resposta dos sensores mas não disponho da informação do movimento original e sem isso não é possível fazer o estudo da resposta dos sensores.

Como ainda não tinha mostrado, apresento aqui algumas imagens do sensor RAZOR montado no suporte com este montado também no braço robótico Fanuc.



Durante alguns testes que tenho vindo a realizar, tenho observado já que a potência dos servomotores do Fanuc são tais que mesmo a 10cm de distância ainda existe muita distorção do campo magnético medido pelo magnetómetro. Por isso precisarei de uma haste do suporte maior. Talvez com um comprimento na ordem dos 15cm... em vez dos seus atuais 7cm.

Suporte sensores

Como numas das publicações anteriores tinha referido, desta vez trago imagens do suporte que vai ser utilizado nas experiências a realizar com os sensores aplicados no braço robótico da Fanuc.

Este suporte é composto por 3 componentes. Uma em alumínio que prende ao end-effector (a peça mais à direita nas imagens do suporte), uma haste em nylon que cria uma certa distância entre os sensores e os servomotores do braço robótico (a peça do meio) e por fim, (a peça mais à esquerda nas imagens do suporte) em nylon também, a peça onde os sensores são presos.



Todo o suporte foi maquinado por mim.

quinta-feira, 4 de abril de 2013

Rede Sensores - Multiplexer

O sensor que mais interesse despertou para a rede inercial foi o minIMU-v2 Pololu uma vez que com ele se estabelecia uma comunicação por I2C, uma comunicação que requer apenas 1 par de condutores e capaz de estabelecer facilmente redes uma vez que na comunicação os slaves devem ter endereços distintos. Ora qual não foi a minha surpresa quando descobri que estes sensores não dispunham de endereços configuráveis e estão sim pré-estabelecidos de fábrica.

Sendo assim, a facilidade da montagem de rede por I2C desapareceu, forçando a novas abordagens.

A nova ideia de estabelecer uma rede, sem que para isso seja necessário um arduino UNO por cada sensor, passa por utilizar um Multiplexer que agulha a comunicação Master/Slave Entre o arduino e um sensor de cada vez.

Já testei esta nova abordagem com uma rede de 2 sensores ligados a um arduino UNO por meio de um Multiplexer, no entanto pareceu-me que apenas estaria a ser feita a leitura de apenas um sensor. É possível que o código possa ter erros ou que algum cabo pudesse estar solto. Para tirar isto a limpo, será preciso fazer mais testes.

Em alternativa, existe ainda um tipo de Multiplexer próprio para comunicações I2C. A diferença entre os 2 reside no facto de o primeiro multiplexer apenas ter um canal que vai agulhando entre várias possibilidades, 1 para 8 no caso do multiplexer usado, e o segundo já agulha pares de canais, ou seja, em vez de mudar apenas entre pinos SDA (pino de transferência de dados em I2C), também comuta entre pinos SCL (pino de sincronismo entre dispositivos) em simultâneo garantindo a continuidade da comunicação.

Suporte para Experiência de Sensores no Fanuc

Por forma a avaliar o desempenho e rigor das medições feitas pelos sensore (depois de calibrados),  está planeada uma experiência na qual se colocam os sensores num suporte que está fixo ao braço robótico 6DOF da FANUC existente no LAR e se executam movimentos com o mesmo por forma a avaliar a resposta dos sensores aos movimentos do braço robótico. Pensamos que assim será mais fácil a apreciação destes para prosseguir com a rede constituida pelos sensores.

Após a realização do projeto do suporte, deparei-me com a ausência do responsável da oficina do departamento. Pus então mãos à obra mas demorou tempo a mais que o previsto, uma vez que nem sempre tinha máquinas disponíveis.

Contudo, passado este tempo acabei o suporte!

Agora falta ter os sensores prontos a testar, o que não está a ser tarefa fácil... pelo menos o sensor pololu que não estou a conseguir calibrar decentemente seja por que algoritmo for!

Futuramente adicionarei fotos do suporte realizado.

MinIMU - v2 Problema

Passei alguns dias a tentar fazer com que este sensor funcionasse com o algorítmo adaptado do sensor Razor. Depois de pensar que tinha conseguido a fusão do sensor e algoritmo, não consegui obter uma boa calibração.

Esta união apresenta atraso na resposta e más medições. Um fracasso portanto.

Mesmo com o algoritmo disponibilizado pelo site, ainda não consegui obter bons valores para a orientação deste sensor.

terça-feira, 2 de abril de 2013

MinIMU

Uma vez que o algoritmo utilizado pelo sensor Razor tem um melhor método de calibração, pensei em utilizar o esse algoritmo no sensor MinIMU-v2 Pololu.

Utilizando puramente o primeiro algorítmo revelou-se um pequeno desafio para mim, uma vez que não consegui estabelecer bem a comunicação com o sensor, por isso, para contornar o problema recorri às bibliotecas disponibilizadas no site do MinIMU para comunicar com o sensor e utilizei-as no algoritmo do sensor Razor. Assim, consegui utilizar o mesmo algoritmo para os 2 sensores. 

Para além desse algoritmo ter melhores métodos de calibração, esta metodologia vai permitir ainda a comparação mais direta entre sensores.

Utilização e Calibração dos Sensores

Para que as leituras dos sensores possam ser utilizadas, estes necessitam de calibração. Esta necessidade deve-se às pequenas variações por exemplo na constante gravitacional no caso do acelerómetro e no campo magnético que pode ser afetado por materiais ferromagnéticos, circuitos eléctricos, entre outros.

Como já expliquei na publicação anterior, estes sensores serão utilizados com a implementação do algoritmo que calcula a matriz DCM. Para isso, existem já exemplos online que podem ser utilizados e adaptados em caso de ser necessário.

Para o IMU Razor existe um tutorial muito simples e completo que explica como utilizar este sensor. Para ver esse tutorial, clique aqui.

Este tutorial, além de fornecer o algoritmo para a aplicação da matriz DCM, ainda contém algoritmos de calibração que se têm mostrado promissores nos meus pequenos testes.

Para o MinIMU-v2 Pololu, apenas consegui encontrar a página indicada no site do sensor. Para a visualizar clique aqui. Este algitmo exemplo é igual ao do sensor anterior, contudo, a calibração por este disponibilizada não aparenta ser tão robusta.

Desde já, no que toca a comparações entre os 2 sensores, o Razor aparenta ser mais robusto, já possui microcontrolador integrado na sua placa, contudo, é maior e comunica por RS232. O facto da comunicação ser por RS232 não é prejudicial, contudo comparando com a comunicação do sensor MinIMU-v2 Pololu, este segundo requer comunicação por I2C, o que mais facilmente permitiria uma instalação da rede de sensores muito mais fácil. Este segundo sensor além de comunicar por I2C é muito mais pequeno, contudo não vem apetrexado de microcontrolador, o que significa que precisa de um arduino (neste caso utilizo o UNO) para poder comunicar com o sensor.

Sensores

Com o objetivo de conseguir com que o humanoide se mantenha em equilíbrio bípede, na realização deste projeto, será implementada uma rede de sensores inercias (IMU - Inertial Measurement Unit) no mesmo por forma a obter informação sobre a sua estabilidade em situação de equilíbrio.

Esta metodologia foi pensada tendo como ponto de inspiração o aparelho vestibular humano, sendo o maior responsável pelo nosso equilíbrio enquanto seres bípedes.

Neste caso, os sensores inerciais, os quais vou referir mais adiante, servirão como sistema de aquisição da orientação do robô ou seu centro de massa por forma a possibilitar a identificação de uma situação de instabilidade, de forma a poder corrigi-la a tempo de prevenir a queda do humanoide.

Para a rede inercial a instalar no humanoide, estão disponíveis dois modelos de sensores inerciais:





Pololu MinIMU-v2 9DOF








Razor IMU 9 DOF









Ambos os sensores são constituidos por acelerómetro, giroscópio e magnetómetro, perfazendo um total de 9 graus de liberdade.

Associado a cada sensor, está um algoritmo que vai permitir saber a sua orientação no espaço (ângulos de Euler). Este algoritmo apenas utiliza os dados vindos de cada sensor para determinar o matriz de rotação utilizada para converter nos ângulos de Euler (matriz também conhecida por DCM - Direction Cosine Matrix).


Os sensores são de 9dof , contudo o DCM funciona também com 6dof, ou seja, apenas com o acelerómetro e giroscópio. mas uma vez que por vezes o giroscópio fica com drift , o magnetómetro entra no sistema para corrigir esse problema, caso se verifique. Contudo , e porque nem tudo é um mar de rosas, o magnetómetro em ambientes onde o campo magnético não seja constante, apresenta alteração dos valores por este recebidos, podendo dar origem a erros.

Dada a sensibilidade deste tipo de sensores, ainda será ponderada e avaliada a necessidade da aplicação de um filtro de Kalman por forma a estabilizar as leituras dos sensores.

Robô Humanoide do PHUA

- 25 Graus de Liberdade ;

- 65 cm Altura;

- 6 kg;

- Estrutura em alumínio;

- Atuação Ativa
     - Servomotores HITEC;

- Atuação Passiva
     - Elásticos.






Este é o módulo do PHUA, que depois de outros módulos, arrancou com este último em 2009.

De momento, o objetivo dos trabalhos que se desenvolvem em torno deste humanoide centra-se em atribuir-lhe a capacidade de se equilibrar.