Поток: САУ-231
Лекция 1: Основы системного анализа
НЕДЕЛЯ 1: ВВЕДЕНИЕ В СИСТЕМНЫЙ АНАЛИЗ

Лекция: Основы системного анализа в робототехнике

Изучение базовых принципов системного подхода для проектирования и анализа робототехнических систем

1.5 часа
1
Основы системного анализа в робототехнике
1.5 часа
Лекция
+
Блок 1: Понятие системы в робототехнике

1. Что такое система? ⚙️

Определение системы:

Система — совокупность взаимосвязанных элементов, образующих целостность и выполняющих определённую функцию.

Модель "Вход-Процесс-Выход" (IPO):

Вход
Процесс
Выход

Ключевые свойства систем:

СвойствоОпределениеПример LFR
ЦелостностьСистема работает как единое целоеРобот движется согласованно
ЭмерджентностьСвойства ≠ сумме свойств элементовДатчики по отдельности не следят за линией
ИерархичностьПодсистемы и надсистемыДатчик → блок управления → робот
Блок 2: Системный подход

2. Системный подход к решению инженерных задач ????️

Системный подход:

Методология исследования и проектирования, основанная на представлении объекта как системы.

Декомпозиция — разбиение сложной задачи на подзадачи.

Критерии качества системы:

КритерийОпределение
БыстродействиеВремя реакции
ТочностьОтклонение от требуемого
НадёжностьВремя безотказной работы
Блок 3: Математические основы

3. Математические основы системного анализа ????

Состояние системы:

Минимальный набор переменных, описывающих "память" системы.

Уравнение состояния:
dx/dt = f(x, u, t)
где x — вектор состояния, u — управление.
Блок 4: Варианты проектов

4. Классификация и анализ вариантов роботов ????

ГруппаВариантыХарактеристикиКритические параметрыЦелевые показателиОсобенности
Группа 1:
Эконом
1: Складской экономm=1.2±0.1 кг, μ=0.28, бюджет ≤4500 рубСтоимостьv≥0.8 м/с, перерегулирование ≤20%Работа 16 ч/сут
8: Офисный логистm=2.1±0.2 кг, μ=0.32Энергоэффективностьv=0.5-0.7 м/с, КПД≥85%USB-C зарядка
Группа 2:
Точные
2: Лабораторный точникm=0.25±0.05 кг, μ=0.55Точность ±2 ммv=0.3-0.4 м/с, перерегулирование ≤5%Чистая комната
5: Медицинский курьерm=1.8±0.2 кг, μ=0.42Шум ≤40 дБv=0.7-0.9 м/с, вибрации ≤0.1gСтерильность
9: Учебный тренажёрm=0.9±0.1 кг, μ=0.48, бюджет ≤8000 рубНаглядностьИзменение параметров "на лету"Открытый API
Группа 3:
Промышленные
3: Промышленный тяжеловесm=7.5±1.0 кг, μ=0.18Наработка ≥2000 чv≥0.6 м/с, тяга ≥50 НIP54, -40..+40°C
6: Библиотечный помощникm=3.2±0.3 кг, μ=0.35Безопасностьv=0.4-0.6 м/с, тормозной путь ≤0.5 мМягкий бампер
7: Строительный инспекторm=4.5±0.5 кг, μ=0.25-0.65Всепогодность -20..+50°Cv≥0.8 м/с, запас хода ≥4 чСтабилизация
Группа 4:
Экстремальные
4: Соревновательный гонщикm≤0.8 кг, μ=0.72v≥2.5 м/сВремя круга ≤8 с, перегрузки до 3gАэродинамика
10: Аэропортный гидm=5.8±0.4 кг, μ=0.38Наработка ≥5000 чv=0.4-1.2 м/с, 24/7Crowd avoidance
11: Сельскохозяйственныйm=2.8±0.3 кг, μ=0.22-0.80Влажность 100%v=0.2-0.5 м/с, автономность ≥12 чМойка давлением
Примеры анализа вариантов
Пример 1: Вариант 1 "Складской эконом"

Масса: 1.2 кг, μ: 0.28, v≥0.8 м/с, бюджет ≤4500 руб.

Сила трения: F_тр = μ·m·g = 0.28·1.2·9.81 ≈ 3.3 Н.
Необходимая мощность: P = F·v = 3.3·0.8 ≈ 2.6 Вт.

Пример 2: Вариант 4 "Соревновательный гонщик"

Центростремительное ускорение на повороте: a = v²/R. При v=2.5 м/с, R=0.5 м: a≈12.5 м/с² ≈1.3g.

Совет: Если делать, сделается!
Задание к следующему занятию

Создайте папку проекта со следующими файлами:

.m
variant_parameters.m
Параметры вашего варианта
.slx
lfr_model.slx
Simulink модель динамики
Лекция 2: Расширенные модели динамики
НЕДЕЛЯ 2: РАСШИРЕННЫЕ МОДЕЛИ ДИНАМИКИ

Лекция 2: Расширенные модели динамики для всех групп роботов

Учёт энергопотребления, шумов, тепла, препятствий и других требований ТЗ

1.5 часа
2
Расширенные модели динамики
1.5 часа
Лекция
+
1. Единый словарь переменных и ограничений

ФИЗИЧЕСКИЕ ПЕРЕМЕННЫЕ СОСТОЯНИЯ

СимволВеличинаЕдиница измерения
$t$Времяс
$v$Линейная скорость роботам/с
$\omega$Угловая скорость колесарад/с
$\theta$Угол поворота колесарад
$x$Пройденный путьм
$i$Ток двигателяА
$U$Напряжение на двигателеВ
$T_m$Температура двигателя°C
$P_{el}$Электрическая мощностьВт
$P_{mech}$Механическая мощностьВт
$F_x$Сила тяги на колёсахН
$F_r$Сила сопротивления качениюН
$F_a$Сила аэродинамического сопротивленияН
$F_g$Сила сопротивления уклонуН
$F_{step}$Сила преодоления препятствияН
$F_{obs}$Сила от бампера/препятствияН
$F_b$Тормозная силаН
$F_{ext}$Внешняя нагрузка (обобщённая)Н
$N$Нормальная реакция опорыН

◆ ПАРАМЕТРЫ РОБОТА И ДВИГАТЕЛЯ

СимволВеличинаЕдиница измерения
$m$Масса роботакг
$m_{load}$Масса грузакг
$J$Момент инерции ротора + колесакг·м²
$r$Радиус колесам
$n$Передаточное число редуктора
$\eta$КПД редуктора
$k_m$Постоянная момента двигателяН·м/А
$k_e$Постоянная противо-ЭДСВ·с/рад
$R$Сопротивление обмоткиОм
$c_r$Коэффициент сопротивления качению
$\mu$Коэффициент сцепления
$C_x$Коэффициент аэродинамического сопротивления
$A$Лобовая площадьм²
$\rho$Плотность воздухакг/м³
$g$Ускорение свободного падениям/с²
$\alpha$Угол уклонарад
$h$Высота препятствиям

ОГРАНИЧЕНИЯ ТЗ (ЦЕЛЕВЫЕ ПОКАЗАТЕЛИ)

СимволВеличинаЕдиница измерения
$v_{max}$Максимальная скоростьм/с
$v_{min}$Минимальная скоростьм/с
$a_{max}$Максимальное ускорением/с²
$s_{brake}$Тормозной путьм
$\sigma_{pos}$Точность позиционированиямм
$OS$Перерегулирование%
$t_s$Время установленияс
$L_p$Уровень звукового давлениядБ
$a_{vib}$Уровень вибраций$g$
$P_{max}$Максимальная потребляемая мощностьВт
$\eta_{min}$Минимальный КПД%
$T_{max}$Максимальная температура°C
$MTBF$Наработка на отказч
$t_{op}$Время автономной работыч
$t_{charge}$Время зарядкимин
$IP$Степень пылевлагозащиты
$C_{max}$Максимальная стоимостьруб
2. Базовая модель АТТ (повторение)
Уравнение движения: $$m\frac{dv}{dt} = F_x - F_r$$
Электромеханика: $$F_x = \frac{\eta n k_m}{R} U - \frac{\eta n^2 k_e k_m}{R} v$$ $$i = \frac{U - k_e \omega}{R}, \quad \omega = \frac{n v}{r}$$
Сила сопротивления качению: $$F_r = c_r m g$$
Это минимальная модель, которая работает для всех вариантов. Но для выполнения требований ТЗ её нужно расширять дополнительными уравнениями.
3. Специализированные модели по группам вариантов
ГРУППА 1: ЭКОНОМ-РЕШЕНИЯ
Вариант 1: Складской эконом Вариант 8: Офисный логист

Ключевые особенности ТЗ:

  • Вар.1: бюджет ≤4500 руб, v≥0.8 м/с, работа 16 ч/сут
  • Вар.8: энергопотребление ≤15 Вт, КПД ≥85%, зарядка USB-C

Модель динамики:

$$m\frac{dv}{dt} = F_x - F_r$$

Добавление модели энергопотребления (для вар.8):

$$P_{el} = U \cdot i + P_{const}$$ $$i = \frac{U - k_e \omega}{R}$$ $$P_{mech} = F_x \cdot v = \eta \cdot P_{el}$$

Ограничения:

$$\text{Вар.1: } v \geq 0.8 \text{ м/с}, \quad OS \leq 20\%, \quad t_{op} \geq 16 \text{ ч}$$ $$\text{Вар.8: } P_{el} \leq 15 \text{ Вт}, \quad \eta \geq 0.85, \quad 0.5 \leq v \leq 0.7 \text{ м/с}$$
Что добавляется в Simulink:
  • Блок расчёта тока i = (U - k_e·ω)/R
  • Блок мощности P_el = U·i
  • Сравнение с лимитами (Display/Scope)
ГРУППА 2: ВЫСОКОТОЧНЫЕ
Вариант 2: Лабораторный точник Вариант 5: Медицинский курьер Вариант 9: Учебный тренажёр

Ключевые особенности ТЗ:

  • Вар.2: точность ±2 мм, перерегулирование ≤5%, пылезащита
  • Вар.5: шум ≤40 дБ, вибрации ≤0.1g, стерильность
  • Вар.9: изменение параметров "на лету", стоимость ≤8000 руб

Модель динамики (базовая):

$$m\frac{dv}{dt} = F_x - F_r$$

Модель акустического шума (для вар.5):

$$L_p = 20 \log_{10}\left(\frac{A}{A_0}\right)$$ $$A \propto \left|\frac{di}{dt}\right| + \left|\frac{d\omega}{dt}\right| + A_{cogging}(\theta)$$ $$\left|\frac{di}{dt}\right| \leq \beta_{\max} \quad \text{(ограничение для шума)}$$

Нестационарная модель (для вар.9):

$$m(t), \quad k_m(t), \quad k_e(t), \quad R(t), \quad c_r(t) \quad \text{— изменяемы в реальном времени}$$ $$F_{ext}(t) \quad \text{— имитация ошибок студента}$$

Ограничения:

$$\text{Вар.2: } \sigma_{pos} \leq \pm 2 \text{ мм}, \quad OS \leq 5\%, \quad t_s \leq 1.5 \text{ с}$$ $$\text{Вар.5: } L_p \leq 40 \text{ дБ}, \quad a_{vib} \leq 0.1g, \quad t_{op} \geq 6 \text{ ч}$$ $$\text{Вар.9: } C_{max} \leq 8000 \text{ руб}, \quad \text{Открытый API}$$
Что добавляется в Simulink:
  • Блоки производных di/dt, dω/dt для расчёта шума
  • Блоки с переменными параметрами (Gain с внешним сигналом)
  • Блоки ограничения скорости нарастания тока (Rate Limiter)
ГРУППА 3: ПРОМЫШЛЕННЫЕ
Вариант 3: Промышленный тяжеловес Вариант 6: Библиотечный помощник Вариант 7: Строительный инспектор

Ключевые особенности ТЗ:

  • Вар.3: тяга ≥50 Н, наработка ≥2000 ч, работа при ±40°C
  • Вар.6: тормозной путь ≤0.5 м, безопасность, мягкий бампер
  • Вар.7: проходимость препятствий до 5 см, всепогодность

Модель динамики с дополнительными силами:

$$(m + m_{load})\frac{dv}{dt} = F_x - F_r - F_g - F_{step} - F_{obs}$$

️ Тепловая модель (для вар.3):

$$T_m = T_{amb} + R_{th} \cdot i^2 R$$ $$T_m \leq T_{max}, \quad MTBF \geq 2000 \text{ ч}$$

Модель торможения (для вар.6):

$$F_b = \frac{k_m}{R} U_{brake} + \frac{k_e k_m}{R} \omega \quad \text{(рекуперация)}$$ $$s_{brake} = \frac{v^2}{2a_{brake}} \leq 0.5 \text{ м}$$

Модель преодоления препятствия (для вар.7):

$$F_{step} = m g \left[1 - \left(1 - \frac{h}{r}\right)^2\right]^{1/2}, \quad h \leq 0.05 \text{ м}$$

Ограничения:

$$\text{Вар.3: } F_x \geq 50 \text{ Н}, \quad SM \geq 6 \text{ дБ}, \quad IP54$$ $$\text{Вар.6: } s_{brake} \leq 0.5 \text{ м}, \quad F_{obs} \text{ — мягкий бампер}$$ $$\text{Вар.7: } h_{max} = 0.05 \text{ м}, \quad T_{amb} = -20..+50°C$$
Что добавляется в Simulink:
  • Тепловая модель (интегратор температуры)
  • Модель торможения с рекуперацией
  • Сила F_step как функция высоты препятствия
⚡ ГРУППА 4: ЭКСТРЕМАЛЬНЫЕ
Вариант 4: Соревновательный гонщик Вариант 10: Аэропортный гид Вариант 11: Сельскохозяйственный обходчик

Ключевые особенности ТЗ:

  • Вар.4: скорость ≥2.5 м/с, перегрузки до 3g, время круга ≤8 с
  • Вар.10: наработка ≥5000 ч, crowd avoidance, адаптивная скорость
  • Вар.11: влажность 20-100%, химстойкость, переменное μ

Модель динамики с учётом аэродинамики и сцепления:

$$m\frac{dv}{dt} = F_x - F_r - F_a - F_g$$ $$F_a = \frac{1}{2} \rho C_x A v^2$$

⚠️ Модель срыва сцепления (recovery) для вар.4:

$$F_x > \mu N \quad \Rightarrow \quad \text{буксование} \quad \Rightarrow \quad \text{алгоритм recovery}$$ $$N = (m + m_{load})g \cos \alpha$$

Модель crowd avoidance (для вар.10):

$$v_{set} = f(\rho_{people})$$ $$F_{obs}(d) = \begin{cases} k_{soft}(d_0 - d), & d \leq d_0 \\ 0, & d > d_0 \end{cases}$$

Модель переменного сцепления (для вар.11):

$$\mu = \mu_0 + k_{\mu} \cdot RH$$ $$\mu = 0.22..0.80 \quad \text{в зависимости от влажности}$$

Ограничения:

$$\text{Вар.4: } v \geq 2.5 \text{ м/с}, \quad a \leq 3g, \quad P_{el} \leq 30 \text{ Вт}$$ $$\text{Вар.10: } MTBF \geq 5000 \text{ ч}, \quad v = 0.4..1.2 \text{ м/с (адаптивная)}$$ $$\text{Вар.11: } RH = 20..100\%, \quad \mu = 0.22..0.80, \quad t_{op} \geq 12 \text{ ч}$$
Что добавляется в Simulink:
  • Аэродинамическая сила F_a (блок Math Function: u²)
  • Логика срыва сцепления (Switch, Compare)
  • Переменное μ как функция влажности
  • Сила отталкивания от людей F_obs(d)
4. Методика расчёта недостающих параметров
В ТЗ нет многих параметров, но их нужно задать для моделирования!

ШАГ 1. Диаметр колеса $r$

$$\omega_{max} = \frac{v_{max}}{r} \quad \text{[рад/с]}$$ $$n_{max} = \frac{v_{max}}{2\pi r} \cdot 60 \quad \text{[об/мин]}$$

Инженерное правило: задаём номинальные обороты двигателя $\omega_{nom} \approx 300$ рад/с (≈3000 об/мин) и подбираем $n$ и $r$:

$$r = \frac{v_{max}}{\omega_{nom}} \cdot n$$

Пример для гонщика (вар.4, v=2.5 м/с):

При n=1: $r = 2.5/300 = 0.0083$ м (8.3 мм) — слишком мало!
Берём n=10: $r = 2.5/(300/10) = 0.083$ м = 83 мм — реалистично.

⚙️ ШАГ 2. Требуемая сила тяги $F_x$

$$F_x = F_r + F_a + F_g + ma$$

Для горизонтали без аэродинамики:

$$F_x = c_r m g + m \cdot \frac{v_{max}}{t_{acc}}$$

Время разгона $t_{acc}$ если не задано — принимаем 1–2 с.

Пример для тяжеловеса (вар.3, m=7.5+20=27.5 кг, v=0.6 м/с):

$F_r = 0.02 \cdot 27.5 \cdot 9.81 \approx 5.4$ Н
$a = 0.6/2 = 0.3$ м/с², $ma = 8.25$ Н
$F_x \approx 14$ Н, но ТЗ требует $F_x \geq 50$ Н — значит, нужно учесть уклон или требование ТЗ.

ШАГ 3. Момент на колесе и двигателе

$$\tau_{wheel} = F_x \cdot r$$ $$\tau_{motor} = \frac{\tau_{wheel}}{n \cdot \eta}$$

Пример: $F_x = 50$ Н, $r = 0.1$ м → $\tau_{wheel} = 5$ Н·м
При n=30, η=0.7: $\tau_{motor} = 5/(30·0.7) \approx 0.24$ Н·м — реалистично для коллекторного мотора.

ШАГ 4. Ток и напряжение

$$i = \frac{\tau_{motor}}{k_m}, \quad U = iR + k_e\omega$$

$k_m$ берём из каталога моторов (0.01–0.05 для малых, 0.1–0.3 для мощных).
Подбираем напряжение питания (12В, 24В, 48В) под доступные драйверы.

✅ ШАГ 5. Проверка ограничений

  • По сцеплению: $F_x \leq \mu m g$ — иначе буксует
  • По току: $i \leq i_{max}$ двигателя
  • По мощности: $P = Ui \leq P_{max}$ (если задано)
  • По теплу: $i^2 R \leq \frac{T_{max}-T_{amb}}{R_{th}}$

ИТОГ: таблица выбранных параметров для своего варианта

ПараметрОткуда берём
$m$ТЗ
$r$Рассчитали из оборотов и редуктора
$c_r$Таблица по покрытию
$k_m, k_e, R$Каталог моторов (подобран под $F_x$, $\tau$)
$n$, $\eta$Подобраны под $\omega_{motor}$
$U$Стандарт (12/24/48 В)
5. Единый алгоритм работы для любого варианта
  1. ВЫДЕЛИТЬ из ТЗ: $m$, $v_{max}$, $\mu$, особые требования
  2. НАЗНАЧИТЬ диаметр колеса $r$ из условия 3000 об/мин с редуктором
  3. РАССЧИТАТЬ $F_x$ по уравнению движения + запас
  4. ВЫЧИСЛИТЬ $\tau_{wheel} = F_x \cdot r$
  5. ВЫБРАТЬ редуктор $n$, чтобы $\tau_{motor}$ попало в типовой диапазон (0.05–0.5 Н·м)
  6. ВЫБРАТЬ мотор из каталога по $\tau_{motor}$, $\omega_{motor}$, $P$
  7. ПРОВЕРИТЬ $i$, $P$, $T$, $\mu$
  8. СОБРАТЬ Simulink-модель с электромеханикой и динамикой
  9. ДОБАВИТЬ специфику (шум, тепло, препятствия) после отладки базовой модели
Главный принцип: сначала базовая модель — потом надстройки под требования ТЗ!
6. Пример расчёта: Вариант 1 "Складской эконом"

ТЗ: m = 1.2 кг, v = 0.8 м/с, μ = 0.28, бюджет моторов ≤ 1500 руб

ШАГ 1. Диаметр колеса

$$\omega_{nom} = 300 \text{ рад/с}, \quad n = 10 \Rightarrow r = \frac{0.8}{300/10} = 0.027 \text{ м} = 27 \text{ мм}$$

ШАГ 2. Сила тяги

$$F_r = c_r m g = 0.02 \cdot 1.2 \cdot 9.81 \approx 0.235 \text{ Н}$$ $$a = \frac{0.8}{1.5} = 0.533 \text{ м/с²}, \quad ma = 0.64 \text{ Н}$$ $$F_x = 1.2 \cdot (0.235 + 0.64) \approx 1.05 \text{ Н}$$

ШАГ 3. Моменты

$$\tau_{wheel} = 1.05 \cdot 0.027 = 0.0284 \text{ Н·м}$$ $$\tau_{motor} = \frac{0.0284}{10 \cdot 0.7} = 0.00406 \text{ Н·м} = 4.06 \text{ мН·м}$$

ШАГ 4. Выбор мотора (из таблицы)

Берём мотор N20: $k_m = 0.012$ Н·м/А, $k_e = 0.012$ В·с/рад, $R = 5$ Ом, $U = 12$ В

$$i = \frac{0.00406}{0.012} = 0.338 \text{ А}$$ $$\omega = \frac{n v}{r} = \frac{10 \cdot 0.8}{0.027} = 296 \text{ рад/с}$$ $$U = iR + k_e\omega = 0.338 \cdot 5 + 0.012 \cdot 296 = 1.69 + 3.55 = 5.24 \text{ В} < 12 \text{ В}$$

ШАГ 5. Проверка сцепления

$$\mu m g = 0.28 \cdot 1.2 \cdot 9.81 = 3.30 \text{ Н} > F_x = 1.05 \text{ Н} \quad \text{— OK}$$

ШАГ 6. Расчёт коэффициентов для Simulink

$$k_1 = \frac{\eta n k_m}{R} = \frac{0.7 \cdot 10 \cdot 0.012}{5} = 0.0168 \text{ Н/В}$$ $$k_2 = \frac{\eta n^2 k_e k_m}{R} = \frac{0.7 \cdot 100 \cdot 0.012 \cdot 0.012}{5} = 0.00202 \text{ Н·с/м}$$
Результат: параметры для Simulink: m=1.2, k1=0.0168, k2=0.00202, Fr=0.235, U=12.
Выводы по лекции
  • Базовая модель $m\dot{v} = F_x - F_r$ подходит для всех, но не отражает специальных требований ТЗ.
  • Каждая группа вариантов требует дополнительных уравнений: энергопотребление, шум, тепло, препятствия и т.д.
  • Недостающие параметры ($r$, $n$, $k_m$, $k_e$, $R$) не угадываются, а рассчитываются из физических ограничений.
  • В Simulink сначала собираем базовую модель, затем добавляем специфические блоки.
Лекция 3: Сенсорные системы, шумы и люфты
НЕДЕЛЯ 3: СЕНСОРЫ, ШУМЫ, ЛЮФТЫ И РЕГУЛЯТОРЫ

Лекция 3: Сенсорные системы, шумы и люфты в динамике

Моделирование датчиков, помех, механических люфтов и введение в П-регулятор

1.5 часа
3
Сенсоры, шумы, люфты, П-регулятор
1.5 часа
Лекция
+
1. Модели датчиков для LFR

ИК-датчики линии

Принцип работы:

ИК-излучение отражается от поверхности. Чёрная линия поглощает свет, белый фон отражает. Напряжение на выходе пропорционально отражающей способности.

Передаточная характеристика (идеальная): $$U_{out} = U_{max} \cdot \left(1 - \frac{|x|}{w/2}\right), \quad |x| \leq w/2$$ где $x$ — отклонение от центра линии, $w$ — ширина линии.
Реальная характеристика (с учётом нелинейности): $$U_{out} = \frac{U_{max}}{1 + (x/x_0)^2}$$

Энкодеры

Модель с квантованием:

Энкодер выдаёт импульсы, соответствующие углу поворота. В Simulink моделируется как квантователь с шагом $\Delta \theta = 2\pi / N$, где $N$ — число импульсов на оборот.

$$\theta_{measured} = \Delta \theta \cdot \text{round}\left(\frac{\theta}{\Delta \theta}\right)$$ $$\omega_{measured} = \frac{\Delta \theta}{\Delta t} \cdot \text{количество импульсов за шаг}$$

Гироскопы

Модель гироскопа:

Измеряет угловую скорость. Основные погрешности: шум, дрейф нуля, температурная зависимость.

$$\omega_{measured} = \omega_{true} + b + n(t) + \alpha_T (T - T_0)$$ где $b$ — постоянное смещение (bias), $n(t)$ — шум, $\alpha_T$ — температурный коэффициент.
Пример параметров для учебного гироскопа MPU6050:
  • Чувствительность: 131 LSB/°/с
  • Шум: 0.05 °/с/√Гц
  • Дрейф: 0.1 °/с после прогрева
2. Моделирование шумов и помех

Типы шумов в Simulink

Тип шумаМодельБлок Simulink
Гауссовский белый шум$n(t) \sim \mathcal{N}(0, \sigma^2)$Random Number
Импульсные помехи$p(t) = A \cdot \delta(t-t_k)$Poisson + Pulse Generator
Дрейф нуля$b(t) = b_0 + \beta \cdot t$Ramp + Constant
Температурный дрейф$b(T) = \alpha_T (T - T_0)$Gain (с входом T)
Битые пиксели$U_{out} = 0$ при $x \in [x_1, x_2]$Switch + Dead Zone
Отношение сигнал/шум (SNR): $$SNR_{дБ} = 20 \log_{10}\left(\frac{U_{signal}}{U_{noise}}\right)$$

Выбор уровня шума под ТЗ

Для высокоточных вариантов (2,5,9) требования к шуму жёсткие. Рекомендуемые значения:

ВариантДопустимый шум$\sigma$ (ИК-датчик)
2 (Лабораторный точник)±2 мм0.02 от макс. сигнала
5 (Медицинский курьер)шум ≤40 дБ0.03 от макс. сигнала
9 (Учебный)наглядность0.05 (можно больше)
Пример модели ИК-датчика с шумом:
x ──►[f(x)]──► идеальный сигнал ──►(∑)──► U_out
                                   ▲
                                   │
                              [Random Number] σ=0.02
                                   │
                              [Poisson] (импульсы)
                                
3. Люфты в механической системе

⚙️ Модель люфта (backlash)

Люфт в редукторе:

Зазор между зубьями передач, при котором изменение направления движения не сразу передаётся на выходной вал.

Модель люфта в Simulink: $$\theta_{out} = \text{backlash}(\theta_{in}, \delta)$$ где $\delta$ — величина люфта в радианах (или градусах).

Блок Simulink: Backlash (Simulink/Discontinuities). Параметры:

  • Deadband width: $2\delta$ (полный размах)
  • Initial output: 0

Влияние люфта на точность

Для вариантов с высокими требованиями к точности (2,5,6) люфт критичен. Рекомендуемые значения по типу редуктора:

Тип редуктораЛюфт (угловые минуты)Люфт (рад)
Планетарный прецизионный5-10'0.0015-0.003
Прямозубый30-60'0.009-0.017
Червячный10-20'0.003-0.006
Косозубый15-30'0.004-0.009
Влияние люфта на позиционирование: $$\Delta x = \delta \cdot r \cdot n$$ где $r$ — радиус колеса, $n$ — передаточное число.
Пример для вар.2 (лабораторный точник):
Планетарный редуктор, люфт 10' = 0.003 рад, r=0.02 м, n=30
$\Delta x = 0.003 \cdot 0.02 \cdot 30 = 0.0018$ м = 1.8 мм
Это близко к требуемой точности ±2 мм — значит, люфт нужно учитывать!

Упругость колёс и подвески

Моделируется как пружина с жёсткостью $k$ и демпфером $c$:

$$F_{elastic} = k \cdot \Delta x + c \cdot \dot{\Delta x}$$

Влияет на колебания при резких ускорениях и торможениях.

4. П-регулятор для слежения за линией

️ Структура регулятора

Задача:

Удерживать робота на линии, управляя разностью скоростей левого и правого колеса.

      Ошибка e(t) = сигнал с датчиков (отклонение)
             │
             ▼
      [Kp] ──► Разность скоростей Δu
             │
             ▼
u_left  = u0 + Δu/2
u_right = u0 - Δu/2
                            
П-регулятор: $$\Delta u(t) = K_p \cdot e(t)$$ $$u_{left} = u_0 + \frac{\Delta u}{2}, \quad u_{right} = u_0 - \frac{\Delta u}{2}$$

Расчёт коэффициента Kp

Kp выбирается из условия устойчивости и желаемой скорости реакции.

Оценочная формула (для системы с моментом инерции J): $$K_p \approx \frac{J \cdot \omega_c}{k_m \cdot n \cdot \eta}$$ где $\omega_c$ — желаемая частота среза (рад/с), обычно 2-5 рад/с.

Более точный подбор — методом проб в Simulink:

  1. Начать с малого Kp (0.1-0.5)
  2. Увеличивать до появления колебаний
  3. Взять Kp = 0.5·Kp_критическое

Влияние шумов и люфтов на регулятор

  • Шумы вызывают высокочастотные колебания управления → нужно ограничивать Kp или добавлять фильтр
  • Люфт приводит к запаздыванию и может вызвать автоколебания
  • Рекомендация: при наличии люфта Kp выбирают в 2-3 раза меньше, чем для идеальной системы
Важно: П-регулятор не устраняет статическую ошибку. Для точного позиционирования (вар.2,5) потребуется ПИД-регулятор (следующая лекция).
Пример для вар.1:
J ≈ 0.002 кг·м², km=0.012, n=10, η=0.7
При ωc=3 рад/с: Kp ≈ 0.002·3/(0.012·10·0.7) = 0.071
Начинаем с Kp=0.07, увеличиваем до появления колебаний.
5. Что важно для разных групп вариантов
ГруппаКритичные эффектыЧто моделировать
1. ЭкономНизкая стоимостьПростые датчики (2-3 шт), большой шум, люфт
2. ВысокоточныеТочность, шумМного датчиков (8-12), малый шум, малый люфт, калибровка
3. ПромышленныеНадёжность, препятствияДатчики препятствий, люфт, упругость
4. ЭкстремальныеСкорость, сцеплениеБыстрые датчики, срыв сцепления, аэродинамика
Вывод: Модель датчиков, шумов и люфтов должна соответствовать требованиям ТЗ и группе варианта.
Ключевые формулы лекции
$$U_{IR}(x) = \frac{U_{max}}{1 + (x/x_0)^2}$$
$$\theta_{measured} = \Delta \theta \cdot \text{round}\left(\frac{\theta}{\Delta \theta}\right)$$
$$\omega_{measured} = \omega_{true} + b + n(t) + \alpha_T (T - T_0)$$
$$\theta_{out} = \text{backlash}(\theta_{in}, \delta)$$
$$\Delta x = \delta \cdot r \cdot n$$
$$\Delta u(t) = K_p \cdot e(t)$$
$$K_p \approx \frac{J \cdot \omega_c}{k_m \cdot n \cdot \eta}$$
Лекция 4: Интеграция моделей и анализ динамики разгона
НЕДЕЛЯ 4: ИНТЕГРАЦИЯ И АНАЛИЗ

Лекция 4: Интеграция моделей и анализ динамики разгона

Объединение всех усложнений в единую модель и верификация по ТЗ

1.5 часа
4
Интеграция моделей и анализ разгона
1.5 часа
Лекция
+
1. Что мы сделали за 3 недели
НеделяЛекцияПрактикаЧто добавили в модель
1Основы системного анализаЗнакомство с вариантомБазовые параметры, IPO-модель
2Расширенные модели динамикиРасчёт недостающих параметров, сборка расширенной моделиЭнергопотребление, шум, тепло, препятствия, аэродинамика и т.д.
3Сенсоры, шумы, люфты, П-регуляторМоделирование датчиков, реализация П-регулятораИК-датчики с шумами, энкодеры, люфт, обратная связь
Текущее состояние: у каждого студента есть модель, учитывающая:
  • Динамику с дополнительными силами (по группе варианта)
  • Датчики с шумами и люфтами
  • П-регулятор для слежения за линией
2. Интеграция всех компонентов в единую модель

️ Общая архитектура финальной модели

┌─────────────────────────────────────────────────────────────┐
│                      Входное воздействие                      │
│              (желаемая траектория / ступенчатый сигнал)       │
└─────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────┐
│                    Блок регулятора (П)                        │
│  e = U_ref - U_IR                                             │
│  Δu = Kp * e                                                  │
│  u_left = u0 + Δu/2, u_right = u0 - Δu/2                      │
└─────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────┐
│              Модель динамики (с усложнениями)                 │
│  • Два мотора с электромеханикой                              │
│  • Силы: Fr, Fa, Fg, F_step, F_obs (по варианту)             │
│  • Тепловая модель (по варианту)                              │
│  • Люфт в редукторе (Backlash)                                │
│  • Расчёт тока, мощности                                      │
└─────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────┐
│                    Модели датчиков                            │
│  • ИК-датчики (с шумами, выбросами)                          │
│  • Энкодеры (с квантованием)                                  │
│  • Гироскоп (с дрейфом) (опционально)                        │
└─────────────────────────────────────────────────────────────┘
                              │
                              └──────────► U_IR (обратная связь)
                            
Принцип интеграции:

Все дополнительные блоки должны быть параметризованы и включаться/отключаться без изменения структуры модели. Это позволит исследовать влияние каждого эффекта отдельно.

Рекомендации по структуре модели:

  • Используйте подсистемы (Subsystem) для каждого крупного блока (регулятор, динамика, датчики).
  • Выносите параметры в workspace через скрипт инициализации.
  • Для исследования влияния отдельных эффектов используйте Manual Switch или If-блоки.
  • Все сигналы, важные для анализа, выводите на Scope и в To Workspace.
Пример структуры в Simulink:
FINAL_MODEL/
├── init_script.m (загружает все параметры)
├── Reference (Constant / Signal Builder)
├── P_Controller (Subsystem)
├── Robot_Dynamics (Subsystem)
│   ├── Motors
│   ├── Forces (Fr, Fa, F_step...)
│   ├── Thermal (если есть)
│   └── Backlash
├── Sensors (Subsystem)
│   ├── IR_Array
│   ├── Encoders
│   └── Gyro
└── Scopes & To Workspace
                            
3. Анализ динамики разгона

Ключевые показатели разгона

ПоказательОбозначениеФормулаЕд. изм.
Время разгона до 90% скорости$t_{90}$$v(t_{90}) = 0.9 v_{max}$с
Время установления (5% коридор)$t_s$$|v(t) - v_{уст}| < 0.05 v_{уст}$ для $t > t_s$с
Перерегулирование$OS$$\frac{v_{max} - v_{уст}}{v_{уст}} \cdot 100\%$%
Установившаяся скорость$v_{уст}$$\lim_{t \to \infty} v(t)$м/с
Максимальное ускорение$a_{max}$$\max(\frac{dv}{dt})$м/с²
v(t)
│   ┌──────────────────── v_уст
│  ╱│
│ ╱ │
│╱  │
│   │
└───┴──────────────── t
   t90  ts
                            

Рис. 1. Характерные точки переходного процесса

Как измерить в Simulink

  1. Запустите симуляцию с достаточно большим временем (чтобы скорость вышла на установившийся режим).
  2. Используйте блоки To Workspace для сохранения $v(t)$ и $t$.
  3. В MATLAB после симуляции выполните скрипт анализа:
    % анализ разгона v_data = v.signals.values; % массив скорости t_data = v.time; % массив времени v_ss = v_data(end); % установившаяся скорость % время достижения 90% idx_90 = find(v_data >= 0.9*v_ss, 1, 'first'); t90 = t_data(idx_90); % перерегулирование v_max = max(v_data); OS = (v_max - v_ss)/v_ss * 100; % время установления (5% коридор) tol = 0.05*v_ss; idx_ts = find(abs(v_data - v_ss) > tol, 1, 'last'); if isempty(idx_ts) ts = 0; else ts = t_data(idx_ts + 1); end fprintf('t90 = %.2f с, ts = %.2f с, OS = %.1f%%, v_ss = %.2f м/с\n', t90, ts, OS, v_ss);
Важно: Для разных вариантов могут быть свои требования к этим показателям. Например, для вар.2 (точник) важен ts и OS, для вар.4 (гонщик) — t90.
4. Верификация соответствия требованиям ТЗ

✅ Таблица проверки для каждого варианта

ГруппаТребование ТЗКак проверитьКритерий
1. Экономv ≥ 0.8 м/с (вар.1)v_уст из анализа≥0.8
OS ≤ 20% (вар.1)OS из анализа≤20%
P_el ≤ 15 Вт (вар.8)Макс. мощность≤15
2. ВысокоточныеТочность ±2 мм (вар.2)max|e(t)| при слежении≤2 мм
L_p ≤ 40 дБ (вар.5)Расчёт шума≤40
ts ≤ 1.5 с (вар.2)ts из анализа≤1.5
3. ПромышленныеF_x ≥ 50 Н (вар.3)Сила тяги≥50
s_brake ≤ 0.5 м (вар.6)Тормозной путь≤0.5
h_step ≤ 0.05 м (вар.7)Преодоление препятствияУспех
4. Экстремальныеv ≥ 2.5 м/с (вар.4)v_уст≥2.5
MTBF ≥ 5000 ч (вар.10)Тепловая модельT ≤ T_max
μ = 0.22..0.80 (вар.11)Проверка сцепленияНет пробуксовки
Процедура верификации:
  1. Запустить модель в типовых режимах (разгон, движение по прямой, поворот, торможение).
  2. Для каждого режима измерить требуемые показатели.
  3. Сравнить с ТЗ.
  4. Если показатели не достигаются — вернуться к выбору компонентов или настройке Kp.
Пример для вар.2 (лабораторный точник):
Режим разгона: v_уст = 0.38 м/с (требование 0.3-0.4) ✓
                ts = 1.2 с (требование ≤1.5) ✓
                OS = 4% (требование ≤5%) ✓
Режим слежения: max ошибка = 1.8 мм (требование ±2 мм) ✓
Вывод: ТЗ выполняется.
                            
5. Сбор данных для отчёта

Какие данные нужно сохранить

Тип данныхРежим симуляцииЧто сохранять
РазгонСтупенчатое задание скоростиv(t), a(t), i(t), T(t) (если есть)
Движение по прямойПостоянная заданная скоростьv(t), ошибка слежения
ПоворотЗадание траектории с изгибомТраектория x(t), y(t), ошибка
ТорможениеСтупенчатое снижение заданияv(t), s_brake
Препятствие (если есть)Внешнее воздействиеv(t), F_step, факт преодоления

Использование блоков To Workspace

% Настройка блока To Workspace Variable name: v_data Save format: Structure With Time Decimation: 1 (сохранять все точки) Sample time: 0 (наследовать)

После симуляции данные будут доступны в workspace как структура:

v_data.time % массив времени v_data.signals.values % массив значений

Построение графиков для отчёта

% Пример построения графика скорости figure; plot(v_data.time, v_data.signals.values, 'b-', 'LineWidth', 1.5); xlabel('Время, с'); ylabel('Скорость, м/с'); title('Разгон робота'); grid on; saveas(gcf, 'acceleration.png');
Критерий готовности: у вас есть все графики и численные значения для заполнения отчёта.
Ключевые формулы лекции
$$t_{90} = \min\{t: v(t) \geq 0.9 v_{уст}\}$$
$$OS = \frac{v_{max} - v_{уст}}{v_{уст}} \cdot 100\%$$
$$t_s = \min\{t: |v(\tau) - v_{уст}| \leq 0.05 v_{уст} \ \forall \tau \geq t\}$$
$$e_{max} = \max_t |x_{ref}(t) - x(t)|$$
Лекция 5: Измерения и критерии оценки систем
НЕДЕЛЯ 5: КРИТЕРИИ ОЦЕНКИ

Лекция 5: Измерения и критерии оценки систем

Как оценить качество робототехнической системы? Метрики, шкалы, интегральные критерии, многокритериальность

1.5 часа
5
Измерения и критерии оценки систем
1.5 часа
Лекция
+
1. Зачем нужны измерения в системном анализе?
Проблема:

Как понять, хороший ли робот получился? Быстрый, но сбивается с маршрута — успех? Точный, но медленный — успех? Как сравнить два разных робота?

Ключевая идея: Чтобы оценить систему, нужно сначала определить критерии оценки — измеримые показатели, которые отражают, насколько хорошо система выполняет свою задачу.

Критерий оценки

Количественная характеристика, позволяющая сравнить различные варианты системы или оценить её соответствие требованиям.

  • Единичные критерии — один показатель (максимальная скорость)
  • Комплексные критерии — объединяют несколько показателей (интегральные критерии качества)
Пример для обсуждения: Робот-курьер в аэропорту (вариант 10). Что важнее: скорость доставки, тишина работы или надёжность? Как это измерить?
2. Типы измерительных шкал

Прежде чем измерять, нужно понять, как измерять. В системном анализе используются четыре типа шкал:

ШкалаЧто измеряетПример в робототехникеОперации
НоминальнаяПринадлежность к классуТип двигателя: коллекторный / бесколлекторный=, ≠
ПорядковаяСравнение "лучше-хуже"Рейтинг надёжности: 1, 2, 3 место>, <
ИнтервальнаяРазность значенийТемпература двигателя: 20°C, 40°C, 60°C+, −
ОтношенийПропорцииСкорость: 2 м/с в 2 раза быстрее 1 м/с×, ÷
Важно: Тип шкалы определяет допустимые математические операции. Нельзя сказать, что "коллекторный двигатель в 2 раза лучше бесколлекторного" — это номинальная шкала.
3. Метрики для оценки робототехнических систем

⚡ Быстродействие

МетрикаОпределениеФормула
Время разгона $t_{rise}$Время достижения 95% установившейся скорости$v(t_{rise}) = 0.95 \cdot v_{steady}$
Время установления $t_s$Время входа в 2% коридор$|v(t) - v_{steady}| \le 0.02 \cdot v_{steady}$
Постоянная времени $\tau$Время достижения 63.2% от $v_{steady}$$v(\tau) = 0.632 \cdot v_{steady}$

🎯 Точность

МетрикаОпределениеФормула
Статическая ошибка $e_{steady}$Разность между заданным и фактическим значением$e_{steady} = |v_{target} - v_{steady}|$
Перерегулирование $OS$Максимальное превышение над $v_{steady}$$OS = \frac{v_{max} - v_{steady}}{v_{steady}} \cdot 100\%$
v(t)
│   ┌──────────────────── v_steady
│  ╱│
│ ╱ │   OS = (v_max - v_steady)/v_steady * 100%
│╱  │
│   │
└───┴──────────────────── t
   t_rise  t_settling
                            

Рис. 1. Характерные точки переходного процесса

📊 Интегральные критерии качества

Оценивают поведение системы на всём интервале времени:

$$IAE = \int_{0}^{\infty} |e(t)| dt$$ — интегральная абсолютная ошибка
$$ISE = \int_{0}^{\infty} e^2(t) dt$$ — интегральная квадратичная ошибка (штрафует большие ошибки)
$$ITAE = \int_{0}^{\infty} t \cdot |e(t)| dt$$ — интегральная время-взвешенная ошибка (штрафует ошибки в конце процесса)
Аналогия: Представьте, что вы оцениваете работу курьера.
  • IAE — общее количество "неправильных шагов"
  • ISE — если курьер сильно ошибся, это "весит" больше
  • ITAE — если ошибка случилась под конец маршрута, это хуже, чем в начале
4. Формальная постановка: модель "Вход-Процесс-Выход"

Система описывается:

$$U(t) \xrightarrow{\text{система}} v(t), x(t)$$ $$m\frac{dv}{dt} = F(U, v, \text{параметры})$$

Критерии качества — это функционалы от выходных сигналов:

$$J = \Phi(v(t), x(t), \dots)$$

Например:

  • $J_1 = t_{rise}$ → минимизировать
  • $J_2 = OS$ → минимизировать
  • $J_3 = v_{steady}$ → максимизировать
5. Многокритериальность и Парето-оптимальность
Проблема:

Часто нужно одновременно улучшить несколько критериев, но они конфликтуют.

Пример: Чтобы робот ехал быстрее, нужно увеличить напряжение → растёт ток и нагрев двигателя.

Парето-оптимальность

Решение называется Парето-оптимальным, если нельзя улучшить один критерий, не ухудшив хотя бы один другой.

    v_steady ↑
         │
         │    ● A (быстро, но много энергии)
         │   ●
         │  ●   ● B (компромисс)
         │ ●
         │● C (медленно, но мало энергии)
         └────────────────────→ Энергия
                            

Рис. 2. Парето-фронт — линия компромиссных решений

6. Специфические критерии по группам вариантов
ГруппаВариантыКлючевые критерииОсобенности измерения
1. Эконом1, 8Скорость, бюджет, энергопотребление$P_{el} = U \cdot i + P_{const}$
2. Точные2, 5, 9Точность позиционирования, шум, вибрации$\sigma_{pos} \le \pm 2$ мм, $L_p \le 40$ дБ
3. Промышленные3, 6, 7Надёжность, тепловой режим, тормозной путь$MTBF$, $T_m \le T_{max}$, $s_{brake} \le 0.5$ м
4. Экстремальные4, 10, 11Скорость, аэродинамика, сцепление$v \ge 2.5$ м/с, $\mu = \mu_0 + k_\mu \cdot RH$
Для студентов, работающих в Simulink: Все эти критерии можно измерить, сохранив сигналы через To Workspace и выполнив постобработку в MATLAB.
7. Итог лекции

📌 Ключевые понятия:

  • Критерии оценки — измеримые показатели качества системы
  • Типы шкал определяют допустимые операции
  • Метрики: быстродействие ($t_{rise}$, $t_s$), точность ($OS$, $e_{steady}$), интегральные критерии ($IAE$, $ISE$, $ITAE$)
  • Многокритериальность и Парето-оптимальность

📋 Что нужно сделать после лекции:

  • Для своего варианта определить ключевые критерии из ТЗ
  • Понять, как эти критерии измеряются в нашей модели
В следующих практиках:
  • Практика 9: Расширенные модели (аэродинамика, уклон, нагрузка) — автоматическое включение по варианту
  • Практика 10: Анализ чувствительности — определение критических параметров
Ключевые формулы лекции
$$t_{rise} = \min\{t: v(t) \ge 0.95 \cdot v_{steady}\}$$
$$OS = \frac{v_{max} - v_{steady}}{v_{steady}} \cdot 100\%$$
$$t_s = \min\{t: |v(\tau) - v_{steady}| \le 0.02 \cdot v_{steady} \ \forall \tau \ge t\}$$
$$IAE = \int_0^\infty |e(t)| dt, \quad ISE = \int_0^\infty e^2(t) dt, \quad ITAE = \int_0^\infty t|e(t)| dt$$
$$S = \frac{\Delta y / y}{\Delta p / p} = \frac{\partial y}{\partial p} \cdot \frac{p}{y}$$
Лекция 6: Вероятностные методы и надёжность
НЕДЕЛЯ 6: ВЕРОЯТНОСТНЫЕ МЕТОДЫ

Лекция 6: Вероятностные методы и надёжность

Как оценить надёжность робота при случайных вариациях параметров? Метод Монте-Карло, анализ отказов, риск-менеджмент

1.5 часа
6
Вероятностные методы и надёжность
1.5 часа
Лекция
+
1. Зачем нужна вероятность в системном анализе?
Проблема реального мира:

В реальности параметры — это не точные числа, а случайные величины с определёнными распределениями.

  • Масса отличается на ±0.1 кг из-за допусков изготовления
  • Трение меняется в зависимости от влажности и загрязнения
  • Напряжение батареи падает со временем

Ключевая идея: Задача системного аналитика — оценить вероятность успеха при всех возможных вариациях.

Пример для обсуждения: Робот-курьер в аэропорту (вариант 10). Как гарантировать, что робот будет работать надёжно при:
  • Разной загрузке (масса багажа)
  • Разной влажности пола (трение)
  • Падении напряжения батареи
2. Основные понятия теории вероятностей

📊 Типы распределений

ТипПлотностьПример в робототехнике
Нормальное$f(x)=\frac{1}{\sigma\sqrt{2\pi}}e^{-\frac{(x-\mu)^2}{2\sigma^2}}$Масса робота, коэффициент трения
Равномерное$f(x)=\frac{1}{b-a},\ x\in[a,b]$Допуски на изготовление
Экспоненциальное$f(t)=\lambda e^{-\lambda t},\ t\ge 0$Время до отказа
Нормальное:     Равномерное:     Экспоненциальное:
    ┌─────┐         ┌─────┐           ┌─────┐
    │  █  │         │█████│           │█    │
    │ ███ │         │█████│           │ █   │
    │█████│         │█████│           │  █  │
    └─────┘         └─────┘           └─────┘
    

📈 Параметры распределений

$$\mu = E[X] = \frac{1}{n}\sum_{i=1}^n x_i \quad \text{(математическое ожидание)}$$
$$\sigma^2 = D[X] = \frac{1}{n}\sum_{i=1}^n (x_i - \mu)^2 \quad \text{(дисперсия)}$$
$$\sigma = \sqrt{D[X]} \quad \text{(среднеквадратическое отклонение)}$$
3. Метод Монте-Карло
Что это?

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

📋 Алгоритм:

  1. Задать распределения для всех неопределённых параметров
  2. Сгенерировать $N$ случайных наборов параметров
  3. Для каждого набора запустить симуляцию
  4. Собрать статистику выходных характеристик
  5. Оценить вероятность успеха $P_{success}$
Параметры:              Симуляция:              Результаты:
m ~ N(2, 0.05)          ┌─────────┐             v_steady = [1.2, 1.1, 0.9, ...]
μ ~ N(0.02, 0.002)  →   │ Модель  │  →         t_rise = [2.3, 2.5, 2.8, ...]
U ~ U(11.5, 12.5)       └─────────┘             OS = [5, 6, 4, ...]
                            

📊 Оценка вероятности успеха

Пусть $Y$ — выходной параметр (например, $v_{steady}$). Требование ТЗ: $Y \ge Y_{target}$.

$$P_{success} = \frac{\text{количество успешных запусков}}{N}$$

🎯 Доверительный интервал

$$\hat{p} \pm z \sqrt{\frac{\hat{p}(1-\hat{p})}{N}}$$

где $\hat{p}$ — оценка вероятности, $z = 1.96$ для 95% доверительного интервала.

4. Анализ надёжности

🔧 Основные понятия

ТерминОбозначениеОпределениеЕдиница
Интенсивность отказов$\lambda$Вероятность отказа в единицу времени1/ч
Вероятность безотказной работы$R(t)$$R(t) = e^{-\lambda t}$
Средняя наработка на отказ$MTBF$$MTBF = 1/\lambda$ч

⚙️ Модели отказов компонентов

Компонент$\lambda$ (1/ч)MTBF (ч)
Двигатель (щёточный)$1 \times 10^{-4}$10 000
Двигатель (бесколлекторный)$5 \times 10^{-5}$20 000
Редуктор$2 \times 10^{-4}$5 000
Датчик (оптический)$1 \times 10^{-5}$100 000
Контроллер$1 \times 10^{-5}$100 000

🔗 Надёжность системы с последовательным соединением

Если отказ любого компонента приводит к отказу всей системы:

$$\lambda_{сист} = \sum_{i=1}^{n} \lambda_i$$
$$R_{сист}(t) = \prod_{i=1}^{n} R_i(t) = e^{-\sum \lambda_i t}$$
$$MTBF_{сист} = \frac{1}{\sum \lambda_i}$$
5. Риск-менеджмент

📊 Матрица "вероятность-последствия"

Вероятность \ ПоследствияНезначительныеУмеренныеКритическиеКатастрофические
Высокая (>0.1)СреднийВысокийКритическийНедопустимый
Средняя (0.01-0.1)НизкийСреднийВысокийКритический
Низкая (<0.01)ПриемлемыйНизкийСреднийВысокий

🛡️ Методы снижения рисков

  • Резервирование — дублирование критических компонентов
  • Контроль качества — уменьшение разброса параметров
  • Защита — предотвращение отказов (тепловая защита)
  • Мониторинг — раннее обнаружение проблем
6. Требования к надёжности по группам вариантов
ГруппаВариантыТребования к надёжностиОсобенности
1. Эконом1, 8$t_{op} \ge 16$ чОграниченный бюджет, простые компоненты
2. Точные2, 5, 9$t_{op} \ge 6$ ч (вар.5)Высокая точность, низкий уровень отказов
3. Промышленные3, 6, 7$MTBF \ge 2000$ ч (вар.3)Длительная работа, тепловые режимы
4. Экстремальные4, 10, 11$MTBF \ge 5000$ ч (вар.10)Экстремальные условия, высокая надёжность
7. Итог лекции

📌 Ключевые понятия:

  • Случайные величины и распределения (нормальное, равномерное, экспоненциальное)
  • Метод Монте-Карло — оценка вероятности успеха при разбросе параметров
  • Анализ надёжности — $MTBF$, $R(t)$, интенсивность отказов
  • Риск-менеджмент — матрица вероятности-последствий

📋 Что нужно сделать после лекции:

  • Определить для своего варианта, какие параметры имеют разброс
  • Задать распределения для этих параметров
  • Понять, как оценить $P_{success}$ и $MTBF$
Ключевые формулы лекции
$$P_{success} = \frac{\text{успешные запуски}}{N}$$
$$\hat{p} \pm z \sqrt{\frac{\hat{p}(1-\hat{p})}{N}}$$
$$R(t) = e^{-\lambda t}$$
$$MTBF = \frac{1}{\lambda}$$
$$\lambda_{сист} = \sum \lambda_i$$
Лекция 7: Декомпозиция и принятие решений
НЕДЕЛЯ 7: ДЕКОМПОЗИЦИЯ И ПРИНЯТИЕ РЕШЕНИЙ

Лекция 7: Декомпозиция и принятие решений (часть 1)

Как формализовать выбор лучшей альтернативы? Дерево целей, метод анализа иерархий (AHP), шкала Саати

1.5 часа
7
Декомпозиция и принятие решений
1.5 часа
Лекция
+
1. Зачем нужна декомпозиция в системном анализе?
Проблема выбора в инженерных системах:

Представьте, что вы разрабатываете робота. У вас есть несколько альтернатив для каждого компонента:

  • Двигатели: бюджетный N20, прецизионный Maxon, средний Pololu
  • Редукторы: планетарный, косозубый, прямозубый
  • Колёса: полиуретановые, резиновые, силиконовые
  • Датчики: 3 ИК-датчика, 8 ИК-датчиков, комбинированные

Вопрос: Как выбрать оптимальную комбинацию?

📱 Пример из жизни: выбор смартфона

Критерии: цена, производительность, камера, время работы.

Проблема: один вариант может быть дешёвым, но с плохой камерой; другой — дорогим, но с отличной камерой. Как сравнить?

Системный подход:

  1. Разложить цель на подцели (декомпозиция)
  2. Сравнить альтернативы по всем критериям (метод AHP)
🤖 Пример для LFR: выбор двигателя для варианта 3 (Промышленный тяжеловес)
ДвигательСтоимость, рубМомент, Н·мMTBF, ч
MY101630000.18800
Maxon EC120000.125000
Pololu50000.082000

Вопрос: какой выбрать? Если нужна надёжность — Maxon, если экономия — MY1016, если баланс — Pololu. Но как учесть все критерии одновременно?

2. Декомпозиция и дерево целей
Что такое декомпозиция?

Декомпозиция — разбиение сложной задачи (цели) на более простые подзадачи (подцели). Это как собирать пазл: сначала отделяем края, потом группируем по цветам, потом собираем.

🌳 Дерево целей для LFR (общий вид)

                    Создать LFR, соответствующий ТЗ
                                   |
        ---------------------------------------------------------
        |                           |                           |
    Функциональность           Надёжность                 Экономичность
        |                           |                           |
    -----------             ---------------             -------------
    |         |             |             |             |           |
Скорость   Точность      MTBF         Безотказность   Стоимость   Энергопотребление
(v ≥ target) (OS ≤ limit) (≥2000 ч)   (R(t) ≥ 0.95)   (≤ budget)   (P ≤ limit)
                            

📊 Дерево целей по группам вариантов

Группа 1: Эконом (вар. 1, 8)
                    LFR складской/офисный (вар.1,8)
                           |
    -------------------------------------------------
    |                       |                       |
Стоимость              Энергопотребление         Скорость
    |                       |                       |
Бюджет ≤4500 руб     P_el ≤15 Вт              v ≥ 0.8 м/с (вар.1)
Стоимость мотора     КПД ≥85%                 0.5-0.7 м/с (вар.8)
Стоимость редуктора  Потери в редукторе       Перерегулирование ≤20%
                                
Группа 2: Точные (вар. 2, 5, 9)
                    LFR лабораторный/медицинский (вар.2,5,9)
                           |
    -------------------------------------------------
    |                       |                       |
Точность                  Шум                    Скорость
    |                       |                       |
±2 мм (вар.2)          ≤40 дБ (вар.5)         0.3-0.4 м/с (вар.2)
OS ≤5% (вар.2)         вибрации ≤0.1g         0.7-0.9 м/с (вар.5)
Статическая ошибка     акустический комфорт   плавность разгона
                                
Группа 3: Промышленные (вар. 3, 6, 7)
                    LFR промышленный (вар.3,6,7)
                           |
    -------------------------------------------------
    |                       |                       |
Надёжность              Тяга                  Тепловой режим
    |                       |                       |
MTBF ≥2000 ч (вар.3)    F_x ≥50 Н (вар.3)     T_max ≤80°C (вар.3)
R(t) ≥0.95 за 1000 ч    запас сцепления       время нагрева
Ремонтопригодность     тяга на подъём        эффективность охлаждения
                                
Группа 4: Экстремальные (вар. 4, 10, 11)
                    LFR гонщик/аэропортный/сельхоз (вар.4,10,11)
                           |
    -------------------------------------------------
    |                       |                       |
Аэродинамика            Сцепление             Проходимость
    |                       |                       |
Cx ≤0.4                 μ ≥0.7                h ≤0.05 м
A ≤0.015 м²             срыв сцепления        клиренс ≥0.03 м
прижимная сила         адаптивность          угол въезда/съезда
                                
⚙️ Автоматизация в проекте: Функция decision/goal_tree.m строит дерево целей автоматически для вашего варианта.
3. Метод анализа иерархий (AHP)
Основная идея AHP

AHP (Analytic Hierarchy Process) — метод, который:

  1. Разбивает сложную проблему на иерархию (дерево целей)
  2. Использует парные сравнения альтернатив
  3. Вычисляет числовые приоритеты (веса)

📏 Шкала Саати (1-9)

ЗначениеОписаниеПример
1Одинаковая важность"Скорость так же важна, как точность"
3Умеренное превосходство"Скорость немного важнее точности"
5Существенное превосходство"Скорость значительно важнее точности"
7Очень сильное превосходство"Скорость намного важнее точности"
9Абсолютное превосходство"Скорость критически важнее точности"
2,4,6,8Промежуточные значенияКогда нужно что-то между
⚠️ Важное свойство: если $a_{ij} = 3$, то $a_{ji} = 1/3$ (обратная симметрия).

📊 Пример матрицы для группы 3 (Промышленные)

Сравним три критерия: Надёжность (Н), Тяга (Т), Стоимость (С).

НТС
Н135
Т1/313
С1/51/31

Обоснование: Надёжность важнее тяги в 3 раза, важнее стоимости в 5 раз; тяга важнее стоимости в 3 раза.

4. Математика AHP: вычисление весов и проверка согласованности

Шаг 1: Нормализация

$$a_{ij}^{(norm)} = \frac{a_{ij}}{\sum_{k=1}^{n} a_{kj}}$$

Шаг 2: Вычисление весов

$$w_i = \frac{1}{n} \sum_{j=1}^{n} a_{ij}^{(norm)}$$

Шаг 3: Проверка согласованности

$$\lambda_{max} = \frac{1}{n} \sum_{i=1}^{n} \frac{(A \cdot w)_i}{w_i}$$
$$CI = \frac{\lambda_{max} - n}{n - 1}, \quad CR = \frac{CI}{RI}$$

где $RI$ — случайный индекс (табличное значение).

✅ Критерий: $CR < 0.1$ — согласованность приемлема.

Пример расчёта для группы 3

$$w = [0.633,\ 0.260,\ 0.106], \quad CR = 0.033 < 0.1\ \text{✅}$$
5. Сравнение альтернатив

📊 Альтернативы для группы 3 (двигатели)

АльтернативаНадёжность (MTBF)Тяга (момент)Стоимость
A1: MY1016800 ч0.18 Н·м3000 руб
A2: Maxon EC5000 ч0.12 Н·м12000 руб
A3: Pololu2000 ч0.08 Н·м5000 руб

Матрица сравнения по надёжности

A1A2A3
A111/61/3
A2612
A331/21

Итоговая оценка

АльтернативаНадёжность (0.633)Тяга (0.260)Стоимость (0.106)ИТОГО
A1: MY10160.095×0.633=0.0600.539×0.260=0.1400.571×0.106=0.0610.261
A2: Maxon EC0.615×0.633=0.3890.297×0.260=0.0770.143×0.106=0.0150.481
A3: Pololu0.290×0.633=0.1840.164×0.260=0.0430.286×0.106=0.0300.257
🏆 Вывод: Maxon EC — лучший выбор (приоритет 0.481) за счёт высокой надёжности.
6. Автоматизация в проекте
📁
decision/goal_tree.m
Построение дерева целей для вашего варианта. Вызывает: get_variant_group(), visualize_goal_tree()
📁
decision/ahp_matrix.m
Расчёт весов критериев и проверка согласованности (CR)
📁
decision/evaluate_alternatives.m
Оценка альтернатив по всем критериям
📁
report_template_block7.m
Главный скрипт для формирования отчёта по блоку 7
🔧 Как использовать:
% Построить дерево целей для варианта 3 tree = goal_tree(3); % Вычислить веса критериев crit_results = ahp_matrix(criteria_names, criteria_matrix); % Оценить альтернативы alt_results = evaluate_alternatives(crit_results.weights, alternatives, alt_matrices);
7. Итог лекции

📌 Ключевые понятия:

  • Декомпозиция — разбиение сложной цели на простые подцели
  • Дерево целей — графическое представление иерархии целей
  • Метод AHP — формальный метод сравнения альтернатив
  • Шкала Саати — перевод словесных оценок в числа (1-9)
  • Матрица сравнений — таблица попарных сравнений
  • Веса критериев — числовые приоритеты (сумма = 1)
  • CR (согласованность) — проверка логичности сравнений (CR < 0.1)

📋 Что нужно сделать после лекции:

  • Определить группу своего варианта
  • Построить дерево целей (3 уровня)
  • Заполнить матрицу парных сравнений для критериев
  • Выбрать 3-4 альтернативы для сравнения
  • Подготовить данные для практики 14
Ключевые формулы лекции
$$w_i = \frac{1}{n} \sum_{j=1}^{n} \frac{a_{ij}}{\sum_{k=1}^{n} a_{kj}}$$
$$\lambda_{max} = \frac{1}{n} \sum_{i=1}^{n} \frac{(A \cdot w)_i}{w_i}$$
$$CI = \frac{\lambda_{max} - n}{n - 1}, \quad CR = \frac{CI}{RI}$$
$$\text{Приоритет альтернативы} = \sum_{i=1}^{n} w_i \cdot \text{вес альтернативы по критерию } i$$
Лекция 8: Сравнение регуляторов
НЕДЕЛЯ 8: СРАВНЕНИЕ РЕГУЛЯТОРОВ

Лекция 8: Сравнение регуляторов (часть 1)

П, ПИ, ПИД-регуляторы для слежения за линией. Математические модели, настройка, критерии качества

1.5 часа
8
Сравнение регуляторов
1.5 часа
Лекция
+
1. Зачем нужны регуляторы?
Проблема управления роботом:

Робот должен двигаться по заданной траектории (линии). Но есть возмущения:

  • Шумы — помехи в показаниях датчиков
  • Люфт — зазоры в редукторе
  • Внешние силы — уклон, препятствия
  • Вариации параметров — разная масса, разное трение

Решение: замкнутая система управления (обратная связь).

📈 Пример для обсуждения: Робот съезжает с линии. Как вернуть его обратно?
  • Если повернуть колёса слабо — робот не успеет среагировать
  • Если повернуть сильно — робот начнёт колебаться
  • Нужно подобрать оптимальную силу поворота
Ключевая идея: Регулятор вычисляет управляющий сигнал на основе ошибки e(t) = желаемое положение − текущее положение.
2. Структура замкнутой системы
        ┌─────────┐     ┌─────────┐     ┌─────────┐     ┌─────────┐
   ───►│  Задание│────►│  Ошибка │────►│Регулятор│────►│  Робот  │────►
        │ (U_ref) │     │ e = r-y │     │  (Kp)   │     │ (объект)│
        └─────────┘     └─────────┘     └─────────┘     └─────────┘
              ▲                                              │
              │                                              │
              └───────────────────y(t)───────────────────────┘
                            

Основные элементы:

  • r(t) — задающее воздействие (желаемое положение линии)
  • y(t) — выход системы (фактическое положение робота)
  • e(t) = r(t) − y(t) — ошибка регулирования
  • u(t) — управляющий сигнал (напряжение на моторах)
📌 Для LFR:
  • Задание r(t) — сигнал с датчиков, когда робот идеально на линии (например, 2.5 В)
  • Выход y(t) — текущий сигнал с ИК-датчиков
  • Ошибка e(t) — отклонение от линии
  • Управление u(t) — разность скоростей левого и правого колеса
3. П-регулятор (пропорциональный)

📐 Математическая модель

$$u(t) = K_p \cdot e(t)$$

где $K_p$ — коэффициент усиления (настраиваемый параметр).

⚙️ Применение для LFR

$$\Delta u(t) = K_p \cdot e(t)$$
$$u_{left} = u_0 + \frac{\Delta u}{2}, \quad u_{right} = u_0 - \frac{\Delta u}{2}$$

📊 Достоинства и недостатки

ДостоинстваНедостатки
✅ Простая реализация❌ Есть статическая ошибка (e ≠ 0 при установившемся режиме)
✅ Быстрый отклик❌ При большом Kp — колебания и потеря устойчивости
✅ Легко настраивается❌ Не подавляет возмущения полностью
📌 Пример настройки Kp для варианта 1:
% Начальное значение Kp = 0.1; % Увеличиваем до появления колебаний (Kp_crit ≈ 0.8) % Оптимальный Kp = 0.5 * Kp_crit = 0.4
4. ПИ-регулятор (пропорционально-интегральный)

📐 Математическая модель

$$u(t) = K_p \cdot e(t) + K_i \int_{0}^{t} e(\tau) d\tau$$

где $K_i$ — коэффициент интегральной составляющей.

⚙️ Дискретная форма (для реализации)

$$u_n = K_p \cdot e_n + K_i \cdot T_s \cdot \sum_{k=0}^{n} e_k$$

где $T_s$ — шаг дискретизации (dt).

🎯 Назначение интегральной составляющей

  • Устраняет статическую ошибку — робот точно выходит на линию
  • Накопление ошибки — со временем управляющий сигнал увеличивается
  • Осторожно: может вызвать перерегулирование и "насыщение" интегратора

📊 Достоинства и недостатки

ДостоинстваНедостатки
✅ Устраняет статическую ошибку❌ Может вызвать перерегулирование
✅ Лучше подавляет возмущения❌ Интегральное насыщение (windup)
✅ Более точное слежение❌ Сложнее настройка (2 параметра)
📌 Пример настройки ПИ-регулятора:
% Начинаем с Kp = 0.4 (из П-регулятора) Kp = 0.4; % Добавляем Ki маленьким (0.1 от Kp) Ki = 0.04; % Увеличиваем Ki до появления колебаний % Оптимум: Kp = 0.35, Ki = 0.05
5. ПИД-регулятор (пропорционально-интегрально-дифференциальный)

📐 Математическая модель

$$u(t) = K_p \cdot e(t) + K_i \int_{0}^{t} e(\tau) d\tau + K_d \frac{de(t)}{dt}$$

⚙️ Дискретная форма

$$u_n = K_p \cdot e_n + K_i \cdot T_s \cdot \sum_{k=0}^{n} e_k + K_d \cdot \frac{e_n - e_{n-1}}{T_s}$$

🎯 Назначение дифференциальной составляющей

  • Прогнозирует будущую ошибку — смотрит на скорость изменения ошибки
  • Демпфирует колебания — уменьшает перерегулирование
  • Улучшает устойчивость — позволяет увеличить Kp
  • Осторожно: чувствителен к шумам (нужен фильтр)

📊 Достоинства и недостатки

ДостоинстваНедостатки
✅ Наилучшая точность❌ Сложная настройка (3 параметра)
✅ Минимальное перерегулирование❌ Чувствительность к шумам
✅ Быстрый отклик и устойчивость❌ Может вызвать высокочастотные колебания
⚠️ Важно для LFR: При наличии шумов в показаниях датчиков дифференциальная составляющая может вызывать дребезг управления. В этом случае рекомендуется:
  • Использовать ПИ-регулятор вместо ПИД
  • Добавить фильтр низких частот на вход Kd
  • Уменьшить Kd или увеличить шаг дискретизации
6. Сравнение регуляторов по основным критериям
КритерийП-регуляторПИ-регуляторПИД-регулятор
Статическая ошибкаЕстьНетНет
Время разгонаБыстроеСреднееБыстрое
ПеререгулированиеСреднееВысокоеНизкое
Устойчивость к шумамВысокаяВысокаяНизкая
Сложность настройкиПростая (1 параметр)Средняя (2 параметра)Сложная (3 параметра)
Устойчивость к люфтуВысокаяСредняяНизкая
🎯 Рекомендации по выбору для разных групп:
  • Группа 1 (Эконом): П-регулятор — простота и надёжность
  • Группа 2 (Точные): ПИ-регулятор — устранение статической ошибки
  • Группа 3 (Промышленные): ПИД-регулятор — наилучшая точность
  • Группа 4 (Экстремальные): ПИД-регулятор с фильтром — скорость и устойчивость
7. Критерии качества регулирования
ПоказательОбозначениеОпределениеЧто лучше
Время разгона (0→95%)$t_{95\%}$Время, за которое скорость/положение достигает 95% от установившегося значенияМеньше → быстрее
Время установления (±2%)$t_s$Время, после которого ошибка не выходит из коридора ±2%Меньше → стабильнее
Перерегулирование$OS$Максимальное превышение над установившимся значением, %Меньше → мягче
Статическая ошибка$e_{ss}$Ошибка в установившемся режиме0 - идеал
Частота колебаний$\omega_c$Частота затухающих колебанийНиже - устойчивее
$$OS = \frac{y_{max} - y_{steady}}{y_{steady}} \cdot 100\%$$
📊 Пример сравнения (для варианта 3):
Регуляторt95%, сOS, %ess, мм
П-регулятор1.215%5 мм
ПИ-регулятор1.525%0 мм
ПИД-регулятор0.85%0 мм
8. Автоматизация в проекте
📁
control/pi_controller.m
ПИ-регулятор: u = Kp·e + Ki·∫e·dt
📁
control/pid_controller.m
ПИД-регулятор: u = Kp·e + Ki·∫e·dt + Kd·de/dt
📁
optimization/compare_controllers.m
Сравнение регуляторов по критериям качества
📁
reports/report_template_block8.mlx
Шаблон отчёта для блока 8
% Пример использования ПИД-регулятора [e, e_int, e_prev] = deal(0, 0, 0); % инициализация for i = 1:n_steps e_current = r(i) - y(i); % текущая ошибка e_int = e_int + e_current * dt; % интеграл ошибки e_deriv = (e_current - e_prev) / dt; % производная u = Kp * e_current + Ki * e_int + Kd * e_deriv; e_prev = e_current; % применение управления... end
9. Итог лекции

📌 Ключевые понятия:

  • П-регулятор — пропорциональный, простой, но есть статическая ошибка
  • ПИ-регулятор — добавляет интеграл, устраняет статическую ошибку
  • ПИД-регулятор — добавляет производную, улучшает устойчивость и уменьшает OS
  • Критерии качества — t95%, OS, ess, ts
  • Настройка — последовательная: сначала Kp, потом Ki, потом Kd

📋 Что нужно сделать после лекции:

  • Реализовать ПИ-регулятор в коде
  • Реализовать ПИД-регулятор в коде
  • Сравнить регуляторы по критериям качества для своего варианта
  • Выбрать оптимальный регулятор
  • Оформить отчёт по блоку 8
Ключевые формулы лекции
$$u(t) = K_p \cdot e(t)$$
$$u(t) = K_p \cdot e(t) + K_i \int e(t) dt$$
$$u(t) = K_p \cdot e(t) + K_i \int e(t) dt + K_d \frac{de(t)}{dt}$$
$$OS = \frac{y_{max} - y_{steady}}{y_{steady}} \cdot 100\%$$
$$t_s: |e(t)| \le 0.02 \cdot y_{steady}$$
Лекция 9: Оптимизация и интеграция
НЕДЕЛЯ 9: ОПТИМИЗАЦИЯ И ИНТЕГРАЦИЯ

Лекция 9: Оптимизация и интеграция

Целевые функции, многокритериальная оптимизация, фронт Парето, интеграция всех модулей в итоговую модель

1.5 часа
9
Оптимизация и интеграция
1.5 часа
Лекция
+
1. Зачем нужна оптимизация?
Проблема:

Мы выбрали регулятор (например, ПИД), но как подобрать оптимальные коэффициенты Kp, Ki, Kd?

  • Слишком маленькие Kp → медленная реакция
  • Слишком большие Kp → колебания и потеря устойчивости
  • Слишком маленький Ki → статическая ошибка
  • Слишком большой Ki → перерегулирование
  • Слишком маленький Kd → слабое демпфирование
  • Слишком большой Kd → чувствительность к шумам
📈 Пример для обсуждения: Робот должен разгоняться до 0.8 м/с за 2 секунды с перерегулированием не более 10%. Какие коэффициенты ПИД-регулятора выбрать?
  • Вариант А: Kp=0.3, Ki=0.05, Kd=0.01 → медленный разгон
  • Вариант Б: Kp=0.5, Ki=0.10, Kd=0.02 → быстро, но большое перерегулирование
  • Вариант В: Kp=0.4, Ki=0.08, Kd=0.015 → золотая середина

Оптимизация поможет найти лучший баланс автоматически!

2. Целевая функция
Что такое целевая функция?

Это математическое выражение, которое оценивает качество решения. Чем меньше значение целевой функции — тем лучше.

📐 Примеры целевых функций для задачи настройки регулятора

$$J_1 = \int_{0}^{T} |e(t)| dt \quad \text{(IAE - интеграл абсолютной ошибки)}$$
$$J_2 = \int_{0}^{T} e(t)^2 dt \quad \text{(ISE - интеграл квадрата ошибки)}$$
$$J_3 = \int_{0}^{T} t \cdot |e(t)| dt \quad \text{(ITAE - интеграл времени на абсолютную ошибку)}$$
$$J_4 = w_1 \cdot t_{95\%} + w_2 \cdot OS + w_3 \cdot e_{ss}$$
В нашем проекте используется:
$$J = w_1 \cdot t_{95\%} + w_2 \cdot OS + w_3 \cdot e_{ss}$$

где $w_1, w_2, w_3$ — веса, отражающие важность каждого критерия.

3. Методы оптимизации
МетодПринцип работыКогда использоватьMATLAB функция
Сеточный перебор Перебор всех комбинаций параметров в заданном диапазоне Малая размерность (1-2 параметра) собственная реализация
Метод градиента Движение в направлении наискорейшего спуска Гладкая целевая функция fminunc
Симплекс-метод Поиск минимума через деформацию симплекса Ограниченное число параметров fminsearch
Генетический алгоритм Имитация эволюции: отбор, скрещивание, мутация Многомерная оптимизация, негладкие функции ga
🎯 Пример: оптимизация Kp для варианта 5
% Целевая функция для оптимизации Kp objective = @(Kp) simulate_and_evaluate(Kp, config, flags, ...); % Запуск оптимизации options = optimset('Display', 'iter', 'TolX', 0.001); Kp_opt = fminbnd(objective, 0.1, 1.0, options);
4. Многокритериальная оптимизация и фронт Парето
Что такое многокритериальная оптимизация?

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

  • Уменьшение времени разгона → увеличение перерегулирования
  • Уменьшение перерегулирования → увеличение времени разгона
  • Нет единственного оптимального решения — есть компромиссы

📊 Фронт Парето

        OS, %                     
          ↑                        
        20│    ●                   
          │  ●   ●                 
        15│●       ●               
          │          ●             
        10│            ●           
          │              ●   ← Парето-фронт
         5│                ●       
          │                   ●    
         0└───────────────────→ t_95%, с
           0   1   2   3   4   5   
                            
Определение:

Решения, которые нельзя улучшить по одному критерию без ухудшения другого, называются Парето-оптимальными. Множество таких решений — фронт Парето.

🔧 В нашем проекте: Строим фронт Парето для двух критериев:
  • $t_{95\%}$ — время разгона до 95% (чем меньше, тем лучше)
  • $OS$ — перерегулирование (чем меньше, тем лучше)
5. Пакетный запуск симуляций

Для оптимизации и построения фронта Парето необходимо запускать симуляцию множество раз с разными параметрами.

function results = run_simulation_batch(config, flags, param_name, param_values) % ПАКЕТНЫЙ ЗАПУСК СИМУЛЯЦИЙ n = length(param_values); results = struct(); for i = 1:n % Изменяем параметр eval([param_name ' = param_values(i);']); % Запускаем симуляцию [t, v, ~, ~, ~, ~, ~] = simulate_robot(...); % Анализируем результат metrics = analyze_transient(t, v); % Сохраняем results.values(i) = param_values(i); results.v_steady(i) = metrics.v_steady; results.t_rise(i) = metrics.t_rise_95; results.os(i) = metrics.overshoot; end end
6. Автоматизация отчётов
📁
utils/save_report.m
Сохранение отчёта в формате HTML/MATLAB
📁
utils/export_figures.m
Экспорт всех графиков в PNG/SVG
% Сохранение результатов в структуру final_report = struct(); final_report.variant = variant_number; final_report.config = config; final_report.metrics = metrics; final_report.optimal_Kp = Kp_opt; final_report.timestamp = datestr(now); % Сохранение в файл save('final_report.mat', 'final_report'); % Экспорт графиков export_figures('figures/');
7. Интеграция всех модулей
┌─────────────────────────────────────────────────────────────────┐
│                        ИТОГОВАЯ СИМУЛЯЦИЯ                        │
├─────────────────────────────────────────────────────────────────┤
│  main.mlx                                                        │
│  └── simulate_robot.m (ядро)                                    │
│       ├── dynamics/ (усложнения)                                │
│       ├── actuators/ (люфт, тепло)                              │
│       ├── sensors/ (датчики)                                    │
│       ├── disturbances/ (шум)                                   │
│       └── control/ (регулятор)                                  │
├─────────────────────────────────────────────────────────────────┤
│  optimization/ (оптимизация)                                     │
│  analysis/ (анализ результатов)                                  │
│  reports/ (отчёты)                                              │
└─────────────────────────────────────────────────────────────────┘
                            
🎯 Финальный результат:
  • Полностью настроенная модель для вашего варианта
  • Оптимальные коэффициенты регулятора
  • Фронт Парето для многокритериального анализа
  • Полный комплект отчётов по всем блокам
8. Итог лекции

📌 Ключевые понятия:

  • Целевая функция — числовая мера качества решения
  • Методы оптимизации — fminbnd, fminsearch, ga
  • Многокритериальная оптимизация — учёт нескольких противоречивых критериев
  • Фронт Парето — множество компромиссных решений
  • Пакетный запуск — многократная симуляция для оптимизации

📋 Что нужно сделать после лекции:

  • Реализовать целевую функцию
  • Провести оптимизацию Kp (и Ki, Kd) для своего варианта
  • Построить фронт Парето
  • Сформировать итоговый отчёт
Ключевые формулы лекции
$$J_1 = \int |e| dt$$
$$J_2 = \int e^2 dt$$
$$J_3 = \int t \cdot |e| dt$$
$$J_4 = w_1 \cdot t_{95\%} + w_2 \cdot OS + w_3 \cdot e_{ss}$$
$$x^* = \arg\min J(x)$$
Практика 1: Знакомство с вариантом
НЕДЕЛЯ 1: ПРАКТИКА

Практика 1: Знакомство с вариантом

Анализ технического задания и формализация параметров

1.5 часа
2
Методика анализа технического задания
1.5 часа
Практика
+

Чек-лист для студента:

  1. Выделение ключевых параметров:
    • Масса робота (m)
    • Коэффициент трения (μ)
    • Целевая скорость (v_target)
    • Длина трассы (L)
    • Количество поворотов
  2. Определение ограничений:
    • Бюджетные ограничения
    • Энергетические ограничения
    • Ограничения по безопасности
    • Эксплуатационные ограничения
  3. Выделение критериев успеха:
    • Вероятность успеха (P_success)
    • Точность позиционирования
    • Скорость выполнения задачи
    • Энергоэффективность
  4. Идентификация уникальных требований (особые условия, интерфейсы).
  5. Формализация задачи (математическая модель, критерии оптимизации).

MATLAB код для создания файла параметров

% Функция для создания параметров варианта function create_variant_params(variant_number) params = get_base_parameters(variant_number); params.mass = []; % [кг] params.mu = []; % коэф. трения params.target_speed = []; % [м/с] params.overshoot_limit = []; params.constraints.budget = []; save(sprintf('variant_%d_params.mat', variant_number), 'params'); end
Задание

Создайте файл параметров для вашего варианта.

.m
variant_parameters.m
Параметры робота
Практика 3: Расчёт параметров для усложнённых моделей
НЕДЕЛЯ 2: ПРАКТИКУМ

Практика 3: Расчёт недостающих параметров для усложнённых моделей

Определяем тепловые, акустические, механические и другие параметры, которых нет в ТЗ

1.5 часа
3
Расчёт параметров для усложнений
1.5 часа
Практика
+
Что мы уже умеем

В Практике 2 мы научились рассчитывать базовые параметры:

  • Радиус колеса $r$ и передаточное число $n$
  • Силу тяги $F_x$ и момент $\tau_{motor}$
  • Выбор двигателя ($k_m$, $k_e$, $R$)
  • Коэффициенты $k_1$, $k_2$ для Simulink
Теперь задача сложнее: в Лекции 2 мы добавили новые физические эффекты — тепло, шум, препятствия, переменное сцепление и т.д. Для них нужны дополнительные параметры, которых нет в ТЗ и которые мы не рассчитывали раньше.
Какие параметры нужны для усложнённых моделей
ГруппаЭффектНедостающий параметрОбозначениеЕд. изм.
1. ЭкономЭнергопотреблениеПостоянная мощность (электроника)$P_{const}$Вт
КПДКПД двигателя в рабочей точке$\eta_{motor}$
2. ВысокоточныеАкустический шумКоэффициент шума от di/dt$\beta_{noise}$дБ/(А/с)
Амплитуда когинга (зубцовых пульсаций)$A_{cogging}$
ВибрацииКоэффициент вибраций от ускорения$k_{vib}$$g/(м/с²)$
НестационарностьДиапазон изменения массы$\Delta m$кг
3. ПромышленныеТепловая модельТепловое сопротивление$R_{th}$°C/Вт
Теплоёмкость двигателя$C_{th}$Дж/°C
ТорможениеУстановившееся замедление$a_{brake}$м/с²
ПрепятствияКоэффициент упругости подвески$k_{susp}$Н/м
Запас устойчивостиВысота центра масс$h_{cg}$м
4. ЭкстремальныеАэродинамикаКоэффициент аэродинамического сопротивления$C_x$
Лобовая площадь$A$м²
Crowd avoidanceЖёсткость "мягкого" бампера$k_{soft}$Н/м
Переменное сцеплениеКоэффициент влияния влажности$k_{\mu}$1/%
RecoveryПорог срыва сцепления$\varepsilon$

Эти параметры не даны в ТЗ! Их нужно оценить по справочникам, аналогиям или разумным предположениям.

Методики оценки недостающих параметров
Группа 1: Эконом-решения (вар. 1, 8)

Для варианта 8 (Офисный логист) — энергопотребление

$$P_{const} = P_{el} - P_{mech} \approx 2..5 \text{ Вт (контроллер, датчики)}$$

Рекомендация: принять $P_{const} = 3$ Вт для первого приближения.

⚙️ КПД двигателя $\eta_{motor}$

$$\eta_{motor} = \frac{P_{mech}}{P_{el}} = \frac{F_x \cdot v}{U \cdot i}$$

Для микродвигателей (N20) $\eta_{motor} \approx 0.6..0.75$ в рабочей точке.

Пример для вар.8: Принимаем $\eta_{motor} = 0.7$, тогда полный КПД привода $\eta_{total} = \eta_{motor} \cdot \eta_{gear} = 0.7 \cdot 0.7 = 0.49$.
Группа 2: Высокоточные (вар. 2, 5, 9)

Для варианта 5 (Медицинский курьер) — акустический шум

$$L_p = 20 \log_{10}\left(\frac{A}{A_0}\right), \quad A \propto \left|\frac{di}{dt}\right| + A_{cogging}$$

Коэффициент $\beta_{noise}$: показывает, на сколько дБ растёт шум при увеличении di/dt на 1 А/с.

Для бесшумных двигателей (Faulhaber) $\beta_{noise} \approx 2..3$ дБ/(А/с). Для обычных коллекторных — до 10 дБ/(А/с).

Когинг (зубцовые пульсации) $A_{cogging}$

Для серводвигателей с косозубым редуктором $A_{cogging} \approx 0.05..0.1$ от среднего момента. Для обычных — 0.2..0.3.

Вибрации $k_{vib}$

$$a_{vib} = k_{vib} \cdot a \quad [g]$$

Коэффициент вибраций: для прецизионных двигателей $k_{vib} \approx 0.05..0.1$ $g/(м/с²)$.

Для варианта 9 (Учебный тренажёр) — диапазон изменения параметров

$$\Delta m = \pm 0.3 \text{ кг (добавление груза)}$$ $$\Delta k_m = \pm 20\% \text{ (имитация старения)}$$
Пример для вар.5: Принимаем $\beta_{noise} = 3$ дБ/(А/с), $A_{cogging} = 0.1$, $k_{vib} = 0.08$.
Группа 3: Промышленные (вар. 3, 6, 7)

️ Для варианта 3 (Промышленный тяжеловес) — тепловая модель

$$T_m = T_{amb} + R_{th} \cdot P_{loss}, \quad P_{loss} = i^2 R$$

Тепловое сопротивление $R_{th}$: для двигателей с естественным охлаждением $R_{th} \approx 2..5$ °C/Вт. С принудительным — 0.5..1 °C/Вт.

Теплоёмкость $C_{th}$: определяет скорость нагрева. $C_{th} \approx 50..200$ Дж/°C в зависимости от массы двигателя.

Для варианта 6 (Библиотечный помощник) — торможение

$$s_{brake} = \frac{v^2}{2 a_{brake}} \leq 0.5 \text{ м}$$

Из этого можно найти требуемое замедление $a_{brake} \geq \frac{v^2}{2 \cdot 0.5}$.

Для v = 0.6 м/с: $a_{brake} \geq 0.36$ м/с². Реально достижимо 0.5..1 м/с² рекуперативным торможением.

Для варианта 7 (Строительный инспектор) — препятствия

$$F_{step} = m g \left[1 - \left(1 - \frac{h}{r}\right)^2\right]^{1/2}$$

Здесь неизвестен только коэффициент упругости подвески $k_{susp}$, если нужно считать динамику наезда. Для первого приближения считаем подвеску жёсткой.

Запас устойчивости

$$SM = \frac{d/2}{h_{cg}} \quad \text{(для статической устойчивости)}$$

Высота центра масс $h_{cg}$: для колёсных роботов $h_{cg} \approx 0.3..0.5$ от высоты корпуса. Принимаем $h_{cg} = 0.1$ м для низких платформ, до 0.3 м для высоких.

Пример для вар.3: $R_{th} = 3$ °C/Вт, $C_{th} = 100$ Дж/°C, $h_{cg} = 0.15$ м.
⚡ Группа 4: Экстремальные (вар. 4, 10, 11)

Для варианта 4 (Соревновательный гонщик) — аэродинамика

$$F_a = \frac{1}{2} \rho C_x A v^2$$

Коэффициент аэродинамического сопротивления $C_x$: для обтекаемого корпуса 0.3..0.4, для плоского — 0.8..1.0.

Лобовая площадь $A$: ширина × высота робота. Для гонщика $A \approx 0.1 \times 0.1 = 0.01$ м².

Плотность воздуха $\rho = 1.2$ кг/м³ (при 20°C).

⚠️ Срыв сцепления (recovery)

Порог $\varepsilon$: при $F_x > \mu N (1 + \varepsilon)$ считаем, что началось буксование. Обычно $\varepsilon = 0.05..0.1$ (запас 5-10%).

Для варианта 10 (Аэропортный гид) — crowd avoidance

$$F_{obs}(d) = \begin{cases} k_{soft}(d_0 - d), & d \leq d_0 \\ 0, & d > d_0 \end{cases}$$

Жёсткость "мягкого" бампера $k_{soft}$: выбирается так, чтобы на расстоянии $d_0$ сила была достаточной для остановки.

$$k_{soft} \approx \frac{m \cdot a_{max}}{d_0}$$

Для m=5.8 кг, $a_{max}=1$ м/с², $d_0=0.5$ м → $k_{soft} \approx 11.6$ Н/м.

Для варианта 11 (Сельскохозяйственный) — переменное сцепление

$$\mu = \mu_0 + k_{\mu} \cdot RH$$

Коэффициент влияния влажности $k_{\mu}$: из диапазона μ=0.22 при RH=20% до μ=0.80 при RH=100%:

$$k_{\mu} = \frac{0.80 - 0.22}{100 - 20} = \frac{0.58}{80} = 0.00725 \ [1/\%]$$
Пример для вар.4: $C_x = 0.35$, $A = 0.012$ м², $\varepsilon = 0.1$.
Сводная таблица рекомендуемых значений (первое приближение)
ПараметрРекомендуемое значениеДля каких вариантов
$P_{const}$3 Вт8
$\eta_{motor}$0.71, 8
$\beta_{noise}$3 дБ/(А/с)5
$A_{cogging}$0.1 (отн.)5
$k_{vib}$0.08 g/(м/с²)5
$\Delta m$±0.3 кг9
$R_{th}$3 °C/Вт3
$C_{th}$100 Дж/°C3
$a_{brake}$0.5 м/с²6
$h_{cg}$0.15 м3, 6, 7
$C_x$0.354
$A$0.01..0.02 м²4
$k_{soft}$10..20 Н/м10
$k_{\mu}$0.00725 1/%11
$\varepsilon$ (срыв)0.14

Эти значения можно использовать, если нет более точных данных. В реальном проекте они уточняются экспериментально.

Алгоритм действий для вашего варианта
  1. Определите свою группу по таблице из Лекции 2.
  2. Выпишите из ТЗ все особые требования (шум, тепло, препятствия и т.д.).
  3. Для каждого требования найдите в методиках выше соответствующий недостающий параметр.
  4. Примите разумное значение из рекомендованной таблицы или рассчитайте по формулам.
  5. Запишите все параметры в расширенный скрипт инициализации.
Пример для вар.5 (Медицинский курьер):
Требование ТЗ: шум ≤40 дБ, вибрации ≤0.1g
Недостающие параметры:
- beta_noise = 3 дБ/(А/с)
- A_cogging = 0.1
- k_vib = 0.08 g/(м/с²)
- Допустимая производная тока: |di/dt| ≤ (40 - 20)/3 ≈ 6.7 А/с
                            
Расширенный MATLAB-шаблон с учётом специфики
%% init_variant_X_extended.m % Базовые параметры (из Практики 2) m = 1.8; % масса, кг r = 0.04; % радиус колеса, м n = 20; % передаточное число eta_gear = 0.75; % КПД редуктора km = 0.030; % Н·м/А ke = 0.030; % В·с/рад R = 1.8; % Ом U_nom = 18; % В Fr = 0.15; % сила сопротивления, Н %% Специфические параметры для вар.5 (Медицинский курьер) % Акустический шум beta_noise = 3; % дБ/(А/с) A_cogging = 0.1; % относительная амплитуда когинга di_max = 6.7; % максимальная производная тока, А/с % Вибрации k_vib = 0.08; % g/(м/с²) % Ограничения ТЗ Lp_max = 40; % дБ a_vib_max = 0.1; % g %% Сохранение save('variant_5_params_extended.mat');

Добавьте в этот шаблон параметры, соответствующие вашей группе.

Задание к следующему занятию
  1. Определите группу своего варианта по Лекции 2.
  2. Выпишите все специфические требования из ТЗ, которые требуют дополнительных параметров.
  3. Для каждого требования найдите или оцените недостающий параметр по методикам выше.
  4. Создайте расширенный скрипт инициализации init_variant_X_extended.m со всеми параметрами.
.m
init_variant_X_extended.m
Расширенный скрипт со всеми параметрами для усложнённой модели
.mat
variant_X_params_extended.mat
Сохранённые параметры
Важно: Если параметр не удаётся оценить — запишите, как вы его приняли и почему. В отчёте это будет обоснованием.
Практика 5: Моделирование датчиков и шумов
НЕДЕЛЯ 3: ПРАКТИКУМ

Практика 5: Моделирование датчиков и шумов в Simulink

Добавляем в модель сенсоры, шумы, люфты и анализируем их влияние

1.5 часа
5
Моделирование датчиков и шумов
1.5 часа
Практика
+
Цель работы

Добавить в существующую модель динамики (из Практики 4) блоки, моделирующие:

  • ИК-датчики линии с характеристикой $U(x)$
  • Шумы (гауссовский, импульсный, дрейф)
  • Энкодеры с квантованием
  • Люфт в редукторе (блок Backlash)

Исследовать, как шумы и люфты влияют на сигналы датчиков и точность системы.

Библиотека блоков для датчиков

ИК-датчик линии

$$U_{out} = \frac{U_{max}}{1 + (x/x_0)^2} + n(t) + p(t)$$
x ──►[Fcn: Umax/(1+(x/x0)^2)]──► идеальный сигнал ──►(∑)──► U_out
                                              ▲        ▲
                                              │        │
                                         [Noise]  [Impulse]
                            

Параметры для настройки:

  • $U_{max}$ — макс. напряжение (обычно 3.3 или 5 В)
  • $x_0$ — характерная ширина линии (0.005-0.01 м)
  • $\sigma$ — СКО шума (0.02-0.05 от Umax)
  • Вероятность импульсной помехи (0.01-0.05)

Энкодер с квантованием

$$\theta_{meas} = \frac{2\pi}{N} \cdot \text{round}\left(\frac{\theta \cdot N}{2\pi}\right)$$
θ ──►[Gain: N/(2π)]──►[Round]──►[Gain: 2π/N]──► θ_meas
                            

Параметры: $N$ — число импульсов на оборот (типовые значения 12, 24, 48, 360, 1024)

Гироскоп с дрейфом

$$\omega_{meas} = \omega_{true} + b_0 + \beta t + n(t)$$
ω_true ──►(∑)──► ω_meas
          ▲    ▲
          │    │
     [b0+βt] [Noise]
                            

⚙️ Люфт в редукторе

Используйте готовый блок Backlash из библиотеки Simulink/Discontinuities.

θ_motor ──►[Backlash]──► θ_wheel
                            

Параметр: Deadband width = $2\delta$ (полный размах люфта в радианах).

Рекомендуемые параметры для разных вариантов
ВариантЧисло ИК-датчиков$\sigma$ шума (отн.)Импульсные помехиЛюфт $\delta$ (рад)N энкодера
1 (Эконом)3-50.050.030.0112
2 (Точник)8-120.010.0050.0015360
3 (Тяжеловес)4-60.030.020.00548
4 (Гонщик)6-80.020.010.0081024
5 (Мед. курьер)8-100.010.0020.003512
6 (Библиотечный)8-120.020.010.004256
7 (Строительный)4-6 + ToF0.040.050.00648
8 (Офисный)4-60.030.020.00824
9 (Учебный)4-80.050.050.0112
10 (Аэропорт)12+ ToF0.020.010.003512
11 (Сельхоз)6-80.030.020.005256

Используйте эти значения как отправную точку. При необходимости корректируйте.

Задание 1: Модель ИК-датчика с шумом
  1. Создайте подсистему (Subsystem) "IR_Sensor".
  2. Вход: отклонение от линии $x$ (м).
  3. Выход: напряжение $U$ (В).
  4. Реализуйте формулу:
    $$U = \frac{5}{1 + (x/0.01)^2} + 0.1 \cdot \text{randn} + 0.5 \cdot \text{impulse}$$
    где impulse = 1 с вероятностью 0.01, иначе 0.
  5. Подключите осциллограф и посмотрите сигнал при изменении x от -0.02 до 0.02 м.
Результат: График зависимости U(x) с шумом и выбросами.
Задание 2: Модель энкодера с квантованием
  1. Создайте подсистему "Encoder".
  2. Вход: угол поворота $\theta$ (рад).
  3. Выход: измеренный угол $\theta_{meas}$ (рад).
  4. Реализуйте квантование с N=48 импульсов на оборот:
    $$\theta_{meas} = \frac{2\pi}{48} \cdot \text{round}\left(\frac{\theta \cdot 48}{2\pi}\right)$$
  5. Подайте на вход линейно растущий сигнал $\theta = 10t$, сравните вход и выход.
Вопрос: Какова ошибка квантования? Как она зависит от N?
Задание 3: Люфт в редукторе
  1. Добавьте блок Backlash в модель привода.
  2. Параметры: Deadband width = 0.02 рад (примерно 1°).
  3. Подайте на вход синусоидальный сигнал малой амплитуды (0.01 рад) и посмотрите выход.
  4. Подайте сигнал с изменением направления (например, треугольный) и пронаблюдайте гистерезис.
Синус 0.01 рад ──►[Backlash]──► Scope
                            
Наблюдение: При малых амплитудах выход может быть нулевым — это зона нечувствительности.
Задание 4: Интеграция в полную модель
  1. Откройте свою модель из Практики 4 (variant_X_extended.slx).
  2. Добавьте в неё блоки датчиков:
    • ИК-датчик (или массив датчиков) для измерения отклонения от линии.
    • Энкодеры на валах двигателей.
    • Гироскоп для измерения угловой скорости (опционально).
  3. Добавьте люфт между двигателем и колесом.
  4. Запустите симуляцию и сравните сигналы с датчиков (зашумлённые) с реальными значениями.
  5. Сделайте выводы о влиянии шумов и люфта.
Ожидаемый результат:
  • Шумы вызывают флуктуации показаний датчиков.
  • Люфт приводит к запаздыванию и гистерезису.
  • При движении по линии ошибка измерения отклонения возрастает из-за шумов.
Дополнительное задание (для вариантов 5,9,11)

Для варианта 5 (медицинский): Добавьте модель шума с ограничением по дисперсии так, чтобы результирующая ошибка позиционирования не превышала 2 мм.

Для варианта 9 (учебный): Сделайте параметры шума и люфта изменяемыми извне (через константы или слайдеры).

Для варианта 11 (сельхоз): Добавьте зависимость уровня шума от влажности (внешний сигнал RH).

Контрольные вопросы
  1. Как влияет увеличение числа ИК-датчиков на точность определения положения линии?
  2. Почему при квантовании энкодера возникает ошибка? Как её уменьшить?
  3. Как люфт влияет на точность позиционирования при движении в одну сторону и при реверсе?
  4. Какой тип шума наиболее критичен для вашего варианта?
  5. Как можно скомпенсировать дрейф гироскопа?
Задание к следующему занятию
  1. Добавить в свою модель все необходимые датчики с шумами согласно варианту.
  2. Добавить люфт в редуктор.
  3. Запустить симуляцию, получить графики зашумлённых сигналов.
  4. Сделать выводы о влиянии шумов и люфта на точность.
  5. Сохранить модель как variant_X_sensors.slx.
.slx
variant_X_sensors.slx
Модель с датчиками, шумами и люфтами
.png
sensor_signals.png
Графики сигналов датчиков
Практика 7: Интеграция модели и анализ разгона
НЕДЕЛЯ 4: ПРАКТИКУМ

Практика 7: Интеграция модели и анализ разгона

Объединяем все компоненты, проводим финальные симуляции и верификацию

1.5 часа
7
Интеграция и анализ разгона
1.5 часа
Практика
+
Цель работы

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

Результат: готовая к сдаче модель, файлы данных и численные показатели для отчёта.
Чек-лист: что должно быть готово
КомпонентОткудаСтатус
Параметры варианта (базовые)Практика 2
Расширенные параметры (тепло, шум, ...)Практика 3
Модель динамики с усложнениямиПрактика 4
Модели датчиков с шумами и люфтомПрактика 5
П-регулятор с настроенным KpПрактика 6
Скрипт инициализации (все параметры)Практика 3-6
Важно: Если какой-то компонент не готов или не отлажен — вернитесь к соответствующей практике. Интеграция "сырых" блоков приведёт к неработоспособности модели.
Задание 1: Сборка финальной модели
  1. Создайте новую модель variant_X_final.slx.
  2. Скопируйте в неё все отработанные подсистемы из предыдущих моделей:
    • Подсистему регулятора (из Практики 6)
    • Подсистему динамики (из Практики 4)
    • Подсистему датчиков (из Практики 5)
  3. Организуйте связи между подсистемами:
    • Выход датчиков (U_IR) → вход регулятора (обратная связь)
    • Выход регулятора (u_left, u_right) → вход динамики
    • Из динамики: v, ω, θ → входы датчиков
  4. Добавьте блоки To Workspace для всех сигналов, которые понадобятся в анализе:
    • Скорость v(t)
    • Ускорение a(t)
    • Ток i(t)
    • Ошибка слежения e(t)
    • Температура T(t) (если есть)
    • Траектория x(t), y(t) (если моделируется)
  5. Запустите симуляцию с базовым сценарием (ступенчатое задание) и проверьте, что всё работает.
┌────────────────────────────────────────────────────┐
│                  FINAL MODEL                         │
├────────────────────────────────────────────────────┤
│                                                      │
│  [Reference] ──► [P_Controller] ──► [Dynamics] ──┐  │
│                        ▲              │           │  │
│                        │              ▼           │  │
│                        └─────── [Sensors] ◄───────┘  │
│                                                      │
│  [To Workspace] ◄──────────────────────────────────┘  │
└────────────────────────────────────────────────────┘
                            
Совет: Используйте блоки Goto/From для передачи сигналов между подсистемами, чтобы не загромождать линии связи.
Задание 2: Анализ динамики разгона

Сценарий 1: Разгон до максимальной скорости

  1. Установите на входе регулятора ступенчатое задание: $U_{ref} = U_{max}$ (соответствует движению по прямой).
  2. Задайте время симуляции 5-10 секунд (до выхода на установившийся режим).
  3. Запустите симуляцию и сохраните данные.
  4. Выполните скрипт анализа (из Лекции 4) и получите:
    • $v_{уст}$ — установившаяся скорость
    • $t_{90}$ — время разгона до 90%
    • $t_s$ — время установления (5% коридор)
    • $OS$ — перерегулирование
    • $a_{max}$ — максимальное ускорение

Сценарий 2: Реакция на ступенчатое изменение задания

  1. Подайте на вход сигнал, изменяющийся с 0 до U_max в момент t=1 с, и обратно в 0 в t=5 с.
  2. Проанализируйте переходные процессы при разгоне и торможении.
% Скрипт анализа для всех сценариев function analyze_step_response(v_data, t_data, v_target) v_ss = v_data(end); t90_idx = find(v_data >= 0.9*v_ss, 1); t90 = t_data(t90_idx); v_max = max(v_data); OS = (v_max - v_ss)/v_ss * 100; tol = 0.05*v_ss; ts_idx = find(abs(v_data - v_ss) > tol, 1, 'last'); ts = t_data(ts_idx + 1); a = diff(v_data)./diff(t_data); a_max = max(a); fprintf('v_ss = %.2f м/с\n', v_ss); fprintf('t90 = %.2f с\n', t90); fprintf('ts = %.2f с\n', ts); fprintf('OS = %.1f%%\n', OS); fprintf('a_max = %.2f м/с²\n', a_max); % Проверка по ТЗ if v_ss >= v_target disp('✓ Скорость соответствует ТЗ'); else disp('✘ Скорость ниже требуемой'); end end
Ожидаемые результаты для разных групп:
  • Вар.1 (эконом): v_ss ≈ 0.8 м/с, OS ≤ 20%, t90 ≈ 1.5-2 с
  • Вар.2 (точник): v_ss ≈ 0.35 м/с, OS ≤ 5%, ts ≤ 1.5 с
  • Вар.3 (тяжеловес): v_ss ≥ 0.6 м/с, F_x ≥ 50 Н
  • Вар.4 (гонщик): v_ss ≥ 2.5 м/с, a_max большая
Задание 3: Верификация всех требований ТЗ

Для каждого требования из вашего ТЗ проведите соответствующий тест:

ТребованиеТестКритерий
Максимальная скоростьРазгон до упораv_уст ≥ v_target
ПеререгулированиеРазгонOS ≤ OS_max
Время установленияРазгонts ≤ ts_max
Точность слеженияДвижение по трассеmax|e| ≤ ε_max
Тяговое усилиеРазгон с грузомF_x ≥ F_req
Тормозной путьЭкстренное торможениеs_brake ≤ s_max
Потребляемая мощностьРазгонP_max ≤ P_limit
ТемператураДлительный прогонT_max ≤ T_limit
ШумРазгонL_p ≤ L_limit

Для каждого теста запишите полученное значение и вывод (соответствует / не соответствует).

Если какой-то показатель не соответствует ТЗ — попробуйте:
  • Изменить Kp (возможно, нужно уменьшить для снижения OS или увеличить для быстродействия)
  • Вернуться к выбору компонентов (более мощный двигатель, другой редуктор)
  • Проверить, не слишком ли велики шумы или люфт
В реальном проекте это итерационный процесс.
Задание 4: Сбор данных для отчёта

Какие графики нужно сохранить:

  1. График скорости v(t) при разгоне (с отметками t90, ts, v_уст).
  2. График ускорения a(t) при разгоне.
  3. График тока i(t) и мощности P(t).
  4. График ошибки слежения e(t) при движении по трассе.
  5. Траектория робота x(t), y(t) (если моделировали).
  6. График температуры T(t) (если есть тепловая модель).
  7. График уровня шума L_p(t) (для вар.5).

Какие численные значения записать:

  • Все показатели из задания 2 и 3.
  • Параметры модели (m, r, n, km, ke, R, Kp).
  • Особые параметры (Rth, Cx, A, k_soft, k_mu и т.д.).
% Сохранение графиков в файлы figure(1); plot(t_data, v_data, 'b-', 'LineWidth', 1.5); hold on; plot([0 t_data(end)], [v_ss v_ss], 'r--'); plot([t90 t90], [0 v_ss], 'g--'); xlabel('Время, с'); ylabel('Скорость, м/с'); title('Разгон робота'); legend('v(t)', 'v_уст', 't90'); grid on; saveas(gcf, 'v_profile.png');
Что должно быть готово к концу занятия
.slx
variant_X_final.slx
Финальная интегрированная модель
.m
init_variant_X_final.m
Скрипт инициализации со всеми параметрами
.m
analyze_results.m
Скрипт анализа (выдаёт численные значения)
.png
*.png
Все сохранённые графики (5-10 файлов)
.mat
results.mat
Сохранённые данные симуляции
Всё это понадобится для оформления отчёта на Практике 8.
Практика 2: Три задачи системного аналитика
НЕДЕЛЯ 2: ПРАКТИКУМ

Практика 2: Три задачи системного аналитика

ВЫДЕЛИТЬ → НАЗНАЧИТЬ → СОБРАТЬ. Полный цикл от ТЗ до Simulink-модели.

1.5 часа
3
Задачи 1–3: Выделить, Назначить, Собрать
1.5 часа
Практика
+
Цель работы

???? ЗАДАЧА 1. ВЫДЕЛИТЬ

  • Извлечь из ТЗ жёсткие параметры: $m$, $v_{\max}$, $\mu$, $c_r$
  • Выписать ограничения

⚙️ ЗАДАЧА 2. НАЗНАЧИТЬ

  • Выбрать колёса, редуктор, двигатель
  • Рассчитать $k_1$, $k_2$

???? ЗАДАЧА 3. СОБРАТЬ

  • Simulink-модель динамики
  • Графики $v(t), a(t), x(t)$
1. Модель динамики
$$ m\frac{dv}{dt} = F_x - F_r $$
$$ F_x = k_1 U - k_2 v $$
$$ k_1 = \frac{\eta n k_m}{R},\quad k_2 = \frac{\eta n^2 k_e k_m}{R} $$
$$ F_r = c_r m g $$
2. База знаний: колёса, редукторы, двигатели, драйверы

ТАБЛИЦА 1. КОЛЁСА

ТипМатериал / μДиаметр, ммНазначение
МиниатюрноеПолиуретан (0.25–0.30)20–30Склад, офис
ПрецизионноеРезина мед. (0.50–0.60)18–25Лаборатории
ГрузовоеПолиамид (0.15–0.20)90–120Промышленность
ВысокоскоростноеСиликон (0.70–0.75)70–90Соревнования
БесшумноеРезина мягкая (0.40–0.45)35–50Медицина
МягкоеТермоэластопласт (0.30–0.40)50–70Библиотеки
ВнедорожноеПневматика (0.25–0.70)120–150Стройка
Высокий КПДПолиуретан тв. (0.30–0.35)45–60Энергоэффективность
УчебноеРезина (0.45–0.50)30–40Образование
АвиационноеРезина спец. (0.35–0.40)70–90Аэропорты
АгрохимстойкоеРезина агро (0.20–0.80)110–130Теплицы

ТАБЛИЦА 1.1. РЕДУКТОРЫ

ТипПередаточное $n$КПД $\eta$ЛюфтПрименение
Прямозубый пластик5:1–20:10.65–0.75ВысокийЭконом
Планетарный10:1–50:10.70–0.80Очень низкийТочные
Червячный30:1–80:10.50–0.65НизкийТяговые
Косозубый15:1–30:10.75–0.85НизкийБесшумные

ТАБЛИЦА 2. ДВИГАТЕЛИ

ТипМодель$k_m$, Н·м/А$k_e$, В·с/рад$R$, Ом$U$, В$P$, ВтЦена, руб
МикродвигательN200.010–0.0150.010–0.0153–86–121–3200–400
Серво прециз.Maxon DCX0.020–0.0300.020–0.0302–418–248–154000–6000
Щёточный тяг.MY10160.12–0.180.12–0.180.3–0.624200–3003000–4500
БесколлекторныйTurnigy0.030–0.0400.030–0.0400.1–0.31225–402500–3500
Серво низкошум.Faulhaber0.025–0.0350.025–0.0351.5–2.51815–255000–7000
Колл. с энкодеромPololu0.060–0.0800.060–0.0801.0–1.51220–301800–2500
ГерметичныйAMETEK0.20–0.250.20–0.250.2–0.336350–4505500–7000
Высокоэфф.Maxon EC0.040–0.0500.040–0.0500.5–0.82412–184800–6000
УчебныйIG320.015–0.0200.015–0.0202.5–4.0125–8800–1200
Сдвоенный резерв.Dunkermotoren0.090–0.1100.090–0.1100.4–0.648120–18011000–14000
Химстойкий BLDCEC-i 400.070–0.0900.070–0.0900.3–0.548100–15013000–16000

ТАБЛИЦА 3. ДРАЙВЕРЫ

ТипТок, АНапряжение, ВИнтерфейсЦена, руб
Эконом2×26–12ШИМ150–300
Прецизионный212–24USB/CAN8500–11000
Тяговый2×2512–24RC/PWM11000–14000
Гоночный BLDC4012DShot1500–2200
Бесшумный1.512–24RS23216000–20000
С рекуперацией2×1512USB/I2C8000–10000
Герметичный10036–48CAN25000–32000
USB-драйвер2×3.66–24ШИМ400–600
Учебный212ШИМ1000–1500
Резервированный2×3048EtherCAT29000–35000
Влагозащищённый1548CAN9000–11000
3. Алгоритм: три задачи по шагам

???? ЗАДАЧА 1. ВЫДЕЛИТЬ

ШагДействие
1.1Записать массу $m$ (кг)
1.2Записать $v_{\max}$ (м/с)
1.3Записать $\mu$ (коэф. сцепления)
1.4Определить $c_r$ по покрытию
1.5Выписать особые ограничения

⚙️ ЗАДАЧА 2. НАЗНАЧИТЬ

ШагДействиеФормула
2.1Задать время разгона $t_{\text{acc}}$1–2 с
2.2Выбрать $n$ (редуктор)5,10,15,20,30,50
2.3Рассчитать $r$$r = \frac{v_{\max}}{314/n}$
2.4$F_x$ (сила тяги)$F_x = 1.2(c_r m g + m v_{\max}/t_{\text{acc}})$
2.5Момент на колесе $\tau_{\text{wheel}}$$\tau_{\text{wheel}} = F_x r$
2.6Момент двигателя $\tau_{\text{motor}}$$\tau_{\text{motor}} = \tau_{\text{wheel}}/(n \eta)$
2.7Выбрать двигатель (табл.2)$\tau_{\text{motor}} \le \tau_{\text{ном}}$
2.8Выписать $k_m, k_e, R, U$из паспорта
2.9Выбрать редуктор (табл.1.1)$n, \eta$
2.10Выбрать драйвер (табл.3)$I_{\max} \ge \tau_{\text{motor}}/k_m$
2.11Рассчитать $k_1, k_2$$k_1 = \eta n k_m / R$, $k_2 = \eta n^2 k_e k_m / R$
2.12Проверить сцепление$F_x \le \mu m g$

???? ЗАДАЧА 3. СОБРАТЬ

ШагДействие
3.1Создать Simulink-модель: Constant, Gain, Add, Integrator, Scope
3.2Задать $k_1, k_2, m, F_r, U$
3.3Собрать $m\dot{v} = k_1U - k_2v - F_r$
3.4Получить $v(t)$, $a(t)$, $x(t)$
Задание к следующему занятию
ЧТО НУЖНО СДЕЛАТЬ:
  1. ВЫДЕЛИТЬ: Из ТЗ выписать $m, v_{\max}, \mu$, определить $c_r$.
  2. НАЗНАЧИТЬ: Выбрать компоненты, рассчитать $k_1$, $k_2$.
  3. СОБРАТЬ: Simulink-модель, графики $v(t), a(t), x(t)$.
.m
variant_X_calculation.m
Скрипт с расчётами
.slx
lfr_dynamics.slx
Simulink модель
Практика 4: Сборка усложнённых моделей в Simulink
НЕДЕЛЯ 2: ПРАКТИКУМ

Практика 4: Сборка усложнённых моделей в Simulink

Реализуем тепловые модели, шумы, препятствия и другие эффекты из Лекции 2

1.5 часа
4
Сборка усложнённых моделей
1.5 часа
Практика
+
От базовой модели к усложнённой

В Практике 2 мы собрали базовую модель динамики:

$$m\frac{dv}{dt} = k_1 U - k_2 v - F_r$$

В Лекции 2 мы рассмотрели дополнительные эффекты для разных групп вариантов:

  • Группа 1: энергопотребление, КПД
  • Группа 2: акустический шум, вибрации, нестационарность
  • Группа 3: тепловая модель, торможение, препятствия
  • Группа 4: аэродинамика, срыв сцепления, crowd avoidance, переменное μ
Цель практики: добавить в базовую модель Simulink блоки, реализующие эти эффекты, используя параметры, рассчитанные в Практике 3.
Базовая модель (что уже должно быть)
U ──►[ k1 ]──►(∑)──►[1/m]──►[∫]──► v
        ▲       │                     │
        │       ▼                     │
        └────[ k2 ]◄──────────────────┘
        │
        └────[ Fr ]──────────────────►(∑)
                            

Добавлены также блоки для тока и мощности:

v ──►[ n/r ]──► ω ──►[ ke ]──►(∑)──►[ 1/R ]──► i
                        ▲        │
                        │        │
U ─────────────────────┘        └──►[×U]──► P_el
                            
Библиотека блоков для усложнений

Группа 1: Энергопотребление (вар.8)

Добавляемые блоки:

  • Constant: $P_{const} = 3$ Вт
  • Add: $P_{total} = P_{el} + P_{const}$
  • Compare to Constant: проверка $P_{total} \leq 15$ Вт
  • Stop Simulation: остановка при превышении
    i ──►[×U]──► P_el ──►(∑)──► P_total ──►[≤15]──► Stop
                          ▲
                          │
                    [P_const]
                            

Группа 2: Шум и вибрации (вар.5)

Добавляемые блоки:

  • Derivative: для di/dt
  • Abs: |di/dt|
  • Gain: $\beta_{noise}$ (перевод в дБ)
  • Constant: $A_{cogging}$ (пульсации)
  • Add: сумма шумовых компонент
  • Compare: проверка $L_p \leq 40$ дБ
$$L_p = 20 \log_{10}\left(\frac{|di/dt| \cdot \beta_{noise} + A_{cogging}}{A_0}\right)$$
i ──►[d/dt]──►| |──►[β]──►[log]──►(∑)──► L_p
                                    ▲
                                    │
                              [A_cogging]
                            

Для вибраций: $a_{vib} = k_{vib} \cdot a$

a ──►[k_vib]──► a_vib ──►[≤0.1]──► (проверка)
                            

Группа 3: Тепло, торможение, препятствия

️ Тепловая модель (вар.3)
$$T_m = T_{amb} + R_{th} \cdot i^2 R, \quad \frac{dT}{dt} = \frac{i^2 R - (T-T_{amb})/R_{th}}{C_{th}}$$
i ──►[u²]──►[×R]──► P_loss ──►[÷C_th]──►[∫]──► T_m
                                    ▲        │
                                    │        │
                                    └──[ - ]─┘
                                    (T - T_amb)/R_th
                            
Тормозной путь (вар.6)
$$s_{brake} = \frac{v^2}{2 a_{brake}}$$
v ──►[u²]──►[÷(2·a_brake)]──► s_brake ──►[≤0.5]──► проверка
                            
Препятствия (вар.7)
$$F_{step} = m g \left[1 - \left(1 - \frac{h}{r}\right)^2\right]^{1/2}$$
h ──►[1 - h/r]──►[u²]──►[1 - ...]──►[sqrt]──►[×mg]──► F_step ──►(∑ сил)
                            

⚡ Группа 4: Аэродинамика, сцепление, crowd avoidance

Аэродинамика (вар.4)
$$F_a = \frac{1}{2} \rho C_x A v^2$$
v ──►[u²]──►[× 0.5·ρ·Cx·A ]──► F_a ──►(∑ сил) с минусом
                            
⚠️ Срыв сцепления (вар.4)
$$\text{Если } F_x > \mu m g (1+\varepsilon) \Rightarrow \text{буксование}$$
F_x ──►[> μmg(1+ε)]──► Switch ──► recovery_mode
                            
Crowd avoidance (вар.10)
$$F_{obs} = \begin{cases} k_{soft}(d_0 - d), & d \leq d_0 \\ 0, & d > d_0 \end{cases}$$
d ──►[d <= d0]──► Switch ──►[×k_soft]──► F_obs ──►(∑ сил)
         │                       ▲
         └──(d0 - d)─────────────┘
                            
Переменное сцепление (вар.11)
$$\mu = \mu_0 + k_{\mu} \cdot RH$$
RH ──►[×k_μ]──►(∑)──► μ ──► в блок проверки сцепления
                 ▲
                 │
               [μ0]
                            
Как интегрировать новые блоки

Общий принцип: все дополнительные силы (аэродинамика, препятствия, crowd avoidance) добавляются в сумматор сил со знаком минус. Тепловые и шумовые модели — параллельно, они не влияют на движение, только на ограничения.

           ┌── F_a
           │
           ├── F_step
U──►...──►(∑)──► движение
           │
           └── F_obs
                            

Дополнительные проверки (температура, шум, мощность) подключаются к соответствующим сигналам и могут останавливать симуляцию при нарушении.

Важно: Сначала добейтесь устойчивой работы базовой модели, затем добавляйте усложнения по одному и проверяйте их влияние.
Пример полной модели для варианта 5 (Медицинский курьер)

Параметры (из Практики 3):

  • Базовые: m=1.8, r=0.04, n=20, km=0.03, ke=0.03, R=1.8, Fr=0.15, U=18
  • Специфические: beta_noise=3, A_cogging=0.1, k_vib=0.08, di_max=6.7

Структура модели:

  1. Базовая часть: расчёт v, a, x, i, P_el
  2. Блок шума: di/dt → |di/dt| → β·|di/dt| + A_cogging → L_p
  3. Блок вибраций: a → k_vib·a → a_vib
  4. Блоки проверки: L_p ≤ 40, a_vib ≤ 0.1, |di/dt| ≤ 6.7
% Инициализация для вар.5 m=1.8; r=0.04; n=20; km=0.03; ke=0.03; R=1.8; Fr=0.15; U=18; beta_noise=3; A_cogging=0.1; k_vib=0.08; di_max=6.7; Lp_max=40; a_vib_max=0.1;

Ожидаемые результаты: при разгоне с максимальным ускорением di/dt может превысить лимит → симуляция остановится, нужно будет уменьшить ускорение (увеличить время разгона).

Чек-лист: что должно быть в финальной модели
КомпонентЕсть?
Базовая динамика: v, a, x
Расчёт тока i(t)
Расчёт мощности P_el(t)
Специфические блоки для вашей группы
Проверка ограничений из ТЗ (с остановкой или предупреждением)
Графики всех ключевых сигналов
Критерий готовности: модель работает и при нарушении любого требования ТЗ выдает сигнал (остановку или предупреждение).
Задание к следующему занятию
  1. Откройте свою базовую модель из Практики 2.
  2. Добавьте в неё специфические блоки согласно вашей группе (по материалам выше).
  3. Используйте параметры, рассчитанные в Практике 3.
  4. Добейтесь, чтобы модель работала и проверяла все ограничения ТЗ.
  5. Сохраните модель как variant_X_extended.slx.
  6. Сделайте скриншоты модели и графиков для отчёта.
.slx
variant_X_extended.slx
Расширенная модель с усложнениями
.m
init_variant_X_extended.m
Скрипт инициализации со всеми параметрами
.png
screenshots/
Папка со скриншотами
Практика 6: Реализация П-регулятора и анализ устойчивости
НЕДЕЛЯ 3: ПРАКТИКУМ

Практика 6: Реализация П-регулятора и анализ устойчивости

Замыкаем обратную связь, настраиваем Kp, исследуем влияние шумов и люфтов

1.5 часа
6
П-регулятор и анализ устойчивости
1.5 часа
Практика
+
Цель работы

Реализовать П-регулятор для слежения за линией, исследовать влияние коэффициента Kp на качество управления, а также влияние шумов и люфтов на устойчивость системы.

Конечный результат: замкнутая система управления, удерживающая робота на линии при наличии возмущений.
Структура замкнутой системы
      Заданная траектория (линия)
                │
                ▼
         [Сумматор ошибки]◄─── сигнал с датчиков
                │
                ▼
      [П-регулятор: Δu = Kp·e]
                │
                ▼
[Преобразование в u_left, u_right]
                │
                ▼
  [Модель динамики с датчиками]
                │
                └───► сигналы датчиков
                            
Алгоритм управления: $$e(t) = U_{ref} - U_{IR}(t)$$ $$\Delta u(t) = K_p \cdot e(t)$$ $$u_{left} = u_0 + \frac{\Delta u}{2}, \quad u_{right} = u_0 - \frac{\Delta u}{2}$$

где $U_{ref}$ — напряжение, соответствующее положению точно над линией (обычно $U_{max}/2$).

Задание 1: Реализация П-регулятора
  1. Откройте модель из Практики 5 (variant_X_sensors.slx).
  2. Добавьте блоки для расчёта ошибки:
    • Constant: $U_{ref} = 2.5$ В (при Umax=5 В)
    • Add: $e = U_{ref} - U_{IR}$
  3. Добавьте Gain: $K_p$ (начальное значение 0.1).
  4. Добавьте блоки формирования управляющих сигналов:
    • Constant: $u_0$ — базовое напряжение (например, 6 В для 12-вольтовой системы)
    • Gain: 0.5 для $\Delta u/2$
    • Add/Subtract: $u_{left} = u_0 + \Delta u/2$, $u_{right} = u_0 - \Delta u/2$
  5. Подключите u_left и u_right ко входам модели динамики (вместо постоянного U).
  6. Запустите симуляцию и посмотрите, как меняется ошибка e(t).
U_ref ──►(∑)──► e ──►[Kp]──► Δu ──►[0.5]──► Δu/2 ──►(∑)──► u_left
          ▲                             │                ▲
          │                             │                │
     U_IR ┘                             └──►(∑)──► u_right
                                          │    ▲
                                          └────┘
                                        u0 (constant)
                            
Проверка: Убедитесь, что знаки правильные! При положительной ошибке (робот слева от линии) нужно поворачивать направо, т.е. u_left > u_right.
Задание 2: Настройка коэффициента Kp
  1. Проведите серию экспериментов с разными Kp: 0.05, 0.1, 0.2, 0.5, 1.0, 2.0.
  2. Для каждого Kp запишите:
    • Время установления (когда ошибка впервые войдёт в ±5% от установившейся)
    • Перерегулирование (максимальное превышение)
    • Наличие колебаний
  3. Постройте графики зависимости перерегулирования и времени установления от Kp.
  4. Определите критический Kp, при котором возникают незатухающие колебания.
  5. Выберите оптимальный Kp = 0.5·Kp_крит (по правилу Зиглера-Никольса).
Пример для вар.1:
KpПеререгулированиеВремя установления, сПримечание
0.050%3.2Медленно
0.15%1.8Хорошо
0.218%1.2Колебания
0.535%1.0Сильные колебания
1.0Неустойчиво

Kp_крит ≈ 0.8, оптимальный Kp = 0.4.

Задание 3: Влияние шумов на работу регулятора
  1. При оптимальном Kp последовательно увеличивайте уровень шума (σ) в 2, 5, 10 раз.
  2. Наблюдайте за сигналом управления u_left, u_right. Появляются ли высокочастотные колебания?
  3. Если да, попробуйте уменьшить Kp в 2 раза и повторите эксперимент.
  4. Сделайте вывод: как шум влияет на максимально допустимый Kp?
Оценка: при наличии шума Kp_max ≈ Kp_opt_ideal / (1 + SNR_коэффициент)
Наблюдение: Шумы вызывают дребезг управления, что может привести к перегреву двигателей и повышенному износу.
Задание 4: Влияние люфта на устойчивость
  1. При оптимальном Kp (без шума) включите люфт в редукторе (блок Backlash).
  2. Начните с малого люфта (0.001 рад) и постепенно увеличивайте до 0.01, 0.02, 0.05 рад.
  3. Для каждого значения люфта определите критический Kp, при котором возникают автоколебания.
  4. Постройте график зависимости Kp_крит от величины люфта.
Результат: С увеличением люфта максимально допустимый Kp уменьшается. При большом люфте система может стать неустойчивой даже при малом Kp.
Физика явления: Люфт вносит запаздывание и гистерезис, что снижает запас устойчивости.
Задание 5: Моделирование движения по трассе
  1. Создайте простую трассу: прямые участки и повороты.
  2. Для этого задайте желаемое положение линии как функцию времени или координаты x.
  3. Подайте это на вход модели (вместо постоянного U_ref).
  4. Промоделируйте прохождение трассы с оптимальным Kp и с учётом шумов/люфтов.
  5. Постройте траекторию робота и оцените максимальное отклонение от линии.
Желаемая траектория (x_ref(t)) ──►[модель датчика]──► U_ref
                                       (идеальный датчик)
                                            │
                                            ▼
                                    [сравнение с реальным]
                            

Для создания трассы можно использовать Signal Builder или MATLAB-функцию.

% Пример задания трассы (MATLAB Function) function x_ref = трасса(t) if t < 2 x_ref = 0; % прямо elseif t < 4 x_ref = 0.1 * (t-2); % плавный поворот else x_ref = 0.2; % смещение end end
Анализ результатов и выводы

По итогам работы необходимо сделать выводы по следующим пунктам:

  1. Как зависит качество управления (перерегулирование, время установления) от Kp?
  2. Какое значение Kp оптимально для вашего варианта и почему?
  3. Как шумы влияют на работу регулятора? Как можно уменьшить их влияние?
  4. Как люфт влияет на устойчивость? Почему при люфте приходится уменьшать Kp?
  5. Удаётся ли роботу удерживаться на линии при прохождении трассы? Каково максимальное отклонение?
  6. Соответствует ли полученная точность требованиям ТЗ?
Важно: Все выводы должны быть подтверждены графиками и численными значениями.
Задание к следующему занятию
  1. Доработать модель с П-регулятором, подобрав оптимальный Kp.
  2. Исследовать влияние шумов и люфта на устойчивость.
  3. Промоделировать прохождение трассы, получить графики ошибки и траектории.
  4. Сделать выводы о соответствии ТЗ.
  5. Сохранить модель как variant_X_control.slx.
  6. Подготовить отчёт с графиками и выводами.
.slx
variant_X_control.slx
Модель с П-регулятором
.png
step_response.png
Графики переходного процесса
.png
trajectory.png
Траектория движения
Практика 8: Оформление отчёта и сдача проекта
НЕДЕЛЯ 4: ЗАЩИТА ПРОЕКТА

Практика 8: Оформление отчёта и сдача проекта

Максимум 40 баллов: по 10 за каждый цикл + 10 за оформление

1.5 часа
8
Оформление отчёта и сдача
1.5 часа
Практика
+
Критерии оценки (максимум 40 баллов)
КритерийМакс. балл
Цикл 1: Анализ ТЗ и расчёт параметров
- Корректно выписаны все исходные данные из ТЗ
- Рассчитаны недостающие параметры (r, n, km, ke, R, k1, k2)
- Выбраны компоненты (колёса, редуктор, двигатель, драйвер)
- Проверены ограничения (сцепление, бюджет)
10
Цикл 2: Моделирование динамики и усложнения
- Собрана базовая модель в Simulink
- Добавлены усложнения по группе варианта (тепло, шум, аэродинамика и т.д.)
- Добавлены датчики с шумами и люфт
- Модель работает, выдаёт осмысленные результаты
10
Цикл 3: Регулятор и анализ разгона
- Реализован П-регулятор, подобран оптимальный Kp
- Проведён анализ разгона (t90, ts, OS, v_уст)
- Проверено соответствие всем требованиям ТЗ
- Проведён анализ влияния шумов/люфтов
10
Оформление отчёта
- Структура отчёта соответствует требованиям
- Все графики подписаны, имеют легенды, оси
- Численные результаты сведены в таблицу
- Сделаны чёткие выводы о соответствии ТЗ
- Приложены все файлы (модель, скрипты, графики)
10
ИТОГО:40
Примечание: Баллы снижаются за отсутствие любого из перечисленных пунктов. Частичное выполнение оценивается пропорционально.
Структура отчёта

???? Рекомендуемая структура (в MATLAB Live Script или Word):

  1. Титульный лист (название работы, ФИО, группа, вариант).
  2. Исходные данные (ТЗ) — таблица с параметрами из вашего варианта.
  3. Цикл 1: Расчёт параметров
    • Выбор колеса и редуктора (с обоснованием).
    • Расчёт силы тяги, моментов.
    • Выбор двигателя (таблица с параметрами).
    • Расчёт k1, k2, проверка сцепления, бюджета.
    • Результат: таблица всех параметров.
  4. Цикл 2: Моделирование динамики
    • Схема Simulink-модели (скриншот).
    • Описание добавленных усложнений (тепло, шум, аэродинамика...).
    • Графики: v(t), i(t), P(t), T(t) (если есть).
    • Верификация: сравнение расчётной и полученной скорости.
  5. Цикл 3: Регулятор и анализ разгона
    • Подбор Kp (таблица с перерегулированием/временем).
    • График переходного процесса с отметками t90, ts, OS.
    • Анализ влияния шумов и люфта.
    • Результаты моделирования трассы (если есть).
  6. Сводная таблица соответствия ТЗ
    • Для каждого требования из ТЗ — полученное значение и вывод.
  7. Заключение и выводы
    • Соответствует ли проект ТЗ? Если нет — что можно улучшить.
  8. Приложение
    • Листинги скриптов (init, analyze).
    • Все сохранённые графики (в хорошем разрешении).
Пример оформления таблицы соответствия ТЗ:
Требование ТЗЗначениеПолученоСтатус
Масса, кг1.2 ± 0.11.2
Скорость, м/с≥ 0.80.82
Перерегулирование, %≤ 2015
Бюджет моторов, руб≤ 15001200
Состав сдаваемых материалов

Все файлы должны быть упакованы в один архив Фамилия_ИО_Вариант_X.zip со следующей структурой:

????
models/
Папка с моделями Simulink
.slx
variant_X_final.slx
Финальная модель
????
scripts/
Папка со скриптами
.m
init_variant_X.m
Скрипт инициализации
.m
analyze_results.m
Скрипт анализа
????
figures/
Папка с графиками (PNG)
????
report.pdf
Отчёт (PDF или MATLAB Live Script .mlx)
????
README.txt
Краткое описание (опционально)
Важно: Перед сдачей проверьте, что все файлы открываются и скрипты выполняются без ошибок. Модель должна запускаться на любом компьютере с MATLAB/Simulink.
Чек-лист самопроверки перед сдачей
Пункт
В отчёте указаны ФИО, группа, номер варианта
Все исходные данные из ТЗ выписаны в таблицу
Приведены расчёты недостающих параметров с формулами
Есть скриншот модели Simulink
Есть графики v(t), i(t), P(t) (минимум 3 графика)
Графики подписаны, есть легенда, единицы измерения
Показан процесс подбора Kp (таблица с разными значениями)
Рассчитаны t90, ts, OS для выбранного Kp
Составлена таблица соответствия всем пунктам ТЗ
Сделаны выводы (соответствует / не соответствует)
Все файлы (модель, скрипты, графики) приложены к архиву
Архив назван по шаблону: Фамилия_ИО_Вариант_X.zip
Если все пункты отмечены — можно сдавать!
Порядок сдачи
  1. Загрузите архив в систему дистанционного обучения (или отправьте преподавателю по почте).
  2. Будьте готовы на следующем занятии кратко (3-5 минут) представить свою работу:
    • Какой вариант, какие особенности.
    • Основные трудности и как их решили.
    • Соответствует ли проект ТЗ.
  3. Ответьте на вопросы преподавателя по модели и расчётам.
Удачи в сдаче! ????
Практика 9: Расширенные модели
НЕДЕЛЯ 5: РАСШИРЕННЫЕ МОДЕЛИ

Практика 9: Расширенные модели

Аэродинамика, уклон, переменная масса, препятствия, тепловая модель, переменное сцепление

1.5 часа
9
Расширенные модели
1.5 часа
Практика
+
1. Цель практики

Научиться добавлять в модель дополнительные физические эффекты, учитывающие специфику варианта:

  • Аэродинамика — для быстрых роботов (группа 4)
  • Уклон — для роботов, работающих на наклонных поверхностях (вар.8, 11)
  • Переменная масса — для роботов с загрузкой/разгрузкой груза (группа 3)
  • Препятствия — для роботов, преодолевающих бордюры (вар.7, 10)
  • Тепловая модель — для роботов с длительной работой (вар.3)
  • Переменное сцепление — для роботов, работающих во влажной среде (вар.11)
2. Математические модели усложнений

🌬️ Аэродинамика

$$F_{air} = \frac{1}{2} \rho C_x A v^2 \cdot \text{sign}(v)$$

где $\rho = 1.225$ кг/м³ — плотность воздуха, $C_x$ — коэффициент лобового сопротивления, $A$ — лобовая площадь.

⛰️ Уклон

$$F_{gravity} = m g \sin(\alpha)$$

где $\alpha$ — угол наклона поверхности.

📦 Переменная масса

$$m_{total}(t) = m_0 + m_{load} \cdot H(t - t_{load})$$

где $H(t)$ — функция Хевисайда (ступенька).

🧱 Препятствие

$$F_{step} = m g \sqrt{1 - \left(1 - \frac{h}{r}\right)^2}$$

где $h$ — высота препятствия, $r$ — радиус колеса.

🔥 Тепловая модель

$$\frac{dT}{dt} = \frac{i^2 R - (T - T_{amb})/R_{th}}{C_{th}}$$

где $R_{th}$ — тепловое сопротивление, $C_{th}$ — теплоёмкость.

💧 Переменное сцепление

$$\mu = \mu_0 + k_\mu \cdot RH$$

где $RH$ — относительная влажность, $k_\mu$ — коэффициент влияния.

3. Автоматическое включение по группам вариантов
ГруппаВариантыВключаемые усложнения
1. Эконом1, 8люфт, шум
2. Точные2, 5, 9люфт (малый), шум (малый)
3. Промышленные3, 6, 7переменная масса, люфт; для вар.3 + тепловая модель; для вар.7 + препятствия
4. Экстремальные4, 10, 11аэродинамика, люфт, шум; для вар.11 + переменное трение, уклон; для вар.10 + препятствия
⚙️ В проекте: В файле report_template_block5.mlx усложнения включаются автоматически при указании номера варианта.
% Пример автоматического определения флагов для варианта 10 variant_number = 10; group = get_group(variant_number); % group = 4 % Включаем усложнения для группы 4 flags.aerodynamics = true; flags.backlash = true; flags.noise = true; if variant_number == 10 flags.obstacle = true; % для аэропортного гида end
4. Примеры для разных групп вариантов
📌 Группа 1 (Эконом) — вар.8 "Офисный логист"

Требование: энергопотребление ≤15 Вт, КПД ≥85%

$$P_{el} = U \cdot i + P_{const}, \quad P_{const} = 3\ \text{Вт}$$

Вопрос для размышления: Как изменится энергопотребление при движении по уклону?

📌 Группа 2 (Точные) — вар.5 "Медицинский курьер"

Требование: шум ≤40 дБ, вибрации ≤0.1g

$$L_p = 20 \log_{10}\left(\frac{|di/dt|}{i_0}\right) + L_{cogging}$$

Вопрос для размышления: Как снизить шум без потери производительности?

📌 Группа 3 (Промышленные) — вар.3 "Промышленный тяжеловес"

Требование: работа с грузом, наработка ≥2000 ч

$$m_{total} = m_0 + m_{load} \cdot H(t - t_{load}), \quad \frac{dT}{dt} = \frac{i^2R - (T - T_{amb})/R_{th}}{C_{th}}$$

Вопрос для размышления: Как загрузка влияет на время разгона и нагрев двигателя?

📌 Группа 4 (Экстремальные) — вар.10 "Аэропортный гид"

Требование: MTBF ≥5000 ч, безопасность, crowd avoidance

$$F_{air} = \frac{1}{2}\rho C_x A v^2, \quad F_{obs} = k_{soft} \cdot (d_0 - d)$$

Вопрос для размышления: При какой скорости аэродинамика становится критичной?

5. Готовые функции в проекте
📁
dynamics/add_aerodynamics.m
Сопротивление воздуха: F_air = 0.5·ρ·Cx·A·v²·sign(v)
📁
dynamics/add_slope.m
Гравитация на уклоне: F_gravity = m·g·sin(α)
📁
dynamics/add_variable_mass.m
Переменная масса: m_total = m0 + m_load·step(t - t_load)
📁
dynamics/add_variable_friction.m
Переменное сцепление: μ = μ₀ + k_μ·RH
📁
dynamics/add_obstacle.m
Препятствия: F_step = m·g·√(1 - (1 - h/r)²)
📁
actuators/heating_model.m
Тепловая модель: dT/dt = (i²R - (T - T_amb)/Rth)/Cth
Как использовать: В main.mlx установите соответствующие флаги:
flags.aerodynamics = true; % для вар.4,10,11 flags.variable_mass = true; % для вар.3,6,7 flags.slope = true; % для вар.8,11 flags.heating = true; % для вар.3 flags.obstacle = true; % для вар.7,10
6. Для студентов, работающих в Simulink

🌬️ Как добавить аэродинамику в Simulink-модель:

v ──► [Math Function: u²] ──► [Gain: 0.5·ρ·Cx·A] ──► [Sign] ──► F_air
                            
  1. Взять блок Math Function (Simulink → Math Operations) и настроить на u^2
  2. Добавить блок Gain с коэффициентом 0.5 * rho * Cx * A
  3. Добавить блок Sign для учёта направления
  4. Сигнал F_air подключить к сумматору сил со знаком минус

📦 Как добавить переменную массу:

t ──► [Step: t_load] ──► [Gain: m_load] ──► [Add] ──► m_total
                                        │
                                      m0
                            
  1. Создать блок Step с моментом переключения t_load
  2. Пропустить через Gain с коэффициентом m_load
  3. Добавить к массе m0 через сумматор
  4. Использовать m_total в блоке 1/m для расчёта ускорения
⚠️ Важно: Сначала добейтесь работы базовой модели, затем добавляйте усложнения по одному, проверяя их влияние.
7. Задание для студентов
  1. Определить свою группу по таблице выше
  2. Включить соответствующие флаги в main.mlx или в report_template_block5.mlx
  3. Запустить симуляцию и записать:
    • $v_{steady}$ — установившаяся скорость
    • $t_{rise}$ — время разгона до 95%
    • $OS$ — перерегулирование
  4. Сравнить с базовой моделью (без усложнений)
  5. Ответить на вопросы для своей группы:
    • Группа 1: Как изменится энергопотребление при движении по уклону?
    • Группа 2: Как шум и вибрации зависят от ускорения?
    • Группа 3: Как изменится время разгона при полной загрузке?
    • Группа 4: При какой скорости аэродинамика становится критичной?
Результат: У вас есть графики сравнения базовой и расширенной модели, численные значения метрик и понимание влияния усложнений.
Практика 10: Анализ чувствительности
НЕДЕЛЯ 5: АНАЛИЗ ЧУВСТВИТЕЛЬНОСТИ

Практика 10: Анализ чувствительности

Выявление критических параметров, обоснование допусков на изготовление

1.5 часа
10
Анализ чувствительности
1.5 часа
Практика
+
1. Цель практики

Определить, как изменение параметров системы влияет на её выходные характеристики. Это позволяет:

  • Выявить критические параметры — те, которые сильнее всего влияют на поведение
  • Обосновать допуски на изготовление — какие параметры нужно контролировать жёстко
  • Понять, на какие параметры стоит обратить внимание при выборе компонентов
2. Что такое чувствительность?
Определение:

Чувствительность — это отношение относительного изменения выхода к относительному изменению параметра.

$$S = \frac{\Delta y / y}{\Delta p / p} = \frac{\partial y}{\partial p} \cdot \frac{p}{y}$$
Простой пример: Если при увеличении массы на 10% максимальная скорость уменьшилась на 5%, то чувствительность $S = -0.5$.

📊 Интерпретация:

  • $|S| > 1$ — параметр сверхчувствительный (изменение параметра усиливается)
  • $|S| = 1$ — параметр чувствительный (изменения передаются один в один)
  • $|S| < 1$ — параметр малочувствительный (система компенсирует изменения)
3. Примеры анализа чувствительности
📌 Группа 1 (Эконом) — чувствительность к массе
$$v_{max} = \frac{k_1 U}{\mu m g}$$

Чувствительность: $S = -1$. При увеличении массы на 1%, скорость падает на 1%.

Вывод: Масса — критический параметр. Допуск на массу должен быть жёстким.

📌 Группа 2 (Точные) — чувствительность к люфту
$$\Delta x = \delta \cdot r \cdot n$$

Чувствительность: $S = 1$. При увеличении люфта на 1%, ошибка позиционирования растёт на 1%.

Вывод: Для точности ±2 мм максимальный люфт: $\delta_{max} = \frac{0.002}{r \cdot n}$.

📌 Группа 3 (Промышленные) — чувствительность к массе груза
$$t_{rise} \propto m_{total}$$

Чувствительность: $S = 1$. При увеличении массы груза на 10%, время разгона увеличивается на 10%.

Вывод: Нужен запас по мощности для работы с максимальной нагрузкой.

📌 Группа 4 (Экстремальные) — чувствительность к $C_x$
$$k_1 U = \mu m g + \frac{1}{2}\rho C_x A v_{max}^2$$

При $v_{max}=2.5$ м/с чувствительность $S \approx -0.15$.

Вывод: На низких скоростях аэродинамика малочувствительна. На высоких (>10 м/с) чувствительность растёт.

4. Готовая функция в проекте
📁
analysis/analyze_sensitivity.m
Автоматический анализ чувствительности: перебор параметров, расчёт S, построение графиков
% Пример использования mu_values = config.mu * linspace(0.8, 1.2, 7); results = analyze_sensitivity(config, flags, sim_params, control_mode, ... 'mu', mu_values, 'config.mu', ... params_aero, params_slope, params_mass, ... params_friction, params_obstacle, ... params_heating, params_backlash, params_noise);
Функция выполняет:
  1. Перебор значений параметра в заданном диапазоне
  2. Запуск симуляции для каждого значения
  3. Расчёт $v_{steady}$, $t_{rise}$, $v_{max}$
  4. Вычисление чувствительности $S$
  5. Построение графика зависимости
  6. Вывод результатов в консоль
5. Выбор второго параметра по группе
ГруппаВторой параметрОбозначение
1. ЭкономМасса$m$
2. ТочныеЛюфт$\delta$
3. ПромышленныеМасса груза / Теплосопротивление$m_{load}$ / $R_{th}$
4. ЭкстремальныеАэродинамика / Коэф. влажности$C_x$ / $k_\mu$
% В report_template_block5.mlx выбор происходит автоматически: switch group case 1, param_name = 'mass'; param_values = config.m * linspace(0.8, 1.2, 7); case 2, param_name = 'backlash'; param_values = ext_params.backlash_delta * linspace(0.5, 1.5, 7); case 3, param_name = 'm_load'; param_values = params_mass.m_load * linspace(0.5, 1.5, 7); case 4, param_name = 'Cx'; param_values = params_aero.Cx * linspace(0.5, 1.5, 7); end
6. Для студентов, работающих в Simulink

📊 Как провести анализ чувствительности в Simulink:

1. Параметризация модели:
   - Использовать переменные MATLAB в блоках Gain, Constant
   - Например, в блоке Gain записать `k1`, а в Workspace задать `k1 = 0.0168`

2. Создать скрипт для перебора параметров:
                            
% Анализ чувствительности к μ в Simulink mu_values = 0.01:0.005:0.05; v_steady = zeros(size(mu_values)); for i = 1:length(mu_values) mu = mu_values(i); simOut = sim('lfr_model'); % запуск модели v_data = simOut.v.signals.values; v_steady(i) = mean(v_data(end-100:end)); % установившаяся скорость end % Построение графика и расчёт чувствительности figure; plot(mu_values, v_steady, 'b-o', 'LineWidth', 1.5); xlabel('\mu'); ylabel('v_{steady}, м/с'); title('Зависимость установившейся скорости от коэффициента трения'); grid on; S = (v_steady(end) - v_steady(1))/mean(v_steady) / ... (mu_values(end) - mu_values(1))/mean(mu_values); fprintf('Чувствительность S = %.2f\n', S);
💡 Совет: Используйте блок To Workspace для сохранения сигналов. В параметрах блока выберите Save format: Structure With Time для удобной постобработки.
⚠️ Важно: Для ускорения расчётов можно использовать Simulink.SimulationInput и parfor для параллельного запуска.
7. Задание для студентов
  1. Выбрать два параметра для анализа:
    • Первый параметр (обязательный): коэффициент трения $\mu$
    • Второй параметр: по выбору в зависимости от группы (см. таблицу выше)
  2. Для каждого параметра:
    • Изменить в диапазоне ±20% от номинала (5-7 точек)
    • Для каждого значения запустить симуляцию
    • Записать установившуюся скорость $v_{steady}$
    • Построить график $v_{steady} = f(\text{параметр})$
  3. Вычислить чувствительность по формуле:
    $$S = \frac{v_{max} - v_{min}}{v_{ном}} \bigg/ \frac{p_{max} - p_{min}}{p_{ном}}$$
  4. Ответить на вопросы для своей группы:
    • Группа 1: Какой параметр критичнее — $\mu$ или $m$? Почему?
    • Группа 2: Какой максимальный люфт допустим для точности ±2 мм?
    • Группа 3: Как загрузка влияет на время разгона? Нужен ли запас по мощности?
    • Группа 4: При какой скорости аэродинамика становится критичной?
  5. Сделать выводы:
    • Какой параметр самый критический для вашего варианта?
    • Какие допуски нужно задать при изготовлении?
    • Если бы нужно было увеличить $v_{max}$ на 10%, какой параметр проще всего изменить?
Результат: Графики чувствительности, численные значения $S$, обоснование критических параметров и рекомендации по допускам.
8. Критерии оценки (в составе блока 5)
КритерийБаллы
Понимание критериев оценки (из ТЗ)2
Обоснование выбора усложнений (связь с группой)2
Анализ влияния усложнений (сравнение графиков)2
Анализ чувствительности (графики, расчёт S)2
Выводы и обоснования (критические параметры, допуски)2
ИТОГО за блок 510
Важно: Баллы ставятся не за запуск готовых функций, а за понимание и обоснование:
  • Почему выбран именно этот параметр для анализа?
  • Почему чувствительность получилась такой (связь с физикой)?
  • Как это знание поможет при проектировании?
9. Как это войдёт в отчёт

Все результаты практик 9 и 10 автоматически собираются в report_template_block5.mlx:

  • Автоматическое определение группы и включение усложнений
  • Сравнение базовой и расширенной модели (таблицы, графики)
  • Анализ чувствительности к $\mu$ и второму параметру
  • Формирование выводов и рекомендаций
Файл для отчёта: reports/report_template_block5.mlx
Запустите его, указав номер своего варианта, и получите готовый отчёт.
Практика 11: Метод Монте-Карло
НЕДЕЛЯ 6: ВЕРОЯТНОСТНЫЕ МЕТОДЫ

Практика 11: Метод Монте-Карло

Оценка вероятности успеха при случайном разбросе параметров

1.5 часа
11
Метод Монте-Карло
1.5 часа
Практика
+
1. Цель практики

Научиться применять метод Монте-Карло для оценки вероятности успеха робота при случайном разбросе параметров.

  • Генерировать случайные выборки параметров с заданными распределениями
  • Многократно запускать симуляцию с разными наборами параметров
  • Оценивать вероятность успеха и доверительные интервалы
  • Анализировать гистограммы выходных характеристик
2. Какие параметры имеют разброс?
ГруппаПараметры с разбросомРаспределениеРазброс
1. Экономμ, m, U, k1Нормальное / Равномерноеσ=5-10%
2. Точныеμ, m, U, k1, δНормальное (малый разброс)σ=3-5%
3. Промышленныеμ, m, U, k1, m_loadНормальное / Равномерноеσ=5-10%
4. Экстремальныеμ, m, U, k1, Cx, RHНормальное / Равномерноеσ=5-15%
📌 Пример для варианта 10 (Аэропортный гид):
% Распределения параметров mu_mean = 0.38; mu_std = 0.02; % нормальное, 5% разброс m_mean = 5.8; m_std = 0.2; % нормальное, 3.5% разброс U_min = 11.5; U_max = 12.5; % равномерное, ±4% Cx_mean = 0.35; Cx_std = 0.02; % нормальное, 6% разброс
3. Функция generate_variants.m
📁
utils/generate_variants.m
Генерация случайных выборок параметров
function params_variants = generate_variants(config, ext_params, N) % Генерация N случайных наборов параметров % Коэффициент трения: нормальное, σ = 5% от номинала mu_samples = normrnd(config.mu, config.mu * 0.05, [1, N]); % Масса: нормальное, σ = 3% от номинала m_samples = normrnd(config.m, config.m * 0.03, [1, N]); % Напряжение: равномерное, ±5% от номинала U_samples = unifrnd(12*0.95, 12*1.05, [1, N]); % Коэффициент мотора: нормальное, σ = 5% k1_samples = normrnd(config.k1, config.k1 * 0.05, [1, N]); % Люфт (если есть): нормальное, σ = 10% if isfield(ext_params, 'backlash_delta') && ext_params.backlash_delta > 0 delta_samples = normrnd(ext_params.backlash_delta, ... ext_params.backlash_delta * 0.1, [1, N]); else delta_samples = zeros(1, N); end % Сборка for i = 1:N params_variants(i).mu = max(0.01, mu_samples(i)); params_variants(i).m = max(0.1, m_samples(i)); params_variants(i).U = max(0, U_samples(i)); params_variants(i).k1 = max(0, k1_samples(i)); params_variants(i).delta = max(0, delta_samples(i)); end end
4. Функция monte_carlo.m
📁
analysis/monte_carlo.m
Основная функция метода Монте-Карло

Входные параметры:

  • config — базовая конфигурация
  • ext_params — расширенные параметры (для люфта)
  • flags — флаги усложнений
  • sim_params — параметры симуляции
  • control_mode — режим управления
  • params_* — параметры усложнений
  • N — количество итераций
  • v_target — целевая скорость из ТЗ
  • os_limit — допустимое перерегулирование

Выходные данные:

  • results.P_success — вероятность успеха
  • results.CI_lower, CI_upper — доверительный интервал
  • results.v_steady_mean, v_steady_std — статистика скорости
  • results.overshoot_mean, overshoot_std — статистика перерегулирования
  • Гистограммы v_steady и OS
5. Примеры для разных групп вариантов
📌 Группа 1 (Эконом) — вар.1 "Складской эконом"

Требование: v ≥ 0.8 м/с, OS ≤ 20%

Разброс параметров: μ ±10%, m ±5%, U ±5%

Ожидаемый результат: P_success ≈ 85-95%

📌 Группа 2 (Точные) — вар.2 "Лабораторный точник"

Требование: v = 0.3-0.4 м/с, OS ≤ 5%

Разброс параметров: μ ±3%, m ±2%, δ ±5%

Ожидаемый результат: P_success ≈ 90-98% (жёсткие допуски)

📌 Группа 3 (Промышленные) — вар.3 "Промышленный тяжеловес"

Требование: v ≥ 0.6 м/с, работа с грузом

Разброс параметров: μ ±10%, m ±5%, m_load ±10%

Ожидаемый результат: P_success ≈ 80-90% (влияние нагрузки)

📌 Группа 4 (Экстремальные) — вар.10 "Аэропортный гид"

Требование: v = 0.4-1.2 м/с, MTBF ≥ 5000 ч

Разброс параметров: μ ±10%, Cx ±10%, U ±5%

Ожидаемый результат: P_success ≈ 85-95%

6. Для студентов, работающих в Simulink

📊 Как провести метод Монте-Карло в Simulink:

1. Параметризация модели (переменные в Workspace)
2. Скрипт с циклом for и sim()
3. Сбор результатов и постобработка
                            
% Скрипт для Монте-Карло в Simulink N = 500; v_steady = zeros(1, N); overshoot = zeros(1, N); for i = 1:N % Генерация случайных параметров mu = normrnd(config.mu, config.mu * 0.05); m = normrnd(config.m, config.m * 0.03); U = unifrnd(11.5, 12.5); % Запись в Workspace assignin('base', 'mu', mu); assignin('base', 'm', m); assignin('base', 'U_constant', U); % Запуск симуляции simOut = sim('lfr_model'); % Анализ результатов v_data = simOut.v.signals.values; v_steady(i) = mean(v_data(end-100:end)); % Перерегулирование v_max = max(v_data); overshoot(i) = (v_max - v_steady(i)) / v_steady(i) * 100; if mod(i, 50) == 0 fprintf('Прогресс: %d/%d\n', i, N); end end % Оценка вероятности успеха v_target = 0.8; os_limit = 20; success = (v_steady >= v_target) & (overshoot <= os_limit); P_success = mean(success); fprintf('P_success = %.1f%%\n', P_success * 100);
💡 Совет: Используйте Simulink.SimulationInput для ускорения:
simIn = Simulink.SimulationInput('lfr_model'); simIn = simIn.setVariable('mu', mu); simIn = simIn.setVariable('m', m); out = sim(simIn);
7. Задание для студентов
  1. Определить для своего варианта:
    • Какие параметры имеют разброс
    • Какие распределения и разбросы задать
    • Целевые значения v_target и os_limit из ТЗ
  2. Запустить метод Монте-Карло с N = 500 итераций
  3. Проанализировать результаты:
    • Вероятность успеха P_success
    • 95% доверительный интервал
    • Гистограммы v_steady и OS
  4. Сделать выводы:
    • Достаточна ли надёжность робота?
    • Какие параметры сильнее всего влияют на успех?
    • Что можно изменить для повышения P_success?
Результат: Оценка вероятности успеха, гистограммы, доверительные интервалы, рекомендации.
Практика 12: Анализ надёжности
НЕДЕЛЯ 6: АНАЛИЗ НАДЁЖНОСТИ

Практика 12: Анализ надёжности

Расчёт MTBF, вероятности безотказной работы, риск-менеджмент

1.5 часа
12
Анализ надёжности
1.5 часа
Практика
+
1. Цель практики

Научиться оценивать надёжность робота на основе моделей отказов компонентов.

  • Определять интенсивности отказов для компонентов
  • Рассчитывать MTBF системы
  • Строить функцию надёжности R(t)
  • Оценивать риски и предлагать меры по повышению надёжности
2. Интенсивности отказов компонентов
Компонент Базовое λ (1/ч) Гр.1 (эконом) Гр.2 (точные) Гр.3 (пром) Гр.4 (экстр)
Двигатель (щёточный)1×10⁻⁴2×10⁻⁴5×10⁻⁵8×10⁻⁵5×10⁻⁵
Двигатель (бесколлекторный)5×10⁻⁵3×10⁻⁵4×10⁻⁵3×10⁻⁵
Редуктор2×10⁻⁴3×10⁻⁴1×10⁻⁴1.5×10⁻⁴1×10⁻⁴
Датчики (оптические)1×10⁻⁵2×10⁻⁵5×10⁻⁶1×10⁻⁵5×10⁻⁶
Контроллер1×10⁻⁵2×10⁻⁵5×10⁻⁶1×10⁻⁵5×10⁻⁶
Аккумулятор1×10⁻⁵2×10⁻⁵1×10⁻⁵1×10⁻⁵5×10⁻⁶
📌 Пример для варианта 3 (Промышленный тяжеловес):
% Интенсивности отказов для вар.3 (промышленный) lambda_motor = 8e-5; % щёточный двигатель lambda_gearbox = 1.5e-4; % редуктор lambda_sensor = 1e-5; % датчики lambda_controller = 1e-5; % контроллер lambda_battery = 1e-5; % аккумулятор % Суммарная интенсивность lambda_total = lambda_motor + lambda_gearbox + lambda_sensor + ... lambda_controller + lambda_battery; MTBF = 1 / lambda_total; % ≈ 3200 ч
📌 Пример для варианта 3 (Промышленный тяжеловес):
% Интенсивности отказов для вар.3 (промышленный) lambda_motor = 8e-5; % щёточный двигатель lambda_gearbox = 1.5e-4; % редуктор lambda_sensor = 1e-5; % датчики lambda_controller = 1e-5; % контроллер lambda_battery = 1e-5; % аккумулятор % Суммарная интенсивность lambda_total = lambda_motor + lambda_gearbox + lambda_sensor + ... lambda_controller + lambda_battery; MTBF = 1 / lambda_total; % ≈ 3200 ч
3. Функция reliability_analysis.m
📁
analysis/reliability_analysis.m
Расчёт надёжности системы
function results = reliability_analysis(config, variant_number, t_max) % АНАЛИЗ НАДЁЖНОСТИ % Вход: % config - параметры робота % variant_number - номер варианта % t_max - максимальное время для графика (ч) % Выход: % results - структура с результатами fprintf('\n=== АНАЛИЗ НАДЁЖНОСТИ ===\n'); % Базовые интенсивности отказов (1/ч) lambda_motor_base = 1e-4; lambda_gearbox_base = 2e-4; lambda_sensor_base = 1e-5; lambda_controller_base = 1e-5; lambda_battery_base = 1e-5; % Корректировка по группе group = get_group(variant_number); switch group case 1 % Эконом — дешёвые компоненты, выше интенсивность k = 2.0; fprintf('Группа 1: эконом-компоненты (λ ×%.1f)\n', k); case 2 % Точные — качественные компоненты k = 0.6; fprintf('Группа 2: прецизионные компоненты (λ ×%.1f)\n', k); case 3 % Промышленные — повышенная надёжность k = 0.8; fprintf('Группа 3: промышленные компоненты (λ ×%.1f)\n', k); case 4 % Экстремальные — максимальная надёжность k = 0.5; fprintf('Группа 4: компоненты повышенной надёжности (λ ×%.1f)\n', k); otherwise k = 1.0; end % Интенсивности отказов компонентов lambda_motor = lambda_motor_base * k; lambda_gearbox = lambda_gearbox_base * k; lambda_sensor = lambda_sensor_base * k; lambda_controller = lambda_controller_base * k; lambda_battery = lambda_battery_base * k; % Суммарная интенсивность lambda_total = lambda_motor + lambda_gearbox + lambda_sensor + ... lambda_controller + lambda_battery; % MTBF системы MTBF = 1 / lambda_total; % Временная сетка t = linspace(0, t_max, 1000); % Функция надёжности R = exp(-lambda_total * t); % Сохранение результатов results = struct(); results.lambda_motor = lambda_motor; results.lambda_gearbox = lambda_gearbox; results.lambda_sensor = lambda_sensor; results.lambda_controller = lambda_controller; results.lambda_battery = lambda_battery; results.lambda_total = lambda_total; results.MTBF = MTBF; results.t = t; results.R = R; % Вывод в консоль fprintf('\n--- Интенсивности отказов ---\n'); fprintf('Двигатель: λ = %.2e 1/ч\n', lambda_motor); fprintf('Редуктор: λ = %.2e 1/ч\n', lambda_gearbox); fprintf('Датчики: λ = %.2e 1/ч\n', lambda_sensor); fprintf('Контроллер: λ = %.2e 1/ч\n', lambda_controller); fprintf('Аккумулятор: λ = %.2e 1/ч\n', lambda_battery); fprintf('Суммарная: λ_total = %.2e 1/ч\n', lambda_total); fprintf('\nСредняя наработка на отказ MTBF = %.0f ч\n', MTBF); % Проверка соответствия ТЗ if group == 3 && variant_number == 3 if MTBF >= 2000 fprintf('✅ MTBF = %.0f ч ≥ 2000 ч (соответствует ТЗ)\n', MTBF); else fprintf('❌ MTBF = %.0f ч < 2000 ч (НЕ соответствует ТЗ)\n', MTBF); end end if group == 4 && variant_number == 10 if MTBF >= 5000 fprintf('✅ MTBF = %.0f ч ≥ 5000 ч (соответствует ТЗ)\n', MTBF); else fprintf('❌ MTBF = %.0f ч < 5000 ч (НЕ соответствует ТЗ)\n', MTBF); end end % Построение графика figure('Name', 'Анализ надёжности', 'Position', [100, 100, 800, 500]); plot(t, R, 'b-', 'LineWidth', 1.5); xlabel('Время, ч'); ylabel('Вероятность безотказной работы R(t)'); title('Функция надёжности системы'); grid on; hold on; % Отметка MTBF y_MTBF = exp(-1); plot([MTBF, MTBF], [0, y_MTBF], 'r--', 'LineWidth', 1); plot([0, MTBF], [y_MTBF, y_MTBF], 'r--', 'LineWidth', 1); plot(MTBF, y_MTBF, 'ro', 'MarkerSize', 8, 'MarkerFaceColor', 'red'); text(MTBF + t_max*0.02, y_MTBF + 0.02, sprintf('MTBF = %.0f ч', MTBF), 'FontSize', 10); xlim([0, t_max]); ylim([0, 1.05]); end
4. Примеры для разных групп вариантов
📌 Группа 1 (Эконом) — вар.1 "Складской эконом"

Требование: работа 16 ч/сутки, бюджет ограничен

% Эконом-компоненты (повышенная интенсивность) lambda_total = 3.8e-4; % 1/ч MTBF = 2630 ч; R(16) = exp(-3.8e-4 * 16) = 0.994 % 99.4% за смену

Вывод: Надёжность достаточна для работы в течение смены.

📌 Группа 2 (Точные) — вар.5 "Медицинский курьер"

Требование: работа 6 ч/сутки, низкий уровень отказов

% Прецизионные компоненты (низкая интенсивность) lambda_total = 1.1e-4; % 1/ч MTBF = 9090 ч; R(6) = exp(-1.1e-4 * 6) = 0.999 % 99.9% за смену

Вывод: Высокая надёжность, соответствует медицинским требованиям.

📌 Группа 3 (Промышленные) — вар.3 "Промышленный тяжеловес"

Требование: MTBF ≥ 2000 ч, работа с нагрузкой

% Промышленные компоненты lambda_total = 2.5e-4; % 1/ч MTBF = 4000 ч; % ≥ 2000 ч ✓

Вывод: Требование по MTBF выполняется.

📌 Группа 4 (Экстремальные) — вар.10 "Аэропортный гид"

Требование: MTBF ≥ 5000 ч, круглосуточная работа

% Компоненты повышенной надёжности lambda_total = 1.5e-4; % 1/ч MTBF = 6667 ч; % ≥ 5000 ч ✓ R(24) = exp(-1.5e-4 * 24) = 0.996 % 99.6% за сутки

Вывод: Требование выполняется, надёжность высокая.

5. Для студентов, работающих в Simulink

📊 Как добавить анализ надёжности в Simulink-модель:

1. Добавить блоки контроля температуры (если есть тепловая модель)
2. Добавить логику остановки при превышении лимитов
3. Внести данные об отказах в скрипт анализа
                            
% Скрипт для анализа надёжности с Simulink % Сбор статистики отказов из симуляции % Параметры надёжности компонентов lambda_motor = 8e-5; lambda_controller = 1e-5; lambda_sensors = 1e-5; % Суммарная интенсивность lambda_total = lambda_motor + lambda_controller + lambda_sensors; % Запуск симуляции с разными сценариями N_sim = 100; failures = 0; for i = 1:N_sim % Генерация времени до отказа для каждого компонента t_fail_motor = exprnd(1/lambda_motor); t_fail_controller = exprnd(1/lambda_controller); t_fail_sensors = exprnd(1/lambda_sensors); % Время отказа системы = минимум t_system_fail = min([t_fail_motor, t_fail_controller, t_fail_sensors]); if t_system_fail < 2000 % время работы по ТЗ failures = failures + 1; end end P_survival = 1 - failures/N_sim; fprintf('Вероятность безотказной работы за 2000 ч: %.1f%%\n', P_survival*100);
💡 Для моделирования отказов в Simulink:
  • Используйте блок Random Number для генерации экспоненциального распределения
  • Добавьте блок Hit Crossing для определения момента отказа
  • Используйте Stop Simulation для остановки при отказе
Пример модели отказоустойчивости:
┌─────────────────────────────────────────────────────────────┐
│  [Random Number] ──► [Math: -ln(1-u)/λ] ──► t_fail         │
│                         │                                    │
│                         ▼                                    │
│                   [Hit Crossing] ──► [Stop Simulation]      │
└─────────────────────────────────────────────────────────────┘
                            
6. Задание для студентов
  1. Определить для своего варианта:
    • Какие компоненты входят в систему (двигатель, редуктор, датчики, контроллер, аккумулятор)
    • Тип компонентов (эконом/прецизионные/промышленные/повышенной надёжности)
    • Требования к надёжности из ТЗ (MTBF, время работы)
  2. Рассчитать:
    • Интенсивности отказов для каждого компонента
    • Суммарную интенсивность λ_total
    • MTBF системы
    • Вероятность безотказной работы за время, указанное в ТЗ
  3. Построить график функции надёжности R(t) для t = 0...10000 ч
  4. Сделать выводы:
    • Соответствует ли MTBF требованиям ТЗ?
    • Какой компонент вносит наибольший вклад в отказы?
    • Что можно изменить для повышения надёжности?
Результат: Расчёт MTBF, график R(t), анализ критических компонентов, рекомендации по повышению надёжности.
7. Критерии оценки (блок 6)
КритерийБаллы
Понимание метода Монте-Карло (выбор распределений, N)2
Корректная реализация Монте-Карло (генерация выборок, запуск)2
Анализ результатов Монте-Карло (гистограммы, P_success, доверительный интервал)2
Расчёт надёжности (λ, MTBF, R(t))2
Выводы и рекомендации по повышению надёжности2
ИТОГО за блок 610
Важно: Баллы ставятся за понимание и обоснование:
  • Почему выбраны именно такие распределения параметров?
  • Как интерпретировать доверительный интервал?
  • Какие компоненты самые ненадёжные и почему?
  • Что можно изменить для повышения P_success и MTBF?
8. Как это войдёт в отчёт

Все результаты практик 11 и 12 автоматически собираются в report_template_block6.mlx:

  • Параметры с разбросом (таблица)
  • Результаты Монте-Карло: P_success, доверительный интервал, гистограммы
  • Результаты анализа надёжности: λ_total, MTBF, график R(t)
  • Выводы и рекомендации
📁
reports/report_template_block6.mlx
Запустите, указав номер варианта, и получите готовый отчёт
Практика 13: Дерево целей
НЕДЕЛЯ 7: ДЕКОМПОЗИЦИЯ И ПРИНЯТИЕ РЕШЕНИЙ

Практика 13: Дерево целей

Построение иерархической структуры целей для вашего варианта LFR

1.5 часа
13
Дерево целей
1.5 часа
Практика
+
1. Цель практики

Научиться строить дерево целей — иерархическую структуру, которая раскрывает главную цель через подцели и критерии качества. Дерево целей является основой для последующего применения метода анализа иерархий (AHP).

  • Определить группу своего варианта
  • Выделить основные критерии качества из ТЗ
  • Построить 3-уровневую иерархию целей
  • Визуализировать дерево целей
2. Определение группы варианта
ГруппаВариантыКлючевые особенностиЦелевые показатели
1. Эконом1, 8Стоимость, энергопотребление, скорость≤4500 руб (вар.1), ≤15 Вт (вар.8)
2. Точные2, 5, 9Точность, шум, вибрации±2 мм (вар.2), ≤40 дБ (вар.5)
3. Промышленные3, 6, 7Надёжность (MTBF), тяга, тепло≥2000 ч (вар.3), ≥50 Н (вар.3)
4. Экстремальные4, 10, 11Аэродинамика, сцепление, проходимостьCx ≤0.4, μ ≥0.7 (вар.4)
⚙️ В проекте: Функция get_variant_group(variant_number) автоматически определяет группу.
3. Структура дерева целей (3 уровня)
Уровень 1: Главная цель
    │
    ├── Уровень 2: Основные критерии (3-4 шт.)
    │       │
    │       ├── Уровень 3: Подкритерии (2-3 на каждый критерий)
    │       │
    │       └── Целевые показатели (из ТЗ)
    │
    └── ...
                            
Пример для варианта 3 (Промышленный тяжеловес):
Уровень 1: Создание LFR вариант 3: Промышленный тяжеловес
    │
    ├── Уровень 2: Надёжность и долговечность
    │       ├── Уровень 3: MTBF (наработка на отказ)
    │       ├── Уровень 3: Вероятность безотказной работы
    │       └── Цель: MTBF ≥2000 ч / R(t)≥0.95 за 1000 ч
    │
    ├── Уровень 2: Тяговые характеристики
    │       ├── Уровень 3: Максимальная тяга
    │       ├── Уровень 3: Запас по сцеплению
    │       └── Цель: F_x ≥50 Н / запас сцепления ≥20%
    │
    └── Уровень 2: Тепловой режим
            ├── Уровень 3: Максимальная температура
            ├── Уровень 3: Время нагрева
            └── Цель: T_max ≤80°C / τ_heat ≥300 с
                                
4. Примеры деревьев целей по группам
🏭 Группа 1: Эконом (вар.1 "Складской эконом")
                    LFR складской эконом (вар.1)
                           |
    -------------------------------------------------
    |                       |                       |
Стоимость              Энергопотребление         Скорость
    |                       |                       |
Бюджет ≤4500 руб     P_el ≤15 Вт              v ≥ 0.8 м/с
Стоимость мотора     КПД ≥85%                 OS ≤ 20%
Стоимость редуктора  Потери в редукторе
                                
🏥 Группа 2: Точные (вар.5 "Медицинский курьер")
                    LFR медицинский курьер (вар.5)
                           |
    -------------------------------------------------
    |                       |                       |
Точность                  Шум                    Скорость
    |                       |                       |
OS ≤ 10%               ≤40 дБ                  v ≥ 0.7 м/с
Статическая ошибка     вибрации ≤0.1g          плавность разгона
Повторяемость          акустический комфорт
                                
🏭 Группа 3: Промышленные (вар.3 "Промышленный тяжеловес")
                    LFR промышленный тяжеловес (вар.3)
                           |
    -------------------------------------------------
    |                       |                       |
Надёжность              Тяга                  Тепловой режим
    |                       |                       |
MTBF ≥2000 ч            F_x ≥50 Н             T_max ≤80°C
R(t) ≥0.95 за 1000 ч    запас сцепления       время нагрева
Ремонтопригодность     тяга на подъём        охлаждение
                                
🏁 Группа 4: Экстремальные (вар.4 "Соревновательный гонщик")
                    LFR соревновательный гонщик (вар.4)
                           |
    -------------------------------------------------
    |                       |                       |
Аэродинамика            Сцепление             Скорость
    |                       |                       |
Cx ≤0.4                 μ ≥0.7                v ≥ 2.5 м/с
A ≤0.015 м²             срыв сцепления        время круга
прижимная сила         устойчивость          разгон
                                
5. Инструкция по выполнению

Шаг 1: Определить группу и главную цель

variant_number = 3; % ИЗМЕНИТЕ НА СВОЙ group = get_variant_group(variant_number); fprintf('Группа: %d\n', group);

Шаг 2: Построить дерево целей с помощью функции

% Вызовите функцию goal_tree для своего варианта tree = goal_tree(variant_number); % Функция автоматически: % - Определяет группу и цели % - Выводит дерево в консоль % - Создаёт визуализацию в отдельном окне

Шаг 3: Сохранить результат

% Сохранить рисунок дерева целей saveas(gcf, 'goal_tree.png'); fprintf('✅ Дерево целей сохранено в goal_tree.png\n');
📁 Файлы для автоматизации:
  • decision/goal_tree.m — основная функция построения дерева
  • report_template_block7.m — скрипт, который использует goal_tree
6. Задание для студентов
  1. Определить группу своего варианта по таблице выше
  2. Сформулировать главную цель в соответствии с назначением робота
  3. Выделить 3-4 основных критерия из ТЗ
  4. Разбить каждый критерий на 2-3 подкритерия
  5. Записать целевые показатели для каждого критерия
  6. Выполнить построение дерева с помощью goal_tree(variant_number)
  7. Сохранить рисунок для отчёта
Результат: Вы имеете структурированное дерево целей, которое будет использовано в Практике 14 для метода AHP.
7. Что должно быть в отчёте
РазделСодержание
1. Группа вариантаНомер группы (1-4) и обоснование
2. Дерево целейРисунок из goal_tree.m с подписями
3. Анализ дереваПояснение выбора критериев и подкритериев
4. Таблица критериевКритерии, подкритерии, целевые показатели
⚠️ Важно: Дерево целей должно иметь 3 уровня. Каждый критерий должен быть измеримым (иметь числовой целевой показатель из ТЗ).
Практика 14: Метод анализа иерархий (AHP)
НЕДЕЛЯ 7: ДЕКОМПОЗИЦИЯ И ПРИНЯТИЕ РЕШЕНИЙ

Практика 14: Метод анализа иерархий (AHP)

Формальный подход к сравнению альтернатив: матрицы парных сравнений, веса критериев, проверка согласованности

1.5 часа
14
Метод анализа иерархий (AHP)
1.5 часа
Практика
+
1. Цель практики

Применить метод анализа иерархий (AHP) для выбора лучшей альтернативы компонентов (двигателей, колёс, редукторов) для вашего варианта LFR.

  • Построить матрицу парных сравнений критериев (шкала Саати)
  • Вычислить веса критериев и проверить согласованность (CR)
  • Выбрать 3-4 альтернативы для сравнения
  • Построить матрицы сравнения альтернатив по каждому критерию
  • Вычислить итоговые приоритеты и выбрать лучшую альтернативу
2. Шкала Саати и матрица парных сравнений критериев
表 ЗначениеОписаниеПример 1Одинаковая важность"Скорость так же важна, как точность" 3Умеренное превосходство"Скорость немного важнее точности" 5Существенное превосходство"Скорость значительно важнее точности" 7Очень сильное превосходство"Скорость намного важнее точности" 9Абсолютное превосходство"Скорость критически важнее точности" 2,4,6,8Промежуточные значенияКогда нужно что-то между 究
📊 Матрица для группы 3 (Промышленные) — Надёжность (Н), Тяга (Т), Стоимость (С)
表 НТС Н135 Т1/313 С1/51/31 究

Обоснование: Надёжность важнее тяги в 3 раза, важнее стоимости в 5 раз; тяга важнее стоимости в 3 раза.

3. Матрицы сравнения альтернатив по группам
🏭 Группа 1: Эконом (вар.1,8) — колёса и двигатели
表 АльтернативаСтоимостьЭнергопотреблениеСкорость A1: Миниатюрное + N201500 руб8 Вт0.85 м/с A2: Прецизионное + N202500 руб10 Вт0.90 м/с A3: Учебное + N201200 руб7 Вт0.75 м/с 究
Матрица по стоимости (чем ниже, тем лучше):
[1, 1.5, 0.8; 0.67, 1, 0.5; 1.25, 2, 1]

Матрица по энергопотреблению:
[1, 1.25, 0.875; 0.8, 1, 0.7; 1.14, 1.43, 1]

Матрица по скорости:
[1, 0.94, 1.13; 1.06, 1, 1.2; 0.88, 0.83, 1]
                                
🔧 Группа 2: Точные (вар.2,5,9) — редукторы
表 АльтернативаТочность (люфт)ШумСкорость A1: Планетарный0.0015 рад35 дБ0.4 м/с A2: Косозубый0.0040 рад42 дБ0.45 м/с A3: Прямозубый0.0090 рад48 дБ0.5 м/с 究
Матрица по точности (чем меньше люфт, тем лучше):
[1, 2.5, 6; 0.4, 1, 2.5; 0.167, 0.4, 1]

Матрица по шуму:
[1, 2, 4; 0.5, 1, 2; 0.25, 0.5, 1]

Матрица по скорости:
[1, 0.89, 0.8; 1.12, 1, 0.9; 1.25, 1.11, 1]
                                
⚙️ Группа 3: Промышленные (вар.3,6,7) — двигатели
表 АльтернативаНадёжность (MTBF)Тяга (момент)Стоимость A1: MY1016800 ч0.18 Н·м3000 руб A2: Maxon EC5000 ч0.12 Н·м12000 руб A3: Pololu2000 ч0.08 Н·м5000 руб 究
Матрица по надёжности:
[1, 1/6, 1/3; 6, 1, 2; 3, 1/2, 1]

Матрица по тяге:
[1, 2, 3; 1/2, 1, 2; 1/3, 1/2, 1]

Матрица по стоимости:
[1, 4, 2; 1/4, 1, 1/2; 1/2, 2, 1]
                                
🏁 Группа 4: Экстремальные (вар.4,10,11) — колёса
表 АльтернативаАэродинамика (Cx)Сцепление (μ)Проходимость A1: Силиконовое0.350.72средняя A2: Пневматическое0.450.65высокая A3: Авиационное0.380.38низкая 究
Матрица по аэродинамике (чем меньше Cx, тем лучше):
[1, 2, 1.5; 0.5, 1, 0.75; 0.67, 1.33, 1]

Матрица по сцеплению:
[1, 1.5, 4; 0.67, 1, 2.5; 0.25, 0.4, 1]

Матрица по проходимости:
[1, 0.5, 2; 2, 1, 4; 0.5, 0.25, 1]
                                
4. Инструкция по выполнению

Шаг 1: Создать матрицу парных сравнений критериев

% Для группы 3 (Промышленные) criteria_names = {'Надёжность', 'Тяга', 'Стоимость'}; criteria_matrix = [ 1, 3, 5; 1/3, 1, 3; 1/5, 1/3, 1 ];

Шаг 2: Вычислить веса критериев и проверить согласованность

% Используйте функцию ahp_matrix crit_results = ahp_matrix(criteria_names, criteria_matrix); % Результат: crit_results.weights, crit_results.CR

Шаг 3: Выбрать альтернативы и построить матрицы сравнения

% Для группы 3 alternatives = {'MY1016', 'Maxon EC', 'Pololu'}; % Матрица по надёжности reliability_matrix = [1, 1/6, 1/3; 6, 1, 2; 3, 1/2, 1]; % Матрица по тяге torque_matrix = [1, 2, 3; 1/2, 1, 2; 1/3, 1/2, 1]; % Матрица по стоимости cost_matrix = [1, 4, 2; 1/4, 1, 1/2; 1/2, 2, 1]; alt_matrices = {reliability_matrix, torque_matrix, cost_matrix};

Шаг 4: Вычислить итоговые приоритеты

alt_results = evaluate_alternatives(crit_results.weights, alternatives, alt_matrices); % Результат: alt_results.final_priorities, alt_results.best_name
📁 Файлы для автоматизации:
  • decision/ahp_matrix.m — расчёт весов и CR
  • decision/evaluate_alternatives.m — оценка альтернатив
  • report_template_block7.m — полный скрипт отчёта
5. Задание для студентов
  1. Определить группу своего варианта (из Практики 13)
  2. Создать матрицу парных сравнений критериев с обоснованием
  3. Вычислить веса критериев и проверить CR
  4. Выбрать 3-4 альтернативы из таблиц выше (по своей группе)
  5. Построить матрицы сравнения альтернатив для каждого критерия
  6. Вычислить итоговые приоритеты и выбрать лучшую альтернативу
  7. Сделать вывод с обоснованием выбора
Результат: Вы имеете численно обоснованный выбор лучшей альтернативы компонентов для вашего робота.
6. Что должно быть в отчёте
表 РазделСодержание 1. Матрица критериевТаблица парных сравнений, обоснование чисел 2. Веса критериевТаблица с весами и процентами 3. Проверка согласованностиλ_max, CI, RI, CR, интерпретация 4. АльтернативыОписание 3-4 альтернатив с характеристиками 5. Матрицы альтернативПо 3 матрицы (по числу критериев) 6. Итоговая оценкаТаблица приоритетов, выбор лучшей альтернативы 7. Обоснование выводаПочему выбрана именно эта альтернатива 8. ВизуализацияГрафики весов, приоритетов, радиолокационная диаграмма 究
⚠️ Важно: CR должен быть < 0.1. Если CR ≥ 0.1 — пересмотрите матрицу сравнения (уменьшите противоречия в логике сравнений).
7. Критерии оценки (макс. 10 баллов)
表 КритерийБаллыОписание 1. Корректное определение группы варианта1Правильно определена группа (1-4) 2. Полнота дерева целей (3 уровня)1.5Есть главная цель, критерии (3-4), подкритерии 3. Соответствие ТЗ1Целевые показатели соответствуют требованиям 4. Визуализация дерева0.5Рисунок аккуратный, читаемый 5. Корректность матрицы критериев1.5Матрица по шкале Саати, есть обоснование 6. Вычисление весов и CR1Веса рассчитаны, CR < 0.1 7. Выбор альтернатив (3-4 шт.)0.5Альтернативы из таблиц, соответствуют группе 8. Матрицы сравнения альтернатив1.5По 3 матрицы, корректно заполнены 9. Итоговая оценка и выбор1Правильно вычислены приоритеты, выбран лучший 10. Обоснование вывода0.5Логичное обоснование, ссылки на веса ИТОГО10
Практика 15: ПИ и ПИД-регуляторы
НЕДЕЛЯ 8: СРАВНЕНИЕ РЕГУЛЯТОРОВ

Практика 15: ПИ и ПИД-регуляторы

Реализация ПИ и ПИД-регуляторов в MATLAB и Simulink для слежения за линией

1.5 часа
15
ПИ и ПИД-регуляторы
1.5 часа
Практика
+
1. Цель практики

Реализовать ПИ и ПИД-регуляторы для управления движением LFR по линии, изучить их математические модели и научиться настраивать коэффициенты.

  • Реализовать ПИ-регулятор в MATLAB и Simulink
  • Реализовать ПИД-регулятор в MATLAB и Simulink
  • Изучить влияние коэффициентов Ki и Kd на качество регулирования
  • Подготовить данные для сравнения регуляторов
2. Задание 1: Реализация ПИ-регулятора

📐 Математическая модель ПИ-регулятора

$$u(t) = K_p \cdot e(t) + K_i \int_{0}^{t} e(\tau) d\tau$$

💻 Код: control/pi_controller.m

function u = pi_controller(e, e_int, dt, Kp, Ki, u_max, u_min) % ПИ-РЕГУЛЯТОР % Вход: % e - текущая ошибка % e_int - накопленный интеграл ошибки (состояние) % dt - шаг дискретизации % Kp - пропорциональный коэффициент % Ki - интегральный коэффициент % u_max - максимальное управление % u_min - минимальное управление % Выход: % u - управляющий сигнал % e_int - обновлённый интеграл % Интегральная составляющая (с anti-windup) e_int_new = e_int + e * dt; % ПИ-регулятор u = Kp * e + Ki * e_int_new; % Ограничение управления u = max(u_min, min(u_max, u)); % Anti-windup: если управление насыщено — не накапливаем ошибку if u == u_max || u == u_min e_int_new = e_int; % не обновляем интеграл end end

🔧 Настройка ПИ-регулятора (метод Зиглера-Никольса)

ШагДействие
1Настроить Kp методом проб (как для П-регулятора)
2Запомнить критический Kp (Kp_crit), при котором начинаются колебания
3Установить Kp = 0.45·Kp_crit (для ПИ-регулятора)
4Установить Ki = 0.54·Kp_crit / T_crit (T_crit — период колебаний)

📊 Пример настройки для варианта 3

% Из П-регулятора: Kp_crit = 1.2; % критический Kp T_crit = 1.5; % период колебаний, с % Параметры ПИ-регулятора по Зиглеру-Никольсу Kp = 0.45 * Kp_crit; % ≈ 0.54 Ki = 0.54 * Kp_crit / T_crit; % ≈ 0.43
3. Задание 2: Реализация ПИД-регулятора

📐 Математическая модель ПИД-регулятора

$$u(t) = K_p \cdot e(t) + K_i \int e(t) dt + K_d \frac{de(t)}{dt}$$

💻 Код: control/pid_controller.m

function [u, e_int, e_prev] = pid_controller(e, e_int, e_prev, dt, Kp, Ki, Kd, u_max, u_min) % ПИД-РЕГУЛЯТОР % Вход: % e - текущая ошибка % e_int - накопленный интеграл ошибки % e_prev - предыдущая ошибка % dt - шаг дискретизации % Kp,Ki,Kd - коэффициенты % Выход: % u - управляющий сигнал % e_int - обновлённый интеграл % e_prev - обновлённая предыдущая ошибка % Пропорциональная составляющая P = Kp * e; % Интегральная составляющая (с anti-windup) e_int_new = e_int + e * dt; I = Ki * e_int_new; % Дифференциальная составляющая (с фильтром для подавления шумов) if dt > 0 D = Kd * (e - e_prev) / dt; else D = 0; end % ПИД-регулятор u = P + I + D; % Ограничение управления u = max(u_min, min(u_max, u)); % Anti-windup: если управление насыщено — не накапливаем интеграл if u == u_max || u == u_min e_int_new = e_int; end e_int = e_int_new; e_prev = e; end

🔧 Настройка ПИД-регулятора

ШагДействие
1Настроить Kp методом проб (как для П-регулятора)
2Запомнить критический Kp (Kp_crit) и период колебаний T_crit
3Установить параметры по Зиглеру-Никольсу:
Kp = 0.6·Kp_crit
Ki = 1.2·Kp_crit / T_crit
Kd = 0.075·Kp_crit·T_crit
⚠️ Анти-виндуп (Anti-windup): Важный механизм, предотвращающий накопление интегральной ошибки при насыщении управления. Без него после выхода из насыщения может быть большое перерегулирование.
4. Задание 3: Тестирование регуляторов на примере

📊 Пример тестирования для варианта 3

% Параметры симуляции dt = 0.01; t = 0:dt:20; r = 2.5 * ones(size(t)); % желаемый сигнал (2.5 В) % Коэффициенты регулятора (подобраны экспериментально) Kp = 0.35; Ki = 0.05; Kd = 0.02; % Инициализация y = zeros(size(t)); e_prev = 0; e_int = 0; % Цикл симуляции for i = 1:length(t)-1 e = r(i) - y(i); [u, e_int, e_prev] = pid_controller(e, e_int, e_prev, dt, Kp, Ki, Kd, 5, -5); % Модель робота (упрощённо) y(i+1) = y(i) + (u - y(i)) * dt; % апериодическое звено 1-го порядка end
📈 Ожидаемые результаты:
  • П-регулятор: ошибка в установившемся режиме 5-10%
  • ПИ-регулятор: ошибка стремится к 0, но больше перерегулирование
  • ПИД-регулятор: минимальное перерегулирование и быстрый выход на задание
5. Для студентов, работающих в Simulink

🔧 ПИ-регулятор в Simulink

e(t) ──►[Kp]───┐
              │
         ┌────┴────┐
         │         │
         │ 1/s     │
         │(Integrator)│
         └────┬────┘
              │
         [Ki]──┘────►[Sum]──► u(t)
                            
  1. Взять блок Gain для Kp
  2. Взять блок Integrator (Simulink/Continuous)
  3. Взять блок Gain для Ki
  4. Сложить через Sum

🔧 ПИД-регулятор в Simulink

e(t) ──►[Kp]───┐
              │
         ┌────┴────┐
         │         │
         │ 1/s     │
         └────┬────┘
              │
         [Ki]──┘
              │
         ┌────┴────┐
         │         │
         │ du/dt   │
         │Derivative│
         └────┬────┘
              │
         [Kd]──┘────►[Sum]──► u(t)
                            
📌 Готовый блок: В Simulink есть готовый блок PID Controller (Simulink/Continuous), который можно использовать после понимания принципов работы.
6. Задание для студентов
  1. Реализовать ПИ-регулятор в виде функции pi_controller.m
  2. Реализовать ПИД-регулятор в виде функции pid_controller.m
  3. Настроить коэффициенты для своего варианта методом Зиглера-Никольса
  4. Протестировать регуляторы на упрощённой модели
  5. Записать результаты для сравнения в Практике 16
Результат: У вас есть рабочие функции ПИ и ПИД-регуляторов, готовые к интеграции в полную модель симуляции.
7. Что должно быть в отчёте
РазделСодержание
1. Математические моделиФормулы П, ПИ, ПИД-регуляторов
2. Реализация регуляторовКод функций, схема в Simulink
3. Настройка коэффициентовТаблица с Kp, Ki, Kd для вашего варианта
4. Графики переходных процессовСравнение П и ПИ и ПИД на одном графике
5. ВыводыКакие коэффициенты оптимальны, почему
Практика 16: Сравнение регуляторов
НЕДЕЛЯ 8: СРАВНЕНИЕ РЕГУЛЯТОРОВ

Практика 16: Сравнение регуляторов

Сравнение П, ПИ, ПИД-регуляторов по критериям качества, выбор оптимального регулятора для вашего варианта

1.5 часа
16
Сравнение регуляторов
1.5 часа
Практика
+
1. Цель практики

Провести сравнительный анализ П, ПИ и ПИД-регуляторов для управления LFR, оценить их эффективность по критериям качества и выбрать оптимальный регулятор для вашего варианта.

  • Интегрировать регуляторы в полную модель симуляции
  • Сравнить время разгона, перерегулирование и статическую ошибку
  • Проанализировать влияние шумов и люфта на работу регуляторов
  • Выбрать оптимальный регулятор для своего варианта
2. Интеграция регуляторов в модель симуляции

💻 Код: optimization/compare_controllers.m

function results = compare_controllers(config, flags, sim_params, params_*) % СРАВНЕНИЕ РЕГУЛЯТОРОВ % Запускает симуляцию с П, ПИ и ПИД-регуляторами % Возвращает структуру с результатами % Коэффициенты регуляторов (подбираются экспериментально) controllers = struct(); controllers.P.Kp = 0.4; controllers.P.Ki = 0; controllers.P.Kd = 0; controllers.PI.Kp = 0.35; controllers.PI.Ki = 0.05; controllers.PI.Kd = 0; controllers.PID.Kp = 0.4; controllers.PID.Ki = 0.08; controllers.PID.Kd = 0.02; names = fieldnames(controllers); results = struct(); for i = 1:length(names) name = names{i}; ctrl = controllers.(name); % Запуск симуляции с заданным регулятором [t, v, x, i_motor, T_motor, theta, U] = simulate_with_controller(... config, flags, sim_params, params_*, ctrl); % Анализ переходных процессов metrics = analyze_transient(t, v); % Сохранение результатов results.(name).t = t; results.(name).v = v; results.(name).metrics = metrics; results.(name).U = U; end % Визуализация сравнения plot_comparison(results); end
🔧 Рекомендации по подбору коэффициентов для разных групп:
ГруппаРекомендуемый регуляторПример KpПример KiПример Kd
1. ЭкономП0.3-0.5
2. ТочныеПИ0.2-0.40.02-0.06
3. ПромышленныеПИД0.3-0.50.05-0.100.01-0.03
4. ЭкстремальныеПИД с фильтром0.4-0.60.08-0.150.02-0.04
3. Визуализация сравнения регуляторов
function plot_comparison(results) figure('Name', 'Сравнение регуляторов', 'Position', [100, 100, 1200, 800]); controllers = {'P', 'PI', 'PID'}; colors = {'blue', 'red', 'green'}; % График 1: Скорость subplot(2, 2, 1); for i = 1:length(controllers) name = controllers{i}; plot(results.(name).t, results.(name).v, 'Color', colors{i}, 'LineWidth', 1.5); hold on; end xlabel('Время, с'); ylabel('Скорость, м/с'); title('Сравнение скорости'); legend(controllers, 'Location', 'best'); grid on; % График 2: Ошибка subplot(2, 2, 2); for i = 1:length(controllers) name = controllers{i}; % Ошибка = задание - скорость (нормированная) v_ref = results.(name).metrics.v_steady; error = abs(results.(name).v - v_ref) / v_ref * 100; plot(results.(name).t, error, 'Color', colors{i}, 'LineWidth', 1.5); hold on; end xlabel('Время, с'); ylabel('Относительная ошибка, %'); title('Динамика ошибки регулирования'); legend(controllers, 'Location', 'best'); grid on; ylim([0, 30]); % График 3: Управляющее напряжение subplot(2, 2, 3); for i = 1:length(controllers) name = controllers{i}; plot(results.(name).t, results.(name).U, 'Color', colors{i}, 'LineWidth', 1.5); hold on; end xlabel('Время, с'); ylabel('Напряжение, В'); title('Управляющий сигнал'); legend(controllers, 'Location', 'best'); grid on; % График 4: Сравнение метрик (столбчатая диаграмма) subplot(2, 2, 4); metrics_data = []; for i = 1:length(controllers) name = controllers{i}; metrics_data = [metrics_data; ... results.(name).metrics.t_rise_95, ... results.(name).metrics.overshoot, ... results.(name).metrics.v_steady]; end bar(metrics_data); set(gca, 'XTickLabel', controllers); ylabel('Значение'); title('Сравнение метрик качества'); legend({'t_{95\%}, с', 'OS, %', 'v_{steady}, м/с'}, 'Location', 'best'); grid on; sgtitle('Сравнение П, ПИ и ПИД-регуляторов'); end
4. Рекомендации по выбору регулятора для групп
🏭 Группа 1: Эконом (вар. 1, 8)

Рекомендуется П-регулятор.

  • Простота реализации — не требует настройки интегральной и дифференциальной составляющих
  • Достаточная точность для складских задач (статическая ошибка 5-10% допустима)
  • Устойчив к шумам и люфтам
% Параметры для вар.1 Kp = 0.4; % из настройки П-регулятора
🔬 Группа 2: Точные (вар. 2, 5, 9)

Рекомендуется ПИ-регулятор.

  • Устранение статической ошибки — критично для точного позиционирования
  • Интегральная составляющая обеспечивает нулевую ошибку в установившемся режиме
  • При малых шумах работает стабильно
% Параметры для вар.2 (лабораторный точник) Kp = 0.25; Ki = 0.03;
🏭 Группа 3: Промышленные (вар. 3, 6, 7)

Рекомендуется ПИД-регулятор.

  • Максимальная точность и минимальное время разгона
  • Дифференциальная составляющая уменьшает перерегулирование
  • Важна быстрая реакция на возмущения (загрузка, препятствия)
% Параметры для вар.3 (промышленный тяжеловес) Kp = 0.4; Ki = 0.08; Kd = 0.02;
🏁 Группа 4: Экстремальные (вар. 4, 10, 11)

Рекомендуется ПИД-регулятор с фильтром.

  • Высокая скорость реакции необходима для гонок/динамичных сцен
  • Дифференциальная составляющая помогает стабилизировать робота на высоких скоростях
  • Фильтр на производной подавляет шумы датчиков
% Параметры для вар.4 (гонщик) с фильтром Kp = 0.5; Ki = 0.1; Kd = 0.025; tau_filter = 0.05; % постоянная времени фильтра
5. Оценочная таблица результатов

После выполнения симуляций заполните таблицу для своего варианта:

РегуляторKpKiKdt95%, сOS, %ess, %Оценка
П
ПИ
ПИД
📌 Критерии выбора (поставьте √ в колонке "Оценка"):
  • t95% — чем меньше, тем лучше (цель: ≤ 2 с)
  • OS — чем меньше, тем лучше (цель: ≤ 20% для эконом, ≤ 10% для точных, ≤ 5% для промышленных)
  • ess — чем меньше, тем лучше (цель: ≤ 5% для эконом, 0% для точных)
6. Анализ влияния шумов и люфта
⚠️ Важно протестировать: При включенных шумах и люфте проверьте устойчивость каждого регулятора.
РегуляторБез шума/люфтаС шумом (σ=0.03)С люфтом (δ=0.005 рад)С шумом + люфтом
П✓ устойчив✓ слабое влияние✓ слабое влияние✓ устойчив
ПИ✓ устойчив○ влияние на интегратор○ небольшое перерегулирование○ требуется уменьшить Ki
ПИД✓ устойчив⚠️ сильное влияние⚠️ автоколебания⚠️ может быть неустойчив
Вывод: Для вариантов с высоким уровнем шумов (группа 1, 2) предпочтительнее П или ПИ-регулятор. ПИД-регулятор требует фильтрации сигнала ошибки.
7. Задание для студентов
  1. Интегрировать регуляторы в полную модель симуляции
  2. Подобрать оптимальные коэффициенты для П, ПИ и ПИД-регуляторов (методом проб или Зиглера-Никольса)
  3. Запустить симуляцию для каждого регулятора, записать метрики
  4. Построить сравнительные графики (скорость, ошибка, управление)
  5. Проанализировать влияние шумов/люфта (включить флаги)
  6. Выбрать оптимальный регулятор для своего варианта
  7. Сформулировать выводы с обоснованием
Результат: Вы имеете обоснованный выбор оптимального регулятора для вашего робота, готовый к интеграции в финальную модель.
8. Что должно быть в отчёте
РазделСодержание
1. Параметры регуляторовТаблица с подобранными Kp, Ki, Kd
2. Сравнительные графикиСкорость, ошибка, управление для П, ПИ, ПИД
3. Сравнительная таблица метрикt95%, OS, ess для всех регуляторов
4. Анализ устойчивостиВлияние шумов и люфта на работу регуляторов
5. Выбор оптимального регулятораОбоснование выбора для вашего варианта
6. ВыводыКраткие итоги работы
9. Критерии оценки (макс. 10 баллов)
КритерийБаллыОписание
1. Реализация ПИ-регулятора1.5Правильная работа, anti-windup
2. Реализация ПИД-регулятора1.5Правильная работа, фильтр производной
3. Подбор коэффициентов1.5Kp, Ki, Kd обоснованы, метод настройки описан
4. Сравнительная таблица1.5t95%, OS, ess для всех регуляторов
5. Анализ влияния шумов/люфта1Оценка устойчивости, рекомендации
6. Выбор оптимального регулятора1.5Обоснованный выбор для своего варианта
7. Выводы и оформление1.5Чёткие выводы, аккуратные графики
ИТОГО10
Практика 17: Оптимизация параметров
НЕДЕЛЯ 9: ОПТИМИЗАЦИЯ И ИНТЕГРАЦИЯ

Практика 17: Оптимизация параметров

Целевая функция, оптимизация Kp, Ki, Kd для выбранного регулятора

1.5 часа
17
Оптимизация параметров
1.5 часа
Практика
+
1. Цель практики

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

  • Создать целевую функцию для оценки качества регулирования
  • Провести одномерную оптимизацию Kp
  • Провести многомерную оптимизацию Kp, Ki, Kd
  • Сравнить результаты с методом Зиглера-Никольса
2. Задание 1: Целевая функция

📐 Код: optimization/objective_function.m

function J = objective_function(params, config, flags, sim_params, ... params_aero, params_slope, params_mass, ... params_friction, params_obstacle, ... params_heating, params_backlash, params_noise, ... v0, x0, theta0, T_motor0, weights) % ЦЕЛЕВАЯ ФУНКЦИЯ ДЛЯ ОПТИМИЗАЦИИ % params: [Kp, Ki, Kd] - оптимизируемые параметры % weights: [w1, w2, w3] - веса критериев (t_rise, OS, e_ss) Kp = params(1); Ki = params(2); Kd = params(3); % Создаём структуру регулятора controller_params = struct(); controller_params.type = 'PID'; controller_params.Kp = Kp; controller_params.Ki = Ki; controller_params.Kd = Kd; controller_params.v_target = 0.8; % целевая скорость из ТЗ % Запуск симуляции [t, v, ~, ~, ~, ~, ~] = simulate_robot(... config, flags, sim_params, 'constant', ... params_aero, params_slope, params_mass, ... params_friction, params_obstacle, ... params_heating, params_backlash, params_noise, ... v0, x0, theta0, T_motor0, controller_params); % Анализ переходных процессов metrics = analyze_transient(t, v); % Нормированные критерии t_norm = metrics.t_rise_95 / 5; % целевое время разгона 5 с os_norm = metrics.overshoot / 20; % целевое OS 20% e_ss_norm = abs(metrics.v_steady - 0.8) / 0.8; % статическая ошибка % Итоговая целевая функция J = weights(1) * t_norm + weights(2) * os_norm + weights(3) * e_ss_norm; % Штраф за невыполнение ограничений if metrics.v_steady < 0.75 J = J + 10; % большой штраф за низкую скорость end if metrics.overshoot > 25 J = J + (metrics.overshoot - 25) / 5; % штраф за большое OS end end
📌 Веса критериев по группам:
Группаw1 (t_rise)w2 (OS)w3 (e_ss)
1. Эконом0.30.30.4
2. Точные0.20.40.4
3. Промышленные0.40.30.3
4. Экстремальные0.50.30.2
3. Задание 2: Оптимизация Kp (одномерная)

📐 Код: optimization/optimize_kp.m

function [Kp_opt, J_opt, history] = optimize_kp(config, flags, sim_params, ... params_aero, params_slope, params_mass, ... params_friction, params_obstacle, ... params_heating, params_backlash, params_noise, ... v0, x0, theta0, T_motor0, range_Kp) % ОПТИМИЗАЦИЯ KP (П-РЕГУЛЯТОР) if nargin < 16 range_Kp = [0.1, 1.5]; end % Веса критериев weights = [0.3, 0.3, 0.4]; % Целевая функция для Kp objective = @(Kp) objective_function([Kp, 0, 0], config, flags, sim_params, ... params_aero, params_slope, params_mass, ... params_friction, params_obstacle, ... params_heating, params_backlash, params_noise, ... v0, x0, theta0, T_motor0, weights); % Оптимизация (метод золотого сечения) options = optimset('Display', 'iter', 'TolX', 0.001); [Kp_opt, J_opt] = fminbnd(objective, range_Kp(1), range_Kp(2), options); % Построение графика зависимости J от Kp Kp_test = linspace(range_Kp(1), range_Kp(2), 30); J_test = zeros(size(Kp_test)); for i = 1:length(Kp_test) J_test(i) = objective(Kp_test(i)); end figure('Name', 'Оптимизация Kp', 'Position', [100, 100, 800, 500]); plot(Kp_test, J_test, 'b-', 'LineWidth', 1.5); hold on; plot(Kp_opt, J_opt, 'ro', 'MarkerSize', 10, 'MarkerFaceColor', 'red'); xlabel('Kp'); ylabel('Целевая функция J'); title('Оптимизация коэффициента Kp'); legend('J(Kp)', 'Оптимум', 'Location', 'best'); grid on; fprintf('Оптимальный Kp = %.4f\n', Kp_opt); fprintf('Минимальное значение J = %.4f\n', J_opt); end
📊 Пример для варианта 5:
% Оптимизация Kp [Kp_opt, J_opt] = optimize_kp(config, flags, sim_params, ... params_aero, params_slope, params_mass, ... params_friction, params_obstacle, ... params_heating, params_backlash, params_noise, ... 0, 0, 0, 20, [0.2, 1.0]); % Результат: Kp_opt = 0.42
4. Задание 3: Многомерная оптимизация Kp, Ki, Kd

📐 Код: optimization/optimize_params.m

function [params_opt, J_opt] = optimize_params(config, flags, sim_params, ... params_aero, params_slope, params_mass, ... params_friction, params_obstacle, ... params_heating, params_backlash, params_noise, ... v0, x0, theta0, T_motor0, bounds) % МНОГОМЕРНАЯ ОПТИМИЗАЦИЯ [Kp, Ki, Kd] if nargin < 16 % Границы [min, max] для Kp, Ki, Kd bounds = [0.1, 1.0; % Kp 0.01, 0.2; % Ki 0.001, 0.05]; % Kd end % Веса критериев weights = [0.3, 0.3, 0.4]; % Целевая функция для вектора параметров objective_vec = @(x) objective_function(x, config, flags, sim_params, ... params_aero, params_slope, params_mass, ... params_friction, params_obstacle, ... params_heating, params_backlash, params_noise, ... v0, x0, theta0, T_motor0, weights); % Оптимизация (симплекс-метод) options = optimset('Display', 'iter', 'TolX', 1e-4, 'TolFun', 1e-4); x0 = [0.4, 0.05, 0.02]; % начальное приближение [params_opt, J_opt] = fminsearch(objective_vec, x0, options); % Ограничение параметров в заданных границах params_opt(1) = max(bounds(1,1), min(bounds(1,2), params_opt(1))); params_opt(2) = max(bounds(2,1), min(bounds(2,2), params_opt(2))); params_opt(3) = max(bounds(3,1), min(bounds(3,2), params_opt(3))); fprintf('\n=== РЕЗУЛЬТАТЫ ОПТИМИЗАЦИИ ===\n'); fprintf('Оптимальный Kp = %.4f\n', params_opt(1)); fprintf('Оптимальный Ki = %.4f\n', params_opt(2)); fprintf('Оптимальный Kd = %.4f\n', params_opt(3)); fprintf('Минимальное значение J = %.4f\n', J_opt); end
⚠️ Внимание: Многомерная оптимизация может занимать много времени (десятки и сотни запусков симуляции). Для ускорения можно:
  • Уменьшить время симуляции (t_stop = 10 с)
  • Увеличить шаг dt (0.02-0.05 с)
  • Отключить усложнения на время оптимизации
5. Задание 4: Сравнение результатов оптимизации
МетодKpKiKdt_95%, сOS, %J
Зиглер-Никольс (П)0.302.1120.45
Зиглер-Никольс (ПИД)0.360.070.0181.580.32
Оптимизация (П)0.421.8150.38
Оптимизация (ПИД)0.380.090.0221.250.25
📈 Вывод: Оптимизация позволила улучшить качество регулирования на 20-30% по сравнению с эвристическими методами настройки.
6. Задание для студентов
  1. Создать целевую функцию objective_function.m с подходящими весами для вашей группы
  2. Провести одномерную оптимизацию Kp с помощью optimize_kp.m
  3. Провести многомерную оптимизацию Kp, Ki, Kd (для ПИ или ПИД-регулятора)
  4. Сравнить результаты с настройкой по Зиглеру-Никольсу
  5. Построить график зависимости целевой функции от параметров
Результат: Оптимальные коэффициенты регулятора, обеспечивающие наилучшее качество регулирования для вашего варианта.
7. Что должно быть в отчёте
РазделСодержание
1. Целевая функцияФормула, веса, ограничения
2. Оптимизация KpГрафик J(Kp), оптимальное значение
3. Оптимизация Kp, Ki, KdИтерации оптимизации, конечные значения
4. Сравнительная таблицаЗиглер-Никольс vs Оптимизация
5. ВыводыНасколько улучшилось качество регулирования
Практика 18: Парето-оптимизация и итоговый отчёт
НЕДЕЛЯ 9: ОПТИМИЗАЦИЯ И ИНТЕГРАЦИЯ

Практика 18: Парето-оптимизация и итоговый отчёт

Построение фронта Парето, интеграция всех модулей, формирование итогового отчёта по проекту

1.5 часа
18
Парето-оптимизация и итоговый отчёт
1.5 часа
Практика
+
1. Цель практики

Провести многокритериальный анализ, построить фронт Парето для компромиссных решений, интегрировать все модули и сформировать итоговый отчёт по проекту.

  • Построить фронт Парето для критериев (t_95%, OS)
  • Выбрать компромиссное решение
  • Экспортировать все графики и результаты
  • Сформировать итоговый отчёт по всем блокам
2. Задание 1: Построение фронта Парето

📐 Код: analysis/pareto_front.m

function [pareto_points, pareto_indices] = pareto_front(points) % ПОСТРОЕНИЕ ФРОНТА ПАРЕТО % points: матрица N×2 [t_95%, OS] % Возвращает индексы Парето-оптимальных точек N = size(points, 1); is_pareto = true(N, 1); for i = 1:N for j = 1:N if i ~= j % Если j доминирует над i (оба критерия лучше) if points(j,1) <= points(i,1) && points(j,2) <= points(i,2) && ... (points(j,1) < points(i,1) || points(j,2) < points(i,2)) is_pareto(i) = false; break; end end end end pareto_indices = find(is_pareto); pareto_points = points(pareto_indices, :); % Сортировка по t_95% [~, idx] = sort(pareto_points(:,1)); pareto_points = pareto_points(idx, :); pareto_indices = pareto_indices(idx); end

📊 Генерация точек для Парето-фронта

function [t_rise_values, os_values] = generate_pareto_samples(config, flags, sim_params, ... params_aero, params_slope, params_mass, ... params_friction, params_obstacle, ... params_heating, params_backlash, params_noise) % ГЕНЕРАЦИЯ ВЫБОРОК ДЛЯ ПАРЕТО-ФРОНТА % Диапазоны параметров Kp_range = linspace(0.2, 0.8, 10); Ki_range = linspace(0.02, 0.15, 8); Kd_range = linspace(0.005, 0.04, 6); t_rise_values = []; os_values = []; for i = 1:length(Kp_range) for j = 1:length(Ki_range) for k = 1:length(Kd_range) Kp = Kp_range(i); Ki = Ki_range(j); Kd = Kd_range(k); % Запуск симуляции controller_params = struct(); controller_params.type = 'PID'; controller_params.Kp = Kp; controller_params.Ki = Ki; controller_params.Kd = Kd; controller_params.v_target = 0.8; [t, v, ~, ~, ~, ~, ~] = simulate_robot(... config, flags, sim_params, 'constant', ... params_aero, params_slope, params_mass, ... params_friction, params_obstacle, ... params_heating, params_backlash, params_noise, ... 0, 0, 0, 20, controller_params); metrics = analyze_transient(t, v); t_rise_values(end+1) = metrics.t_rise_95; os_values(end+1) = metrics.overshoot; end end end end
3. Задание 2: Визуализация фронта Парето
function plot_pareto_front(t_rise_values, os_values, pareto_points) figure('Name', 'Фронт Парето', 'Position', [100, 100, 800, 600]); % Все точки scatter(t_rise_values, os_values, 50, 'b.', 'DisplayName', 'Все варианты'); hold on; % Парето-фронт plot(pareto_points(:,1), pareto_points(:,2), 'r-o', 'LineWidth', 2, ... 'MarkerSize', 8, 'MarkerFaceColor', 'red', 'DisplayName', 'Парето-фронт'); % Отметка выбранного компромиссного решения [~, idx] = min(pareto_points(:,1) + pareto_points(:,2)); compromise = pareto_points(idx, :); plot(compromise(1), compromise(2), 'g*', 'MarkerSize', 15, ... 'LineWidth', 2, 'DisplayName', 'Компромиссное решение'); xlabel('Время разгона t_{95%}, с'); ylabel('Перерегулирование OS, %'); title('Фронт Парето для двухкритериальной оптимизации'); legend('Location', 'best'); grid on; % Добавляем текстовую аннотацию text(compromise(1) + 0.1, compromise(2) + 1, ... sprintf('t_{95%%}=%.2f, OS=%.1f%%', compromise(1), compromise(2)), ... 'FontSize', 10, 'BackgroundColor', 'white'); end
📊 Интерпретация:
  • Точки на Парето-фронте — это лучшие компромиссы между временем разгона и перерегулированием
  • Движение вдоль фронта: уменьшение времени разгона → увеличение перерегулирования
  • Компромиссное решение выбирается с учётом требований ТЗ
4. Задание 3: Экспорт графиков

📐 Код: utils/export_figures.m

function export_figures(output_dir) % ЭКСПОРТ ВСЕХ ГРАФИКОВ ПРОЕКТА if nargin < 1 output_dir = 'figures/'; end % Создание папки, если не существует if ~exist(output_dir, 'dir') mkdir(output_dir); end % Список всех фигур figs = findall(0, 'Type', 'figure'); for i = 1:length(figs) figure(figs(i)); % Очистка имени файла fig_name = get(figs(i), 'Name'); if isempty(fig_name) fig_name = sprintf('figure_%d', figs(i)); end % Удаление недопустимых символов fig_name = strrep(fig_name, ' ', '_'); fig_name = strrep(fig_name, '/', '_'); fig_name = strrep(fig_name, '\\', '_'); % Сохранение в разных форматах filename_png = fullfile(output_dir, [fig_name, '.png']); filename_fig = fullfile(output_dir, [fig_name, '.fig']); saveas(figs(i), filename_png); saveas(figs(i), filename_fig); fprintf('✅ Сохранён: %s\n', filename_png); end fprintf('Все графики экспортированы в папку "%s"\n', output_dir); end
5. Задание 4: Сохранение отчёта

📐 Код: utils/save_report.m

function save_report(report_data, filename) % СОХРАНЕНИЕ ИТОГОВОГО ОТЧЁТА % report_data: структура со всеми результатами if nargin < 2 filename = sprintf('final_report_variant_%d.mat', report_data.variant_number); end % Добавление временной метки report_data.timestamp = datestr(now); report_data.version = '1.0'; % Сохранение в MAT-файл save(filename, 'report_data'); fprintf('✅ Отчёт сохранён в %s\n', filename); % Создание текстового отчёта txt_filename = strrep(filename, '.mat', '.txt'); fid = fopen(txt_filename, 'w'); fprintf(fid, '========================================\n'); fprintf(fid, 'ИТОГОВЫЙ ОТЧЁТ ПО ПРОЕКТУ LFR\n'); fprintf(fid, '========================================\n'); fprintf(fid, 'Вариант: %d\n', report_data.variant_number); fprintf(fid, 'Группа: %d\n', report_data.group); fprintf(fid, 'Дата: %s\n', report_data.timestamp); fprintf(fid, '\n'); fprintf(fid, '--- Результаты симуляции ---\n'); fprintf(fid, 'v_steady = %.3f м/с\n', report_data.final_metrics.v_steady); fprintf(fid, 't_95%% = %.3f с\n', report_data.final_metrics.t_rise_95); fprintf(fid, 'OS = %.1f %%\n', report_data.final_metrics.overshoot); fprintf(fid, 'MTBF = %.0f ч\n', report_data.mtbf); fprintf(fid, '\n--- Оптимальные параметры регулятора ---\n'); fprintf(fid, 'Kp = %.4f\n', report_data.optimal_Kp); if isfield(report_data, 'optimal_Ki') fprintf(fid, 'Ki = %.4f\n', report_data.optimal_Ki); end if isfield(report_data, 'optimal_Kd') fprintf(fid, 'Kd = %.4f\n', report_data.optimal_Kd); end fprintf(fid, '\n--- Вероятность успеха (Монте-Карло) ---\n'); fprintf(fid, 'P_success = %.1f %%\n', report_data.P_success * 100); fclose(fid); fprintf('✅ Текстовый отчёт сохранён в %s\n', txt_filename); end
6. Итоговая интеграция всех модулей
┌─────────────────────────────────────────────────────────────────────┐
│                      ИТОГОВЫЙ СКРИПТ (final_integration.m)          │
├─────────────────────────────────────────────────────────────────────┤
│                                                                     │
│  1. ЗАГРУЗКА КОНФИГУРАЦИИ                                           │
│     └── variant_config, params_extended                            │
│                                                                     │
│  2. БЛОК 5: РАСШИРЕННЫЕ МОДЕЛИ                                      │
│     └── add_aerodynamics, add_slope, add_variable_mass...          │
│                                                                     │
│  3. БЛОК 6: ВЕРОЯТНОСТНЫЕ МЕТОДЫ                                    │
│     └── monte_carlo, reliability_analysis                          │
│                                                                     │
│  4. БЛОК 7: ПРИНЯТИЕ РЕШЕНИЙ                                        │
│     └── goal_tree, ahp_matrix, evaluate_alternatives               │
│                                                                     │
│  5. БЛОК 8: СРАВНЕНИЕ РЕГУЛЯТОРОВ                                   │
│     └── compare_controllers                                        │
│                                                                     │
│  6. БЛОК 9: ОПТИМИЗАЦИЯ                                             │
│     └── optimize_kp, optimize_params, pareto_front                 │
│                                                                     │
│  7. ФОРМИРОВАНИЕ ОТЧЁТА                                             │
│     └── export_figures, save_report                                │
│                                                                     │
└─────────────────────────────────────────────────────────────────────┘
                            
7. Задание для студентов
  1. Построить фронт Парето для своего варианта (варьируя Kp, Ki, Kd)
  2. Выбрать компромиссное решение с учётом требований ТЗ
  3. Экспортировать все графики в папку figures/
  4. Сформировать итоговый отчёт со всеми результатами блоков 5-9
  5. Подготовить презентацию (5-7 слайдов) с основными результатами
🏆 Итоговый результат:
  • Полностью настроенная и верифицированная модель LFR
  • Набор оптимальных параметров и регулятора
  • Анализ надёжности и рисков (P_success, MTBF)
  • Обоснование выбора альтернатив (AHP)
  • Комплект графиков и таблиц для защиты
8. Что должно быть в итоговом отчёте
БлокСодержание
Блок 5Расширенные модели, анализ чувствительности
Блок 6Монте-Карло, надёжность (графики R(t), гистограммы)
Блок 7Дерево целей, AHP, выбор альтернативы
Блок 8Сравнение регуляторов, выбор оптимального
Блок 9Оптимизация, Парето-фронт, итоговые параметры
ПриложенияКод, графики, результаты симуляций
9. Критерии оценки (макс. 10 баллов)
КритерийБаллыОписание
1. Фронт Парето1.5Построен корректно, точки на графике, пояснения
2. Компромиссное решение1Выбрано, обосновано, отмечено на графике
3. Экспорт графиков0.5Все графики сохранены, подписаны
4. Итоговый отчёт1.5Структурирован, полнота, оформление
5. Презентация15-7 слайдов, наглядность, ключевые результаты
6. Интеграция всех блоков1.5Все 9 лекций отражены в работе
7. Выводы и рекомендации1Чёткие выводы, инженерные рекомендации
8. Защита2Ответы на вопросы, понимание работы
ИТОГО10
LFR Simulator — Структура проекта
📁 MATLAB Project · LFR Simulator

Структура проекта Версия 2.0 (Блоки 7-9 готовы)

Полное описание файловой структуры LFR Simulator — модульная организация кода, функции по лекциям, шаблоны отчётов

📦 Скачать готовый проект

Библиотека функций MATLAB для системного анализа LFR (без Simulink)

⬇️ Скачать проект

💻 0. Системные требования

+

Минимальные требования:

MATLAB R2020a или новее
Control System Toolbox
Optimization Toolbox (для блока 9)
Statistics and Machine Learning Toolbox (для блока 6)

💡 Примечание: Большинство функций работают без дополнительных工具箱, но для полной функциональности рекомендуется установить указанные пакеты.

📁 1. Полная структура проекта

+
LFR_Simulator/
│
├── main.mlx                                    # ГЛАВНЫЙ (точка входа)
│
├── config/                                      # КОНФИГУРАЦИЯ
│   ├── default_config.m                        # Базовые параметры
│   ├── variant_config.m                        # Параметры по варианту (1-11)
│   └── params_extended.m                       # Расширенные параметры (шум, люфт)
│
├── core/                                         # ЯДРО СИМУЛЯЦИИ
│   ├── simulate_robot.m                        # Основная симуляция (с поддержкой регуляторов)
│   └── base_dynamics.m                         # Базовая динамика
│
├── dynamics/                                     # УСЛОЖНЕНИЯ ДИНАМИКИ
│   ├── add_aerodynamics.m                      # Сопротивление воздуха
│   ├── add_slope.m                             # Гравитация на уклоне
│   ├── add_variable_mass.m                     # Переменная масса
│   ├── add_variable_friction.m                 # Переменное сцепление (влажность)
│   └── add_obstacle.m                          # Препятствия
│
├── actuators/                                    # АКТУАТОРЫ
│   ├── heating_model.m                         # Тепловая модель двигателя
│   └── backlash_model.m                        # Люфт в редукторе
│
├── sensors/                                      # ДАТЧИКИ
│   ├── ir_sensor.m                             # ИК-датчик линии
│   ├── encoder.m                               # Энкодер с квантованием
│   └── gyro.m                                  # Гироскоп с дрейфом
│
├── disturbances/                                 # ВОЗМУЩЕНИЯ
│   └── add_noise.m                             # Добавление шума
│
├── control/                                      # РЕГУЛЯТОРЫ ✅ Блок 8
│   ├── p_controller.m                          # П-регулятор
│   ├── pi_controller.m                         # ПИ-регулятор
│   ├── pid_controller.m                        # ПИД-регулятор
│   └── trajectory_generator.m                  # Генератор трассы
│
├── analysis/                                     # АНАЛИЗ РЕЗУЛЬТАТОВ
│   ├── analyze_transient.m                     # Переходные процессы
│   ├── analyze_sensitivity.m                   # Анализ чувствительности (Блок 5)
│   ├── monte_carlo.m                           # Метод Монте-Карло (Блок 6)
│   ├── reliability_analysis.m                  # Анализ надёжности (Блок 6)
│   ├── pareto_front.m                          # Фронт Парето (Блок 9)
│   ├── plot_results_simple.m                   # Визуализация
│   └── save_results.m                          # Сохранение результатов
│
├── decision/                                     # ПРИНЯТИЕ РЕШЕНИЙ ✅ Блок 7
│   ├── goal_tree.m                             # Дерево целей
│   ├── ahp_matrix.m                            # Метод AHP (веса критериев)
│   └── evaluate_alternatives.m                 # Оценка альтернатив
│
├── optimization/                                 # ОПТИМИЗАЦИЯ ✅ Блок 9
│   ├── objective_function.m                    # Целевая функция
│   ├── optimize_kp.m                           # Оптимизация Kp
│   ├── optimize_params.m                       # Многопараметрическая оптимизация
│   └── compare_controllers.m                   # Сравнение регуляторов (Блок 8)
│
├── utils/                                       # ВСПОМОГАТЕЛЬНЫЕ
│   ├── check_limits.m                          # Проверка ограничений
│   ├── generate_variants.m                     # Генерация случайных выборок
│   ├── run_simulation_batch.m                  # Пакетный запуск
│   ├── save_report.m                           # Сохранение отчёта (HTML/TXT/MAT)
│   └── export_figures.m                        # Экспорт графиков
│
└── reports/                                      # ШАБЛОНЫ ОТЧЁТОВ
    ├── report_template_block5.mlx              # Блок 5 (Лекция 5) — ✅
    ├── report_template_block6.mlx              # Блок 6 (Лекция 6) — ✅
    ├── report_template_block7.mlx              # Блок 7 (Лекция 7) — ✅
    ├── report_template_block8.mlx              # Блок 8 (Лекция 8) — ✅
    └── report_template_block9.mlx              # Блок 9 (Лекция 9) — ✅
                    
✅ Полная готовность: Все блоки 5-9 полностью реализованы и протестированы. Блок 5 Блок 6 Блок 7 Блок 8 Блок 9

📊 2. Группы вариантов (по материалам лекций)

+
ГруппаНомера вариантовХарактеристикаКлючевые усложненияФайлы
1. Эконом1, 8Низкая стоимость, энергоэффективностьЭнергопотребление, люфт, шумvariant_config.m, params_extended.m
2. Высокоточные2, 5, 9Точность позиционирования, низкий шумЛюфт (малый), шум, вибрации, гироскопvariant_config.m, params_extended.m, ir_sensor.m
3. Промышленные3, 6, 7Надёжность, работа с нагрузкой, теплоПеременная масса, тепловая модель, препятствияadd_variable_mass.m, heating_model.m, add_obstacle.m
4. Экстремальные4, 10, 11Высокая скорость, сложные условияАэродинамика, переменное сцепление, crowd avoidanceadd_aerodynamics.m, add_variable_friction.m
📌 Примечание: Для каждого варианта в variant_config.m и params_extended.m задаются индивидуальные параметры.

📋 3. Блоки отчётов (по лекциям)

+
БлокЛекцияПрактикиФайл отчётаСодержаниеСтатус
Блок 5Лекция 59, 10report_template_block5.mlxРасширенные модели, анализ чувствительности✅ Готов
Блок 6Лекция 611, 12report_template_block6.mlxМетод Монте-Карло, анализ надёжности✅ Готов
Блок 7Лекция 713, 14report_template_block7.mlxДерево целей, метод AHP✅ Готов
Блок 8Лекция 815, 16report_template_block8.mlxСравнение регуляторов (П, ПИ, ПИД)✅ Готов
Блок 9Лекция 917, 18report_template_block9.mlxОптимизация, Парето, итоговый отчёт✅ Готов
✅ Все шаблоны отчётов готовы! Каждый содержит автоматическую настройку под ваш вариант, визуализацию результатов и выводы.

🔧 4. Функции по блокам

+

📌 Блок 5 (Лекция 5) — Расширенные модели и анализ чувствительности

📁 dynamics/add_aerodynamics.m — F_air = 0.5·ρ·Cx·A·v²
📁 dynamics/add_slope.m — F_gravity = m·g·sin(α)
📁 dynamics/add_variable_mass.m — m_total = m0 + m_load·H(t - t_load)
📁 actuators/heating_model.m — dT/dt = (i²R - (T - T_amb)/Rth)/Cth
📁 analysis/analyze_sensitivity.m — анализ чувствительности v_steady к параметрам

📌 Блок 6 (Лекция 6) — Вероятностные методы и надёжность

📁 analysis/monte_carlo.m — метод Монте-Карло, P_success, доверительные интервалы
📁 analysis/reliability_analysis.m — MTBF, интенсивность отказов, R(t)
📁 utils/generate_variants.m — генерация случайных выборок параметров

📌 Блок 7 (Лекция 7) — Декомпозиция и принятие решений ✅

📁 decision/goal_tree.m — построение дерева целей для вашего варианта
📁 decision/ahp_matrix.m — расчёт весов критериев и CR
📁 decision/evaluate_alternatives.m — оценка альтернатив
% Пример использования AHP criteria_names = {'Надёжность', 'Тяга', 'Стоимость'}; criteria_matrix = [1, 3, 5; 1/3, 1, 3; 1/5, 1/3, 1]; crit_results = ahp_matrix(criteria_names, criteria_matrix); alternatives = {'MY1016', 'Maxon EC', 'Pololu'}; alt_matrices = {reliability_matrix, torque_matrix, cost_matrix}; alt_results = evaluate_alternatives(crit_results.weights, alternatives, alt_matrices);

📌 Блок 8 (Лекция 8) — Сравнение регуляторов ✅

📁 control/pi_controller.m — ПИ-регулятор (с anti-windup)
📁 control/pid_controller.m — ПИД-регулятор (с фильтром производной)
📁 optimization/compare_controllers.m — сравнение по критериям качества
% Пример использования ПИД-регулятора controller_params = struct(); controller_params.type = 'PID'; controller_params.Kp = 0.4; controller_params.Ki = 0.08; controller_params.Kd = 0.02; controller_params.v_target = 0.8; [t, v, ~, ~, ~, ~, ~] = simulate_robot(..., controller_params);

📌 Блок 9 (Лекция 9) — Оптимизация и интеграция ✅

📁 optimization/objective_function.m — целевая функция (IAE/ISE/ITAE)
📁 optimization/optimize_kp.m — одномерная оптимизация Kp
📁 optimization/optimize_params.m — многомерная оптимизация Kp, Ki, Kd
📁 analysis/pareto_front.m — построение фронта Парето
📁 utils/run_simulation_batch.m — пакетный запуск симуляций
📁 utils/save_report.m — сохранение отчёта (MAT/TXT/HTML)
📁 utils/export_figures.m — экспорт всех графиков в PNG/SVG
% Пример оптимизации Kp [Kp_opt, J_opt] = optimize_kp(config, flags, sim_params, ..., [0.1, 1.0]); % Пример построения Парето-фронта plot_pareto_front(t_rise_samples, os_samples, v_steady_samples, v_target);

📅 5. Порядок выполнения работ

+
1
Настройка базовых параметров
Открыть main.mlx, задать variant_number. Запустить — проверить, что скорость соответствует ТЗ.
2
Блок 5 (Лекция 5)
Запустить report_template_block5.mlx. Включить усложнения по группе, проанализировать чувствительность.
3
Блок 6 (Лекция 6)
Запустить report_template_block6.mlx. Выполнить метод Монте-Карло, анализ надёжности.
4
Блок 7 (Лекция 7) — Декомпозиция ✅
Запустить report_template_block7.mlx. Построить дерево целей, выполнить AHP, выбрать лучшую альтернативу.
5
Блок 8 (Лекция 8) — Регуляторы ✅
Запустить report_template_block8.mlx. Сравнить П, ПИ, ПИД регуляторы, выбрать оптимальный.
6
Блок 9 (Лекция 9) — Оптимизация ✅
Запустить report_template_block9.mlx. Оптимизировать параметры, построить фронт Парето, сформировать итоговый отчёт.
📌 Результат: Полный комплект отчётов по всем блокам с графиками, таблицами и выводами.

📐 6. Ключевые формулы

+

Базовая динамика: m·dv/dt = Fx - Fr

Сила тяги: Fx = (η·n·km/R)·U - (η·n²·ke·km/R)·v

Ток двигателя: i = (U - ke·ω)/R, ω = n·v/r

Аэродинамика: Fair = 0.5·ρ·Cx·A·v²

Тепловая модель: dT/dt = (i²·R - (T - Tamb)/Rth)/Cth

П-регулятор: u(t) = Kp·e(t)

ПИ-регулятор: u(t) = Kp·e(t) + Ki·∫e(t)dt

ПИД-регулятор: u(t) = Kp·e(t) + Ki·∫e(t)dt + Kd·de/dt

Метод AHP: w_i = (1/n)·Σ(aij/Σakj), CR = CI/RI < 0.1

Надёжность: R(t) = e-λt, MTBF = 1/λ

Монте-Карло: Psuccess = Nsuccess/N, CI = p̂ ± z·√(p̂(1-p̂)/N)

Целевая функция: J = w₁·t95% + w₂·OS + w₃·ess

📌 7. Резюме

+
КомпонентФайлыНазначениеБлок
Конфигурацияvariant_config.m, params_extended.mПараметры по варианту
Симуляцияsimulate_robot.m, base_dynamics.mОсновной цикл симуляции
Усложненияdynamics/*, actuators/*Аэродинамика, уклон, масса, тепло, люфтБлок 5
Анализ чувствительностиanalyze_sensitivity.mЧувствительность v_steady к параметрамБлок 5
Монте-Карлоmonte_carlo.mВероятность успеха, доверительные интервалыБлок 6
Надёжностьreliability_analysis.mMTBF, интенсивность отказов, R(t)Блок 6
Дерево целей / AHPdecision/*Декомпозиция, выбор альтернативБлок 7
Регуляторыcontrol/*П, ПИ, ПИД регуляторыБлок 8
Оптимизацияoptimization/*Целевая функция, оптимизация Kp, ПаретоБлок 9
Отчётыreports/*Шаблоны для всех блоков

🏆 Проект полностью готов к сдаче!
- Все 9 лекций реализованы в виде функций и шаблонов отчётов
- Поддержка всех 11 вариантов с автоматической настройкой
- Полная обратная совместимость со старыми вызовами функций
- Экспорт отчётов в 3 форматах: MATLAB (.mat), текст (.txt), HTML (.html)

📅 Актуальная версия: Апрель 2026
🔧 MATLAB R2020a или новее
📧 По вопросам: обратитесь к преподавателю

Made on
Tilda