Daftar Isi:

Pengontrol Robot ROS berbasis Matlab: 9 Langkah
Pengontrol Robot ROS berbasis Matlab: 9 Langkah

Video: Pengontrol Robot ROS berbasis Matlab: 9 Langkah

Video: Pengontrol Robot ROS berbasis Matlab: 9 Langkah
Video: ROS and ROS 2 Using MATLAB and Simulink 2024, November
Anonim
Image
Image
Pengontrol Robot ROS berbasis Matlab
Pengontrol Robot ROS berbasis Matlab

Sejak saya masih kecil, saya selalu bermimpi menjadi Iron Man dan masih melakukannya. Iron Man adalah salah satu karakter yang secara realistis mungkin dan sederhananya saya bercita-cita untuk menjadi Iron Man suatu hari nanti bahkan jika orang menertawakan saya atau mengatakan itu tidak mungkin karena "tidak mungkin sampai seseorang melakukannya" -Arnold Schwarzenegger.

ROS adalah kerangka kerja yang muncul yang digunakan untuk mengembangkan sistem robotika yang kompleks. Aplikasinya meliputi: Sistem Perakitan Otomatis, Teleoperasi, Lengan Prostetik, dan Mesin Berat di sektor industri.

Peneliti dan insinyur memanfaatkan ROS untuk mengembangkan prototipe, sementara vendor yang berbeda menggunakannya untuk membuat produk mereka. Ini memiliki arsitektur kompleks yang membuatnya sulit untuk dikelola oleh orang yang lemah. Menggunakan MATLAB untuk membuat tautan antarmuka dengan ROS adalah pendekatan baru yang dapat membantu peneliti, insinyur, dan vendor dalam mengembangkan solusi yang lebih kuat.

Jadi instruksi ini adalah tentang cara membuat Pengontrol Robot ROS berbasis Matlab, ini akan menjadi salah satu dari sedikit tutorial tentang ini di luar sana dan di antara beberapa instruksi ROS. Tujuan dari proyek ini adalah untuk merancang pengontrol yang dapat mengontrol robot ROS yang terhubung ke jaringan Anda. Jadi mari kita mulai!

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

Perlengkapan

Komponen berikut diperlukan untuk proyek:

(1) ROS PC/Robot

(2) Router

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

Langkah 1: Siapkan Semuanya

Mendapatkan Pengaturan Semuanya
Mendapatkan Pengaturan Semuanya

Untuk instruksi ini, saya menggunakan Ubuntu 16.04 untuk untuk pc linux dan ros-kinetic saya, jadi untuk menghindari kebingungan saya sarankan menggunakan ros kinetic dan ubuntu 16.04 karena memiliki dukungan terbaik untuk ros-kinetic. Untuk informasi lebih lanjut tentang cara menginstal ros kinetik, kunjungi https://wiki.ros.org/kinetic/Installation/Ubuntu. Untuk MATLAB, Anda dapat membeli lisensi atau mengunduh versi jejak dari sini.

Langkah 2: Memahami Cara Kerja Controller

Memahami Cara Kerja Pengontrol
Memahami Cara Kerja Pengontrol

Sebuah pc menjalankan pengontrol robot pada MATLAB. Pengontrol mengambil alamat IP dan port ros pc/robot.

Sebuah ros-topic digunakan untuk berkomunikasi antara controller dan ros pc/robot, yang juga diambil sebagai input oleh controller. Modem diperlukan untuk membuat LAN (jaringan area lokal) dan yang memberikan alamat Ip ke semua perangkat yang terhubung ke jaringannya. Oleh karena itu ros pc/robot dan pc yang menjalankan pengontrol harus terhubung ke jaringan yang sama (yaitu jaringan modem). Jadi sekarang Anda tahu "cara kerjanya", mari kita ke "cara pembuatannya"…

Langkah 3: Membuat Antarmuka ROS-MATLAB

Membuat Antarmuka ROS-MATLAB
Membuat Antarmuka ROS-MATLAB
Membuat Antarmuka ROS-MATLAB
Membuat Antarmuka ROS-MATLAB
Membuat Antarmuka ROS-MATLAB
Membuat Antarmuka ROS-MATLAB

ROS-MATLABInterface adalah antarmuka yang berguna bagi peneliti dan siswa untuk membuat prototipe algoritma robot mereka di MATLAB dan mengujinya pada robot yang kompatibel dengan ROS. Antarmuka ini dapat dibuat oleh kotak peralatan sistem robotika di matlab dan kami dapat membuat prototipe algoritma kami dan mengujinya di robot berkemampuan ROS atau dalam simulator robot seperti Gazebo dan V-REP.

Untuk menginstal kotak peralatan sistem robotika pada MATLAB Anda, cukup buka opsi Add-on pada bilah alat dan cari kotak peralatan robot di penjelajah add-on. Dengan menggunakan kotak peralatan robot, kami dapat menerbitkan atau berlangganan suatu topik, seperti simpul ROS, dan kami dapat menjadikannya master ROS. Antarmuka MATLAB-ROS memiliki sebagian besar fungsi ROS yang mungkin Anda perlukan untuk proyek Anda.

Langkah 4: Mendapatkan Alamat IP

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

Agar pengontrol berfungsi, Anda harus mengetahui alamat ip robot/pc ROS Anda dan komputer yang menjalankan pengontrol di MATLAB.

Untuk mendapatkan ip pc Anda:

Di Windows:

Buka command prompt dan ketik perintah ipconfig dan catat alamat IPv4

Untuk Linux:

Ketik perintah ifconfig dan catat alamat inet. Sekarang Anda memiliki alamat ip, saatnya untuk membangun GUI…

Langkah 5: Buat GUI untuk Pengontrol

Buat GUI untuk Pengontrol
Buat GUI untuk Pengontrol
Buat GUI untuk Pengontrol
Buat GUI untuk Pengontrol
Buat GUI untuk Pengontrol
Buat GUI untuk Pengontrol

Untuk membuat GUI, buka MATLAB dan ketik panduan di jendela perintah. Ini akan membuka aplikasi panduan yang akan kita buat GUI kita. Anda juga dapat menggunakan desainer aplikasi di MATLAB untuk mendesain GUI Anda.

Kami akan membuat total 9 tombol (seperti yang ditunjukkan pada gambar):

6 tombol tekan: Maju, Mundur, Kiri, Kanan, Sambungkan ke Robot, Putus

3 Tombol yang dapat diedit: Ros pc ip, port, dan nama Topik.

Tombol yang dapat diedit adalah tombol yang akan mengambil ip pc ROS, portnya, dan nama Topik sebagai input. Nama topik adalah apa yang dikomunikasikan oleh pengontrol MATLAB dan robot/pc ROS. Untuk mengedit string pada tombol yang dapat diedit, klik kanan pada tombol >> pergi ke properti Inspektur >> String dan edit teks tombol.

Setelah GUI Anda selesai, Anda dapat memprogram tombol. Di sinilah kesenangan yang sebenarnya dimulai…

Langkah 6: Memprogram Tombol yang Dapat Diedit GUI

Memprogram Tombol yang Dapat Diedit GUI
Memprogram Tombol yang Dapat Diedit GUI
Memprogram Tombol yang Dapat Diedit GUI
Memprogram Tombol yang Dapat Diedit GUI
Memprogram Tombol yang Dapat Diedit GUI
Memprogram Tombol yang Dapat Diedit GUI
Memprogram Tombol yang Dapat Diedit GUI
Memprogram Tombol yang Dapat Diedit GUI

GUI disimpan sebagai file.fig tetapi fungsi kode/panggilan balik disimpan dalam format.m. File.m berisi kode untuk semua tombol Anda. Untuk menambahkan fungsi panggilan balik ke tombol Anda, klik kanan tombol > >Lihat panggilan balik>>panggilan balik. Ini akan membuka file.m untuk GUI Anda ke tempat tombol tertentu itu ditentukan.

Panggilan balik pertama yang akan kita kode adalah untuk tombol ROS IP yang dapat diedit. Di bawah fungsi edit1_Callback tulis kode berikut:

fungsi edit1_Callback(hObject, eventdata, handles)

ros_master_ip global

ros_master_ip = get(hObject, 'String')

Di sini fungsinya didefinisikan sebagai edit1_Callback, yang mengacu pada tombol pertama yang dapat diedit. Ketika kita memasukkan alamat IP dari jaringan ROS di tombol yang dapat diedit ini, itu akan menyimpan alamat IP sebagai string dalam variabel global yang disebut ros_master_ip.

Kemudian tepat di bawah _OpeningFcn(hObject, eventdata, handles, varargin) tentukan yang berikut (lihat gambar):

ros_master_ip global

ros_master_port global

nama_topik_teleop global

ros_master_ip = '192.168.1.102';

ros_master_port = '11311';

teleop_topic_name = '/cmd_vel_mux/input/teleop';

Anda baru saja membuat hard-code ros-pc ip (ros_master_ip), port (ros_master_port) dan nama Topik Teleop secara global. Apa yang dilakukan adalah jika Anda membiarkan tombol yang dapat diedit kosong, nilai yang telah ditentukan sebelumnya ini akan digunakan saat Anda terhubung.

Panggilan balik berikutnya yang akan kita kode adalah untuk tombol Port yang dapat diedit.

Di bawah fungsi edit2_Callback tulis kode berikut:

fungsi edit2_Callback(hObject, eventdata, handles)

ros_master_port global

ros_master_port = get(hObject, 'String')

Di sini fungsinya didefinisikan sebagai edit2_Callback, yang mengacu pada tombol kedua yang dapat diedit. Ketika kita memasukkan port ros pc/robot di sini dari jaringan ROS di tombol yang dapat diedit ini, port tersebut akan menyimpan port sebagai string dalam variabel global yang disebut ros_master_port.

Demikian pula panggilan balik berikutnya yang akan kita kode adalah untuk tombol Nama topik yang dapat diedit.

Di bawah fungsi edit3_Callback tulis kode berikut:

fungsi edit3_Callback(hObject, eventdata, handles)

nama_topik_teleop global

teleop_topic_name = get(hObject, 'String')

Mirip dengan ros_master_port, ini juga disimpan sebagai string dalam variabel global.

Selanjutnya kita akan melihat fungsi panggilan balik untuk tombol tekan…

Langkah 7: Memprogram Tombol Push GUI

Memprogram Tombol Tekan GUI
Memprogram Tombol Tekan GUI
Memprogram Tombol Tekan GUI
Memprogram Tombol Tekan GUI

Tombol push yang kami buat sebelumnya adalah yang akan kami gunakan untuk memindahkan, menghubungkan, dan memutuskan robot dari pengontrol. Callback tombol push didefinisikan sebagai berikut:

misalnya. fungsi pushbutton6_Callback(hObject, eventdata, menangani)

Catatan: tergantung pada urutan pembuatan tombol tekan, tombol tersebut akan diberi nomor yang sesuai. Oleh karena itu fungsi pushbutton6 di file.m saya bisa untuk Maju sedangkan di file.m Anda bisa untuk Mundur jadi ingatlah itu. Untuk mengetahui fungsi yang tepat untuk tombol tekan Anda, cukup klik kanan>>Lihat panggilan balik>>panggilan balik dan itu akan membuka fungsi untuk tombol tekan Anda tetapi untuk instruksi ini saya berasumsi itu sama dengan milik saya.

Untuk tombol Hubungkan ke robot:

Di bawah fungsi pushbutton6_Callback(hObject, eventdata, handles):

fungsi pushbutton6_Callback(hObject, eventdata, menangani) ros_master_ip global

ros_master_port global

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

Callback ini akan mengatur variabel ROS_MASTER_URI dengan menggabungkan ros_master_ip dan port. Kemudian perintah rosinit akan menginisialisasi koneksi. Setelah terhubung, itu akan membuat penerbit geometri_msgs/Twist, yang akan digunakan untuk mengirim kecepatan perintah. Nama topik adalah nama yang kami berikan di kotak edit. Setelah koneksi berhasil, kita akan dapat mengoperasikan tombol tekan Maju, Mundur, Kiri, Kanan.

Sebelum menambahkan callback ke tombol tekan Maju, Mundur, kita perlu menginisialisasi kecepatan kecepatan linier dan sudut.

Oleh karena itu di bawah _OpeningFcn(hObject, eventdata, handles, varargin) tentukan yang berikut (lihat gambar):

global left_spinKecepatan global right_spinVelocity

kecepatan maju global

Kecepatan mundur global

left_spinKecepatan = 2;

right_spinKecepatan = -2;

kecepatan maju = 3;

kecepatan mundur = -3;

Catatan: semua kecepatan dalam rad/s

Sekarang setelah variabel global didefinisikan, mari memprogram tombol tekan gerakan.

