Índice:

ROS MoveIt Robotic Arm - Parte 2: Robot Controller: 6 etapas
ROS MoveIt Robotic Arm - Parte 2: Robot Controller: 6 etapas

Vídeo: ROS MoveIt Robotic Arm - Parte 2: Robot Controller: 6 etapas

Vídeo: ROS MoveIt Robotic Arm - Parte 2: Robot Controller: 6 etapas
Vídeo: Robotic Arms Workflow of MoveIt2 with ROS2 for Motion Planning 2024, Novembro
Anonim
Image
Image

github.com/AIWintermuteAI/ros-moveit-arm.git

Na parte anterior do artigo, criamos arquivos URDF e XACRO para nosso braço robótico e lançamos o RVIZ para controlar nosso braço robótico em ambiente simulado.

Desta vez faremos isso com o braço robótico de verdade! Vamos adicionar a garra, escrever um controlador de robô e (opcional) gerar o solucionador de cinemática inversa IKfast.

Geronimo!

Etapa 1: Adicionando a garra

Adicionando a garra
Adicionando a garra
Adicionando a garra
Adicionando a garra
Adicionando a garra
Adicionando a garra

Adicionar a garra foi um pouco confuso no início, então pulei esta parte no artigo anterior. Afinal, não foi tão difícil.

Você precisará modificar seu arquivo URDF para adicionar links de garras e juntas.

O arquivo URDF modificado para meu robô está anexado a esta etapa. Basicamente, segue a mesma lógica da parte do braço, acabei de adicionar três novos links (claw_base, claw_r e claw_l) e três novas juntas (joint5 é fixo, e joint6, joint7 são articulações de rotação).

Depois de modificar o arquivo URDF, você também precisará atualizar o pacote gerado pelo MoveIt e o arquivo xacro usando o assistente de configuração do MoveIt.

Inicie o assistente de configuração com o seguinte comando

roslaunch moveit_setup_assistant setup_assistant.launch

Clique em Editar configuração existente do MoveIt e escolha a pasta com o pacote do MoveIt.

Adicione uma nova garra de grupo de planejamento (com links e juntas para a garra) e também um efetor final. Minhas configurações estão nas imagens abaixo. Observe que você não escolhe o solucionador de cinemática para a garra, isso não é necessário. Gere o pacote e substitua os arquivos.

Corre

fazer gato

comando em seu espaço de trabalho catkin.

Tudo bem, agora temos um braço com uma pinça!

Etapa 2: Construindo o Braço

Construindo o braço
Construindo o braço
Construindo o braço
Construindo o braço
Construindo o braço
Construindo o braço
Construindo o braço
Construindo o braço

Como mencionei antes, o modelo 3D do braço é feito por Juergenlessner, obrigado por um trabalho incrível. As instruções de montagem detalhadas podem ser encontradas se você seguir o link.

Tive que modificar o sistema de controle. Eu uso o Arduino Uno com escudo do sensor para controlar servos. A blindagem do sensor ajuda muito a simplificar a fiação e também facilita o fornecimento de energia externa aos servos. Eu uso um adaptador de energia 12V 6A conectado através do módulo abaixador (6V) para a blindagem do sensor.

Uma nota sobre servos. Eu uso servos MG 996 HR comprados da Taobao, mas a qualidade é muito ruim. É definitivamente uma imitação chinesa barata. O da articulação do cotovelo não forneceu torque suficiente e até começou a fumegar uma vez sob carga pesada. Tive que substituir o servo de articulação de cotovelo por MG 946 HR de um fabricante de melhor qualidade.

Resumindo a história - compre servos de qualidade. Se fumaça mágica sai de seus servos, use servos melhores. 6V é uma tensão muito segura, não a aumente. Isso não aumentará o torque, mas pode danificar os servos.

Fiação para servos da seguinte forma:

base 2

ombro2 4 ombro1 3

cotovelo 6

garra 8

pulso 11

Sinta-se à vontade para alterá-lo, desde que você também se lembre de alterar o esboço do Arduino.

Depois de terminar com o hardware, vamos dar uma olhada no quadro geral!

Etapa 3: Interface do MoveIt RobotCommander

Interface MoveIt RobotCommander
Interface MoveIt RobotCommander

Então, e agora? Por que você precisa do MoveIt e do ROS? Você não pode simplesmente controlar o braço por meio do código do Arduino diretamente?

Sim você pode.

Ok, agora que tal usar código GUI ou Python / C ++ para fornecer pose de robô para ir? O Arduino pode fazer isso?

Tipo de. Para isso, você precisará escrever um solucionador de cinemática inversa que fará uma pose de robô (coordenadas de translação e rotação no espaço 3D) e a converterá em mensagens de ângulo de junta para servos.

Apesar de você mesmo poder fazer isso, é um trabalho árduo. Portanto, o MoveIt e o ROS fornecem uma interface agradável para o solver IK (cinemática inversa) para fazer todo o levantamento trigonométrico pesado para você.

Resposta curta: Sim, você pode fazer um braço robótico simples que executará um esboço do Arduino embutido em código para ir de uma pose para outra. Mas se você deseja tornar seu robô mais inteligente e adicionar recursos de visão computacional, o MoveIt e ROS é o caminho a percorrer.

Fiz um diagrama muito simplificado explicando como a estrutura MoveIt funciona. No nosso caso, será ainda mais simples, já que não temos feedback de nossos servos e vamos usar o tópico / joint_states para fornecer ao controlador do robô os ângulos para os servos. Só falta um componente que é o controlador do robô.

O que estamos esperando? Vamos escrever alguns controladores de robô, para que nosso robô seja … você sabe, mais controlável.

Etapa 4: Código Arduino para o controlador do robô

Código Arduino para controlador de robô
Código Arduino para controlador de robô
Código Arduino para controlador de robô
Código Arduino para controlador de robô
Código Arduino para controlador de robô
Código Arduino para controlador de robô

Em nosso caso, o Arduino Uno executando um nó ROS com rosserial será o controlador do robô. O código de esboço do Arduino está anexado a esta etapa e também disponível no GitHub.

O nó ROS em execução no Arduino Uno basicamente se inscreve no tópico / JointState publicado no computador que executa o MoveIt e, em seguida, converte os ângulos de junta da matriz de radianos para graus e os passa para servos usando a biblioteca Servo.h padrão.

Esta solução é um pouco hacky e não como é feita com robôs industriais. O ideal é que você publique a trajetória do movimento no tópico / FollowJointState e, em seguida, receba o feedback no tópico / JointState. Mas em nosso braço, os servos hobby não podem fornecer o feedback, então vamos apenas assinar diretamente o tópico / JointState, publicado pelo nó FakeRobotController. Basicamente, estaremos assumindo que todos os ângulos que passamos para os servos são executados de maneira ideal.

Para obter mais informações sobre como funciona o rosserial, você pode consultar os seguintes tutoriais

wiki.ros.org/rosserial_arduino/Tutorials

Depois de fazer o upload do esboço para o Arduino Uno, você precisará conectá-lo com o cabo serial ao computador que executa a instalação do ROS.

Para abrir todo o sistema, execute os seguintes comandos

roslaunch my_arm_xacro demo.launch rviz_tutorial: = true

sudo chmod -R 777 / dev / ttyUSB0

rosrun rosserial_python serial_node.py _port: = / dev / ttyUSB0 _baud: = 115200

Agora você pode usar marcadores interativos no RVIZ para mover o braço do robô para uma pose e, em seguida, pressionar Planejar e Executar para que ele realmente se mova para a posição.

Magia!

Agora estamos prontos para escrever o código Python para nosso teste de rampa. Bem, quase…

Etapa 5: (opcional) Gerando o plug-in IKfast

Por padrão, o MoveIt sugere o uso do solucionador de cinemática KDL, que realmente não funciona com menos de 6 braços de DOF. Se você seguir este tutorial de perto, notará que o modelo de braço no RVIZ não pode ir para algumas poses que deveriam ser suportadas pela configuração do braço.

A solução recomendada é criar um solucionador de cinemática personalizado usando OpenRave. Não é tão difícil, mas você terá que construí-lo e suas dependências a partir do código-fonte ou usar o contêiner docker, o que você preferir.

O procedimento está muito bem documentado neste tutorial. Ele está confirmado para funcionar em VM executando Ubuntu 16.04 e ROS Kinetic.

Usei o seguinte comando para gerar o solucionador

openrave.py --database inversekinematics --robot = arm.xml --iktype = translation3d --iktests = 1000

e então correu

rosrun moveit_kinematics create_ikfast_moveit_plugin.py test_robot arm my_arm_xacro ikfast0x1000004a. Translation3D.0_1_2_f3.cpp

para gerar o plug-in IKfast do MoveIt.

Todo o procedimento consome um pouco de tempo, mas não é muito difícil se você seguir o tutorial de perto. Se você tiver dúvidas sobre esta parte, entre em contato comigo nos comentários ou PM.

Etapa 6: O teste de rampa

O teste de rampa!
O teste de rampa!
O teste de rampa!
O teste de rampa!

Agora estamos prontos para experimentar o teste de rampa, que executaremos usando a API ROS MoveIt Python.

O código Python está anexado a esta etapa e também disponível no repositório github. Se você não tiver uma rampa ou quiser tentar outro teste, precisará alterar as poses do robô no código. Para aquele primeiro execute

eco rostopic / rviz_moveit_motion_planning_display / robot_interaction_interactive_marker_topic / feedback

no terminal quando já estiver executando RVIZ e MoveIt. Em seguida, mova o robô com marcadores interativos para a posição desejada. Os valores de posição e orientação serão exibidos no terminal. Basta copiá-los para o código Python.

Para executar o teste de rampa

rosrun my_arm_xacro pick / pick_2.py

com RVIZ e nó rosserial já em execução.

Fique ligado na terceira parte do artigo, onde usarei uma câmera estéreo para detecção de objetos e executarei pick and place pipeline para objetos simples!

Recomendado: