1defmove_arm(joint1_angle,joint2_angle,joint3_angle):2servo1.write(joint1_angle)3delay(500)# Ждем завершения движения4servo2.write(joint2_angle)5delay(500)6servo3.write(joint3_angle)7delay(500)
Правило: Всегда проверяйте, что источник питания обеспечивает достаточный ток!
📡 Координация движений
Последовательное выполнение:
1defpick_and_place_sequence(): 2# Шаг 1: Подъехать к объекту 3robot.move_to_position(target_x,target_y) 4 5# Шаг 2: Позиционировать манипулятор 6arm.move_to_position(pick_position) 7 8# Шаг 3: Захватить объект 9gripper.close()10delay(1000)1112# Шаг 4: Поднять объект13arm.move_to_position(lift_position)1415# Шаг 5: Переместиться к месту назначения16robot.move_to_position(drop_x,drop_y)1718# Шаг 6: Опустить и отпустить19arm.move_to_position(drop_position)20gripper.open()
Параллельное выполнение:
1defefficient_movement(): 2# Начинаем движение базы и манипулятора одновременно 3robot.start_movement_to(target_x,target_y) 4arm.start_movement_to(prepare_position) 5 6# Ждем завершения обоих движений 7whilerobot.is_moving()orarm.is_moving(): 8delay(10) 910# Финальная операция11gripper.close()
🛠️ Практическая работа
📋 Выбор проекта
🤏 Проект 1: “Робот-грузчик”
Захватный механизм для предметов
Алгоритм: найти → подъехать → захватить → переместить → отпустить
Сложность: ⭐⭐
🦾 Проект 2: “Робот-манипулятор”
2-3 степени свободы
Точное позиционирование
Программирование траекторий
Сложность: ⭐⭐⭐
📦 Проект 3: “Робот-сортировщик”
Конвейерная система
Датчик цвета/размера
Автоматическая сортировка
Сложность: ⭐⭐⭐
🏗️ Проект 4: “Робот-строитель”
Подъемный кран
Точная установка блоков
Контроль высоты
Сложность: ⭐⭐⭐⭐
⏱️ План работы (60 минут)
1Этап 1: Проектирование (10 мин)
2• Выбор типа механизма
3• Планирование конструкции
4• Распределение ролей
5 6Этап 2: Сборка механизма (20 мин)
7• Конструирование дополнительного механизма
8• Интеграция с базовым роботом
9• Проверка механической части
1011Этап 3: Подключение (5 мин)
12• Подключение сервоприводов
13• Проверка соединений
14• Тест базовых движений
1516Этап 4: Программирование (20 мин)
17• Написание функций управления
18• Интеграция в основную программу
19• Отладка координации
2021Этап 5: Тестирование (5 мин)
22• Финальные испытания
23• Оптимизация работы
💻 Примеры программного кода
🤏 Простой захват
1# Функция управления захватом 2defgripper_control(action): 3ifaction=="open": 4gripper_servo.write(180) 5print("Захват открыт") 6elifaction=="close": 7gripper_servo.write(30) 8print("Захват закрыт") 9elifaction=="half":10gripper_servo.write(105)11print("Захват полуоткрыт")1213delay(1000)# Время на выполнение движения1415# Алгоритм захвата объекта16defpick_object():17gripper_control("open")# Открыть захват18robot.forward(10)# Подъехать к объекту19gripper_control("close")# Захватить20robot.backward(10)# Отъехать с объектом2122# Алгоритм освобождения объекта23defdrop_object():24gripper_control("open")# Отпустить объект25robot.backward(5)# Отъехать26gripper_control("close")# Закрыть захват
🦾 Сложный манипулятор
1# Класс для управления манипулятором 2classRobotArm: 3def__init__(self): 4self.base_servo=Servo(pin=9) 5self.shoulder_servo=Servo(pin=10) 6self.elbow_servo=Servo(pin=11) 7self.gripper_servo=Servo(pin=12) 8 9# Текущие углы10self.base_angle=9011self.shoulder_angle=4512self.elbow_angle=13513self.gripper_angle=01415defmove_to_position(self,base,shoulder,elbow):16# Плавное движение к целевой позиции17steps=201819# Вычисляем шаги для каждого сустава20base_step=(base-self.base_angle)/steps21shoulder_step=(shoulder-self.shoulder_angle)/steps22elbow_step=(elbow-self.elbow_angle)/steps2324# Выполняем движение пошагово25foriinrange(steps):26self.base_angle+=base_step27self.shoulder_angle+=shoulder_step28self.elbow_angle+=elbow_step2930self.base_servo.write(self.base_angle)31self.shoulder_servo.write(self.shoulder_angle)32self.elbow_servo.write(self.elbow_angle)3334delay(50)# Плавность движения3536defgrab_object_at(self,x,y,z):37# Обратная кинематика (упрощенная)38base_angle=math.atan2(y,x)*180/math.pi39distance=math.sqrt(x*x+y*y)4041# Расчет углов для достижения точки (x,y,z)42shoulder_angle=calculate_shoulder_angle(distance,z)43elbow_angle=calculate_elbow_angle(distance,z)4445# Движение к объекту46self.move_to_position(base_angle,shoulder_angle,elbow_angle)4748# Захват49self.gripper_servo.write(30)# Закрыть захват50delay(1000)5152# Использование53arm=RobotArm()54arm.grab_object_at(20,15,10)# Захватить объект в точке (20,15,10)
1# ✅ Проверка перед активацией мощных механизмов2ifbattery_voltage()>7.0:3heavy_motor.start()4else:5print("Низкое напряжение батареи!")
Проблема 3: Блокировка программы
1# ❌ Блокирующий код 2defmove_arm(): 3servo.write(90) 4delay(2000)# Программа "зависает" на 2 секунды 5 6# ✅ Неблокирующий код 7defmove_arm_smooth(): 8target_time=current_time()+2000 9whilecurrent_time()<target_time:10check_sensors()# Можем делать другие дела11delay(10)
🤔 Рефлексия “Три вопроса”
📝 Самоанализ
1. Что я сегодня узнал/научился делать?
2. Какие затруднения у меня возникли?
3. Как я могу применить полученные навыки в будущем?
Самооценка работы (1-5): ___
🏠 Домашнее задание
🎯 Основное задание
Описать улучшения созданного механизма:
Проанализируйте свой проект и предложите:
3 технических улучшения конструкции
2 программных оптимизации
1 дополнительную функцию
Оценку стоимости доработок
📋 Структура отчета:
Текущие ограничения системы
Предлагаемые улучшения
Техническое обоснование
Ожидаемый эффект
🌟 Исследовательское задание
Найти аналоги в реальном мире:
Промышленные роботы с похожими механизмами
Бытовые устройства с автоматизацией
Медицинские роботы-помощники
Исследовательские роботы
Для каждого примера описать:
Принцип работы механизма
Область применения
Преимущества автоматизации
🎉 Итоги урока
🏆 Что освоили
✅ Научились:
Проектировать дополнительные механизмы для роботов
Программировать сервоприводы и манипуляторы
Интегрировать несколько систем в одной программе
Создавать координированные движения
🧠 Поняли:
Дополнительные механизмы расширяют возможности роботов
Программирование требует учета физических ограничений