Taula de continguts:
- Subministraments
- Pas 1: Configuració de tot
- Pas 2: entendre com funciona el controlador
- Pas 3: crear una interfície ROS-MATLAB
- Pas 4: Obtenir l'adreça IP
- Pas 5: creeu una GUI per al controlador
- Pas 6: Programació dels botons editables de la GUI
- Pas 7: Programació dels botons push de la GUI
- Pas 8: Configuració de la configuració de xarxa al PC ROS (Linux)
- Pas 9: executeu el controlador
Vídeo: Controlador robòtic ROS basat en Matlab: 9 passos
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:13
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
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
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
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
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
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
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
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)
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
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:
Controlador de jocs DIY basat en Arduino - Controlador de jocs Arduino PS2 - Jugar a Tekken amb el bricolatge Arduino Gamepad: 7 passos
Controlador de jocs DIY basat en Arduino | Controlador de jocs Arduino PS2 | Jugar a Tekken amb el bricolatge Arduino Gamepad: Hola nois, jugar sempre és divertit, però jugar amb el vostre propi controlador de jocs de bricolatge és més divertit
Termòmetre infraroig sense contacte basat en Arduino - Termòmetre basat en IR mitjançant Arduino: 4 passos
Termòmetre infraroig sense contacte basat en Arduino | Termòmetre basat en IR que utilitza Arduino: Hola nois, en aquest instructable farem un termòmetre sense contacte amb arduino, ja que de vegades la temperatura del líquid / sòlid és massa alta o baixa a la temperatura i és difícil fer-hi contacte i llegir-ne temperatura llavors en aquell escenari
Generador de música basat en el temps (generador de midi basat en ESP8266): 4 passos (amb imatges)
Generador de música basat en el temps (generador de midi basat en ESP8266): Hola, avui explicaré com fer el vostre propi generador de música basat en el temps. Es basa en un ESP8266, que és com un Arduino, i respon a la temperatura, a la pluja i intensitat lumínica. No espereu que faci cançons senceres o progrés d’acords
ROS MoveIt Robotic Arm Part 2: Controlador de robots: 6 passos
ROS MoveIt Robotic Arm Part 2: Robot Controller: https://github.com/AIWintermuteAI/ros-moveit-arm.git A la part anterior de l'article hem creat fitxers URDF i XACRO per al nostre braç robotitzat i hem llançat RVIZ per controlar braç robòtic en entorn simulat. Aquesta vegada ho farem amb el rea
Braç robòtic basat en microcontrolador PIC: 6 passos (amb imatges)
Braç robòtic basat en microcontroladors PIC: des de la línia de muntatge de les indústries de fabricació d’automòbils fins als robots de telesurgia a l’espai, Robotic Arms es troba a tot arreu. Els mecanismes d'aquests robots són similars a un humà que es pot programar per a funcions similars i augmentar