Скоростное движение по линии - как?

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

И что? Мы такие же "любители-самоучки", всё сами, всё за свои бабки. Есть алиэкспресс, он доставляет в любой колхоз, всё что надо. Есть интернет, гугль знает всё, да и в этой теме много расписано уже детально. Деньги на поездку? Ну на вторую я брал кредит, уже рассчитался, к примеру..

А колхоз имеет свои плюсы - все знают друг-друга, помочь могут. Это Вам не наша деревня - "бывшая пересыльная тюрьма" всего ГУЛАГа (да, да главное управление лагерей стоит у нас на "Богдашке").. :)

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016
Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Купили, понравилось? К чему реклама в этой теме не понял..

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Arhat109-2 пишет:

Купили, понравилось? К чему реклама в этой теме не понял..

Нет не купил. Просто ролик увидел. Видели форму колес,размещение. Компановка. Или вы думаете, что такая движущая конструкция будет ездить медлено? 

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Классика. Большие и легкие колеса, с уменьшенным моментом инерции для своего радиуса, компактная компоновка .. для роботов - балансировщиков тоже достаточно важный критерий. Ехать будет "как мотор" сможет.

Проблема повышения скорости для нас - это в первую очередь "моторы", которых практически нет в требуемом диапазоне мощностей/габаритов, и та проблема, что пытался решить тут - программные ИЗЫСКИ, позволяющие кататься с учетом "дрифтов" т.с. "ЗА пределом" расчетного ограничения по трению.

.. в процессе ислледования вопроса выяснилось, что дальше ПИД никто не смотрит, почему оно не подходит для скоростного движения - вообще "за гранью понимания" ну и то, что ПИД тоже НЕ выходит за "теоретические рамки" к-та трения .. понимания тоже крайне мало. Увы, но то что меня интересует .. очень далеко отсюда.

P.S.

Просто уже появилось понимание того, что вопрос больше надо адресовать в серьезные научные или инженерные форумы, а тут он превышает имеющийся уровень "помогите мы сами неместные".. :)

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Завтра у нас очередные отборочные соревнования под Робофест-2018. Для нашего это последний сезон, но тем не менее, делать "суперскоростную тележку" он отказался наотрез, как ни уговаривал. Поедем на той же "Адская колесница ГП", что и выступали в прошлом году...

BLDC моторы, типа BX-1306 kv=3100, удалось перемотать на kV=400, с тяговым моментом около 150-250гр*см и токами до 1.7-3А. Что превышает массо-габаритный параметр любого коллекторника для таких тележек. С колесом Лего Ф42мм вполне можно обеспечить скорости по прямой до 5-6м/сек даже для тележки под 200гр. Но .. требуется "авто" контроллер для бездатчикового мотора .. коих нет вовсе.

Вообще, я в диком восторге. Мотор весом 15гр, тянет не хуже 150гр*см и выдает около 50 оборотов в секунду. Колесо можно сажать прямо на ротор и мотор практически будет "вечный"! Можно вообще выйти на веса в районе 100-120гр для всей тележки .. но, ни хочет, надоели тележки. :(

kivik
Offline
Зарегистрирован: 08.07.2015

Arhat109-2 с каким результатом поздрвлять?

Как впечатление от мероприятия (сделано для галочки или реально нужное чтобы чего-то проверить , популизировать?)

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Это были Новосибирские отборочные мероприятия на сам Фестиваль. Заявилось около 8 команд, но реально участвовало опять только 2, так что поздравлять особо не с чем. Проехали за 10.4 сек., не особо напрягаясь, поскольку второй конкурент сразу не показывал результатов выше 25сек. Нафиг "палить моторы"? :)

Привезли с собой 2 машинки: старую "Адская колесница ПМ" (из говна и палок, пардон "подручных материалов"), которая каталась в прошлом году на московском Робофест-2017, она и выступила в районе 10-11сек, все заезды. И вторым номером привезли облегченный вариант из "Ардуино как Лего", но поскольку теперь (с прошлого года) запрещены "любые детали Лего", то её катали "для души" .. когда детишкам делать было особо нечего. Привезли ни разу не запустив дома, всю отладку и настройку они делали после сдачи колесницы (основной) на карантины .. к концу дня машинка показала чуть лучший результат - около 8.5сек.

