Satura rādītājs:

Matlab balstīts ROS robotu kontrolieris: 9 soļi
Matlab balstīts ROS robotu kontrolieris: 9 soļi

Video: Matlab balstīts ROS robotu kontrolieris: 9 soļi

Video: Matlab balstīts ROS robotu kontrolieris: 9 soļi
Video: Публичное собеседование: Junior Java Developer. Пример, как происходит защита проекта после курсов. 2024, Novembris
Anonim
Image
Image
Matlab bāzes ROS robotu kontrolieris
Matlab bāzes ROS robotu kontrolieris

Kopš bērnības es vienmēr esmu sapņojusi būt Dzelzs vīrs un joprojām to daru. Dzelzs vīrs ir viens no tiem varoņiem, kurš ir reāli iespējams, un vienkārši es vēlos kādreiz kļūt par Dzelzs vīru, pat ja cilvēki par mani smejas vai saka, ka tas nav iespējams, jo "tas ir neiespējami tikai tad, kad kāds to dara"-Arnolds Švarcenegers.

ROS ir jauna sistēma, ko izmanto sarežģītu robotikas sistēmu izstrādei. Tās pielietojumi ietver: automatizētu montāžas sistēmu, teleoperāciju, protezēšanas ieročus un smagās mašīnas rūpniecības nozarē.

Pētnieki un inženieri izmanto ROS, lai izstrādātu prototipus, bet dažādi pārdevēji to izmanto, lai radītu savus produktus. Tam ir sarežģīta arhitektūra, kas apgrūtina to, ka to pārvalda klibs cilvēks. MATLAB izmantošana saskarnes saites izveidošanai ar ROS ir jauna pieeja, kas var palīdzēt pētniekiem, inženieriem un pārdevējiem izstrādāt stabilākus risinājumus.

Tātad šī pamācība ir par to, kā izveidot uz Matlab balstītu ROS robotu kontrolieri, šī būs viena no nedaudzajām apmācībām par to, kas tur un starp dažiem ROS norādījumiem. Šī projekta mērķis ir izstrādāt kontrolieri, kas var vadīt jebkuru jūsu tīklam pievienotu ROS robotu. Tātad, sāksim!

video rediģēšanas kredīti: Ammar Akher, vietnē [email protected]

Piegādes

Projektam ir nepieciešami šādi komponenti:

(1) ROS dators/robots

(2) Maršrutētājs

(3) Dators ar MATLAB (versija: 2014 vai jaunāka)

1. darbība: visu iestatīšana

Viss tiek iestatīts
Viss tiek iestatīts

Lai to izdarītu, es savam Linux datoram un ros-kinetic izmantoju Ubuntu 16.04, tāpēc, lai izvairītos no neskaidrībām, iesaku izmantot ros kinetic un ubuntu 16.04, jo tam ir vislabākais ros-kinetic atbalsts. Lai iegūtu papildinformāciju par to, kā instalēt ros kinetic, apmeklējiet vietni https://wiki.ros.org/kinetic/Installation/Ubuntu. MATLAB iegādājaties licenci vai lejupielādējiet takas versiju no šejienes.

2. darbība. Izpratne par kontroliera darbību

Izpratne par kontroliera darbību
Izpratne par kontroliera darbību

MATLAB datorā darbojas robotu kontrolieris. Kontrolieris ievada ros pc/robota IP adresi un portu.

Ros tēma tiek izmantota, lai sazinātos starp kontrolieri un ros pc/robotu, ko kontrolieris arī ņem vērā. Modems ir nepieciešams, lai izveidotu LAN (lokālo tīklu), un tas piešķir IP adreses visām ierīcēm, kas pievienotas tā tīklam. Tāpēc ros pc/robotam un datoram, kurā darbojas kontrolieris, jābūt savienotiem vienā tīklā (ti, modema tīklā). Tagad, kad jūs zināt, "kā tas darbojas", ķersimies pie "kā tas ir uzbūvēts" …

3. darbība: ROS-MATLAB saskarnes izveide

ROS-MATLAB saskarnes izveide
ROS-MATLAB saskarnes izveide
ROS-MATLAB saskarnes izveide
ROS-MATLAB saskarnes izveide
ROS-MATLAB saskarnes izveide
ROS-MATLAB saskarnes izveide

ROS-MATLABInterface ir noderīgs interfeiss pētniekiem un studentiem, lai prototipētu savus robotu algoritmus MATLAB un pārbaudītu tos ar ROS saderīgiem robotiem. Šo saskarni var izveidot, izmantojot robotu sistēmas rīkkopu Matlab, un mēs varam prototipēt savu algoritmu un to pārbaudīt robotu ar ROS vai tādos robotu simulatoros kā Gazebo un V-REP.

Lai instalētu robotikas sistēmas rīkkopu savā MATLAB, vienkārši dodieties uz opciju Papildinājums rīkjoslā un meklējiet robotu rīklodziņu papildinājumu pārlūkā. Izmantojot robotu rīklodziņu, mēs varam publicēt vai abonēt tēmu, piemēram, ROS mezglu, un mēs varam to padarīt par ROS galveno. MATLAB-ROS saskarnē ir lielākā daļa ROS funkciju, kas jums varētu būt nepieciešama jūsu projektiem.

4. solis: IP adreses iegūšana

IP adreses iegūšana
IP adreses iegūšana
IP adreses iegūšana
IP adreses iegūšana

Lai kontrolieris darbotos, ir obligāti jāzina sava ROS robota/datora ip adrese un dators, kurā darbojas kontrolieris MATLAB.

Lai iegūtu datora IP:

Operētājsistēmā Windows:

Atveriet komandu uzvedni un ierakstiet komandu ipconfig un pierakstiet IPv4 adresi

Linux:

Ierakstiet komandu ifconfig un pierakstiet ievadīto adresi. Tagad, kad jums ir IP adrese, ir pienācis laiks izveidot GUI …

5. darbība: izveidojiet kontroliera GUI

Izveidojiet kontroliera GUI
Izveidojiet kontroliera GUI
Izveidojiet kontroliera GUI
Izveidojiet kontroliera GUI
Izveidojiet kontroliera GUI
Izveidojiet kontroliera GUI

Lai izveidotu GUI, atveriet MATLAB un komandu logā ierakstiet guide. Tas atvērs rokasgrāmatas lietotni, kuru mēs izveidosim. Varat arī izmantot MATLAB lietotņu dizaineru, lai izstrādātu savu GUI.

Kopumā mēs izveidosim 9 pogas (kā parādīts attēlā):

6 spiedpogas: uz priekšu, atpakaļ, pa kreisi, pa labi, savienojums ar robotu, atvienošana

3 Rediģējamas pogas: Ros pc ip, ports un tēmas nosaukums.

Rediģējamās pogas ir pogas, kas ievadīs ROS datora ip, tā portu un tēmas nosaukumu. Tēmas nosaukums ir MATLAB kontrolieris un ROS robots/dators. Lai rediģētu rediģējamās pogas virkni, ar peles labo pogu noklikšķiniet uz pogas >> dodieties uz Inspektora rekvizīti >> Virkne un rediģējiet pogas tekstu.

Kad jūsu GUI ir pabeigts, varat ieprogrammēt pogas. Šeit sākas īstā jautrība …

6. solis: GUI rediģējamo pogu programmēšana

GUI rediģējamo pogu programmēšana
GUI rediģējamo pogu programmēšana
GUI rediģējamo pogu programmēšana
GUI rediģējamo pogu programmēšana
GUI rediģējamo pogu programmēšana
GUI rediģējamo pogu programmēšana
GUI rediģējamo pogu programmēšana
GUI rediģējamo pogu programmēšana

GUI tiek saglabāts kā.fig fails, bet kodu/atzvanīšanas funkcijas tiek saglabātas.m formātā.. M failā ir visu jūsu pogu kods. Lai savām pogām pievienotu atzvanīšanas funkcijas, ar peles labo pogu noklikšķiniet uz pogas> > Skatīt atzvanīšanu >> atzvanīšana. Tas atvērs jūsu GUI.m failu vietā, kur šī poga ir definēta.

Pirmā atzvanīšana, ko mēs kodēsim, ir poga ROS IP rediģēšanai. Sadaļā edit1_Callback ierakstiet šādu kodu:

funkcija edit1_Callback (hObject, eventdata, rokturi)

globālais ros_master_ip

ros_master_ip = get (hObject, 'String')

Šeit funkcija ir definēta kā edit1_Callback, kas attiecas uz pirmo rediģējamo pogu. Kad šajā rediģējamajā poga ievadīsim IP adresi no ROS tīkla, tā IP adresi saglabās kā virkni globālā mainīgajā, ko sauc par ros_master_ip.

Tad tieši zem _OpeningFcn (hObject, eventdata, rokturi, varargin) definējiet sekojošo (skat. Attēlu):

globālais ros_master_ip

globālais ros_master_port

globālais teleop_tēmas nosaukums

ros_master_ip = '192.168.1.102';

ros_master_port = '11311';

teleop_topic_name = '/cmd_vel_mux/input/teleop';

Jūs vienkārši globāli kodējāt ros-pc ip (ros_master_ip), portu (ros_master_port) un Teleop Topic nosaukumu. Tas nozīmē, ka, atstājot tukšas rediģējamās pogas, šīs iepriekš noteiktās vērtības tiks izmantotas, kad izveidosit savienojumu.

Nākamais atzvanīšanas kods ir pogai Port rediģējams.

Sadaļā edit2_Callback ierakstiet šādu kodu:

funkcija edit2_Callback (hObject, eventdata, rokturi)

globālais ros_master_port

ros_master_port = get (hObject, 'String')

Šeit funkcija ir definēta kā edit2_Callback, kas attiecas uz otro rediģējamo pogu. Kad mēs ievadīsim ros pc/robota portu šeit no ROS tīkla ar šo rediģējamo pogu, tas saglabās ostu kā virkni globālā mainīgajā, ko sauc par ros_master_port.

Līdzīgi nākamais atzvanīšanas kods ir poga Tēmas nosaukuma rediģēšana.

Sadaļā edit3_Callback ierakstiet šādu kodu:

funkcija edit3_Callback (hObject, eventdata, rokturi)

globālais teleop_tēmas nosaukums

teleop_topic_name = iegūt (hObject, 'String')

Līdzīgi kā ros_master_port, arī šis tiek saglabāts kā virkne globālā mainīgajā.

Tālāk mēs apskatīsim spiedpogu atzvanīšanas funkcijas …

7. solis: GUI spiedpogu programmēšana

GUI spiedpogu programmēšana
GUI spiedpogu programmēšana
GUI spiedpogu programmēšana
GUI spiedpogu programmēšana

Iepriekš izveidotās spiedpogas mēs izmantosim, lai pārvietotu, savienotu un atvienotu robotu no kontroliera. Spiedpogas atzvanīšana tiek definēta šādi:

piem. funkcija pushbutton6_Callback (hObject, eventdata, rokturi)

Piezīme: atkarībā no secības, kādā izveidojāt spiedpogas, tās tiks attiecīgi numurētas. Tāpēc funkcija pushbutton6 manā.m failā varētu būt paredzēta pārsūtīšanai, turpretī jūsu.m failā tā varētu būt paredzēta atpakaļ, tāpēc paturiet to prātā. Lai uzzinātu, kura tieši ir jūsu spiedpogas funkcija, vienkārši ar peles labo pogu noklikšķiniet uz >> Skatīt atzvanus >> atzvanus, un tā atvērs jūsu spiedpogas funkciju, taču šim pamācībai es pieņemu, ka tā ir tāda pati kā manējā.

Pogai Savienot ar robotu:

Zem funkcijas pushbutton6_Callback (hObject, eventdata, rokturi):

funkcija pushbutton6_Callback (hObject, eventdata, rokturi) global ros_master_ip

globālais ros_master_port

globālais teleop_tēmas nosaukums

globāls robots

globālais velmsg

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

setenv ('ROS_MASTER_URI', ros_master_uri)

rosinit

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

velmsg = rosmessage (robots);

Šī atzvanīšana iestatīs mainīgo ROS_MASTER_URI, savienojot ros_master_ip un portu. Pēc tam komanda rosinit inicializēs savienojumu. Pēc savienojuma izveides tiks izveidots ģeometrijas_msgs/Twist izdevējs, kas tiks izmantots komandas ātruma nosūtīšanai. Tēmas nosaukums ir nosaukums, ko mēs norādām rediģēšanas lodziņā. Kad savienojums būs veiksmīgs, varēsim izmantot spiedpogu uz priekšu, atpakaļ, pa kreisi, pa labi.

Pirms atzvanu pievienošanas uz priekšu, atpakaļ, spiedpogai, mums jāinicializē lineārā un leņķiskā ātruma ātrums.

Tāpēc zemāk _OpeningFcn (hObject, eventdata, rokturi, varargin) definējiet sekojošo (skat. Attēlu):

global left_spinVelocity global right_spinVelocity

globālā uz priekšuVelocity

globālā atpalicība

left_spinVelocity = 2;

right_spinVelocity = -2;

forwardVelocity = 3;

backwardVelocity = -3;

Piezīme: visi ātrumi ir rad/s

Tagad, kad globālie mainīgie ir definēti, ieprogrammēsim kustības spiedpogas.

Pogai Uz priekšu:

funkcija pushbutton4_Callback (hObject, eventdata, rokturi) globālais velmsg

globāls robots

globālais teleop_tēmas nosaukums

globālā uz priekšuVelocity

velmsg. Angular. Z = 0;

velmsg. Linear. X = forwardVelocity;

sūtīt (robots, velmsg);

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

Līdzīgi spiedpogai Atpakaļ:

funkcija pushbutton5_Callback (hObject, eventdata, rokturi)

globālais velmsg

globāls robots

globālā atpalicība

globālais teleop_tēmas nosaukums

velmsg. Angular. Z = 0;

velmsg. Linear. X = atpalicībaVelocity;

sūtīt (robots, velmsg);

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

Līdzīgi spiedpogai pa kreisi: funkcija pushbutton3_Callback (hObject, eventdata, rokturi)

globālais velmsgglobal robots globālais left_spinVelocity

globālais teleop_tēmas nosaukums

velmsg. Angular. Z = left_spinVelocity;

velmsg. Linear. X = 0;

sūtīt (robots, velmsg);

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

Līdzīgi labajai spiedpogai:

globāls velmsgglobal robots

global right_spinVelocity

globālais teleop_tēmas nosaukums

velmsg. Angular. Z = right_spinVelocity;

velmsg. Linear. X = 0;

sūtīt (robots, velmsg);

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

Kad visas atzvanīšanas funkcijas ir pievienotas un faili saglabāti, mēs varam pārbaudīt savu kontrolieri.

8. darbība. Tīkla konfigurācijas iestatīšana ROS datorā (Linux)

Tīkla konfigurācijas iestatīšana ROS datorā (Linux)
Tīkla konfigurācijas iestatīšana ROS datorā (Linux)
Tīkla konfigurācijas iestatīšana ROS datorā (Linux)
Tīkla konfigurācijas iestatīšana ROS datorā (Linux)

Mēs pārbaudīsim kontrolieri ros pc (Linux), un tam būs jāiestata tīkla konfigurācija. Ja kontrolieri izmantojat arī Linux datorā, jums arī tur būs jāiestata tīkla konfigurācija.

Tīkla konfigurācija:

Atveriet termināļa logu un ierakstiet gedit.bashrc

Kad fails ir atvērts, pievienojiet šādu informāciju:

#Robota mašīnas konfigurācija

eksportēt ROS_MASTER_URI = https:// localhost: 11311

#ROS galvenā mezgla IP adrese

eksportēt ROS_HOSTNAME =

eksportēt ROS_IP =

echo "ROS_HOSTNAME:" $ ROS_HOSTNAME

echo "ROS_IP:" $ ROS_IP

echo "ROS_MASTER_URI:" $ ROS_MASTER_URI

Šis solis jums jāveic katru reizi dinamiskas IP piešķiršanas dēļ.

9. darbība: palaidiet kontrolieri

Palaidiet kontrolieri
Palaidiet kontrolieri

Mēs pārbaudīsim savu kontrolieri uz bruņurupuču robota lapenē.

Lai instalētu Gazebo, lūdzu, skatiet vietni

Lai instalētu bruņurupuču robotu, lūdzu, skatiet vietni

Atveriet mapi, kurā saglabājāt.fig un.m failus MATLAB, un nospiediet Palaist (kā parādīts attēlā). Tas atvērs datora kontrolieri. Pirms piespiežat savienojumu, pārliecinieties, vai bruņurupuču robotu simulators darbojas.

Lai pārbaudītu savu TurtleBot simulāciju:

Atveriet termināli Ros datorā un ierakstiet: $ roslaunch turtlebot_gazebo turtlebot_world.launch. Tas atvērs Turtlebot simulāciju šajā datorā. TurtleBot tēmas nosaukums ir/cmd_vel_mux/input/teleop, ko jau esam norādījuši lietojumprogrammā. Rediģējamajās pogās ierakstiet ros pc Ip adresi, portu un tēmas nosaukumu un nospiediet pogu. Savienojuma izveide ar robotu. Jūsu bruņurupuča robotam vajadzētu sākt kustēties, nospiežot uz priekšu, atpakaļ utt.

Lai skatītu lineāro un leņķisko ātrumu:

Atveriet jaunu termināli un ierakstiet komandu: $ rostopic echo/cmd_vel_mux/input/teleop

Un tur jums ir jūsu pašu Matlab balstīts ROS robotu kontrolieris. Ja jums patika mana pamācība, lūdzu, balsojiet par to pirmo reizi autoru konkursā un dalieties tajā pēc iespējas vairāk cilvēku. Paldies.

Ieteicams: