Isi kandungan:

Memahami Pencampuran Saluran: 4 Langkah (dengan Gambar)
Memahami Pencampuran Saluran: 4 Langkah (dengan Gambar)

Video: Memahami Pencampuran Saluran: 4 Langkah (dengan Gambar)

Video: Memahami Pencampuran Saluran: 4 Langkah (dengan Gambar)
Video: Cara Kerja Mesin 4 Tak hanya 5 MENIT PAHAM 2024, November
Anonim
Image
Image
Kaedah Campuran »Tiada
Kaedah Campuran »Tiada

Sekiranya anda pernah menggunakan casis alat kawalan jauh, ada kemungkinan anda menggunakan pencampuran, walaupun anda tidak mengetahuinya. Khususnya, jika Anda menggunakan joystick tunggal atau gimble untuk mengendalikan kendaraan yang menggunakan skid steering atau diferensial steering, Anda telah menggunakan mixing.

Mencampurkan adalah bagaimana data dari kayu bedik anda digunakan untuk menentukan berapa banyak kuasa yang harus dibekalkan ke setiap sisi casis.

Sekiranya anda membuka kayu bedik, secara amnya anda akan melihat dua potensiometer di dalamnya. Satu untuk mengukur kedudukan semasa anda di sepanjang paksi Y (atas dan bawah), dan yang lain untuk mengukur di mana anda berada di sepanjang paksi X (sisi ke sisi).

Walaupun saya tidak mempunyai latihan formal mengenai perkara ini, saya terpaksa melakukan percampuran dalam kod sebelum ini dan baru-baru ini saya ingin menyelami topik ini dengan lebih mendalam.

Mula-mula saya ingin perhatikan bahawa kebanyakan pemancar RC mempunyai kemampuan mencampurkan seperti mana banyak pengawal motor. Maklumat ini akan sangat berguna jika anda perlu mencampurkan diri dengan kod anda. Katakan sebagai contoh jika anda menggunakan Arduino untuk membaca data yang tidak dicampur dari penerima RC, atau anda membaca data analog dari periuk di joystick, atau jika anda membaca koordinat dari kayu bedik digital pada aplikasi mudah alih.

Mari kita lihat beberapa pendekatan pencampuran yang berbeza.

Langkah 1: Kaedah Campuran »Tiada

Pertama mari kita lihat apa yang berlaku jika anda sama sekali tidak menggunakan pencampuran. Sekiranya anda hanya menghantar data dari satu paksi ke satu sisi casis dan paksi yang lain ke sisi yang lain, kenderaan anda tidak akan bertindak balas seperti yang anda mahukan.

Contohnya, jika anda menekan kayu bedik terus ke hadapan, paksi Y berada pada pendikit penuh dan paksi X berada pada 0. Oleh itu, anda akan memandu dalam bulatan dan bukannya lurus.

Langkah 2: Kaedah Kaedah »Putar

Kaedah Kaedah »Putar
Kaedah Kaedah »Putar

Seorang rakan sekerja pernah menunjukkan kepada saya bahawa, dalam keadaan darurat anda boleh memutar pemancar anda 45 darjah untuk campuran orang miskin. Sekiranya anda memikirkan nilai dari dua potensiometer dalam kayu bedik sebagai paksi x an y pada grid (dengan kedua paksi merangkumi -100 hingga +100) ini masuk akal kerana anda akan +100 pada kedua paksi semasa anda menekan joystick ke atas dan ke kanan. Oleh itu, jika ini memetakan terus ke dua saluran casis anda (sebelah kiri dan kanan robot anda) ia akan menjadikan robot anda maju.

Jadi kaedah pencampuran pertama yang pernah saya cuba ialah memutar koordinat x dan y secara matematik 45 darjah mengenai titik tengah grid.

Ini berfungsi dengan baik, namun saya tidak dapat maju dengan kekuatan 100% kerana ketika anda berputar, pergerakan keseluruhan dibatasi pada bulatan dalam grid, yang bermaksud anda tidak boleh benar-benar masuk ke sudut kanan atas.

Ini juga mengakibatkan sudut grid tidak digunakan. Ini tidak menjadi masalah jika anda menggunakan joystick / gimple yang membatasi pergerakan anda sehingga kawasan-kawasan tersebut tidak pernah dapat dicapai, tetapi jika tidak, anda mahu bahagian grid itu melakukan sesuatu sehingga pergerakan anda terasa benar-benar berkadar.

Sekiranya anda seorang pelajar visual seperti saya, konsep ini mungkin lebih mudah digunakan dengan menonton video pada awal arahan ini.

Mari lihat beberapa contoh kod.

CATATAN TENTANG CONTOH KOD SAYA: Saya meninggalkan bagaimana anda mendapat nilai joystick_x dan joystick_y kerana ia akan berubah bergantung pada projek anda. Juga saya akan memetakan / mengekang hingga ± 100 tetapi anda mungkin perlu memetakan ke 1000 - 2000 untuk PWM atau 0 - 255 untuk output analog dll. Saya selalu mengekang… sekiranya berlaku.

Arduino Contoh:

// berpusing secara matematik

double rad = -45 * M_PI / 180; int leftThrottle = joystick_x * cos (rad) - joystick_y * sin (rad); int rightThrottle = joystick_y * cos (rad) + joystick_x * sin (rad); // hadkan leftThrottle = hadkan (leftThrottle, -100, 100); rightThrottle = kekangan (rightThrottle, -100, 100);

Contoh JavaScript:

// matematik rotatevar rad = -45 * Math. PI / 180; leftThrottle = joystick_x * Math.cos (rad) - joystick_y * Math.sin (rad); rightThrottle = joystick_y * Math.cos (rad) + joystick_x * Math.sin (rad); // constrainleftThrottle = constrain (leftThrottle, -100, 100); rightThrottle = constrain (rightThrottle, -100, 100); // helper functionvar constrain = function (num, min, max) {return Math.min (Math.max (num, min), maks); };

Langkah 3: Kaedah Kaedah »Mudah

Kaedah Kaedah »Mudah
Kaedah Kaedah »Mudah

Seterusnya kita mempunyai persamaan yang sangat mudah yang pertama kali saya ambil dari salah satu video Shawn Hymel's Adventures in Science SparkFun di mana dia kebetulan membuat projek yang sangat serupa dengan yang saya sedang kerjakan.

Persamaan ini membolehkan anda mencapai kelajuan penuh ketika melangkah ke hadapan tetapi seperti kaedah putar, ia tidak mengira kawasan sudut grid. Ini kerana dalam beberapa kes maksimum adalah 100 dan dalam beberapa kes maksimum adalah 200. Jadi anda akan menggunakan fungsi batasan untuk mengabaikan apa-apa selepas 100.

Dan omong-omong, saya tidak memanggil ini sebagai penghinaan … ada keindahan dalam kesederhanaan.

Arduino Contoh:

int leftThrottle = joystick_y + joystick_x;

int rightThrottle = joystick_y - joystick_x; // hadkan leftThrottle = hadkan (leftThrottle, -100, 100); rightThrottle = kekangan (rightThrottle, -100, 100);

Contoh JavaScript:

var leftChannel = joystick_y + joystick_x;

var rightChannel = joystick_y - joystick_x; // hadkan kiriChannel = hadkan (kiriChannel, -100, 100); rightChannel = kekangan (kananChannel, -100, 100); // helper functionvar constrain = function (num, min, max) {return Math.min (Math.max (num, min), maks); };

Langkah 4: Kaedah Kaedah »Berkadar

Kaedah Kaedah »Berkadar
Kaedah Kaedah »Berkadar

Saya menggunakan kaedah mudah dengan harapan dapat memanfaatkan persamaan kedua dunia. Ideanya di sini adalah berkadaran sepenuhnya ke semua arah walaupun menyerong walaupun anda bergerak jarak yang lebih jauh ia mempunyai jarak yang sama seperti ketika anda bergerak secara menegak yang jaraknya lebih kecil.

Anda berakhir dengan skala -200 hingga +200 ke semua arah dalam contoh saya, saya memetakannya menjadi ± 100 kerana mewakili peratusan daya yang masuk ke setiap saluran - namun anda ingin memetakannya ke apa sahaja yang sesuai dengan penggunaan anda- sarung untuk pengawal motor anda. Contohnya jika anda menghantar isyarat PWM, anda mungkin memetakannya ke 1000 hingga 2000 atau jika anda menghantar isyarat analog, anda mungkin memetakannya ke 0-255 dan menetapkan arahnya sebagai boolean dll.

Arduino Contoh:

int leftThrottle = joystick_y + joystick_x;

int rightThrottle = joystick_y - joystick_x; // dalam beberapa kes maksimum adalah 100, dalam beberapa kes adalah 200 // biar faktor perbezaannya sehingga maksimum selalu 200int diff = abs (abs (joystick_y) - abs (joystick_x)); leftThrottle = leftThrottle <0? leftThrottle - diff: leftThrottle + diff; rightThrottle = kananThrottle <0? rightThrottle - diff: rightThrottle + diff; // Peta dari ± 200 hingga ± 100 atau jarak apa pun yang anda perlukan // constrainleftThrottle = constrain (leftThrottle, -100, 100); rightThrottle = kekangan (rightThrottle, -100, 100);

Contoh JavaScript:

var leftThrottle = joystick_y + joystick_x; var rightThrottle = joystick_y - joystick_x; // dalam beberapa kes maks adalah 100, dalam beberapa kes adalah 200, // mari kita faktor perbezaannya sehingga maksimum selalu 200var diff = Math.abs (Math.abs (joystick_y) - Math.abs (joystick_x)); leftThrottle = leftThrottle <0? leftThrottle - diff: leftThrottle + diff; rightThrottle = kananThrottle <0? rightThrottle - diff: rightThrottle + diff; // Peta dari ± 200 ke bawah hingga ± 100 atau apa sahaja yang anda perlukan -100, 100); // hadkan leftThrottle = constrain (leftThrottle, -100, 100); rightThrottle = constrain (rightThrottle, -100, 100); // beberapa fungsi pembantuvar constrain = function (num, min, max) {return Math.min (Math. maks (bilangan, min), maks); }; var map = fungsi (num, inMin, inMax, outMin, outMax) {var p, inSpan, outSpan, dipetakan; inMin = inMin + inMax; num = num + inMax; inMax = inMax + inMax; inSpan = Math.abs (inMax-inMin); p = (num / inSpan) * 100; outMin = outMin + outMax; outMax = outMax + outMax; outSpan = Math.abs (outMax - outMin); dipetakan = outSpan * (p / 100) - (outMax / 2); pulangan dipetakan;};

Disyorkan: