Программа решения прямой задачи кинематики KUKA youBot

На этой странице представлена программа Mathematica, реализующая вычисления по формулам страницы "Решение прямой задачи кинематики KUKA youBot" . Программу можно просто скопировать с экрана компьютера и вставить в файл Mathematica с расширением "nb" . Аргументы функции FK, отвечающие декартовым координатам и углам, должны быть заданы в мм и в радианах соответственно. Результатом обращения к функции FK является таблица, содержащая параметры локации рабочего органа.

С помощью стандартной функции Manipulate системы Mathematica, можно, как показано ниже, построить обращение к FK при переменных обобщённых координатах робота, изменяемых указателем мыши с помощью слайдеров.

Текст программы

FK[XC_, YC_, θ_ , θ1_ , θ2_ , θ3_ , θ4_ , θ5_ ] :=

Module[

(*Задание параметров*)

{h = 151, a1 = 33, d1 = 147, s = "nonsing.", a2 = 155, a3 = 135, a4 = 81, a5 = 90, a6 = 47},

(*Определение абсолютных координат точки E*)

XE = XC +h Cos[θ] + ((a1 + a2) Sin[θ2] + a3 Sin[θ2 + θ3] + (a4 + a5 + a6) Sin[θ2 + θ3 + θ4]) Cos[θ+θ1];

YE = YC + h Sin[θ] +((a1 + a2) Sin[θ2] + a3 Sin[θ2 + θ3] + (a4 + a5 + a6) Sin[θ2 + θ3 + θ4]) Sin[θ+θ1];

ZE = d1 + a2 Cos[θ2] + a3 Cos[θ2 + θ3] + (a4 + a5 + a6) Cos[θ2 + θ3 + θ4];

(*Определение угла нутации θE∈ [0,π] базиса Exyz относит. базиса OXYZ*)

θE=ArcTan[Cos[θ2 + θ3 + θ4],Abs[Sin[θ2 + θ3 + θ4]]];

(*Определение суммы ϕ+ψ∈[-π,π] в сингулярных случаях θ2 + θ3 + θ4=0и θ2 + θ3 + θ4=±π*)

If[Abs[θ2 + θ3 + θ4]<=$MinMachineNumber,{s="sing.", ϕPlusψ=ArcTan[Cos[θ+θ1+θ5],Sin[θ+θ1+θ5]]}];

If[Abs[Abs[θ2 + θ3 + θ4] - Pi]<=$MinMachineNumber,{s="sing.", ϕPlusψ=ArcTan[Cos[θ+θ1-θ5+Pi],Sin[θ+θ1-θ5+Pi]]}];

(*Определение углов ψ∈[-π,π],ϕ∈[-π,π] базиса Exyz относит. базиса OXY в несингулярных

случаях θE∈ (0,π) *)

If [ s =="nonsing." , If [ θ2 + θ3 + θ4 > Pi || - Pi < θ2 + θ3 + θ4 < 0 , { ψ = ArcTan [ Sin [ θ + θ1 ] , - Cos [ θ + θ1 ] ] , ϕ= ArcTan [ - Sin [ θ5 ] , Cos [ θ5 ] ] } , { ψ = ArcTan [ - Sin [ θ + θ1 ] , Cos [ θ + θ1 ] ] , ϕ = ArcTan [ Sin [ θ5 ] , - Cos [ θ5 ] ] } ] ] ;

(* Преобразование ⁢ отрицат . значений ⁢ углов ⁢ ψ , ϕ , ϕ + ψ ⁢ к положит. на ⁢ интервале [ 0 , 2 ⁢ π ) *)

⁢If [ ϕ < 0 , ϕ = 2 ⁢ Pi + ϕ ] ; ⁢

If [ ψ < 0 , ψ = 2 ⁢ Pi + ψ ] ;

⁢If [ ϕPlusψ < 0 , ϕPlusψ = 2 ⁢ Pi + ϕPlusψ ] ;

⁢(* Формирование ⁢ строк ⁢ таблицы ⁢ результатов в ⁢ сингулярных ⁢ и ⁢ несингулярных ⁢ случаях *)

If [ s == "sing.",

{ string1 = { "sing. or nonsing.", "XE ","YE"," ZE","ψ + ϕ" , " θE", SpanFromLeft } ;

string2 = { "", "(mm) ","(mm)","(mm)","[0,360), гр." , " [0,180], гр.", SpanFromLeft } ;

string3 = { s , XE , YE , ZE, ϕPlusψ 180 / Pi , θE 180 / Pi , SpanFromLeft } } ,

{ string1 = { "sing. or nonsing.", "XE","YE","ZE",

"ψ" , " θE", " ϕ" , SpanFromLeft } ;

string2 = { "", "(mm)","(mm)","(mm)","[0,360 ),гр." , "[0,180],гр.",

"[0,360),гр." , SpanFromLeft } ;

string3 = { s , XE , YE , ZE , ψ 180 / Pi , θE 180 / Pi , ϕ 180 / Pi ,

SpanFromLeft } } ] ;

(*Формирование таблицы результатов*)

Return[

Grid[{{"ОБОБЩЁННЫЕ КООРДИНАТЫ ПЛАТФОРМЫ И РУКИ",

SpanFromLeft},

{"XC", "YC",

" θ", " θ1", "θ2", "θ3",

"θ4", "θ5"},

{"(mm)", "(mm)",

"[0,360),гр.", "[-169 ,169],гр.", "[-65,90],гр.", "[-151,146 ],гр.",

" [-102.5,102.5],гр.","[-167.5,167.5],гр."},{XC, YC, θ 180/ Pi, θ1 180/ Pi,

θ2 180/Pi, θ3 180/Pi, θ4 180/ Pi, θ5 180/ Pi},

{"ПАРАМЕТРЫ ЛОКАЦИИ РАБОЧЕГО ОРГАНА ", SpanFromLeft}, {" РЕШЕНИЕ ПРЯМОЙ

ЗАДАЧИ КИНЕМАТИКИ ", SpanFromLeft}, string1, string2, string3},

ItemSize -> {5, 4} , Frame -> All]]]

Текст программы

Manipulate[

FK[XC, YC, θ , θ1 , θ2 , θ3 , θ4 , θ5],

{{XC,10., "XC,( mm )"}, -300, 300},

{{YC, -200.,"YC, ( mm )"}, -300, 300},

{{θ, Pi/9.," θ, ( rad )"}, 0, 2 Pi},

{ { θ1 , Pi / 7. , " θ1 ( rad ) " } , - 169 ⁢ Pi / 180 , 169 ⁢ Pi / 180 },

{ { θ2 ,- Pi / 15. , " θ2 ( rad ) " } , - 65 ⁢ Pi / 180 , 90 ⁢ Pi / 180 },

{ { θ3 , Pi / 12. , " θ3 ( rad ) " } , - 151 ⁢ Pi / 180 , 146 ⁢ Pi / 180 },

{ { θ4 ,- Pi / 2. , " θ4 ( rad ) " } , - 102.5 ⁢ Pi / 180 , 102.5 ⁢ Pi / 180 },

{ { θ5 , Pi / 3. , " θ4 ( rad ) " } , - 167.5 ⁢ Pi / 180 , 167.5 ⁢ Pi / 180 }]