Обсуждаем контроллеры компании Atmel.
Ответить

Аналоговый джойстик и танковое управление.

Пт окт 18, 2019 09:03:13

Приветствую.
Колесная платформа 6х6, уарт радио удлиннитель, джойстик с али.
Не могу придумать алгоритм управления, а непосредственно формировать данные с джойстика. Принимающая сторона понимает команды такого вида f255F255(ход вперет от 0 до 255) r255R255(ход назад), за счет их комбинаций разворот. f255управление мотором левой стороны, F255 правый.
Джойстик по х,у дает от 0 до 255 центр 128.
Сделал пока так в обработчике: преровнял все оси так что значения от центра идут от 0 до 128, в майне к этим значениям приставляю буковки направления.
1. Как сделать чтобы значения в каждую сторону менялись от 0 до 255(или больше для других настроек шим)?
2. Как организовать подруливание(как вычесть часть хода с левой стороны при подруливании влево)?
Надеюсь хоть что то понятно).

Re: Аналоговый джойстик и танковое управление.

Пт окт 18, 2019 09:13:15

если так сделать, то читса теоретически тачка улетит по центрифуге в кусты, не?

Re: Аналоговый джойстик и танковое управление.

Пт окт 18, 2019 09:20:14

если так сделать, то читса теоретически тачка улетит по центрифуге в кусты, не?

Так это как?

Re: Аналоговый джойстик и танковое управление.

Пт окт 18, 2019 09:23:29

вы шо хотите чтоб изделие на месте крутилось?
Так это как?

как вот вы хотите... :roll:
а шо вы хотите? расширить диапазон можно в аналоговой части, мультипликатором например,
а вы хотите изменить именно алгоритм управления как я понимаю, не?

Re: Аналоговый джойстик и танковое управление.

Пт окт 18, 2019 09:29:58

Опустим пока расширение диапазона.
Я не могу сообразить, как организовать подруливание.
Допустим есть две переменные forward_l и forward_r, джойстик сдвинут вверх по оси y, значения ацп "проверяются на разность лево/право по оси х" далее значения записываются forward_l и forward_r, эти значения укладываются в массив, присваиваются буквы направления и посылка отправляется драйверу моторов.
"проверяются на разность лево/право по оси х" это нужно если мы решим подрулить не останавливая хода вперед.

forward_l и forward_r переменные для левого/правого мотора, скорость.

Re: Аналоговый джойстик и танковое управление.

Пт окт 18, 2019 16:31:52

у вас на входе данные с джойстика по направлению вперед-назад - от 0 до 255.
В лоб: Вычитаем из этого значения 127 и умножаем на 2.
Получаем число в диапазоне -254... +256 с шагом 2.
Т.е. получится ряд -254, -252, ... -2, 0, +2, +4...,+254, +256.

Теперь смотрим на ось джойстика влево-вправо. Теоретически у нее , по аналогии с вперед-назад - центр = 127, влево=0, вправо = 255.
Вычитаем 127 - получаем диапазон -127..+128.
Потом смотрим - если число в пределах -8..+8 - обнуляем его, что бы при движении вперед лёгкие движения влево-вправо не влияли на прямоту хода. Т.е. вводим мертвую зону для джойстика. На аналоговых она точно нужна.

Теперь следим за руками.
Для левого мотора: Из первого числа (которое вперед-назад) вычитаем второе (которое влево-вправо).
Для правого мотора: Суммируем первое и второе числа.
Получаем числа в диапазоне от -(254+127) до +(255+128).
Дальше просто: если число меньше -255 , то пишем в него -255, если больше +255 - пишем в него 255.

Получаем 2 числа в диапазоне -255..+255 для каждого мотора.
Что и требовалось получить.
На полном ходу колеса той стороны, куда нужно повернуть, останавливаются, если ход не полный - добавляется реверс той стороны, куда поворачивать.
Если повернуть джойстик влево или вправо без перемещения вперед/назад - машина развернется на месте.

П.С. Для вперед/назад я бы тоже добавил мертвую зону джойстика....
Ответить