segunda-feira, 23 de setembro de 2013

Acabado (post final)

Está feito; tese escrita, apresentada, e entregue. Aqui está a versão final da tese escrita. Como bónus coloco também 3 vídeos das experiencias que fiz para validação do meu trabalho.

O primeiro vídeo mostra a experiência onde o joystick háptico controla a altura a que a anca está do chão.


O segundo mostra o movimento lateral da anca consuante comandado pelo utilizador.




Por ultimo, temos o movimento sagital da anca.




domingo, 12 de maio de 2013

Placa de teste e células calibradas

Depois da semana passada a bater com a cabeça no teclado, as placas ficaram furadas. Isto só depois de descobrir que ao fazer o Cam Job do ealge para obter as coordenadas dos furos a fazer, este põem um off-set muito estranho, nos dois eixos e de diferentes valores entre si... Bem, ficaram feitas e bem feias.

A primeira a ser soldada foi a que saiu pior. Esta vai servir de placa de testes, calibração e de suplente caso uma das outras falhe. As duas outras ficaram em melhor estado e serão para a solução final da tese. A imagem a baixo mostra como ficou a placa de testes.


Usei pinos de 2,54 mm de pitch para ligação ao Arduino e sockets para os amplificadores INA 122 P. Com os sockets dois dos amplificadores ficaram encostados a uma das fichas para bateria do Arduino Fio e por isso na primeira das outras duas placas não serão utilizados sockets. A ultima das placas será feita consoante o resultado e a analise do funcionamento das primeiras duas.

Visto que tinha uma placa funcional comecei a calibração das células. Para isso foi usada uma maquina de ensaios de tracção/compressão uniaxial SHIMADZU AGS-X 10kN. Disponibilizada pelo Prof. Eng. António Bastos, esta maquina é capaz de velocidades de avanço tão baixas como 0.01 mm/min dando assim um controlo muito grande sobre a força exercida. As curvas de calibração foram feitas com múltiplos amplificadores com 13 medições feitas ao longo da gama de forças aceitáveis para cada tipo de célula. Alem das medições dos amplificadores dada pelo Arduino foi também medida a tensão de entrada nestes para servir de comparação e ground-truth. O setup utilizado está ilustrado nas seguintes figuras.







Utilizando um multímetro e o modulo ROS pressure_cells anteriormente feito foi possível guardar todos os valores numa folha de calculo. Para futura referencia, cada célula de carga foi marcada com um número romano segundo a ordem pela qual foram retirados os valores.
 


Como podemos ver pelas curvas acima, as células apresentam uma boa linearidade dentro da gama para que foram feitas. O próximo passo será, no modulo pressure_cells, colocar esta informação para que este modulo publique as forças sentidas pelas células em vez de publicar o valor dado pelo ADC do Arduino.

sexta-feira, 3 de maio de 2013

Novas placas

Pois.... O que aconteceu foi que porque as placas foram cortadas pouco depois da "nascença" não foi possível tirar a origem dos eixos das placas de maneira a fazer os furos nos locais certos com a CNC.

Assim, com a orientação do Eng. Festas e do Sr. Júlio, refiz o design das placas de maneira a se ajustar melhor ao aperto da CNC. Além disso foi ainda adicionado 4 marcas para servirem de guias para furos previamente feitos. Estes serão depois usados como furos de fixação da placa numa plataforma de apoio à furação.


 Enquanto esperei pelas placas, estive a escrever um pouco a tese, tal como o prof. Vítor pediu, experimentando o inglês para ver se vale a pena....

Bem, são horas da reunião semanal.

domingo, 21 de abril de 2013

Atrasado mas está aqui!

Bem... era suposto ter feito este post há uns dias atrás mas mais vale tarde do que nunca (espero)!

No inicio da semana, conforme me foi pedido pelo professor Vitor, fiz um novo modulo de ROS para servir de intermédio entre a aquisição da força (ou outros sensores) e monitorização/comando do joystick háptico. Este modulo, com o nome haptic_force, tem a função de renderizar as forças a serem enviadas para o Phantom conforme os sensores instalados no robô.

Neste momento o único executável activo faz uma simples conversão de cada uma das coordenadas do COP para um vetor de força a 2D representado no Phantom no plano horizontal. A conversão é feita com uma equação da obtida pelo MatLab.


O gráfico acima mostra a recta que foi implementada para a componente y do COP. Os factores das rectas serão actualizados após a calibração das células de carga.

O modulo haptic_force poderá ser aumentado ou refeito conforme se utilizem mais sensores instalados no robô humanóide, como por exemplo sensores inerciais.


Após esta este modulo estar feito e testado, tal como falei no post anterior, estive a mexer com o robô!

(YYEESSS!!!!!)

Estive um dia a ver os trabalhos feitos anteriormente nomeadamente as funções e classes feitas para controlo dos servos. Depois de este estudo decidi pegar em algumas funções do trabalho do Eng. Pedro Cruz e fazer uma classe para controlar os servos do tronco e pernas.

Na quinta-feira recebi um email que dizia que as placas de circuito impresso estavam prontas. Obrigado Sr. Júlio! Aqui estão elas ao lado do Arduino Fio onde vão ser instaladas.



 E agora é esta a minha prioridade: acabar o hardware! Fazer os 109 furos em cada placa e soldar todos os componentes. Depois disso é seguir para a máquina de ensaios uniaxial de tração/compressão para com as placas e amplificadores operacionais calibrar todas as células de carga.

Vamos a isso!

sexta-feira, 12 de abril de 2013

Módulo para o Phantom e Otimização


Esta semana estive novamente à espera de coisas diversas, logo faço código! Neste caso particular estive à volta dos módulos de phantom_control e pressure_cells.

No módulo phantom_control, foi criada uma estrutura que tem todos os principais campos de estado do joystick (posição, ângulos das juntas, estado dos botões, etc). Esta estrutura é depois colocada numa mensagem ROS que neste momento, apenas com este módulo a correr, tem uma frequência de publicação de aproximadamente 990 Hz. É esperado que quando estiverem mais módulos a correr ao mesmo tempo, esta referencia desça. Devido à incapacidade de os drivers de Linux para ter dois dispositivos Fire-Wire vamos ter de usar dois PC's, assim é possível reduzir efeito de baixa de frequência.

Além disso está também à espera de uma mensagem de "Força" para actualizar o force feedback do Phantom. Esta mensagem é um vector de força XYZ.

O módulo pressure_cells foi remexido e optimizado. Tem agora dois parâmetros ROS para no ficheiro de launch definir se vamos publicar as mensagens de virtualização para o RViz e para definir se os pés estão ao mesmo nível. O primeiro parâmetro serve para optimizar a velocidade de processamento deste módulo; o segundo é para as experiências praticas de validação onde temos ambos os pés ao mesmo nível e queremos calcular o centro de pressão geral com as medições de todas as células de carga montadas no robô humanóide. As mensagens dos centros de pressão foram mudadas, agora são apenas um valor de X e Y e existem 3 mensagens a serem publicadas: uma para cada pé (/cop_left e /cop_rigth) e uma para o conjunto (/cop_left_right). As duas primeiras estão a ser publicadas a cerca de 1280 Hz e a ultima à volta de 1030 Hz.

Para a semana, se não houver hardware continuo com o código desta vez no módulo humanoid_control e comunicar com os servomotores.

sábado, 6 de abril de 2013

Conversor chega e descobri ROS com OpenHaptics


No inicio desta semana chegou o conversor/variador para a fonte de bancada. "Está feito! Agora podemos trabalhar com o robô sem ter-mos medo de que as baterias não rebentei na nossa mão!" pensamos nós.



Não! O conversor vem por defeito com o output para 5.1V, e nós precisamos de algo entre os 6 e 7.4 Volts.... Para mudar é necessário um programador!!!! Eu sei que isto é equipamento de primeira para modelismo todo XPTO mas vá lá! Bem... fui a uns forums pesquisar e falar com umas pessoas e neste momento não tenho muitas hipóteses... Comprar um (não me parece porque é só para uma vez) ou arranjar alguém que me faça isso. Se alguém que não os meus orientadores e colegas lerem isto e poderem ajudar avisem!

Visto que as placas impressas ainda não vieram comecei a mexer com o joystic Phantom e é muito fixe! :D


Tive alguns problemas para resolver de maneira a compilar os exemplos da biblioteca OpenHaptics mas agora a maioria funciona (alguns que utilizam o GLUTMesa dão problemas). Depois de experimentar e modificar alguns, resolvi fazer um modulo de ROS para a monotorização e comando do joystic. Mas antes procurei se alguém já tinha feito isto. E aqui está : http://www.ros.org/wiki/phantom_omni.

Após ver experimentar o código destes amigalhaços, percebi que apesar de não conseguir usar o que eles fizeram diretamente. No entanto, estrutura do programa exemplo e a maneira que eles usam para juntar a plataforma de programação do ROS com a biblioteca OpenHaptics vai me dar muito jeito para estruturar o modulo que vou agora fazer.

terça-feira, 26 de março de 2013

Op Amp Arduino Shield

De maneira a amplificar os sinais diferenciais é necessário utilizar um shield amplificador para o Arduino Fio que vou utilizar. Visto que não encontrei nada parecido, à venda ou em esquema, tive de conceber um esquema eléctrico para este efeito. Como mostra a imagem a baixo, usei amplificadores instrumentados diferenciais rail-to-rail INA122 da Texas Instruments e um filtro passa-baixo para limpar possível ruído antes de passar os sinais para o ADC do Arduino.



Alem disso utilizo condensadores de pequena capacidade para corrigir alguma flutuação da fonte de tensão. Do lado esquerdo da imagem estão representados os pinos de alimentação e output das 4 células.

Depois disto foi necessário fazer o esquema do shield. Após uma semana a bater com a cabeça no Eagle e muita ajuda do Prof. Dr. Ricardo Pascoal, tenho 2 versões para o shield.


A versão acima foi feita com a ajuda e apoio do Prof. Ricardo. Os componentes foram colocados de maneira a que o filtro passa-baixo ficasse o mais perto das entradas ADC. Aplicou-se um plano de terra em toda a parte de baixo e na parte superior esquerda da do topo do shield. Também foi aplicado um plano VCC para uma rápida e eficiente distribuição  de tensão.


Esta outra versão foi baseada na minha versão inicia e optimizada para montagem dos componentes e eliminação de ruído. A ultima é feita com um plano de terra na superfície de baixo do shield e um plano de VCC na parte de cima.

Agora só falta escolher!

sexta-feira, 22 de março de 2013

A espera interminável

Pensei que esta semana montasse o circuito final para experimentar se os componentes que escolhi não dão problemas. Mas....

Não chegou.

Assim, como me tinha proposto, acabei de definir as configurações para visualizar no RViz as 8 células de carga. Neste momento, o RViz mostra as 8 células onde apenas 4 estão ligadas aos arduinos e por isso as outras 4 mostram ruído. As células que estão ligadas , de maneira a mostrar que estão "agarradas" ao referencial do pé correspondente, estão a descrever uma oval. O referencial é que se mexe não as células. Aqui fica o primeiro .gif que fiz para a posteridade.


Algo estranho acontece com estas células. Algumas, não todas, mostram um offset só quando são pressionadas é que "voltam" ao inicio da escala e começam a aumentar de valor. O Ricardo disse-me que poderia ser do circuito estar com mal contactos ou com algumas imprecisões das resistências de ganho que neste momento estão ligadas. Espero que a montagem final não tenha este tipo de questão e espero pelo material para fazer isso.
EDIÇÃO: Este problema já foi resolvido. Estava a fazer côdea no código do Arduino.

Além disso, também criei um novo modulo de ROS chamado humanoid_control. E como podemos perceber pelo nome será o modulo onde iremos fazer o controlo do humanóide, mais precisamente os seus servomotores. Neste momento apenas tem um binário que faz a publicação das transformações dos referenciais dos pés e é aqui que sofrem as transformações que vêem na animação acima. O objectivo final deste modulo é estar sempre a publicar o estado das juntas do robô e quando receber uma ordem de outro modulo para movimentar alguma junta, enviar essa ordem em vez/conjunto com a palavra série que retorna o estado do servo. A seguir mostro um diagrama com os executaveis e as menssagens trocadas entre eles.



No resto do tempo, tentei escrever alguma coisa para a tese mas começar textos é-me muito difícil, principalmente as introduções. Depois fiquei doente, fui à consulta da fisioterapia, fiquei mais doente, fiquei melhor e escrevi esta entrada neste blog.

terça-feira, 19 de março de 2013

Apresentação da Tese de Mestrado

Chamo-me Emílio Estrelinha e este blog serve para fazer updates a minha tese de mestrado com o mesmo nome deste blog.

Aqui  está uma pequena apresentação que fiz no inicio do semestre para apresentação e discussão no LAR ( Laboratório de Robótica e Automação).