1. Введение

A number of kinematics modules support the switching of kinematics calculations. These modules support a default kinematics method (type0), a second built-in method (type1), and (optionally) a user-provided kinematics method (type2). Identity kinematics are typically used for the type1 method.

The switchkins functionality can be used for machines where post-homing joint control is needed during setup or to avoid movement near singularities from G-code. Such machines use specific kinematics calculations for most operations but can be switched to identity kinematics for control of individual joints after homing.

The kinematics type is selected by a motion module HAL pin that can be updated from a G-code program or by interactive MDI commands. The halui provisions for activating MDI commands can be used to allow buttons to select the kinematics type using hardware controls or a virtual panel (PyVCP, GladeVCP, etc.).

When a kinematics type is changed, the G-code must also issue commands to force synchronization of the interpreter and motion parts of LinuxCNC. Typically, a HAL pin read command (M66 E0 L0) is used immediately after altering the controlling HAL pin to force synchronization.

2. Switchable Kinematic Modules

The following kinematics modules support switchable kinematics:

  1. xyzac-trt-kins (type0:xyzac-trt-kins type1:identity)

  2. xyzbc-trt-kins (type0:xyzbc-trt-kins type1:identity)

  3. genhexkins (type0:genhexkins type1:identity)

  4. genserkins (type0:genserkins type1:identity) (puma560 example)

  5. pumakins (type0:pumakins type1:identity)

  6. scarakins (type0:scarakins type1:identity)

  7. 5axiskins (type0:5axiskins type1:identity) (bridgemill)

The xyz[ab]c-trt-kins modules by default use type0==xyz[ab]c-trt-kins for backwards compatibility. The provided sim configs alter the type0/type1 convention by forcing type0==identity kinematics using the module string parameter sparm with an INI file setting like:

[KINS]
KINEMATICS = xyzac-trt-kins sparm=identityfirst
...

2.1. назначения идентифицирующей буквы

При использовании типа кинематики identity параметр модуля координаты можно использовать для назначения букв сочленениям в произвольном порядке из набора разрешенных букв координат. Примеры:

[KINS]
JOINTS = 6

# conventional identity ordering: joint0==x, joint1==y, ...
KINEMATICS = genhexkins coordinates=xyzabc

# custom identity ordering: joint0==c, joint1==b, ...
# KINEMATICS = genhexkins coordinates=cbazyx
Note
Если параметр coordinates= опущен, по умолчанию буква-сочленение присваиваемых идентификаторов будут joint0==x,joint1=y,…

Назначения сочленений, предусмотренные для кинематики identity при использовании параметра координат, идентичны тем, которые предусмотрены для модуля trivkins. Однако дублирование букв осей для назначения нескольких сочленений букве координат обычно не применимо для последовательной или параллельной кинематики (например, genserkins, pumakins, genhexkins и т. д.), где нет простой взаимосвязи между сочленениями и координатами.

Дублирование букв координат осей поддерживается в модулях кинематики xyzac-trt-kins, xyzbc-trt-kins и 5axiskins (bridgemill). Типичным применением дублирующихся координат являются портальные станки, в которых для поперечной оси используются два двигателя (сочленения).

2.2. Обратная совместимость

Переключаемая кинематика инициализируется с помощью motion.switchkins-type==0, реализующего одноименный метод кинематики. Если контакт типа motion.switchkins не подключен (как в устаревших конфигурациях), доступен только тип кинематики по умолчанию.

3. HAL Контакты

Переключение кинематики контролируется входным контактом HAL модуля движения motion.switchkins-type. Значение вывода с плавающей запятой усекается до целого числа и используется для выбора одного из предоставленных типов кинематики. Нулевое значение запуска выбирает тип кинематики по умолчанию type0.

Note
Входной контакт типа motion.switchkins имеет тип числа с плавающей запятой, чтобы облегчить подключение к выходным контактам модуля движения, таким как motion.analog-out-0n, которые управляются стандартными M-кодами (обычно M68EnL0).

Выходные контакты HAL предназначены для информирования ГИП о текущем типе кинематики. Эти контакты также можно подключить к цифровым входам, которые считываются программами G-кода для включения или отключения поведения программы в соответствии с активным типом кинематики.

3.1. Сводная информация о контактах HAL

  1. motion.switchkins-type Input (float)

  2. kinstype.is-0 Output (bit)

  3. kinstype.is-1 Output (bit)

  4. kinstype.is-2 Output (bit)

4. Использование

4.1. HAL Connections

Функциональность switchkins разрешается контактом motion.switchkins-type. Обычно этот контакт подключается к аналоговому выходному контакту, например motion.analog-out-03, поэтому его можно установить с помощью команд M68. Пример:

net :kinstype-select <= motion.analog-out-03
net :kinstype-select => motion.switchkins-type

4.2. Команды G-/M-кода

Выбор типа кинематики осуществляется с помощью подобных последовательностей G-кода:

...
M68 E3 Q1 ;update analog-out-03 to select kinstype 1
M66 E0 L0 ;sync interp-motion
...
...       ;user G-code
...
M68 E3 Q0 ;update analog-out-03 to select kinstype 0
M66 E0 L0 ;sync interp-motion
...
Note
Команда M66 wait-on-input обновляет переменную #5399. Если текущее значение этой переменной необходимо для последующих целей, его следует скопировать в дополнительную переменную перед вызовом M66.

Эти последовательности команд G-кода обычно реализуются в подпрограммах G-кода как переназначенные M-коды или с помощью обычных сценариев M-кода.

Предлагаемые коды (используемые в конфигурациях sim):

Обычные пользовательские M-коды:

  1. M128 Выбор kinstype 0 (кинематика по умолчанию при запуске)

  2. M129 Выбирает kinstype 1 (обычно идентичная кинематика)

  3. M130 Выбирает kinstype 2 (кинематика, предоставляемая пользователем)

Переназначенные М-коды:

  1. M428 Выбор kinstype 0 (кинематика по умолчанию при запуске)

  2. M429 Выберите kinstype 1 (обычно идентичная кинематика)

  3. M430 Выбор kinstype 2 (кинематика, предоставляемая пользователем)

Note
Обычные пользовательские М-коды (в диапазоне от M100 до M199) находятся в модальной группе 10. Переназначенные M-коды (в диапазоне от M200 до M999) могут указывать модальную группу. Дополнительную информацию см. в документации по переназначению.

4.3. Настройки ограничений INI-файла

При планировании траектории LinuxCNC используются ограничения на положение (мин, максимум), скорость и ускорение для каждой применимой буквы координат, указанной в INI-файле конфигурации. Пример буквы L (в наборе XYZABCUVW):

[AXIS_L]
MIN_LIMIT =
MAX_LIMIT =
MAX_VELOCITY =
MIN_ACCELERATION =

Указанные ограничения файла INI применяются к типу кинематики по умолчанию типа 0, который активируется при запуске. Эти ограничения могут не применяться при переключении на альтернативную кинематику. Однако, поскольку при переключении кинематики требуется синхронизация движения интерпретатора, контакты INI-HAL можно использовать для установки пределов для ожидающего типа кинематики.

Note
Контакты INI-HAL обычно не распознаются во время работы программы G-кода, если не выдана команда синхронизации (queue-buster). Дополнительную информацию см. на странице руководства milltask ($ man milltask)

Соответствующие контакты INI-HAL для номера сочленения (N):

ini.N.min_limit
ini.N.max_limit
ini.N.max_acceleration
ini.N.max_velocity

Соответствующие контакты INI-HAL для координаты оси (L):

ini.L.min_limit
ini.L.max_limit
ini.L.max_velocity
ini.L.max_acceleration
Note
В общем, не существует фиксированных сопоставлений между номерами сочленений и буквами координат осей. Для некоторых модулей кинематики могут существовать специальные сопоставления, особенно для тех, которые реализуют идентичную кинематику (trivkins). Дополнительную информацию смотрите на странице руководства kins ($ man kins)

Предоставленный пользователем M-код может изменить любые или все пределы координат оси перед изменением контакта типа motion.switchkins и синхронизацией интерпретатора и движущихся частей LinuxCNC. Например, скрипт bash, вызывающий halcmd, может быть hardcoded для установки любого количества контактов HAL:

#!/bin/bash
halcmd -f <<EOF
setp ini.x.min_limit -100
setp ini.x.max_limit  100
# ... repeat for other limit parameters
EOF

Подобные скрипты могут быть вызваны как пользовательский M-код и использованы перед M-кодом переключения kins, который обновляет контакт HAL типа motion.switchkins и вызывает принудительную синхронизацию interp-motion. Обычно для каждого kinstype (0,1,2) используются отдельные скрипты.

Когда identity kinematics предоставляется в качестве средства управления отдельными сочленениями, может быть удобно устанавливать или восстанавливать пределы, указанные в системном INI-файле. Например, робот стартует со сложной (non-identity) кинематикой (type0) после возврата в исходное положение. Система настроена так, что ее можно переключить на identity kinematics (type1) для манипулирования отдельными сочленениями с помощью обычных букв из набора XYZABCUVW. Настройки INI-файла ([AXIS_L]) не применимы при работе с identity (type1) kinematics. Для решения этого варианта использования пользовательские скрипты M-кода могут быть разработаны следующим образом:

M129 (Switch to identity type1)

  1. прочитать и разобрать INI-файл

  2. HAL: setp ограничительные контакты INI-HAL для каждой буквы оси ([AXIS_L]) в соответствии с настройкой ([JOINT_N]) identity-referenced номера сочленения INI файла

  3. HAL: setp motion.switchkins-type 1

  4. MDI: выполните синхронизирующий G-код (M66E0L0)

M128 (restore robot default kinematics type 0)

  1. прочитать и разобрать INI-файл

  2. HAL: setp ограничительные контакты INI-HAL для каждой буквы оси ([AXIS_L]) в соответствии с соответствующей настройкой INI-файла ([AXIS_L])

  3. HAL: setp motion.switchkins-type 0

  4. MDI: выполните синхронизирующий G-код (M66E0L0)

Note
Конфигурации моделирования vismach для робота Puma демонстрируют сценарии M-кода (M128, M129, M130) для этого примера использования.

4.4. Рекомендации по смещению

Как и настройки предельных значений INI-файла, смещения системы координат (G92, G10L2, G10L20, G43 и т. д.) обычно применимы только для type 0 типа kinematics при запуске по умолчанию. При переключении типов кинематики может быть важно либо сбросить все смещения перед переключением, либо обновить смещения в соответствии с требованиями конкретной системы.

5. Конфигурации моделирования

Конфигурации моделирования (не требующие аппаратного обеспечения) снабжены иллюстративными дисплеями vismach в подкаталогах configs/sim/axis/vismach/ .

  1. 5axis/table-rotary-tilting/xyzac-trt.ini (xyzac-trt-kins)

  2. 5axis/table-rotary-tilting/xyzbc-trt.ini (xyzac-trt-kins)

  3. 5axis/bridgemill/5axis.ini (5axiskins)

  4. scara/scara.ini (scarakins)

  5. puma/puma560.ini (genserkins)

  6. puma/puma.ini (pumakins)

  7. hexapod-sim/hexapod.ini (genhexkins)

6. Условия пользовательской кинематики

Пользовательскую кинематику можно закодировать и протестировать в сборках Run-In-Place (RIP). В раздаче имеется файл шаблона src/emc/kinematics/userkfuncs.c. Этот файл можно скопировать/переименовать в пользовательский каталог и отредактировать для предоставления пользовательской кинематики с kinstype==2.

Пользовательский файл кинематики можно скомпилировать из исходных расположений вне дерева для реализаций rt-preempt или путем замены файла шаблона в дереве (src/emc/kinematics/userkfuncs.c) для систем rtai.

Preempt-rt make пример:

$ userkfuncs=/home/myname/kins/mykins.c make && sudo make setuid

7. Предупреждения

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

  1. Подключение соответствующих контактов HAL kinstype.is.N к контактам цифрового входа (например, motion.digital-in-0m).

  2. Чтение контакта цифрового входа (M66 E0 Pm) в начале программы G-кода

  3. Прерывание (M2) программы G-кода с сообщением (DEBUG, problem_message), если kinstype не подходит.

При интерактивном использовании возможностей медленной подачи или команд MDI оператору требуется соблюдать осторожность. В ГИП должны быть индикаторы для отображения текущего типа кинематики.

Note
Переключаемая кинематика может привести к существенным эксплуатационным изменениям, требующим тщательного проектирования, тестирования и подготовки к развертыванию. Управление смещениями координат, компенсацией инструмента и ограничениями файлов INI может потребовать сложных и нестандартных рабочих протоколов.

8. Code Notes

Кинематические модули, обеспечивающие функциональность switchkins, связаны с объектом switchkins.o (switchkins.c), который предоставляет main программу модуля (rtapi_app_main()) и связанные с ней функции. Эта main программа считывает (необязательные) параметры командной строки модуля (coordinates, sparm) и передает их в функцию switchkinsSetup(), предоставляемую модулем.

Функция switchkinsSetup() идентифицирует kinstype специфичные процедуры настройки и функции для прямого и обратного расчета для каждого kinstype (0,1,2) и устанавливает ряд настроек конфигурации.

После вызова switchkinsSetup() rtapi_app_main() проверяет предоставленные параметры, создает компонент HAL, а затем вызывает процедуру установки, определенную для каждого типа kinstype (0,1,2).

Каждая kinstype (0,1,2) процедура настройки может (опционально) создавать контакты HAL и устанавливать для них значения по умолчанию. Когда все процедуры установки завершаются, rtapi_app_main() устанавливает hal_ready(), чтобы компонент завершил создание модуля.