Несколько лет тому назад была статья на тему проблематикие кривизны портала. Статья раскрывала тему с точки зрения «как измерить». Что с этим делать — дело совсем другое. В простом случае у Вас есть еще не выпущенная версия LinuxCNC 2.10, в которой реализован механизм и алгоритм такой коррекции, причем реализован грамотно и трехмерно, называется matrixkins. Каждый может использовать эти возможности — в будущем, когда выйдет версия 2.10. А покамест в версии 2.9.8 бэкпортированная автором версия matrixkins бесплатно входит в комплект поставки «Компьютер для управления станком ЧПУ с низким Jitter» (возможно этот бэкпорт войдет и в официальную версию 2.9.8 — UPD — нет, не вошел).
Как видно из описания matrixkins, все вроде бы описано грамотно — матрица преобразований XYZ. Однако матрица прибита гвоздями. Попытка использовать этот же механизм для многомоторных конфигураций станков, а самая распространенная это XXYZ, как раз такая, какая является минимально работоспособной в смысле исправления кривизны, уже в эту матрицу не вписывается.
Сказанное не повод для печали. В документации Kinematics достаточно хорошо описано, кто на ком стоит и это позволяет создавать свои уникальные модули задания книматики. Именно таким путем пошел автор для того, чтобы в версии 2.9 можно было исправлять всегда существующую (еще раз — читать статью всенепременно!!!) кривизну портала. Это «пользовательская» кинематика, userkins.
Файл этой пользовательской кинематики компилируется в модуль ядра. Для этого надо в консоли выполнить одну, две команды. Или вручную скопировать модуль в нужное место, типа /usr/lib/linuxcnc/modules/ — туда кладем файл с расширением so и в дальнейшем при каждом обновлении ядра этот модуль будет автоматически добавляться в нужное место. Но можно это сделать и вручную — готовый модуль ядра с расширением ko кладем в директорий /usr/версия_ядра/modules/linuxcnc/ , в конфиге станка указываем имя модуля ядра и на этом все. С этого момента можно исправлять геометрию станка в реальном времени командой в консоли — если требуется дополнительная коррекция относительно заданной при старте через конфигурационный файл. Например, модуль ядра tadam4_XXYYZ.ko обеспечивает работу пятимоторного станка.
[KINS]
JOINTS = 5
#программная коррекция смещение Х -2.5 мм на 1000мм по У
KINEMATICS=tadam4_XXYYZ
HALCMD = setp tadam4_XXYYZ.C_xy -0.00252427184466
Вся магия в модуле ядра tadam4_XXYYZ.ko. Поскольку штука нужная, то она, магия, модуль ядра, продается задешево здесь. Платите, получаете по электронной почте индивидуально подготовленный модуль, указываете в ini файле настроек станка по примеру выше и радуетесь качеству прямых углов на уровне поверочного угольника класса 0 и хорошим допускам круглости.
При этом Вы должны понимать, что LinuxCNC 2.9.х с ядром реального времени хоть и имеет latency примерно в 3 раза лучший, чем LinuxCNC 2.8.4 (на железе автора 350 против 1500), но на больших скоростях осей, примерно от 3000 мм/мин, регулярно падает с ошибкой из-за рассинхронизации движения моторов — именно по этой причине сам автор работает под вылизанной версией LinuxCNC 2.8.4.