Saya sedang mengerjakan pembuatan robot pengikut garis dan ingin mengoptimalkan kinerjanya. Disarankan agar saya menggunakan algoritma PID. Saya membaca banyak tentang PID tetapi sedikit bingung tentang hal berikut:
Saya telah menghitung error_value menggunakan Tetapi mengenai perubahan dalam kecepatan motor saya bingung apa yang harus digunakan selama perbandingan perbedaan (yaitu currentposition - setpoint) atau nilai error. Itu yang harus saya gunakan
if (difference > 0)
{ //code for changing appropriate motor's speed using error_value }
atau
if (error_value > 0)
{ //code for changing appropriate motor's speed using error_value }
Juga apakah ada rentang yang ditentukan untuk nilai konstanta , dan ? Saya menggunakan robot roda diferensial untuk pengikut garis saya.
Saya juga akan senang jika seseorang menyarankan saya algoritma optimasi canggih lainnya untuk meningkatkan robot pengikut garis.
arduino
pid
line-following
meteor
sumber
sumber
Jawaban:
Saat menggunakan PID loop untuk mengarahkan menggunakan garis berikut, maka titik setel Anda akan selalu sama. Anda akan selalu ingin garis berada di posisi yang sama sehubungan dengan robot, misalnya di tengah sensor Anda.
Jadi jika sensor garis Anda mengeluarkan nilai dari -1 hingga 1 dengan 0 menjadi pusat sensor, maka Anda ingin set point Anda menjadi nol (dan sensor membaca kembali dan perbedaannya akan sama). Jika sensor garis Anda menghasilkan nilai 0 hingga 10, maka Anda ingin set point Anda menjadi 5 (dan sensor Anda membaca kembali dan perbedaannya akan berbeda).
Karena Anda menyetir dengan mengatur roda untuk berputar pada kecepatan yang berbeda, maka untuk mengikuti garis dengan lancar pada kecepatan konstan, Anda mungkin ingin menyesuaikan kecepatan untuk kedua roda berdasarkan kesalahan. Misalnya, jika Anda perlu belok kiri untuk tetap di jalur, Anda akan memperlambat roda kiri dan mempercepat roda kanan. Semakin Anda perlu berputar, semakin banyak yang Anda butuhkan untuk memperlambat roda bagian dalam dan semakin banyak yang Anda butuhkan untuk mempercepat roda bagian luar.
Pertimbangkan situasi di mana Anda perlu mengubah radian ke kiri untuk memperbaiki kesalahan dan kecepatan Anda saat ini adalah :θ e S0
Jadi roda kiri Anda perlu melakukan perjalanan di dan roda kanan Anda perlu melakukan perjalanan di .SL=rθ SR=(r+b)θ
Untuk mempertahankan kecepatan keseluruhan yang sama , Anda perlu , sehingga roda kiri perlu melakukan perjalanan di sedangkan roda kanan perlu melakukan perjalanan di .S0 S0=(r+b/2)θ SL=S0−(b/2)θ SR=S0+(b/2)θ
Karena kesalahan Anda cenderung ke nol, kecepatan setiap motor juga akan cenderung ke satu sama lain. Ketika kesalahan tumbuh, perbedaan kecepatan akan tumbuh juga.
Anda bahkan mungkin memerlukan roda bagian dalam Anda untuk berputar ke belakang jika sensor Anda memberi tahu Anda bahwa garis melengkung lebih kencang daripada jarak antara roda Anda. Ini adalah komplikasi yang dapat Anda lakukan selangkah demi selangkah karena kendali Anda semakin canggih.
Juga, karena kesalahan Anda akan memiliki nilai positif dan negatif (untuk mewakili kontinum dari skala kiri ... terlalu jauh ke kiri ... di telepon ... terlalu jauh ke kanan ... di luar skala maka Anda harus tidak perlu bertanya
if
apakah kesalahannya positif atau negatif, Anda hanya perlu menghitung nilai baru berdasarkan nilai kesalahan, karena nilai positif dan nilai negatif harus memiliki efek berlawanan dan simetris pada motor.Perhatikan bahwa untuk mengikuti baris, Anda mungkin bisa lolos hanya dengan istilah gain proporsional (yaitu membiarkan syarat lainnya nol). Menerapkan istilah Derivatif mungkin memungkinkan Anda untuk menaikkan jangka keuntungan proporsional lebih tinggi untuk mendapatkan sistem yang lebih responsif, tetapi istilah integral tidak mungkin membantu. Fakta bahwa jika robot Anda bergerak ke arah yang salah, kesalahannya akan semakin besar berarti gerakan fisik robot Anda akan bertindak seperti istilah integral.
Nilai spesifik P, D, dan I akan ditentukan oleh daya tanggap sistem Anda. Untuk saran umum tentang menyetel parameter PID, lihat jawaban saya dan lainnya tentang Apa strategi yang baik untuk menyetel loop PID?
sumber
Anda mungkin ingin memeriksa pertanyaan ini tentang cara menyetel PID .
Sepertinya Anda membingungkan peran
error
dalam perhitungan ini. Persamaan PID mengambil pengukuran kesalahan (posisi aktual - posisi yang diinginkan) dan menentukan berapa banyak "respons" harus diperintahkan dalam pengontrol (mis. Berapa banyak gaya).Jadi, alih-alih mengatakan
if (error_value > 0) { }
, Anda harus mengatakan sesuatu sepertiresponse = get_PID_calculation(error_value)
. Bergantung pada konstruksi kendaraan spesifik Anda, respons itu akan dikirim ke motor penggerak sebagai jumlah throttle, kemudi sesuai sudut yang diinginkan, atau beberapa input kontrol lainnya.sumber