Квадрокоптер и "Хищник и жертва"

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

Квадрокоптер

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

Пока готовил ролик, нашёл у себя красивую ошибку. Моменты от винтов считались формулой, написанной руками, и в ней были переставлены оси. Аппарат при этом отлично летал: микшер ошибался ровно так же, и контур замкнулся сам на себя в собственной неверной системе координат. Сломана была связь между тем, что видит зритель, и тем, что делает модель - подсвеченные тягой винты не соответствовали тому, куда кренится рама. Такое не ловится ни глазами, ни аргументом «оно же летает». Теперь моменты суммируются прямо из таблицы положений винтов - из той же, по которой рендер рисует лучи, так что разойтись им больше негде.

Хищник и жертва

Классические циклы Лотки–Вольтерры, но не из двух уравнений, а из отдельных животных: трава растёт, стада её едят, хищники охотятся на стада. Фазовый портрет рисуется живьём, и петля на нём не заложена - она получается.

Отсюда честная неприятность, о которой учебник обычно молчит. Замкнутые орбиты Лотки–Вольтерры нейтрально устойчивы: любое возмущение навсегда переводит систему на другую орбиту, и ничто не тянет её обратно. А у отдельных животных возмущения есть всегда - рождения и смерти случайны. Поэтому траектория рано или поздно задевает ноль, и ноль поглощающий: из вымирания система не возвращается. Так что галочка «подпитка миграцией» в панели - это не украшение. Без неё модуль показывает не равновесие, а то, сколько оно продержится. Выключите и посмотрите.

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

2