Apa pendekatan yang tepat untuk menulis pengontrol putaran untuk robot sepak bola?

14

Bayangkan pemrograman robot sepakbola 3 roda. Apa jenis pengontrol yang akan Anda gunakan untuk memutarnya? P? PID?

Tujuan dari pengontrol ini adalah membuat robot berdiri pada sudut yang ditentukan (0 derajat) dan berbalik jika diputar dengan tangan atau robot lain.

Saya menggunakan motor stepper untuk robot saya dan bukan servos jadi saya perlu mengimplementasikan ini dalam perangkat lunak saya!

Saya telah menulis contoh pengontrol tipe P dan gerakannya cukup baik. Tetapi saya ingin membuatnya lebih baik jika memungkinkan. Kode tersebut adalah sebagai berikut:

void spinSpeed(int devidedValue, int addedValue, int correction) {

    if(degree<correction && degree>-correction) {
        motorSpeed = 0;
    } else {
        if(degree > 0) {
            motorSpeed = ((degree)/(devidedValue) + (addedValue));
        } else {
            motorSpeed = ((degree)/(devidedValue) - (addedValue));  
        }
    }
}

correctionadalah rentang, di mana robot tidak memiliki gerakan. degreeadalah angka antara -127 dan 128 yang dikembalikan dari kompas. motorSpeedadalah angka antara 0 dan 255 yang diterapkan pada PWM.

Miro Markaravanes
sumber
Agaknya rutin ini dijalankan setiap kali perusahaan menghasilkan nilai baru degree?
Mark Booth
@ MarkBooth Saya memiliki kode saya sementara waktu (1) sehingga dalam setiap siklus mendapat nilai dari kompas memberikannya ke fungsi dan kemudian menerapkan hasilnya ke motor.
Miro Markaravanes
Saya akan menyelidiki jenis pengontrol yang digunakan servo, karena Anda mencoba menduplikasi perilaku servo dalam perangkat lunak.
Chris Laplante
Saya tidak menggunakan servos. Saya menggunakan motor langkah jadi belum ada perilaku seperti itu di motor.
Miro Markaravanes
2
Halo Miro, pada pertukaran stack lebih baik untuk mengedit pertanyaan Anda dalam menanggapi pertanyaan dalam komentar, dengan cara itu komentar dapat dirapikan (dihapus) sehingga mereka tidak mengalihkan perhatian dari pertanyaan itu sendiri.
Mark Booth

Jawaban:

7

Yang penting untuk diingat tentang loop kontrol PID adalah bahwa setiap istilah dimaksudkan untuk mendominasi kontrol pada waktu yang berbeda selama bergerak.

Istilah proporsional dimaksudkan untuk mendominasi dan memberikan torsi yang lebih besar (atau dalam kecepatan kasing Anda) semakin jauh Anda menjauhi posisi target Anda.

Istilah turunan dimaksudkan untuk mendominasi selama fase 'pelayaran' dari gerakan trapesium khas Anda. Ini membantu untuk mengatur kembali istilah proporsional yang sangat tinggi dan membatasi akselerasi pelarian ketika Anda jauh dari tujuan Anda, tetapi juga dapat membantu meningkatkan kecepatan di mana Anda bertemu di tempat tujuan ketika Anda mendekatinya dan istilah proporsional berkontribusi lebih sedikit. .

Jika Anda menggunakan pengontrol kecepatan daripada pengontrol torsi, maka istilah turunannya mungkin sebenarnya tersembunyi di dalam pengontrol kecepatan Anda dan tidak dapat diakses langsung ke loop PID Anda. Ini dapat membuat kontrol menjadi lebih sederhana (biasanya itu hanya akan berakselerasi secepat mungkin hingga kecepatan yang diinginkan atau kecepatan maksimum, mana yang lebih rendah) tetapi juga dapat membuatnya kurang dapat diprediksi. Seringkali istilah D (atau P) yang terlalu agresif dapat mengakibatkan siklus batas (sering disebut resonansi atau osilasi yang salah karena bunyi motor bersenandung atau bahkan menjerit dalam keadaan ini, meskipun siklus-batas adalah deskripsi yang jauh lebih akurat. ).

Istilah integral ada di sana untuk mengoreksi kesalahan kondisi tetap residual , yaitu di mana ada perbedaan, persisten jangka panjang antara di mana Anda diminta untuk pergi dan di mana Anda sebenarnya. Nilai Anda saat ini correction(benar-benar hanya toleransi) bekerja seperti kebalikan dari istilah integral, itu memotong motor sepenuhnya ketika Anda berada dalam deadband di sekitar posisi yang diinginkan.

Karena faktor-faktor ini, Anda akan mendapatkan sedikit dari menerapkan loop PID penuh kecuali Anda juga merencanakan dalam profil kecepatan dengan fase akselerasi, jelajah & perlambatan yang berbeda.

Juga ingat bahwa deadband dan kurangnya istilah I akan berarti bahwa posisi akhir akan selalu agak acak dan kemungkinan besar akan berbeda tergantung pada arah mana Anda mendekati posisi yang diinginkan. Dengan demikian, pengulangan dua arah Anda bisa jauh lebih buruk daripada pengulangan standar Anda.

Untuk informasi lebih lanjut tentang perbedaan antara akurasi, pengulangan dan resolusi, lihat deskripsi yang sangat baik ini . Dalam kasus Anda, resolusi Anda adalah sensor kompas Anda, sementara akurasi, pengulangan kemungkinan besar dibatasi oleh correctionnilai Anda , karena jika correctionnilainya lebih besar dari resolusi kompas Anda, Anda membuang beberapa akurasi posisi Anda sebagai imbalan untuk dapat matikan motor Anda ketika Anda dekat.

Mark Booth
sumber
8

Kontroler PID akan menjadi yang terbaik, Menggunakan kompas maka itu adalah tugas yang relatif lurus ke depan untuk mendapatkan bantalan robot Anda dan membandingkannya dengan bantalan yang ingin Anda capai, dan menggunakan beberapa teknik penyetelan PID untuk mencapai gerakan putaran yang halus untuk judul yang Anda inginkan. Pendekatan ini juga dapat diterapkan untuk memutar dengan jumlah yang diberikan secara akurat.

Saya telah melakukan beberapa robot di bidang ini, ini yang kami gunakan dalam robot kami, melakukan tugas yang tidak terlalu berbeda dengan milik Anda ...

Njdart
sumber
1
Terima kasih atas jawaban anda. Saya ingin menerima jawabannya tetapi saya ingin melihat lebih banyak jawaban, jadi saya akan menerima ketika ada lebih banyak jawaban;)
Miro Markaravanes