Охотник

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

Re: Охотник

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

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

... но, это все теория :cry: , а на практике в эти уравнения, если строить мат.модель системы, надо добавить еще не один десяток параметров описывающих работу сервов, разного рода задержки и тому подобное :D
Оружие не должно быть умнее хозяина.
Аватара пользователя
Кирилл Дмитриенко
 
Сообщения: 221
Зарегистрирован: 12 окт 2012, 01:32

Re: Охотник

Сообщение Dmitry__ » 28 окт 2012, 00:11

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

Re: Охотник

Сообщение dccharacter » 28 окт 2012, 09:52

Ты как всегда очень помог. Все сразу все поняли и стали делать "как надо"
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
Аватара пользователя
dccharacter
 
Сообщения: 4995
Зарегистрирован: 10 дек 2010, 13:16
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей

Re: Охотник

Сообщение Dmitry__ » 28 окт 2012, 12:35

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

Re: Охотник

Сообщение legion » 28 окт 2012, 12:52

А для разных направлений вращения это число точно одинаковым будет?
legion
 
Сообщения: 736
Зарегистрирован: 24 апр 2010, 14:47
Откуда: Уфа
прог. языки: avr asm

Re: Охотник

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

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

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

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

Ну это я так, мысли вслух, масло масляное :D так сказать :D
Оружие не должно быть умнее хозяина.
Аватара пользователя
Кирилл Дмитриенко
 
Сообщения: 221
Зарегистрирован: 12 окт 2012, 01:32

Re: Охотник

Сообщение dccharacter » 28 окт 2012, 13:07

диф - это реактивная часть. реагирует на резкие всплески-отклонения. пока резких отклонений нет, сидит и не выеживается, как только появился всплеск - дает сильный импульс, обратный по знаку, гасящий всплеск.
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
Аватара пользователя
dccharacter
 
Сообщения: 4995
Зарегистрирован: 10 дек 2010, 13:16
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей

Re: Охотник

Сообщение Nesenin » 30 окт 2012, 15:57

вот пулеметы для гороха http://topwar.ru/2365-metateli-pul.html
последний вариант сейчас применяется на всех автоподатчиках шаров (тенис,футбол и пр). но у него шибко малый путь разгона.
надо первый вариант опробовать
Изображение
Аватара пользователя
Nesenin
 
Сообщения: 1341
Зарегистрирован: 26 янв 2012, 03:59
Откуда: Казань
прог. языки: LabVIEW
ФИО: Никита Есенин

Re: Охотник

Сообщение рома316 » 30 окт 2012, 19:16

решил создать машинку по типу вашей, только ни для того чтобы мочить кошек, а просто для езды по бездорожью :oops: ) масштаб правда побольше, привод задний))ыыыыы 8) позже создам отдельную тему, загляните :)
рома316
 
Сообщения: 372
Зарегистрирован: 14 июл 2012, 04:15
Откуда: ишим (тюменская область)
ФИО: Роман Артемович

Re: Охотник

Сообщение robovan » 31 окт 2012, 11:46

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

Добавлено спустя 1 минуту 48 секунд:
насчет метателя, лучше использовать конструкцию с двумя валиками. она проще имхо
Самое важное в жизни- найти человека , который смотрит на мир, так же как и ты:)
Аватара пользователя
robovan
 
Сообщения: 1536
Зарегистрирован: 04 сен 2012, 00:39
Откуда: Украина
ФИО: Владимир

Re: Охотник

Сообщение Nesenin » 31 окт 2012, 18:10

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


Добавлено спустя 3 минуты 14 секунд:
если мишень не крепить, пуля ничего не пробивает.
ствол при выстреле уходит вверх. внизу видно как лазер скачет (я не настраивал прицел).
в некоторых случаях пуля не летит прямо (острием вперед), а вращается как хочет. печалька.
PS печенька была очень сухой и прочной ))
Аватара пользователя
Nesenin
 
Сообщения: 1341
Зарегистрирован: 26 янв 2012, 03:59
Откуда: Казань
прог. языки: LabVIEW
ФИО: Никита Есенин

Re: Охотник

Сообщение Angel71 » 31 окт 2012, 19:52

какая пулька просто стержень, так и летит.
Аватара пользователя
Angel71
 
Сообщения: 10668
Зарегистрирован: 18 апр 2009, 22:18

Re: Охотник

Сообщение robovan » 01 ноя 2012, 01:10

убивца милых печенюх:-(
Самое важное в жизни- найти человека , который смотрит на мир, так же как и ты:)
Аватара пользователя
robovan
 
Сообщения: 1536
Зарегистрирован: 04 сен 2012, 00:39
Откуда: Украина
ФИО: Владимир

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мс и как оказалось ужасно скачет), то теперь после обработки кадра, будет отправляться одна команда с вкл. двигателя или без ограничения времени (до обработки следующего кадра) или на заданное время.
Аватара пользователя
Nesenin
 
Сообщения: 1341
Зарегистрирован: 26 янв 2012, 03:59
Откуда: Казань
прог. языки: LabVIEW
ФИО: Никита Есенин

Re: Охотник

Сообщение robovan » 04 ноя 2012, 17:41

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

Добавлено спустя 47 секунд:
а турель плпнируешь оставить на той моделе?
Самое важное в жизни- найти человека , который смотрит на мир, так же как и ты:)
Аватара пользователя
robovan
 
Сообщения: 1536
Зарегистрирован: 04 сен 2012, 00:39
Откуда: Украина
ФИО: Владимир

Пред.След.

Вернуться в Идеи

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8