roboforum.ru

Технический форум по робототехнике.

Охотник

Re: Охотник

Кирилл Дмитриенко » 27 окт 2012, 22:20

мои 5 коп. :) : ПИД насколько я понимаю далеко не самый лучший способ "авторегулирования". Он не учитывает ускорения и интегральная составляющая - увеличивает ошибку (если сравнивать с гипотетической истинной невязкой). В болшинстве случаев правильнее вместо интегральной составляющей считать распределение невязки и добавить анализ ускорения.

... но, это все теория :cry: , а на практике в эти уравнения, если строить мат.модель системы, надо добавить еще не один десяток параметров описывающих работу сервов, разного рода задержки и тому подобное :D

Re: Охотник

Dmitry__ » 28 окт 2012, 00:11

В том и дело, что советующие "спецы" слабо себе представляют, что есть ПИД.
Интеграл вообще отключают при больших рассогласованиях, ибо в таких случаях накапливается ошибка, которую потом надо утилизировать. Какая наф скорость от такого ПИ? :)
И "мутирующий ПИД" - нормальный регулятор не времен разработки ПИДа на одной лампе, максимум двойного тетрода.
Смысла спорить - не вижу, ичицо, учицо и еше раз учицо... :pardon:
Алисам - чудеса, про блокировку интеграла:
http://logic-bratsk.ru/radio/pid/st12/st12_r.htm

Re: Охотник

dccharacter » 28 окт 2012, 09:52

Ты как всегда очень помог. Все сразу все поняли и стали делать "как надо"

Re: Охотник

Dmitry__ » 28 окт 2012, 12:35

Ты не подумай, что я вредничаю, уж очень хочется увидеть "развернутый ответ по ПИД для турелей" :roll:
И я не узрел, чтоб ты советовал PID, Спрашивал -да, советовал - нет.
Я бы делал так:
Запускаем турель, замеряем сколько времени надо для набора макс. скорости.
Даем команду стоп, засекаем на сколько повернется турель. Число запоминаем :)
Ффсе.
При вращении турели, если набрана макс. скорость, вычитаем это число из обратной связи.
Для других значений скорости вращения находим свои числа (например 5 точек, интерполяция)
Шибко умные могут сделать обсчет плавно...
Щаз скажут, что это классический ПД регулятор. :)

Re: Охотник

legion » 28 окт 2012, 12:52

А для разных направлений вращения это число точно одинаковым будет?

Re: Охотник

Кирилл Дмитриенко » 28 окт 2012, 13:02

​... понятно что, диф. часть в пид - это своего рода прогнозирование на основе скорости. Это самое прогнозирование можно делать самыми разными способами (правда это уже будет не ПИД, если строго придерживаться терминологии :D )

В том числе прогнозировать можно и так, как написал Дмитрий, а можно выпендриться и наворотить обучающуюся систему прогнозирования и еще много-много вариантов :D

Фильтрацию можно подобрать перебором наиболее часто применяемых фильтров, подойдет очевидно тот, что будет ближе всего к физике процесса.

Ну это я так, мысли вслух, масло масляное :D так сказать :D

Re: Охотник

dccharacter » 28 окт 2012, 13:07

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

Re: Охотник

Nesenin » 30 окт 2012, 15:57

вот пулеметы для гороха http://topwar.ru/2365-metateli-pul.html
последний вариант сейчас применяется на всех автоподатчиках шаров (тенис,футбол и пр). но у него шибко малый путь разгона.
надо первый вариант опробовать
Изображение

Re: Охотник

рома316 » 30 окт 2012, 19:16

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

Re: Охотник

robovan » 31 окт 2012, 11:46

ну когда уже будет готофф прототип пушки, нетерпится увидеть в деле:-)

Добавлено спустя 1 минуту 48 секунд:
насчет метателя, лучше использовать конструкцию с двумя валиками. она проще имхо

Re: Охотник

Nesenin » 31 окт 2012, 18:10

могу показать тока гаус пушку в деле


Добавлено спустя 3 минуты 14 секунд:
если мишень не крепить, пуля ничего не пробивает.
ствол при выстреле уходит вверх. внизу видно как лазер скачет (я не настраивал прицел).
в некоторых случаях пуля не летит прямо (острием вперед), а вращается как хочет. печалька.
PS печенька была очень сухой и прочной ))

Re: Охотник

Angel71 » 31 окт 2012, 19:52

какая пулька просто стержень, так и летит.

Re: Охотник

robovan » 01 ноя 2012, 01:10

убивца милых печенюх:-(

Re: Охотник

Nesenin » 03 ноя 2012, 10:37

наконец то набрался желания перенести расчет времени вкл. двигателей на ардуино. благо есть функция millis()
Код: Выделить всёРазвернуть
 unsigned long previousMillis = 0;     
unsigned long currentMillis = 0;
boolean running1 = false;
boolean running2 = false;
    byte interval_1 = 30;
    byte interval_2 = 30;
int charg = 4; 
boolean lastchart = false;


void setup() {               
  Serial.begin(128000);
  Serial.println("TURRET ON");
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, INPUT);  // сигнал заряда на входе 4
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);

}

void loop()
{ //контроль вкл зарядки
  if (digitalRead(charg) == HIGH && lastchart == false)
  {   lastchart = true;
      Serial.println("chart on");   }
  //контроль выклл зарядки
    if (digitalRead(charg) == LOW && lastchart == true)
  {   lastchart = false;
      Serial.println("chart off");   }
 
  if(Serial.available() > 8)
  {
    byte a,b,c,d,e,f,g,h,i;  // принимаем байты и разбиваем их
    a = Serial.read();  // питание турели
    b = Serial.read();  // лево-1 \ право-0
    c = Serial.read();  // шим л\п
    d = Serial.read();  // время л\п
    e = Serial.read();  // верх-1 \ низ-0
    f = Serial.read();  // шим в\н
    g = Serial.read();   // время в\н
    h = Serial.read();   //выстрел
    i = Serial.read();   //лазер
   
      interval_1 = d; //запоминаем длительность вкл л\п
      interval_2 = g; //запоминаем длительность вкл в\н
      previousMillis = millis();// запоминаем время
     
      if(interval_1 == 0)
      running1 = false;
        else
      running1 = true; //устанавливаем флаг л\п
     
        if(interval_2 == 0)
      running2 = false;
        else
      running2 = true; //устанавливаем флаг в\н
     
  //вкл выкл
    if(a == 1)
    {    digitalWrite(2, HIGH);   Serial.println("power on");  }
    if(a == 0)
    {    digitalWrite(2, LOW);   Serial.println("power off"); }
  //выстрел
    if(h == 1)
    {    digitalWrite(3, HIGH);  Serial.println("shot on");  }
    if(h == 0)
    {    digitalWrite(3, LOW);  Serial.println("shot off");  }
  //лазер
    if(i == 1)
    {    digitalWrite(7, HIGH);  Serial.println("laser on");  }
    if(i == 0)
    {    digitalWrite(7, LOW);  Serial.println("laser off");  }
        //влево
    if(b == 1)
    {   analogWrite(6, 0);
        analogWrite(5, c);   Serial.print("left ");Serial.println(c);  }
       //вправо
    if(b == 0)
    {   analogWrite(5, 0);
        analogWrite(6, c);   Serial.print("right ");Serial.println(c);  }
        //верх
    if(e == 1)
    {   analogWrite(11, 0);
        analogWrite(10, f);   Serial.print("up "); Serial.println(f); }   
        //вниз
    if(e == 0)
    {   analogWrite(10, 0);
        analogWrite(11, f);   Serial.print("down "); Serial.println(f); }
       
Serial.flush();
  }
 
     if (running1 == true)
   { 
     currentMillis = millis();
      if(currentMillis - previousMillis > interval_1)
     {
        analogWrite(6, 0);
        analogWrite(5, 0);
        running1 = false;
        Serial.println("time off 1");
     }

   }
   
      if (running2 == true)
   { 
     currentMillis = millis();
      if(currentMillis - previousMillis > interval_2)
     {
        analogWrite(10, 0);
        analogWrite(11, 0);
        running2 = false;
        Serial.println("time off 2");
     }

   }
 
 
}

число байт выросло до 9. хотел по началу оставить 7,но потом прикинул сколько гемороя будет на стороне labview (вплоть до очереди команд с проверкой пропуска) и забил. разницы все равно не видно.
А вот что действительно заметно, так это появившееся "машинная" точность времени вкл. Минимальное время вкл теперь вплоть до 1мс (+ШИМ). минимальный угол поворота турели снизился (предельная точность наведения повысилась). При значении задержки "0", управление идет как было до этого (крутим до поступления команды на выкл). Теперь в ПО Labview код существенно упростится. Если раньше я извращался вкл\выкл с компа с минимальным доступным промежутком (5мс и как оказалось ужасно скачет), то теперь после обработки кадра, будет отправляться одна команда с вкл. двигателя или без ограничения времени (до обработки следующего кадра) или на заданное время.

Re: Охотник

robovan » 04 ноя 2012, 17:41

аж в глазах зарябило:-(

Добавлено спустя 47 секунд:
а турель плпнируешь оставить на той моделе?


Rambler\'s Top100 Mail.ru counter