Mündəricat:

Matlab əsaslı ROS Robotik Nəzarətçi: 9 addım
Matlab əsaslı ROS Robotik Nəzarətçi: 9 addım

Video: Matlab əsaslı ROS Robotik Nəzarətçi: 9 addım

Video: Matlab əsaslı ROS Robotik Nəzarətçi: 9 addım
Video: MATLAB, ROS, Gazebo: Bridge of Doom 2024, Noyabr
Anonim
Image
Image
Matlab əsaslı ROS Robot Nəzarətçisi
Matlab əsaslı ROS Robot Nəzarətçisi

Uşaqlıqdan bəri həmişə Dəmir Adam olmağı xəyal edirdim və indi də edirəm. Dəmir Adam, gerçəkdən mümkün olan və sadəcə bir gün Dəmir Adam olmağı arzuladığım personajlardan biridir, çünki insanlar mənə gülsələr də və ya bunun mümkün olmadığını söyləsələr də, "birisi bunu etməyənə qədər bu mümkün deyil" -Arnold Schwarzenegger.

ROS, kompleks robototexnika sistemlərinin inkişafı üçün istifadə olunan yeni bir çərçivədir. Tətbiqləri bunlardır: Avtomatlaşdırılmış Quraşdırma Sistemi, Teleoperasiya, Protez Silahlar və Sənaye sektorunun Ağır Maşınları.

Tədqiqatçılar və mühəndislər prototipləri inkişaf etdirmək üçün ROS -dan istifadə edir, fərqli satıcılar isə məhsullarını yaratmaq üçün istifadə edirlər. Topal bir adam tərəfindən idarə olunmasını çətinləşdirən kompleks bir quruluşa malikdir. ROS ilə interfeys bağlantısı yaratmaq üçün MATLAB -dan istifadə etmək, tədqiqatçılara, mühəndislərə və satıcılara daha möhkəm həllər inkişaf etdirməkdə kömək edə biləcək yeni bir yanaşmadır.

Beləliklə, bu təlimat, Matlab əsaslı bir ROS Robot Nəzarətçisinin necə ediləcəyi ilə əlaqədardır, bu, orada və bir neçə ROS təlimatçısı arasında çox az sayda dərslərdən biri olacaq. Bu layihənin məqsədi, şəbəkənizə qoşulmuş hər hansı bir ROS robotunu idarə edə biləcək bir nəzarətçi dizayn etməkdir. Beləliklə, başlayaq!

video tənzimləmə krediti: Ammar Akher, [email protected] ünvanında

Təchizat

Layihə üçün aşağıdakı komponentlər tələb olunur:

(1) ROS PC/Robot

(2) yönləndirici

(3) MATLAB ilə kompüter (versiya: 2014 və ya daha yuxarı)

Addım 1: Hər şeyi Quraşdırma

Hər şeyin qurulması
Hər şeyin qurulması

Bu təlimat üçün, linux kompüterim və ros-kinetikim üçün Ubuntu 16.04 istifadə edirəm, buna görə qarışıqlığın qarşısını almaq üçün ros kinetik və ubuntu 16.04 istifadə etməyi məsləhət görürəm, çünki ros-kinetik üçün ən yaxşı dəstəyə malikdir. Ros kinetic -in necə qurulacağına dair daha çox məlumat üçün https://wiki.ros.org/kinetic/Installation/Ubuntu ünvanına daxil olun. MATLAB üçün ya lisenziya alırsınız, ya da buradan cığır versiyasını yükləyə bilərsiniz.

Addım 2: Nəzarətçinin necə işlədiyini anlayın

Nəzarətçinin necə işlədiyini başa düşmək
Nəzarətçinin necə işlədiyini başa düşmək

Bir kompüter MATLAB -da robot nəzarətçisini idarə edir. Nəzarətçi IP ünvanını və ros pc/robot portunu götürür.

Nəzarətçi ilə ros pc/robot arasında ünsiyyət qurmaq üçün ros mövzusu istifadə olunur, bu da nəzarətçi tərəfindən giriş olaraq qəbul edilir. Modem bir LAN (yerli şəbəkə) yaratmaq üçün tələb olunur və şəbəkəsinə qoşulmuş bütün cihazlara Ip ünvanlarını təyin edir. Buna görə ros pc/robot və nəzarətçi işləyən kompüter eyni şəbəkəyə (yəni modemin şəbəkəsinə) bağlanmalıdır. İndi "necə işlədiyini" bildiyiniz üçün "necə qurulduğuna" keçək …

Addım 3: ROS-MATLAB İnterfeysinin yaradılması

ROS-MATLAB İnterfeysinin yaradılması
ROS-MATLAB İnterfeysinin yaradılması
ROS-MATLAB İnterfeysinin yaradılması
ROS-MATLAB İnterfeysinin yaradılması
ROS-MATLAB İnterfeysinin yaradılması
ROS-MATLAB İnterfeysinin yaradılması

ROS-MATLABInterface, tədqiqatçılar və tələbələr üçün robot alqoritmlərini MATLAB-da prototip etmək və ROS-a uyğun robotlar üzərində sınamaq üçün faydalı bir interfeysdir. bir ROS effektiv robot və ya Gazebo və V-REP kimi robot simulyatorlarında.

Robototexnika alət qutusunu MATLAB-a quraşdırmaq üçün, sadəcə alətlər çubuğundakı Əlavələr seçiminə keçin və əlavə kəşfiyyatçısında robot alətlər qutusunu axtarın. Robot alətlər qutusundan istifadə edərək ROS qovşağı kimi bir mövzunu dərc edə və ya ona abunə ola bilərik və onu ROS ustası edə bilərik. MATLAB-ROS interfeysi, layihələriniz üçün tələb edə biləcəyiniz ROS funksiyalarının çoxuna malikdir.

Addım 4: IP ünvanını əldə edin

IP ünvanını əldə etmək
IP ünvanını əldə etmək
IP ünvanını əldə etmək
IP ünvanını əldə etmək

Nəzarətçinin işləməsi üçün ROS robotunuzun/kompüterinizin və MATLAB -da nəzarətçi işləyən kompüterin IP ünvanını bilməyiniz vacibdir.

Kompüterinizin ipini almaq üçün:

Windows -da:

Əmr əmrini açın və ipconfig əmrini yazın və IPv4 ünvanını qeyd edin

Linux üçün:

İfconfig əmrini yazın və giriş ünvanını qeyd edin. İndi ip ünvanınız var, GUI qurmağın vaxtı gəldi …

Addım 5: Nəzarətçi üçün GUI yaradın

Nəzarətçi üçün bir GUI yaradın
Nəzarətçi üçün bir GUI yaradın
Nəzarətçi üçün GUI yaradın
Nəzarətçi üçün GUI yaradın
Nəzarətçi üçün GUI yaradın
Nəzarətçi üçün GUI yaradın

GUI yaratmaq üçün MATLAB -ı açın və əmr pəncərəsinə bələdçi yazın. Bu, GUI -ni yaradacağımız bələdçi tətbiqini açacaq. GUI -nizi dizayn etmək üçün MATLAB -da tətbiq dizaynerindən də istifadə edə bilərsiniz.

Ümumilikdə 9 düymə yaradacağıq (şəkildə göstərildiyi kimi):

6 düymə: irəli, geriyə, sola, sağa, robota qoşulun, ayırın

3 Düzenlenebilir düymələr: Ros pc ip, port və Mövzu adı.

Düzenlenebilir düymələr, ROS pc-in ipini, portunu və mövzu adını giriş olaraq götürəcək düymələrdir. Mövzu adı, MATLAB nəzarətçisinin və ROS robotunun/kompüterinin ünsiyyət qurduğu şeydir. Düzəliş edilə bilən düymədə sətri düzəltmək üçün düyməni sağ vurun >> Müfəttiş xassələri >> Stringə gedin və düymənin mətnini redaktə edin.

GUI tamamlandıqdan sonra düymələri proqramlaşdıra bilərsiniz. Əsl əyləncənin başladığı yer budur …

Addım 6: GUI Düzenlenebilir Düymələrin Proqramlaşdırılması

GUI Düzenlenebilir Düymələrin Proqramlaşdırılması
GUI Düzenlenebilir Düymələrin Proqramlaşdırılması
GUI Düzenlenebilir Düymələrin Proqramlaşdırılması
GUI Düzenlenebilir Düymələrin Proqramlaşdırılması
GUI Düzenlenebilir Düymələrin Proqramlaşdırılması
GUI Düzenlenebilir Düymələrin Proqramlaşdırılması
GUI Düzenlenebilir Düymələrin Proqramlaşdırılması
GUI Düzenlenebilir Düymələrin Proqramlaşdırılması

GUI.fig faylı olaraq saxlanılır, lakin kod/geri çağırma funksiyaları.m formatında saxlanılır.m faylı bütün düymələrinizin kodunu ehtiva edir. Düymələrinizə geri çağırma funksiyaları əlavə etmək üçün düyməni sağ basın> > Geri çağırışlara baxın >> geri zəng. Bu, xüsusi düymənin təyin olunduğu yerə GUI üçün.m faylını açacaq.

Kodlaşdıracağımız ilk geri zəng, ROS IP -nin düzəliş edilə bilən düyməsidir. Edit1_Callback funksiyası altında aşağıdakı kodu yazın:

edit1_Callback funksiyası (hObject, hadisə məlumatları, tutacaqlar)

qlobal ros_master_ip

ros_master_ip = alın (hObject, 'String')

Burada funksiya edit1_Callback olaraq təyin olunur ki, bu da ilk redaktə edilə bilən düyməyə istinad edir. Bu düzəliş edilə bilən düyməyə ROS şəbəkəsindən bir IP ünvanı daxil etdiyimiz zaman, IP ünvanını ros_master_ip adlı qlobal dəyişən bir simli olaraq saxlayacaq.

Sonra _OpeningFcn (hObject, eventdata, handles, varargin) altında aşağıdakıları təyin edin (şəklə bax):

qlobal ros_master_ip

qlobal ros_master_port

qlobal teleop_topik_adı

ros_master_ip = '192.168.1.102';

ros_master_port = '11311';

teleop_topic_name = '/cmd_vel_mux/giriş/teleop';

Yalnız qlobal olaraq ros-pc ip (ros_master_ip), port (ros_master_port) və Teleop Mövzu adını sərt kodlaşdırmısınız. Düzəltmək mümkün olan düymələri boş buraxsanız, əlaqələndirdiyiniz zaman bu əvvəlcədən təyin edilmiş dəyərlər istifadə ediləcəkdir.

Kodlaşdıracağımız növbəti geri çağırış Liman tərəfindən düzəldilə bilən düymə üçündür.

Edit2_Callback funksiyası altında aşağıdakı kodu yazın:

edit2_Callback funksiyası (hObject, hadisə məlumatları, tutacaqlar)

qlobal ros_master_port

ros_master_port = alın (hObject, 'String')

Burada funksiya, redaktə edilə bilən ikinci düyməyə istinad edən edit2_Callback olaraq təyin olunur. Bu düzəliş edilə bilən düymədə ROS şəbəkəsindən buradakı ros pc/robot portuna daxil olduğumuzda, portu ros_master_port adlı qlobal bir dəyişəndə bir simli olaraq saxlayacaq.

Eynilə, kodlaşdıracağımız növbəti geri çağırma Mövzu adı redaktə edilə bilən düyməsidir.

Edit3_Callback funksiyası altında aşağıdakı kodu yazın:

edit3_Callback funksiyası (hObject, hadisə məlumatları, tutacaqlar)

qlobal teleop_topik_adı

teleop_topic_name = alın (hObject, 'String')

Ros_master_port -a bənzər, bu da qlobal dəyişəndə simli olaraq saxlanılır.

Sonra düymələr üçün geri çağırma funksiyalarına baxacağıq …

Addım 7: GUI Push Düymələrinin Proqramlaşdırılması

GUI düymələrinin proqramlaşdırılması
GUI düymələrinin proqramlaşdırılması
GUI düymələrinin proqramlaşdırılması
GUI düymələrinin proqramlaşdırılması

Daha əvvəl yaratdığımız düymələr, robotu idarəedicidən köçürmək, bağlamaq və ayırmaq üçün istifadə edəcəyimiz düymələrdir. Düymənin geri çağırılması aşağıdakı kimi müəyyən edilir:

məs. pushbutton6_Callback funksiyası (hObject, hadisə məlumatları, tutacaqlar)

Diqqət: düymələrinizi yaratmağınızdan asılı olaraq nömrələnəcək. Buna görə də.m faylımdakı pushbutton6 funksiyası Forward üçün ola bilər.m faylınızda isə geriyə ola bilər, bunu unutmayın. Düymənizin hansı funksiyasını yerinə yetirdiyini bilmək üçün sadəcə sağa vurun >> Geri çağırışlara baxın >> geri çağırışlar və bu düymə üçün funksiyanı açacaq, amma bu təlimat üçün bunun mənimki ilə eyni olduğunu düşünürəm.

Robota Bağlan düyməsi üçün:

Pushbutton6_Callback funksiyası altında (hObject, hadisə məlumatları, tutacaqlar):

pushbutton6_Callback funksiyası (hObject, hadisə məlumatları, tutacaqlar) qlobal ros_master_ip

qlobal ros_master_port

qlobal teleop_topik_adı

qlobal robot

qlobal 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 geri çağırma, ros_master_ip və portu birləşdirərək ROS_MASTER_URI dəyişənini təyin edəcək. Sonra rosinit əmri əlaqəni işə salacaq. Bağlandıqdan sonra, əmr sürətini göndərmək üçün istifadə ediləcək geometry_msgs/Twist nəşriyyatı yaradacaq. Mövzu adı, redaktə qutusunda verdiyimiz addır. Bağlantı uğurlu olduqdan sonra İleri, Geri, Sol, Sağ düymələrini işlədə biləcəyik.

İrəli, Geri çəkmə düymələrinə geri zənglər əlavə etməzdən əvvəl xətti və bucaq sürətlərinin sürətini işə salmalıyıq.

Buna görə aşağıda _OpeningFcn (hObject, hadisə məlumatları, tutacaqlar, varargin) aşağıdakıları müəyyənləşdirir (şəklə bax):

qlobal sol_spinVelocity qlobal sağ_spinVelocity

qlobal irəli sürət

qlobal geri sürət

left_spinVelocity = 2;

right_spinVelocity = -2;

forwardVelocity = 3;

geriyə sürət = -3;

Qeyd: bütün sürətlər rad/s -dədir

İndi qlobal dəyişənlər təyin olunduqdan sonra hərəkət düymələrini proqramlaşdıraq.

İrəli düyməsi üçün:

pushbutton4_Callback funksiyası (hObject, hadisə məlumatları, tutacaqlar) qlobal velmsg

qlobal robot

qlobal teleop_topik_adı

qlobal irəli sürət

velmsg. Angular. Z = 0;

velmsg. Linear. X = forwardVelocity;

göndər (robot, velmsg);

latchpub = rospublisher (teleop_topic_name, 'IsLatching', doğru);

Eyni şəkildə Geri düyməsi üçün:

pushbutton5_Callback funksiyası (hObject, hadisə məlumatları, tutacaqlar)

qlobal velmsg

qlobal robot

qlobal geri sürət

qlobal teleop_topik_adı

velmsg. Angular. Z = 0;

velmsg. Linear. X = geriyə sürət;

göndər (robot, velmsg);

latchpub = rospublisher (teleop_topic_name, 'IsLatching', doğru);

Eynilə Sol düyməsi üçün: funksiya pushbutton3_Callback (hObject, hadisə məlumatları, tutacaqlar)

qlobal velmsgglobal robot qlobal left_spinVelocity

qlobal teleop_topik_adı

velmsg. Angular. Z = left_spinVelocity;

velmsg. Linear. X = 0;

göndər (robot, velmsg);

latchpub = rospublisher (teleop_topic_name, 'IsLatching', doğru);

Eyni şəkildə sağ düymə üçün:

qlobal velmsgglobal robot

qlobal right_spinVelocity

qlobal teleop_topik_adı

velmsg. Angular. Z = right_spinVelocity;

velmsg. Linear. X = 0;

göndər (robot, velmsg);

latchpub = rospublisher (teleop_topic_name, 'IsLatching', doğru);

Bütün geri çağırma funksiyaları əlavə edildikdən və fayllar saxlanıldıqdan sonra nəzarətçimizi sınaya bilərik.

Addım 8: ROS PC -də Şəbəkə Konfiqurasiyasını (Linux) qurmaq

ROS PC -də (Linux) Şəbəkə Konfiqurasiyasının Qurulması
ROS PC -də (Linux) Şəbəkə Konfiqurasiyasının Qurulması
ROS PC -də (Linux) Şəbəkə Konfiqurasiyasının Qurulması
ROS PC -də (Linux) Şəbəkə Konfiqurasiyasının Qurulması

İdarəçini şəbəkə konfiqurasiyasının qurulmasını tələb edəcək bir ros pc (Linux) üzərində sınaqdan keçirəcəyik. Əgər nəzarətçini linux pc -də də işləyirsinizsə, orada da şəbəkə konfiqurasiyasını qurmalı olacaqsınız.

Şəbəkə Konfiqurasiyası:

Terminal pəncərənizi açın və gedit.bashrc yazın

Fayl açıldıqdan sonra aşağıdakıları əlavə edin:

#Robot Maşın Konfiqurasiyası

ixrac ROS_MASTER_URI = https:// localhost: 11311

ROS master qovşağının #IP ünvanı

ixrac et ROS_HOSTNAME =

ixrac ROS_IP =

echo "ROS_HOSTNAME:" $ ROS_HOSTNAME

echo "ROS_IP:" $ ROS_IP

echo "ROS_MASTER_URI:" $ ROS_MASTER_URI

Dinamik IP təyin etməsi səbəbindən hər dəfə bu addımı atmalısınız.

Addım 9: Nəzarətçini işə salın

Nəzarətçini işə salın
Nəzarətçini işə salın

Nəzarətçimizi Gazebodakı Tısbağa botunda sınayacağıq.

Gazebo qurmaq üçün https://gazebosim.org/tutorials?tut=install_ubuntu&cat=install ünvanına baxın.

Turtle botu qurmaq üçün https://yainnoware.blogspot.com/2018/09/install-turtlebot-on-ros-kinetic-ubuntu.html ünvanına baxın.

MATLAB -da.fig və.m fayllarınızı saxladığınız qovluğu açın və Run düyməsini basın (şəkildə göstərildiyi kimi). Bağlanmağa basmadan əvvəl, tısbağa bot simulyatorunuzun işlədiyinə əmin olun.

TurtleBot simulyasiyanızı sınamaq üçün:

Terminalı Ros PC -də açın və yazın: $ roslaunch turtlebot_gazebo turtlebot_world.launch. Bu, PC -də Turtlebot simulyasiyasını açacaq. TurtleBotun mövzu adı, tətbiqdə artıq təmin etdiyimiz/cmd_vel_mux/input/teleop. Ros pc Ip ünvanını, liman və mövzu adını redaktə edilə bilən düymələrə yazın və Robotla əlaqə düyməsini basın. Tısbağa botunuz İrəli, Geri və s. Basdıqda hərəkətə başlamalıdır.

Xətti və açısal sürətlərə baxmaq üçün:

Yeni bir terminal açın və əmri yazın: $ rostopic echo/cmd_vel_mux/input/teleop

Və orada, öz Matlab əsaslı ROS Robot Nəzarətçiniz var. Təlimatlarımı bəyənmisinizsə, lütfən, İlk dəfə Müəllif Yarışmasında səs verin və mümkün qədər çox insanla paylaşın. Çox sağ ol.

Tövsiyə: