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.