Taula de continguts:

Controlador robòtic ROS basat en Matlab: 9 passos
Controlador robòtic ROS basat en Matlab: 9 passos

Vídeo: Controlador robòtic ROS basat en Matlab: 9 passos

Vídeo: Controlador robòtic ROS basat en Matlab: 9 passos
Vídeo: Robot Leg Control using Python and ROS 2024, Desembre
Anonim
Image
Image
Controlador robotitzat ROS basat en Matlab
Controlador robotitzat ROS basat en Matlab

Des que era petit, sempre he somiat amb ser Iron Man i encara ho faig. Iron Man és un d’aquests personatges realment possibles i, en poques paraules, aspiro a convertir-me en Iron Man algun dia, fins i tot si la gent es riu de mi o diu que és impossible perquè “només és impossible fins que algú ho faci” -Arnold Schwarzenegger.

ROS és un marc emergent que s’utilitza per desenvolupar sistemes de robòtica complexos. Les seves aplicacions inclouen: sistema de muntatge automatitzat, teleoperació, braços protèsics i maquinària pesada del sector industrial.

Investigadors i enginyers aprofiten el ROS per desenvolupar els prototips, mentre que diversos proveïdors l’utilitzen per crear els seus productes, amb una arquitectura complexa que dificulta la gestió d’un home coix. L’ús de MATLAB per crear l’enllaç d’interfície amb ROS és un nou enfocament que pot ajudar investigadors, enginyers i proveïdors a desenvolupar solucions més robustes.

Per tant, aquest instructiu tracta de com fer un controlador robotitzat ROS basat en Matlab, aquest serà un dels pocs tutorials sobre això que hi ha i entre els pocs instructius ROS. L’objectiu d’aquest projecte és dissenyar un controlador que pugui controlar qualsevol robot ROS connectat a la vostra xarxa. Comencem, doncs, crèdits d’edició de vídeo: Ammar Akher, a [email protected]

Subministraments

Els components següents són necessaris per al projecte:

(1) PC / robot ROS

(2) Encaminador

(3) PC amb MATLAB (versió: 2014 o superior)

Pas 1: Configuració de tot

Configuració de tot
Configuració de tot

Per a aquesta instrucció, estic utilitzant Ubuntu 16.04 per al meu PC Linux i ros-kinetic, així que per evitar confusions recomano utilitzar ros kinetic i ubuntu 16.04, ja que té el millor suport per a ros-cinetic. Per obtenir més informació sobre com instal·lar ros kinetic, aneu a https://wiki.ros.org/kinetic/Installation/Ubuntu. Per a MATLAB, podeu adquirir una llicència o descarregar una versió de la pista des d’aquí.

Pas 2: entendre com funciona el controlador

Descripció del funcionament del controlador
Descripció del funcionament del controlador

Un ordinador executa el controlador robot a MATLAB. El controlador pren l'adreça IP i el port del ros pc / robot.

Un tema ros s'utilitza per comunicar-se entre el controlador i el pc / robot ros, que també pren com a entrada el controlador. El mòdem és necessari per crear una LAN (xarxa d'àrea local) i és el que assigna les adreces IP a tots els dispositius connectats a la seva xarxa. Per tant, l'ordinador ros / robot i l'ordinador que executa el controlador han d'estar connectats a la mateixa xarxa (és a dir, la xarxa del mòdem). Ara que ja sabeu "com funciona", anem a "com es construeix" …

Pas 3: crear una interfície ROS-MATLAB

Creació d’una interfície ROS-MATLAB
Creació d’una interfície ROS-MATLAB
Creació d’una interfície ROS-MATLAB
Creació d’una interfície ROS-MATLAB
Creació d’una interfície ROS-MATLAB
Creació d’una interfície ROS-MATLAB

La interfície ROS-MATLAB és una interfície útil per a investigadors i estudiants per prototipar els seus algorismes de robots a MATLAB i provar-los en robots compatibles amb ROS. Aquesta interfície la pot crear la caixa d’eines del sistema de robòtica de matlab i podem prototipar el nostre algorisme i provar-lo a un robot compatible amb ROS o en simuladors de robots com Gazebo i V-REP.

Per instal·lar la caixa d’eines del sistema de robòtica al MATLAB, simplement aneu a l’opció del complement a la barra d’eines i cerqueu la caixa d’eines robòtica a l’explorador de complements. Mitjançant la caixa d’eines robòtica podem publicar o subscriure’s a un tema, com ara un node ROS, i el podem convertir en un mestre ROS. La interfície MATLAB-ROS té la majoria de les funcionalitats ROS que podeu requerir per als vostres projectes.

Pas 4: Obtenir l'adreça IP

Obtenir l'adreça IP
Obtenir l'adreça IP
Obtenir l'adreça IP
Obtenir l'adreça IP

Perquè el controlador funcioni, és imprescindible que conegueu l'adreça IP del vostre robot ROS / PC i del PC que executi el controlador a MATLAB.

Per obtenir la IP del vostre ordinador:

Al Windows:

Obriu l'indicador d'ordres i escriviu l'ordre ipconfig i anoteu l'adreça IPv4

Per a Linux:

Escriviu l'ordre ifconfig i anoteu l'adreça inet. Ara que teniu l'adreça IP, és hora de construir la GUI …

Pas 5: creeu una GUI per al controlador

Creeu una GUI per al controlador
Creeu una GUI per al controlador
Creeu una GUI per al controlador
Creeu una GUI per al controlador
Creeu una GUI per al controlador
Creeu una GUI per al controlador

Per crear la GUI, obriu MATLAB i escriviu guide a la finestra d'ordres. Això obrirà l'aplicació de la guia, tot i que crearem la nostra GUI. També podeu utilitzar el dissenyador d’aplicacions a MATLAB per dissenyar la vostra interfície gràfica d’usuari.

Crearem 9 botons en total (com es mostra a la fig):

6 polsadors: Foward, Endarrere, Esquerra, Dreta, Connecta al robot, Desconnecta

3 Editable-botons: Ros PC ip, port i nom del tema.

Els botons Editable són els botons que portaran com a entrada l’IP de la PC ROS, el port i el nom del tema. El nom del tema és el que comunica el controlador MATLAB i el robot ROS / PC. Per editar la cadena del botó editable, feu clic amb el botó dret sobre el botó >> aneu a Propietats de l'Inspector >> Cadena i editeu el text del botó.

Un cop completada la GUI, podeu programar els botons. Aquí és on comença la veritable diversió …

Pas 6: Programació dels botons editables de la GUI

Programació dels botons editables de la GUI
Programació dels botons editables de la GUI
Programació dels botons editables de la GUI
Programació dels botons editables de la GUI
Programació dels botons editables de la GUI
Programació dels botons editables de la GUI
Programació dels botons editables de la GUI
Programació dels botons editables de la GUI

La interfície gràfica d’usuari es desa com a fitxer.fig, però les funcions de codi / devolució de trucada es guarden en format.m. El fitxer.m conté el codi de tots els vostres botons. Per afegir funcions de devolució de trucada als botons, feu clic amb el botó dret al botó> > Veure devolucions de trucada >> devolució de trucada. Això obrirà el fitxer.m per a la vostra interfície gràfica d’usuari on es defineixi aquest botó en particular.

La primera devolució de trucada que anem a codificar és per al botó editable IP de ROS. A la funció edit1_Callback escriviu el codi següent:

funció edit1_Callback (hObject, eventdata, handles)

global ros_master_ip

ros_master_ip = get (hObject, 'String')

Aquí la funció es defineix com edit1_Callback, que fa referència al primer botó editable. Quan introduïm una adreça IP de la xarxa ROS en aquest botó editable, emmagatzemarà l'adreça IP com una cadena en una variable global anomenada ros_master_ip.

A continuació, a sota de _OpeningFcn (hObject, eventdata, handles, varargin) definiu el següent (vegeu la figura):

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';

Acabeu de codificar durament la ros-pc ip (ros_master_ip), el port (ros_master_port) i el nom del tema Teleop. El que fa això és que si deixeu els botons editables buits, s'utilitzaran aquests valors predefinits quan us connecteu.

La següent devolució de trucada que codificarem és per al botó editable del port.

A la funció edit2_Callback escriviu el codi següent:

funció edit2_Callback (hObject, eventdata, handle)

global ros_master_port

ros_master_port = get (hObject, 'Cadena')

Aquí la funció es defineix com edit2_Callback, que fa referència al segon botó editable. Quan entrem al port de la PC ROS / robot aquí des de la xarxa ROS en aquest botó editable, emmagatzemarà el port com una cadena en una variable global anomenada ros_master_port.

De la mateixa manera, la següent devolució de trucada que codificarem és per al botó editable del nom del tema.

A la funció edit3_Callback escriviu el codi següent:

funció edit3_Callback (hObject, eventdata, handles)

global teleop_topic_name

teleop_topic_name = get (hObject, 'String')

De manera similar a ros_master_port, també s’emmagatzema com una cadena en una variable global.

A continuació, analitzarem les funcions de devolució de trucada per als botons …

Pas 7: Programació dels botons push de la GUI

Programació dels botons push de la GUI
Programació dels botons push de la GUI
Programació dels botons push de la GUI
Programació dels botons push de la GUI

Els botons que hem creat anteriorment són els que farem servir per moure, connectar i desconnectar el robot del controlador. Les devolucions de trucada del polsador es defineixen de la següent manera:

per exemple. funció pushbutton6_Callback (hObject, eventdata, handle)

Nota: en funció de l'ordre en què heu creat els botons, es numerarien en conseqüència. Per tant, la funció pushbutton6 al meu fitxer.m podria ser cap endavant, mentre que al fitxer.m podria ser cap enrere, així que tingueu-ho present. Per saber quina és la funció exacta del vostre polsador, feu clic amb el botó dret del ratolí >> Mostra les devolucions de trucada >> les devolucions de trucada i obrirà la funció del vostre polsador, però per a aquesta instrucció suposo que és la mateixa que la meva.

Per al botó Connecta al robot:

Sota la funció pushbutton6_Callback (hObject, eventdata, handles):

funció pushbutton6_Callback (hObject, eventdata, handles) 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)

rosinit

robot = editor (nom_tema_teleop, 'geometria_msgs / Twist');

velmsg = rosmessage (robot);

Aquesta devolució de trucada configurarà la variable ROS_MASTER_URI concatenant ros_master_ip i el port. A continuació, l’ordre rosinit inicialitzarà la connexió. Després de connectar-se, crearà un editor de geometry_msgs / Twist, que s'utilitzarà per enviar la velocitat de l'ordre. El nom del tema és el nom que donem al quadre d’edició. Quan la connexió tingui èxit, podrem accionar els botons endavant, enrere, esquerre, dret.

Abans d’afegir devolucions de trucada a les buttoines d’empenta cap endavant i cap enrere, hem d’inicialitzar les velocitats de velocitat lineal i angular.

Per tant, a sota de _OpeningFcn (hObject, eventdata, handles, varargin) definiu el següent (vegeu la figura):

global left_spinVelocity global right_spinVelocity

forwardVelocity global

global backwardVelocity

left_spinVelocity = 2;

right_spinVelocity = -2;

forwardVelocity = 3;

backwardVelocity = -3;

Nota: totes les velocitats estan en rad / s

Ara que es defineixen les variables globals, programem els botons de moviment.

Per al botó Endavant:

funció pushbutton4_Callback (hObject, eventdata, handles) global velmsg

robot global

global teleop_topic_name

forwardVelocity global

velmsg. Angular. Z = 0;

velmsg. Linear. X = forwardVelocity;

enviar (robot, velmsg);

latchpub = publicador (teleop_topic_name, 'IsLatching', true);

De manera similar per al polsador enrere:

funció pushbutton5_Callback (hObject, eventdata, handle)

velmsg global

robot global

global backwardVelocity

global teleop_topic_name

velmsg. Angular. Z = 0;

velmsg. Linear. X = Velocitat cap enrere;

enviar (robot, velmsg);

latchpub = publicador (teleop_topic_name, 'IsLatching', true);

De manera similar per al botó esquerre: funció pushbutton3_Callback (hObject, eventdata, handles)

global velmsgglobal robot global left_spinVelocity

global teleop_topic_name

velmsg. Angular. Z = left_spinVelocity;

velmsg. Linear. X = 0;

enviar (robot, velmsg);

latchpub = publicador (teleop_topic_name, 'IsLatching', true);

De manera similar per al polsador dret:

robot global velmsgglobal

right_spinVelocity global

global teleop_topic_name

velmsg. Angular. Z = right_spinVelocity;

velmsg. Linear. X = 0;

enviar (robot, velmsg);

latchpub = publicador (teleop_topic_name, 'IsLatching', true);

Un cop s'hagin afegit totes les funcions de devolució de trucada i s'hagin desat els fitxers, podem provar el nostre controlador.

Pas 8: Configuració de la configuració de xarxa al PC ROS (Linux)

Configuració de la configuració de xarxa al PC ROS (Linux)
Configuració de la configuració de xarxa al PC ROS (Linux)
Configuració de la configuració de xarxa al PC ROS (Linux)
Configuració de la configuració de xarxa al PC ROS (Linux)

Provarem el controlador en un ordinador ros (Linux), que requerirà configurar la configuració de xarxa. Si també esteu executant el controlador en un ordinador Linux, també haureu de configurar-hi la configuració de xarxa.

Configuració de xarxa:

Obriu la finestra del terminal i escriviu gedit.bashrc

Un cop obert el fitxer, afegiu el següent:

Configuració de la màquina #Robot

exportació ROS_MASTER_URI = https:// localhost: 11311

Adreça #IP del node mestre ROS

exportació ROS_HOSTNAME =

exportació ROS_IP =

ressò "ROS_HOSTNAME:" $ ROS_HOSTNAME

ressò "ROS_IP:" $ ROS_IP

eco "ROS_MASTER_URI:" $ ROS_MASTER_URI

Heu de seguir aquest pas cada vegada a causa de l'assignació dinàmica d'IP.

Pas 9: executeu el controlador

Executeu el controlador
Executeu el controlador

Anem a provar el nostre controlador en un bot Turtle a Gazebo.

Per instal·lar Gazebo, consulteu

Per instal·lar el robot Turtle, consulteu

Obriu la carpeta on heu desat els fitxers.fig i.m a MATLAB i premeu Executa (tal com es mostra a la imatge). Això obrirà el controlador al PC. Abans de prémer connect, assegureu-vos que el simulador de bot de tortuga funciona.

Per provar la simulació de TurtleBot:

Obriu Terminal al PC Ros i escriviu: $ roslaunch turtlebot_gazebo turtlebot_world.launch. Això obrirà una simulació de Turtlebot en aquest PC. El nom del tema de TurtleBot és / cmd_vel_mux / input / teleop, que ja hem proporcionat a l’aplicació. Escriviu l’adreça IP del port, el port i el nom del tema als botons editables i premeu el botó Connectar-se al robot. El bot de tortuga hauria de començar a moure’s quan premeu Endavant, Endarrere, etc.

Per veure les velocitats lineals i angulars:

Obriu un terminal nou i escriviu l'ordre: $ rostopic echo / cmd_vel_mux / input / teleop

I aquí teniu el vostre propi controlador robòtic ROS basat en Matlab. Si us ha agradat la meva instrucció, si us plau, doneu-li una votació al Concurs d’autors per primera vegada i compartiu-la amb tanta gent com sigui possible. Gràcies.

Recomanat: