Просмотр полной версии : LUA. Практика
Всем доброго времени суток.
Что-то тема про LUA заглохла.
Решил я сделать себе небольшую приблуду, вроде бароспидографа (aka "черный ящик").
Идея для начала такая выгружать в текстовый файл некоторые параметры, как-то: время, скорость, высоту и т.д. А потом открыть этот файл в Excel, построить графики и делать разбор полета (летаю себе на "чистый" пилотаж). Всяко легче получилось бы, чем после 40 мин. полета 30 минут после просматривать видео...
Итак, открываю, как указано, файл export.lua
Ну что, разобраться не сложно, на Си похоже :) Или на 1С-ный язык :D
К тому же разработчики постарались, "рыбу" подготовили. Осталось только раскоментировать нужные строки.
Файл, который у меня получился здесь: http://arrow.sbn.bz/LUA/export.txt
Запускаю ЛО, летаю "программу", врезаюсь в землю :)
Потирая руки - выхожу, ищу результаты, результатов - 0.
Файла нет.
Смотрю код, ага, создание файла не прописано.
Создаю файл руками, итерация 2.
Результат ? Пустой файл.
Лезу в файл Error.txt, кстати вот он: http://arrow.sbn.bz/LUA/Error.txt
Смотрю и замечаю строчку:
LuaExport::Lua data export disabled
Внимание, вопрос: что надо сделать, чтобы ОНО было enabled ???
С уважением,
Федин "Arrow" Юрий
приветствую
вероятнее всего нужно убрать строки "--[[" и "--]]" перед и после функции LuaExportStart(). иначе это комментарий.
хорошее дело делаешь, пора рабираться с этим экпортом данным. я вот тоже займусь вплотную когда с работой немного разгребусь.
Хм, может быть...
Хотя странно - остальные функции такими штуками не обрамлены.
Кстати, может быть эти "[[" и "]]" выделяют главную функцию ? Хотя на void main() она не похожа... ;)
К сожалению, теперь проверить смогу только на выходных...
Если у кого будет время и желание - может проверите ???
Ха, скорее всего так и есть ;)
Увидел еще одну строчку
-- Uncomment this function to enable data export!
:)
кстати, экспорт в файл лучше делать не при каждом LuaExportAfterNextFrame(), а скажем посекундно, а если если лень разбираться с программированием времени в LUA, то хотябы каждые 50 фреймов. иначе будет просто жутко тормозить.
ps: --[[ и --]] означают составной комментарий, то есть многострочный. их нужно убрать.
Во, нашелся человек знакомый с синтаксисом LUA !!! :)
А вывод в файл - это уже каждый для себя самостоятельно напишет, что хочет.
Самое главное для меня - это получить первые результаты (увидеть, что это вообще работает), а дальше пойдет проще ;)
Просто для пилотажа, а особенно группового ;), ИМХО важны эти миллисекунды.
Хотя внешнюю приблуду и писать не надо - Excel рулит ;)
кстати, экспорт в файл лучше делать не при каждом LuaExportAfterNextFrame(), а скажем посекундно, а если если лень разбираться с программированием времени в LUA, то хотябы каждые 50 фреймов. иначе будет просто жутко тормозить.
Достаточно прочитать комментарии внутри функции LuaExportActivityNextEvent(t). Эта функция специально написана для того, чтобы можно было из скрипта планировать моменты модельного времени, когда она вызывается.
Спасибо, Валерий.
До этого мы просто еще не добрались...
А по теме топика - мы сделали правильный вывод ?
В процессе раздумывания о точках применимости нашего "бароспидографа" возник еще один вопрос.
А реально выводить в файл координаты самолета относительно земной поверхности (или безотносительно к чему-либо) в каких-либо координатах?
Имеется в виду, есть ли такие параметры, готовые к выводу ?
Или придется считать эти параметры как функции времени, скорости, высоты и углов ?
Конкретное приложение - как в MSFS. Проверить правильность выполнения "коробочки", полета по маршруту, захода по глиссаде, набора высоты, идеальности петли и т.д. Ну ладно, глиссаду сейчас можно посмотреть от высоты. А остальное ?
2 ALL - а какие еще способы применения такого устройства (регистратор полетных параметров) вы видите ?
А по теме топика - мы сделали правильный вывод ?
О раскомментировании функции? Правильный.
А реально выводить в файл координаты самолета относительно земной поверхности (или безотносительно к чему-либо) в каких-либо координатах?
Имеется в виду, есть ли такие параметры, готовые к выводу ?
Или придется считать эти параметры как функции времени, скорости, высоты и углов ?
В эддоне уже есть такая возможность.
Итак, всем помогавшим спасибо.
Первый блин - вышел.
Кому интересно - прикрепляю свой файл export.lua
Для использования - заменить существующий в папке LockOn\Config\Export (сделав резервную копию :) )
В папке LockOn\Temp создать пустой файл Export.log
После вылета в нем появятся данные разделенные точкой с запятой. Очень удобно для загрузки в Excel.
Также привожу результаты обработки в Excel. На картинках графики угла атаки и перегрузки, и высоты (от уровня моря и от земли).
Что особенно понравилось.
Можно собирать информацию по трекам - в том числе и по сетевым.
молодец Arrow, первые шаги всегда важны.
добавлю лишь, что пустой файл самому создавать не обязательно.
функция io.open("./Temp/Export.log", "w") его создаст сама.
Будем писать внешнюю прогу для анализа параметров ?
Помнится раньше была такая для MSFS 98 :D
Из личного - в Excel - масштабировать и рассматривать конкретные куски графика неудобно ...
нет, мне построение графиков не очень интересно, я наверное займусь передачей данных по сетке, что бы в режиме реального времени отображать инфу на рядом стоящем ноуте.
Вопросы нарастают ;)
Вот пример посадки с небольшим "козлом". График вертикальной скорости.
Но в чем же она измеряется ???
Предположения ?
мм/с
Хех, прикольно...
Это из "тайного знания", или догадка ?
В таком случае - я не совсем уверен, что остальные параметры в общепризнаных единицах выводятся ;)
Kristofer
05.10.2004, 14:13
Разработчиками, вроде как, оговорена размерность получаемых данных.
LoGetModelTime() -- returns current model time (args - 0, results - 1 (sec))
LoGetMissionStartTime() -- returns mission start time (args - 0, results - 1 (sec))
LoGetPilotName() -- (args - 0, results - 1 (text string))
LoGetIndicatedAirSpeed() -- (args - 0, results - 1 (knots))
LoGetTrueAirSpeed() -- (args - 0, results - 1 (knots))
LoGetAltitudeAboveSeaLevel() -- (args - 0, results - 1 (feet))
LoGetAltitudeAboveGroundLevel() -- (args - 0, results - 1 (feet))
LoGetAngleOfAttack() -- (args - 0, results - 1 (degrees))
LoGetAccelerationUnits() -- (args - 0, results - 1 (G))
LoGetVerticalVelocity() -- (args - 0, results - 1(feet per sec))
LoGetADIPitchBankYaw() -- (args - 0, results - 3 (degrees))
Только вот оценить так это, или нет не могу:( - в export.log пишется черти что...
Причина, вероятно, в некорректной загрузке одной из библеотек: в errror.log такие строки:
World::LoadPlugins: Loaded plugin module Aerodyne.dll
World::LoadPlugins: Can't load plugin module Staff.dll, куча строк вида
LuaExport::LuaExportAfterNextFrame: ./Config/Export/Export.lua:63: bad argument #3 to `format' (string expected, got nil)
Как с этим бороться не знаю.
А начинание твое, Arrow, оченно нужное!
Спасибо, разработчикам и Кристоферу - про размерности-то я и не заметил ;)
Кристофер - выкладывай свой файл, что-нибудь посоветуем.
Или возьми мой ;)
Но это точно не из-за ДЛЛок, у меня такое же пишет в ошибки ;)
Разработчиками, вроде как, оговорена размерность получаемых данных.
LoGetModelTime() -- returns current model time (args - 0, results - 1 (sec))
LoGetMissionStartTime() -- returns mission start time (args - 0, results - 1 (sec))
LoGetPilotName() -- (args - 0, results - 1 (text string))
LoGetIndicatedAirSpeed() -- (args - 0, results - 1 (knots))
LoGetTrueAirSpeed() -- (args - 0, results - 1 (knots))
LoGetAltitudeAboveSeaLevel() -- (args - 0, results - 1 (feet))
LoGetAltitudeAboveGroundLevel() -- (args - 0, results - 1 (feet))
LoGetAngleOfAttack() -- (args - 0, results - 1 (degrees))
LoGetAccelerationUnits() -- (args - 0, results - 1 (G))
LoGetVerticalVelocity() -- (args - 0, results - 1(feet per sec))
LoGetADIPitchBankYaw() -- (args - 0, results - 3 (degrees))
Только вот оценить так это, или нет не могу:( - в export.log пишется черти что...
Причина, вероятно, в некорректной загрузке одной из библеотек: в errror.log такие строки:
World::LoadPlugins: Loaded plugin module Aerodyne.dll
World::LoadPlugins: Can't load plugin module Staff.dll, куча строк вида
LuaExport::LuaExportAfterNextFrame: ./Config/Export/Export.lua:63: bad argument #3 to `format' (string expected, got nil)
Как с этим бороться не знаю.
Первые два сообщения не имеют отношения к экспорту данных, поэтому их можно проигнорировать. А вот последнее, как я предполагаю, сообщает, что в 63-й строке в 3-й параметр функции format почему-то оказалcя пустым (nil). Либо вы его не получили вообще, либо его вычисление сработало криво. Вставьте в скрипт проверку значений параметров на nil.
Валерий, а можно выводить значения параметров полёта в других единицах, например, в SI? Пересчитать, конечно, не проблема, но было б приятно ;)
Kristofer
05.10.2004, 16:36
Или возьми мой ;)
Спасиб:) я это еще после твоего первого поста здесь так и сделал:)
Сейчас, поскипав все неиспользуемое, получил такой вот export.lua:
===============================
function LuaExportStart()
local file = io.open("./Temp/Export.log", "w")
if file then
io.output(file)
io.write(string.format("t; Hbar; Vind; Vvert;\n"))
end
end
function LuaExportAfterNextFrame()
local t = LoGetModelTime()
local Hbar = LoGetAltitudeAboveSeaLevel()
local Vind = LoGetIndicatedAirSpeed()
local Vvert = LoGetVerticalVelocity()
io.write(string.format("%.2f; %.2f; %.2f; %.2f;\n", t, Hbar, Vind, Vvert))
end
function LuaExportStop()
io.close()
end
function LuaExportActivityNextEvent(t)
local tNext = t
return tNext
end
===============================
Проверяю: взлет, полубочка, пике в полосу (а глаза на указателе скорости-запоминаю последнее показание прибора), лезу в лог, пересчитываю крайний результат Vind [kts]>[км/ч]... Хе-хе, СХОДИТСЯ!!! Вывод - косяк видимо какойто у меня сидел в export.lua до его зачистки.
Однако не все так шоколадно - пересчет Vvert [feet/s]>[м/с] дал 1001,76м/c при показаниях вариометра ~50м/с. Непонятно.
Ко всему прочему Еrror.log опять ругается на 16 строчку:
...
LuaExport::LuaExportAfterNextFrame: ./Config/Export/Export.lua:16: bad argument #3 to `format' (number expected, got nil)
...
а на 16-й строке: io.write(string.format("%.2f; %.2f; %.2f; %.2f;\n", t, Hbar, Vind, Vvert)).
Сообщение об ошибке повторяется 18 раз...
Чтобы не быть голословным:) export.log прицепил.
Вставьте в скрипт проверку значений параметров на nil. Спасибо, Валерий, попробую.
PS Кстати, Staff.dll в Локоновской папке просто нет.
добавлено
по совету Валерия скорректировал скрипт:
...
local Vind = LoGetIndicatedAirSpeed()
local Vvert = LoGetVerticalVelocity()
if Vind == nil then return end
io.write(string.format("%.2f; %.2f; %.2f; %.2f;\n", t, Hbar, Vind, Vvert))
...
Vind, потому как у меня на него лог ругался и порадовался исчезновению сообщений об ошибке:)
Kristofer
06.10.2004, 11:07
Валерий, подскажите пожалуйста, в каких единицах измерения выдает свои результаты функция LoGetVerticalVelocity(). Меня терзают смутные сомнения (с), что всетаки не в feet per sec - повторив несколько раз упрожнение: "`Втыкание` в землю с заданной Vверт=50м/с" (по прибору в кабине) всякий раз получал в export.log крайнее значение Vверт~1000м/с. Судя по графику Vверт при посадке с "козлом", выложенному Arrow, это непонятка не у меня одного.
Заранее спасибо:)
Валерий, подскажите пожалуйста, в каких единицах измерения выдает свои результаты функция LoGetVerticalVelocity(). Меня терзают смутные сомнения (с), что всетаки не в feet per sec - повторив несколько раз упрожнение: "`Втыкание` в землю с заданной Vверт=50м/с" (по прибору в кабине) всякий раз получал в export.log крайнее значение Vверт~1000м/с. Судя по графику Vверт при посадке с "козлом", выложенному Arrow, это непонятка не у меня одного.
Заранее спасибо:)
К сожалению, в этих функциях действительно имеются баги, они найдены тестерами и будут исправлены в версии 1.1. Расхождения, вполне возможно, связаны с тем, что некоторые функции в первом варианте скрипта были жестко привязаны к F-15, а для других самолетов даже не проверялись. Так что, слишком сильно не заморачивайтесь пока что, это был всего лишь экспериментальный скрипт для отработки в первом приближении самой технологии экспорта с конкретными пользователями-программистами, по заказам которых мы эту фитчу и предполагаем развивать в дальнейшем.
Так что, слишком сильно не заморачивайтесь пока что, это был всего лишь экспериментальный скрипт для отработки в первом приближении самой технологии экспорта с конкретными пользователями-программистами, по заказам которых мы эту фитчу и предполагаем развивать в дальнейшем.
Мы хоть и не программисты (некоторые-уже), но освоить такой язык можем ;)
Имейте в виду - очень надо :)
Причины описаны в первом посте.
Валерий, а можно выводить значения параметров полёта в других единицах, например, в SI? Пересчитать, конечно, не проблема, но было б приятно ;)
Так мы, скорее всего, и сделаем. Первоначально мы отрабатывали технологию экспорта с пользователем, у которого дома кабина от F-15 стоит, поэтому данные под него подстраивали.
Мы хоть и не программисты (некоторые-уже), но освоить такой язык можем ;)
Имейте в виду - очень надо :)
Причины описаны в первом посте.
Да, на здоровье, помогу чем смогу :)
Kristofer
06.10.2004, 13:50
Ну чтож, ждем выхода LOv.1.1. Правда и то, что уже есть сейчас, позволяет эмулировать работу САРПП, а это не может не радовать.
И ма-аленький вопрос:) - Валерий, можно ли надеяться на реализацию описанного здесь (http://www.sukhoi.ru/forum/showpost.php?p=438924&postcount=30) предложения?
Ну чтож, ждем выхода LOv.1.1. Правда и то, что уже есть сейчас, позволяет эмулировать работу САРПП, а это не может не радовать.
И ма-аленький вопрос:) - Валерий, можно ли надеяться на реализацию описанного здесь (http://www.sukhoi.ru/forum/showpost.php?p=438924&postcount=30) предложения?
Там сразу несколько предложений, причем не по данной теме, а по перспективам развития моделей аэродромов в симуляторе. Ничего определенного пока сказать не могу, но в эддоне точно ничего из этого не предполагается.
А поуправлять ЛокОном снаружи не пробовали с помощью функции LoSetCommand? Один из западных пользователей даже написал тестовую программу, управляющую самолетом и видами по сети с другого компьютера.
есть такая идея. только не для прямого управления с другого компа - зачем эмулировать удаленный джой если он будет работать заведомо хуже локального.
есть другая идея - микропрограммы-боты, что то вроде продвинутого CАУ или fly-by-wire. например для выполнения оптимального установившегося виража. или оптимизированый по времени\горючке набор заданной высоты, или скорости. но для этого лично мне пока не хватает лётных материалов, как это делается в реале. формулы расчета и т.д.
есть другая идея - микропрограммы-боты, что то вроде продвинутого CАУ или fly-by-wire. например для выполнения оптимального установившегося виража. или оптимизированый по времени\горючке набор заданной высоты, или скорости. но для этого лично мне пока не хватает лётных материалов, как это делается в реале. формулы расчета и т.д.
Так у ботов же нет интерфейса управления, они сами собой управляют.
есть такая идея. только не для прямого управления с другого компа - зачем эмулировать удаленный джой если он будет работать заведомо хуже локального.
Ну, например, для записи/интерпретации собственных треков, с которыми можно все что угодно вытворять. Кстати, управляющая программа вовсе не обязана на другом компе находиться - сетевые протоколы и локально чудненько работают.
Так у ботов же нет интерфейса управления, они сами собой управляют.я имел ввиду не те боты, которые AI-юниты, а боты в виде микропрограммы для собственного самолета.
Ну, например, для записи/интерпретации собственных треков, с которыми можно все что угодно вытворять. Кстати, управляющая программа вовсе не обязана на другом компе находиться - сетевые протоколы и локально чудненько работают.ну так как джой при проигрывании треков не нужен, то остаются только виды. неужели есть какой-то плюс в управлении видами то сети?
ps: про то, что сокеты с localhost нормально работают я знаю ;) но зачем локально запускать рпограммы управления? экран ведь будет занят под LO. или юзать его в окне и рядом чтото делать? но тогда фреймрейт пострадает. где практическая ценность?
где практическая ценность?
Вы тут осторожно обсуждайте ;)
А то разработчики решат, что ценности нет - и откажутся от фичи :D
я думаю до этого не дойдет. все без сомнения понимают ценность этой фичи игры. но некоторые применения её кажутся странными.
эффект "микроскопа которым колят орехи" - все знают как он полезен вообще, но удивляются нестандартному применению :D
я имел ввиду не те боты, которые AI-юниты, а боты в виде микропрограммы для собственного самолета.
ну так как джой при проигрывании треков не нужен, то остаются только виды. неужели есть какой-то плюс в управлении видами то сети?
ps: про то, что сокеты с localhost нормально работают я знаю ;) но зачем локально запускать рпограммы управления? экран ведь будет занят под LO. или юзать его в окне и рядом чтото делать? но тогда фреймрейт пострадает. где практическая ценность?
Если применяются "микропрограммы" для собственного самолета, то им экран не нужен. А эти самые "микропрограммы" в данном случае работают так же, как треки - задают входные воздействия во времени. Только эти воздействия они могут генерировать еще и динамически, в зависимости от ситуации. Напишите, для примера, примитивный скрипт, который будет заставлять самолет автоматически выпускать шасси при снижении скорости до посадочной и убирать при скорости выше посадочной.
вот, именно про такие микропрограммы (а для краткости - боты) я и говорю :)
а про шасси - интересная идея!
ps: глянул export.lua 1.02 , не нашел ничего, что помогло бы выпустить шасси, небыло тогда этих команд ещё.
pps: и вообще многого не хватает. я понимаю что в 1.1 команды расширили, но вдруг что-нибудь забыли? Валерий приведите пожалуйста списочек новых команд. может ещё что нибудь полезное придумаем.
Я тоже уже собрался было писать, но в описаниях комманд - ничего нет про шасси :)
Ладно, поиграем тормозом ;)
command = 73 - air brake on/off
А еще - нет ли возможности включать/отключать скрипт кнопкой ?
Подозреваю, что достаточно просто обрабатывать клавиатурный ввод в export.lua, но не знаю как :(
подозреваю, что совсем не просто. если только LO сам не будет в скрипт передавать клаву по настройке. но не думаю что это критично. пока можно всё что нужно сделать используя функции состояния LO, коих пока, впрочем, немного.
ps: хотя на ум приходит реальное применение реакции скрипта на кнопку - в реальном ЛА можно выключить САУ, что в нашем случае будет соответсвовать выключению бот-скрипта. что бы не делать тяжелый универсальный мехнизм перехвата скриптом кнопок, можно расширить кол-во принимаемых локоном с клавы команд камандами вида: Set_Unset_Flag1,Set_Unset_Flag2,...,Set_Unset_Flag5. тогда в самом скрипте можно будет обрабатывать эти флаги.
Хм, кстати - слегка подумал и понял - отличный ЧИТ !!!
Надо сделать возможность на серваке отключать это дело.
А то мы можем ТАКОЙ групповой пилотаж на видео записать - ЦПВЛ от зависти задохнется :D
А это довольно критично, так как глядишь - не сегодня, завтра могут начаться чемпионаты по групповому пилотажу на основании треков...
Kristofer
07.10.2004, 16:16
Хм, кстати - слегка подумал и понял - отличный ЧИТ !!!
Надо сделать возможность на серваке отключать это дело.
А то мы можем ТАКОЙ групповой пилотаж на видео записать - ЦПВЛ от зависти задохнется :D
А это довольно критично, так как глядишь - не сегодня, завтра могут начаться чемпионаты по групповому пилотажу на основании треков...
:D Позволю себе не согласиться ;) пилотаж Вирпилов от пилотажа ботов/киборгизированых виртуальщков отличается если не на счет раз, то на счет два - точно :rolleyes:
:D Позволю себе не согласиться ;) пилотаж Вирпилов от пилотажа ботов/ отличается если не на счет раз, то на счет два - точно :rolleyes:
Хе-хе.
Всему учить надо ;)
Пишем программу точного управления по изменениям. Если можно анализировать при каждом кадре и выдавать запрос на изменение - то можно подобрать параметры и стиль управления...
Аналогично пишем такую же программу для ведомого. Немного исправляем режимы для занятия своего места в строю...
И все !!!
Располагаем файлы управления на двух компьютерах.
Запускаем ЛокОн, хостуем миссию.
Вуаля !
По времени все синхронизировано гораздо точнее.
Параметры (высоту, скорость, крен, и т.д.) держим ИДЕАЛЬНО.
Подозреваю, что все это сделать реально.
И о каких ботах в этом случае идет речь ? ;)
насчет отключения скриптов на сервере - это обещает вылиться в целую проблему.
полностью отключать нельзя, иначе обидятся те, кто всё
то делал под домашний кокпит. наверное при сетевой игре будут выключать управление, а получение индикаторов - оставят.
Kristofer, а откуда такие пессимистические мысли? вы уже видели пилотаж "киборгизированых виртуальщков"? ;) один пример Arrow уже привел - груповой паралельный пилотаж, я могу добавить про скрипты для идеального выполнения основных фигур. так что ещё не известно у кого ролики будут красивее :)
Валерий, хорошо бы ещё поиметь команды для вывода текста из скрипта на экран, примерно так же, как рисуются FPS. это будет совершенно необходимо для отладки.
есть такая идея. только не для прямого управления с другого компа - зачем эмулировать удаленный джой если он будет работать заведомо хуже локального.
Ну не знаю как Вы, а я уже получил удовольствие от управления ЛокОном по сети с удалённой машины (пока только в качестве теста). Работает хорошо. В 1.02, конечно, параметров маловато, но это только начало. Я бы не торопился с выводами о практической полезности. Каждый желающий найдёт для себя область применения. На будущее есть планы по устройству управления со встроенным Ethernet - портом. Добавить туда, в качестве опции, аппаратного бота и гуляй :) - хочешь - сам рули или бота включи, а сам помогай ему, время от времени, потягивая пиво :D. Здесь есть доля шутки, конечно.
Прежде всего я рассматриваю эти новые фичи как мощную платформу для всевозможных экспериментов.
Прежде всего я рассматриваю эти новые фичи как мощную платформу для всевозможных экспериментов.
Я тоже :)
Я тоже уже собрался было писать, но в описаниях комманд - ничего нет про шасси :)
command = 68 -- Gear
Хм, кстати - слегка подумал и понял - отличный ЧИТ !!!
Надо сделать возможность на серваке отключать это дело.
А то мы можем ТАКОЙ групповой пилотаж на видео записать - ЦПВЛ от зависти задохнется :D
Никаких шансов! Командир ЦПВЛ - сотрудник Eagle Dynamics :D
будет полезна функция получения типа ЛА. например для Су-33 в одновременно с шасси выпускать хук.
Kristofer
07.10.2004, 18:33
Хе-хе.
Всему учить надо ;)
1. Пишем программу точного управления по изменениям.
2. Если можно анализировать при каждом кадре и выдавать запрос на изменение - то можно подобрать параметры и стиль управления...
3. Аналогично пишем такую же программу для ведомого. Немного исправляем режимы для занятия своего места в строю...
...
4. По времени все синхронизировано гораздо точнее. Параметры (высоту, скорость, крен, и т.д.) держим ИДЕАЛЬНО.
5.Подозреваю, что все это сделать реально.
6. И о каких ботах в этом случае идет речь ? ;)
1. При пофиксеных багах функций получения параметров полета это выполнимо, скорее всего.
2.,3. Это, пожалуй, единственное тонкое место в моих размышлениях :) - задать граничные условия (та еще кстати задачка;) ) + math.random* :D
4. А вот тут-то и все видно и станет ;) (сужу по визуальному наблюдению за пилотажем ребят из ЦПВЛ (снаружи/кабина) и по своему скромному опыту)
5. Не спорю, но вот чего выполнение подобных скриптов будет стоить;) (в смысле вычислительной "мощности" РС)? LUA все таки язык интепретируемый, а следовательно, чем "толще" скрипт, это при покадровом-то просчете - тем меньше fps (хотя, возможно, я ошибаюсь: сужу по своей, далеко не "топовой" машине - если не прав, поправьте:) ). Опять же идеальное исполнение группового пилотажа у меня, во всяком случае, вызовет... м-м-м... подозрение;). Почему - см. п.4.
6. О тех самых, приобретших AI, смоделированный на скриптах :)
Kristofer
07.10.2004, 18:34
7. Насчет отключения скриптов на сервере - это обещает вылиться в целую проблему.
полностью отключать нельзя, иначе обидятся те, кто всё то делал под домашний кокпит. Наверное при сетевой игре будут выключать управление, а получение индикаторов - оставят.
8.Kristofer, а откуда такие пессимистические мысли? вы уже видели пилотаж "киборгизированых виртуальщков"? ;) один пример Arrow уже привел - груповой паралельный пилотаж,
9. я могу добавить про скрипты для идеального выполнения основных фигур.
10. Так что ещё не известно у кого ролики будут красивее :)
7. Согласен целиком.
8. Если честно, то еще не видел:) - а если когда-то они появятся, то ставить их на одну доску с "живым" пилотированием не стоит, мне кажется, что это отдельный вид творчества
9. Опять-таки, не спорю - алгоритмы их исполнения сравнительно просты. НО! выдавать их "скриптовость" будет именно идеальность[i] исполнения:) , причина моего мнеиня в п.4.
10. Ролики - не исключаю, возможно будут красивее тех что запишут [i]живые Вирпилы... Но, согласитесь, это уже будет несколько НЕ ТО:), что СДЕЛАЛИ ребята из того же ЦПВЛ в ЖУковском в августе этого года.
ЗЫ
Прошу прощения, что растекся мыслию по древу, практически на грани оффтопа
Хе-хе.
Всему учить надо ;)
Пишем программу точного управления по изменениям. Если можно анализировать при каждом кадре и выдавать запрос на изменение - то можно подобрать параметры и стиль управления...
Аналогично пишем такую же программу для ведомого. Немного исправляем режимы для занятия своего места в строю...
И все !!!
Располагаем файлы управления на двух компьютерах.
Запускаем ЛокОн, хостуем миссию.
Вуаля !
По времени все синхронизировано гораздо точнее.
Параметры (высоту, скорость, крен, и т.д.) держим ИДЕАЛЬНО.
Подозреваю, что все это сделать реально.
И о каких ботах в этом случае идет речь ? ;)
"Пилите, Шура, пилите!" - И.Ильф, Е.Петров. Золотой теленок.
Вот, чуть не забыл. Может пригодится тем, кто начинает экспериментировать с экспортом в v1.02.
Ниже приведены замеченные в процессе тестирования глюки при экспорте данных в версии 1.02.
Разработчикам об этих глюках известно уже относительно давно.
При тестировании, в качестве самолёта с имперской системой единиц измерения, использовался F-15, с метрической - Су-27.
Для самолётов обеих систем (F-15 и Су-27):
1. Неверное значение курса (параметр yaw из функции LoGetADIPitchBankYaw()).
Правильное значение получается последующим преобразованием: yaw = 360-yaw*2.
2. Неверное значение вертикальной скорости (функция LoGetVerticalVelocity()) - примерно на порядок больше, чем по прибору, причём зависимость этого расхождения от показаний прибора - нелинейная (как мне показалось).
3. На внешних видах (F2, F3 и т.п.) функции: LoGetADIPitchBankYaw(), LoGetIndicatedAirSpeed(), LoGetVerticalVelocity() - возвращают значения nil.
Для самолётов с имперской системой (F-15):
1. Параметр pitch из функции LoGetADIPitchBankYaw() - инвертирован по знаку, т.е. - при пикировании выдаёт положительные значения угла тангажа, при кабрировании - отрицательные.
Правильное значение: pitch = -pitch.
Что касается ввода данных функцией LoSetCommand(command, value) - глюков не обнаружено, пока, а те особенности, которые были задокументированы самими разработчиками в export.lua: "-- Thrust values are inverted for some internal reasons, sorry" - подтвердились экспериментально :).
спасибо Mishel, сами разработчики почему-то не охотно делятся информацией о своём детище.
спасибо Mishel, сами разработчики почему-то не охотно делятся информацией о своём детище.
Интересно, а Mishel откуда информацию получил? Наверное, мы с ним тоже "неохотно" кое-чем поделились :)
Интересно, а Mishel откуда информацию получил? Наверное, мы с ним тоже "неохотно поделились" :)
Ага, еще наверное взяли подписку "о неразглашении" :D
Интересно, а Mishel откуда информацию получил? Наверное, мы с ним тоже "неохотно поделились" :)
так вот и я говорю - с _нами_ делятся неохотно :) наверное в закрытой ветке бетатестеров много интересного обсуждается, но нам, к сожалению, эта информация недоступна.
так вот и я говорю - с _нами_ делятся неохотно :) наверное в закрытой ветке бетатестеров много интересного обсуждается, но нам, к сожалению, эта информация недоступна.
Опять же - невпопад, Mishel не является бета-тестером. По поводу экспорта мы переписываемся лично с теми пользователями, которые в состоянии сформулировать свои требования. Об этом в свое время было здесь объявлено, и все, кто хотел, откликнулись. От них же мы получили полезный фидбэк (за что им наша искренняя благодарность) и на основании этого фидбэка будут внесены некоторые изменения в версию 1.1. Зачем делиться информацией с теми, кто интереса не проявил?
2 Dmut - с нами делятся - и это главное !
А чем не поделятся - сами раскопаем ;)
Зато теперь будем делать публично, а не в личной переписке...
...Командир ЦПВЛ - сотрудник Eagle Dynamics :D
Командир ЦПВЛ - сотрудник Eagle Dynamics, он же скрипт-программа, разработанная в ED и встроенный в код LOckOn :D
(По мотифам х\ф "Матрица")
Провёл такой эксперимент с данными экспорта: фиксировал динамику разгона пустого Су-27 (20% топлива, полная масса 17 880 кг) в безветренную погоду по ВПП на шасси (что уже само по себе весело).
Закрылки подняты, РУД резко на ПФ, тормоза отпустил после начала движения, РУС в нейтрали, триммирования нет.
Результаты в файле Excel. Параметры пересчитаны в международную систему единиц (кг, м, с)
Анализировал изменение истинной воздушной скорости (в условиях опыта она равна скорости относительно земли). По кривой разгона видно, что движение практически равноускоренное до скорости около 200 м/с (700 км/ч), затем снижение продольного ускорения. Полоса кончилась на скорости 850 км/ч Шасси не отлетели, но вибрация будь здоров.
Тяга достигла максимума на 8 секунде, с этого момента можно оценить динамику изменения силы лобового сопротивления при росте скорости.
Сила лобового сопротивления рассчитана как разность между тягой всей силовой установки на ПФ (по 125 кН каждый АЛ-31Ф) за вычетом результирующей разгоняющей силы, которая в свою очередь есть сумма сил тяги и сопротивления (сила сопротивления отрицательна).
Как видно из графика, в диапазоне скоростей 170 – 850 км/ч сопротивление растёт линейно, но до 570 км/ч с одним угловым коэффициентом, а при больших скоростях с другим, несколько быстрее. Ну в общем много интересного тут, например на скорости 250 км/ч на преодоление силы сопротивления с выпущенными шасси тратится 5 тонн тяги…
Интересно сравнить показатели с выпущенными закрылками и тормозным щитком, только с закрылками придётся взлетать.
И вопросы разработчикам:
1) По какому принципу выбирается момент времени, в который LUA регистрирует значения параметров? Промежутки времени между измерениями не равны. Кривые ускорения и сил имеют поэтому такие флуктуации. Видно, что есть некое среднее значение, и какие-то отклонения, причём равной амплитуды в +и -. Типа шум резисторов и потенциометров в регистраторе что ли?
2) Учитывается ли в модели трение шасси о ВПП?
И вопросы разработчикам:
1) По какому принципу выбирается момент времени, в который LUA регистрирует значения параметров? Промежутки времени между измерениями не равны. Кривые ускорения и сил имеют поэтому такие флуктуации. Видно, что есть некое среднее значение, и какие-то отклонения, причём равной амплитуды в +и -. Типа шум резисторов и потенциометров в регистраторе что ли?
По этому моменту есть уточняющий вопрос - в какой функции у тебя все это записывается? Если при отрисовке каждого кадра - то ФПС-то плавает ;)
Валерий отвечал вот здесь:
http://www.sukhoi.ru/forum/showpost.php?p=460445&postcount=7
Достаточно прочитать комментарии внутри функции LuaExportActivityNextEvent(t). Эта функция специально написана для того, чтобы можно было из скрипта планировать моменты модельного времени, когда она вызывается.
По какому принципу выбирается момент времени, в который LUA регистрирует значения параметров? Промежутки времени между измерениями не равны. Кривые ускорения и сил имеют поэтому такие флуктуации. Видно, что есть некое среднее значение, и какие-то отклонения, причём равной амплитуды в +и -. Типа шум резисторов и потенциометров в регистраторе что ли?
Данные снимаются в момент обращения. Если это производится в функции, которая вызывается на каждом кадре, то времена определяются случайным раскладом кадров во времени. Если нужно получать данные с фиксированным шагом модельного времени, то пользуйтесь функцией LuaExportActivityNextEvent() и добавляйте к tNext значение этого шага.
спасибо Mishel, сами разработчики почему-то не охотно делятся информацией о своём детище.
Наверное, им просто некогда. А то, что я привёл - выявлено с использованием открытых данных (export.lua, http://www.lua.org/) и некоторых уточнений в личной переписке с разработчиками, что также доступно всем, кого интересует экспорт.
Учитывается ли в модели трение шасси о ВПП?
Конечно, иначе самолет не останавливался бы без тормоза даже на малой скорости.
Конечно, иначе самолет не останавливался бы без тормоза даже на малой скорости.
А сыпучесть грунта ? ;)
Шутка, просто шутка :D
ЗЫ. Обчитался ветки про Т-72 :p
Lemon Lime
08.10.2004, 21:29
А катапультирование "по команде" в 1.02 возможно?
А катапультирование "по команде" в 1.02 возможно?
Команда Ctrl-E-E-E подойдет ? ;)
Опять глупо шучу :D
А на самом деле практического смысла этого я пока не вижу.
Для этого надо уметь определять момент, что по доступным нам параметрам это необходимо...
Хотя если скорость<180, Угол атаки >20 => это штопор, если высота<2000, то по Уставу - КАТАПУЛЬТИРУЙСЯ !!!
An.Petrovich
09.10.2004, 00:41
Провёл такой эксперимент...
Решпект! :cool:
Удачи! :)
An.Petrovich, =103= ЦПВЛ
Lemon Lime
09.10.2004, 11:47
Команда Ctrl-E-E-E подойдет ? ;)
Опять глупо шучу :D
А на самом деле практического смысла этого я пока не вижу.
Для этого надо уметь определять момент, что по доступным нам параметрам это необходимо...
Хотя если скорость<180, Угол атаки >20 => это штопор, если высота<2000, то по Уставу - КАТАПУЛЬТИРУЙСЯ !!!
Это в жизни 2000. А в игре можно и на 100 поставить. Или высота=мало, вертикальная скорость=минус_много
Данные снимаются в момент обращения. Если это производится в функции, которая вызывается на каждом кадре, то времена определяются случайным раскладом кадров во времени...
Это понятно! Я-то о другом совсем...
По графику продольного ускорения видно, что конечно-разностный аналог производной скорости по времени, расчитанный по КАЖДОМУ моменту обращения функции к программе, растёт не плавно от шага к шагу, а дискретно, причем то больше , то меньше, вот и получаем те самые скачки продольного ускорения.
Это хорошо видно при укрупнении масштаба приведённого мной рисунка 1, т.е., на каждом отрезке модельного времени своё значение углового коэффициента (ускорения), а1>a2<a3.
Это никак не связано с выбором самих моментов обращения, а означает что: 1) либо движение модели на малых временных отрезках происходит неравномерными скачками, либо 2) что возвращаемые функцией значения скорости и времени не соответствуют друг другу, что есть баг.
[...]
3. На внешних видах (F2, F3 и т.п.) функции: LoGetADIPitchBankYaw(), LoGetIndicatedAirSpeed(), LoGetVerticalVelocity() - возвращают значения nil.
[...]
Небольшая поправка по п.3.
Глюк с возвратом nil оказался нестабильным. Сейчас решил снова проверить - не могу его вызвать повторно, хотя пару месяцев назад получалось. Так и не понял условий его возникновения. Но в любом случае эти функции из п.3 неюзабельны при включении внешних видов, так как возвращаемые ими значения стабильно "замерзают" с момента перехода на внешний вид и до момента перехода обратно на вид "F1".
Думаю пора поднять тему.
Итак вопрос - в демке LUA уже поддерживается в полном объеме ?
нет, из демки экспортные скрипты вырезаны.
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot