İçindekiler:

Matlab Tabanlı ROS Robotik Denetleyici: 9 Adım
Matlab Tabanlı ROS Robotik Denetleyici: 9 Adım

Video: Matlab Tabanlı ROS Robotik Denetleyici: 9 Adım

Video: Matlab Tabanlı ROS Robotik Denetleyici: 9 Adım
Video: Two robots carrying an object over their heads cooperatively in parallel formation - MobileSim 2024, Eylül
Anonim
Image
Image
Matlab tabanlı ROS Robotik Denetleyici
Matlab tabanlı ROS Robotik Denetleyici

Çocukluğumdan beri hep Iron Man olmayı hayal ettim ve hala da öyle. Iron Man, gerçekçi olarak mümkün olan ve insanlar bana gülseler veya "sadece birileri yapana kadar imkansız" diye bunun imkansız olduğunu söyleseler bile, bir gün Iron Man olmayı arzu ettiğimi söyleyen karakterlerden biri. -Arnold Schwarzenegger.

ROS, karmaşık robotik sistemleri geliştirmek için kullanılan gelişmekte olan bir çerçevedir. Uygulamaları şunları içerir: Otomatik Montaj Sistemi, Teleoperasyon, Protez Kollar ve Sanayi sektörünün Ağır Makinaları.

Araştırmacılar ve mühendisler, prototipleri geliştirmek için ROS'tan yararlanırken, farklı satıcılar ürünlerini oluşturmak için kullanıyor. Topal bir adam tarafından yönetilmesini zorlaştıran karmaşık bir mimariye sahip. ROS ile arayüz bağlantısı oluşturmak için MATLAB'ı kullanmak, araştırmacılara, mühendislere ve satıcılara daha sağlam çözümler geliştirmede yardımcı olabilecek yeni bir yaklaşımdır.

Bu talimat, Matlab tabanlı bir ROS Robotik Denetleyicinin nasıl yapılacağı hakkındadır, bu, bu konuda çok az öğreticiden biri ve birkaç ROS talimatı arasında olacaktır. Bu projenin amacı, ağınıza bağlı herhangi bir ROS robotunu kontrol edebilen bir kontrolör tasarlamaktır. O halde başlayalım!

video düzenleme kredisi: Ammar Akher, [email protected] adresinde

Gereçler

Proje için aşağıdaki bileşenler gereklidir:

(1) ROS PC/Robot

(2) Yönlendirici

(3) MATLAB'lı PC (sürüm: 2014 veya üzeri)

Adım 1: Her Şeyin Kurulumunu Alma

Her Şeyin Kurulumunu Alma
Her Şeyin Kurulumunu Alma

Bu talimat için, linux bilgisayarım ve ros-kinetic için Ubuntu 16.04 kullanıyorum, bu yüzden karışıklığı önlemek için ros-kinetic için en iyi desteğe sahip olduğundan ros kinetic ve ubuntu 16.04 kullanmanızı öneririm. ros kinetic'in nasıl kurulacağı hakkında daha fazla bilgi için https://wiki.ros.org/kinetic/Installation/Ubuntu adresine gidin. MATLAB için buradan bir lisans satın alabilir veya bir deneme sürümünü indirebilirsiniz.

Adım 2: Denetleyicinin Nasıl Çalıştığını Anlama

Denetleyicinin Nasıl Çalıştığını Anlama
Denetleyicinin Nasıl Çalıştığını Anlama

MATLAB üzerinde bir bilgisayar robotik denetleyiciyi çalıştırır. Kontrolör, ros pc/robot'un IP adresini ve portunu alır.

Denetleyici ve denetleyici tarafından girdi olarak alınan ros pc/robot arasında iletişim kurmak için bir ros-konu kullanılır. Modem, bir LAN (yerel alan ağı) oluşturmak için gereklidir ve ağına bağlı tüm cihazlara IP adreslerini atayan şeydir. Bu nedenle, ros pc/robot ve denetleyiciyi çalıştıran pc'nin her ikisinin de aynı ağa (yani modemin ağına) bağlı olması gerekir. Artık "nasıl çalıştığını" bildiğinize göre, gelelim "nasıl yapıldığına"…

Adım 3: Bir ROS-MATLAB Arayüzü Oluşturma

Bir ROS-MATLAB Arayüzü Oluşturma
Bir ROS-MATLAB Arayüzü Oluşturma
Bir ROS-MATLAB Arayüzü Oluşturma
Bir ROS-MATLAB Arayüzü Oluşturma
Bir ROS-MATLAB Arayüzü Oluşturma
Bir ROS-MATLAB Arayüzü Oluşturma

ROS-MATLABInterface, araştırmacılar ve öğrenciler için robot algoritmalarını MATLAB'da prototiplemek ve ROS uyumlu robotlar üzerinde test etmek için kullanışlı bir arayüzdür. Bu arayüz, matlab'daki robotik sistem araç kutusu tarafından oluşturulabilir ve algoritmamızı prototipleyebilir ve üzerinde test edebiliriz. ROS özellikli bir robot veya Gazebo ve V-REP gibi robot simülatörlerinde.

MATLAB'ınıza robotik sistem araç kutusunu kurmak için, araç çubuğundaki Eklenti seçeneğine gidin ve eklenti gezgininde robotik araç kutusunu arayın. Robotik araç kutusunu kullanarak, bir ROS düğümü gibi bir konuyu yayınlayabilir veya abone olabiliriz ve onu bir ROS yöneticisi yapabiliriz. MATLAB-ROS arayüzü, projeleriniz için ihtiyaç duyabileceğiniz ROS işlevlerinin çoğuna sahiptir.

Adım 4: IP Adresini Alma

IP Adresini Alma
IP Adresini Alma
IP Adresini Alma
IP Adresini Alma

Kontrolörün çalışması için, ROS robotunuzun/PC'nizin ip adresini ve MATLAB üzerinde kontrolörü çalıştıran bilgisayarın ip adresini bilmeniz zorunludur.

Bilgisayarınızın ipini almak için:

Windows'ta:

Komut istemini açın ve ipconfig komutunu yazın ve IPv4 adresini not edin

Linux için:

ifconfig komutunu yazın ve inet adresini not edin. Artık ip adresine sahip olduğunuza göre, GUI'yi oluşturmanın zamanı geldi…

Adım 5: Denetleyici için bir GUI oluşturun

Denetleyici için bir GUI oluşturun
Denetleyici için bir GUI oluşturun
Denetleyici için bir GUI oluşturun
Denetleyici için bir GUI oluşturun
Denetleyici için bir GUI oluşturun
Denetleyici için bir GUI oluşturun

GUI'yi oluşturmak için MATLAB'ı açın ve komut penceresine kılavuz yazın. Bu, GUI'mizi oluşturacağımız rehber uygulamasını açacaktır. GUI'nizi tasarlamak için MATLAB'daki uygulama tasarımcısını da kullanabilirsiniz.

Toplamda 9 adet buton oluşturacağız (şekilde görüldüğü gibi):

6 basma düğmesi: İleri, Geri, Sol, Sağ, Robota Bağlan, Bağlantıyı Kes

3 Düzenlenebilir düğmeler: Ros pc ip, port ve Konu adı.

Düzenlenebilir butonlar, ROS pc'nin ipini, portunu ve Konu adını girdi olarak alacak olan butonlardır. Konu adı, MATLAB denetleyicisi ve ROS robotu/pc'nin iletişim kurduğu şeydir. Düzenlenebilir düğmedeki dizeyi düzenlemek için, düğmeye sağ tıklayın >> Denetçi özellikleri >> Dize'ye gidin ve düğmenin metnini düzenleyin.

GUI'niz tamamlandığında düğmeleri programlayabilirsiniz. İşte asıl eğlence burada başlıyor…

Adım 6: GUI Düzenlenebilir Düğmelerini Programlama

GUI Düzenlenebilir Düğmelerini Programlama
GUI Düzenlenebilir Düğmelerini Programlama
GUI Düzenlenebilir Düğmelerini Programlama
GUI Düzenlenebilir Düğmelerini Programlama
GUI Düzenlenebilir Düğmelerini Programlama
GUI Düzenlenebilir Düğmelerini Programlama
GUI Düzenlenebilir Düğmelerini Programlama
GUI Düzenlenebilir Düğmelerini Programlama

GUI bir.fig dosyası olarak kaydedilir, ancak kod/geri arama işlevleri.m biçiminde kaydedilir..m dosyası tüm düğmelerinizin kodunu içerir. Düğmelerinize geri arama işlevleri eklemek için düğmeyi sağ tıklayın > >Geri aramaları görüntüle >>geri arama. Bu, GUI'niz için.m dosyasını o özel düğmenin tanımlandığı yere açacaktır.

Kodlayacağımız ilk geri arama, ROS IP düzenlenebilir düğmesi içindir. edit1_Callback işlevinin altına aşağıdaki kodu yazın:

function edit1_Callback(hObject, eventdata, tanıtıcılar)

küresel ros_master_ip

ros_master_ip = get(hObject, 'Dize')

Burada işlev, ilk düzenlenebilir düğmeye atıfta bulunan edit1_Callback olarak tanımlanır. Bu düzenlenebilir düğmeye ROS ağından bir IP adresi girdiğimizde, IP adresini ros_master_ip adlı global bir değişkende bir dize olarak saklayacaktır.

Ardından, _OpeningFcn(hObject, eventdata, handles, varargin) altında aşağıdakileri tanımlayın (şekle bakın):

küresel ros_master_ip

küresel ros_master_port

global teleop_topic_name

ros_master_ip = '192.168.1.102';

ros_master_port = '11311';

teleop_topic_name = '/cmd_vel_mux/input/teleop';

ros-pc ip (ros_master_ip), port (ros_master_port) ve Teleop Topic adını global olarak sabit kodladınız. Bunun yaptığı şey, düzenlenebilir düğmeleri boş bırakırsanız, bağlandığınızda bu önceden tanımlanmış değerler kullanılacaktır.

Kodlayacağımız bir sonraki geri arama, Port düzenlenebilir düğmesi içindir.

edit2_Callback işlevinin altına aşağıdaki kodu yazın:

function edit2_Callback(hObject, eventdata, tanıtıcılar)

küresel ros_master_port

ros_master_port = get(hObject, 'Dize')

Burada işlev, ikinci düzenlenebilir düğmeye atıfta bulunan edit2_Callback olarak tanımlanır. Bu düzenlenebilir butonda ROS ağından ros pc/robot'un portunu buraya girdiğimizde, portu ros_master_port adlı global bir değişkende bir dizge olarak saklayacaktır.

Benzer şekilde, kodlayacağımız bir sonraki geri arama, Konu adı düzenlenebilir düğmesi içindir.

edit3_Callback işlevinin altına aşağıdaki kodu yazın:

function edit3_Callback(hObject, eventdata, tanıtıcılar)

global teleop_topic_name

teleop_topic_name = get(hObject, 'Dize')

ros_master_port'a benzer şekilde, bu da global bir değişkende dizge olarak saklanır.

Daha sonra butonlar için geri arama işlevlerine bakacağız…

Adım 7: GUI Basmalı Düğmelerini Programlama

GUI Basmalı Düğmelerini Programlama
GUI Basmalı Düğmelerini Programlama
GUI Basmalı Düğmelerini Programlama
GUI Basmalı Düğmelerini Programlama

Daha önce oluşturduğumuz butonlar, robotu hareket ettirmek, bağlamak ve kontrolörden ayırmak için kullanacağımız düğmelerdir. Basmalı düğme geri aramaları aşağıdaki gibi tanımlanır:

Örneğin. işlev pushbutton6_Callback(hObject, eventdata, tanıtıcılar)

Not: Basma düğmelerinizi oluşturduğunuz sıraya bağlı olarak, buna göre numaralandırılırlar. Bu nedenle,.m dosyamdaki pushbutton6 işlevi İleri için olabilirken,.m dosyanızda Geriye yönelik olabilir, bu yüzden bunu aklınızda bulundurun. Basma düğmeniz için tam olarak hangi işlevin olduğunu bilmek için, >>Geri aramaları görüntüle >>geri aramaları sağ tıklayın ve bu düğmeniz için işlevi açacaktır, ancak bu talimat için benimkiyle aynı olduğunu varsayıyorum.

Robota bağlan düğmesi için:

pushbutton6_Callback(hObject, eventdata, tanıtıcılar) işlevinin altında:

işlev pushbutton6_Callback(hObject, eventdata, tanıtıcılar) global ros_master_ip

küresel ros_master_port

global teleop_topic_name

küresel robot

küresel velmsg

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);

Bu geri arama, ros_master_ip ve bağlantı noktasını birleştirerek ROS_MASTER_URI değişkenini ayarlayacaktır. Ardından rosinit komutu bağlantıyı başlatacaktır. Bağlandıktan sonra, komut hızını göndermek için kullanılacak olan bir geometri_msgs/Twist yayıncısı oluşturacaktır. Konu adı, düzenleme kutusuna verdiğimiz isimdir. Bağlantı başarılı olduktan sonra İleri, Geri, Sol, Sağ butonlarını çalıştırabileceğiz.

İleri, Geri basma düğmelerine geri aramalar eklemeden önce, doğrusal ve açısal hız hızlarını başlatmamız gerekir.

Bu nedenle, _OpeningFcn(hObject, eventdata, handles, varargin) altında aşağıdakileri tanımlayın (şekle bakın):

global left_spinVelocity global right_spinVelocity

küresel ileriHız

küresel geri hız

left_spinVelocity = 2;

right_spinVelocity = -2;

ileriHız = 3;

geriye doğruHız = -3;

Not: tüm hızlar rad/s cinsindendir

Artık global değişkenler tanımlandığına göre, hareket butonlarını programlayalım.

İleri düğmesi için:

function pushbutton4_Callback(hObject, eventdata, tanıtıcılar) global velmsg

küresel robot

global teleop_topic_name

küresel ileriHız

velmsg. Angular. Z = 0;

velmsg. Linear. X = ileriVelocity;

gönder(robot, velmsg);

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

Benzer şekilde Geri basma düğmesi için:

işlev pushbutton5_Callback(hObject, eventdata, tanıtıcılar)

küresel velmsg

küresel robot

küresel geri hız

global teleop_topic_name

velmsg. Angular. Z = 0;

velmsg. Linear. X = geriye doğruVelocity;

gönder(robot, velmsg);

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

Benzer şekilde Sol basma düğmesi için: function pushbutton3_Callback(hObject, eventdata, tanıtıcılar)

global velmsgglobal robot global left_spinVelocity

global teleop_topic_name

velmsg. Angular. Z = left_spinVelocity;

velmsg. Linear. X = 0;

gönder(robot, velmsg);

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

Benzer şekilde Sağ buton için:

küresel velmsggglobal robot

global right_spinVelocity

global teleop_topic_name

velmsg. Angular. Z = right_spinVelocity;

velmsg. Linear. X = 0;

gönder(robot, velmsg);

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

Tüm geri arama işlevleri eklendikten ve dosyalar kaydedildikten sonra denetleyicimizi test edebiliriz.

Adım 8: ROS PC'de Ağ Yapılandırmasını Ayarlama(Linux)

ROS PC'de Ağ Yapılandırmasını Ayarlama (Linux)
ROS PC'de Ağ Yapılandırmasını Ayarlama (Linux)
ROS PC'de Ağ Yapılandırmasını Ayarlama (Linux)
ROS PC'de Ağ Yapılandırmasını Ayarlama (Linux)

Kontrol cihazını bir ros pc'de (Linux) test edeceğiz, bu da ağ konfigürasyonunun ayarlanmasını gerektirecektir. Kontrol cihazını bir linux pc'de de çalıştırıyorsanız, ağ konfigürasyonunu orada da kurmanız gerekecektir.

Ağ Yapılandırması:

Terminal pencerenizi açın ve gedit.bashrc yazın

Dosya açıldıktan sonra aşağıdakileri ekleyin:

#Robot Makine Yapılandırması

dışa aktar ROS_MASTER_URI=https://localhost:11311

#ROS ana düğümünün IP adresi

ROS_HOSTNAME'i dışa aktar=

ROS_IP'yi dışa aktar=

echo "ROS_HOSTNAME: " $ROS_HOSTNAME

echo "ROS_IP:"$ROS_IP

echo "ROS_MASTER_URI:"$ROS_MASTER_URI

Dinamik IP ataması nedeniyle her seferinde bu adımı izlemeniz gerekir.

9. Adım: Denetleyiciyi Çalıştırın

Denetleyiciyi Çalıştır
Denetleyiciyi Çalıştır

Kontrolörümüzü Gazebo'da bir Kaplumbağa botu üzerinde test edeceğiz.

Gazebo'yu kurmak için lütfen https://gazebosim.org/tutorials?tut=install_ubuntu&cat=install adresine bakın.

Turtle bot'u yüklemek için lütfen https://yainnoware.blogspot.com/2018/09/install-turtlebot-on-ros-kinetic-ubuntu.html adresine bakın.

MATLAB'de.fig ve.m dosyalarınızı kaydettiğiniz klasörü açın ve Çalıştır'a basın (resimde gösterildiği gibi). Bu, PC'deki denetleyiciyi açacaktır. Bağlan'a basmadan önce kaplumbağa bot simülatörünüzün çalıştığından emin olun.

TurtleBot simülasyonunuzu test etmek için:

Ros PC'de Terminal'i açın ve şunu yazın: $ roslaunch kaplumbağabot_gazebo kaplumbağabot_world.launch. Bu, o bilgisayarda bir Turtlebot simülasyonu açacaktır. TurtleBot'un konu adı /cmd_vel_mux/input/teleop şeklindedir ve daha önce uygulama içerisinde vermiş olduğumuz, düzenlenebilir butonlara ros pc Ip adresini, port ve konu adını yazıp Robota Bağlan butonuna basınız. İleri, Geri vb. tuşlarına bastığınızda kaplumbağa botunuz hareket etmeye başlamalıdır.

Doğrusal ve açısal hızları görüntülemek için:

Yeni bir terminal açın ve şu komutu yazın: $ rostopic echo /cmd_vel_mux/input/teleop

Ve işte karşınızda, kendi Matlab tabanlı ROS Robotik Denetleyiciniz. Eğitilebilirliğimi beğendiyseniz, lütfen İlk Kez Yazar Yarışmasında oy verin ve mümkün olduğunca çok insanla paylaşın. Teşekkürler.

Önerilen: