Sommario:
- Forniture
- Passaggio 1: ottenere tutto l'installazione
- Passaggio 2: capire come funziona il controller
- Passaggio 3: creazione di un'interfaccia ROS-MATLAB
- Passaggio 4: ottenere l'indirizzo IP
- Passaggio 5: creare una GUI per il controller
- Passaggio 6: programmazione dei pulsanti modificabili della GUI
- Passaggio 7: programmazione dei pulsanti della GUI
- Passaggio 8: impostazione della configurazione di rete su PC ROS (Linux)
- Passaggio 9: eseguire il controller
Video: Controller robotico ROS basato su Matlab: 9 passaggi
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:01
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
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
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
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
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
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
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
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)
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
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:
Telecomando IR automatico basato su Arduino basato sulla temperatura: 7 passaggi
Telecomando IR automatico basato su Arduino basato sulla temperatura: Ehi, come va, ragazzi! Akarsh qui da CETech. Stanco di svegliarti nel bel mezzo di un sonno profondo solo perché la temperatura della tua stanza è troppo bassa o troppo alta a causa del tuo stupido condizionatore. Allora questo progetto è per te. In questo progetto, faremo il nostro
Controller di gioco fai-da-te basato su Arduino - Controller di gioco Arduino PS2 - Giocare a Tekken con il gamepad Arduino fai da te: 7 passaggi
Controller di gioco fai-da-te basato su Arduino | Controller di gioco Arduino PS2 | Giocare a Tekken con il gamepad Arduino fai da te: Ciao ragazzi, giocare è sempre divertente, ma giocare con il tuo controller di gioco personalizzato fai-da-te è più divertente. Quindi creeremo un controller di gioco usando arduino pro micro in queste istruzioni
Generatore musicale basato sulle condizioni meteorologiche (generatore MIDI basato su ESP8266): 4 passaggi (con immagini)
Generatore di musica basato sul tempo (Generatore MIDI basato su ESP8266): Ciao, oggi spiegherò come creare il tuo piccolo generatore di musica basato sul tempo. È basato su un ESP8266, che è un po' come un Arduino, e risponde alla temperatura, alla pioggia e l'intensità della luce. Non aspettarti che produca intere canzoni o programmi di accordi
Braccio robotico ROS MoveIt Parte 2: Controller robot: 6 passaggi
ROS MoveIt Robotic Arm Part 2: Robot Controller: https://github.com/AIWintermuteAI/ros-moveit-arm.git Nella parte precedente dell'articolo abbiamo creato i file URDF e XACRO per il nostro braccio robotico e lanciato RVIZ per controllare il nostro braccio robotico in ambiente simulato. Questa volta lo faremo con la rea
Braccio robotico basato su microcontrollore PIC: 6 passaggi (con immagini)
Braccio robotico basato su microcontrollore PIC: dalla catena di montaggio delle industrie manifatturiere automobilistiche ai robot per la telechirurgia nello spazio, i bracci robotici si trovano ovunque. I meccanismi di questi robot sono simili a quelli di un essere umano che può essere programmato per funzioni simili e aumenta