Почему только двое? А опять, остальные выставились с лего-машинками и их "завернули" вне конкурса. Катались вместе с нашей "Ардуино как Лего". Всю трассу прошло только 4 лего-претендента, лучшее время у леговцев что-то под 30 сек. .. внимательно не смотрели. Но, надо сказать там были совсем мелкие ребятишки - от 8 лет в т.ч.

В целом, наши отборочные прошли в веселой, дружественной атмосфере, в отличии от прошлого года с "особенными детьми", а главное распорядителями.. (как понял - уволена "девушка").

Наш герой в перерывах провел лекцию "Как должны работать датчики у тележки" заинтересованным слушателям. Получилось несколько спонтанно, поскольку сразу 3 тренера подошли поинтересоваться "как сделано" и тут он "распустил перья" (говорил же: молчание - золото, нет жеж). После 4-го предложения было весело наблюдать со стороны как народ воспринимает достаточно грамотный рассказ об устройстве датчиков, бегущих фильтров среднего, компенсаторов сторонней засветки и т.п. .. как "птичий щебет". Можно было на английском изъясняться ровно с тем же результатом. :)

P.S. По приезду домой, он предложил на Москву сделать "самообучающуюся" тележку, а поразмышляв "как" внезапно переоткрыл для себя ПИД-регулятор. По-своему, но весьма верно. :) Всё не знал как ему разьяснять интегралы с дифференциалами ..

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Да, оказалось полезно. Популяризовать наше "ардуино как лего" получилось просто "на ура". В течение дня получил 2 предложения о ведении курсов у "конкурентов" и заинтересовавшихся этим подходом. Итого, в Новосибирске уже пятеро желающих применять в обучении "Ардуино как Лего". После Москвы (теперь едем от нашей школы) продолжу формировать "курс" и комплект деталек.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

По времени прохождения в этот раз, наверное надо дополнить, что на трассе присутствовали препятствия И горка (причем крутая, а не как в прошлом году в Мск) И балка. Времена для обоих машинок указаны с ними. Без них, конечно было бы меньше.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Подготовка к Москве. Освоено изготовление силиконовых колес, литьем в закрытую форму чистого, казанского силикона (тюбик 180гр - 98руб):

Это первый относительно удачный вариант из 5-и попыток. Уже в процессе есстественной досушки вне формы. В общем, сушка менее 3-х суток - это баловство даже в режиме скоростного отвердевания в форме.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016
ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Есть тележка почти как здесь только на 4 колёсах, внучка наигралась с автоматикой, хочу переделать на радиоуправление, аппаратура стандартная, 3 канала ШИМ 1000-1500-2000, можно выставить расходы на руль поменьше, кто-то пытался реализовать ручное управление???

Я так понимаю, скетч будет аналогичен скетчу для танка?

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Практика соревнований показала что это гумно, а не тележка .. но, если уже "накаталась", то видимо Вы это и сами в курсе.. переделать на р/у - нет ничего сложного. Для конкретно этой - достаточно двух каналов - по одноу на мотор, как танковое управление. У нас сначала наигрался в р/у, а потом перешел на автоматное управление. Последнее что высказывал, но так и не взялся делать: -"Можно сделать так, чтобы тележка самонастраивалась на линию и сама оптимизировалась на макс. скорость".

На Ардуино - так и не стал делать, а вот шагоход на Лего у него уже частично решает подобную задачу. Но, я в его "Лего-код" стараюсь даже не заглядывать..

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Arhat109-2 пишет:

Практика соревнований показала что это гумно, а не тележка .. но, если уже "накаталась", то видимо Вы это и сами в курсе.. переделать на р/у - нет ничего сложного. Для конкретно этой - достаточно двух каналов - по одноу на мотор, как танковое управление. У нас сначала наигрался в р/у, а потом перешел на автоматное управление. Последнее что высказывал, но так и не взялся делать: -"Можно сделать так, чтобы тележка самонастраивалась на линию и сама оптимизировалась на макс. скорость".

На Ардуино - так и не стал делать, а вот шагоход на Лего у него уже частично решает подобную задачу. Но, я в его "Лего-код" стараюсь даже не заглядывать..

тут как раз сложность, что повороты управляются по второму каналу, а ход по первому, значение шим 1500 - нейтраль (тормоз), 1000 - 1500 ход назад, 1500-2000 ход вперёд, и аналогично повороты, то есть надо миксировать два канала в ардуино и подавать  разными ШИМ левый и правый борт, тележка каталась по комнате в полном автомате, две сервы управляли поворотом датчика HC (ультразвук)...
Хотел просто залить выкинув всё ненужное и дать внучке играться

Видимо для начала надо попробовать принять два канала:
 

    volatile int rc1_data = 1500;
    volatile int rc2_data = 1500;
    volatile int rc3_data = 1500;
    volatile unsigned long start_timeRC1 = 0;
    volatile unsigned long start_timeRC2 = 0;


    void setup() {
    Serial.begin(115200);
    // Привязываем к Pin2 прерывание по фронту сигнала
    attachInterrupt(0, risingRc1, RISING);
    // Привязываем к Pin3 прерывание по фронту сигнала
     attachInterrupt(1, risingRc2, RISING);
    }

    void loop() { }

/******Обработчик прерывания на возрастание сигнала ******/
    void risingRc1() {
    // Привязываем к Pin2 прерывание по срезу сигнала
    attachInterrupt(0, fallingRc1, FALLING);
    //сохраняем значение времени начала импульса
    start_timeRC1 = micros();
    }
 void risingRc2() {
    // Привязываем к Pin2 прерывание по срезу сигнала
    attachInterrupt(1, fallingRc2, FALLING);
    //сохраняем значение времени начала импульса
    start_timeRC2 = micros();
    }

    
 /*******Обработчик прерывания по срезу сигнала *******/
    void fallingRc1() {
    // Привязываем к Pin2 прерывание по фронту сигнала
    attachInterrupt(0, risingRc1, RISING);
    //сохраняем значение длительности импульса
    rc1_data = micros() - start_timeRC1;
    Serial.println(rc1_data);
    }

     void fallingRc2() {
    // Привязываем к Pin2 прерывание по фронту сигнала
    attachInterrupt(1, risingRc2, RISING);
    //сохраняем значение длительности импульса
    rc2_data = micros() - start_timeRC2;
    Serial.println(rc2_data);
    }

    /*
    Алгоритм:

    При появлении импульса срабатывает прерывание по фронту сигнала(когда он возрастает
    с 0 до 1).
    Сохраняем текущее время и устанавливаем прерывание на срез сигнала
    (переключение с 1 на 0).
    При срабатывании прерывания на срез сохраняем разницу между текущим временем и записанным
    ранее, таким образом получаем длительность импульса. Переключаем прерывание обратно на 
    фронт. Передаём данные через Arduino.
    Остается только преобразовать время в микросекундах к требуемым единицам.

    */
    

 

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

ua6em, я не понимаю почему вам не подошло прерывание (CHANGE прерывание вызывается при смене значения на порту, с LOW на HIGH и наоборот)  А в обработчике определии состояние пина и по нему будет ясно, что был фронт или спад. http://arduino.ru/Reference/AttachInterrupt

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

qwone пишет:

ua6em, я не понимаю почему вам не подошло прерывание (CHANGE прерывание вызывается при смене значения на порту, с LOW на HIGH и наоборот)  А в обработчике определии состояние пина и по нему будет ясно, что был фронт или спад. http://arduino.ru/Reference/AttachInterrupt

почему не подошло )))
хочется разнообразия...

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

ua6em пишет:
почему не подошло )))хочется разнообразия...
Я скуке преподчла движенье! Пошла искать на жопу приключенья

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

ua6em, ну в общем-то да, придется миксировать. Это делается относительно просто: по каналу скорости принимаете СРЕДНЮЮ скорость обоих моторов от 0 до MAX, а по каналу управления принимаете рассогласование моторов dV, и тупо вычитаете рассогласование из левого и добавляете в правый.

Сигнал рассогласования в виде ШИМ от приемника перекодируете, map() в помощь, с 1000 до 2000 в -50 .. +50 например. Сигнал скоростного канала V, аналогично в 0..200 к примеру. И тупо выставляете через analodWrite() скорости обоих моторов:

Левый скажем V-dV, а правый V+dV .. или наоборот, смотря куда надо вертеться отрицательным и положительным рассогласованием.

Прерывание можно повесить и одно на канал и уже в нем смотреть куда выставился пин прерывания через digitalRead(). Только лучше использовать прямой доступ к портам. Как вариант, можно читать длительность импульса по прерыванию "Захват таймера" Т1, но у НАНО, УНО .. он такой одын. :(

Ну и как-то стоит подумать "о дребезге" и ложных срабатываниях. Когда пробовал получить от р/у (детский экскаватор на 6-и канальном аналоге китайского р/у типа RX2/TX2) был слегка поражен сложностью кода в радиоканале (128 битная посылка кажется, давно уже плохо помню) и .. кривизной детектированного результата в приемнике на конкретных каналах. Там "итого" выдается как сигнал непосредственно на мосфеты мостовых драйверов моторов. Ну .. эти, типовые машинки на 27, 36, 40Мгц и дальностью 10-50м, "как настроишь". :)

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

qwone пишет:

ua6em пишет:
почему не подошло )))хочется разнообразия...
Я скуке преподчла движенье! Пошла искать на жопу приключенья


ЕвгенийП по просьбе сделал хорошую библиотеку -TimeMeasure.h, но она к сожалению заточена для измерения только по одному каналу, делал небольшую автоматизацию приятелю для сброса снасти и прикормки для прикормочного кораблика, работает как автомат Калашникова...
Попробую сделать на micros() и так как выше и иначе и сличить насколько большой разброс в измерении интервалов

Кстати, сделал и второй вариант, с чаржем, код на 200 байт получился больше, данные ШИМ измеряет несколько иные, сейчас залью мой образцовый скетч, сравню )))
 

   volatile unsigned int rc1_data = 1500;
    volatile unsigned int rc2_data = 1500;
    volatile unsigned int rc3_data = 1500;
    volatile unsigned long start_timeRC1 = 0;
    volatile unsigned long start_timeRC2 = 0;
    volatile byte flag_RC1 = 0;
    volatile byte flag_RC2 = 0;

    
    void setup() {
    Serial.begin(115200);
    // Привязываем к Pin2 прерывание по фронту сигнала
    attachInterrupt(0, Rc1, CHANGE);
    // Привязываем к Pin3 прерывание по фронту сигнала
     attachInterrupt(1, Rc2, CHANGE);
    }

    void loop() {
       Serial.println(rc1_data);
       Serial.println(rc2_data);
    }

/******Обработчик прерывания на возрастание сигнала ******/
    void Rc1() {
    if(digitalRead(2) == HIGH && flag_RC1==0){
     //сохраняем значение времени начала импульса
    start_timeRC1 = micros();
    flag_RC1=1;
    }
    if(digitalRead(2) == LOW && flag_RC1==1){
    //сохраняем значение длительности импульса
    rc1_data = micros() - start_timeRC1; 
    flag_RC1=0; 
    }}
    
 void Rc2() {
    if(digitalRead(3) == HIGH && flag_RC2==0){
     //сохраняем значение времени начала импульса
    start_timeRC2 = micros();
    flag_RC2=1;
    }
    if(digitalRead(3) == LOW && flag_RC2==1){
    //сохраняем значение длительности импульса
    rc2_data = micros() - start_timeRC2; 
    flag_RC2=0; 
    }}

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Кстати, я замечал, что иногда стоит дать немного delayMicroseconds() в начале хендлера по CHANGE, иначе читается не то. Скорее всего из-за дребезга, конечно, однако имейте в виду.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

sadman41 пишет:

Кстати, я замечал, что иногда стоит дать немного delayMicroseconds() в начале хендлера по CHANGE, иначе читается не то. Скорее всего из-за дребезга, конечно, однако имейте в виду.

так от дребезга пытаюсь уйти, "флаги над башней" повесил )))
а вот в первом скетче с дребезгом непонятно что

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

А почему не так

/**/
volatile unsigned long timeRC1 = 0;
volatile unsigned long timeRC2 = 0;
void Rc1() {
  static unsigned long time;
  /*небольшая пауза надо*/
  if (digitalRead(2))
    time = micros();
  else timeRC1 = micros() - time;
}
void Rc2() {
  static unsigned long time;
  /*небольшая пауза надо*/
  if (digitalRead(3))
    time = micros();
  else timeRC2 = micros() - time;
}
//-----------------------------------------
void setup() {
  Serial.begin(115200);
  attachInterrupt(0, Rc1, CHANGE);
  attachInterrupt(1, Rc2, CHANGE);
}

void loop() {
  delay(500);
  Serial.println(rc1_data);
  Serial.println(rc2_data);
}

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

qwone пишет:

А почему не так

/**/
volatile unsigned long timeRC1 = 0;
volatile unsigned long timeRC2 = 0;
void Rc1() {
  static unsigned long time;
  /*небольшая пауза надо*/
  if (digitalRead(2))
    time = micros();
  else timeRC1 = micros() - time;
}
void Rc2() {
  static unsigned long time;
  /*небольшая пауза надо*/
  if (digitalRead(3))
    time = micros();
  else timeRC2 = micros() - time;
}
//-----------------------------------------
void setup() {
  Serial.begin(115200);
  attachInterrupt(0, Rc1, CHANGE);
  attachInterrupt(1, Rc2, CHANGE);
}

void loop() {
  delay(500);
  Serial.println(rc1_data);
  Serial.println(rc2_data);
}

 

ага! Такое впечатление, что мне за количество строк платили )))
На самом деле не смотрел осциллографом, что с приёмника прилетает...

Открыл тему в проектах...а всё из-за того, что перерыв весь интернет так и не нашёл реализацию
подобной задачи на аппаратуре с PWM управлением, к примеру FlySky, всё на каких-то огрызках...

В раздумьях, добавил реверс в скетч, не будет ли сквозняка, скетч в теме проекты

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Arhat109-2 пишет:

ua6em, ну в общем-то да, придется миксировать. Это делается относительно просто: по каналу скорости принимаете СРЕДНЮЮ скорость обоих моторов от 0 до MAX, а по каналу управления принимаете рассогласование моторов dV, и тупо вычитаете рассогласование из левого и добавляете в правый.

Сигнал рассогласования в виде ШИМ от приемника перекодируете, map() в помощь, с 1000 до 2000 в -50 .. +50 например. Сигнал скоростного канала V, аналогично в 0..200 к примеру. И тупо выставляете через analodWrite() скорости обоих моторов:

Левый скажем V-dV, а правый V+dV .. или наоборот, смотря куда надо вертеться отрицательным и положительным рассогласованием.

получилось весьма вялое управление

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

В чем "вялость" проявляется? И какой применен драйвер мотора к этим "желтым мотор-редукторам" (передаточное 48:1, как понимаю), моторы в них кстати - очень даже нехилые, если на 6в. Какое питание, управление 2-я или 4-я моторами? Вы вроде бы писали про 4-х колесную тележку .. разворот - "танковый" или на рулевых стоит серва?

Поделитесь полностью, что там в итоге у Вас оказалось "вяло"?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Arhat109-2 пишет:

В чем "вялость" проявляется? И какой применен драйвер мотора к этим "желтым мотор-редукторам" (передаточное 48:1, как понимаю), моторы в них кстати - очень даже нехилые, если на 6в. Какое питание, управление 2-я или 4-я моторами? Вы вроде бы писали про 4-х колесную тележку .. разворот - "танковый" или на рулевых стоит серва?

Поделитесь полностью, что там в итоге у Вас оказалось "вяло"?

Драйвер L298N, 4 мотора по два по бортам, параллельно, канал 1 и канал 2, запитываются от 6 элементов ENELOOP 1.2 вольта 1900ма/ч , разворот танковый, проблема именно в значениях ШИМ я так понимаю, алгоритм правильного миксирования канала RC2 (газ) и канала RC1 (руль)
Руль оттриммировал, в среднем положении имеем 0, при крайних -50 и +50, характеристика каналов передатчика по RC - линейная, хотелось бы привести к нормальному ШИМу на приёмной стороне

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

В скетче особых косяков не заметил, просто надо подобрать значения для крайних положений руля. Возможно стоит уйти в минус (обратное направление моторов одной из сторон). Вообще, танковый разворот - весьма энергозатратен, что требует больших значений ШИМ.

Постройте диаграмму (вручную) управления моторами и определите краевые минимальные значения ШИМ моторов, при которых они ещё управляют тележкой:

1. Вариант "вперед/назад": запускаем с разным ШИМ на обоих сторонах (правые и левые) и смотрим с какого минимального ШИМ оно начинает двигаться. Минус 20-25% от него и будет вашим "нулем".

2. В развороте: опять же смотрим как едет тележка, устанавливая разные ШИМ вручную. При такой комплектации низкое значение ШИМ на внутренней стороне ещё совсем не значит что колесо потеряет скорость. Ищите ваши "поворотные" значения. Вполне может оказаться что нормальный поворот только когда внутреннее колесо тормозится обратным ШИМом.

3. Обороты мотора прямо зависят от его нагрузки: чем больше нагрузка - тем ниже обороты. Нагрузка внешнего мотора может быть раза в 2 больше внутреннего и? Подавать ШИМ надо примерно в КВАДРАТИЧНОЙ зависимости, а для скоростных машинок в кубической. Тут этот вопрос как раз много обсуждался, правда больше косвенно. Не мог писать прямо, поскольку сами соревновались. Это то, почему традиционный ПД-регулятор идет "мимо кассы".

Ну и как замечание: L298N и 7.2в для 6-и вольтового мотора - откровенно недостаточно. Токи моторов какие? Лучше замерьте сопротивление якоря мотора. Оно скорее всего в районе 4-6ом. Соответственно пусковой ток мотора под ампер-два. От питающего отнимите 3в на драйвер - это то, что останется для самих моторов. В общем-то не заметно, чтобы получилось не "вяло" :)

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Я бы проще поступил: увеличивал маппинг поворота и тупо ограничивал значения ШИМ, если он выходит "за допустимый диапазон":

1. > 255 или < -255 -- ограничиваем крайние значения.

2. abs(speed) < minPwm -- ставим ноль, такой ШИМ все равно ничего не меняет, но ухудшает показатели в повороте.

и дальше просто добирал в каком диапазоне нужно маппить рулевое управление.

 

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

И аккумуляторы лучше ставить Li-ion с токами от 5А, если у Вас 2 мотора в параллели.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Arhat109-2 пишет:

И аккумуляторы лучше ставить Li-ion с токами от 5А, если у Вас 2 мотора в параллели.


До переделки на литий-ионных панасониках и ездил, 7,2 вольта по три аккумулятора в параллель)))
Был чрезвычайно резвый )))
 

Некит
Offline
Зарегистрирован: 04.03.2020

[quote=Arhat109-2]

Дано:

Робо-тележка о трех колесах. Два передних - ведущие, каждое на своем моторе, и заднее - шаровая опора.

Ширина колеи и шаровая опора примерно составляют равносторонний треугольник, но это скорее всего ни о чем. Впереди от осей ведущих колес, на примерно таком же расстоянии как до шаровой опоры, стоят аналоговые датчики линии.

Ширина линии 30мм. Расстояние промеж датчиков 50мм. - стоят "с запасом".

Максимальная скорость тележки по прямой - 1.5м/сек, то есть 1.5мм за миллисекунду. Соответственно линия "поперек" пересекается на полной скорости за 20мсек.

Ни один "простой алгооритм" - не проходит, потому что сегодня выяснилось что:

1. Поворот на остановленном колесе от момента обнаружения линии датчиком происходит на расстоянии примерно 15см от точки обнаружения линии. То есть колесо "по инерции" (и вся тележка в целом) ещё едут примерно 10см практически прямо, и только потом становится заметным начало поворота.

2. Попытка вращать мотор "взад с макс. скоростью на короткое время": менее 20мсек - не оказывает никакого влияния. Оптимально 50мсек - прямой пробег сокращается до 3-5см. Но, даже за это время тележка проскакивает линию дважды.

3. Предельная скорость замера датчиков = скорость АЦП канала Ардуино, то есть около 15кГц. или 0.06мсек. Время отработки основного цикла, даже сложного, без ожиданий реакции моторов - можно считать "мгновенно".

Вопрос: Каким алгоритмом и/или каким дополнением можно решить задачу движения по линии в условиях сильного запаздывания реакции колес на управляющее воздействие?

Как вариант - постановка датчиков "предсказателей поворотов" с ещё большим выносом вперед .. возможно (есть место, есть датчики), но вызывает проблему чисто "алгоритмическую": как распознать программно, что предсказатель предсказал поворот, а не просто "сбой линии"? В смысле что тележка едет таки по прямой, просто не достаточно ровно и тупо предсказатель зацепился за линию..

В общем, мы уже вдвоем как-то выдохлись, требуется "совет бывалых". :)

Какие используются моторы и датчики?

 

Некит
Offline
Зарегистрирован: 04.03.2020

Какие вы используете моторы и датчики ?

test1
Offline
Зарегистрирован: 06.01.2020

Некит]</p> <p>[quote=Arhat109-2 пишет:

Дано:

Робо-тележка о трех колесах. Два передних - ведущие, каждое на своем моторе, и заднее - шаровая опора.

Ширина колеи и шаровая опора примерно составляют равносторонний треугольник, но это скорее всего ни о чем. Впереди от осей ведущих колес, на примерно таком же расстоянии как до шаровой опоры, стоят аналоговые датчики линии.

Ширина линии 30мм. Расстояние промеж датчиков 50мм. - стоят "с запасом".

Максимальная скорость тележки по прямой - 1.5м/сек, то есть 1.5мм за миллисекунду. Соответственно линия "поперек" пересекается на полной скорости за 20мсек.

Ни один "простой алгооритм" - не проходит, потому что сегодня выяснилось что:

1. Поворот на остановленном колесе от момента обнаружения линии датчиком происходит на расстоянии примерно 15см от точки обнаружения линии. То есть колесо "по инерции" (и вся тележка в целом) ещё едут примерно 10см практически прямо, и только потом становится заметным начало поворота.

2. Попытка вращать мотор "взад с макс. скоростью на короткое время": менее 20мсек - не оказывает никакого влияния. Оптимально 50мсек - прямой пробег сокращается до 3-5см. Но, даже за это время тележка проскакивает линию дважды.

3. Предельная скорость замера датчиков = скорость АЦП канала Ардуино, то есть около 15кГц. или 0.06мсек. Время отработки основного цикла, даже сложного, без ожиданий реакции моторов - можно считать "мгновенно".

Вопрос: Каким алгоритмом и/или каким дополнением можно решить задачу движения по линии в условиях сильного запаздывания реакции колес на управляющее воздействие?

Как вариант - постановка датчиков "предсказателей поворотов" с ещё большим выносом вперед .. возможно (есть место, есть датчики), но вызывает проблему чисто "алгоритмическую": как распознать программно, что предсказатель предсказал поворот, а не просто "сбой линии"? В смысле что тележка едет таки по прямой, просто не достаточно ровно и тупо предсказатель зацепился за линию..

В общем, мы уже вдвоем как-то выдохлись, требуется "совет бывалых". :)

Какие используются моторы и датчики?

 

Вангую, что этот автор тут забанен. Рекомендую обратится к нему на сайте Алекс Гайвера. Тут Вам отвечать некому скорее всего. community.alexgyver.ru кажется так.