Robots en cuarentena

Aquí, recientemente, los chicos de Habré hablaron sobre Flipper y la depuración en un osciloscopio a través de la comunicación por video.



¡Y esto, por supuesto, es una victoria fuera de competencia! Pero también tuvimos una experiencia interesante al depurar un robot ubicado a 2000 km de nosotros en un garaje de botes en la costa noruega. Debajo del corte, una historia sobre cómo hicimos visión y dictamos "cerebros en la nube" a los robots durante la cuarentena de forma remota:







En la primavera, hicimos un prototipo de todo el sistema de control remoto para transmisión 3D y entrenamiento por un robot en un YuMi a dos manos y conocimos a una empresa noruega cuya solución es muy útil para nosotros para transmitir un flujo 3D de cámaras Realsense: Aivero. Entonces, después de un período de trabajo difícil, los planes parecían despejados: volar a Italia durante un mes de invierno con mi familia, desde allí viajar a exposiciones de robótica en Europa y terminar todo con una parada de un par de semanas en una ciudad con hermosos fiordos en las cercanías: Stavanger, donde discutir la integración 3D. códecs en nuestro sistema e intentar convencer a Aivero de que ponga un par de robots juntos.



¿Qué pudo haber salido mal en este maravilloso plan ...



Sentado en cuarentena durante 2 semanas después de regresar (no sin incidentes) del encierro italiano, tuve que limpiar el polvo de mi inglés hablado y escrito y ejecutar la segunda parte del plan ya en Zoom, y no en el entorno de los fiordos.



Aunque, aquí está cómo mirar. La cuarentena obligó a muchos a comenzar a trabajar seriamente en posibles formas de automatizar donde no es difícil reemplazar a una persona. Especialmente para los países occidentales, donde el salario mínimo es superior a los 1500 euros, donde la robotización del trabajo manual simple es relevante incluso sin la situación epidemiológica actual.



Conectamos diferentes robots



Permítanme recordarles que contamos con robots entrenados que utilizan registros de control remoto. Aquellos. el robot se conecta a Internet, a nuestra nube y comienza a enviar imágenes en 3D y lecturas de sensores. Recibe comandos y los ejecuta. En esta lógica, nuestra tarea es enseñar al procesador ML a comportarse como un operador. Se necesita 3D para representar la escena en realidad virtual para el operador. Esto es conveniente y ML se vuelve mucho más preciso al agarrar objetos cuando hay un mapa de profundidad.



Como estaba planeado, podemos conectar una variedad de robots a nuestra nube, pero crear toda la variedad de ellos nosotros mismos es un camino muy espinoso. Nos enfocamos en sus cerebros, en aprender.

Como resultado, acordamos con Aivero crear un robot universal de un solo brazo con ojos 3D por sus poderes, llamémoslo "Unidad", y podemos hacer toda la robótica en la nube.



La prioridad fue la simplicidad y el costo de la solución para el cliente final. Y, por supuesto, versatilidad. Queremos minimizar el umbral de entrada para automatizar el trabajo manual simple. Idealmente, incluso el propietario de una pequeña empresa sin habilidades especiales podría comprar o alquilar nuestra "Unidad", ponerla en el lugar de trabajo y ejecutarla.



Pensamos durante un par de semanas, probamos las hipótesis durante un par de meses y esto es lo que sucedió (versión con Jetson AGX en la base y una cámara de vista general diferente a la del título):







Y un reflector más cercano:







Composición:



  • Jetson NX
  • 2 cámaras 3D Realsense (una vista general, la otra para el área de trabajo)
  • destacar
  • bomba de vacío si es necesario
  • brazo robótico (Eva / UR / ABB YuMi) con empuñadura mecánica o de vacío
  • Internet WiFi o por cable






Un soporte telescópico de este tipo con una calculadora y una bomba de vacío en la base se coloca junto al área de trabajo del robot, se conecta a Internet (por ejemplo, a través de un código QR a WiFi) e inmediatamente comienza a resolver la tarea con poca o ninguna configuración.



Aquí puede estimar el costo de inmediato. El brazo robótico Eva más asequible cuesta 8000 euros (no se suministra en Rusia), y el UR10 ya costará casi 50.000 euros, pero aquí debe tenerse en cuenta que UR reclama una fiabilidad mucho mayor, por lo que puede que no sea mucho más caro a largo plazo. Y últimamente se están volviendo más baratos. El resto del kit cuesta unos 2000 euros.



ABB YuMi IRB 14050



Anteriormente tratamos con un YuMi de dos manos , pero aquí probamos una nueva versión del IRB14050, que es esencialmente solo una mano cortada.





Brevemente lo que me gustó:



  • precisión y mano de obra mecánica
  • alta sensibilidad a las colisiones y amortiguadores en las articulaciones


y no me gustó:



  • difícil de resolver de forma remota colisiones y situaciones de emergencia
  • el pequeño movimiento angular de algunas articulaciones dificulta las trayectorias para movimientos aparentemente simples, que no son difíciles para la cinemática de otros brazos de 6 coordenadas
  • baja capacidad de carga en comparación con análogos
  • además, requiere cargar (y a veces depurar) un programa en su propio lenguaje de programación de ABB, que procesa comandos TCP desde una computadora


Y no brevemente.



Aquí es donde pasamos más tiempo. La receta de cómo lanzar no es nada sencilla:



  1. Tome una máquina con Windows porque de lo contrario, no podrá instalar RobotStudio de ABB.
  2. https://github.com/BerkeleyAutomation/yumipy RAPID ( ABB) ( , ), python API YuMi IRB 14050 IRB 14000.
  3. , IRB14000 urdf ROS moveit. IRB14000, IRB14050.

  4. ROS moveit Python API .
  5. FlexPendant for OmniCore, .


Pero, por supuesto, esta es solo una posible trayectoria de cómo se puede hacer que YuMi obedezca, y todas las pequeñas cosas en las que puedes tropezar no deben mencionarse aquí, por supuesto.



Eva







Brevemente lo que nos gustó:



  • Por supuesto el precio
  • API simple y concisa


Y los contras:



  • sin detección de colisiones (anunciado en el comunicado de otoño)
  • precisión de posicionamiento: el fabricante aún debe trabajar en ello, pero tenemos suficiente



Por supuesto, la facilidad de gestión cautiva:



pip install evasdk 


y



import evasdk
eva = evasdk.Eva(host_ip, token)

with eva.lock():
    eva.control_wait_for_ready()
    eva.control_go_to([0, 0, 0, 0, 0, 0])


¡Y el brazo robótico está fuera! y realiza.



No, por supuesto, luego pudimos desbordar los registros en el controlador de mano, después de lo cual dejó de escuchar. Pero debemos rendir homenaje al fabricante: la creación de un problema en su gita fue suficiente para que entendieran las razones (y provocó un par de llamadas con todo un consejo sobre nuestros problemas).



¡Y en general, Automata (productor de Eva) es genial! Espero que puedan crecer y desarrollarse más en el mercado de la robótica, haciendo que los robots sean mucho más asequibles y fáciles de lo que son ahora.



UR





Gustó:



  • excelente mecánica y alta precisión

  • grandes rangos de ángulos de articulación, lo que facilita la planificación de la trayectoria

  • las colisiones se pueden resolver en VNC Viewer conectándose a la computadora del robot

  • bien depurado en infraestructura ROS


Desventajas:



  • SO obsoleto en el controlador UR, no ha habido actualizaciones de seguridad durante aproximadamente un año y medio
  • todavía no es la forma de comunicación más moderna, aunque está bien cubierta por las bibliotecas abiertas disponibles


Desde Python, el brazo robótico está disponible en dos escenarios principales:



  1. Instale https://github.com/SintefManufacture/python-urx y disfrute. El listado es un poco más largo que en el caso de evasdk, así que no lo daré. También se conocen problemas de compatibilidad con los nuevos brazos robóticos, a juzgar por el rastreador de problemas. Algo que también tenía que corregir usted mismo, tk. no todos los modos de movimiento se implementaron en la biblioteca, pero son sutilezas.

  2. “ROS-” (https://github.com/ros-industrial/universal_robot). , ROS , : UR moveit ( ROS, , , ).



Intentamos evitar ROS porque parte de sus funciones (intermediario de mensajes) las realiza rabbitmq en nuestro sistema, y ​​existe una seria complicación en la pila de tecnología utilizada. Entonces, para el caso en el que necesite sortear obstáculos, encapsulamos ROS en un microservicio en el lado del servidor.



¡Ahora el truco!



Para que lo entiendas, UR es: es







decir. se permite cualquier estornudo en el panel táctil del robot. Y para torturar a nuestro colega de Aivero no 5 veces al día, conduciendo hasta el garaje del barco, es necesario entrar de alguna manera de forma remota.



Resultó que el controlador UR tiene Linux instalado (y por cierto, no es el procesador x86 más débil).

Tecleamos ssh IP ... usuario: root, contraseña: easybot.



Y estás en Debian Wheezy.



¡Así que tomamos e instalamos el servidor VNC y nos encontramos con el maestro completo del robot! (Aquí solo es necesario tener en cuenta que Wheezy no se ha actualizado desde hace 2 años y no podrá simplemente tomar e instalar un servidor vnc debido a registros obsoletos. Pero hay un enlace al "archivo mágico" que le permite hacer esto).



Por cierto, Universal Robots, cuando les mostramos nuestra demostración, dijo que tal control remoto requiere un nuevo procedimiento de certificación de seguridad. Lo suficientemente justo. Es muy curioso cómo le está yendo a Smart Robotics con esto en general. No puedo imaginar que las variables de orientación de la visión por computadora puedan ser 100% seguras para otros.



Es hora de enseñar al robot a agarrar las cajas



Permítanme recordarles que estamos mostrando lo que debe hacer un robot en realidad virtual:





Aquellos. para cada movimiento hemos registrado cómo se veía la escena y qué tipo de comando era, por ejemplo, esto:



{“op": "pickup_putdown_box", 
"pos1": [441.1884, -112.833069, 151.29303],
"pos2": [388.1267, 91.0179138, 114.847595],
"rot1": [[0.9954941, 0.06585537, -0.06822499], [0.0917332, -0.851038456, 0.517028868], [-0.0240128487, -0.52095747, -0.85324496]],
"rot2": [[0.992139041, 0.102700718, -0.07150351], [0.100485876, -0.99436, -0.0339238755], [-0.0745842, 0.026472155, -0.996863365]],
"calibration": [[-0.01462146, 0.9814359, -0.191232175, 551.115051], [0.9987302, 0.0051134224, -0.0501191653, -6.613386], [-0.0482108966, -0.191722155, -0.9802644, 771.933167]],
"box": [[474.331482, -180.079529, 114.765076], [471.436157, -48.88102, 188.729553], [411.868164, -180.27713, 112.670532], [476.105164, -148.54512, 58.89856]],
"source": "operator"}


En general, esto es suficiente para que entrenemos las cuadrículas para determinar el cuadro delimitador de un objeto en el espacio y dónde agarrarlo.



Así que nos sentamos durante media hora y le mostramos al robot cómo hacer malabares con 4 tipos de cajas, obtenemos alrededor de 100 ejemplos. Pulsamos el botón mágico ... bueno, más precisamente sudo docker run -e INPUT_S3_FOLDER = ... OUTPUT_S3_FOLDER = ... rembrain / train_all_stages: dev . Y vamos a dormir. Por la mañana, la ventana acoplable envía un mensaje al procesador ML para actualizar los pesos, y con la respiración contenida (aunque los fabricantes dieron a los robots pruebas gratuitas, cuestan mucho dinero), lanzamos y ...







OOPS ...



Debo decir que ni un solo robot resultó dañado durante la depuración. Creo que se debe únicamente a una suerte increíble.



Un día, mi hijo de 2 años se acercó y decidió jugar con el rastreador de realidad virtual. Se subió a una silla, la tomó del alféizar de la ventana ... Y envió a la UR10 a un viaje inimaginable, empujando la barra de la cámara a un lado y colocando el brazo robótico en una posición bastante complicada. Entonces tuve que agregar algunos fusibles a los controles. Y la segunda cámara de observación, tk. de lo contrario, a veces simplemente no es visible dónde se ha ido la mano y si es posible moverla.



Y si no es una broma, entonces la precisión de detección de cuadros tan simples en nuestras pruebas superó el 99,5% incluso con una pequeña muestra de entrenamiento de varios cientos de ejemplos. La principal fuente de problemas aquí ya no es la visión por computadora, sino las dificultades concomitantes: por ejemplo, algunas anomalías en la disposición inicial de los objetos o interferencias no intencionales en el marco. Pero luego creamos un sistema de aprendizaje con operadores en bucle para estar preparados para cualquier cosa, resolviendo problemas sin involucrar a personas vivas en el acto.



Un algoritmo más, sobre mi estar en el backend y un error en el frontend de la interfaz de usuario




bin-picking «bin-stuffing», .. . — . , .



, , . . .. , , . , .



, . , ( , ). - :







, .. , :







Backend



, websocket-, :







, Coordinator . , Rabbit mongoDB, , ( ). , .



, , backend- , ML .



UI



. , UI , . .



AWS console, Yandex console, , , , . .



, .



, -> -> , , , -> , .







, “”. , UX . — . UI robot Console .



Que sigue



Grabamos un video de la instalación y configuración del robot en 2 minutos, preparamos materiales para la promoción en varios tipos de tareas.



Al mismo tiempo, buscamos nuevas aplicaciones prácticas además del popular y comprensible bin-picking (yo personalmente sueño con usar robots en una obra).



Creo que en unos meses nos vestiremos mejor, aprenderemos a vender nuestra solución a las aplicaciones más diversas y construiremos nuestro cerebro en la nube ladrillo a ladrillo en el entorno monstruosamente competitivo de empresas que hacen robots inteligentes, lo cual es una buena noticia.



¡Entonces la cuarentena fue buena!



All Articles