Съдържание:
- Стъпка 1: Метод на смесване »Няма
- Стъпка 2: Метод на метода »Завъртете
- Стъпка 3: Метод на метода »Прост
- Стъпка 4: Метод на метода »Пропорционален
Видео: Разбиране на смесването на канали: 4 стъпки (със снимки)
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:53
Ако някога сте карали шаси с дистанционно управление, има голям шанс да сте използвали смесване, дори и да не сте го знаели. По -конкретно, ако сте използвали един джойстик или гимбъл за управление на превозно средство, което използва плъзгащо се управление или диференциално управление, сте използвали смесване.
Смесването е просто начинът, по който данните от вашия джойстик се използват, за да се определи колко енергия трябва да бъде подадена към всяка страна на шасито.
Ако отворите джойстик, обикновено ще видите два потенциометра вътре. Единият за измерване на текущото ви положение по оста Y (нагоре и надолу), а другият за измерване къде се намирате по оста X (отстрани на страна).
Въпреки че нямам официално обучение по темата, преди това ми се налагаше да смесвам код и наскоро исках да се потопя малко по -дълбоко в темата.
Първо искам да отбележа, че повечето RC предаватели имат възможност за смесване, както и много контролери на двигатели. Тази информация ще бъде най -полезна, ако трябва да направите смесването сами във вашия код. Кажете например, ако използвате Arduino за четене на несмесени данни от RC приемник, или четете аналогови данни от саксиите в джойстик, или ако четете координатите от цифров джойстик в мобилно приложение.
Нека да разгледаме някои различни подходи за смесване.
Стъпка 1: Метод на смесване »Няма
Първо нека да разгледаме какво се случва, ако изобщо не използвате смесване. Ако просто изпратите данните от една ос към едната страна на шасито, а другата ос към другата страна, вашият автомобил няма да реагира така, както искате.
Например, ако натиснете джойстика докрай напред, оста Y е на пълен газ, а оста X е на 0. Така че ще карате в кръг, вместо да ходите направо.
Стъпка 2: Метод на метода »Завъртете
Един колега веднъж ми посочи, че за малко можете да завъртите предавателя на 45 градуса за смесване на беден човек. Ако мислите, че стойностите от двата потенциометра в джойстика са оси х и у на решетка (и двете оси се простират от -100 до +100), това има много смисъл, защото ще отидете до +100 по двете оси докато бутате джойстика нагоре и надясно. Така че, ако това се свърже директно с двата ви канала на шасито (лявата и дясната страна на вашия робот), това ще накара вашия робот да върви напред.
Така че първият метод за смесване, който някога съм опитвал, е математически да завъртя координатите x и y на 45 градуса около централната точка на решетката.
Това работи добре, но не мога да продължа напред със 100% мощност, защото когато се въртите, цялостното движение е ограничено до кръг в мрежата, което означава, че никога не можете да влезете в горния десен ъгъл.
Това също води до това, че ъглите на решетката не се използват. Това не е проблем, ако използвате джойстик/gimple, който ограничава движението ви, така че тези области никога не се достигат, но в противен случай ще искате тази част от мрежата да направи нещо, така че движенията ви да се чувстват напълно пропорционални.
Ако сте визуален обучаващ се като мен, тази концепция може да бъде по -лесна за разглеждане, като гледате видеоклипа в началото на тази инструкция.
Нека разгледаме някои примери за код.
ЗАБЕЛЕЖКИ ЗА ПРИМЕРИТЕ НА МОЙ КОД: Изпускам как получавате стойностите на joystick_x и joystick_y, тъй като те биха се променили в зависимост от вашия проект. Също така ще картографирам/ограничавам до ± 100, но вероятно ще трябва да съпоставите с 1000 - 2000 за PWM или 0 - 255 за аналогов изход и т.н. Винаги се ограничавам … за всеки случай.
Пример за Arduino:
// математически завъртане
двоен рад = -45*M_PI/180; int leftThrottle = joystick_x * cos (rad) - joystick_y * sin (rad); int rightThrottle = джойстик_y * cos (rad) + джойстик_x * sin (rad); // ограничаване leftThrottle = ограничение (leftThrottle, -100, 100); rightThrottle = ограничение (rightThrottle, -100, 100);
Пример за JavaScript:
// математически 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 = ограничение (leftThrottle, -100, 100); rightThrottle = ограничение (rightThrottle, -100, 100); // помощна функцияvar constrain = function (num, min, max) {return Math.min (Math.max (num, min), max); };
Стъпка 3: Метод на метода »Прост
След това имаме много просто уравнение, което за първи път взех от едно от видеоклиповете на Шон Хаймел в Приключенията в науката SparkFun, където той случайно работи по много подобен проект на този, по който работех.
Това уравнение ви позволява да стигнете до пълна скорост, когато вървите напред, но подобно на метода на завъртане, той пренебрегва ъгловите области на решетката. Това е така, защото в някои случаи максимумът е 100, а в някои максимумът е 200. Така че бихте използвали функция за ограничаване, за да пренебрегнете нищо след 100.
И между другото не наричам това просто унизително … има красота в простотата.
Пример за Arduino:
int leftThrottle = джойстик_y + джойстик_x;
int rightThrottle = joystick_y - джойстик_x; // ограничаване leftThrottle = ограничение (leftThrottle, -100, 100); rightThrottle = ограничение (rightThrottle, -100, 100);
Пример за JavaScript:
var leftChannel = джойстик_y + джойстик_x;
var rightChannel = joystick_y - joystick_x; // ограничаване leftChannel = ограничение (leftChannel, -100, 100); rightChannel = ограничение (rightChannel, -100, 100); // помощна функцияvar constrain = function (num, min, max) {return Math.min (Math.max (num, min), max); };
Стъпка 4: Метод на метода »Пропорционален
Изисках прост метод с надеждата да направя най-доброто от уравнението на двата свята. Идеята тук е да бъдете напълно пропорционални във всички посоки, дори диагонално, въпреки факта, че въпреки че се движите на по -голямо разстояние, той има същия обхват, както когато се движите вертикално, което е по -малко разстояние.
В крайна сметка получавате скала от -200 до +200 във всички посоки в моите примери, аз я картографирам до ± 100, защото представлява процента на мощност, отиваща към всеки канал - обаче ще искате да го съпоставите с всичко, което работи във вашата употреба - калъф за вашия контролер на двигателя. Например, ако изпращате ШИМ сигнал, можете да го съпоставите с 1000 до 2000 или ако изпращате аналогов сигнал, можете да го съпоставите с 0-255 и да зададете посоката като булева и т.н.
Пример за Arduino:
int leftThrottle = джойстик_y + джойстик_x;
int rightThrottle = joystick_y - joystick_x; // в някои случаи максимумът е 100, в някои случаи е 200 // нека вземем предвид разликата, така че максимумът винаги е 200int diff = abs (abs (joystick_y) - abs (joystick_x)); leftThrottle = leftThrottle <0? leftThrottle - diff: leftThrottle + diff; rightThrottle = rightThrottle <0? rightThrottle - diff: rightThrottle + diff; // Карта от ± 200 до ± 100 или какъвто и да е диапазон, от който излизатеThrottle = map (leftThrottle, 0, 200, -100, 100); rightThrottle = map (rightThrottle, 0, 200, -100, 100); // constrainleftThrottle = ограничение (leftThrottle, -100, 100); rightThrottle = ограничение (rightThrottle, -100, 100);
Пример за JavaScript:
var leftThrottle = joystick_y + joystick_x; var rightThrottle = joystick_y - joystick_x; // в някои случаи максимумът е 100, в някои случаи е 200, // нека вземем предвид разликата, така че максът винаги е 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; // Карта от ± 200 обратно надолу до ± 100 или каквото и да излезетеThrottle = map (leftThrottle, -200, 200, -100, 100); rightThrottle = map (rightThrottle, -200, 200, -100, 100); // ограничаване leftThrottle = ограничение (leftThrottle, -100, 100); rightThrottle = ограничение (rightThrottle, -100, 100); // някои помощни функцииvar constrain = function (num, min, max) {return Math.min (Math. макс (брой, мин), макс); }; var map = function (num, inMin, inMax, outMin, outMax) {var p, inSpan, outSpan, картографиран; 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); mapped = outSpan*(p/100) - (outMax/2); връщане картографирано;};
Препоръчано:
Основи на двигателя - Концепция Супер лесна за разбиране с експеримент: 7 стъпки (със снимки)
Основи на двигателя | Концепция Супер лесна за разбиране с експеримент: В тази инструкция ще ви науча за основния фундаментален принцип на двигателите. Всички двигатели около нас работят на този принцип. Дори генераторите работят върху взаимното изявление на това правило. Говоря за лявата ръка на Флеминг
Вътрешна антена BIQUAD, изработена от мед и дърво за приемане на HDTV канали в UHF лентата (КАНАЛИ 14-51): 7 стъпки
Вътрешна антена BIQUAD, изработена от мед и дърво за приемане на HDTV канали в UHF лентата (КАНАЛИ 14-51): На пазара има разнообразни телевизионни антени. Най-популярните според моите критерии са: UDA-YAGIS, Dipole, Dipole with reflectors, Patch и Logarithmic antennas. В зависимост от условията, разстоянието от предаването на
Разбиране на IR протокола на дистанционното управление на климатика: 9 стъпки (със снимки)
Разбиране на IR протокола на дистанционното управление на климатика: Научавам за IR протоколите от доста време. Как да изпращате и получавате IR сигнали. В този момент единственото нещо, което остава, е инфрачервеният протокол на променливотокови променливи. За разлика от традиционните дистанционни управления на почти всички електронни устройства (да речем телевизор), където
AB/XY за 2 китари и 2 ампера на отделни канали: 7 стъпки (със снимки)
AB/XY за 2 китари и 2 ампера на отделни канали: Както обикновено обичам да правя неща, които ми решават проблеми. Този път използвам педал Boss AB-2 за превключване между двата ми усилвателя, единият обикновено е мръсен а другият е чист с педали пред него. След това, когато дойде някой друг и
Картофена батерия: Разбиране на химическата и електрическата енергия: 13 стъпки (със снимки)
Картофена батерия: Разбиране на химическата и електрическата енергия: Знаете ли, че можете да захранвате крушка само с един или два картофа? Химическата енергия между двата метала се превръща в електрическа енергия и създава верига с помощта на картофа! Това създава малък електрически заряд, който може да бъде