Kontrol PID dengan TurtleSim

Repositori GitLab Proyek

Abstrak

Move Turtle adalah skrip Python ROS sederhana yang menggerakkan kura-kura di TurtleSim ROS ke koordinat (titik) yang ditentukan. Proyek ini dimulai sebagai proyek kelas untuk CSCI473 di Sekolah Pertambangan Colorado (CSOM) dan kemudian berkembang menjadi proyek yang saya gunakan untuk membantu saya mempelajari bagaimana sistem loop tertutup dapat dibuat, pengetahuan dari mana digunakan untuk membantu pekerjaan saya di Laboratorium Robotika Berpusat pada Manusia (HCR) CSOM.

Konteks

Sebagai latar belakang, ROS adalah singkatan dari Sistem Operasi Robot. ROS adalah middleware robotika sumber terbuka, biasanya dipasangkan dengan sistem operasi Ubuntu, yang digunakan untuk mengelola komponen/kumpulan perangkat lunak dari sebuah sistem robotik dengan lebih baik. Anda dapat mempelajari lebih lanjut tentang cara menggunakan ROS melalui [wiki] resmi ROS (http://wiki.ros.org/). Kode yang Anda tulis di ROS menggunakan C++ atau Python.

TurtleSim adalah simulator robot 2D sederhana yang digunakan sebagai pengenalan ke ROS dan paket ROS untuk pengguna baru ROS. Semua yang dilakukan TurtleSim adalah membuka tampilan 2D sederhana dengan sebuah kura-kura. Kura-kura itu bertindak sebagai “robot” dan Anda dapat mengirim pesan ke “robot” itu untuk bergerak dan/atau berbelok. Saat bergerak, TurtleSim memang menghasilkan beberapa kesalahan acak untuk mensimulasikan fisika dunia nyata dengan cara yang sederhana.

Mengetahui apa itu ROS dan TurtleSim, mengapa saya menggunakannya? Nah, pada Musim Semi 2020 saya mengambil sebuah kelas bernama “Human Centered Robotics” di Sekolah Pertambangan Colorado sebagai bagian dari beban kuliah sarjana ilmu komputer saya. Kelas tersebut diajar oleh Dr. Hao Zhang. Kelas tersebut terdiri dari tiga proyek dan proyek pertama terdiri dari memasang ROS, mempelajari cara menggunakan ROS, dan mengimplementasikan algoritma loop terbuka atau loop tertutup yang akan membuat kura-kura di TurtleSim menggambar huruf M. Deskripsi proyek asli dapat dilihat DI SINI.

Ketika saya mengambil kelas itu, saya menyelesaikan proyek ini dengan mengimplementasikan algoritma loop terbuka. Solusi ini bekerja tetapi hasilnya sangat buruk dan menggambar sebuah A yang “cukup baik” tetapi jauh dari “bagus”. Setelah menyerahkan proyek tersebut sekitar pertengahan Februari 2020, saya melupakannya sampai sekitar Februari 2021.

Tantangan

Pada Februari 2021, saya dipekerjakan sebagai Asisten Riset di Laboratorium Robotika Berpusat pada Manusia (HCR) di Sekolah Pertambangan Colorado di mana saya bekerja di bawah Dr. Hao Zhang. Tujuan laboratorium adalah melakukan riset tentang “otomasi kolaboratif seumur hidup, dengan tujuan memungkinkan robot beroperasi dan beradaptasi selama jangka waktu yang panjang”. Per 1-9-2022 (1 September 2022), laboratorium telah pindah dari Sekolah Pertambangan Colorado ke Universitas Massachusetts Amherst. Tetapi, ketika saya bekerja di sana mereka masih berlokasi di Colorado.

Di Laboratorium HCR, saya ditugaskan untuk bekerja pada proyek Triton. Proyek Triton terdiri dari banyak, puluhan, robot bernama Triton. Triton adalah robot darat segitiga dengan roda omni yang terlihat seperti ini:

Bersama dengan Triton, delapan Kamera IR dari OptiTrack disusun dalam “susunan segi-delapan” beberapa kaki di atas tanah. Menggunakan kamera-kamera itu, perangkat lunak Motive dari Optitrack, sebuah PC yang menjalankan Windows 10, dan ROS; sebuah ruang berukuran 2 meter x 2 meter x 2 meter (x, y, z) dibuat dimana posisi dunia nyata objek dengan penanda penangkap gerak dapat ditentukan secara tepat.

Tugas pertama saya dengan proyek Triton adalah membuat skrip yang membuat robot Triton bergerak ke posisi dunia nyata tertentu. Saat itu, saya tidak yakin bagaimana mencapai ini tetapi saya ingat proyek pertama dari CSCI473 di mana ide sistem loop tertutup diperkenalkan kepada saya, jadi saya mulai benar-benar meneliti sistem loop tertutup dan pada gilirannya, sistem umpan balik.

Riset

Selama riset saya, saya menemukan video hebat ini oleh AerospaceControlsLab:

Dalam video ini, ide sistem PID ditunjukkan dan dijelaskan kepada saya. Sistem PID adalah sistem loop tertutup, loop kontrol, yang menghasilkan keluaran spesifik berdasarkan data dari dunia nyata. Dalam istilah dasar, ini adalah sistem umpan balik yang menyesuaikan keluarannya berdasarkan selisih antara nilai yang diinginkan dan nilai yang diukur. Ini adalah rumus untuk pengendali PID:

$$ u(t) = K_p e(t) + K_i \int e(t) dt + K_d \frac{de(t)}{dt} $$

  • $u(t)$ adalah sinyal kontrol.
  • $K_p$, $K_i$, $K_d$ adalah gain proporsional, integral, dan turunan masing-masing.
  • $e(t)$ adalah sinyal kesalahan (selisih antara keluaran yang diinginkan dan keluaran aktual).
  • $\int e(t) dt$ adalah integral dari kesalahan seiring waktu.
  • $\frac{de(t)}{dt}$ adalah turunan dari kesalahan.

Untuk mempelajari lebih lanjut tentangnya, lihat video AerospaceControlsLab atau artikel wikipedia yang menakjubkan ini yang merupakan sumber dari rumus tersebut.

Setelah melakukan riset saya serta mendapatkan beberapa bantuan dari teman dan profesor pintar saya, saya memutuskan bahwa menggunakan Pengendali Proporsional, Pengendali P, akan terbaik untuk membantu Triton mencapai koordinat tertentu.

Karena Triton adalah robot darat, saya hanya perlu memikirkan koordinat X dan Y. Mengetahui ini, saya kemudian harus menentukan nilai yang diinginkan dan nilai yang diukur apa yang harus diukur dan diproses dalam Pengendali P. Dalam riset saya saya menemukan postingan luar biasa di wiki ROS yang disebut Pergi ke Tujuan dimana mereka fokus pada kesalahan berikut:

  • Kesalahan Jarak: Selisih jarak antara lokasi yang diinginkan (X, Y) dan lokasi saat ini (X, Y).
  • Kesalahan Theta: Selisih antara orientasi yang diinginkan dan orientasi saat ini.

Solusi yang Diusulkan

Dengan mengetahui semua ini, solusi untuk membuat Triton bergerak ke koordinat dunia nyata tertentu adalah menggunakan Pengendali Proporsional untuk kesalahan jarak Triton dan kesalahan theta sehubungan dengan koordinat tujuan dan koordinat Triton saat ini. Tetapi sebelum mengimplementasikannya ke dalam sistem fisik, saya ingin menguji ide tersebut dalam simulasi dan, pada waktu itu, saya pikir menggunakan TurtleSim sebagai simulasi adalah pilihan terbaik.

Pengujian Dalam Simulasi

Dengan solusi teoretis yang diuraikan, saya memilih untuk awalnya memvalidasinya melalui simulasi, daripada skenario dunia nyata. Dunia nyata sering kali penuh dengan kebisingan yang dapat mengacaukan efektivitas solusi dan menyebabkan harus berurusan dengan masalah yang tidak relevan. Menyadari hal ini, saya meninjau kembali proyek saya dari CSCI473 dan menyesuaikannya sebagai tempat pengujian untuk solusi teoretis ini.

Setelah memperbarui kode lama dari menggunakan ROS Melodic ke menggunakan ROS Noetic dan dengan beberapa penyempurnaan iteratif, saya berhasil membuat solusi yang diusulkan bekerja di TurtleSim. Demonstrasi fungsinya, dengan beberapa jalur koordinat tujuan yang keren, dapat ditemukan di akhir posting blog ini. Kode untuk semua ini dapat dilihat DI SINI.

Kesimpulan

Singkatnya, melalui proyek ini, kura-kura TurtleSim efektif dinavigasikan ke koordinat yang ditetapkan menggunakan sistem loop tertutup, secara signifikan mengungguli sistem loop terbuka awal saya dari 2020. Setelah berhasil diuji, saya mengimplementasikan solusi ini dengan robot Triton. Namun kebisingan dunia nyata memperkenalkan masalah tak terduga yang membutuhkan minggu-minggu debugging dan pengujian dunia nyata. Setelah minggu-minggu tersebut, saya akhirnya membuat Triton mencapai koordinat dunia nyata tertentu dengan pada akhirnya menggunakan solusi yang saya uji di TurtleSim. Berikut adalah demo Triton bergerak ke koordinat dunia nyata tertentu menggunakan metode yang diuji di TurtleSim:

Jika dipikir-pikir, saya berharap saya menggunakan simulasi yang lebih baik dalam mensimulasikan fisika dunia nyata. TurtleSim bagus untuk belajar tetapi tidak bagus untuk menguji ide-ide robotika dunia nyata. Pada waktu itu, saya pikir itu akan cukup untuk kasus penggunaan sederhana saya tetapi kemudian terbukti tidak demikian.

Tujuan utama dari posting blog ini adalah menguraikan pembuatan sistem loop tertutup yang memungkinkan kura-kura di TurtleSim, dan selanjutnya robot Triton, untuk menavigasi dengan presisi ke posisi tujuan yang ditentukan (X, Y). Saya percaya tujuan ini tercapai, dan mungkin menarik minat pada pekerjaan saya di Laboratorium HCR. Mengetahui hal ini, saya memang berencana membuat lebih banyak posting blog tentang pengalaman kerja saya di Laboratorium HCR…

Demo Moving Turtle (TurtleSim)

Video ini berisi demo-demo berikut:

  • Cayley Nodal: Desain sederhana Cayley Nodal
  • Circles: Desain seperti jaring laba-laba
  • Inner Circles: Desain “lingkaran di dalam lingkaran”
  • M: Desain M yang sangat sederhana