План
- Основные понятия кинематики
- Прямая задача кинематики
- Обратная задача кинематки
Теоретическая часть
1. Основные понятия кинематики
Теоретическая механика – наука об общих законах механических взаимодействий между материальными телами, а также об общих законах движения тел по отношению друг к другу.
Кинематика — это раздел теоретической механики, в котором изучается движение механических систем с геометрической точки зрения, без учета причин (сил), вызывающих это движение и изменение движения.
Кинематическая пара — соединение двух соприкасающихся звеньев, допускающее их относительное движение.
Кинематическая цепь – это система звеньев, которые связаны между собой кинематическими парами.
Кинематическая схема — это графическая схема отображения рабочих узлов и блоков механизма конструкции.
2. Прямая задача кинематики
Прямая задача кинематики заключается в нахождении координат конца кинематической цепи, при заданных длинах звеньев и углах между ними.
Рассмотрим пример прямой задачи для простейшей кинематической цепи с двумя наклонными звеньями, которая движется в одной плоскости.
Рисунок 1 — Прямая задача кинематики
Дано:
L1, L1, Q1, Q2.
Найти:
Х,У — ?
Решение:
Для решения этой задачи обозначим вторую систему координат, которая начинается в точке крепления второго звена. Ось у1 в ней является продолжением первого звена, а ось х1 перпендикулярна ему.
Сначала необходимо найти смещение начала координат второй системы относительно первой(координаты точки К в первой системе координат).
Хк = L1*cos(Q1)
Yк = L1*sin(Q1)
Далее аналогичным образом можно найти координаты точки Т во второй системе координат.
Xт = L2*cos(Q2)
Yт = L2*sin(Q2)
По рисунку видно, что в общей координатной системе, звено L2 повёрнуто относительно звена L1 на угол Q1-Q2:
Х’т = L2*cos(Q1-Q2)
У’е= L2*sin(Q1-Q2)
Теперь можно найти координаты точки Т в общей системе координат:
Х = Xк + Хт’ = L1*cos(Q1) + L2*cos(Q1-Q2)
У = Yк + Ут’= L1*sin(Q1)+ L2*sin(Q1-Q2)
3. Обратная задача кинематики
Обратная задача кинематики состоит в нахождении углов между звеньями, при известных координатах конца кинематической цепи и длинах звеньев. Таким образом, с ее помощью можно найти углы, на которые нужно повернуть звенья для того, чтобы рабочий орган манипулятора, либо крайняя точка последнего звена любого другого устройства оказалась в заданной точке.
Рисунок 2 — Обратная задача кинематики
Дано:
L1, L1, Q1, Q2.
Найти:
Х,У — ?
Выполним дополнительные построения. Соеденим начало координат с точкой Т прямой D. Длину прямой D можно найти по теореме Пифагора:
D^2= x^2+ y^2
Угол Q2 можно представить как сумму углов q1, q2.
Q1=q1 + q2
Найдем эти углы. Угол q1 вычисляется по теореме Пифагора.
q1 = arcsin(y/D)
Угол q2 находим используя теорему синусов.
q2=arccos((L1^2+D^2-L2^2)/2L1L2)
отсюда:
Q1 = arcsin(y/D)+arccos((L1^2+D^2-L2^2)/2L1L2)
Т.к Q2=180-q3, находим угол q3, применяя теорему косинусов.
q3=arccos((L1^2+L2^2-D^2)/2L1L2)
Q2=180-arccos((L1^2+L2^2-D^2)/2L1L2)
Для удобства в программной реализации все выччисления будем вести в радианах. Поэтому заменяем 180° на П.
Q2=180-arccos((L1^2+L2^2-D^2)/2L1L2)
Очевидно, что для того, чтобы крайняя точка последнего звена оказалась в заданной точке, звенья можно разположить и подругому — в зеркальном отражении.
Рисунок 3 — Альтернативное решение обратной задачи кинематики
Формулы для Q1 и Q2 не изменятся, но изменятся знаки углов. Для того, чтобы избежать двойных решений выражаем четную функцию (f(-x)=f(x)) arccos() на нечетную (f(-x)=-f(x)) arcsin() или arctg().
arccos(x)=П/2-arcsin(x)
Тогда формулы для углов будут иметь вид:
Q1 =П/2 + arcsin(y/D)-arcsin((L1^2+D^2-L2^2)/2L1L2)
Q2=П/2+arcsin((L1^2+L2^2-D^2)/2L1L2)
Практическая часть
Написать программу, в которой реализуется обратная задача кинематики ддля двузвенной кинематической цепи с двумя вращательными в одной плоскости звеньями.
#include <iоstream>
#include <mаth.h>
using namespace std;
int main()
{
float l1, l2, x, y;
cout <<«Длина первого звена»;
cin >> l1;
cout <<«Длина второго звена»;
cin >> l2;
cout <<«координата х»;
cin >> x;
cout <<«координата y»;
cin >> y;
float q1, q2, b;
const float Pi=3.1415;
b=sqrt(pow(x,2)+pow(y,2));
cout<<b;
if (b!=0)
{
q1=Pi-asin(x/b)-asin((pow(l1,2)+pow(b,2)-pow(l2,2))/(2 * b*l1));
q2=Pi/2+asin((pow(l1,2)+pow(l2,2)-pow(b,2))/(2 * l1*l2));
cout <<«q1 =»<<q1<<» «;
cout <<«q2 =»<<q2;
}
return 0;
}
Учебная программа курса BotBase