Isi kandungan:

Pengawal Robotik ROS berasaskan Matlab: 9 Langkah
Pengawal Robotik ROS berasaskan Matlab: 9 Langkah

Video: Pengawal Robotik ROS berasaskan Matlab: 9 Langkah

Video: Pengawal Robotik ROS berasaskan Matlab: 9 Langkah
Video: UCR Student-Designed Solar Panel Cleaning Robot (1) 2024, November
Anonim
Image
Image
Pengawal Robotik ROS berasaskan Matlab
Pengawal Robotik ROS berasaskan Matlab

Sejak saya kecil, saya selalu bermimpi menjadi Iron Man dan masih melakukannya. Iron Man adalah salah satu watak yang benar-benar mungkin dan secara sederhana saya bercita-cita untuk menjadi Iron Man suatu hari nanti walaupun orang menertawakan saya atau mengatakan itu mustahil kerana "hanya mustahil sehingga seseorang melakukannya" -Arnold Schwarzenegger.

ROS adalah kerangka yang muncul yang digunakan untuk mengembangkan sistem robotik yang kompleks. Aplikasi ini merangkumi: Sistem Perhimpunan Automatik, Teleoperasi, Senjata Prostetik dan Mesin Berat sektor industri.

Penyelidik dan jurutera memanfaatkan ROS untuk mengembangkan prototaip, sementara vendor yang berbeza menggunakannya untuk membuat produk mereka. Ia mempunyai seni bina yang rumit sehingga sukar untuk dikendalikan oleh orang yang lumpuh. Menggunakan MATLAB untuk membuat pautan antara muka dengan ROS adalah pendekatan baru yang dapat membantu penyelidik, jurutera dan vendor dalam mengembangkan penyelesaian yang lebih mantap.

Oleh itu, instruksional ini adalah mengenai cara membuat ROS Robotic Controller yang berasaskan Matlab, ini akan menjadi salah satu dari sedikit tutorial mengenai perkara ini di luar sana dan antara beberapa instruksi ROS. Matlamat projek ini adalah untuk merancang pengawal yang dapat mengawal mana-mana robot ROS yang disambungkan ke rangkaian anda. Oleh itu, mari kita mulakan!

kredit penyuntingan video: Ammar Akher, di [email protected]

Bekalan

Komponen berikut diperlukan untuk projek:

(1) ROS PC / Robot

(2) Penghala

(3) PC dengan MATLAB (versi: 2014 atau lebih tinggi)

Langkah 1: Mendapatkan Segalanya

Mendapatkan Segalanya
Mendapatkan Segalanya

Untuk arahan ini, saya menggunakan Ubuntu 16.04 untuk komputer linux dan ros-kinetik saya, jadi untuk mengelakkan kekeliruan, saya cadangkan penggunaan ros kinetik dan ubuntu 16.04 kerana ia mempunyai sokongan terbaik untuk ros-kinetik. Untuk maklumat lebih lanjut mengenai cara memasang ros kinetik, lawati https://wiki.ros.org/kinetic/Installation/Ubuntu. Untuk MATLAB anda boleh membeli lesen atau memuat turun versi jejak dari sini.

Langkah 2: Memahami Bagaimana Pengawal Berfungsi

Memahami Bagaimana Pengawal Berfungsi
Memahami Bagaimana Pengawal Berfungsi

Sebuah komputer menjalankan pengawal robot di MATLAB. Pengawal mengambil alamat IP dan port pc / robot ros.

Topik ros digunakan untuk berkomunikasi antara pengawal dan pc / robot ros, yang juga diambil sebagai input oleh pengawal. Modem diperlukan untuk membuat LAN (rangkaian kawasan setempat) dan inilah yang memberikan alamat Ip ke semua peranti yang disambungkan ke rangkaiannya. Oleh itu, pc pc / robot dan komputer yang menjalankan pengawal mesti disambungkan ke rangkaian yang sama (iaitu rangkaian modem). Oleh itu, setelah anda mengetahui "bagaimana ia berfungsi", mari kita ke "bagaimana ia dibina" …

Langkah 3: Membuat Antaramuka ROS-MATLAB

Membuat Antaramuka ROS-MATLAB
Membuat Antaramuka ROS-MATLAB
Membuat Antaramuka ROS-MATLAB
Membuat Antaramuka ROS-MATLAB
Membuat Antaramuka ROS-MATLAB
Membuat Antaramuka ROS-MATLAB

Antarmuka ROS-MATLAB adalah antara muka yang berguna untuk penyelidik dan pelajar untuk membuat prototaip algoritma robot mereka di MATLAB dan mengujinya pada robot yang serasi dengan ROS. Antaramuka ini boleh dibuat oleh kotak alat sistem robotik di matlab dan kami dapat memprotaip algoritma kami dan mengujinya robot berkemampuan ROS atau dalam simulator robot seperti Gazebo dan V-REP.

Untuk memasang kotak alat sistem robotik pada MATLAB anda, pergi ke pilihan Tambah pada bar alat dan cari kotak alat robot dalam penjelajah tambahan. Dengan menggunakan kotak alat robot, kita dapat menerbitkan atau melanggan topik, seperti simpul ROS, dan kita dapat menjadikannya sebagai master ROS. Antara muka MATLAB-ROS mempunyai kebanyakan fungsi ROS yang mungkin anda perlukan untuk projek anda.

Langkah 4: Mendapatkan Alamat IP

Mendapatkan Alamat IP
Mendapatkan Alamat IP
Mendapatkan Alamat IP
Mendapatkan Alamat IP

Agar pengawal berfungsi, anda mesti mengetahui alamat ip robot / pc ROS anda dan komputer yang menjalankan pengawal di MATLAB.

Untuk mendapatkan ip komputer anda:

Pada Windows:

Buka command prompt dan ketik perintah ipconfig dan catat alamat IPv4

Untuk Linux:

Ketik perintah ifconfig dan catat alamat inet. Sekarang anda mempunyai alamat ip, inilah masanya untuk membina GUI…

Langkah 5: Buat GUI untuk Pengawal

Buat GUI untuk Pengawal
Buat GUI untuk Pengawal
Buat GUI untuk Pengawal
Buat GUI untuk Pengawal
Buat GUI untuk Pengawal
Buat GUI untuk Pengawal

Untuk membuat GUI, buka MATLAB dan taip panduan di tetingkap arahan. Ini akan membuka aplikasi panduan walaupun kita akan membuat GUI kita. Anda juga boleh menggunakan pereka aplikasi di MATLAB untuk merancang GUI anda.

Kami akan membuat 9 butang secara keseluruhan (seperti yang ditunjukkan dalam gambar):

6 butang tekan: Foward, Belakang, Kiri, Kanan, Sambungkan ke Robot, Putuskan sambungan

3 Butang yang boleh diedit: Ros pc ip, port dan nama Topik.

Butang yang dapat diedit adalah butang yang akan menggunakan ip pc ROS, port dan nama Topik sebagai input. Nama Topik adalah apa yang disampaikan oleh pengawal MATLAB dan robot / pc ROS. Untuk mengedit rentetan pada butang yang dapat diedit, klik kanan pada butang >> pergi ke sifat Inspektor >> String dan edit teks butang.

Setelah GUI anda selesai, anda boleh memprogramkan butang. Di sinilah keseronokan sebenar bermula …

Langkah 6: Memprogramkan Butang yang Dapat Diedit GUI

Memprogramkan Butang yang Boleh Diedit GUI
Memprogramkan Butang yang Boleh Diedit GUI
Memprogramkan Butang yang Boleh Diedit GUI
Memprogramkan Butang yang Boleh Diedit GUI
Memprogramkan Butang yang Boleh Diedit GUI
Memprogramkan Butang yang Boleh Diedit GUI
Memprogramkan Butang yang Boleh Diedit GUI
Memprogramkan Butang yang Boleh Diedit GUI

GUI disimpan sebagai fail.fig tetapi fungsi kod / panggilan balik disimpan dalam format.m. Fail.m mengandungi kod untuk semua butang anda. Untuk menambahkan fungsi panggilan balik ke butang anda, klik kanan butang> > Lihat panggil balik >> panggil balik. Ini akan membuka fail.m untuk GUI anda ke tempat butang tertentu ditentukan.

Panggilan balik pertama yang akan kami kodkan adalah untuk butang ROS IP yang dapat diedit. Di bawah fungsi edit1_Callback tulis kod berikut:

fungsi edit1_Callback (hObject, eventdata, handle)

ros_master_ip global

ros_master_ip = get (hObject, 'Rentetan')

Di sini fungsi didefinisikan sebagai edit1_Callback, yang merujuk kepada butang pertama yang dapat diedit. Apabila kita memasukkan alamat IP dari rangkaian ROS di butang yang dapat diedit ini, alamat IP akan disimpan sebagai rentetan dalam pemboleh ubah global yang disebut ros_master_ip.

Kemudian di bawah _OpeningFcn (hObject, eventdata, handle, varargin) tentukan yang berikut (lihat rajah):

ros_master_ip global

ros_master_port global

teleop_topic_name global

ros_master_ip = '192.168.1.102';

ros_master_port = '11311';

teleop_topic_name = '/ cmd_vel_mux / input / teleop';

Anda baru sahaja berkod keras ip ros-pc (ros_master_ip), port (ros_master_port) dan nama Teleop Topic. Apa yang dilakukannya ialah jika anda membiarkan butang yang dapat diedit kosong, nilai yang telah ditentukan ini akan digunakan semasa anda menyambung.

Panggilan balik seterusnya yang akan kita kodkan adalah untuk butang Port yang dapat diedit.

Di bawah fungsi edit2_Callback tulis kod berikut:

fungsi edit2_Callback (hObject, eventdata, handle)

ros_master_port global

ros_master_port = get (hObject, 'Rentetan')

Di sini fungsi didefinisikan sebagai edit2_Callback, yang merujuk pada butang yang dapat diedit kedua. Apabila kita memasuki port ros / robot robot di sini dari rangkaian ROS di butang yang dapat diedit ini, ia akan menyimpan port sebagai rentetan dalam pemboleh ubah global yang disebut ros_master_port.

Begitu juga panggilan balik seterusnya yang akan kita kodkan adalah untuk butang Nama yang boleh diedit.

Di bawah fungsi edit3_Callback tulis kod berikut:

fungsi edit3_Callback (hObject, eventdata, handle)

teleop_topic_name global

teleop_topic_name = get (hObject, 'Rentetan')

Sama dengan ros_master_port, ini juga disimpan sebagai rentetan dalam pemboleh ubah global.

Selanjutnya kita akan melihat fungsi panggilan balik untuk menekan butang…

Langkah 7: Memprogramkan Butang Tekan GUI

Memprogramkan Butang Tekan GUI
Memprogramkan Butang Tekan GUI
Memprogramkan Butang Tekan GUI
Memprogramkan Butang Tekan GUI

Butang tekan yang kami buat sebelumnya adalah butang yang akan kami gunakan untuk memindahkan, menyambung dan memutuskan robot dari pengawal. Panggilan balik butang tekan ditakrifkan sebagai berikut:

cth. butang fungsi6_Callback (hObject, eventdata, handle)

Catatan: bergantung pada urutan di mana anda membuat butang tekan, mereka akan diberi nombor dengan sewajarnya. Oleh itu fungsi tekan butang6 dalam fail.m saya boleh untuk Maju sedangkan dalam fail.m anda boleh untuk Mundur jadi ingatlah itu. Untuk mengetahui fungsi yang tepat untuk butang tekan anda, cukup klik kanan >> Lihat panggil balik >> panggil balik dan ia akan membuka fungsi untuk butang tekan anda tetapi untuk arahan ini saya anggap ia sama dengan saya.

Untuk butang Sambung ke robot:

Di bawah fungsi tekan butang6_Callback (hObject, eventdata, handle):

fungsi tekan butang6_Callback (hObject, eventdata, menangani) global ros_master_ip

ros_master_port global

teleop_topic_name global

robot global

velmsg global

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

Panggilan balik ini akan menetapkan pemboleh ubah ROS_MASTER_URI dengan menggabungkan ros_master_ip dan port. Kemudian perintah rosinit akan memulakan sambungan. Setelah menyambung, ia akan membuat penerbit geometry_msgs / Twist, yang akan digunakan untuk menghantar halaju perintah. Nama topik adalah nama yang kami berikan di kotak edit. Setelah sambungan berjaya, kita akan dapat mengendalikan butang tekan Maju, Belakang, Kiri, Kanan.

Sebelum menambah panggilan balik ke button push Forward, Backward, kita perlu memulakan kecepatan kelajuan linear dan sudut.

Oleh itu di bawah _OpeningFcn (hObject, eventdata, handle, varargin) tentukan perkara berikut (lihat rajah):

global_spin_Velocity_kiri_spinVelocity global

globalVelocity ke hadapan

globalVelocity mundur

left_spinVelocity = 2;

right_spinVelocity = -2;

majuVelocity = 3;

ke belakangVelocity = -3;

Catatan: semua halaju dalam rad / s

Sekarang bahawa pemboleh ubah global ditentukan mari kita atur tombol tekan.

Untuk butang Maju:

fungsi tekan butang4_Callback (hObject, eventdata, handle) global velmsg

robot global

teleop_topic_name global

globalVelocity ke hadapan

velmsg. Angular. Z = 0;

velmsg. Linear. X = majuVelocity;

hantar (robot, velmsg);

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

Begitu juga untuk butang ke belakang:

butang fungsi5_Callback (hObject, eventdata, handle)

velmsg global

robot global

globalVelocity mundur

teleop_topic_name global

velmsg. Angular. Z = 0;

velmsg. Linear. X = ke belakangVelocity;

hantar (robot, velmsg);

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

Begitu juga untuk tombol tekan kiri: fungsi tekan butang 3_Callback (hObject, eventdata, handle)

global velmsgglobal robot global_kiri_spinVelocity

teleop_topic_name global

velmsg. Angular. Z = left_spinVelocity;

velmsg. Linear. X = 0;

hantar (robot, velmsg);

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

Begitu juga untuk butang tekan kanan:

robot velmsgglobal global

hak_spin global yang pantas

teleop_topic_name global

velmsg. Angular. Z = right_spinVelocity;

velmsg. Linear. X = 0;

hantar (robot, velmsg);

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

Setelah semua fungsi panggilan balik ditambahkan dan fail disimpan, kami dapat menguji pengawal kami.

Langkah 8: Menyiapkan Konfigurasi Rangkaian pada PC ROS (Linux)

Menyiapkan Konfigurasi Rangkaian pada PC ROS (Linux)
Menyiapkan Konfigurasi Rangkaian pada PC ROS (Linux)
Menyiapkan Konfigurasi Rangkaian pada PC ROS (Linux)
Menyiapkan Konfigurasi Rangkaian pada PC ROS (Linux)

Kami akan menguji pengawal pada pc ros (Linux), yang memerlukan penyediaan konfigurasi rangkaian. Sekiranya anda juga menjalankan pengawal pada komputer linux, anda juga harus mengatur konfigurasi rangkaian di sana.

Konfigurasi Rangkaian:

Buka tetingkap terminal anda dan ketik gedit.bashrc

Setelah fail dibuka tambahkan yang berikut:

# Konfigurasi Mesin Robot

eksport ROS_MASTER_URI = https:// localhost: 11311

#IP alamat nod induk ROS

eksport ROS_HOSTNAME =

eksport ROS_IP =

gema "ROS_HOSTNAME:" $ ROS_HOSTNAME

gema "ROS_IP:" $ ROS_IP

gema "ROS_MASTER_URI:" $ ROS_MASTER_URI

Anda mesti mengikuti langkah ini setiap kali kerana penetapan IP dinamik.

Langkah 9: Jalankan Pengawal

Jalankan Pengawal
Jalankan Pengawal

Kami akan menguji pengawal kami pada bot Penyu di Gazebo.

Untuk memasang Gazebo, sila rujuk

Untuk memasang bot Penyu, sila rujuk

Buka folder tempat anda menyimpan fail.fig dan.m di MATLAB dan tekan Run (seperti yang ditunjukkan dalam gambar). Ini akan membuka pengawal pada PC. Sebelum menekan sambung, pastikan simulator bot penyu anda berfungsi.

Untuk menguji simulasi TurtleBot anda:

Buka Terminal pada komputer Ros dan taip: $ roslaunch turtlebot_gazebo turtlebot_world.launch. Ini akan membuka simulasi Turtlebot pada PC tersebut. Nama topik TurtleBot adalah / cmd_vel_mux / input / teleop, yang telah kami sediakan dalam aplikasi. Ketik alamat pc pc ros, nama port dan topik di butang yang dapat diedit dan tekan butang. Sambungkan ke Robot. Bot penyu anda harus mula bergerak apabila anda menekan Maju, Mundur dll.

Untuk melihat halaju linear dan sudut:

Buka terminal baru dan taipkan arahan: $ rostopic echo / cmd_vel_mux / input / teleop

Dan di sana anda mempunyai, ROS Robotic Controller berasaskan Matlab anda sendiri. Sekiranya anda menyukai arahan saya, berikan suara pada Peraduan Pengarang Kali Pertama dan bagikan dengan seberapa banyak orang yang mungkin. Terima kasih.

Disyorkan: