Brazo robot de bricolaje barato y completamente funcional

Hagamos una reserva de inmediato que no lo haremos muy barato, porque No quiero matar las células nerviosas haciendo codificadores para motores de cosecha propia + Quiero simplificar la creación de un modelo 3D, que es necesario para el control a través de ROS (enlace al modelo terminado, a continuación en el artículo).



En el momento de escribir este artículo, el costo final estimado del producto es de ~ 70,000 rublos. Si tiene una impresora 3D, puede deducir con seguridad 20,000 rublos de ella. Si no hay impresora, su apariencia será una ventaja agradable. Describiré todos los gastos asumiendo que no tenemos más que dinero.



Cómo se ve el resultado:







También debe tenerse en cuenta que para programar la mano, necesitamos una computadora con el sistema operativo Linux instalado (estoy usando Ubuntu 18.04) y el marco ROS (estoy usando Melodic).



Puede surgir la pregunta "¿por qué 70 mil rublos es barato?"



Respondo.Inicialmente, no quería molestarme en crear un brazo robótico y pensé en comprar algo simple, pero lo suficientemente funcional para ensamblar.



¿Cuáles fueron los criterios de funcionalidad y la simplicidad mínima aceptable para mí (es decir, por qué los manipuladores de aliexpress NO son adecuados)? Se puede discutir en los comentarios para no ser una carga para aquellos que son obvios y / o no están interesados.



Soluciones competitivas en el mercado



Sin embargo, describiré brevemente ejemplos de lo que consideré en el mercado:



1) top3dshop.ru/robots/manipulators/dobot-magician-basic.html

176,000 rublos. Puedes comprar DOBOT no solo en esta tienda, sino que normalmente cuesta aún más. Seguramente existe la posibilidad de encontrarlo en algún lugar más barato, pero seguirá siendo mucho más caro que 70.000 rublos.



2) robotbaza.ru/product/robot-manipulyator-widowx-robotic-arm-mark-ii

280.000 rublos. Aún más caro. En general, los manipuladores de TossenRobotics directamente del fabricante cuestan mucho dinero. Pero no se puede pedir la entrega a Rusia (y yo estuve aquí) desde su tienda.



Avanzando un poco, diré que haremos una copia del kit de brazo robótico PhantomX Pincher Mark II, que es producido por TossenRobotics.



En total, vemos que 70.000 rublos no es tan caro en absoluto.



¿Qué necesitamos comprar?



Cito todos los precios en el momento de escribir este artículo (julio de 2020):



1) 6 motores DYNAMIXEL AX-12A







que compré a un precio de 7200 rublos por unidad, pero parece que puedes encontrarlo por 6000 si realmente quieres. Supongamos que tiene mala suerte y que también comprará por 7200.

Costo total: 43.200 rublos



2) Impresora 3D.



Cualquiera simple servirá, puede mantener dentro de 20.000 rublos.



3) Arduino Uno + Power Shield











Costo: ~ 4.000 rublos



4) Opcional (pero lo recomiendo mucho): Suministro de energía de laboratorio







Costo: ~ 3500 rublos



Montaje



¡Excelente! Compramos todo lo que necesitábamos (probablemente la espera más larga para la entrega de los motores, me los transportaron por más de un mes).



¿Que sigue?



1) Imprimamos piezas para el manipulador en una impresora 3D.



Descarga archivos STL desde aquí



2) Poniéndolo junto con motores. No debería haber problemas con el ensamblaje, pero si aparecen de repente, puede usar esta instrucción.



Haciendo un modelo 3D



¡Clase! Tenemos una mano, pero hay que manejarla de alguna manera. Me gustaría aprovechar al máximo los logros de la humanidad, así que instalaremos ROS para nosotros .



Para trabajar completamente con el manipulador en ROS, debe convertirlo en un modelo URDF . ¡Lo necesitaremos para controlar el brazo robótico usando el paquete MoveIT!

En el momento de escribir este artículo, la última compilación estable está disponible para Melodic / Ubuntu 18.04, lo que explica mi elección del sistema y la versión del marco al principio del artículo.



Construir un modelo URDF es una parte bastante laboriosa (y, en mi opinión, la más aburrida) de este proyecto. Es necesario terminar un poco con un archivo stl de los modelos de componentes y conectarlos en un archivo en forma de XML, seleccionando manualmente los coeficientes correctos de desplazamiento de las partes entre sí.



Cualquiera que quiera puede hacer el trabajo por su cuenta, salvaré los nervios de todos los demás y solo daré un enlace a mi archivo terminado:



github.com/vladmiron85/armbot/blob/master/catkin_ws/src/armbot_description/urdf/base.urdf



Este modelo aún no es emocionante dispositivos, sin embargo, hasta el momento de capturar objetos en el mundo real, todavía estamos muy lejos. Para otras tareas, este modelo es más que suficiente.



El modelo se ve así:





A partir del archivo URDF resultante, realizaremos la configuración MoveIT!, Que nos permitirá simular los movimientos del manipulador y enviar comandos de control a un brazo robótico real.



Hay un excelente tutorial para crear una configuración ( enlace )



Aquí puedo volver a ahorrar tiempo y proporcionar mi configuración. Se encuentra aquí:



github.com/vladmiron85/armbot/tree/master/catkin_ws/src/armbot_moveit_config



Puede descargar la configuración desde github y ejecutarla con el siguiente comando:



roslaunch armbot_moveit_config demo.launch


Algo como esto será posible para controlar nuestra mano robot real a través de rviz cuando lo conectemos a ROS:





¿Qué pasa con la mano real?



Pasemos del mundo de los modelos 3D a la cruda realidad. Disponemos de un manipulador previamente montado. Me gustaría moverlo de alguna manera. Hagamos esto con Arduino UNO y Power Shield.



Conectemos el primer motor del manipulador (que está abajo) al Power Shield y la fuente de alimentación de la siguiente manera:







Sí, conectaremos el pin de datos del motor directamente a los pines 3 y 4 del Arduino. Un lector curioso del manual de Dynamixel ( aquí está ) notará inmediatamente que la comunicación con el mundo exterior en el motor está organizada de acuerdo con la comunicación serial asíncrona Half Duplex, lo que significa que el pin de datos se usa inmediatamente para recibir comandos y para responder.



De forma predeterminada, a nivel de hardware, Arduino solo puede funcionar con Full Duplex UART. Este problema puede evitarse utilizando la biblioteca Soft Serial, lo que haremos. Es el uso del modo Half Duplex lo que explica la conexión del pin de datos del motor a los 3 y 4 pines del blindaje simultáneamente.



Además de la comunicación semidúplex, trabajar con Dynamixel a través de Arduino tiene un par de puntos interesantes que pueden no ser del todo obvios desde el principio. Reunámoslos a todos.



¿Cómo mover nuestro manipulador?



1) Primero, descargue la biblioteca requerida. Se llama ardyno y se puede obtener a través del Administrador de bibliotecas de Arduino, o aquí ( enlace )



2) De forma predeterminada, Dynamixel AX-12A quiere trabajar con una velocidad en baudios = 1000000. Sin embargo, la interfaz serial del software no admitirá esta velocidad, por lo que la velocidad en baudios debe reducirse a 57600. Por lo tanto, el comienzo del archivo con su programa se verá así:



#include "DynamixelMotor.h"

// communication baudrate
const long unsigned int baudrate = 57600;

SoftwareDynamixelInterface interface(3, 4);


3) Todos nuestros motores están conectados en serie entre sí. Entonces, para poder abordar cada uno de ellos, ¿necesita saber su ID? Este es efectivamente el caso, el objeto DynamixelMotor recibe dos parámetros durante la inicialización: interfaz (igual para todos, lo configuramos en el párrafo anterior) e id (todos deben tener diferente, de lo contrario el comportamiento del manipulador será muy extraño)



DynamixelMotor motor(interface, id);


La identificación de cada motor deberá configurarse manualmente. Parece que, al estar conectados en serie, podrían haberse calculado a sí mismos utilizando números del 1 al 6, pero esto no se proporciona. Por lo tanto, debe conectar cada motor por separado al Arduino (desconectando del resto) y ejecutar el siguiente 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 los motores tienen id = 1, por eso indicamos en la parte superior



const uint8_t id=1;


NEW_ID para cada motor debe reemplazarse con un número del 1 al 6 (sí, está bien, el primer motor se puede dejar solo). Los numeramos en orden de abajo hacia arriba.



¡Hurra! tenemos un manipulador completo que podemos mover, y también tenemos un modelo 3D para él. Puede tomar ROS y programar cualquier cosa interesante. Pero esta ya es una historia para un artículo separado (y no uno). Esta historia ha llegado a su fin, ¡gracias por su atención!



All Articles