🎯 Цель: Изучаем разные типы робо-рук и их возможности
⭐ Результат: Создаем сравнительную таблицу манипуляторов
👨🏫 Учитель: Ахметов Рустам
🏫 Школа: ГБОУ № 1362
📅 Дата: 2025-06-14
⏰ Время: 80 минут
Посмотрите на эти удивительные возможности:
Почему роботам нужны руки?
🎯 Сегодня раскрываем секреты механических рук будущего!
Степень свободы = одно независимое движение
Человеческая рука:
Рабочая зона = все точки, которых может достичь робо-рука
Форма зависит от конструкции:
Звенья соединены шарнирами: \[\text{Основание} \rightarrow \text{Звено 1} \rightarrow \text{Звено 2} \rightarrow ... \rightarrow \text{Схват}\]
Каждый шарнир = 1 степень свободы
Принцип: Движение по трем перпендикулярным осям X, Y, Z
Конструкция:
Z ↑
│
└─→ Y
╱
X
[Схват] ─ Направляющая Z
│
│
Направляющая Y ═══════
│
│
Направляющая X ═══════
│
[Основание]
Характеристики:
Преимущества:
Недостатки:
Принцип: Движение в цилиндрических координатах (r, φ, z)
Конструкция:
Z ↑
│
[Схват]
│ r (выдвижение)
│
╔══╧══╗ ← φ (поворот)
║ ║
║ ○ ║ ← z (подъем)
╚═════╝
[Основание]
Характеристики:
Преимущества:
Недостатки:
Принцип: Движение в сферических координатах (r, θ, φ)
Конструкция:
[Схват] r
╲ θ (наклон)
╲
○ ← φ (поворот)
╱│╲
╱ │ ╲
[Основание]
Характеристики:
Преимущества:
Недостатки:
Принцип: Имитация строения человеческой руки
Конструкция:
[Схват]
│ ← "Кисть"
╔═══╪═══╗
║ "Предплечье" ║
╚═══╪═══╝ ← "Локоть"
╔═══╪═══╗
║ "Плечо" ║
╚═══╪═══╝ ← "Плечевой сустав"
[Основание]
Характеристики:
Преимущества:
Недостатки:
Прямая кинематическая задача:
По углам в шарнирах найти положение схвата
Для антропоморфного манипулятора:
\[\begin{bmatrix} x \\ y \\ z \end{bmatrix} = \begin{bmatrix} L_1\cos\theta_1 + L_2\cos(\theta_1+\theta_2) \\ L_1\sin\theta_1 + L_2\sin(\theta_1+\theta_2) \\ h + L_3\sin\theta_3 \end{bmatrix}\]Обратная кинематическая задача:
По желаемому положению схвата найти углы в шарнирах
Якобиан манипулятора:
\[J = \frac{\partial \mathbf{r}}{\partial \boldsymbol{\theta}}\]где $\mathbf{r}$ - вектор положения, $\boldsymbol{\theta}$ - вектор углов
Сингулярные конфигурации:
\[\det(J) = 0\]В этих положениях манипулятор теряет степени свободы!
Особенность: Жесткость в вертикальной плоскости, гибкость в горизонтальной
Конструкция:
[Схват] Z ↑
│ │
────┼─────┼──── ← Звено 2 (поворот)
│
────┼──────── ← Звено 1 (поворот)
│
○ ← Основание (поворот)
[Основание]
Движения:
Уникальные свойства:
Применение:
1. Позиционное управление:
// Перемещение в заданную точку
moveToPosition(x, y, z, rx, ry, rz);
2. Траекторное управление:
// Движение по заданной траектории
followTrajectory(pointArray, velocity, acceleration);
3. Силовое управление:
// Управление силой воздействия
applyForce(fx, fy, fz, torque_x, torque_y, torque_z);
Мировая система координат:
Система координат инструмента:
Преобразование координат:
\[\mathbf{P}_{world} = \mathbf{T}_{base} \cdot \mathbf{T}_{tool} \cdot \mathbf{P}_{tool}\]Линейная интерполация (для прямых линий):
\[\mathbf{P}(t) = \mathbf{P}_{start} + t \cdot (\mathbf{P}_{end} - \mathbf{P}_{start})\]Сплайн-интерполация (для плавных кривых):
\[\mathbf{P}(t) = a_0 + a_1 t + a_2 t^2 + a_3 t^3\]Алгоритм RRT (Rapidly-exploring Random Tree):
class MotionPlanner {
private:
struct Node {
vector<float> config; // Конфигурация шарниров
Node* parent;
vector<Node*> children;
};
public:
vector<Node*> planPath(vector<float> start, vector<float> goal) {
Node* startNode = new Node{start, nullptr, {}};
vector<Node*> tree = {startNode};
while (!goalReached(tree, goal)) {
// Генерируем случайную конфигурацию
vector<float> randomConfig = generateRandomConfig();
// Находим ближайший узел в дереве
Node* nearest = findNearest(tree, randomConfig);
// Пытаемся создать новый узел
Node* newNode = extend(nearest, randomConfig);
if (newNode && !hasCollision(newNode->config)) {
tree.push_back(newNode);
nearest->children.push_back(newNode);
newNode->parent = nearest;
}
}
return extractPath(tree, goal);
}
};
Алгоритм A для планирования в дискретном пространстве:*
class AStarPlanner {
public:
vector<Configuration> planPath(Configuration start, Configuration goal) {
priority_queue<Node> openSet;
set<Configuration> closedSet;
openSet.push({start, 0, heuristic(start, goal)});
while (!openSet.empty()) {
Node current = openSet.top();
openSet.pop();
if (current.config == goal) {
return reconstructPath(current);
}
closedSet.insert(current.config);
for (auto neighbor : getNeighbors(current.config)) {
if (closedSet.count(neighbor)) continue;
float tentativeG = current.g + distance(current.config, neighbor);
Node neighborNode = {neighbor, tentativeG,
tentativeG + heuristic(neighbor, goal)};
openSet.push(neighborNode);
}
}
return {}; // Путь не найден
}
};
1. Параллельный схват:
║ ║
║ [○] ║ ← Объект
║ ║
╚═════╝
2. Трехпалый схват:
╲ │ ╱
╲│╱
○ ← Объект
3. Вакуумный схват:
┌─────────┐
│ ~~○~~ │ ← Вакуум
└─────────┘
4. Магнитный схват:
┌─────────┐
│ ╫╫╫○╫╫╫ │ ← Магнитное поле
└─────────┘
Умные схваты с обратной связью:
class AdaptiveGripper {
private:
float forceThreshold = 10.0; // Ньютоны
float currentForce = 0.0;
bool objectDetected = false;
public:
bool grasp(float targetForce) {
while (currentForce < targetForce && !objectDetected) {
closeGripper(0.1); // Маленький шаг
currentForce = readForceSensor();
// Обнаружение контакта с объектом
if (currentForce > forceThreshold) {
objectDetected = true;
adjustGrip(targetForce);
return true;
}
}
return false; // Объект не найден
}
private:
void adjustGrip(float targetForce) {
float error = targetForce - currentForce;
float correction = 0.1 * error; // Простой P-регулятор
if (correction > 0) {
closeGripper(correction);
} else {
openGripper(-correction);
}
}
};
Схваты с тактильными датчиками:
class TactileSensor {
private:
vector<vector<float>> pressureMap; // Карта давления
int width, height;
public:
void updatePressureMap() {
for (int x = 0; x < width; x++) {
for (int y = 0; y < height; y++) {
pressureMap[x][y] = readPressure(x, y);
}
}
}
ObjectInfo analyzeContact() {
ObjectInfo info;
// Находим центр давления
float totalPressure = 0;
float centerX = 0, centerY = 0;
for (int x = 0; x < width; x++) {
for (int y = 0; y < height; y++) {
float pressure = pressureMap[x][y];
totalPressure += pressure;
centerX += x * pressure;
centerY += y * pressure;
}
}
if (totalPressure > 0) {
info.contactCenter = {centerX / totalPressure, centerY / totalPressure};
info.contactArea = calculateContactArea();
info.objectShape = classifyShape();
}
return info;
}
private:
ShapeType classifyShape() {
// Анализ паттерна давления для определения формы
float roundness = calculateRoundness();
float elongation = calculateElongation();
if (roundness > 0.8) return CIRCULAR;
if (elongation > 2.0) return ELONGATED;
return IRREGULAR;
}
};
Задание: Заполните сравнительную таблицу характеристик манипуляторов
| Тип манипулятора | Степени свободы | Рабочая зона | Точность | Скорость | Грузоподъемность | Применение |
|---|---|---|---|---|---|---|
| Декартов | 3 (X, Y, Z) | Прямоугольник | ±0.1 мм | Средняя | До 100 кг | Точная обработка |
| Цилиндрический | 3 (r, φ, z) | Цилиндр | ±0.5 мм | Высокая | До 50 кг | Сборка, сварка |
| Сферический | 3 (r, θ, φ) | Сфера | ±1 мм | Очень высокая | До 20 кг | Покраска, нанесение |
| SCARA | 4 (2R + Z + R) | Цилиндр | ±0.1 мм | Очень высокая | До 30 кг | Электроника |
| Антропоморфный | 6-7 | Тор | ±0.1 мм | Средняя | До 30 кг | Универсальные задачи |
Выберите лучший манипулятор для задач:
Задача 1: Сортировка мелких деталей на конвейере
Задача 2: Разгрузка грузовиков на складе
Задача 3: Помощь человеку в быту
Автомобильная промышленность:
Электронная промышленность:
Склады Amazon:
Морские порты:
Последняя миля доставки:
Медицина:
class SurgicalRobot {
public:
void performSurgery() {
// Микрохирургические операции
// Точность до 0.01 мм
// Устранение дрожания рук хирурга
while (operationInProgress) {
HandMotion surgeonHand = trackSurgeonHands();
MotorCommands filtered = filterTremor(surgeonHand);
applyToInstruments(filtered, SCALE_FACTOR);
}
}
};
Космос:
Подводные исследования:
Экстремальные условия:
Мягкие роботы (Soft Robotics):
class SoftManipulator {
private:
vector<PneumaticActuator> muscles;
FlexibleMaterial structure;
public:
void adaptToObject(ObjectShape shape) {
// Мягкая адаптация к форме объекта
for (auto& muscle : muscles) {
float pressure = calculateOptimalPressure(shape, muscle.position);
muscle.setPressure(pressure);
}
// Постепенное обхватывание
while (!objectSecured()) {
increaseGrip(0.1);
delay(100);
}
}
};
Роботы с машинным обучением:
class LearningManipulator {
private:
NeuralNetwork motionPlanner;
ExperienceDatabase database;
public:
void learnFromDemonstration(vector<Trajectory> humanDemos) {
for (auto& demo : humanDemos) {
// Извлекаем ключевые особенности движения
MotionFeatures features = extractFeatures(demo);
// Обучаем нейронную сеть
motionPlanner.train(features.inputs, features.outputs);
// Сохраняем опыт
database.store(features);
}
}
Trajectory generateMotion(Task task) {
// Генерируем траекторию на основе обученной модели
return motionPlanner.predict(task.getFeatures());
}
};
Игра 1: “Декартов робот”
Игра 2: “Цилиндрический робот”
Игра 3: “Антропоморфный робот”
Игра 4: “SCARA робот”
Наблюдения:
Шаг 1: Анализ задачи
📋 Чек-лист требований:
□ Какие объекты нужно захватывать?
□ Какова требуемая точность?
□ Какая нужна скорость работы?
□ Каковы ограничения по габаритам?
□ Какая рабочая среда (температура, влажность)?
□ Какой бюджет проекта?
Шаг 2: Приоритизация критериев
🏆 Матрица приоритетов:
Точность ████████ (8/10)
Скорость ██████ (6/10)
Грузоподъемность ███ (3/10)
Габариты █████ (5/10)
Стоимость ███████ (7/10)
Шаг 3: Выбор на основе анализа
Сценарий А: Робот-кассир в магазине
Сценарий Б: Робот-грузчик на складе
Сценарий В: Робот-помощник для пожилых
Технические знания:
Аналитические навыки:
Почему существует много типов манипуляторов:
“Манипулятор - это не просто механическая рука. Это продуманное инженерное решение, где каждое звено, каждый шарнир и каждый датчик работают вместе для достижения конкретной цели!”
1. Завершение сравнительной таблицы Дополните таблицу характеристик манипуляторов недостающими данными и примерами применения.
2. Описание манипулятора Выберите один тип манипулятора и подготовьте его детальное описание:
3. Проект манипулятора Разработайте эскиз манипулятора для конкретной задачи:
4. Исследование инноваций Найдите информацию о современных разработках в области манипуляторов:
5. Математическое моделирование Изучите математические основы кинематики манипуляторов:
6. Программирование траекторий Напишите простую программу для планирования движения манипулятора между двумя точками с учетом препятствий.
Теоретические знания:
Практические навыки:
Тренды развития манипуляторов:
Профессии будущего:
🎯 Сегодня вы заглянули в мир механических рук, которые уже меняют нашу жизнь!
Теория и применение:
Практические примеры:
Для школьников:
⭐ Для углубленного изучения:
Симуляторы манипуляторов:
Успехов в изучении механических рук роботов! 🦾🤖✨