Tabla de contenido:

Controlador robótico ROS basado en Matlab: 9 pasos
Controlador robótico ROS basado en Matlab: 9 pasos

Video: Controlador robótico ROS basado en Matlab: 9 pasos

Video: Controlador robótico ROS basado en Matlab: 9 pasos
Video: ¿Qué es ROS?, ¿para qué sirve?, ¿por qué usar ROS? 2024, Noviembre
Anonim
Image
Image
Controlador robótico ROS basado en Matlab
Controlador robótico ROS basado en Matlab

Desde que era niño, siempre he soñado con ser Iron Man y todavía lo hago. Iron Man es uno de esos personajes que es realistamente posible y, en pocas palabras, aspiro a convertirme algún día en Iron Man, incluso si la gente se ríe de mí o dice que es imposible porque "solo es imposible hasta que alguien lo haga" -Arnold Schwarzenegger.

ROS es un marco emergente que se utiliza para desarrollar sistemas robóticos complejos. Sus aplicaciones incluyen: Sistema de Ensamblaje Automatizado, Teleoperación, Brazos Protésicos y Maquinaria Pesada del sector industrial.

Los investigadores e ingenieros aprovechan ROS para desarrollar los prototipos, mientras que diferentes proveedores lo utilizan para crear sus productos. Tiene una arquitectura compleja que hace que sea difícil ser administrado por un cojo. El uso de MATLAB para crear el enlace de interfaz con ROS es un enfoque novedoso que puede ayudar a los investigadores, ingenieros y proveedores a desarrollar soluciones más sólidas.

Así que este instructivo trata sobre cómo hacer un controlador robótico ROS basado en Matlab, este será uno de los pocos tutoriales sobre esto que existen y entre los pocos instructables ROS. El objetivo de este proyecto es diseñar un controlador que pueda controlar cualquier robot ROS conectado a su red. ¡Entonces empecemos!

Créditos de edición de video: Ammar Akher, en [email protected]

Suministros

Los siguientes componentes son necesarios para el proyecto:

(1) PC / Robot ROS

(2) Enrutador

(3) PC con MATLAB (versión: 2014 o superior)

Paso 1: Configuración de todo

Configuración de todo
Configuración de todo

Para este instructable, estoy usando Ubuntu 16.04 para mi pc linux y ros-kinetic, así que para evitar confusiones recomiendo usar ros kinetic y ubuntu 16.04 ya que tiene el mejor soporte para ros-kinetic. Para obtener más información sobre cómo instalar ros kinetic, vaya a https://wiki.ros.org/kinetic/Installation/Ubuntu. Para MATLAB, puede comprar una licencia o descargar una versión de prueba desde aquí.

Paso 2: comprender cómo funciona el controlador

Comprender cómo funciona el controlador
Comprender cómo funciona el controlador

Una PC ejecuta el controlador robótico en MATLAB. El controlador toma la dirección IP y el puerto del ros pc / robot.

Un tema ros se utiliza para comunicarse entre el controlador y la pc / robot ros, que también es tomado como entrada por el controlador. El módem es necesario para crear una LAN (red de área local) y es el que asigna las direcciones Ip a todos los dispositivos conectados a su red. Por lo tanto, la computadora / robot ros y la computadora que ejecuta el controlador deben estar conectados a la misma red (es decir, la red del módem). Entonces, ahora que sabe "cómo funciona", veamos "cómo está construido" …

Paso 3: Creación de una interfaz ROS-MATLAB

Creación de una interfaz ROS-MATLAB
Creación de una interfaz ROS-MATLAB
Creación de una interfaz ROS-MATLAB
Creación de una interfaz ROS-MATLAB
Creación de una interfaz ROS-MATLAB
Creación de una interfaz ROS-MATLAB

La interfaz ROS-MATLAB es una interfaz útil para investigadores y estudiantes para crear prototipos de sus algoritmos de robot en MATLAB y probarlos en robots compatibles con ROS. un robot compatible con ROS o en simuladores de robot como Gazebo y V-REP.

Para instalar la caja de herramientas del sistema robótico en su MATLAB, simplemente vaya a la opción Complemento en la barra de herramientas y busque la caja de herramientas robótica en el explorador de complementos. Usando la caja de herramientas robótica podemos publicar o suscribirnos a un tema, como un nodo ROS, y podemos convertirlo en un maestro ROS. La interfaz MATLAB-ROS tiene la mayoría de las funcionalidades ROS que podría necesitar para sus proyectos.

Paso 4: obtener la dirección IP

Obtener la dirección IP
Obtener la dirección IP
Obtener la dirección IP
Obtener la dirección IP

Para que el controlador funcione, es imperativo que conozca la dirección IP de su robot / PC ROS y la PC que ejecuta el controlador en MATLAB.

Para obtener la IP de su PC:

En Windows:

Abra el símbolo del sistema y escriba el comando ipconfig y anote la dirección IPv4

Para Linux:

Escriba el comando ifconfig y anote la dirección inet. Ahora que tiene la dirección IP, es hora de crear la GUI …

Paso 5: cree una GUI para el controlador

Cree una GUI para el controlador
Cree una GUI para el controlador
Cree una GUI para el controlador
Cree una GUI para el controlador
Cree una GUI para el controlador
Cree una GUI para el controlador

Para crear la GUI, abra MATLAB y escriba guía en la ventana de comandos. Esto abrirá la aplicación de guía a través de la cual crearemos nuestra GUI. También puede utilizar el diseñador de aplicaciones en MATLAB para diseñar su GUI.

Crearemos 9 botones en total (como se muestra en la figura):

6 pulsadores: Adelante, Atrás, Izquierda, Derecha, Conectar al robot, Desconectar

3 botones editables: Ros pc ip, puerto y nombre del tema.

Los botones editables son los botones que tomarán como entrada la ip de ROS pc, su puerto y el nombre del tema. El nombre del tema es a través de lo que se comunican el controlador MATLAB y el robot / pc ROS. Para editar la cadena en el botón editable, haga clic con el botón derecho en el botón >> vaya a Propiedades del inspector >> Cadena y edite el texto del botón.

Una vez que su GUI esté completa, puede programar los botones. Aquí es donde comienza la verdadera diversión…

Paso 6: Programación de los botones editables de la GUI

Programación de los botones editables de la GUI
Programación de los botones editables de la GUI
Programación de los botones editables de la GUI
Programación de los botones editables de la GUI
Programación de los botones editables de la GUI
Programación de los botones editables de la GUI
Programación de los botones editables de la GUI
Programación de los botones editables de la GUI

La GUI se guarda como un archivo.fig pero las funciones de código / devolución de llamada se guardan en formato.m. El archivo.m contiene el código para todos sus botones. Para agregar funciones de devolución de llamada a sus botones, haga clic con el botón derecho en el botón> > Ver devoluciones de llamada >> devolución de llamada. Esto abrirá el archivo.m para su GUI donde se define ese botón en particular.

La primera devolución de llamada que vamos a codificar es para el botón editable ROS IP. En la función edit1_Callback escriba el siguiente código:

función edit1_Callback (hObject, eventdata, identificadores)

global ros_master_ip

ros_master_ip = get (hObject, 'String')

Aquí la función se define como edit1_Callback, que se refiere al primer botón editable. Cuando ingresamos una dirección IP de la red ROS en este botón editable, almacenará la dirección IP como una cadena en una variable global llamada ros_master_ip.

Luego, justo debajo de _OpeningFcn (hObject, eventdata, handle, varargin) defina lo siguiente (ver fig):

global ros_master_ip

global ros_master_port

global teleop_topic_name

ros_master_ip = '192.168.1.102';

ros_master_port = '11311';

teleop_topic_name = '/ cmd_vel_mux / input / teleop';

