Sommario:

Controller robotico ROS basato su Matlab: 9 passaggi
Controller robotico ROS basato su Matlab: 9 passaggi

Video: Controller robotico ROS basato su Matlab: 9 passaggi

Video: Controller robotico ROS basato su Matlab: 9 passaggi
Video: Learn Basics Of Autonomous Navigation for Custom Robot Using ROS | Simple Tutorial | 2022 2024, Novembre
Anonim
Image
Image
Controller robotico ROS basato su Matlab
Controller robotico ROS basato su Matlab

Fin da bambino, ho sempre sognato di essere Iron Man e continuo a farlo. Iron Man è uno di quei personaggi che è realisticamente possibile e in poche parole aspiro a diventare Iron Man un giorno anche se la gente ride di me o dice che è impossibile perché "è impossibile solo finché qualcuno non lo fa" -Arnold Schwarzenegger.

ROS è una struttura emergente utilizzata per lo sviluppo di sistemi robotici complessi. Le sue applicazioni includono: sistemi di assemblaggio automatizzato, teleoperazione, braccia protesiche e macchinari pesanti del settore industriale.

Ricercatori e ingegneri sfruttano il ROS per sviluppare i prototipi, mentre diversi fornitori lo utilizzano per creare i loro prodotti. Ha un'architettura complessa che rende difficile essere gestito da un uomo zoppo. L'utilizzo di MATLAB per creare il collegamento dell'interfaccia con ROS è un nuovo approccio che può aiutare ricercatori, ingegneri e fornitori a sviluppare soluzioni più solide.

Quindi questo tutorial riguarda come creare un controller robotico ROS basato su Matlab, questo sarà uno dei pochissimi tutorial su questo là fuori e tra i pochi istruttori ROS. L'obiettivo di questo progetto è progettare un controller in grado di controllare qualsiasi ROS-robot connesso alla rete. Quindi iniziamo!

crediti per il montaggio video: Ammar Akher, a [email protected]

Forniture

I seguenti componenti sono necessari per il progetto:

(1) ROS PC/Robot

(2) Router

(3) PC con MATLAB (versione: 2014 o superiore)

Passaggio 1: ottenere tutto l'installazione

Ottenere tutto l'installazione
Ottenere tutto l'installazione

Per questo istruibile, sto usando Ubuntu 16.04 per il mio PC Linux e ros-kinetic, quindi per evitare confusione consiglio di usare ros kinetic e Ubuntu 16.04 poiché ha il miglior supporto per ros-kinetic. Per maggiori informazioni su come installare ros kinetic vai su https://wiki.ros.org/kinetic/Installation/Ubuntu. Per MATLAB puoi acquistare una licenza o scaricare una versione di prova da qui.

Passaggio 2: capire come funziona il controller

Capire come funziona il controller
Capire come funziona il controller

Un PC esegue il controller robotico su MATLAB. Il controller acquisisce l'indirizzo IP e la porta del ros pc/robot.

Un ros-topic viene utilizzato per comunicare tra il controller e il ros pc/robot, anch'esso preso come input dal controller. Il modem è necessario per creare una LAN (rete locale) ed è ciò che assegna gli indirizzi Ip a tutti i dispositivi collegati alla sua rete. Pertanto sia il pc/robot ros che il pc che esegue il controller devono essere entrambi collegati alla stessa rete (es. la rete del modem). Quindi ora che sai "come funziona", passiamo al "come è costruito"…

Passaggio 3: creazione di un'interfaccia ROS-MATLAB

Creazione di un'interfaccia ROS-MATLAB
Creazione di un'interfaccia ROS-MATLAB
Creazione di un'interfaccia ROS-MATLAB
Creazione di un'interfaccia ROS-MATLAB
Creazione di un'interfaccia ROS-MATLAB
Creazione di un'interfaccia ROS-MATLAB

ROS-MATLABInterface è un'interfaccia utile per ricercatori e studenti per la prototipazione dei loro algoritmi robot in MATLAB e testarli su robot compatibili con ROS. Questa interfaccia può essere creata dal toolbox del sistema robotico in matlab e possiamo prototipare il nostro algoritmo e testarlo su un robot abilitato per ROS o in simulatori di robot come Gazebo e V-REP.

Per installare la casella degli strumenti del sistema robotico sul tuo MATLAB, vai semplicemente all'opzione Componente aggiuntivo sulla barra degli strumenti e cerca la casella degli strumenti robotica nell'esploratore del componente aggiuntivo. Usando il toolbox robotico possiamo pubblicare o sottoscrivere un argomento, come un nodo ROS, e possiamo renderlo un master ROS. L'interfaccia MATLAB-ROS ha la maggior parte delle funzionalità ROS che potresti richiedere per i tuoi progetti.

Passaggio 4: ottenere l'indirizzo IP

Ottenere l'indirizzo IP
Ottenere l'indirizzo IP
Ottenere l'indirizzo IP
Ottenere l'indirizzo IP

Perché il controller funzioni è fondamentale che tu conosca l'indirizzo IP del tuo robot/pc ROS e del pc che esegue il controller su MATLAB.

Per ottenere l'ip del tuo pc:

Su Windows:

Apri il prompt dei comandi e digita il comando ipconfig e annota l'indirizzo IPv4

Per Linux:

Digita il comando ifconfig e annota l'indirizzo inet. Ora che hai l'indirizzo IP, è il momento di creare la GUI…

Passaggio 5: creare una GUI per il controller

Crea una GUI per il controller
Crea una GUI per il controller
Crea una GUI per il controller
Crea una GUI per il controller
Crea una GUI per il controller
Crea una GUI per il controller

Per creare la GUI, apri MATLAB e digita guide nella finestra di comando. Questo aprirà l'app guida attraverso la quale creeremo la nostra GUI. Puoi anche utilizzare il designer di app su MATLAB per progettare la tua GUI.

Creeremo 9 pulsanti in totale (come mostrato in fig):

6 pulsanti: Avanti, Indietro, Sinistra, Destra, Connetti al robot, Disconnetti

3 Pulsanti modificabili: IP pc Ros, porta e nome argomento.

I pulsanti modificabili sono i pulsanti che prenderanno l'ip del PC ROS, la sua porta e il nome dell'argomento come input. Il nome dell'argomento è ciò attraverso cui comunicano il controller MATLAB e il robot/pc ROS. Per modificare la stringa sul pulsante modificabile, fare clic con il pulsante destro del mouse sul pulsante >> andare su Proprietà dell'ispettore >> Stringa e modificare il testo del pulsante.

Una volta completata la GUI, puoi programmare i pulsanti. Qui inizia il vero divertimento…

Passaggio 6: programmazione dei pulsanti modificabili della GUI

Programmazione dei pulsanti modificabili della GUI
Programmazione dei pulsanti modificabili della GUI
Programmazione dei pulsanti modificabili della GUI
Programmazione dei pulsanti modificabili della GUI
Programmazione dei pulsanti modificabili della GUI
Programmazione dei pulsanti modificabili della GUI
Programmazione dei pulsanti modificabili della GUI
Programmazione dei pulsanti modificabili della GUI

La GUI viene salvata come file.fig ma le funzioni di codice/richiamata vengono salvate in formato.m. Il file.m contiene il codice per tutti i pulsanti. Per aggiungere funzioni di richiamata ai pulsanti, fare clic con il pulsante destro del mouse sul pulsante > >Visualizza richiamate>>richiamata. Questo aprirà il file.m per la tua GUI in cui è definito quel particolare pulsante.

Il primo callback che stiamo per codificare è per il pulsante modificabile ROS IP. Nella funzione edit1_Callback scrivi il seguente codice:

funzione edit1_Callback(hObject, eventdata, handle)

ros_master_ip globale

ros_master_ip = get(hObject, 'String')

Qui la funzione è definita come edit1_Callback, che si riferisce al primo pulsante modificabile. Quando inseriamo un indirizzo IP dalla rete ROS in questo pulsante modificabile, memorizzerà l'indirizzo IP come una stringa in una variabile globale chiamata ros_master_ip.

Quindi appena sotto _OpeningFcn(hObject, eventdata, handle, varargin) definire quanto segue (vedi fig):

ros_master_ip globale

ros_master_port globale

globale teleop_topic_name

ros_master_ip = '192.168.1.102';

ros_master_port = '11311';

teleop_topic_name = '/cmd_vel_mux/input/teleop';

Hai appena codificato globalmente l'ip ros-pc (ros_master_ip), la porta (ros_master_port) e il nome dell'argomento Teleop. Ciò che fa è che se lasci vuoti i pulsanti modificabili, questi valori predefiniti verranno utilizzati quando ti connetti.

Il prossimo callback che stiamo per codificare è per il pulsante modificabile Porta.

Nella funzione edit2_Callback scrivi il seguente codice:

funzione edit2_Callback(hObject, eventdata, handle)

ros_master_port globale

ros_master_port = get(hObject, 'String')

Qui la funzione è definita come edit2_Callback, che si riferisce al secondo pulsante modificabile. Quando inseriamo qui la porta del ros pc/robot dalla rete ROS in questo pulsante modificabile, memorizzerà la porta come una stringa in una variabile globale chiamata ros_master_port.

Allo stesso modo, il prossimo callback che stiamo per codificare è per il pulsante modificabile del nome dell'argomento.

Sotto la funzione edit3_Callback scrivi il seguente codice:

funzione edit3_Callback(hObject, eventdata, handle)

globale teleop_topic_name

teleop_topic_name = get(hObject, 'String')

Simile a ros_master_port, anche questo è memorizzato come stringa in una variabile globale.

Successivamente esamineremo le funzioni di richiamata per i pulsanti…

Passaggio 7: programmazione dei pulsanti della GUI

Programmazione dei pulsanti della GUI
Programmazione dei pulsanti della GUI
Programmazione dei pulsanti della GUI
Programmazione dei pulsanti della GUI

I pulsanti che abbiamo creato in precedenza sono quelli che utilizzeremo per spostare, connettere e disconnettere il robot dal controller. I callback dei pulsanti sono definiti come segue:

per esempio. funzione pushbutton6_Callback(hObject, eventdata, handle)

Nota: a seconda dell'ordine in cui hai creato i pulsanti, questi verranno numerati di conseguenza. Pertanto la funzione pulsante6 nel mio file.m potrebbe essere per Avanti mentre nel tuo file.m potrebbe essere per Indietro, quindi tienilo a mente. Per sapere quale sia la funzione esatta per il tuo pulsante, fai semplicemente clic con il pulsante destro del mouse >> Visualizza callback >> callback e si aprirà la funzione per il tuo pulsante, ma per questo istruibile presumo che sia uguale al mio.

Per il pulsante Connetti al robot:

Sotto la funzione pushbutton6_Callback(hObject, eventdata, handle):

funzione pushbutton6_Callback(hObject, eventdata, handle) globale ros_master_ip

ros_master_port globale

globale teleop_topic_name

robot globale

velmsg global globale

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

setenv('ROS_MASTER_URI', ros_master_uri)

rosinità

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

velmsg = rosmessage(robot);

Questo callback imposterà la variabile ROS_MASTER_URI concatenando ros_master_ip e la porta. Quindi il comando rosinit inizializzerà la connessione. Dopo la connessione, creerà un editore di geometry_msgs/Twist, che verrà utilizzato per inviare la velocità del comando. Il nome dell'argomento è il nome che diamo nella casella di modifica. Una volta stabilita la connessione, potremo azionare i pulsanti Avanti, Indietro, Sinistra, Destra.

Prima di aggiungere callback ai pulsanti Avanti e Indietro, è necessario inizializzare le velocità della velocità lineare e angolare.

Pertanto sotto _OpeningFcn(hObject, eventdata, handle, varargin) definire quanto segue (vedi fig):

global left_spinVelocity global right_spinVelocity

velocità in avanti globale

velocità globale all'indietro

left_spinVelocity = 2;

right_spinVelocity = -2;

avantiVelocity = 3;

indietroVelocità = -3;

Nota: tutte le velocità sono in rad/s

Ora che le variabili globali sono definite programmiamo i pulsanti di movimento.

Per il pulsante Avanti:

funzione pushbutton4_Callback(hObject, eventdata, handle) global velmsg

robot globale

globale teleop_topic_name

velocità in avanti globale

velmsg. Angular. Z = 0;

velmsg. Linear. X = forwardVelocity;

send(robot, velmsg);

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

Analogamente per il pulsante Indietro:

funzione pushbutton5_Callback(hObject, eventdata, handle)

velmsg global globale

robot globale

velocità globale all'indietro

globale teleop_topic_name

velmsg. Angular. Z = 0;

velmsg. Linear. X = BackVelocity;

send(robot, velmsg);

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

Analogamente per il pulsante sinistro: funzione pushbutton3_Callback(hObject, eventdata, handle)

global velmsgglobal robot global left_spinVelocity

globale teleop_topic_name

velmsg. Angular. Z = left_spinVelocity;

velmsg. Linear. X = 0;

send(robot, velmsg);

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

Analogamente per il pulsante destro:

velmsgglobal robot

global right_spinVelocity

globale teleop_topic_name

velmsg. Angular. Z = right_spinVelocity;

velmsg. Linear. X = 0;

send(robot, velmsg);

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

Una volta aggiunte tutte le funzioni di callback e salvati i file, possiamo testare il nostro controller.

Passaggio 8: impostazione della configurazione di rete su PC ROS (Linux)

Configurazione della configurazione di rete su PC ROS (Linux)
Configurazione della configurazione di rete su PC ROS (Linux)
Configurazione della configurazione di rete su PC ROS (Linux)
Configurazione della configurazione di rete su PC ROS (Linux)

Testeremo il controller su un PC ros (Linux), che richiederà l'impostazione della configurazione di rete. Se stai eseguendo il controller anche su un PC Linux, dovrai impostare anche la configurazione di rete.

Configurazione di rete:

Apri la finestra del terminale e digita gedit.bashrc

Una volta aperto il file, aggiungi quanto segue:

#Configurazione della macchina robot

esporta ROS_MASTER_URI=https://localhost:11311

#Indirizzo IP del nodo master ROS

esporta ROS_HOSTNAME=

esporta ROS_IP=

echo "ROS_HOSTNAME: " $ROS_HOSTNAME

echo "ROS_IP:"$ROS_IP

echo "ROS_MASTER_URI:"$ROS_MASTER_URI

Devi seguire questo passaggio ogni volta a causa dell'assegnazione dell'IP dinamico.

Passaggio 9: eseguire il controller

Esegui il controller
Esegui il controller

Stiamo per testare il nostro controller su un bot Turtle in Gazebo.

Per installare Gazebo, fare riferimento a

Per installare Turtle bot, fare riferimento a

Apri la cartella in cui hai salvato i tuoi file.fig e.m su MATLAB e premi Esegui (come mostrato nell'immagine). Questo aprirà il controller sul PC. Prima di premere Connetti, assicurati che il simulatore di tartaruga bot funzioni.

Per testare la tua simulazione TurtleBot:

Apri Terminale sul pc Ros e digita: $ roslaunch turtlebot_gazebo turtlebot_world.launch. Questo aprirà una simulazione di Turtlebot su quel PC. Il nome dell'argomento di TurtleBot è /cmd_vel_mux/input/teleop, che abbiamo già fornito nell'applicazione. Digita l'indirizzo IP del ros pc, la porta e il nome dell'argomento nei pulsanti modificabili e premi il pulsante. Connect to Robot. Il tuo robot tartaruga dovrebbe iniziare a muoversi quando premi Avanti, Indietro ecc.

Per visualizzare le velocità lineari e angolari:

Apri un nuovo terminale e digita il comando: $ rostopic echo /cmd_vel_mux/input/teleop

Ed ecco qua, il tuo controller robotico ROS basato su Matlab. Se ti è piaciuto il mio tutorial, dai un voto al Concorso Autore per la prima volta e condividilo con il maggior numero di persone possibile. Grazie.

Consigliato: