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

Нельзя не сказать о той статье, которая легла в основу моих рассуждений. На habr-е ещё в 2016-ом году была опубликована статья, посвящённая как раз решению обратной и прямой задач кинематики для дельта-робота. В ней, что называется, всё было расписано «для чайников» — просто и понятно. Читая её, я и пришёл к выводу, что все эти индексируемые в Scopus, Web of Science, РИНЦ журналы, увы, часто слабо помогают в освоении материала. Там люди пишут, по большей части, ради плюшек в виде прибавки к зарплате/стипендии а то и вообще, чтобы не уволили или ради того, чтобы похвалиться своим результатом, нормально не описав, как он получен. Журналы выставляют жёсткие требования на объём, содержание, оформление, что часто и приводит к тому, что полезную информацию приходится выцеживать из публикаций с огромным трудом. В общем, за основу я брал эту статью, и не в какое сравнение про доступности изложения она не идёт с теми, что я читал в рецензируемых журналах. Я во многом повторю материал из неё, даже картинки очень похожие будут (на них, кстати, убил кучу времени), но постараюсь дать больше информации, изложить её ещё более понятно и закинуть удочку в море дальнейшей работы.

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

Список обозначений

n– число подвижных звеньев;

p_1– число одноподвижных кинематических пар;

p_2– число двухподвижных кинематических пар;

p_3– число трёхподвижных кинематических пар;

p_4– число четырёхподвижных кинематических пар;

p_5– число пятиподвижных кинематических пар;

z_L– координата точки L по оси Z;

y_Q– координата точки Q по оси y;

и т. д. по той же логике здесь и далее я буду обозначать координаты точек;

F– длина стороны треугольника основания;

f– длина стороны треугольника платформы;

R_l– длина рычага;

R_r– длина штанги;

 \theta_1, \theta_2и \theta_3– углы поворота рычагов, отсчитываемые от плоскости основания.

Я уже говорил, что дельта-робот имеет три поступательные степени свободы. Подтверждает ли это теория? Ответ под спойлером. Это мы нигде применять потом не будем, поэтому, если интересно, читаем, но потребуются некоторые знания теории механизмов и машин.

Определение числа степеней свободы дельта-робота по формуле Малышева

Для определения числа степеней свободы пространственного механизма Wиспользуется формула Малышева ????:

W=6n–(5p_1+4p_2+3p_3+2p_4+p_5 ),

где n– число подвижных звеньев;

p_1– число одноподвижных кинематических пар;

p_2– число двухподвижных кинематических пар;

p_3– число трёхподвижных кинематических пар;

p_4– число четырёхподвижных кинематических пар;

p_5– число пятиподвижных кинематических пар.

Звено механизма – это деталь или несколько неподвижно соединенных деталей, двигающихся как единое целое.

Кинематическая пара – это соединение двух соприкасающихся звеньев, допускающее их относительное движение.

Сначала, применим эту формулу к оригинальной конструкции, представленной на следующем рисунке:

Оригинальная конструкция дельта-робота из патента
Оригинальная конструкция дельта-робота из патента

Примечательно, что в ней используются только одноподвижные вращательные кинематические пары. Тогда для такого дельта-робота n=16, p_1=21, p_2=0, p_3=0, p_4=0, p_5=0подвижность механизма получится W=6×16–5×21=–9.Очевидно, что это не тот результат, которого мы ожидали. Как справедливо замечено в ???? при составлении уравнения Малышева никак не учтена особенность механизма, заключающаяся в том, что две штанги одного плеча являются сторонами параллелограмма, необходимого лишь для поддержания такой же ориентации подвижной платформы, как и у основания. Механизм будет работать идентично исходному, если мы уберём одну из штанг в каждом плече, но наложим условие, согласно которому ориентация каретки всегда будет такая же, как и у основания. В таком случае исходные данные будут иметь вид n=13, p_1=15, p_2=0, p_3=0, p_4=0, p_5=0,а подвижность механизма будет равна W=6×13–5×15=3.Что и есть в действительности.

Для анализа конструкции, показанной на рисунке ниже (с трёхподвижными шаровыми шарнирами), необходимо внести изменения в исходные данные для расчёта подвижности. После описанного выше упрощения при n=13, p_1=3, p_2=0, p_3=6, p_4=0, p_5=0подвижность W=6×7–5×3–3×6=9.Тут стоит отметить появление шести местных подвижностей, а именно возможности вращения штанг вокруг своих осей, что на движение робота, в целом, никакого влияния не оказывает. Учитывая их, получим W=3,что также корректно.

Теперь перейдём к задачам кинематики. Ещё раз знакомая картинка, для понимания:

1 – основание; 2 – рычаг; 3 – штанга; 4 – платформа
1 – основание; 2 – рычаг; 3 – штанга; 4 – платформа

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

Также существует и прямая кинематическая задача, в результате решения которой по известным углам поворота рычагов (их мы легко можем определить, если на осях вращения рычагов установлены датчики угла поворота) мы можем определить позицию, в которой сейчас находится рабочий орган. Это может понадобиться для различных расчётов, в рамках проектирования и управления роботом.

Обратная задача кинематики (ОЗК)

Для решения обратной кинематической задачи первоначально определим, какие конструктивные размеры нам известны. Известными будем считать длину стороны верхнего основания F(треугольника, образуемого осями вращения рычагов), длину рычага R_l (расстояние от оси рычага до общей оси трёхподвижных шарниров), длину штанги R_r (расстояние между общими осями для трёхподвижных шарниров рычага и платформы) и длину стороны платформы f (треугольника, образованного общими осями шарниров подвижной платформы). Кроме того, известными будем считать требуемые координаты центра платформы V(x_V,\ y_V,\ z_V).Определению подлежат углы поворота рычагов  \theta_1, \theta_2и \theta_3,отсчитываемые от плоскости основания (во многих источников отсчитывают от чего-то другого). Более наглядно эти параметры представлены на рисунке ниже

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

Постой, а как ты делаешь такие картинки?

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

Сначала в любой программе для 3Д моделирования (я использую Autodesk Inventor) делается "каркас" механизма:

Тут сразу я выбираю наиболее приятный глазу ракурс и делаю скриншонт области экрана.

Далее добавляю это изображение на отдельный слой в программе векторной графики Adobe Illustrator (можно использовать любою другую) и блокирую слой, чтобы случайно не сдвинуть его мышкой.

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

Другими способами я не пользовался. Если вы знаете способ лучше – пишите в комментарии.

Начнём с рассмотрения плеча, лежащего в плоскости YOZ. Для определения требуемого угла \theta_1достаточно знать координаты точек Q и L, а вычислить угол можно по формуле:

(1)
(1)

где z_L– координата точки L по оси Z;

y_Q– координата точки Q по оси y;

и т. д. по той же логике здесь и далее я буду обозначать координаты точек.

Координату y_Qточки Q по оси Y найдём с помощью известной для равностороннего треугольника формулы поиска радиуса вписанной окружности:

(2)
(2)

где F– длина стороны треугольника основания.

Пару слов о F и f

По существу,|y_Q|– это радиус вписанной в треугольник основания окружности OQ:

Часто дельта-робот и рисуют не с треугольником в основании, а с окружностью. В подавляющей части расчётов длина стороны F нигде не используется, а используется именно OQ. А вот и пример.

Для того, чтобы найти координаты точки L проанализируем траектории движения концов рычага и штанги. Точка L, принадлежащая рычагу, описывает окружность в плоскости YOZ с центром в точке Q. Точка M является трёхподвижной парой, поэтому точка L, принадлежащая штанге описывает сферу с центром в точке M. Следовательно, для определения координаты точки L всего механизма нужно найти точку пересечения сферы и окружности. Таких точек пересечения две – L и L₁, нам же нужно выбрать точку, у которой координата по оси Y меньше. Соответственно, мы должны решить систему из двух уравнений:

(3)
(3)

где R_l– длина рычага;

R_r– длина штанги.

Координату точки M по оси Y, найдём по формуле, аналогичной формуле (2):

(4)
(4)

где f– длина стороны треугольника платформы.

Остальные координаты точки M будут равны соответствующим координатам точки V, что приведёт нас к итоговой системе:

(5)
(5)

Раскрыв скобки в первом и втором уравнениях и вычтя из первого уравнения второе, получим равенство, из которого линейным образом можно выразить z_Lпо формуле:

(6)
(6)

где \sigma=R_l^2–R_r^2+x_V^2+y_M^2–y_Q^2+z_V^2.

Тогда, подставив это в первое уравнение системы и приведя его к виду квадратного уравнения относительно y_Lможно составить систему для расчёта коэффициентов квадратного уравнения:

(7)
(7)

Далее найдём меньший корень квадратного уравнения по формуле ниже и подставим полученное решение в формулу (6), найдя тем самым неизвестную координату точки L по оси Z.

(8)
(8)

Можно, конечно, подставить все расчёты в исходную формулу (1), но получится громоздко и не наглядно. Выполняя это простую последовательность отдельных вычислений мы всё равно придём к нужному результату.

Заметим, что найти угол поворота первого плеча можно и другим способом. Мы можем перейти к плоской задаче, так как знаем, что плоскость YOZ пересекает сферическую траекторию конца штанги по окружности с центом в точке N, что показано на рисунке:

Радиус этой окружности – NL можно найти из прямоугольного треугольника LMN по теореме Пифагора. Так как сторона NM, по факту, является координатой точки V по оси X, а сторона LM штангой длины R_rто получим формулу:

(9)
(9)

Перейдём в плоскость YOZ и рассмотрим треугольник QLN. Сторону NQ мы можем найти, зная координаты точек N и Q по формуле:

(10)
(10)

Длины остальных сторон нам тоже известны, следовательно, по теореме косинусов мы можем найти угол \alpha:

(11)
(11)

Необходимый нам угол \beta найдём как арккосинус по формуле:

(12)
(12)

Тогда искомый угол найдём, как разность полного оборота и найденных углов:

(13)
(13)

Для поиска двух оставшихся углов поворота рычагов воспользуемся следующим приёмом. Введём вспомогательную систему координат, повёрнутую на 120° вокруг оси Z относительно основной X_{120}Y_{120}Z_{120} :

В новой системе координат задача для определения угла  \theta_2сводится к задаче определения угла \theta_1с той лишь разницей, что координаты точки V нужно перевести из XYZ в X_{120}Y_{120}Z_{120} по известным формулам:

(14)
(14)

где x_{V_{120}}, y_{V_{120}}– координаты точки V по осям X и Y в системе координат X_{120}Y_{120}Z_{120}.

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

В совокупности полученный результат называют также функцией положения.

Прямая задача кинематики (ПЗК)

Исходными данными для решения прямой кинематической задачи являются углы поворота рычагов. Зная эти углы, мы можем из прямоугольного треугольника Q₁W₁L₁, расположенного в плоскости YOZ (рисунок ниже) найти координаты точки L₁.

Используя найденную ранее координату точки Q, получим формулы:

(15)
(15)

Для поиска координат по оси Z оставшихся точек L₂ и L₃ применим аналогичные формулы:

(16)
(16)

С другой стороны, для поиска координат по оси Y воспользуемся уже известным приёмом – вычислим координаты по этой оси в системах координат, повёрнутых на 120° и 240° относительно основной, обозначив их {y\prime}{L_2} и {y\prime}{L_3}а потом пересчитаем их в основную систему координат по формулам ниже. В отличие от зависимостей (14), применим формулы для пересчёта в систему, повёрнутую против часовой стрелки относительно основной.

(17)
(17)

Нам известно, что точки L₁, L₂ и L₃ представляют собой трёхподвижные шарниры, и, если принять эти точки за центры вращения, то их концы – точки M₁, M₂ и M₃ описывают 3 сферы. Далее сдвинем каждую штангу параллельно плоскости XOY так, чтобы точки M₁, M₂ и M₃ оказались в точке V, что наглядно показано на рисунке:

Теперь рассматриваемые сферы (уже с центрами в точках P₁, P₂ и P₃) пересекаются как раз в точке V. Для поиска координат новых центров сфер перейдём в плоскость XOY (рисунок ниже). Для поиска координаты точки P₁ достаточно сдвинуть координату по оси Y точки L₁ на f\sqrt3/6в большую сторону.

Координаты остальных точек легко найти, рассматривая прямоугольный треугольник VM₃T, гипотенуза которого равна так же f\sqrt3/6. Из него координаты точек P₂ и P₃ определим по формулам:

(18)
(18)

После вышеизложенных расчётов мы можем найти необходимые координаты точки V, как меньшее по оси Z решение системы уравнений (19), представляющее собой нижнюю точку пересечения трёх сфер.

(19)
(19)

Чтобы получить решение, первым шагом, раскроем скобки и перенесём все известные слагаемые вправо:

(20)
(20)

Правые части уравнений в системе сразу обозначим за константы w_1, w_2, w_3а затем вычтем из первого уравнение второе, а потом из первого третье, тем самым получив систему:

(21)
(21)

В этой системе вынесем за скобки x_V, y_V, z_Vи поделим левую и правые части на 2. Получим систему:

(22)
(22)

Обозначим x_{P_2}–x_{P_1}, y_{P_2}–y_{P_1}, z_{P_2}–z_{P_1}, (w_1–w_2)/2 за a_1, b_1, c_1, d_1соответственно. Во втором уравнении введём аналогичные обозначения, но с индексами равными 2. Выразим из получившейся системы x_V, y_Vчерез z_V,получив уравнения:

(23)
(23)

Тогда, подставив это в первое уравнение системы (19), получим квадратное уравнение (24) относительно переменной z_V, вычислив меньший корень которого, найдём интересующую нас координату точки V по оси Z.

(24)
(24)

где

Зная координатуz_V, найдём оставшиеся координаты точки V по уже найденным формулам (23).

Алгоритмы расчёта и их проверка

Мы нашли решения ОЗК и ПЗК. Хорошо. Теперь, чтобы без опаски использовать полученные формулы в алгоритмах расчёта, наши решения нужно проверить.

Способов проверки можно выделить несколько:

  • можно решить ОЗК двумя приведёнными способами для одних и тех же конфигурации механизма и заданного положения, и посмотреть, совпадают ли результаты;

  • можно решить ОЗК, а потом, используя найденные углы, решить ПЗК (должно получиться исходное положение);

  • можно построить дельта-робота с указанными размерами в какой-нибудь программе для трёхмерного моделирования и сравнить, какие углы соответствуют определённому положению в полученной 3Д модели, а какие получаются при расчётах по формулам.

Начнём с алгоритма для решения ОЗК. Я работаю пакете MATLAB, поэтому привожу код для этой среды расчётов и программирования. "Решатель" ОЗК состоит из трёх файлов. В первом (основном) задаются размеры робота и желаемые координаты точки центра платформы V:

%Объявляем глобальные переменные характерных размеров робота и констант
global R_l R_r  VM OQ cos120 sin120 cos240 sin240
%Вычисляем константы
cos120 = cosd(120);
sin120 = sind(120);
cos240 = cosd(240);
sin240 = sind(240);
%Задаём размеры робота [мм]
F = 270; %Длина стороны треугольника основания
f = 80; %Длина стороны треугольника платформы
R_l = 170;  %Длина рычагов (по осям)
R_r = 320;  %Длина штанг (по осям)
%Вычисляем радиусы вписанных окружностей
OQ = F*sqrt(3)/6; %Радиус окружности осей шарниров
VM = f*sqrt(3)/6; %Радиус окружности осей рычагов
%Задаём желаемые координаты центра подвижной платформы [мм]
X_V = 10; %Координата по оси X
Y_V = 30; %Координата по оси Y
Z_V = -310; %Координата по оси Z
%Вычисляем углы, на которые нужно повернуть рычаги
[Theta1, Theta2, Theta3] = OZK(X_V, Y_V, Z_V)

В конце приведённого кода вызывается функция, которая и решает ОЗК:

%Находит решение обратной задачи кинематически для дельта-робота
function [Theta1, Theta2, Theta3] = OZK(X_V, Y_V, Z_V)
%Расчёт координат точки V в системах координат, повёрнутых на 120° и 240°
%по часовой стрелке относительно основной
global cos120 sin120 cos240 sin240
X_V_120 = X_V*cos120 - Y_V*sin120;
Y_V_120 = X_V*sin120 + Y_V*cos120;
    X_V_240 = X_V*cos240 - Y_V*sin240;
    Y_V_240 = X_V*sin240 + Y_V*cos240;
%Расчёт углов поворота рычагов в соответствующих системах координат
Theta1 = Theta(X_V, Y_V, Z_V);
Theta2 = Theta(X_V_120, Y_V_120, Z_V);
Theta3 = Theta(X_V_240, Y_V_240, Z_V);
end

А в ней вызываются функции, которые считают углы для каждого рычага в отдельности:

%Находит углы поворота рычагов в соответствующих системах координат
function [Theta] = Theta(X_V, Y_V, Z_V)
global R_l R_r  VM OQ
y_M = -VM + Y_V;
y_Q = -OQ;
%Первый метод вычисления
sigma = R_l^2 - R_r^2 + X_V^2 + y_M^2 - y_Q^2 + Z_V^2;
a = (2*y_M - 2*y_Q)^2/(4*Z_V^2) + 1;
b = - 2*y_Q - ((2*y_M - 2*y_Q)*sigma)/(2*Z_V^2);
c = sigma^2/(4*Z_V^2) - R_l^2 + y_Q^2;
y_L = (-b-sqrt(b^2-4*a*c))/(2*a);
z_L = ( - 2*y_L*y_M  + 2*y_L*y_Q + sigma)/(2*Z_V);
Theta = 180 + atand((-z_L)./(y_Q-y_L));
%Второй метод вычисления
% NL = sqrt(R_r^2-X_V^2);
% const_1 = y_M - y_Q;
% NQ = sqrt(const_1^2 + Z_V^2);
% Theta = 360 - acosd((R_l^2 + NQ^2 - NL^2)/(2*R_l*NQ)) - acosd(const_1/NQ);
end

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

А что не совпадает? Скорость вычисления не совпадает!

Нас интересует ресурсоёмкость алгоритмов. Так как "крутиться" они будут в микроконтроллере (при работе системы управления на реальном роботе), то почему бы не использовать более быстрый?

Используя встроенную в MATLAB утилиту , можно замерить время вычисления любой функции, но нам это не сильно поможет, так как операционная система всё время даёт вычислительному процессу разное количество ресурсов, и результат от запуска к запуску "плавает". Помимо этого, ПК и микроконтроллер (МК) "по-разному" считают. В общем, нормальной оценки времязатрат я не получил. Как напишу алгоритм на МК, заполню этот пробел.

Кстати, если задать в алгоритм такую точку, в которую конкретный дельта-робот не сможет поместить свой рабочий орган, то программа всё равно найдёт решение ОЗК, но последнее будет мнимым. Например, Theta1 = 99.4457 - 25.7939i, Theta2 = 95.4333 - 24.1706i, Theta3 = 93.4994 - 23.0821i.

Далее сделаем проверку, которая даст нам ещё +100% к гарантии того, что формулы правильные. В Autodesk Inventor (или любой другой среде, где можно создавать 3Д модели) можно создать модель дельта-робота, состоящую лишь из линий эскизов. С умом используя возможность параметризации, я получил такую модель:

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

Не буду вдаваться в подробности, как строить такие модели, если очень интересно, пишите в комментариях. Вот ссылка на мою модель в формате .ipt для Inventor-а 2022 и выше.

Кому-то данный способ проверки может показаться слишком топорным и глупым. Но именно его я использовал для исправления ошибок в формулах и в записи их в MATLAB.

ПЗК проверим по второму способу – найдём решение ОЗК для конкретных координат точки V по алгоритму выше (а он правильный).

А далее введём полученные данные в качестве входных значения алгоритма ПЗК. Последний состоит из двух файлов. Первый, как и для ОЗК, основной:

%Объявляем глобальные переменные характерных размеров робота и констант
global R_l R_r  VM OQ cos120 sin120 cos240 sin240
%Вычисляем константы
cos120 = cosd(120);
sin120 = sind(120);
cos240 = cosd(240);
sin240 = sind(240);
%Задаём размеры робота [мм]
F = 270; %Длина стороны треугольника основания
f = 80; %Длина стороны треугольника платформы
R_l = 170;  %Длина рычагов (по осям)
R_r = 320;  %Длина штанг (по осям)
%Вычисляем радиусы вписанных окружностей
OQ = F*sqrt(3)/6; %Радиус окружности осей шарниров
VM = f*sqrt(3)/6; %Радиус окружности осей рычагов
%Задаём желаемые координаты центра подвижной платформы [мм]
Theta1 = 211.1864; %Координата по оси X
Theta2 = 202.9511; %Координата по оси Y
Theta3 = 198.8468; %Координата по оси Z
%Вычисляем углы, на которые нужно повернуть рычаги
[L1, L2, L3, V] = PZK(Theta1, Theta2, Theta3)

А второй – это функция непосредственно для решения прямой задачи:

%Находит решение прямой задачи кинематически для дельта-робота
%Возвращает координаты точек L1, L2, L3, необходимые для построения робота и
%координаты точки V
function [L1, L2, L3, V] = PZK(Tetta1, Tetta2, Tetta3)
global R_l R_r VM OQ
%Расчёт координат концов рычагов
x_L1 = 0;
y_L1 = -OQ-R_l*cosd(Tetta1-180);
z_L1 = -R_l*sind(Tetta1-180);
z_L2 = -R_l*sind(Tetta2-180);
z_L3 = -R_l*sind(Tetta3-180);
y_L2S = -OQ-R_l*cosd(Tetta2-180);
y_L3S = -OQ-R_l*cosd(Tetta3-180);
x_L2 = y_L2S*sind(120);
y_L2 = y_L2S*cosd(120);
x_L3 = y_L3S*sind(240);
y_L3 = y_L3S*cosd(240);
%Расчёт координат центров сфер (сдвинутых концов рычагов)
x_P1 = x_L1;
y_P1 = y_L1+VM;
z_P1 = z_L1;
x_P2 = x_L2+VM*cosd(30);
y_P2 = y_L2-VM*sind(30);
z_P2 = z_L2;
x_P3 = x_L3-VM*cosd(30);
y_P3 = y_L3-VM*sind(30);
z_P3 = z_L3;
%Расчёт точки пересечения сфер
w1 = R_r^2-x_P1^2-y_P1^2-z_P1^2;
w2 = R_r^2-x_P2^2-y_P2^2-z_P2^2;
w3 = R_r^2-x_P3^2-y_P3^2-z_P3^2;
a1 = x_P2-x_P1;
a2 = x_P3-x_P1;
b1 = y_P2-y_P1;
b2 = y_P3-y_P1;
c1 = z_P2-z_P1;
c2 = z_P3-z_P1;
d1 = (w1-w2)/2;
d2 = (w1-w3)/2;
e1 = ((b1*c2 - b2*c1)/(a1*b2 - a2*b1));
f1 = -(b1*d2 - b2*d1)/(a1*b2 - a2*b1);
e2 = -(a1*c2 - a2*c1)/(a1*b2 - a2*b1);
f2 = (a1*d2 - a2*d1)/(a1*b2 - a2*b1);
a_KU = (e1^2 + e2^2 + 1);
b_KU = (2*e1*(f1 - x_P1) - 2*z_P1 + 2*e2*(f2 - y_P1));
c_KU = z_P1^2 + (f1 - x_P1)^2 + (f2 - y_P1)^2 - R_r^2;
z_V = ((-b_KU-sqrt(b_KU^2-4*a_KU*c_KU)))/(2*a_KU);
x_V = e1*z_V+f1;
y_V = e2*z_V+f2;
L1 = [x_L1, y_L1, z_L1];
L2 = [x_L2, y_L2, z_L2];
L3 = [x_L3, y_L3, z_L3];
V = [x_V, y_V, z_V];
end

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

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

Алгоритм ещё и находит координаты точек концов рычагов L₁, L₂ и L₃. В дальнейшем это используется для построения робота в осях трёхмерного графика, но об этом в следующей статье.

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

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

Комментарии (4)


  1. SnakeSolid
    30.09.2021 22:19
    +1

    Каким образом в таких роботах реализуется линейное перемещение платформы в пространстве? Судя по кинематике, для линейного перемещения платформы необходимо нелинейно изменять положение приводов. Существует ли решение вида [θ1, θ2, θ3] = f(t) для линейного перемещения платформы между двумя точками?


    1. multiengineer Автор
      01.10.2021 07:42
      +2

      Хороший вопрос. Да, чтобы выходное звено двигалось по линейной траектории, нужно изменять значения приводных углов по какой-то хитрой зависимости. Задачу движения робота по заданной траектории разберём в одной из следующих статей (но минимум через две). Более того, разберём, какие зависимости углов рычагов от времени должны быть, чтобы выходное звено плавно увеличивало скорость, достигало её максимума и, к концу траектории, плавно останавливалось (s-кривую изменения скорости получим). Но считать будем численно, не выводя итоговую функцию хотя, кто знает, может и так попробуем.


  1. TakashiNord
    01.10.2021 20:25
    +2

    скажите , а как вы обратную задачу - превратили в одно решение? Строго говоря, обратное преобразование не всегда однозначно.

    Куда делся + в квадратном уравнении +-b.


    1. multiengineer Автор
      01.10.2021 22:03
      +1

      Мы выбираем нужное нам решение, с физической точки зрения правильное. Мы ведь, решая квадратное уравнение, знаем, что его решения - это точки пересечения двух окружностей. Нас интересует одна из них (и известно, какая), вот мы и находим лишь одно решение (меньшее). Для второй точки механизм уже будет иметь нестандартную конфигурацию (на последнем рисунке как раз это показано). Но физически и мы его туда загонять не будем, и ряд ограничений конструкции этого сделать не даст, например, максимальный угол поворота шарниров. Так что рассматриваем лишь нужное решение.