Simplemente codificó globalmente la ip de ros-pc (ros_master_ip), el puerto (ros_master_port) y el nombre del tema de Teleop. Lo que hace esto es que si deja los botones editables vacíos, estos valores predefinidos se usarán cuando se conecte.

La siguiente devolución de llamada que vamos a codificar es para el botón editable Puerto.

En la función edit2_Callback escriba el siguiente código:

función edit2_Callback (hObject, eventdata, identificadores)

global ros_master_port

ros_master_port = get (hObject, 'String')

Aquí la función se define como edit2_Callback, que se refiere al segundo botón editable. Cuando ingresamos el puerto de ros pc / robot aquí desde la red ROS en este botón editable, almacenará el puerto como una cadena en una variable global llamada ros_master_port.

De manera similar, la siguiente devolución de llamada que vamos a codificar es para el botón editable del nombre del tema.

En la función edit3_Callback escriba el siguiente código:

función edit3_Callback (hObject, eventdata, identificadores)

global teleop_topic_name

teleop_topic_name = get (hObject, 'String')

Similar a ros_master_port, esto también se almacena como cadena en una variable global.

A continuación, veremos las funciones de devolución de llamada para los botones pulsadores …

Paso 7: Programación de los botones de la GUI

Programación de los botones de la GUI
Programación de los botones de la GUI
Programación de los botones de la GUI
Programación de los botones de la GUI

Los pulsadores que creamos anteriormente son los que usaremos para mover, conectar y desconectar el robot del controlador. Las devoluciones de llamada del botón pulsador se definen de la siguiente manera:

p.ej. función pushbutton6_Callback (hObject, eventdata, handle)

Nota: según el orden en el que haya creado sus pulsadores, se numerarán en consecuencia. Por lo tanto, la función pushbutton6 en mi archivo.m podría ser para Adelante, mientras que en su archivo.m podría ser para Atrás, así que téngalo en cuenta. Para saber cuál es la función exacta para su botón pulsador, simplemente haga clic derecho >> Ver devoluciones de llamada >> devoluciones de llamada y se abrirá la función para su botón pulsador, pero para este instructable, supongo que es el mismo que el mío.

Para el botón Conectar al robot:

Bajo la función pushbutton6_Callback (hObject, eventdata, handle):

función pushbutton6_Callback (hObject, eventdata, handle) global ros_master_ip

global ros_master_port

global teleop_topic_name

robot global

velmsg global

ros_master_uri = strcat ('https://', ros_master_ip, ':', ros_master_port)

setenv ('ROS_MASTER_URI', ros_master_uri)

rosinita

robot = rospublisher (teleop_topic_name, 'geometry_msgs / Twist');

velmsg = rosmessage (robot);

Esta devolución de llamada establecerá la variable ROS_MASTER_URI concatenando ros_master_ip y el puerto. Luego, el comando rosinit inicializará la conexión. Después de conectarse, creará un editor de geometry_msgs / Twist, que se utilizará para enviar el comando de velocidad. El nombre del tema es el nombre que le damos en el cuadro de edición. Una vez que la conexión sea exitosa, podremos operar los botones de avance, retroceso, izquierda y derecha.

Antes de agregar devoluciones de llamada a los botones de empuje hacia adelante y hacia atrás, debemos inicializar las velocidades de velocidad lineal y angular.

Por lo tanto, debajo de _OpeningFcn (hObject, eventdata, handle, varargin) defina lo siguiente (ver fig):

global left_spinVelocity global right_spinVelocity

velocidad global hacia adelante

velocidad global hacia atrás

left_spinVelocity = 2;

right_spinVelocity = -2;

forwardVelocity = 3;

backwardVelocity = -3;

Nota: todas las velocidades están en rad / s

Ahora que las variables globales están definidas, programemos los botones de movimiento.

Para el botón de avance:

función pushbutton4_Callback (hObject, eventdata, handle) global velmsg

robot global

global teleop_topic_name

velocidad global hacia adelante

velmsg. Angular. Z = 0;

velmsg. Linear. X = forwardVelocity;

enviar (robot, velmsg);

latchpub = rospublisher (teleop_topic_name, 'IsLatching', verdadero);

De manera similar para el botón de retroceso:

función pushbutton5_Callback (hObject, eventdata, handle)

velmsg global

robot global

velocidad global hacia atrás

global teleop_topic_name

velmsg. Angular. Z = 0;

velmsg. Linear. X = backwardVelocity;

enviar (robot, velmsg);

latchpub = rospublisher (teleop_topic_name, 'IsLatching', verdadero);

De manera similar para el botón izquierdo: función pushbutton3_Callback (hObject, eventdata, handle)

global velmsgglobal robot global left_spinVelocity

global teleop_topic_name

velmsg. Angular. Z = left_spinVelocity;

velmsg. Linear. X = 0;

enviar (robot, velmsg);

latchpub = rospublisher (teleop_topic_name, 'IsLatching', verdadero);

De manera similar para el botón derecho:

robot global velmsgg

right_spinVelocity global

global teleop_topic_name

velmsg. Angular. Z = right_spinVelocity;

velmsg. Linear. X = 0;

enviar (robot, velmsg);

latchpub = rospublisher (teleop_topic_name, 'IsLatching', verdadero);

Una vez que se hayan agregado todas las funciones de devolución de llamada y se hayan guardado los archivos, podemos probar nuestro controlador.

Paso 8: Configurar la configuración de red en ROS PC (Linux)

Configuración de la red en ROS PC (Linux)
Configuración de la red en ROS PC (Linux)
Configuración de la red en ROS PC (Linux)
Configuración de la red en ROS PC (Linux)

Probaremos el controlador en una PC ros (Linux), lo que requerirá configurar la configuración de red. Si también está ejecutando el controlador en una PC Linux, también tendrá que configurar la configuración de red allí.

Configuración de la red:

Abra la ventana de su terminal y escriba gedit.bashrc

Una vez que el archivo esté abierto, agregue lo siguiente:

#Configuración de la máquina robot

exportar ROS_MASTER_URI = https:// localhost: 11311

# Dirección IP del nodo maestro ROS

exportar ROS_HOSTNAME =

exportar ROS_IP =

echo "ROS_HOSTNAME:" $ ROS_HOSTNAME

echo "ROS_IP:" $ ROS_IP

echo "ROS_MASTER_URI:" $ ROS_MASTER_URI

Debe seguir este paso cada vez debido a la asignación dinámica de IP.

Paso 9: Ejecute el controlador

Ejecute el controlador
Ejecute el controlador

Vamos a probar nuestro controlador en un bot de Tortuga en Gazebo.

Para instalar Gazebo, consulte

Para instalar el bot de Turtle, consulte

Abra la carpeta donde guardó sus archivos.fig y.m en MATLAB y presione Ejecutar (como se muestra en la imagen). Esto abrirá el controlador en la PC. Antes de presionar conectar, asegúrese de que su simulador de bot de tortuga esté funcionando.

Para probar su simulación de TurtleBot:

Abra Terminal en Ros pc y escriba: $ roslaunch turtlebot_gazebo turtlebot_world.launch. Esto abrirá una simulación de Turtlebot en esa PC. El nombre del tema de TurtleBot es / cmd_vel_mux / input / teleop, que ya hemos proporcionado en la aplicación. Escriba la dirección IP ros pc, el puerto y el nombre del tema en los botones editables y presione el botón Conectar al robot. Tu robot tortuga debería comenzar a moverse cuando presionas Adelante, Atrás, etc.

Para ver las velocidades lineales y angulares:

Abra una nueva terminal y escriba el comando: $ rostopic echo / cmd_vel_mux / input / teleop

Y ahí está, su propio controlador robótico ROS basado en Matlab. Si te gustó mi instructivo, por favor dale un voto en el Concurso de Autor por Primera Vez y compártelo con la mayor cantidad de personas posible. Gracias.

Recomendado: