Форум программистов, компьютерный форум, киберфорум
Робототехника и умный дом
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.93/44: Рейтинг темы: голосов - 44, средняя оценка - 4.93
0 / 0 / 0
Регистрация: 28.01.2010
Сообщений: 185
1

Управление с джойстика

03.07.2011, 15:44. Просмотров 8198. Ответов 10
Метки нет (Все метки)


Есть такой джойстик http://www.chipdip.ru/product/fjn10k15.aspx которым надо управлять гусеничной платформой.

Надо придумать какой-то адекватный алгоритм вычисления коэффициентов заполнения ШИМ для обоих двигателей и направление вращения. С направлением проблем нет, а вот с коэффициентами проблема. Пробовал извращаться с геометрией, самый нормальный результат получился когда координата х задавала ШИМ одного двигателя, а второй вычислялся как длина вектора (по теореме Пифагора, там еще прикол был с извлечением квадратного корня). Так же вариант просто нарисовать таблицу с коэф. ШИМ и смотреть в какую ячейку попадает вектор, но это как-то не по спортивному, хочется нормальный алгоритм.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.07.2011, 15:44
Ответы с готовыми решениями:

Управление машинкой с джойстика
Помогите, хочу реализовать управление машинкой с джойстика. /*Номера портов мотров*/ #define...

Кроссплатформенное управление, два джойстика
Пишу скрипт для джойстика. Персонаж перемещается по полю с помощью одного джойстика. С помощью...

Реально ли реализовать управление программой от джойстика
Друзья, помогите, может у кого есть примеры работы с управлением от пульта(джойстика) по...

Программирование джойстика
Народ как запрограммировать подобный джостик? Он встечается во многих андроид играх, работает он...

10
0 / 0 / 0
Регистрация: 31.03.2010
Сообщений: 526
03.07.2011, 15:54 2
hittroysir
Вычитанием можно..
Нажимаешь вперёд на джойстик до максимума (вот тебе 100% шим на обоих двигателях) немного поворачиваешь джойстик влево (смотришь показания АЦП) и отнимаешь от значения ШИМ левого двигателя показания АЦП
Сообразил??
0
0 / 0 / 0
Регистрация: 22.01.2010
Сообщений: 4,000
03.07.2011, 16:23 3
А по диагонали поставить жойстик религия не позволяет?
0
0 / 0 / 0
Регистрация: 28.01.2010
Сообщений: 185
03.07.2011, 19:38 4
Да, по диагонали работает, пробовал :). Потом пробовал программно повернуть на 45 градусов, очень много кода вышло.

Я считаю что можно написать эффективный код чтобы работало в таком виде как есть, можете думать что это спортивный интерес.
0
0 / 0 / 0
Регистрация: 26.04.2010
Сообщений: 1,445
04.07.2011, 11:26 5
А что сложного с поворотом? Для двумерного случая матрица вращения:

cos(A) -sin(A)
sin(A) cos(A)

А если рассматривать поворот на фиксированный градус (как у тебя, на 45), то вообще все просто.
Что-то типа такого:
x1 = x * cos(45°) + y * sin(45°) = sqrt(2)/2*(x+y)
y1 = y * cos(45°) - x * sin(45°) = sqrt(2)/2*(y-x)

Если не интересны точные абсолютные значения, то корнями пренебрегаем.
Итого:
x1 = x+y
y1 = y-x
0
0 / 0 / 0
Регистрация: 28.01.2010
Сообщений: 185
04.07.2011, 14:23 6
А я извращался с полярной системой координат... спасибо, только еще остались траблы когда угол меньше 45°, буду что-то думать.
0
0 / 0 / 0
Регистрация: 15.02.2011
Сообщений: 176
04.07.2011, 23:58 7
как тут уже вывели: для каждого из моторов либо складывать либо вычитать положение ручек.. кстати эти х и у относительно нуля(средней точки) должны вычисляться вроде

а как эта штуковина в пользовании? возвращается ручка в среднее положение?
0
0 / 0 / 0
Регистрация: 26.04.2010
Сообщений: 1,445
05.07.2011, 02:38 8
Цитата Сообщение от hittroysir
А я извращался с полярной системой координат... спасибо, только еще остались траблы когда угол меньше 45°, буду что-то думать.
в смысле иеньше 45? тебе же надо просто на 45 градусов повернуть всю ситему координат?
0
0 / 0 / 0
Регистрация: 28.01.2010
Сообщений: 185
05.07.2011, 16:31 9
возвращается ручка в среднее положение?
Да.

Получается такая система координат (если использовать знаковые переменные то центр будет в точке (0,0)). Для каждой четверти преобразовываю в локальную систему 0-125 (в центре мертвая зона). Сейчас вектор ОА переходит в ОВ и я напрямую могу копировать координаты в регистры ШИМ. ОВ -> ОС, здесь уже работает только 1 двигатель, а по идеи должны работать еще оба. Если джойстик в точке D то координаты уходят в минуса, т.е. значение больше 127 в беззнаковых переменных.

Я думаю если поворачивать не на 45 градусов, а просто уменьшать угол в два раза будет то что надо, т.е. OA->OB, OB->OD. как это сделать еще не придумал.

0
0 / 0 / 0
Регистрация: 02.07.2011
Сообщений: 96
05.07.2011, 19:10 10
Ну если значения отрицательные, так и крути в обратную сторону 2-й двиг, тогда в точке С будет одинаковое по скорости но разное по направлению движение 2-х двигателей.
Т.е. в секторе 0А-0В оба двигателя вперед с разной скоростью, в векторе 0В, только один, в секторе 0В-0С в разнве стороны с разной скоростью соотвественно.
0
0 / 0 / 0
Регистрация: 28.01.2010
Сообщений: 185
11.07.2011, 15:33 11
Сделал как советовали, все работает. Сейчас мне кажется все таким очевидным, как я до такого сам не додумался?

код
Код
   a = readadc (0);
b = readadc (1);

//x = (b+a)*0.7;
x = b + a;
tmp = x >> 2;
x = x - tmp;
//y = (a-b)*0.7;
y = a - b;
tmp = y >> 2;
y = y - tmp;

if (y > 4) {
PORTD &= ~(1 << 6);      //OCR1А вперед (левый)
PORTD |= 1 << 7;
OCR1A = y + 110;
}
else if (y < -4) {
PORTD |= 1 << 6;      //OCR1А назад (левый)
PORTD &= ~(1 << 7);
OCR1A = y*(-1) + 110;
}
else {

if (x > 4) {
PORTD &= ~(1 << 2);    //OCR1B вперед
PORTD |= 1 << 3;
OCR1B = x + 110;
}
else if (x < -4) {
PORTD |= 1 << 2;      //OCR1B назад
PORTD &= ~(1 << 3);
OCR1B = x*(-1) + 110;
}

if ((x<= 4 || x>=-4) && (y<=4 || y>=-4)) {
PORTD &= ~(1 << 2);
PORTD &= ~(1 << 3);
PORTD &= ~(1 << 7);
PORTD &= ~(1 << 6);
OCR1B = 0;
OCR1A = 0;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.07.2011, 15:33

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Создание джойстика
Сразу прошу прощения, возможно вопрос очень бредовый. Мы с другом фанаты старых приставочных игр,...

Отслеживание джойстика
подскажите пожалуйста использую стандартный джойстик из standard assets , такая проблема как узнать...

Эмулятор джойстика
Народ хелп, пытаюсь сделать свой первый проект на Ардуино. Задача подключить пульт управления...

размеры джойстика
Заказал с али такие модули http://www.adslclub.ru/uptood/img/2017-03/26-01044067894.jpg Нигде...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.