MAL4X Научно-технический форум разработчиков симуляторов и автоматики


Симуляторы перегрузок. DIY электроника. ЭВМ. Компьютерные сети.
Up

Данные: что передавать и как регулировать

Строим реалистичный симулятор перегрузок своими руками. Рекомендации. Советы.

Модераторы: Death_Morozz, null, Ale

Данные: что передавать и как регулировать

Сообщение admin » 17 ноя 2012, 14:10

-
Аватара пользователя
admin
Администратор
 
Сообщения: 210
Зарегистрирован: 10 июн 2012, 21:50
Откуда: Елизово
Благодарил (а): 22 раз.
Поблагодарили: 9 раз.
Баллы репутации: 35
Пользователь

Сообщение kuzevan » 21 ноя 2012, 12:42

При создании этого проекта использовалось следующее оборудование:
Arduino Uno,
Двойной драйвер двигателя Pololu http://pololu.com/catalog/product/707
,
Блок питания SP-480-12, который я собираюсь заменить на http://aliexpress.com/item/F...t/597489887.html
.
Двигатель стеклоочистителя от Газели (сима у меня пока нет). Подключены желтый и черный провода.
Платформа Arduino была выбрана по причине криворукости и лени. Симостроители ее избегают по причине нестабильной работы COM на скорости 115200. Действительно, таблица в http://x-sim.de/forum/viewto...ino+250000#p3340
говорит о том, что там 2.1% процента ошибок, но я подумал, что я не космическими аппаратами собираюсь управлять.
Идеальный контроллер должен работать по простой формуле, знакомой с детства:
S=S0+V0*t +A*t*t/2
То есть, контроллер получает из управляющей программы следующую координату S. Допустим, он знает свое положение S0 (прочел потенциометр), и скорость, в которой находится V0. Приняв период времени (33мс) за единицу, получим:
A=2*((S-S0)-V0)
Вот такое ускорение надо придать мотору, чтобы он оказался в нужное время в нужном месте. Скорость в этот момент должна быть V0+A, это будет новым значением V0 для следующего цикла.
Стоит вопрос о том, какой ШИМ надо подать на двигатель, чтобы получить это ускорение. И здесь уже надо гонять конкретный двигатель. Я погонял. Выяснилось, что за свои пол-оборота он никогда не достигает номинальной скорости, а работает в режиме разгон-торможение. Весьма приблизительно данные были аппроксимированы. Получилось следующее:
Есть две фазы. Разгон – это когда направление вращения совпадает с силой и торможение, когда они противоположны. Я принял линейную аппроксимацию зависимости ускорения от ШИМа, хотя это не совсем так. Для моего двигателя (без нагрузки):
Для ускорения: ШИМ=57*A+42 .
Для торможения ШИМ=57*A/2+42.
Но это все теория, на практике из-за несовершенства двигателя и модели, динамической нагрузки это правильно работать не будет.
На сегодня все, в следующие разы программа для Ардуино для измерения параметров двигателя и программа для сима.
Аватара пользователя
kuzevan
Парторг
 
Сообщения: 60
Зарегистрирован: 25 окт 2011, 17:17
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Баллы репутации: -6

Сообщение Ale » 21 ноя 2012, 12:51

kuzevan писал(а):Платформа Arduino была выбрана по причине криворукости и лени. Симостроители ее избегают по причине нестабильной работы COM на скорости 115200. Действительно, таблица в http://x-sim.de/forum/viewto...ino+250000#p3340
говорит о том, что там 2.1% процента ошибок, но я подумал, что я не космическими аппаратами собираюсь управлять.

Ага, это я там засветился Изображение
Проблема со скоростью 115200 актуальна только для старого софта x-sim2. Буквально пару недель назад SirNoName по моей настоятельной просьбе включил в x-sim3 поддержку нестандартных скоростей, которые совершенно спокойно устанавливаются при использовании FTDI чипов.
Так что arduino теперь тоже рулят, для них можно вполне ставить скорость COM - порта = 250000 бод и работать без всяких ошибок. Кстати, в нашем софте эта фича со скоростями была с самого начала
Аватара пользователя
Ale
Разработчик
 
Сообщения: 1438
Зарегистрирован: 01 фев 2011, 20:48
Откуда: Дубна
Благодарил (а): 541 раз.
Поблагодарили: 572 раз.
Баллы репутации: 277
ТехнарьТехнарьТехнарь

Сообщение Ale » 21 ноя 2012, 14:18

kuzevan писал(а):Конечно, надо бы помощней и порезвей. А что ты предлагаешь?

Я бы себе вот такую штуку прикупил бы
Штука

А вообще тут уже в который раз заводят разговор о шаговиках. Я начинаю смотреть, что это за звери такие
Аватара пользователя
Ale
Разработчик
 
Сообщения: 1438
Зарегистрирован: 01 фев 2011, 20:48
Откуда: Дубна
Благодарил (а): 541 раз.
Поблагодарили: 572 раз.
Баллы репутации: 277
ТехнарьТехнарьТехнарь

Сообщение taran_ob » 21 ноя 2012, 16:55

kuzevan писал(а):Вот такое ускорение надо придать мотору, чтобы он оказался в нужное время в нужном месте.



Это не возможно, потому что новую координату мы получаем уже тогда когда когда должны быть там. То есть всегда есть какое то рассогласование позиции, а от мощности мотора и инерционности зависит величина этого рассогласования. Контроллер должен уметь это рассогласование поддерживать минимальным - выступать в качестве регулятора. Самый простой вариант это пропорциональный регулятор. В единичный момент времени проводится расчет рассогласования (ошибки) положения и умножается на некий коэффициент (Кp) в результате получаем величину воздействия на систему необходимую для достижения минимального рассогласования. Превышение коэффициентом определенного значения приводит к перерегулированию которое может быть полезным в случае движения в одном направлении-уменьшается рассогласование в следующем шаге, а в случае реверса - увеличивается.
К скорости вообще нет смысла привязываться, так как для сима величина бесполезная. Важны положение в пространстве (наклон) - статические ощущения, ускорение - для ощущения динамики и ,я думаю, третья производная координаты, возникающая из-за люфта в шарнирах, неоднозначного момента инерции, вызывающая дискомфорт - тошноту, головокружение.
С положением в пространстве проблем нет - обратная связь по датчикам. С ускорением в принципе тоже, при условии что момент инерции и масса константы. А вот третья производная ни как пока не оценивается.
В идеале регулятор (контроллер) должен на выходе выдавать такое значение воздействия чтобы:
1 рассогласование было минимальным и не зависело от момента инерции
2 третья производная координаты (скорость ускорения, толчек) не превышала определенного значения.

(Добавление)
Рассогласование. В случае кинотеатра - картинку пускаем чуть позже, тем самым уменьшаем рассогласование. А в симе? Думаю к П регулятору нужно добавить интегральную составляющую. ПИ регулятор быстрей чем П. Интегральная составляющая, как бы оценивает тенденцию изменения ошибки, "предугадывает" положение в следующем шаге. Величина этого "предугодания" коэффициент Ki.
Не зависимость от момента инерции. Настраиваем сим на максимальную допустимую нагрузку без перерегулирования. А дальше как то оценивать перерегулирование которое может возникнуть при изменении нагрузки и вносить поправку в Kp(Ki) ???
Третья производная. В каждом шаге рассчитывать и если меньше(больше) заданного значения, то уменьшать (увеличивать) воздействие. Как рассчитать. В памяти держать последние 3 координаты и с учетом заданной (4 координаты) считать изменение ускорения. Но тут лажа со сменой направления. Считать как то по модулю???

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

ПС я везде так много говорю - болтун я, вы скажите если что...
taran_ob
Комсорг
 
Сообщения: 137
Зарегистрирован: 27 окт 2012, 22:05
Откуда: Ukraine
Благодарил (а): 5 раз.
Поблагодарили: 11 раз.
Баллы репутации: 19
Новичок

Сообщение kuzevan » 21 ноя 2012, 20:44

Действительно, координату получаем, когда она уже должна быть отработана. Но другой у нас нет. Выходом может быть предсказание будущей координаты по текущей координате и скорости и стремление к ней. Потом попробую.
Пропорциональные и прочие ПИД регуляторы прёдназначены совсем для других целей - достичь нужной позиции и остановиться там. Наша задача совсем другая - достичь цели с нужной скоростью. Для обеспечения непрерывности движения.
Насчет ощущений ты не прав. Мы чувствуем не положение, а силы, то есть ускорения. И для этого управление по законам динамики идеально.
Аватара пользователя
kuzevan
Парторг
 
Сообщения: 60
Зарегистрирован: 25 окт 2011, 17:17
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Баллы репутации: -6

Сообщение Ale » 21 ноя 2012, 20:52

Хорошо, что вы нашли друг друга. Изображение
taran_ob писал(а):я везде так много говорю - болтун я, вы скажите если что...

В нашем случае - лучше говорить, чем молчать. Я с обоими согласен. В том плане - что меня не устраивает "традиционная" схема регулирования. Изображение У меня тоже есть свой взгляд на эту тему, но он еще не сформулировался...
Аватара пользователя
Ale
Разработчик
 
Сообщения: 1438
Зарегистрирован: 01 фев 2011, 20:48
Откуда: Дубна
Благодарил (а): 541 раз.
Поблагодарили: 572 раз.
Баллы репутации: 277
ТехнарьТехнарьТехнарь

Сообщение kuzevan » 21 ноя 2012, 21:31

Про болтуна пишет не kuzevan.
Аватара пользователя
kuzevan
Парторг
 
Сообщения: 60
Зарегистрирован: 25 окт 2011, 17:17
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Баллы репутации: -6

Сообщение taran_ob » 21 ноя 2012, 22:09

kuzevan писал(а):Выходом может быть предсказание будущей координаты по текущей координате и скорости

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

kuzevan писал(а):Пропорциональные и прочие ПИД регуляторы прёдназначены совсем для других целей - достичь нужной позиции и остановиться там.

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

kuzevan писал(а):Наша задача совсем другая - достичь цели с нужной скоростью.

Абсолютно не противоречит сказанному выше, но акцент не нужно делать на скорости. Нам нужно быть там где говорит игра. Я сказал
taran_ob писал(а):1 рассогласование было минимальным и
, расшифрую - оказаться в заданной точке как можно быстрее. Ведь если мы стремимся к минимальному рассогласованию, скорость стремится к 0. Если мы уже находимся у цели скорость должна быть 0!

kuzevan писал(а):Насчет ощущений ты не прав. Мы чувствуем не положение, а силы, то есть ускорения. И для этого управление по законам динамики идеально.

Не понял в чем я не прав. Я сказал что важны ускорение для ощущения динамики и положение в пространстве - если мы на вираже сидим под углом это же интересно. По этом в симе нужно двигать жопу, ведь центр масс практически там. А чтоб не насиловать вестибулярный аппарат нужно контролировать третью производную.
А о скорости в симе говорить нет смысла так как величина не ощутимая.



taran_ob
Комсорг
 
Сообщения: 137
Зарегистрирован: 27 окт 2012, 22:05
Откуда: Ukraine
Благодарил (а): 5 раз.
Поблагодарили: 11 раз.
Баллы репутации: 19
Новичок

Сообщение Ale » 21 ноя 2012, 22:27

kuzevan писал(а):Про болтуна пишет не kuzevan.

Извини, уже поправил
taran_ob писал(а):Нам нужно быть там где говорит игра. Я сказал

Забыл добавить в начале фразы "Хау" Изображение Насколько я помню, настоящие индейцы именно так выражаются Изображение

taran_ob писал(а):оказаться в заданной точке как можно быстрее.

Позволю себе не согласиться. Не надо оказываться в заданной точке как можно быстрее. Нужно в ней оказаться к нужному моменту времени...

kuzevan писал(а):Наша задача совсем другая - достичь цели с нужной скоростью. Для обеспечения непрерывности движения.

вот-вот-вот. И я того же мнения.

kuzevan писал(а):Действительно, координату получаем, когда она уже должна быть отработана. Но другой у нас нет. Выходом может быть предсказание будущей координаты по текущей координате и скорости и стремление к ней.

Предлагаю упростить задачу. Давайте к моменту прихода новой координаты достигнем предыдущей. Тогда мы сможем полностью повторить огибающую (профиль дороги!?!) из игры с задержкой всего в ОДИН период передачи данных. При периоде передачи = 10 мс мы будем отрабатывать данные из игры с задержкой 10мс. Что-то не подсказывает, что это совсем несущественная величина.

Я предлагаю следующую схему - при получении новой координаты рассчитывать скорость перемещения = (X(n) - X(n-1)) /T и заставлять двигатель перемещаться к новому заданию с заданной скоростью.

Таким образом нужен регулятор, позволяющий двигать ось с ЗАДАННОЙ скоростью. В не зависимости от НАГРУЗКИ на ось. Что-то мне подсказывает, что идеальным решением для данной задачи как раз будет уже предлагаемый тут драйвер STEP/DIR вместе с шаговым движком.
Аватара пользователя
Ale
Разработчик
 
Сообщения: 1438
Зарегистрирован: 01 фев 2011, 20:48
Откуда: Дубна
Благодарил (а): 541 раз.
Поблагодарили: 572 раз.
Баллы репутации: 277
ТехнарьТехнарьТехнарь

Сообщение taran_ob » 21 ноя 2012, 22:38

Ale писал(а):Позволю себе не согласиться. Не надо оказываться в заданной точке как можно быстрее. Нужно в ней оказаться к нужному моменту времени...

Как это, к какому моменту? Ведь игра не знает наперед о наших действиях! В момент получения координаты мы уже опоздали!
taran_ob
Комсорг
 
Сообщения: 137
Зарегистрирован: 27 окт 2012, 22:05
Откуда: Ukraine
Благодарил (а): 5 раз.
Поблагодарили: 11 раз.
Баллы репутации: 19
Новичок

Сообщение Ale » 21 ноя 2012, 22:56

taran_ob писал(а):Как это, к какому моменту? Ведь игра не знает наперед о наших действиях! В момент получения координаты мы уже опоздали!

Так я и предлагаю не забегать на перед. А отстать от игры на один период. Т.е. получить позицию, рассчитать скорость (исходя, естественно, из более менне постоянного периода передачи) и ехать к этой точке, что бы к МОМЕНТУ прихода следующей координаты как раз достичь предыдущей
Аватара пользователя
Ale
Разработчик
 
Сообщения: 1438
Зарегистрирован: 01 фев 2011, 20:48
Откуда: Дубна
Благодарил (а): 541 раз.
Поблагодарили: 572 раз.
Баллы репутации: 277
ТехнарьТехнарьТехнарь

Сообщение kuzevan » 21 ноя 2012, 22:59

Двигателем не удается управлять по скорости. Мы не умеем ее задавать и измерять.
Шаговик для этого бы подошел, но я не уверен, что он потянет эти частоты. И вообще, мне кажется, шаговый двигатель - тупиковый вариант.
Аватара пользователя
kuzevan
Парторг
 
Сообщения: 60
Зарегистрирован: 25 окт 2011, 17:17
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Баллы репутации: -6

Сообщение CraCk » 21 ноя 2012, 23:19

Парни привет!!!
Никого цитировать не буду, нет смысла.
Только скажу что все зависит от мощности двигателей. Если двигатель фуфло он и в Африке фуфло. Если движок не может переместить большой вес относительно своей мощности, тогда вы нечего с этим не поделаете. Если решите проблему с настройкой МК тогда вылезут проблемы с реакцией симулятора. Получается замкнутый круг.
Если вам нужно дешевый вариант и качество обработки в первую очередь обратите внимание на крутной момент двигателя и правильное размещение центра равновесия.
Своего сима еще не собрал жду доставки автокресла которое уже везут 3 месяца Изображение этим и не могу подтвердить правильность хода мыслей симостроителей но
все таки, всякие ощущении цитирую своими словами (подвесает форум после каждого ответа учасников. потому не могу дословно процитировать) остановка автобуса производит к дизереонтацыи и тому подобные ощущение это наверное скорее всего проблемы с вестибулярным аппаратом. За четыре года поездок в автобусе на работу не замечал такого. А в общем все дополнителные ощущение можно получить при правильной настройке софта который преобразовывает данные от игры в перемещение.
Аватара пользователя
CraCk
SIMER
 
Сообщения: 368
Зарегистрирован: 31 мар 2010, 21:25
Откуда: Made in Ukraine
Благодарил (а): 66 раз.
Поблагодарили: 104 раз.
Баллы репутации: 112
ТехнарьТехнарь

Сообщение Ale » 21 ноя 2012, 23:22

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

Стоп-стоп-стоп. Что за упадническое настроение? Что значит - не умеем? Задавать - нет вопросов. Измерять - опрашиваем датчик положения и делим разницу позиций на время. Мы зачем вообще тут собрались? Ставить задачи, обсуждать их и решать.

Я прекрасно понимаю, что СТОЯЧИЙ мотор мгновенно не приобретет нужной скорости. И вообще - изменение скорости процесс энергоемкий и не кратковременный. Но если мы ХОТИМ в точности повторять профиль трассы (а мне кажется как раз к этому надо стремиться), мы не должны ставить задачу достичь следующей точки с максимальной скоростью и там остановиться, ожидая очередного задания. Кстати, сейчас вся ситема именно на это и заточена, как впрочем и классический ПИД. В результате на быстые изменения позиции система не может отреагировать в силу инерционности, а на медленные - доезжает и останавливается... Оно нам надо?

Поэтому я не стал бы так пренебрежительно и безосновательно отзываться о шаговиках
Аватара пользователя
Ale
Разработчик
 
Сообщения: 1438
Зарегистрирован: 01 фев 2011, 20:48
Откуда: Дубна
Благодарил (а): 541 раз.
Поблагодарили: 572 раз.
Баллы репутации: 277
ТехнарьТехнарьТехнарь

След.

Вернуться в X-SIMULATOR и RU-SIMULATOR & SimTools

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

Сейчас этот форум просматривают: Bing [Bot], Google [Bot] и гости: 6

x

#{title}

#{text}