ROS MoveIt Robotic Arm Parte 2: Controlador de robot: 6 pasos
ROS MoveIt Robotic Arm Parte 2: Controlador de robot: 6 pasos
Anonim
Image
Image

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

En la parte anterior del artículo hemos creado archivos URDF y XACRO para nuestro brazo robótico y lanzamos RVIZ para controlar nuestro brazo robótico en un entorno simulado.

¡Esta vez lo haremos con el brazo robótico real! Agregaremos la pinza, escribiremos un controlador de robot y (opcional) generaremos un solucionador de cinemática inversa IKfast.

Geronimo!

Paso 1: Adición de la pinza

Agregar la pinza
Agregar la pinza
Agregar la pinza
Agregar la pinza
Agregar la pinza
Agregar la pinza

Agregar pinza fue un poco confuso al principio, así que me salté esta parte en el artículo anterior. Después de todo, resultó no ser tan difícil.

Deberá modificar su archivo URDF para agregar enlaces y uniones de pinza.

El archivo URDF modificado para mi robot se adjunta a este paso. Básicamente, sigue la misma lógica que la parte del brazo, acabo de agregar tres nuevos enlaces (claw_base, claw_r y claw_l) y tres nuevas uniones (joint5 es fijo, y joint6, joint7 son uniones de revolución).

Después de modificar su archivo URDF, también deberá actualizar el paquete generado por MoveIt y el archivo xacro utilizando el asistente de configuración MoveIt.

Inicie el asistente de configuración con el siguiente comando

roslaunch moveit_setup_assistant setup_assistant.launch

Haga clic en Editar configuración MoveIt existente y elija la carpeta con su paquete MoveIt.

Agregue una nueva pinza de grupo de planificación (con eslabones y juntas para la pinza) y también un efector final. Mi configuración está en las capturas de pantalla a continuación. Tenga en cuenta que no elige un solucionador de cinemática para la pinza, no es necesario. Genere el paquete y sobrescriba los archivos.

Correr

hacer amento

comando en su espacio de trabajo catkin.

Muy bien, ¡ahora tenemos un brazo con una pinza!

Paso 2: Construyendo el Brazo

Construyendo el Brazo
Construyendo el Brazo
Construyendo el Brazo
Construyendo el Brazo
Construyendo el Brazo
Construyendo el Brazo
Construyendo el Brazo
Construyendo el Brazo

Como mencioné antes, el modelo 3D del brazo está hecho por Juergenlessner, gracias por un trabajo increíble. Las instrucciones de montaje detalladas se pueden encontrar si sigue el enlace.

Sin embargo, tuve que modificar el sistema de control. Utilizo Arduino Uno con protector de sensor para controlar los servos. El protector del sensor ayuda mucho a simplificar el cableado y también facilita el suministro de energía externa a los servos. Utilizo un adaptador de corriente de 12 V 6 A conectado a través del módulo reductor (6 V) al protector del sensor.

Una nota sobre los servos. Utilizo servos MG 996 HR comprados en Taobao, pero la calidad es realmente mala. Definitivamente es una imitación china barata. El de la articulación del codo no proporcionó suficiente torque e incluso comenzó a echar humo una vez bajo una carga pesada. Tuve que reemplazar el servo de la articulación del codo con MG 946 HR de un fabricante de mejor calidad.

En pocas palabras: compre servos de calidad. Si sale humo mágico de sus servos, use mejores servos. 6V es un voltaje muy seguro, no lo aumente. No aumentará el torque, pero puede dañar los servos.

Cableado para servos de la siguiente manera:

base 2

hombro2 4hombro1 3

codo 6

pinza 8

muñeca 11

Siéntase libre de cambiarlo siempre que también recuerde cambiar el boceto de Arduino.

Una vez que haya terminado con el hardware, ¡echemos un vistazo al panorama general!

Paso 3: Interfaz MoveIt RobotCommander

Interfaz MoveIt RobotCommander
Interfaz MoveIt RobotCommander

¿Y ahora que? ¿Por qué necesitas MoveIt y ROS de todos modos? ¿No puedes simplemente controlar el brazo a través del código Arduino directamente?

Sí tu puedes.

Bien, ahora, ¿qué tal si usamos GUI o código Python / C ++ para proporcionar una pose de robot a la que ir? ¿Puede Arduino hacer eso?

Algo así como. Para eso, necesitará escribir un solucionador de cinemática inversa que tomará una pose de robot (coordenadas de traslación y rotación en el espacio 3D) y la convertirá en mensajes de ángulo de articulación para servos.

A pesar de que puede hacerlo usted mismo, es muchísimo trabajo por hacer. Por lo tanto, MoveIt y ROS proporcionan una interfaz agradable para que el solucionador IK (cinemática inversa) haga todo el levantamiento trigonométrico pesado por usted.

Respuesta corta: Sí, puede hacer un brazo robótico simple que ejecutará un boceto de Arduino codificado para pasar de una pose a otra. Pero si desea que su robot sea más inteligente y agregar capacidades de visión por computadora, MoveIt y ROS es el camino a seguir.

Hice un diagrama muy simplificado que explica cómo funciona el marco MoveIt. En nuestro caso, será aún más simple, ya que no tenemos retroalimentación de nuestros servos y usaremos el tema / joint_states para proporcionar al controlador del robot los ángulos para los servos. Solo nos falta un componente que es el controlador del robot.

¿Qué estamos esperando? Escribamos algunos controladores de robot, para que nuestro robot sea … ya sabes, más controlable.

Paso 4: Código Arduino para controlador de robot

Código Arduino para controlador de robot
Código Arduino para controlador de robot
Código Arduino para controlador de robot
Código Arduino para controlador de robot
Código Arduino para controlador de robot
Código Arduino para controlador de robot

En nuestro caso, Arduino Uno ejecutando un nodo ROS con rosserial será el controlador del robot. El código de boceto de Arduino se adjunta a este paso y también está disponible en GitHub.

El nodo ROS que se ejecuta en Arduino Uno básicamente se suscribe al tema / JointState publicado en la computadora que ejecuta MoveIt y luego convierte los ángulos de articulación de la matriz de radianes a grados y los pasa a servos utilizando la biblioteca estándar Servo.h.

Esta solución es un poco hacky y no como se hace con robots industriales. Idealmente, se supone que debe publicar la trayectoria del movimiento en el tema / FollowJointState y luego recibir los comentarios sobre el tema / JointState. Pero en nuestro brazo, los servos de hobby no pueden proporcionar la retroalimentación, por lo que nos suscribiremos directamente al tema / JointState, publicado por el nodo FakeRobotController. Básicamente, asumiremos que los ángulos que pasamos a los servos se ejecutan de manera ideal.

Para más información sobre cómo funciona el rosserial puedes consultar los siguientes tutoriales

wiki.ros.org/rosserial_arduino/Tutorials

Después de cargar el boceto en Arduino Uno, deberá conectarlo con el cable serial a la computadora que ejecuta su instalación ROS.

Para que aparezca todo el sistema, ejecute los siguientes 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

Ahora puede usar marcadores interactivos en RVIZ para mover el brazo del robot a una pose y luego presionar Planificar y Ejecutar para que realmente se mueva a la posición.

¡Magia!

Ahora estamos listos para escribir código Python para nuestra prueba de rampa. Bueno, casi…

Paso 5: (Opcional) Generación del complemento IKfast

De forma predeterminada, MoveIt sugiere usar el solucionador de cinemática KDL, que en realidad no funciona con menos de 6 brazos DOF. Si sigue este tutorial de cerca, notará que el modelo de brazo en RVIZ no puede ir a algunas poses que deberían ser compatibles con la configuración del brazo.

La solución recomendada es crear un solucionador de cinemática personalizado utilizando OpenRave. No es tan difícil, pero tendrá que compilarlo y sus dependencias desde la fuente o usar el contenedor de la ventana acoplable, lo que prefiera.

El procedimiento está muy bien documentado en este tutorial. Se confirma que funciona en VM con Ubuntu 16.04 y ROS Kinetic.

Usé el siguiente comando para generar el solucionador

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

y luego corrió

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

para generar el complemento MoveIt IKfast.

Todo el procedimiento lleva un poco de tiempo, pero no es muy difícil si sigue de cerca el tutorial. Si tiene preguntas sobre esta parte, comuníquese conmigo en los comentarios o PM.

Paso 6: ¡Prueba de rampa

¡La prueba de rampa!
¡La prueba de rampa!
¡La prueba de rampa!
¡La prueba de rampa!

Ahora estamos listos para probar la prueba de rampa, que ejecutaremos usando ROS MoveIt Python API.

El código de Python se adjunta a este paso y también está disponible en el repositorio de github. Si no tiene una rampa o desea probar otra prueba, deberá cambiar las poses del robot en el código. Para esa primera ejecución

eco rostopic / rviz_moveit_motion_planning_display / robot_interaction_interactive_marker_topic / feedback

en la terminal cuando ya se está ejecutando RVIZ y MoveIt. Luego mueva el robot con marcadores interactivos a la posición deseada. Los valores de posición y orientación se mostrarán en el terminal. Simplemente cópielos al código Python.

Para ejecutar la prueba de rampa

rosrun my_arm_xacro pick / pick_2.py

con RVIZ y el nodo rosserial ya en ejecución.

¡Estén atentos a la tercera parte del artículo, donde usaré una cámara estéreo para la detección de objetos y ejecutaré pick and place pipeline para objetos simples!