Daftar Isi:

Memahami Channel Mixing: 4 Langkah (dengan Gambar)
Memahami Channel Mixing: 4 Langkah (dengan Gambar)

Video: Memahami Channel Mixing: 4 Langkah (dengan Gambar)

Video: Memahami Channel Mixing: 4 Langkah (dengan Gambar)
Video: Cara Mudah Setting Mixer, Gak Bingung Lagi 2024, November
Anonim
Image
Image
Metode Campuran » Tidak Ada
Metode Campuran » Tidak Ada

Jika Anda pernah mengendarai sasis kendali jarak jauh, kemungkinan besar Anda telah menggunakan pencampuran, bahkan jika Anda tidak mengetahuinya. Khususnya, jika Anda menggunakan satu joystick atau gimble untuk mengontrol kendaraan yang menggunakan kemudi selip atau kemudi diferensial, Anda telah menggunakan pencampuran.

Pencampuran hanyalah bagaimana data dari joystick Anda digunakan untuk menentukan berapa banyak daya yang harus disuplai ke setiap sisi sasis.

Jika Anda membuka joystick, umumnya Anda akan melihat dua potensiometer di dalamnya. Satu untuk mengukur posisi Anda saat ini di sepanjang sumbu Y (atas dan bawah), dan yang lainnya untuk mengukur di mana Anda berada di sepanjang sumbu X (sisi ke sisi).

Meskipun saya tidak memiliki pelatihan formal tentang subjek, saya harus melakukan pencampuran kode sebelumnya dan baru-baru ini saya ingin menyelam lebih dalam ke subjek tersebut.

Pertama saya ingin mencatat bahwa sebagian besar pemancar RC memiliki kemampuan pencampuran seperti halnya banyak pengontrol motor. Informasi ini akan sangat berguna jika Anda harus melakukan pencampuran sendiri dalam kode Anda. Katakanlah misalnya jika Anda menggunakan Arduino untuk membaca data yang tidak tercampur dari penerima RC, atau Anda sedang membaca data analog dari pot di joystick, atau jika Anda membaca koordinat dari joystick digital di aplikasi seluler.

Mari kita lihat beberapa pendekatan pencampuran yang berbeda.

Langkah 1: Metode Campuran » Tidak Ada

Pertama mari kita lihat apa yang terjadi jika Anda tidak menggunakan pencampuran sama sekali. Jika Anda hanya mengirim data dari satu sumbu ke satu sisi sasis dan sumbu lainnya ke sisi lain, kendaraan Anda tidak akan merespons seperti yang Anda inginkan.

Misalnya jika Anda mendorong joystick lurus ke depan, sumbu Y berada pada kecepatan penuh dan sumbu X berada pada 0. Jadi, Anda akan mengemudi dalam lingkaran alih-alih lurus.

Langkah 2: Metode Metode » Putar

Metode Metode » Putar
Metode Metode » Putar

Seorang rekan kerja pernah menunjukkan kepada saya bahwa, dalam keadaan darurat Anda dapat memutar pemancar Anda 45 derajat untuk campuran orang miskin. Jika Anda menganggap nilai dari dua potensiometer dalam joystick sebagai sumbu x dan y pada kisi (dengan kedua sumbu terentang -100 hingga +100), ini sangat masuk akal karena Anda akan mencapai +100 pada kedua sumbu saat Anda mendorong joystick ke atas dan ke kanan. Jadi jika ini memetakan langsung ke dua saluran sasis Anda (sisi kiri dan kanan robot Anda) itu akan membuat robot Anda maju.

Jadi metode pencampuran pertama yang pernah saya coba adalah memutar koordinat x dan y secara matematis 45 derajat terhadap titik pusat kisi.

Ini bekerja dengan baik, namun saya tidak bisa maju dengan kekuatan 100% karena ketika Anda berputar, gerakan keseluruhan dibatasi ke lingkaran di dalam kotak, yang berarti Anda tidak akan pernah bisa benar-benar masuk ke sudut kanan atas itu.

Hal ini juga mengakibatkan sudut-sudut grid tidak dimanfaatkan. Ini bukan masalah jika Anda menggunakan joystick/gimple yang membatasi gerakan Anda sehingga area tersebut tidak pernah tercapai, tetapi jika tidak, Anda ingin bagian grid itu melakukan sesuatu sehingga gerakan Anda terasa sepenuhnya proporsional.

Jika Anda seorang pembelajar visual seperti saya, konsep ini mungkin lebih mudah dipahami dengan menonton video di awal instruksi ini.

Mari kita lihat beberapa contoh kode.

CATATAN TENTANG CONTOH KODE SAYA: Saya mengabaikan bagaimana Anda mendapatkan nilai joystick_x dan joystick_y karena akan berubah tergantung pada proyek Anda. Saya juga akan memetakan/membatasi ke ±100 tetapi Anda mungkin perlu memetakan ke 1000 - 2000 untuk PWM atau 0 - 255 untuk output analog dll. Saya selalu membatasi… untuk berjaga-jaga.

Contoh Arduino:

//putar secara matematis

rad ganda = -45*M_PI/180; int leftThrottle = joystick_x * cos(rad) - joystick_y * sin(rad); int rightThrottle = joystick_y * cos(rad) + joystick_x * sin(rad); //constrain leftThrottle = kendala(leftThrottle, -100, 100); rightThrottle = kendala (rightThrottle, -100, 100);

Contoh JavaScript:

//mathematically 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), max); };

Langkah 3: Metode Metode » Sederhana

Metode Metode » Sederhana
Metode Metode » Sederhana

Selanjutnya kita memiliki persamaan yang sangat sederhana yang pertama kali saya ambil dari salah satu video Shawn Hymel's Adventures in Science SparkFun di mana ia kebetulan sedang mengerjakan proyek yang sangat mirip dengan yang sedang saya kerjakan.

Persamaan ini memungkinkan Anda mencapai kecepatan penuh saat maju, tetapi sama seperti metode rotasi, persamaan ini mengabaikan area sudut kisi. Ini karena dalam beberapa kasus maksimum adalah 100 dan dalam beberapa kasus maksimum adalah 200. Jadi, Anda akan menggunakan fungsi kendala untuk mengabaikan apa pun setelah 100.

Dan omong-omong, saya tidak menyebut ini sederhana dengan merendahkan… ada keindahan dalam kesederhanaan.

Contoh Arduino:

int leftThrottle = joystick_y + joystick_x;

int rightThrottle = joystick_y - joystick_x; //constrain leftThrottle = kendala(leftThrottle, -100, 100); rightThrottle = kendala (rightThrottle, -100, 100);

Contoh JavaScript:

var leftChannel = joystick_y + joystick_x;

var rightChannel = joystick_y - joystick_x;//constrain leftChannel = constrain(Saluran kiri, -100, 100); rightChannel = kendala (kananChannel, -100, 100); //helper functionvar constrain = function(num, min, max){ return Math.min(Math.max(num, min), max); };

Langkah 4: Metode Metode » Proporsional

Metode Metode » Proporsional
Metode Metode » Proporsional

Saya melompat dari metode sederhana berharap membuat yang terbaik dari kedua persamaan dunia. Idenya di sini adalah untuk sepenuhnya proporsional ke segala arah bahkan secara diagonal meskipun faktanya meskipun Anda bergerak lebih jauh jaraknya memiliki jangkauan yang sama seperti ketika Anda bergerak secara vertikal yang jaraknya lebih kecil.

Anda berakhir dengan skala -200 hingga +200 ke segala arah dalam contoh saya, saya memetakannya ke ±100 karena ini mewakili persentase daya yang mengalir ke setiap saluran - namun Anda ingin memetakannya ke apa pun yang berfungsi dalam penggunaan Anda- kasus untuk pengontrol motor Anda. Misalnya jika Anda mengirim sinyal PWM, Anda dapat memetakannya ke 1000 hingga 2000 atau jika Anda mengirim sinyal analog, Anda dapat memetakannya ke 0-255 dan mengatur arahnya sebagai boolean, dll.

Contoh Arduino:

int leftThrottle = joystick_y + joystick_x;

int rightThrottle = joystick_y - joystick_x;// dalam beberapa kasus maksimal adalah 100, dalam beberapa kasus 200// mari kita faktorkan selisihnya sehingga maksimal selalu 200int diff = abs(abs(joystick_y) - abs(joystick_x));kiriThrottle = kiriThrottle < 0 ? leftThrottle - diff: leftThrottle + diff;rightThrottle = rightThrottle < 0 ? rightThrottle - diff: rightThrottle + diff; //Peta dari ±200 hingga ± 100 atau rentang apa pun yang Anda butuhkanleftThrottle = map(leftThrottle, 0, 200, -100, 100);rightThrottle = map(rightThrottle, 0, 200, -100, 100); //constrainleftThrottle = kendala(leftThrottle, -100, 100);rightThrottle = kendala(rightThrottle, -100, 100);

Contoh JavaScript:

var leftThrottle = joystick_y + joystick_x;var rightThrottle = joystick_y - joystick_x;// dalam beberapa kasus maksimal adalah 100, dalam beberapa kasus 200, // mari kita faktorkan selisihnya sehingga maksimal selalu 200var diff = Math.abs(Math.abs(joystick_y) - Math.abs(joystick_x));leftThrottle = leftThrottle < 0 ? leftThrottle - diff: leftThrottle + diff;rightThrottle = rightThrottle < 0 ? rightThrottle - diff: rightThrottle + diff;//Peta dari ±200 kembali ke ±100 atau apa pun yang Anda butuhkanleftThrottle = map(leftThrottle, -200, 200, -100, 100);rightThrottle = peta(rightThrottle, -200, 200, -100, 100); //constrain leftThrottle = constrain(leftThrottle, -100, 100);rightThrottle = constrain(rightThrottle, -100, 100);//beberapa fungsi pembantuvar constrain = function(num, min, max){ return Math.min(Math. maks(angka, menit), maks); }; var map = function(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 = (angka/dalamSpan)*100; keluarMin = keluarMin + keluarMaks; outMax = keluarMaks + keluarMaks; outSpan = Math.abs(outMax - outMin); dipetakan = outSpan*(p/100) - (outMax/2); kembali dipetakan;};

Direkomendasikan: