Симулятор для автопилота SmallTim
> Сх у меня всега больше нуля… Я ж специально функции Сх и Су показал, чтобы было понятно что это за коэффициенты (пока
При некоторых режимах (соотношение скорости полета и оборотов) угол атаки “a” в формуле с картинки : Cx(a)=10*Kx*a, будет отрицательный для части лопасти.
И “здравствуй вечный двигатель” 😃
😃 Так Вы все на скан смотрите?!
Ну во-первых, я там подписал, что это для режима без набегающено потока, посему нет такой скорости …
Ну а во-вторых (мой косяк на скане), конечно же модуль. А вот если посмотрите в пост 32, то уведите, что Cx всегда положителен (никогда не ноль), а сила лобового сопротивления всегда направлена в направлении скорости воздуха, пропорциональна этой самой Сх, плотности, площади и квадрату скорости. Следовательно с вечным двигателем поздороваться не суждено…
А вот если посмотрите в пост 32
Наверно надо смотреть сюда: r:=(1.1-cos(2*a)). Тогда ОК.
(иногда пишут так: Kx0+Kx1*(1-cos(2*a))+… )
Как раз сюда! Одной десятой как раз и задал лобовое сопротивление при нулевом угле атаки (“на вскидку от фонаря”, пока не прописал коэффициенты путево).
Кстати, по поводу набора оборотов.
Нужна физикоматематическая зависимость канал -> регулятор -> обороты.Если бы по старинке использовались двигатели постоянного тока, то можно было бы считать напряжение на выходе регуля пропорциональным управляюшему сигналу, и с допущением постоянства сопротивления обмоток получить прямую зависимость канал->крутящий момент…
Выход вижу только в задании характеристик регулятора. Какие будут предложения?
Вы совершенно правы, мы юзаем именно двигатели постоянного тока. то что коммутатор у них электронный- это очень хорошо для моделирования- можно потери в нем не учитывать. И они очень линейны, особенно на тех токах ( 20-30% от максимума) что летают квадрики- там еще далеко до эффектов значительного падения момента… Вот только некоторые регули имеют квадратичную характеристику для более комфортного управления самолетами, но большинство народу, думаю, на квадриках ставят регули с линейной характеристикой.
Решил не наводить путаницу в прогах (пока не совмещать самолет и коптер), т.ч. ради эксперимента расширил немного выложенный “винт” до коптера.
Сделал миксы как рекомендовали выше.
Крутящий момент, создаваемый моторчиком пропорционален сигналу на “регуль”.
Никаких моментов двигатель больше не дает, т.ч. выбег мотора свободный…
Реальный пульт не подтягивал, т.ч. пока юзанье только ползунками.
По поводу миксов:
Меняйте количество моторчиков и настраивайте миксы. Но лучше выложите стандартные миксы для 3,4,5,6,7… и т.д -коптеров. Подтяну…
Вопрос по сопротивлению (всего коптера) вращению (физический принцип) хотелось бы обсудить. Какие эффекты присутствуют? Я на коптерах ни разу не летал, т.ч. даже не представляю как они себя ведут… А пока непонятка сделал галочку “исскуственное замедление”…
Собратья по хобби, чтож Вы критикой самолетного сима не жалуете? Хотелось бы доделать и приступать непосредственно к автопилоту…
Собратья по хобби, чтож Вы критикой самолетного сима не жалуете? Хотелось бы доделать и приступать непосредственно к автопилоту…
Кирилл, вот доберусь до дома и покритикую, не помилую 😃 Пока - не могу, даже рарчик не качаю.
Не боИсь, усё мы смотрим и держим руку на пульсе 😃 Лично я жду реальной возможности сунуться в программные интерфейсы. Кстати, хотелось бы внести еще небольшую хотелку, чтобы ты в уме ее держал, когда дело до реализации программных интерфейсов дойдет. Неплохо бы пару опций, намеренно искажающих горизонт от реального при трансляции информации в АП. Ну в разумных пределах конечно, по крену и тангажу.
Эт само собой!.. Погрешность СИ, время отклика, всякие там механические люфты и прочие “ореалистичивающие” эффекты можно добавлять скок угодно (все от полета фантазии зависит). Намеренно ничего не ввожу, дабы отработать идеальное поведение. Иначе за паразитными глюками можно будет не заметить каких то принципиальных ошибок…
Основным сейчас моментом является определиться с базовой аэродинамикой. Я выложил прогрммульку по конфигурации коэффициентов (пост 50). Прошу всетаки посмотреть и дать свое видение их поведения для различных профилей (например, для ская и других популярных FPV моделей, заднего оперения (для упрощенки плоская пластина), разных типов пропеллеров…)
От их адекватности очень сильно будет зависеть реалистичность поведения всей модели…
Как уже написал, пока сделал грубо приближенно тригонометрическими функциями… Это грубо-характерное приближение…
Для более понимаемой ориентации в происходящем добавил к отображению коптера фон. Серые кружочки жестко привязаны к воздуху. Единственно только, масштаб фиксированный для отображения (под параметр “точек/метр”=50). Пробовал с реальным масштабом, но на больших скоростях “обман зрения” возникает (не знаю как правильно называется эффект подобный съемки вращающихся тел, когда частота кадров кратна частоте вращения). Тут то же самое, только по перемещению… Но не суть важно… Считайте, что если “точек/метр”>50, то кружочки располагаются вдали от модели, а при “точек/метр”<50? то ближе…
Уф… Подкосили меня местные уральские морозы под самый корешок!.. Провалялся в трупообразном состоянии (с температурой 38…40) всю неделю!.. Не ел, не курил, не вставал, не думал… Только антибиотики килограммами пожирал… Соответственно и подвижек никаких не было…
Ну вроде бы начинаю отходить… Сегодня ночью добавил к самолетному симу мониторинг некоторых параметров и стабилизацию по крену и тангажу.
В общем самые обычные независимые контуры (ПИД). Газ в режиме СТ работает следующим образом: Положение стика - это задание регулятору скорости (ПИ) от Vmin до Vmax (в настройках стабилизации). Решил сделать так во-первых для того, чтобы не терялась робастность, а во-вторых, чтобы при наборе высоты ненароком не подвесить модель…
Константы (для прилагаемой модели Ская) подобрал так, чтобы был максимально быстрый выход на заданное значение с минимальным перерегулированием, была максимальная устойчивость к порывам ветра, почти что под предел возникновения автоколебаний на полном газу…
Добавил набросок автонастройки, пока не автономный, другими словами перед автонастройкой надо в штиль дать модели “успокоиться”. Завершение вручную (дать хотя бы пол минутки понастраиваться).
Коптер удалять?! А то вроде бы просили сделать, а никаких советов по поведению не даете! Еще раз оговорюсь - я на коптерах не летал и как они себя ведут не представляю… Если надо интерфейс для обмена организовать, то какие именно параметры в каком виде и на какой запрос передавать? У меня все в real (float по Сишному) все единицы системе СИ. Всякие там км/ч с градусами для простоты понимания отображаю…😃
Автовозврат (АВ) пока не делал, т.ч в него пока не тычте! 😒
Если надо интерфейс для обмена организовать, то какие именно параметры в каком виде и на какой запрос передавать? У меня все в real (float по Сишному) все единицы системе СИ. Всякие там км/ч с градусами для простоты понимания отображаю…
float это 4 байта. Вот их в чистом виде и можно гнать на выход. Меня флоат устраивает полностью, Олега, думаю, тоже. Тима - не факт, что устроит в меге с флоатами хужее.
Гнать на выход нужно:
- маркер начала пакета (2байта)
- длина пакета (1 байт)
- крен
- тангаж
- рыск
- скорость по земле
- скорость по ветру
- высота по барометру
- широта
- долгота
- курс по ГПС
- CRC32 (2 байта)
От нас пакет с каналами (я думаю по 2 байта на канал, значение длины импульса 1000мс - 2000мс, середина 1500мс):
- маркер начала пакета (2 байта)
- длина пакета (1 байт)
- джой крена
- джой тангажа
- джой курса
- джой газа
- сервисный канал (тут надо договориться, что будем передавать, либо на будущее зарезервировать)
- CRC32
Передавать FS я думаю смысла вообще никакого нет.
Обманул!.. Real в дельфи - это double в C#… Тобишь 8 байт. Конечно нафиг такая точность не нужна, и все же, как нам лучше “совместиться”?
вычисленное значение делфы real умножить на 100 и засунуть в integer (4 байта)
Для угловых скоростей, к примеру (если гира на модели стоит), хреновенькая точность будет…
Ну точность ты на своей стороне загрубишь. Надо настройку какую-нибудь сделать на эту тему.
Реальность сейчас снимать с IMU углы с точностью не менее 0,5 градусов. Точность по высоте 0,5 метра. Ну про ГПС, ты и сам знаешь.
Для универсальности и тупого однообразия предлагаю все же умножать float на 100 и откидывать все, что после точки.
А как приеду смогу тебе пример сокета организовать в Делфе, если хочешь.
Сбрось если не трудно, чтобы я не кустарничал… С Integer нефига заморачиваться, я передаваемые параметры в Single переведу (типа float 4-хбайтовый)…
Вот такую последовательность (4 байта float) 79 E9 F6 42 как расшифрушь?
Вот такую последовательность (4 байта float) 79 E9 F6 42 как расшифрушь?
Если обратный порядок, то 1.23456001E+2
Если прямой , то 1.51849983E+35
Какой правильно?
Могли бы и сами догадаться! 😁
Или верите в случайное попадание в натуральный ряд чисел?
Обратный!.. Все верно!..
123,456
Ну тогда я сваяю обмен и попробуем приконнектиться…
сим - сервер, настройки подключения в “главное меню”-“connect”
при получении от клиента запроса:
AA // маркер начала пакета
EE // маркер начала пакета
11 // длина пакета 17 байт (включая CRC)
4 байта // тип integer начиная с младшего элероны в мс. (1000…2000)
4 байта // тип integer начиная с младшего РВ в мс. (1000…2000)
4 байта // тип integer начиная с младшего рудер в мс. (1000…2000)
4 байта // тип integer начиная с младшего газ в мс. (1000…2000)
СС // пока не CRC, а просто маркер конца
Кидает в ответ:
AA // маркер начала пакета
EE // маркер начала пакета
21 // длина пакета 33 байта (8 параметров*4 + CRC)
4 байта // тип float начиная с младшего - текущий крен в радианах
4 байта // тип float начиная с младшего - текущий тангаж в радианах
4 байта // тип float начиная с младшего - текущий курс в радианах (0-север)
4 байта // тип float начиная с младшего - текущая скорость в м/с относительно планеты
4 байта // тип float начиная с младшего - текущая скорость в м/с относительно воздуха (бароскорость)
4 байта // тип float начиная с младшего - высота в метрах
4 байта // тип float начиная с младшего - расстояние до модели на север в метрах
4 байта // тип float начиная с младшего - расстояние до модели на восток в метрах
СС // пока не CRC, а просто маркер конца
При этом ставит свои джойстики в соответствии с данными пришедшими в запросе.
Иные запросы игнорирует…
Посмотрел обзорно, попробовал подконнектиться. Вроде на первый взгляд все пучком. Железку раньше конца недели не смогу попробовать, ибо сейчас решаю проблему с s-bus реализацией для одного из форумчан. Сразу после этого попробую.
CRC32 (2 байта)
CRC32 оверкилл здесь, не? Я не смогу CRC32 быстро считать.
Намеренно ничего не ввожу, дабы отработать идеальное поведение.
Люфт серв (гистерезис) и скорость отработки (град/сек) надо сразу вводить.
Тима - не факт, что устроит в меге с флоатами хужее.
Я флоат тоже съем, нивапрос.
Поигрался с моделью. Всё очень правдоподобно для Ская, но почему-то он у меня не валится с СТ и минимальным газом - так и прет с углом тангажа градусов 30…
Про обмен данными - я, может быть, сейчас глупость спрошу, а с чем вообще предполагается обмен данными от сима и в сим? С железкой? С контрольной панелью либо клиентской частью АП на ПК?
Люфт серв (гистерезис) и скорость отработки (град/сек) надо сразу вводить.
не сложно… только мне надо будет доделать управляющие элементы по человечески (зависимость от углов). В данный момент я просто добавляю к Y элемента добавочную силу, пропорциональную ро V квадрат, площади элемента, управляющему сигналу и эффективности руля (упрощенка).
но почему-то он у меня не валится с СТ и минимальным газом
Я же написал, что сделал газ в режиме СТ по ПИ закону на поддержание скорости. Сделал это как раз с целью защиты от сваливания… Если посмотрите на значения выходов, то увидете, что газ в режиме СТ меняется так, чтобы удержать заданную скорость. Например на пикировании он совсем в ноль может уйти…
Задание скорости - это положение стика газа (от минимальной до максимальной, которые задаются в настройках СТ). Эт я так… Просто эксперементирую…
Кстати, про люфт… Его реально люфтом делать? В том плане, что руль под действием аэродинамической силы должен отклониться на заданную дельту от задания в сторону этой самой силы?
Тогда этот эффект почти не заметен будет… Больший раскордаж даст введение дискрета серв…
Я завтра домой еду на новогодние каникулы. До 14-го вряд ли получится что то сильно поваять…
Начал автовозврат прикидывать.
Режимы напрашиваются такие:
- по курсу (элеронами или рудером) разворот по необходимости в нужную сторону, далее удержание траектории по прямой (не направления). Т.е. даже при боковом ветре идти по прямой. Правда ось самолета не будет в точку возврата направлена в этом случае…
- по высоте два варианта. Первый - сразу занять целевую высоту и удерживать ее. Второй как и с курсом идти по прямой от точки включения АВ, до заданной точки…
таких режимов достаточно?
Я же написал, что сделал газ в режиме СТ по ПИ закону на поддержание скорости. Сделал это как раз с целью защиты от сваливания… Если посмотрите на значения выходов, то увидете, что газ в режиме СТ меняется так, чтобы удержать заданную скорость. Например на пикировании он совсем в ноль может уйти…
Виноват, недоглядел.
Кстати, про люфт… Его реально люфтом делать? В том плане, что руль под действием аэродинамической силы должен отклониться на заданную дельту от задания в сторону этой самой силы?
Я вижу это примерно так: есть люфт механики и гистерезис элеетроники.
Люфт сервы и механизмов - Х процентов от полного хода, если он нормализован в пределах от -1 до 1 или Х радиан, если не нормализован.
Опишу для простоты для нормализованного случая.
Приходя из -1 в положение А, серва остается в положении А, диапазон нечувствительности сервы становится от А-Х до А. Если серву просят подвинуться до положения А+В (В меньше Х), то она идет в А+В, а вот если просят придти в А-В, то серва стоит на месте.
В итоге, серва, перемещая качалку, “тащит” за собой окно нечувствительности величиной Х.
Аэродинамические силы могут прижать это окно к положению А, а могут и не прижать, тут уже надо думать…
Это про люфт.
Гистерезис - сама электроника сервы обычно не поддерживает заданное положение с идеальной точностью. Думаю, нужно ввести величину Y - процент от полного хода сервы, она будет задавать окно, в пределах которого серва не реагирует на входной сигнал и вообще ведет себя некрасиво.
Эта Y очень маленькая, но она есть.
Алгоритм учета Y, думаю, такой:
- Получая команду придти в положение А, серва приходит в случайное положение в диапазоне от А-Y до А+Y c равномерным или гауссовским распределением.
- Получив команду придти в положение В, серва не реагирует, если abs(B-A)<Y.
Расскажите подробнее по подключению сима к нашему софту-железкам. Я не до конца вкурил 😦
Может быть, не имеет смысла имитировать АП, а кормить реальный АП смоделированными симом командами и данными (пульт, ветер, ГПС, упрощенно ИМУ и т.д.), получать сервокоманды от АП и рисовать, что будет в таком случае с самиком?
Я к чему про люфты и прочее - самая сложная задача, по крайней мере, для меня, это вести модель идеально ровно, парируя все отклонения в зародыше.
В итоге модель быстро или медленно “дрожит” или “колышется” вокруг идеального положения, и это можно увидеть.
С “идеальными” сервами и идеальной ИМУ это можно сделать, а вот с неидеальными - большой вопрос. Шумы ИМУ и прочее мы задавили, надо будет - еще придавим. А вот что как делать с сервами - непонятно. Очень интересно, что вообще принципиально можно сделать на эту тему на маленьких модельках.
Мысли есть, но пока держу при себе, опять начнут требовать - вынь да положь сразу прямо сейчас 😃
CRC32 оверкилл здесь, не? Я не смогу CRC32 быстро считать.
вроде сошлись на CRC8 - 1 байт, но сейчас вообще любое значение.
а с чем вообще предполагается обмен данными от сима и в сим? С железкой? С контрольной панелью либо клиентской частью АП на ПК?
С железкой конечно. Для отработки автоматических режимов полета, сидя дома и попивая пиво, а не бегая на поле ради каждой новой закорючки в коде.
А бы дальнейшее и целевое развитие предложил бы вообще в сторону ActiveX, чтобы можно было эту штуку прямо в КП встроить как чать софта.
Расскажите подробнее по подключению сима к нашему софту-железкам. Я не до конца вкурил
Запускаешь СИМ, выбираешь там порт прослушки, жмешь коннект.
Дописываешь себе небольшую софтинку, которая шлет в этот порт положения джойстиков, которые твоя железка выставляет. В ответ получаешь параметры IMU. Подсовываешь эти параметры в свою железку, она думает, что летит, а на самом деле лежит рядом с тобой на столе.