# Расчётная модель P2

Версия `0.2.0-tondu-lopez`. Все внутренние величины в СИ. Расчёт и визуализация не являются новыми измерениями.

## МакКиббен: пантограф и Тонду—Лопес

Обозначения соответствуют исходной презентации, слайды 14–17. В ячейке пантографа постоянная сторона c: a_cell=c sin α, b_cell=c cos α. Поэтому r/r₀=sin α/sin α₀ и L/L₀=cos α/cos α₀. Ни длина спирали, ни число оборотов не служат параметрами этого расчёта.

```text
ε = (L₀−L)/L₀, λ = 1−ε
A = 3/tan²α₀, B = 1/sin²α₀
p_eff = max(p−p₀,0)
F = πr₀² p_eff [Aλ²−B]
D = D₀ sqrt(1−cos²α₀ λ²)/sin α₀
V = πD²L/4
ε_max = 1−sqrt(B/A), α_end = acos(1/√3) ≈ 54.7356°
```

A/B здесь соответствуют a/b в формуле силы на слайде 15; a_cell/b_cell — стороны прямоугольной половины ромба, не те же коэффициенты. Формула силы согласована с −p_eff dV/dL. Перезапись прежней идеальной формулы через пантограф сама по себе не меняет результат: 40,2% при 15° были идеальным пределом. При 23° он около 37,3%, а физический ход может быть меньше.

По умолчанию L₀=270 мм, D₀=4,5 мм, α₀=23°, p₀=31 кПа. Последние два числа взяты из строки εн=0 узкого образца на слайде 16. Это лишь демонстрационная экстраполяция одной строки на весь ход: в исходнике при других фиксированных длинах поправки менялись. Новая общая калибровка по эксперименту не выполнена. При p≤p₀ геометрия в ручном режиме остаётся заданной, но движущая сила равна нулю.

Первичная статья: Tondu & Lopez, *Modeling and control of McKibben artificial muscle robot actuators*, IEEE Control Systems Magazine 20(2), 2000, DOI 10.1109/37.833638. [Авторская копия](https://www.researchgate.net/publication/3206658_Modeling_and_control_of_McKibben_artificial_muscle_robot_actuators).

## Вязка

Опубликованная идеальная модель Ball/Cornell, [US20160252111A1](https://patents.google.com/patent/US20160252111A1/en), разделы Derivation of an Ideal Force Curve / Tubular-Knit Model; локальный текст `work/ball_2016_dissertation.txt`, глава 1, уравнения 1.1–1.14.

m — число петель по окружности, n — ряды вдоль, h=L/n. δ=1 для поправки кругового ряда, δ=0 для отдельных замкнутых рядов.

```text
S = 2m h₀ + sqrt((πD₀)²+δh₀²), h₀=L₀/n
q = 4m²−δ
C² = S²−4mSh+qh²
V = LC²/(4π)
F = −p_eff(S²−8mSh+3qh²)/(4π)
h_min = S(4m−sqrt(4m²+3δ))/(3q), L_min=n h_min
```

При δ=0 получаем S=m(2h+w). Для вязки отдельный p₀=0 по умолчанию — идеальное допущение, а не измеренное отсутствие потерь. Можно вручную задать положительный p₀, но это ещё не проверенная модель камеры/трения. Начальные состояния вне тянущей ветви отклоняются.

## Два режима

«Под грузом»: M.equilibrium решает F(ε,p)=F_load на допустимой ветви, начиная с исходной длины. При отсутствии движущего давления показывается исходная геометрия и нулевая сила. Если начальной силы меньше груза, статус «не поднимает с исходной длины»: это ограничение запуска, а не прогноз растяжения под грузом. Не допускается перескок на внутренний корень немонотонной кривой вязки без достаточной начальной силы. При F_load=0 и p_eff>0 показан идеальный конец тянущей ветви. Динамика и достижимость реального хода за конкретное время не утверждаются.

«Геометрия»: ползунок задаёт одинаковую долю собственного геометрического хода каждой модели; их фактические ε различаются. Управляемое воспроизведение длится 7 секунд в одну сторону и не является физической временной шкалой. При reduced-motion доступны шаги вместо непрерывного движения. Маркеры графиков всегда стоят на настоящем ε соответствующего состояния.

## Рисунок и ограничения

Вид вертикальный, верхнее крепление неподвижно. Общий масштаб длины для обеих моделей; ширина ×6 относительно продольного масштаба, указано на экране. Диаметр и длина камеры повторяют модель; изгиб концов — условная схема. Для читаемости показана часть нитей/рядов. В P2b кабельная оплётка показана цилиндрической проекцией двух встречных семейств. Угол и размеры берутся из того же пантографа, число отображённых нитей условное, чередование перекрытий не является решением контакта. Петлевая Bézier-форма сохранена из P1; изменены только компоновка увеличения, выделение ряда и привязанные к нему точки. Она не является расчётом пространственного контакта и сохранения длины каждой сглаженной дуги.

Не учитываются упругость/толщина камеры, контакт, толщина и изгиб нитей, трение, крепления, клапан/расход, гистерезис, разрыв. Различные текущие p₀ означают разную степень калибровки; по экрану нельзя доказать преимущество вязки. Новые физические опыты ещё нужны.

CSV: 161 точка каждой полной тянущей ветви при выбранном давлении, всего 322 строки данных; происхождение theoretical, версия, размеры и p₀ в каждой строке. Это экспорт кривых, а не запись движения или равновесных точек под текущим грузом. Тесты ядра — `tests/model.test.cjs`, фактическая проверка — `review/p2-verification.md`.

## Уточнение интерфейса P2b

«Геометрия» переименована в «Ручное сокращение». Давление/груз и силовые результаты скрыты; CSV и силовой график недоступны. Вручную задаются только формы из общего ядра при p=0. Ползунок — доля собственного хода. Модель нагрузки не менялась.

PNG2560×1600 использует тот же SVG-рендер и те же состояния, фиксирует видимость оболочки; белый фон и отметка «Расчётная модель» сохраняются независимо от темы. Дуга/числоα и параметрические точки изменяются со состоянием. Направляющие точек — графическое сравнение с начальной формой, не измеренная скорость скольжения нити.

## P2c · 04.11.2026: шнур и семейства кривых

Расчётное ядро0.2.0-tondu-lopez неизменно. yarn.js строит осевую Bézier-схему из прежней knitRow, выбирает равномерные отсчёты, откладывает по нормали4/8 встречных прядей с периодической фазой и порядком переднего/заднего рисунка. Это иллюстрация несущих пучков шнура, а не модель отдельных микроволокон. Число прядей не влияет на силу/трение. Переплетения не являются доказанными контактами. Изменение арк-длины не решает сохранение материала и скольжение при контакте. Петля и h/w связаны с тем же состоянием ядра.

studies.js: F(p)|ε, F(ε)|p, ε(p)|F, A(p)|F и ε/F₀(m). Для m=4,8,12,16,24 сохраняются L₀,D₀,n; длина нити петли пересчитывается. Это не сравнение одинаковой массы шнура. Недостижимые состояния пропускаются. A=Fнагрузки·L₀ε. Нулевая нагрузка показывает идеальный предел, без реалистичной зависимости от давления выше порога.

Для показа будущих потерь отдельно задан условный закон: f=γF₀(p), γ=0..0,2, Fсокр=Fид−f, Fраст=Fид+f. Интервал x=0..0,65L₀εmax, площадь E=2fΔx. E(p), E(m) — следствия этого произвольно выбранного закона, не найденные потери материала и не преимущество K8. Силы могут быть отрицательными: это внешне управляемый цикл, не свободное движение.

13 синтетических точек ошибки строятся при t=i/12, ε=0,65εmax·t: ΔF=Fмод(−0,06+0,045cos4πt)+0,025F₀sinπt. Они лишь показывают будущую форму графика остатков, не ошибку реальных измерений.

CSV содержит record_kind: ideal_calculation / illustrative_loss_model / synthetic_example_not_measurement, версию, исходные размеры, фактический m/n, условия конкретной точки и общего сценария. m-зависимости всегда для вязки независимо от выбранного семейства. SVG графика содержит происхождение и metadataJSON. В проекте нет новых физических измерений.

## P2d · соседние петли и кабельные группы

Силовое ядро/поправки не изменены. РисунокknitRow по форме прежний. Геометрия нескольких рядов получается из одной нормированной схемы с масштабамиh,w. Пересечения осевых линий находятся в2D один раз для данной раскладки; их координаты затем преобразуются тем же растяжением. Участки над/под пересечением отрисованы из подготовленных прядей с сохранением их фазы. Контактные силы, реальное проскальзывание и закон трения этим не вычисляются. Пунктирные кольца — места пересечения проекции.

Новая отдельная схема3рядов×2петель и увеличенный прежний участок4×3. Цветная укладка шнура показана во всех рядах. ВеличинаK4/K8 по-прежнему не входит в расчёт силы. У кабельной схемы четыре параллельные линии на жгут; слайд7 подтверждает группировку, но число4 известно только из текущего сообщения пользователя. Оно не установлено по фотографии и не внесено как новый физический параметр.

Оптимизация DOM/частоты/видимости не меняет вычисленные состояния. Профиль?profile=1 измеряет только времяJS-обновленияrender; не время движения мышцы и не полную скорость браузерного рисования.

## P2e · геометрическая иллюстрация концов

Зажимы фиксированы исходнымD₀. В экранных координатахL,D,D₀ задана длина перехода a=min(0,24L,max(0,1L,0,65(D−D₀))). Для z от0доL: t=clamp(min(z,L−z)/a,0,1), d(z)=D₀+(D−D₀)t²(3−2t). Она симметрична, имеет нулевые наклоны на концах перехода и сохраняетD в средней части. Контур/камера и проекция нитей используют одинd(z).

Это исключительно изображение граничной зоны. Модель0.2.0-tondu-lopez сохраняет идеальное однородное тело, полныйL и расчётныйD средней части; объём рисунка с сужениями не подставлялся вэнергетическую формулу. Угол в увеличении относится к среднему пантографу. Концевая поправка силы/объёма требует отдельной модели/валидации. Не выдавать это за подтверждённую форму реального образца.

Флажок выпячивания рисует выступ у верхнего перехода с экранной амплитудой0,32max(D−D₀,0). Это произвольная наглядная шкала по наблюдению пользователя, не прогноз возникновения, размера, напряжения или разрыва. ПриD=D₀ выступ отсутствует. В экспорте остаётся подпись иллюстрации.

Соседние ряды чередуются цветом; мостик сохраняет цвет/фазу ряда. Цвет не задаёт материал/силу. Геометрия одиночной петли и физическое ядро не изменялись.

О нагрузке в графиках: зависимостиD(ε),V(ε),F(ε)|p задаются моделью при фиксированномдавлении. Выбранный груз определяет рабочую точку/горизонтальную линию, а не новый законF(ε). Семействаε(p)|F иA(p)|F содержат явно заданные нагрузки, отдельный сценарий имеет собственныйF*. Это объяснение существующего поведения, изменение графиковP2e не выполняет.

## P2f · конечная толщина шнура и видимость

Несущая прядь имеет экранную ширину w=0,72r√(4/k), k∈{4,8}; радиус её оси rₚ=max(0,r−w/2−0,08). Поэтому смещение оси плюс половина толщины не превосходит радиус шнура r. Это ограничивает рисунок прядей, а не определяет деформацию реального UHMWPE. Четыре/восемь прядей не назначают разные силы или трение.

В соседних рядах найдены пересечения осевых линий. Для каждой пары рядов области ближайшего пересечения делят плоскость без перекрывающихся внутренних областей; в каждой назначен один верхний ряд. Маска скрывает нижний шнур на ширину верхнего контура с небольшим экранным зазором. Короткие цветные мостики больше не дорисовываются, каждый полный шнур рисуется один раз. Основная вязаная мышца использует тот же способ; показано до10 рабочих рядов и2 дополнительных под обрезку, число петель на рисунке условное. Пряди видимы также в основной оболочке.

Это детерминированное 2D-перекрытие конечных по толщине линий, не глобальный3D-солвер столкновений, не модель контактных сил, сжатия/изгиба волокон, проскальзывания или трения. Не называть это физически проверенным непроникновением. Кольца — необязательные метки проекции, по умолчанию скрыты. Принятая ось одиночной петли и knitRow не менялись. Ограничения концов P2e сохраняются. Объединение однотипных кабельных путей не меняет геометрию/силу.

27 программных тестов; отчёт app/review/p2f-verification.md. Новых физических измерений, 3D или прогноза разрыва нет. После показа ждать отзыв.

## P2g · 04.11.2026 · параметры и движение

Добавлены живойm4–16 (диапазонFraens; первичное описание проверено04.11) и живойn в дополнительных параметрах. Внутри сравнительного сценария L₀,D₀,n фиксированы при измененииm; S рассчитывается заново. Диапазон машины не доказывает, что рукав нужного размера получится с нашим шнуром. K4/K8 — отдельный визуальный параметр.

motion.js отдельно отmodel.js: P=Pцель·smoothstep(t/6), отображённоеε приближается к статическомуε* поεнов=ε*+(εстар−ε*)exp(−dt/τ). τ0,28 для запуска и0,18 для ручной смены условий, всё в условных секундах. Нет интегрирования массы/воздушного расхода, параметры не измерены. Во время перехода F вычисляется в показанномε при текущемP; она не обязана совпадать с нагрузкой. Невозможный запуск сохраняет0%. Пауза/продолжение/перезапуск/прерывание и reduced-motion предусмотрены. Перед PNG переход завершается статическим состоянием, поэтому источник кадра квазистатический, не экспорт динамического опыта.

Опциональное заполнение камеры: q=0,65+0,35smoothstep(P/max(15кПа,Pпуска)). Pпуска=P₀+Fгруз/F(0,P₀+1Па). q относится только к рисунку внутреннего просвета, не к наружномуD, объёму/силовой формуле. Наружное набухание при неизменномL не обещано идеальной моделью. В экспортеq передаётся и подписывается, еслиq<1.

Поправлены узкие части Bézier-петли и постоянный по ходу радиус рисунка: в увеличенияхr≤0,12w₀·масштаб. Тонкий контур масштабируется сr; маска соседнего ряда покрывает реальную ширину контура с зазором. Истинные самопересечения оси отслеживаются отдельно; восстановленная непрерывная верхняя ветвь обрезается областью пересечения с сохранением фазы прядей, без торчащих концов. Это графический порядок, не контактный/изгибный солвер. МакКиббен и модельсилы0.2.0 прежние. Проверки33теста и p2g-verification.md. 3D/физическая динамика/трение/новые измерения ещё не выполнены. После показа ждать отзыв.

## P2j · 05.11.2026 · число ячеек

Текущая версия ядра 0.3.0-geometry-controls. Уравнения прежние; CSV дополнен braid_cells. N означает окружные ячейки кабельной оболочки, m петли вязки, K4/K8 пряди внутри шнура. Управление N4–16 не заявляет диапазон промышленной плетельной машины.

resizeMesh в режиме pitch сохраняет поперечный шаг: D₀,new = D₀,old·count,new/count,old. Для одинакового начального диаметра пары N и m связываются. Это серия с изменением диаметра камеры; физический образец требует подходящей камеры, а не принудительного растяжения прежней. Режим diameter сохраняет D₀, счётчики независимы. Для чистого сравнения влияния количества петель используем его.

При постоянных L₀,D₀,α₀,P число кабельных ячеек не добавляет множитель силы идеального МакКиббена. При увеличении D₀ растёт площадь; это геометрическая причина изменения силы. Постоянный размер ячейки выбран как явное условие конструктора, не универсальный закон любой вязки. Новых данных, физических контактов и 3D нет. 90 прежних состояний сравнены с checkpoint P2i: максимальная относительная разница L/D/V/F равна нулю.


## P2k · 05.11.2026 · независимая геометрия

0.4.0-independent-shells: buildModels принимает необязательные braidDiameter/knitDiameter. При отсутствии обоих сохраняется общий прежнийdiameter. Каждый model.config.diameter является собственным эффективным D₀. Уравнения пантографа/Тонду–Лопеса и вязки не изменены.

resizeMesh(..., basis, synchronize=false) в pitch меняет только D₀ выбранной оболочки пропорциональноcountNew/countOld. В diameter оставляет D₀. При synchronize=true оба счётчика и D₀ приравниваются выбранной оболочке. Сохраняется начальный шаг, а не форма уже сжатой под нагрузкой ячейки: равновесие при новой площади может отличаться.

ОсновнойCSV берёт исходныйD₀ из каждого model.config; смешанные семейства также записывают диаметр именно своей конструкции. SVGкадра подписываетD₀(М/В), N/m/n. Неподобранные диаметры не объявляются корректным физическим сравнением. Численное совпадение90прежних состояний сcheckpointP2i точно сохраняется, физических опытов не было.

Рендер: угловое смещение четырёх параллельных кабельных нитей вместо постоянного экранного сдвига, периферийная плотность ограничена проекцией; выделяется один ромб. У вязаных перекрытий просвет учитывает полный контур верхней нити. Это исключительно2Dотрисовка, не контактные силы или закон трения.
