No momento em que este artigo foi escrito, o custo final estimado do produto era de aproximadamente 70.000 rublos. Se você tiver uma impressora 3D, poderá deduzir 20.000 rublos dela com segurança. Se não houver impressora, sua aparência será um bônus agradável. Descreverei todas as despesas presumindo que não temos nada além de dinheiro.
O que parece o resultado:
Também deve ser notado que para programar a mão, precisamos de um computador com sistema operacional Linux instalado (estou usando Ubuntu 18.04) e o framework ROS (estou usando Melodic).
Pode surgir a pergunta "por que 70 mil rublos é barato?"
Eu respondo.Inicialmente, não quis me incomodar em criar um braço robótico e pensei em apenas comprar algo simples, mas funcional o suficiente para montar.
Quais foram os critérios de funcionalidade e a simplicidade mínima aceitável para mim (ou seja, porque os manipuladores do aliexpress NÃO são adequados) podem ser discutidos nos comentários para não sobrecarregar aqueles que são óbvios e / ou não interessados.
Soluções competitivas no mercado
Descreverei, no entanto, brevemente exemplos do que considerei no mercado:
1) top3dshop.ru/robots/manipulators/dobot-magician-basic.html
176.000 rublos. Você pode comprar DOBOT não apenas nesta loja, mas geralmente custa ainda mais. Certamente há uma chance de encontrá-lo em algum lugar mais barato, mas ainda assim será muito mais caro do que 70.000 rublos.
2) robotbaza.ru/product/robot-manipulyator-widowx-robotic-arm-mark-ii
280.000 rublos. Ainda mais caro. Em geral, os manipuladores da TossenRobotics diretamente do fabricante custam dinheiro supérfluo. Mas a entrega para a Rússia (e eu estava aqui) de sua loja não pode ser encomendada.
Avançando um pouco, direi que faremos uma cópia do PhantomX Pincher Robot Arm Kit Mark II, que é produzido pela TossenRobotics.
No total, vemos que 70.000 rublos não é tão caro assim.
O que precisamos comprar?
Cito todos os preços no momento da redação deste artigo (julho de 2020):
1) 6 motores DYNAMIXEL AX-12A
que comprei a 7200 rublos por 1 peça, mas parece que você pode encontrá-los por 6000 se realmente quiser. Vamos supor que você tenha azar e também comprará por 7200.
Custo total: 43.200 rublos
2) Impressora 3D
Qualquer uma serve , você pode manter dentro de 20.000 rublos.
3) Arduino Uno + Power Shield
Custo: ~ 4.000 rublos
4) Opcional (mas eu recomendo fortemente): Fonte de alimentação de laboratório
Custo: ~ 3.500 rublos
Montagem
Excelente! Compramos tudo o que precisávamos (provavelmente a mais longa espera pela entrega dos motores, eles foram transportados para mim por mais de um mês).
Qual é o próximo?
1) Vamos imprimir as peças do manipulador em uma impressora 3D.
Baixe os arquivos STL aqui
2) Juntando os motores. Não deve haver problemas com a montagem, mas se eles aparecerem de repente, você pode usar esta instrução.
Fazendo um modelo 3D
Classe! Temos uma mão, mas ela precisa ser controlada de alguma forma. Eu gostaria de aproveitar ao máximo as conquistas da humanidade, então vamos instalar o ROS para nós mesmos .
Para trabalhar totalmente com o manipulador em ROS, você precisa torná-lo um modelo URDF . Vamos precisar dele para controlar o braço robótico usando o pacote MoveIT!
No momento em que este artigo foi escrito, a última compilação estável estava disponível para Melodic / Ubuntu 18.04, o que explica minha escolha do sistema e da versão do framework no início do artigo.
Construir um modelo URDF é uma parte bastante trabalhosa (e, na minha opinião, a mais entediante) deste projeto. É necessário finalizar um pouco com um arquivo stl dos modelos de componentes e conectá-los em um arquivo XML, selecionando manualmente os coeficientes corretos de deslocamento das peças em relação umas às outras.
Quem quiser fazer o trabalho por conta própria, vou poupar os nervos de todos e apenas dar um link para meu arquivo concluído:
github.com/vladmiron85/armbot/blob/master/catkin_ws/src/armbot_description/urdf/base.urdf
Este modelo ainda não é empolgante dispositivos, porém, até o momento de capturar objetos do mundo real, ainda estamos longe. Para outras tarefas, este modelo é mais que suficiente.
O modelo se parece com este:
A partir do arquivo URDF resultante, faremos o MoveIT! Config, que nos permitirá simular os movimentos do manipulador e enviar comandos de controle para um braço robótico real.
Há um excelente tutorial para criar uma configuração ( link ).
Aqui posso novamente economizar tempo e fornecer minha configuração. Ele encontra-se aqui:
github.com/vladmiron85/armbot/tree/master/catkin_ws/src/armbot_moveit_config
Você pode baixar a configuração do github e executá-la com o seguinte comando:
roslaunch armbot_moveit_config demo.launch
Algo assim será possível controlar nossa mão robo real através do rviz quando o conectarmos ao ROS:
E a mão real?
Vamos passar do mundo dos modelos 3D para a dura realidade. Temos um manipulador previamente montado. Eu gostaria de movê-lo de alguma forma. Vamos fazer isso com o Arduino UNO e Power Shield. Vamos
conectar o primeiro motor do manipulador (que está abaixo) ao Power Shield e à fonte de alimentação da seguinte maneira:
Sim, vamos conectar o pino de dados do motor diretamente aos 3 e 4 pinos do Arduino. Um leitor curioso do manual Dynamixel ( aqui está ele ) perceberá imediatamente que a comunicação com o mundo externo no motor é organizada de acordo com a comunicação serial assíncrona Half Duplex, o que significa que o pino de dados é usado imediatamente para receber comandos e para responder.
Por padrão, no nível do hardware, o Arduino só pode funcionar com Full Duplex UART. Esse problema pode ser contornado usando a biblioteca Soft Serial, o que faremos. É o uso do modo Half Duplex que explica a conexão do pino de dados do motor aos 3 e 4 pinos da blindagem ao mesmo tempo.
Além da comunicação half-duplex, trabalhar com Dynamixel via Arduino tem alguns pontos interessantes que podem não ser totalmente óbvios desde o início. Vamos juntá-los todos.
Como mover nosso manipulador?
1) Primeiro, baixe a biblioteca necessária. Chama-se ardyno e pode ser obtido através do Arduino Library Manager, ou aqui ( link )
2) Por padrão, Dynamixel AX-12A deseja trabalhar com taxa de transmissão = 1000000. No entanto, a interface serial do software não suporta esta velocidade, então a taxa de transmissão deve ser reduzida para 57600. Assim, o início do arquivo com seu programa será parecido com isto:
#include "DynamixelMotor.h"
// communication baudrate
const long unsigned int baudrate = 57600;
SoftwareDynamixelInterface interface(3, 4);
3) Todos os nossos motores são conectados em série uns com os outros. Então, para abordar cada um deles, você precisa saber seu ID? Este é realmente o caso, o objeto DynamixelMotor recebe dois parâmetros durante a inicialização: interface (igual para todos, nós configuramos no parágrafo anterior) e id (todos devem ter diferentes, caso contrário o comportamento do manipulador será muito estranho)
DynamixelMotor motor(interface, id);
Id para cada motor terá que ser definido manualmente. Parece que, estando conectados em série, eles poderiam ter se calculado usando números de 1 a 6, mas isso não é fornecido. Portanto, você precisa conectar cada motor separadamente ao Arduino (desconectando do resto) e executar o seguinte programa:
#include "DynamixelMotor.h"
// communication baudrate
const long unsigned int baudrate = 57600;
// id of the motor
const uint8_t id=1;
SoftwareDynamixelInterface interface(3, 4);
DynamixelMotor motor(interface, id);
void setup()
{
interface.begin(baudrate);
delay(100);
// check if we can communicate with the motor
// if not, we turn the led on and stop here
uint8_t status=motor.init();
if(status!=DYN_STATUS_OK)
{
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, HIGH);
while(1);
}
motor.changeId(NEW_ID);
}
void loop()
{}
Inicialmente, todos os motores têm id = 1, razão pela qual indicamos no topo
const uint8_t id=1;
NEW_ID para cada motor deve ser substituído por um número de 1 a 6 (sim, ok, o primeiro motor pode ser deixado sozinho). Nós os numeramos em ordem de baixo para cima.
Hooray! temos um manipulador completo que podemos mover e também um modelo 3D para ele. Você pode pegar o ROS e programar qualquer coisa legal. Mas esta já é uma história para um artigo separado (e não um). Essa história chegou ao fim, obrigado pela atenção!