Untuk tombol tekan Maju:

fungsi pushbutton4_Callback(hObject, eventdata, handles) global velmsg

robot global

nama_topik_teleop global

kecepatan maju global

velmsg. Angular. Z = 0;

velmsg. Linear. X = Kecepatan maju;

kirim(robot, velmsg);

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

Demikian pula untuk tombol tekan Mundur:

fungsi pushbutton5_Callback(hObject, eventdata, menangani)

velmsg global

robot global

Kecepatan mundur global

nama_topik_teleop global

velmsg. Angular. Z = 0;

velmsg. Linear. X = kecepatan mundur;

kirim(robot, velmsg);

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

Demikian pula untuk tombol tekan Kiri: function pushbutton3_Callback(hObject, eventdata, handles)

global velmsgglobal global left_spinVelocity

nama_topik_teleop global

velmsg. Angular. Z = left_spinVelocity;

velmsg. Linear. X = 0;

kirim(robot, velmsg);

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

Demikian pula untuk tombol tekan Kanan:

velmsgglobal robot global

global right_spinVelocity

nama_topik_teleop global

velmsg. Angular. Z = right_spinVelocity;

velmsg. Linear. X = 0;

kirim(robot, velmsg);

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

Setelah semua fungsi panggilan balik telah ditambahkan dan file disimpan, kita dapat menguji pengontrol kita.

Langkah 8: Menyiapkan Konfigurasi Jaringan di ROS PC (Linux)

Menyiapkan Konfigurasi Jaringan di ROS PC (Linux)
Menyiapkan Konfigurasi Jaringan di ROS PC (Linux)
Menyiapkan Konfigurasi Jaringan di ROS PC (Linux)
Menyiapkan Konfigurasi Jaringan di ROS PC (Linux)

Kami akan menguji pengontrol pada ros pc (Linux), yang akan memerlukan pengaturan konfigurasi jaringan. Jika Anda juga menjalankan pengontrol pada pc linux, Anda juga harus mengatur konfigurasi jaringan di sana.

Konfigurasi jaringan:

Buka jendela terminal Anda dan ketik gedit.bashrc

Setelah file terbuka tambahkan yang berikut ini:

#Konfigurasi Mesin Robot

ekspor ROS_MASTER_URI=https://localhost:11311

#Alamat IP node master ROS

ekspor ROS_HOSTNAME=

ekspor ROS_IP=

echo "ROS_HOSTNAME: " $ROS_HOSTNAME

echo "ROS_IP:"$ROS_IP

echo "ROS_MASTER_URI:"$ROS_MASTER_URI

Anda harus mengikuti langkah ini setiap saat karena penetapan IP dinamis.

Langkah 9: Jalankan Pengontrol

Jalankan Pengontrol
Jalankan Pengontrol

Kami akan menguji pengontrol kami pada bot Penyu di Gazebo.

Untuk menginstal Gazebo, silakan merujuk ke

Untuk menginstal Turtle bot, silakan merujuk ke

Buka folder tempat Anda menyimpan file.fig dan.m di MATLAB dan tekan Run (seperti yang ditunjukkan pada gambar). Ini akan membuka pengontrol di PC. Sebelum menekan hubungkan, pastikan simulator bot penyu Anda berfungsi.

Untuk menguji simulasi TurtleBot Anda:

Buka Terminal di PC Ros dan ketik: $roslaunch turtlebot_gazebo turtlebot_world.launch. Ini akan membuka simulasi Turtlebot di PC itu. Nama topik TurtleBot adalah /cmd_vel_mux/input/teleop, yang telah kami sediakan di aplikasi. Ketik alamat Ip ros pc, port, dan nama topik di tombol yang dapat diedit dan tekan tombol. Connect to Robot. Bot kura-kura Anda harus mulai bergerak ketika Anda menekan Maju, Mundur, dll.

Untuk melihat kecepatan linier dan sudut:

Buka terminal baru dan ketik perintah: $ rostopic echo /cmd_vel_mux/input/teleop

Dan begitulah, ROS Robotic Controller berbasis Matlab Anda sendiri. Jika Anda menyukai instruksi saya, silakan berikan suara pada Kontes Penulis Pertama Kali dan bagikan dengan sebanyak mungkin orang. Terima kasih.

Direkomendasikan: