Mundarija:

Matlab-ga asoslangan ROS robot boshqaruvchisi: 9 qadam
Matlab-ga asoslangan ROS robot boshqaruvchisi: 9 qadam

Video: Matlab-ga asoslangan ROS robot boshqaruvchisi: 9 qadam

Video: Matlab-ga asoslangan ROS robot boshqaruvchisi: 9 qadam
Video: Matlab Traveling Salesmen Problem using Genetic Algorithm 2024, Noyabr
Anonim
Image
Image
Matlab asosidagi ROS robot boshqaruvchisi
Matlab asosidagi ROS robot boshqaruvchisi

Men bolaligimdan temir odam bo'lishni orzu qilardim va hozir ham shunday qilaman. Temir odam-bu haqiqatan ham mumkin bo'lgan va men aytadigan bo'lsam ham, men Iron Man bo'lishni xohlaydigan qahramonlardan biri, lekin agar odamlar menga kulib yoki bu imkonsiz deb aytishsa ham, chunki "buni kimdir qilmaguncha imkonsiz"-Arnold Shvartsenegger.

ROS - bu murakkab robototexnika tizimlarini ishlab chiqish uchun ishlatiladigan yangi tizim. U quyidagilarni o'z ichiga oladi: avtomatlashtirilgan yig'ish tizimi, teleoperatsiya, protez qurollari va og'ir sanoat mashinasozligi.

Tadqiqotchilar va muhandislar prototiplarni ishlab chiqish uchun ROS -dan foydalanadilar, turli ishlab chiqaruvchilar esa o'z mahsulotlarini yaratishda foydalanadilar, bu esa oqsoqol boshqarishni qiyinlashtiradigan murakkab arxitekturaga ega. MATLAB -dan ROS bilan interfeys havolasini yaratish - tadqiqotchilar, muhandislar va sotuvchilarga yanada mustahkam echimlar ishlab chiqishda yordam beradigan yangi yondashuv.

Shunday qilib, bu ko'rsatma Matlab-ga asoslangan ROS robot boshqaruvchisini qanday yasash kerakligi haqida bo'lib, u bu erda va bir nechta ROS ko'rsatmalari orasida juda kam qo'llanmalardan biri bo'ladi. Loyihaning maqsadi-sizning tarmog'ingizga ulangan har qanday ROS-robotni boshqarishi mumkin bo'lgan boshqaruvchini loyihalash. Shunday qilib, boshlaylik!

video-tahrir kreditlari: Ammar Akher, [email protected]

Ta'minotlar

Loyiha uchun quyidagi komponentlar talab qilinadi:

(1) ROS kompyuter/robot

(2) yo'riqnoma

(3) MATLAB o'rnatilgan kompyuter (versiya: 2014 yil yoki undan yuqori)

1 -qadam: Hamma narsani sozlash

Hamma narsani sozlash
Hamma narsani sozlash

Bu ko'rsatma uchun men Linux va ros-kinetik kompyuterlar uchun Ubuntu 16.04 dan foydalanmoqdaman, shuning uchun chalkashliklarni oldini olish uchun ros kinetik va ubuntu 16.04 dan foydalanishni tavsiya qilaman, chunki u ros-kinetik uchun eng yaxshi yordamga ega. Qanday qilib ros kinetikani o'rnatish haqida ko'proq ma'lumot olish uchun https://wiki.ros.org/kinetic/Installation/Ubuntu saytiga tashrif buyuring. MATLAB uchun siz litsenziyani sotib olasiz yoki bu yerdan trek versiyasini yuklaysiz.

2 -qadam: Nazoratchi qanday ishlashini tushunish

Nazoratchi qanday ishlashini tushunish
Nazoratchi qanday ishlashini tushunish

Kompyuter MATLAB -da robot boshqaruvchisini boshqaradi. Tekshiruvchi IP -manzilni va ros pc/robot portini oladi.

Nazoratchi va ros pc/robot o'rtasida aloqa o'rnatish uchun ros-mavzu ishlatiladi, u ham nazoratchi tomonidan kirish sifatida qabul qilinadi. Modem LAN (mahalliy tarmoq) yaratish uchun talab qilinadi va tarmoqqa ulangan barcha qurilmalarga IP manzillarini tayinlaydi. Shunday qilib, ros pc/robot va kontroller ishlaydigan kompyuter bir xil tarmoqqa ulangan bo'lishi kerak (ya'ni. Modem tarmog'i). Endi "qanday ishlashini" bilganingizdan so'ng, "qanday qurilgani" ga o'tamiz …

3-qadam: ROS-MATLAB interfeysini yaratish

ROS-MATLAB interfeysini yaratish
ROS-MATLAB interfeysini yaratish
ROS-MATLAB interfeysini yaratish
ROS-MATLAB interfeysini yaratish
ROS-MATLAB interfeysini yaratish
ROS-MATLAB interfeysini yaratish

ROS-MATLABInterface-bu tadqiqotchilar va talabalar uchun robot algoritmlarini MATLAB-da prototiplash va uni ROS-ga mos keladigan robotlarda sinab ko'rish uchun foydali interfeys. Bu interfeysni matlabdagi robototexnika asboblar qutisi yaratishi mumkin va biz o'z algoritmimizni prototipini va uni sinab ko'rishimiz mumkin. ROS bilan ishlaydigan robot yoki Gazebo va V-REP kabi robot simulyatorlarida.

MATLAB-ga robototexnika asboblar qutisini o'rnatish uchun asboblar panelidagi Qo'shimcha-ni tanlang va plagin-qidiruvchidan robot asboblar qutisini qidiring. Robot asboblar qutisidan foydalanib, biz ROS tuguni kabi mavzuni nashr qilishimiz yoki unga obuna bo'lishimiz mumkin va biz uni ROS ustasi qilishimiz mumkin. MATLAB-ROS interfeysi sizning loyihalaringiz uchun talab qilinadigan ko'p ROS funktsiyalariga ega.

4 -qadam: IP manzilini olish

IP manzilini olish
IP manzilini olish
IP manzilini olish
IP manzilini olish

Nazoratchi ishlashi uchun ROS robotining/kompyuterining va MATLAB -da boshqaruvchi ishlaydigan kompyuterning IP -manzilini bilish zarur.

Kompyuteringizning IP manzilini olish uchun:

Windows -da:

Buyruqning xohishini oching va ipconfig buyrug'ini kiriting va IPv4 manzilini yozing

Linux uchun:

Ifconfig buyrug'ini kiriting va kirish manzilini yozing. Endi sizda IP -manzil bor, GUI -ni yaratish vaqti keldi …

5 -qadam: Nazoratchi uchun GUI yarating

Nazoratchi uchun GUI yarating
Nazoratchi uchun GUI yarating
Nazoratchi uchun GUI yarating
Nazoratchi uchun GUI yarating
Nazoratchi uchun GUI yarating
Nazoratchi uchun GUI yarating

GUI yaratish uchun MATLAB -ni oching va buyruqlar oynasida qo'llanmani kiriting. Bu qo'llanma dasturini ochadi, lekin biz GUI -ni yaratamiz. GUI -ni loyihalash uchun siz MATLAB -dagi ilova dizayneridan ham foydalanishingiz mumkin.

Biz jami 9 ta tugmani yaratamiz (rasmda ko'rsatilganidek):

6 ta tugma: oldinga, orqaga, chapga, o'ngga, robotga ulanish, uzish

3 tahrirlanadigan tugmalar: Ros pc ip, port va mavzu nomi.

Tartibga solish tugmalari-bu ROS kompyuterining IP-manzilini, uning portini va mavzu nomini qabul qiladigan tugmalar. Mavzuning nomi - bu MATLAB boshqaruvchisi va ROS robot/kompyuteri orqali muloqot qilish. Tartibga solish tugmachasidagi satrni tahrir qilish uchun sichqonchaning o'ng tugmasi bilan bosing >> inspektor xususiyatlari >> satriga o'ting va tugma matnini tahrirlang.

GUI tugagandan so'ng siz tugmachalarni dasturlashingiz mumkin. Haqiqiy zavq shu erda boshlanadi …

6 -qadam: GUI tahrirlanadigan tugmalarini dasturlash

GUI tahrirlanadigan tugmachalarni dasturlash
GUI tahrirlanadigan tugmachalarni dasturlash
GUI tahrirlanadigan tugmachalarni dasturlash
GUI tahrirlanadigan tugmachalarni dasturlash
GUI tahrirlanadigan tugmachalarni dasturlash
GUI tahrirlanadigan tugmachalarni dasturlash
GUI tahrirlanadigan tugmachalarni dasturlash
GUI tahrirlanadigan tugmachalarni dasturlash

GUI.fig fayli sifatida saqlanadi, lekin kod/qayta qo'ng'iroq qilish funktsiyalari.m formatida saqlanadi.m fayli sizning barcha tugmalaringizning kodini o'z ichiga oladi. Tugmalaringizga qayta qo'ng'iroq qilish funksiyalarini qo'shish uchun tugmani o'ng tugmasini bosing> > Qayta qo'ng'iroqlarni ko'rish >> qayta qo'ng'iroq. Bu sizning GUI uchun.m faylini ochadi, bu tugma aniqlanadi.

Biz kodlamoqchi bo'lgan birinchi qayta qo'ng'iroq - bu ROS IP -ni tahrirlash tugmasi. Edit1_Callback funksiyasi ostida quyidagi kodni yozing:

edit1_Callback funktsiyasi (hObject, voqea ma'lumotlari, tutqichlar)

global ros_master_ip

ros_master_ip = olish (hObject, 'String')

Bu erda funktsiya edit1_Callback sifatida belgilanadi, bu birinchi tahrirlanadigan tugmachani nazarda tutadi. Ushbu tahrirlanadigan tugmachada biz ROS tarmog'idan IP-manzilni kiritganimizda, u IP-manzilni ros_master_ip nomli global o'zgaruvchiga mag'lubiyat sifatida saqlaydi.

Keyin _OpeningFcn (hObject, eventdata, handles, varargin) ostida quyidagilarni aniqlang (rasmga qarang):

global ros_master_ip

global ros_master_port

global teleop_topik_ nomi

ros_master_ip = '192.168.1.102';

ros_master_port = '11311';

teleop_topic_name = '/cmd_vel_mux/kirish/teleop';

Siz butun dunyo bo'ylab ros-pc ip (ros_master_ip), port (ros_master_port) va Teleop mavzusi nomini qattiq kodladingiz. Buning ma'nosi shundaki, agar siz tahrirlanadigan tugmalarni bo'sh qoldirsangiz, ulanganingizda bu oldindan belgilangan qiymatlar ishlatiladi.

Keyingi qayta qo'ng'iroq qilish - bu portni tahrirlash tugmasi.

Edit2_Callback funktsiyasi ostida quyidagi kodni yozing:

edit2_Callback funktsiyasi (hObject, voqea ma'lumotlari, tutqichlar)

global ros_master_port

ros_master_port = olish (hObject, 'String')

Bu erda funktsiya edit2_Callback sifatida belgilanadi, bu ikkinchi tahrirlanadigan tugmachani nazarda tutadi. Biz ros pc/robot portini ROS tarmog'idan bu tahrirlanadigan tugmachaga kiritganimizda, u portni ros_master_port nomli global o'zgaruvchiga mag'lubiyat sifatida saqlaydi.

Xuddi shunday, biz qo'ng'iroq qilmoqchi bo'lgan navbatdagi qayta qo'ng'iroq mavzuni tahrirlash tugmasi uchun.

Edit3_Callback funktsiyasi ostida quyidagi kodni yozing:

edit3_Callback funktsiyasi (hObject, voqea ma'lumotlari, tutqichlar)

global teleop_topik_ nomi

teleop_topic_name = olish (hObject, 'String')

Ros_master_port ga o'xshab, bu ham global o'zgaruvchida mag'lubiyat sifatida saqlanadi.

Keyin biz tugmachalarni qaytarish funktsiyalarini ko'rib chiqamiz …

7 -qadam: GUI tugmachalarini dasturlash

GUI tugmachalarini dasturlash
GUI tugmachalarini dasturlash
GUI tugmachalarini dasturlash
GUI tugmachalarini dasturlash

Biz ilgari yaratgan tugmachalar biz robotni boshqaruvchidan siljitish, ulash va uzish uchun ishlatamiz. Qayta bosish tugmachalari quyidagicha tasniflanadi:

masalan. pushbutton6_Callback funktsiyasi (hObject, voqea ma'lumotlari, tutqichlar)

Eslatma: tugmachalarni yaratish tartibiga qarab, ular raqamlanadi. Shuning uchun.m faylimdagi pushbutton6 funktsiyasi Forward bo'lishi mumkin, sizning.m faylda esa Orqaga bo'lishi mumkin, shuning uchun buni yodda tuting. Qaysi tugmani bosish kerakligini aniq bilish uchun, sichqonchaning o'ng tugmachasini bosing >> Qayta qo'ng'iroqlarni ko'rish >> qayta qo'ng'iroqlar va bu sizning tugmachangiz uchun funktsiyani ochadi, lekin men buni meniki bilan bir xil deb o'ylayman.

Robotga ulanish tugmasi uchun:

Pushbutton6_Callback funktsiyasi ostida (hObject, eventdata, handles):

pushbutton6_Callback funktsiyasi (hObject, eventdata, handles) global ros_master_ip

global ros_master_port

global teleop_topik_ nomi

global robot

global velmsg

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

setenv ('ROS_MASTER_URI', ros_master_uri)

rozinit

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

velmsg = rosmessage (robot);

Bu qayta qo'ng'iroq ros_master_ip va portni birlashtirish orqali ROS_MASTER_URI o'zgaruvchisini o'rnatadi, keyin rosinit buyrug'i ulanishni ishga tushiradi. Ulanishdan so'ng, u geometry_msgs/Twist nashriyotini yaratadi, u buyruq tezligini yuborish uchun ishlatiladi. Mavzu nomi - bu tahrirlash oynasida berilgan nom. Ulanish muvaffaqiyatli bo'lgandan so'ng, biz oldinga, orqaga, chapga, o'ngga bosish tugmalarini ishlata olamiz.

Oldinga, orqaga surish tugmalariga qo'ng'iroqlarni qaytarishdan oldin biz chiziqli va burchak tezligini ishga tushirishimiz kerak.

Shuning uchun quyida _OpeningFcn (hObject, eventdata, handles, varargin) quyidagilarni aniqlaydi (rasmga qarang):

global chap_spinVelocity global o'ng_spinVelocity

global oldinga tezlik

global qoloqlik tezligi

chap_spinVelocity = 2;

o'ng_spinVelocity = -2;

forwardVelocity = 3;

orqaga tezlik = -3;

Eslatma: barcha tezliklar rad/s

Endi global o'zgaruvchilar aniqlangach, harakat tugmalarini dasturlashtiraylik.

Oldinga o'tish tugmasi uchun:

pushbutton4_Callback funktsiyasi (hObject, eventdata, handles) global velmsg

global robot

global teleop_topik_ nomi

global oldinga tezlik

velmsg. Angular. Z = 0;

velmsg. Linear. X = forwardVelocity;

yuborish (robot, velmsg);

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

Xuddi shunday "Orqaga" tugmasi uchun:

pushbutton5_Callback funktsiyasi (hObject, voqea ma'lumotlari, tutqichlar)

global velmsg

global robot

global qoloqlik tezligi

global teleop_topik_ nomi

velmsg. Angular. Z = 0;

velmsg. Linear. X = orqaga Tezlik;

yuborish (robot, velmsg);

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

Chap tugma uchun ham xuddi shunday: pushbutton3_Callback funktsiyasi (hObject, voqea ma'lumotlari, tutqichlar)

global global velmsgglobal robot global chap_spinVelocity

global teleop_topik_ nomi

velmsg. Angular. Z = left_spinVelocity;

velmsg. Linear. X = 0;

yuborish (robot, velmsg);

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

Xuddi shunday o'ng tugmachasi uchun:

global velmsgglobal robot

global right_spinVelocity

global teleop_topik_ nomi

velmsg. Angular. Z = o'ng_spinVelocity;

velmsg. Linear. X = 0;

yuborish (robot, velmsg);

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

Qayta qo'ng'iroq qilishning barcha funktsiyalari qo'shilgandan va fayllar saqlanganidan so'ng, biz nazoratchimizni sinab ko'rishimiz mumkin.

8 -qadam: ROS kompyuterida (Linux) tarmoq konfiguratsiyasini o'rnatish

ROS PC (Linux) da tarmoq konfiguratsiyasini sozlash
ROS PC (Linux) da tarmoq konfiguratsiyasini sozlash
ROS PC (Linux) da tarmoq konfiguratsiyasini sozlash
ROS PC (Linux) da tarmoq konfiguratsiyasini sozlash

Biz ros pc (Linux) da tekshiruvchini sinab ko'ramiz, bu tarmoq konfiguratsiyasini o'rnatishni talab qiladi. Agar siz ham boshqaruvchini linux kompyuterda ishlatayotgan bo'lsangiz, u erda tarmoq konfiguratsiyasini ham o'rnatishingiz kerak bo'ladi.

Tarmoq konfiguratsiyasi:

Terminal oynasini oching va gedit.bashrc kiriting

Fayl ochilgandan so'ng quyidagilarni qo'shing:

#Robot mashinasi konfiguratsiyasi

eksport qilish ROS_MASTER_URI = https:// localhost: 11311

#ROS master tugunining IP -manzili

eksport qilish ROS_HOSTNAME =

eksport qilish ROS_IP =

echo "ROS_HOSTNAME:" $ ROS_HOSTNAME

echo "ROS_IP:" $ ROS_IP

echo "ROS_MASTER_URI:" $ ROS_MASTER_URI

Har safar dinamik IP tayinlanishi tufayli siz ushbu qadamni bajarishingiz kerak.

9 -qadam: Tekshirgichni ishga tushiring

Tekshirgichni ishga tushiring
Tekshirgichni ishga tushiring

Biz nazoratchimizni Gazebodagi Turtle botida sinab ko'rmoqchimiz.

Gazebo -ni o'rnatish uchun https://gazebosim.org/tutorials?tut=install_ubuntu&cat=install ga qarang.

Turtle botini o'rnatish uchun https://yainnoware.blogspot.com/2018/09/install-turtlebot-on-ros-kinetic-ubuntu.html ga qarang.

MATLAB -da.fig va.m fayllarini saqlagan papkani oching va Ishga tushirish -ni bosing (rasmda ko'rsatilgandek), bu kompyuterda boshqaruvchini ochadi. Ulanish tugmachasini bosishdan oldin, toshbaqa bot simulyatori ishlayotganiga ishonch hosil qiling.

TurtleBot simulyatsiyasini sinab ko'rish uchun:

Terminalni Ros kompyuterda oching va yozing: $ roslaunch turtlebot_gazebo turtlebot_world.launch. Bu kompyuterda Turtlebot simulyatsiyasini ochadi. TurtleBot -ning mavzu nomi - bu/cmd_vel_mux/input/teleop, biz uni allaqachon dasturda berganmiz. O'zgartirish tugmalariga ros pc Ip manzilini, port va mavzu nomini kiriting va "Robotga ulanish" tugmasini bosing. Sizning toshbaqa botingiz oldinga, orqaga va boshqalarni bosganingizda harakatlana boshlaydi.

Chiziqli va burchakli tezlikni ko'rish uchun:

Yangi terminalni oching va buyruqni kiriting: $ rostopic echo/cmd_vel_mux/input/teleop

Va u erda sizda Matlab-ga asoslangan ROS robot boshqaruvchisi bor. Agar sizga mening ko'rsatmam yoqqan bo'lsa, iltimos, birinchi marta mualliflar tanlovida ovoz bering va iloji boricha ko'proq odamlar bilan baham ko'ring. Rahmat.

Tavsiya: