eezybotarm mk2 no ros moveit

Tenho andado de volta do controlo do braço robótico eezybotarm mk2 com o ros moveit, e até agora não tinha tido muito sucesso em controlar a rotação do braço sobre o eixo z (posição no eixo y). Apenas conseguia posicionar a ponta do braço robótico mais perto ou mais longe da base (posição no eixo x) ou mais alto ou mais baixo face á superfície (posição no eixo x).

Finalmente consegui. A diferença fundamental foi a escolha do LMA kinematics plugin como kinematic solver, para o arm planing group durante a configuração do braço efectuada no Moveit Setup Assistant.

ROS Moveit não gosta de mimic joints

Depois de ter tido o trabalho de rescrever dois dos urdf do eezybotarm mk2 para incluir mimic joints de forma a melhor reproduzir os movimentos do braço descobri que o ROS moveit não faz o planeamento de trajectorias de robots com cadeias cinemáticas que contenham mimic joints.

Actualização: ainda ontem apercebi-me que apesar de o launch file demo.launch exibir o seguinte erro na consola:

[ERROR] [1590019577.283880216]: Group ‘Arm’ has a mimic joint. Will not initialize dynamics solver

O moveit consegue fazer o planeamento de robots com mimic joints na cadeia cinemática

Exploração do projecto typepyt para o meArm

Ontem estive a explorar o pacote typepyt para o meArm disponivel num repositório do github com o mesmo nome.

Nessa exploração conheci um ficheiro urdf que procura descrever a cinemática do meArm com recurso à tag mimic. Esta tag é aplicada a uma articulação virtual existente entre a haste principal e a haste horizontal, e permite assim efectuar uma melhor descrição do movimento do braço robótico.

Como a cinemática do meArm é semelhante à do eezyBotArm vou melhorar a descrição que tenho do eezyBotArm MK2, no pacote ebamk2_description.

Hardware Interface para diff_drive_controller

Adicionei uma versão mais simples de um Hardware Interface para diff_drive_controller.

O diff_drive_base2 está disponivel no seguinte repositório do github: https://github.com/inaciose/ros_hardware_interfaces

Também existem repositórios para os firmware correspondentes aos diversos nodes de hardware interface disponiveis no repositório acima.

Existem os seguintes repositórios:

https://github.com/inaciose/rosmotor_firmware

https://github.com/inaciose/rosarm_firmware

https://github.com/inaciose/rosstepper_firmware

É provavel que no futuro estes repositórios sejam revistos.

Excluído do Mestrado de Automação Industrial

Apesar de no edital indicar que o Mestrado de Automação Industrial na Universidade de Aveiro era destinado a licenciados em engenharia electrónica, mecânica e afins, decidi candidatar-me. Quanto muito perdia os 20 euros. Pois bem. Os resultados saíram e não fui colocado.

Nova placa controladora para o braço robótico RAMK2P

Hoje estive a fazer as ligações e a testar a nova placa para o braço robótico RAMK2P. Usei uma placa perfurada de lado duplo e como não estou habituada a elas acho que fiz um mau trabalho. Tive que ir duas vezes ao ferro de soldar corrigir problemas. No final o braço robótico ficou a trabalhar conforme estava anteriormente.

Vista superior do braço robótico RAMK2P com a placa controladora
Vista superior do braço robótico RAMK2P com a placa controladora

A placa está ainda incompleta pois não tem a ligação para o servo motor da garra nem a sua alimentação independente. Só estou a prever completar a placa mais tarde. Antes de a completar estou a pensar dedicar um tempo a desenvolver o software para usar este braço com o ROS, entre o qual um node com o hardware interface usável com o ros control.

Placa para o braço ramk2p

Terminei agora a primeira fase da placa perfurada para servir de suporte à electrónica de controlo para o braço robótico Robotic Arm MK2 Plus, que é uma versão impressa em 3D do eezyBotArm Mk2 modificada para motores de passo NEMA 17, e que por vezes por conveniência designo pelo seu acrónimo RAMK2P.

Como melhoramento face ao original desenvolvi um sistema para posicionamento automático das hastes na inicialização, que se pode-se adaptar ao braço original, e um pequeno firmware para o Arduino que permite explorar o braço no ROS.

Os testes iniciais e o desenvolvimento da primeira versão do firmware para o ROS foi feita com uma placa de testes e já estava farto de tanto fio.

Placa de testes do braço robótico

Durante as experiências que fiz queimei um dos drivers A4988 e só agora, um mês depois retomei o projecto.

Placa perfurada para a electrónica de controlo do braço robótico

Na placa ainda não estão contempladas a ligação, nem a alimentação, motor servo MG90 usado como actuador na garra do braço.

Regresso às compras na china

No inicio do mês de Abril voltei a encomendar coisas na china. As novas encomendas aconteceram com o meu envolvimento em novos projectos na área da robótica. Após uma pausa de cerca de três meses que coincidiu com os três primeiros meses que se seguiram a ter largado o tabaco.

Também experimentei comprar coisas na banggood pois lá existe a possibilidade de comprar na europa, e aproveitei para comprar drivers drv8825 e fio electrico em banda vindo do Reino Unido. Chegaram as duas coisas em cerca de 12 dias. Entretanto coloquei mais duas encomendas, um pack com shield CNC, drivers drv8825 e um Arduino Uno, e 5 steppers nema 17.

Mas ontem chegou a primeira encomenda vinda da China. Uns drivers A4988 que encomendei no ebay. Mas o grosso das coisas que encomendei, e foram umas dezenas estão por chegar. Acho que têm ficado muito tempo estacionadas a espera de transporte na China e depois quando chegam a Portugal, desde a semana passada que tem estado a chegar a Portugal, devem ficar estacionadas na alfandega.

ROS diff_drive_controller

Hoje completei uma implementação de um node ROS e do firmware para o Arduino para fazer um hardware_interface com o diff_drive_controller.

Também iniciei a compilação de documentação sobre o diff_drive_controller e sobre o node com hardware_interface adequado ao controller que está incluido no pacote diff_drive_base1.

Este pacote e documentação estão enquadradas na minha aprendizagem do ROS que nos últimos dias, na sequência dos projectos com braços robóticos, se tem dedicado ao ros control, roscontrollers e respectivas hardware interfaces.

Neste momento ainda tenho alguns problemas com a configuração do diff_drive_controller, em particular o controlo do movimento do robot, por intermédio de teleop, já que não estou a conseguir fazer com que o robot faça as curvas de forma adequada. Diria que tem uma tendencia exagerada para ir a direito.

A partida entendo que seja um problema de configuração do diff_drive_controller que recebe as mensagens do tipo twist e depois tem de as converter para a velocidade a aplicar a cada um das rodas do robot.