Robot tidak pernah berjalan lurus

19

Saya menggunakan 2 motor DC identik dan roda kastor. Motor terhubung ke driver motor L293D dan dikendalikan oleh RPi .

Robot tidak lurus. Ini berbelok ke kanan. Saya menjalankan kedua motor pada 100% PWM .

Apa yang saya coba untuk memperbaiki kesalahan:

  1. Saya menyesuaikan PWM roda lebih cepat menjadi 99% , tetapi robot hanya berbalik ke sisi lain;
  2. Saya menyesuaikan berat pada robot dan masalahnya masih berlanjut.

Saya pernah mencoba menjalankan motor tanpa beban. Apakah itu penyebabnya, seperti yang kemudian saya katakan kepadanya, menjalankan motor DC tanpa beban merusaknya?

Jika itu bukan penyebabnya, tolong beri tahu saya cara mengatasi masalah ini tanpa menggunakan sensor apa pun untuk mengendalikannya.

Mouse
sumber
Dalam konfigurasi drive diferensial yang saya gambar adalah apa yang Anda gunakan, ini sangat mungkin terjadi. Perbedaan kecil antara kedua motor akan menyebabkan robot berputar.
Demetris
4
Selamat datang untuk membuka kontrol loop. Anda membutuhkan sensor Anda sendiri (mata Anda) untuk mendeteksi masalah sendiri, bagaimana menurut Anda robot akan dapat mendeteksinya tanpa sensor tambahan? Menutup loop kontrol dengan sensor adalah cara yang harus dilakukan.
Bending Unit 22
1
Motor stepper mungkin berfungsi jika Anda ingin menghindari sensor.
@bdares - Jika tidak ada sensor, bagaimana robot tahu kapan harus benar? Jika satu roda menabrak area gesekan rendah (debu, misalnya) dan slip, robot berputar dan tidak akan pernah benar.
Chuck
Ketika Anda mengatakan tidak ada sensor, dapatkah ini berarti tidak ada penginderaan eksternal atau Anda juga mengecualikan encoders di atas roda? karena itulah solusi khas untuk masalah ini.
JamesRyan

Jawaban:

29

Aku posting ini sebagai jawaban karena yang jawabannya.

Kamu tidak bisa

Seperti @ BendingUnit22 menyebutkan, Anda mencoba kontrol "loop terbuka". Kebisingan dan variasi berarti robot Anda tidak akan pernah mengemudi garis lurus sempurna.

Motor dapat memiliki resistensi gulungan yang berbeda (arus penggerak / torsi berbeda), roda dapat memiliki ukuran yang berbeda, roda dapat memiliki karakteristik traksi yang berbeda, bantalan kastor dapat "kaku", kastor mungkin tidak lurus sempurna ketika kendaraan mulai , lantai mungkin memiliki karakteristik gesekan permukaan yang bervariasi (baca: debu atau karpet) - daftarnya terus bertambah.

Satu- satunya cara untuk menjelaskan hal-hal di luar kendali Anda (apa yang saya sebutkan di atas + lebih banyak) adalah dengan menggunakan sensor umpan balik.

Anda dapat mencoba untuk mendapatkan kinerja loop terbuka yang lebih baik dengan memperbaiki masalah yang saya sebutkan, tetapi ada lebih banyak lagi dan Anda tidak dapat mengendalikan semuanya.

Chuck
sumber
5
Persis! Masalahnya terletak pada pernyataan "Saya menggunakan 2 motor DC identik". Mereka tidak pernah benar-benar identik, dan seperti @Chuck menyebutkan, ada sejumlah pertimbangan lainnya. Satu-satunya hal yang pasti dalam robotika adalah kesalahan dan kebisingan akan muncul.
Ryan Loggerythm
2
Menggunakan dua roda pada poros yang sama masih harus menghasilkan hasil yang jauh lebih baik daripada hanya menggunakan dua motor yang sama, bukan?
John Dvorak
@JanDvorak - Saya tidak sepenuhnya yakin apa yang Anda maksud ketika Anda mengatakan, "Dua roda pada poros yang sama," tapi saya yakin dipahami / tersirat bahwa kedua roda berada pada poros geometris yang sama. Jika Anda maksudkan sumbu kontrol yang sama (seperti dalam satu motor) atau gandar (sekali lagi menyiratkan satu motor), maka saya akan menunjukkan bahwa tidak mungkin untuk melakukan kemudi drive diferensial dengan gandar yang terkunci. Untuk satu motor untuk mengendalikan kedua roda ke kecepatan yang berbeda memerlukan diferensial (dan peralatan lainnya), dan diferensial secara efektif memecah gandar menjadi dua bagian dan Anda kembali ke titik awal.
Chuck
Maksudku satu poros, maaf. Saya tidak tahu ada syarat untuk bisa jalan tidak lurus?
John Dvorak
2
@ JanDvorak - Saya percaya robot OP adalah kendaraan bergaya micromouse. Bahkan jika itu hanya harus lurus, dan menggunakan satu gandar, semua sumber kesalahan lainnya masih berlaku. Jika satu roda berdiameter 0,1% lebih besar dari yang lain, maka ia akan menempuh panjang lintasan yang 0,1% lebih jauh dari ban yang lebih kecil per putaran . Katakanlah, misalnya, ukuran roda nominal adalah 10cm dan jarak roda 10cm. Ban yang lebih besar 10,01 cm dan bergerak 0,0314 cm lebih jauh per revolusi . Untuk dasar roda, robot memutar 0,12 derajat per putaran roda . 0,01 cm bisa dengan mudah dari debu pada satu ban.
Chuck
6

Karena masalah loop tertutup terbuka telah disebutkan, saya akan memberikan komentar kepada "Saya pernah mencoba menjalankan motor dc tanpa beban".
Ya, Anda mungkin merusak motor Anda dengan ini tetapi Anda juga dapat merusak atau menghancurkan motor Anda dengan beban. Kerusakan datang dari arus dan suhu yang dihasilkan. Jika tidak ada asap dan bau yang keluar dari motor, kemungkinan besar tidak rusak. Dari pengalaman saya, saya dapat mengatakan bahwa motor dc skala hobi akan mulai menurun pada suhu lebih dari 100 ° C. Dan Anda pasti akan melihat suhu seperti itu

EDIT:
Saya memikirkan hal ini lagi dan saya mungkin mendapat ide yang mungkin dibicarakan oleh rekan Anda. Ada jenis khusus AC-Motor. Ini adalah motor sinkron yang tidak bersemangat. Pada dasarnya mereka dibangun untuk penghancuran diri. Jika Anda menyalakannya, mereka akan mulai berakselerasi hingga mereka membongkar sendiri. Tetapi jika Anda menempatkan beban yang berat pada mereka, mereka tidak dapat mencapai keadaan ini, hanya karena momen besar yang harus mereka terapkan pada beban. Jadi Anda bisa menggunakannya untuk tujuan yang masuk akal. Pokoknya Anda pasti tidak menggunakan motor seperti ini di aplikasi Anda.

Tobias
sumber
1
Saya pikir juga itu, terutama dengan motor hobi, pada saat Anda cukup panas untuk melihat itu panas atau bau lucu Anda mungkin sudah membakar isolasi dari gulungan. Seperti banyak peralatan listrik, itu berfungsi dengan baik atau rusak. Tidak banyak kasus di antaranya.
Chuck
Tidak ada asap atau kerusakan yang terlihat. Jadi mungkin tidak rusak karena saya menjalankannya kurang dari setengah menit.
Tikus
2

Apa yang Anda gambarkan disebut kontrol loop terbuka, dan untuk melakukan ini Anda memerlukan dua motor yang persis sama, dua roda persis sama, pusat gravitasi robot berada di tengah antara roda, sirkuit listrik simetris yang sempurna, dan akhirnya permukaan level seragam yang sempurna untuk dijalankan.

Untuk mencapai ini, Anda biasanya memesan puluhan atau ratusan setiap bagian, dan kemudian melakukan pengujian signifikan untuk menemukan dua motor yang paling cocok satu sama lain dalam hal daya dan kecepatan vs tegangan dan PWM. Lakukan hal yang sama untuk roda, pengontrol motor dan bagian lainnya.

Proses ini disebut binning - setelah tes ini Anda mengurutkannya sesuai dengan kemampuan atau karakteristiknya. Ini dianggap jauh lebih mahal baik dalam waktu dan sumber daya untuk dilakukan dengan benar daripada mengubah ke model loop tertutup, dan bahkan tidak memperhitungkan kondisi tanah yang buruk.

Namun, ini adalah salah satu cara untuk mencapai kebutuhan Anda tanpa sensor tambahan.

Adam Davis
sumber
1

Meskipun tidak akan pernah sempurna, mungkin ada cara sederhana untuk membuatnya lebih lurus.

Jika pada 100% -100% mobil selalu belok kiri, dan pada 100% -99% mobil selalu belok kanan, Anda harus dapat memperbaikinya dengan mencoba nilai di antaranya.

Mulailah dengan 100% -99,5% dan lanjutkan dengan 100% -99,75% atau 100% -99,25% tergantung pada hasilnya. Ini harus segera menyatu dengan situasi di mana Anda akan langsung 'rata-rata'.

Dennis
sumber
0

Nah, jika masalahnya tidak terletak pada perbedaan dalam perangkat keras atau perangkat lunak untuk setiap roda, maka mungkin masalah dengan ketidaksempurnaan alami baik dalam cara Anda membangun robot atau cara motor diproduksi. Koneksi mungkin tidak solid atau RPI mungkin tidak menghasilkan arus yang sama. Anda mungkin ingin menggunakan pengontrol kecepatan. Coba dulu itu.

Jika itu tidak berhasil, pabrikan Anda mungkin tidak membuat motor yang identik dan Anda mungkin hanya perlu mengkalibrasi motornya. Ini mungkin berarti penskalaan nilai motor yang lebih kuat sehingga daya 100% ke motor yang kuat cocok dengan yang lemah.

setengah kentang
sumber
2
Menggunakan pengontrol motor identik tidak akan menyelesaikan masalah yang ada. Masalahnya terletak pada inti robotika, yaitu "bagaimana cara memperbaiki kesalahan?"
Ryan Loggerythm
Saya pernah mendengar bahwa motor DC dapat berjalan sedikit lebih lambat ke depan. Juga, setiap ketidakseimbangan dalam berat dapat menyebabkan beberapa bergeser ke samping. Belum lagi hal-hal lain seperti gesekan dll. Melakukan sesuatu yang "identik" tidak akan berhasil. Steppers mungkin melakukan sedikit lebih baik, tetapi kemudian Anda tidak boleh mengemudi terlalu cepat atau apa pun ...
Paul
-2

Roda dengan motor dc harus b di depan. Dan roda coster di belakang. Maka itu akan bergerak lurus hanya ke arah depan

Arslan
sumber
Selamat datang di Robotics Arslan. Di Stack Exchange kami mencari jawaban komprehensif yang memberikan beberapa penjelasan dan konteks. Jawaban yang sangat singkat tidak dapat melakukan ini, jadi harap edit jawaban Anda untuk menjelaskan mengapa itu benar, idealnya dengan kutipan. Jawaban yang tidak termasuk penjelasan dapat dihapus.
Mark Booth