27. «Взаимодействие роботов» -программирование
Модуль: Проектная деятельность в робототехнике
Тема урока: 27. Выполнение учебного проекта «Взаимодействие роботов»: программирование
Цель урока: Сформировать практические навыки программирования взаимодействующих робототехнических систем для выполнения совместной задачи.
Планируемые результаты:
Предметные:
- Знать принципы разработки программного обеспечения для взаимодействующих роботов
- Уметь применять модульный подход к программированию робототехнических систем
- Владеть навыками отладки и тестирования программ для роботов
- Понимать принципы координации действий нескольких роботов
Метапредметные:
- Регулятивные УУД: умение планировать последовательность программирования, тестировать и корректировать код
- Познавательные УУД: применение алгоритмического мышления, использование математических моделей для решения задач координации
- Коммуникативные УУД: эффективное взаимодействие при совместной разработке программного обеспечения
Личностные:
- Формирование настойчивости и целеустремленности при решении программных задач
- Развитие системного мышления и творческого подхода к программированию
- Воспитание культуры совместной работы над программным проектом
- Формирование ответственного отношения к процессу и результатам программирования
Задачи урока:
- Обеспечить понимание принципов разработки программ для взаимодействующих роботов
- Сформировать навыки применения модульного программирования в робототехнике
- Развить умение программировать коммуникацию между робототехническими устройствами
- Научить применять математические алгоритмы для координации движения роботов
- Закрепить навыки отладки и тестирования программного кода для робототехнических систем
Тип урока: Практикум по программированию
Учебно-методическое и материально-техническое обеспечение:
- Компьютеры с установленной средой программирования
- Собранные роботы с предыдущего урока
- Программные библиотеки для работы с робототехническими компонентами
- Модули беспроводной связи (Bluetooth, Wi-Fi, инфракрасные передатчики)
- Методические материалы по программированию роботов
- Инструкции по отладке программ для роботов
- Шаблоны алгоритмов взаимодействия роботов
- Примеры программного кода для решения типовых задач
- Схемы алгоритмов координации нескольких роботов
Образовательные технологии: Проектное обучение, практико-ориентированное обучение, работа в малых группах, программирование в парах
Межпредметные связи:
- Информатика: модульное программирование, отладка кода, работа с данными, протоколы обмена информацией
- Математика: реализация алгоритмов координации и оптимизации движения, векторные расчеты, координатные системы
- Физика: учет физических ограничений при программировании движения роботов
- Английский язык: использование технической терминологии в программировании
Этап урока | Деятельность учителя | Деятельность ученика | Планируемые результаты предметные | Планируемые результаты УУД |
---|---|---|---|---|
1. Организационный момент (3 мин) | Приветствует учащихся, проверяет готовность к уроку. Организует распределение учащихся по проектным группам, сформированным ранее. | Занимают места в проектных группах. Проверяют наличие необходимого оборудования и материалов. | Регулятивные: самоорганизация, готовность к работе | |
2. Актуализация знаний и мотивация (7 мин) | Напоминает о результатах предыдущих этапов проекта (обоснование и сборка). Организует обсуждение: - Какие задачи должны выполнять ваши роботы? - Какие типы взаимодействия между роботами вы планируете реализовать? - Какие алгоритмы потребуются для решения поставленных задач? Демонстрирует краткий видеоролик с примерами взаимодействующих роботов и их программирования. |
Вспоминают результаты предыдущих этапов проекта. Отвечают на вопросы, обсуждают задачи, которые должны выполнять их роботы. Анализируют типы взаимодействия и необходимые алгоритмы. Просматривают видеоматериал, задают уточняющие вопросы. |
Понимание задач программирования роботов. Актуализация знаний о функциональности создаваемых роботов. | Познавательные: актуализация имеющихся знаний. Коммуникативные: участие в диалоге. |
3. Вводный инструктаж: принципы программирования взаимодействующих роботов (10 мин) | Объясняет основные принципы программирования взаимодействующих роботов: 1. Модульный подход (межпредметная связь с информатикой): - Разделение кода на функциональные модули - Независимая разработка и тестирование модулей - Интеграция модулей в единую систему 2. Программирование коммуникации между роботами: - Протоколы обмена данными - Форматы сообщений - Обработка ошибок связи 3. Координация действий роботов (межпредметная связь с математикой): - Алгоритмы согласования действий - Синхронизация во времени - Пространственная координация 4. Стратегии отладки программ: - Пошаговая проверка функциональности - Тестирование в упрощенных условиях - Изоляция и устранение ошибок |
Воспринимают информацию о принципах программирования взаимодействующих роботов. Фиксируют ключевые понятия в тетрадях. Задают уточняющие вопросы по модульному программированию и протоколам коммуникации. Устанавливают связь между математическими алгоритмами и задачами координации роботов. |
Знание принципов программирования взаимодействующих роботов. Понимание модульного подхода к разработке программного обеспечения. Представление о протоколах коммуникации между роботами. |
Познавательные: восприятие новой информации, установление связей с ранее изученными понятиями информатики и математики. Регулятивные: понимание последовательности программирования. |
4. Практическая работа: планирование структуры программы (10 мин) | Организует работу групп по планированию структуры программы: Предлагает схему планирования: 1. Определение основных функциональных модулей 2. Распределение ответственности между модулями 3. Определение интерфейсов между модулями 4. Планирование алгоритма коммуникации Раздает шаблоны для планирования структуры программы. Консультирует группы, помогает структурировать программу, подсказывает оптимальные решения. |
В группах планируют структуру программы: - Определяют основные функциональные модули для каждого робота - Составляют схему взаимодействия модулей - Определяют формат данных для обмена между роботами - Фиксируют результаты в шаблоне - Обсуждают и согласовывают структуру программы Участники группы вносят свои предложения и совместно принимают решения. |
Умение планировать структуру программы для робототехнических систем. Навык разделения кода на функциональные модули. Понимание интерфейсов между модулями программы. |
Регулятивные: планирование работы, разбиение задачи на подзадачи. Познавательные: структурирование информации, построение моделей. Коммуникативные: обсуждение и согласование технических решений. |
5. Практическая работа: программирование базовых функций роботов (15 мин) | Объясняет задачу этапа: “Необходимо запрограммировать базовые функции для каждого робота: движение, работа с сенсорами, управление исполнительными механизмами”. Напоминает о принципах модульного программирования. Консультирует группы в процессе программирования: - Помогает с выбором оптимальных алгоритмов - Подсказывает решения типовых проблем - Объясняет работу с библиотеками Акцентирует внимание на необходимости тестирования каждого модуля. |
Работают над программированием базовых функций роботов: - Разрабатывают модули для управления движением - Создают модули для работы с датчиками - Программируют управление исполнительными механизмами - Тестируют работу отдельных модулей - Комментируют код для облегчения дальнейшей работы Распределяют задачи между участниками группы (одни пишут код, другие тестируют и т.д.). |
Умение программировать базовые функции робототехнических систем. Навыки модульного программирования в робототехнике. Понимание принципов работы с сенсорами и исполнительными механизмами. |
Познавательные: алгоритмическое мышление, реализация алгоритмов в программном коде. Регулятивные: контроль и коррекция программного кода. Коммуникативные: распределение задач в группе. |
6. Физкультминутка (2 мин) | Проводит короткую физкультминутку для снятия напряжения и усталости. | Выполняют физические упражнения. | Регулятивные: саморегуляция. | |
7. Практическая работа: программирование коммуникации между роботами (15 мин) | Объясняет особенности программирования систем связи между роботами: - Принципы работы с модулями беспроводной связи - Структура сообщений для обмена данными - Обработка получаемых сообщений - Алгоритмы подтверждения приема Демонстрирует примеры кода для организации коммуникации. Консультирует группы по вопросам настройки и программирования систем связи. |
Программируют коммуникацию между роботами: - Настраивают модули беспроводной связи - Разрабатывают протокол обмена данными - Создают функции для отправки и приема сообщений - Реализуют обработку полученных данных - Тестируют передачу данных между роботами При необходимости модифицируют базовые функции роботов для интеграции с системой коммуникации. |
Умение программировать системы коммуникации между роботами. Навыки работы с протоколами обмена данными. Понимание принципов обработки сообщений. |
Познавательные: применение знаний в области информационных технологий. Регулятивные: отладка и проверка работоспособности коммуникации. Личностные: настойчивость при решении сложных технических задач. |
8. Практическая работа: программирование алгоритмов координации (15 мин) | Объясняет принципы программирования координации действий роботов: - Алгоритмы распределения задач между роботами - Синхронизация действий во времени - Оптимизация совместного движения Межпредметная связь с математикой: рассказывает о применении математических алгоритмов для координации движения. Демонстрирует примеры реализации типовых алгоритмов координации. Консультирует группы по вопросам оптимизации взаимодействия. |
Разрабатывают алгоритмы координации действий роботов: - Применяют математические модели для расчета оптимальных траекторий - Создают алгоритмы синхронизации действий - Программируют совместное решение задач - Реализуют обработку конфликтных ситуаций - Интегрируют модули координации с базовыми функциями и коммуникацией Применяют знания из области математики для оптимизации движения и взаимодействия. |
Умение программировать алгоритмы координации нескольких роботов. Навыки применения математических моделей в робототехнических проектах. Понимание принципов синхронизации действий. |
Познавательные: применение математических знаний для решения инженерных задач. Регулятивные: оптимизация алгоритмов. Коммуникативные: согласование технических решений. |
9. Практическая работа: интеграция и отладка программного обеспечения (15 мин) | Объясняет принципы интеграции и отладки программного обеспечения роботов: - Пошаговое тестирование модулей - Выявление и устранение ошибок - Оптимизация программного кода - Обеспечение надежности работы Межпредметная связь с информатикой: обсуждает методы отладки кода и поиска ошибок. Консультирует группы в процессе отладки, помогает выявлять и устранять проблемы. |
Выполняют интеграцию и отладку программного обеспечения: - Объединяют разработанные модули в единую систему - Тестируют взаимодействие между модулями - Выявляют и устраняют ошибки - Оптимизируют программный код - Проверяют стабильность работы системы - Документируют выявленные проблемы и способы их решения |
Умение интегрировать модули программы в единую систему. Навыки отладки программного кода. Понимание методов обеспечения надежности программного обеспечения. |
Регулятивные: выявление и исправление ошибок, контроль качества. Познавательные: анализ проблем и поиск решений. Личностные: настойчивость при устранении ошибок. |
10. Практическая работа: тестирование взаимодействия роботов (10 мин) | Организует комплексное тестирование взаимодействия роботов: - Предлагает группам проверить выполнение поставленных задач - Создает различные сценарии для тестирования - Наблюдает за работой роботов - Помогает выявлять проблемы Обращает внимание на качество взаимодействия роботов и выполнение проектных задач. |
Проводят тестирование взаимодействия роботов: - Запускают программы на роботах - Наблюдают за их совместной работой - Фиксируют проблемы и недостатки - При необходимости вносят корректировки в программы - Проверяют выполнение поставленных задач Анализируют эффективность взаимодействия роботов. |
Умение проводить комплексное тестирование робототехнических систем. Навыки анализа работы программного обеспечения в реальных условиях. Понимание критериев успешного выполнения задач. |
Регулятивные: оценка результатов работы. Познавательные: анализ функционирования системы. Коммуникативные: совместная оценка результатов. |
11. Демонстрация и обсуждение результатов (10 мин) | Организует демонстрацию результатов работы групп: - Предлагает каждой группе продемонстрировать взаимодействие роботов - Задает вопросы о реализованных алгоритмах - Просит пояснить выбор технических решений - Стимулирует обсуждение сильных и слабых сторон Организует взаимную оценку группами работ друг друга. |
Представляют результаты работы: - Демонстрируют взаимодействие роботов - Объясняют особенности реализованных алгоритмов - Рассказывают о трудностях и способах их преодоления - Отвечают на вопросы - Оценивают работы других групп Участвуют в обсуждении результатов. |
Умение представлять и объяснять программные решения. Навыки анализа эффективности алгоритмов. Понимание сильных и слабых сторон реализованных решений. |
Коммуникативные: представление результатов, участие в обсуждении. Познавательные: анализ различных технических решений. Личностные: восприятие критики, объективная оценка. |
12. Рефлексия и обсуждение следующих шагов (5 мин) | Организует рефлексию с использованием метода “Программный отчет”: - Что получилось реализовать в программном обеспечении? - Какие проблемы остались нерешенными? - Какие улучшения можно внести в программы? Обсуждает с группами следующие шаги в работе над проектом (тестирование и презентация). |
Участвуют в рефлексии: - Оценивают результаты своей работы - Определяют нерешенные проблемы - Предлагают идеи для улучшения программ - Обсуждают следующие шаги работы над проектом Делятся своими впечатлениями от работы. |
Регулятивные: оценка результатов, планирование дальнейших действий. Познавательные: анализ достижений и проблем. Личностные: ответственность за результат. |
|
13. Домашнее задание и сохранение работы (3 мин) | Объясняет домашнее задание: 1. Проанализировать работу программного обеспечения и составить список возможных улучшений 2. Подготовиться к итоговому тестированию и презентации проекта 3. Документировать программный код (добавить комментарии, описать алгоритмы) Организует сохранение программного кода и проектов. |
Записывают домашнее задание. Сохраняют программный код и проекты. Организуют безопасное отключение и хранение роботов. |
Регулятивные: организация дальнейшей работы. |
Общая структура программного обеспечения
├── Базовые функции роботов
│ ├── Управление движением
│ │ ├── Прямолинейное движение
│ │ ├── Повороты
│ │ └── Управление скоростью
│ ├── Работа с сенсорами
│ │ ├── Считывание значений с датчиков
│ │ ├── Обработка данных
│ │ └── Интерпретация сенсорной информации
│ └── Управление исполнительными механизмами
│ ├── Управление манипуляторами
│ ├── Управление захватами
│ └── Управление специализированными механизмами
├── Коммуникационные модули
│ ├── Отправка сообщений
│ │ ├── Форматирование данных
│ │ ├── Кодирование информации
│ │ └── Обеспечение надежности передачи
│ ├── Прием сообщений
│ │ ├── Декодирование информации
│ │ ├── Проверка целостности данных
│ │ └── Обработка полученных команд
│ └── Протокол взаимодействия
│ ├── Инициализация связи
│ ├── Поддержание соединения
│ └── Разрешение конфликтов
└── Алгоритмы координации
├── Распределение задач
│ ├── Анализ текущей ситуации
│ ├── Определение приоритетов
│ └── Назначение задач роботам
├── Синхронизация действий
│ ├── Временная синхронизация
│ ├── Координация в пространстве
│ └── Обработка критических ситуаций
└── Оптимизация совместной работы
├── Минимизация затрачиваемых ресурсов
├── Повышение эффективности выполнения задач
└── Адаптация к изменениям среды
// Пример кода для организации простой коммуникации между роботами с использованием Bluetooth
// Данный код является учебным примером и требует адаптации под конкретное оборудование
#include <SoftwareSerial.h>
// Пины для Bluetooth модуля
#define BT_RX 10
#define BT_TX 11
// Создаем объект для работы с Bluetooth
SoftwareSerial bluetoothSerial(BT_RX, BT_TX);
// Константы для типов сообщений
#define MSG_COMMAND 'C' // Команда
#define MSG_DATA 'D' // Данные
#define MSG_ACK 'A' // Подтверждение
#define MSG_ERROR 'E' // Ошибка
// Буфер для приема сообщений
char messageBuffer[64];
int bufferIndex = 0;
// Структура для хранения команд и данных
struct RobotMessage {
char type;
int commandId;
int parameter1;
int parameter2;
bool needAck;
};
// Функция инициализации коммуникации
void initCommunication() {
bluetoothSerial.begin(9600);
Serial.println("Communication initialized");
}
// Функция отправки сообщения
void sendMessage(char type, int commandId, int param1, int param2, bool needAck) {
// Форматируем сообщение: тип,commandId,param1,param2,needAck
String message = String(type) + "," + String(commandId) + "," +
String(param1) + "," + String(param2) + "," +
(needAck ? "1" : "0") + "\n";
bluetoothSerial.print(message);
Serial.print("Sent: ");
Serial.print(message);
}
// Функция отправки команды
void sendCommand(int commandId, int param1, int param2, bool needAck) {
sendMessage(MSG_COMMAND, commandId, param1, param2, needAck);
}
// Функция отправки данных
void sendData(int dataId, int value1, int value2, bool needAck) {
sendMessage(MSG_DATA, dataId, value1, value2, needAck);
}
// Функция отправки подтверждения
void sendAcknowledgement(int commandId) {
sendMessage(MSG_ACK, commandId, 0, 0, false);
}
// Функция отправки сообщения об ошибке
void sendError(int errorCode, int commandId) {
sendMessage(MSG_ERROR, commandId, errorCode, 0, false);
}
// Функция обработки входящего сообщения
void processMessage(const String& message) {
// Парсинг сообщения
int commaPos1 = message.indexOf(',');
int commaPos2 = message.indexOf(',', commaPos1 + 1);
int commaPos3 = message.indexOf(',', commaPos2 + 1);
int commaPos4 = message.indexOf(',', commaPos3 + 1);
if (commaPos1 < 0 || commaPos2 < 0 || commaPos3 < 0 || commaPos4 < 0) {
Serial.println("Error parsing message: invalid format");
return;
}
// Извлекаем части сообщения
char type = message.charAt(0);
int commandId = message.substring(commaPos1 + 1, commaPos2).toInt();
int param1 = message.substring(commaPos2 + 1, commaPos3).toInt();
int param2 = message.substring(commaPos3 + 1, commaPos4).toInt();
bool needAck = (message.substring(commaPos4 + 1).toInt() == 1);
// Создаем структуру сообщения
RobotMessage msg = {type, commandId, param1, param2, needAck};
// Обрабатываем сообщение в зависимости от типа
switch (type) {
case MSG_COMMAND:
processCommand(msg);
break;
case MSG_DATA:
processData(msg);
break;
case MSG_ACK:
processAcknowledgement(msg);
break;
case MSG_ERROR:
processError(msg);
break;
default:
Serial.println("Unknown message type");
}
// Отправляем подтверждение, если оно требуется
if (needAck) {
sendAcknowledgement(commandId);
}
}
// Функция обработки входящей команды
void processCommand(const RobotMessage& msg) {
Serial.print("Command received: ID=");
Serial.print(msg.commandId);
Serial.print(", Param1=");
Serial.print(msg.parameter1);
Serial.print(", Param2=");
Serial.println(msg.parameter2);
// Здесь код для выполнения команды в зависимости от commandId
// Например:
switch (msg.commandId) {
case 1: // Движение
moveRobot(msg.parameter1, msg.parameter2);
break;
case 2: // Взаимодействие с объектом
interactWithObject(msg.parameter1);
break;
// Другие команды...
default:
Serial.println("Unknown command ID");
}
}
// Обработка данных
void processData(const RobotMessage& msg) {
Serial.print("Data received: ID=");
Serial.print(msg.commandId);
Serial.print(", Value1=");
Serial.print(msg.parameter1);
Serial.print(", Value2=");
Serial.println(msg.parameter2);
// Здесь код для обработки полученных данных
}
// Обработка подтверждения
void processAcknowledgement(const RobotMessage& msg) {
Serial.print("Acknowledgement for command ID=");
Serial.println(msg.commandId);
// Здесь код для обработки подтверждения
}
// Обработка ошибки
void processError(const RobotMessage& msg) {
Serial.print("Error for command ID=");
Serial.print(msg.commandId);
Serial.print(", Error code=");
Serial.println(msg.parameter1);
// Здесь код для обработки ошибки
}
// Проверка входящих сообщений
void checkIncomingMessages() {
while (bluetoothSerial.available()) {
char c = bluetoothSerial.read();
// Если конец строки, обрабатываем сообщение
if (c == '\n') {
messageBuffer[bufferIndex] = '\0'; // Добавляем конец строки
processMessage(String(messageBuffer));
bufferIndex = 0; // Сбрасываем индекс буфера
} else if (bufferIndex < 63) { // Проверка переполнения буфера
messageBuffer[bufferIndex++] = c;
}
}
}
// Примеры функций управления роботом (должны быть реализованы в зависимости от конкретной платформы)
void moveRobot(int direction, int speed) {
// Код для управления движением робота
Serial.print("Moving robot: Direction=");
Serial.print(direction);
Serial.print(", Speed=");
Serial.println(speed);
}
void interactWithObject(int actionType) {
// Код для взаимодействия с объектами
Serial.print("Interacting with object: Action=");
Serial.println(actionType);
}
void setup() {
Serial.begin(9600);
initCommunication();
// Другие инициализации...
}
void loop() {
// Проверяем входящие сообщения
checkIncomingMessages();
// Другие задачи робота...
delay(10); // Небольшая задержка для стабильности
}
# Пример кода на Python для координации движения нескольких роботов
# Данный код является учебным примером и должен быть адаптирован к конкретной платформе
import math
import time
# Класс для представления положения робота
class Position:
def __init__(self, x=0, y=0, angle=0):
self.x = x
self.y = y
self.angle = angle
def distance_to(self, other_position):
"""Рассчитывает расстояние до другой позиции"""
return math.sqrt((self.x - other_position.x)**2 + (self.y - other_position.y)**2)
def angle_to(self, other_position):
"""Рассчитывает угол до другой позиции"""
return math.degrees(math.atan2(other_position.y - self.y, other_position.x - self.x))
# Класс для представления робота
class Robot:
def __init__(self, robot_id, initial_position=Position()):
self.id = robot_id
self.position = initial_position
self.target_position = None
self.speed = 0
self.state = "idle" # idle, moving, working
self.task = None
def set_target(self, target_position):
"""Устанавливает целевую позицию для робота"""
self.target_position = target_position
self.state = "moving"
def update_position(self, new_position):
"""Обновляет текущую позицию робота"""
self.position = new_position
# Проверяем, достиг ли робот целевой позиции
if (self.target_position and
self.position.distance_to(self.target_position) < 0.1):
self.state = "idle"
self.target_position = None
return True
return False
def assign_task(self, task):
"""Назначает задачу роботу"""
self.task = task
self.state = "working"
def complete_task(self):
"""Отмечает задачу как выполненную"""
self.task = None
self.state = "idle"
# Класс для координации группы роботов
class RobotCoordinator:
def __init__(self):
self.robots = {}
self.tasks = []
def add_robot(self, robot):
"""Добавляет робота в систему координации"""
self.robots[robot.id] = robot
def add_task(self, task):
"""Добавляет задачу в очередь"""
self.tasks.append(task)
def get_idle_robots(self):
"""Возвращает список свободных роботов"""
return [robot for robot in self.robots.values() if robot.state == "idle"]
def assign_tasks(self):
"""Распределяет задачи между свободными роботами"""
idle_robots = self.get_idle_robots()
while idle_robots and self.tasks:
task = self.tasks.pop(0) # Берем первую задачу из очереди
# Находим ближайшего робота к месту выполнения задачи
nearest_robot = None
min_distance = float('inf')
for robot in idle_robots:
distance = robot.position.distance_to(task.position)
if distance < min_distance:
min_distance = distance
nearest_robot = robot
if nearest_robot:
nearest_robot.set_target(task.position)
nearest_robot.assign_task(task)
idle_robots.remove(nearest_robot)
print(f"Робот {nearest_robot.id} назначен на задачу {task.id} в позиции ({task.position.x}, {task.position.y})")
def coordinate_movement(self):
"""Координирует движение роботов для избежания столкновений"""
moving_robots = [robot for robot in self.robots.values() if robot.state == "moving"]
# Проверяем каждую пару движущихся роботов
for i in range(len(moving_robots)):
for j in range(i + 1, len(moving_robots)):
robot1 = moving_robots[i]
robot2 = moving_robots[j]
# Если роботы находятся слишком близко друг к другу
if robot1.position.distance_to(robot2.position) < 2.0:
# Вычисляем векторы направления движения
vector1 = (robot1.target_position.x - robot1.position.x,
robot1.target_position.y - robot1.position.y)
vector2 = (robot2.target_position.x - robot2.position.x,
robot2.target_position.y - robot2.position.y)
# Если роботы движутся навстречу друг другу
dot_product = vector1[0]*vector2[0] + vector1[1]*vector2[1]
if dot_product < 0:
# Определяем, какой робот должен уступить дорогу
# Например, по приоритету задачи или ID робота
if robot1.id > robot2.id:
self.adjust_path(robot1, robot2)
else:
self.adjust_path(robot2, robot1)
def adjust_path(self, robot, obstacle_robot):
"""Корректирует путь робота для избежания столкновения"""
# Временно изменяем целевую точку, чтобы обойти препятствие
# Это упрощенный пример, в реальности нужен более сложный алгоритм планирования пути
# Вычисляем вектор от препятствия к роботу
dx = robot.position.x - obstacle_robot.position.x
dy = robot.position.y - obstacle_robot.position.y
# Нормализуем вектор и создаем смещение
length = math.sqrt(dx*dx + dy*dy)
if length > 0:
dx = dx / length * 3.0 # Смещение на 3 единицы
dy = dy / length * 3.0
# Создаем промежуточную точку в стороне от препятствия
intermediate_position = Position(
obstacle_robot.position.x + dx,
obstacle_robot.position.y + dy
)
# Временно устанавливаем эту точку как целевую
original_target = robot.target_position
robot.set_target(intermediate_position)
# Запоминаем оригинальную точку, чтобы вернуться к ней позже
# В реальной системе нужно сохранять весь маршрут
print(f"Робот {robot.id} корректирует путь для избежания столкновения с роботом {obstacle_robot.id}")
# Класс для представления задачи
class Task:
def __init__(self, task_id, position, priority=0):
self.id = task_id
self.position = position
self.priority = priority
self.status = "pending" # pending, assigned, completed
# Пример использования
if __name__ == "__main__":
# Создаем координатора
coordinator = RobotCoordinator()
# Создаем роботов
robot1 = Robot(1, Position(0, 0))
robot2 = Robot(2, Position(10, 0))
# Добавляем роботов в систему координации
coordinator.add_robot(robot1)
coordinator.add_robot(robot2)
# Создаем задачи
task1 = Task(1, Position(5, 5))
task2 = Task(2, Position(8, 8))
# Добавляем задачи в очередь
coordinator.add_task(task1)
coordinator.add_task(task2)
# Распределяем задачи
coordinator.assign_tasks()
# Имитация движения и координации (в реальности это было бы в цикле)
for i in range(5):
print(f"\nИтерация {i+1}:")
# Обновляем позиции роботов (в реальности это было бы фактическое движение)
if robot1.state == "moving":
robot1.update_position(Position(
robot1.position.x + (robot1.target_position.x - robot1.position.x) * 0.2,
robot1.position.y + (robot1.target_position.y - robot1.position.y) * 0.2
))
print(f"Робот 1: позиция ({robot1.position.x:.1f}, {robot1.position.y:.1f})")
if robot2.state == "moving":
robot2.update_position(Position(
robot2.position.x + (robot2.target_position.x - robot2.position.x) * 0.2,
robot2.position.y + (robot2.target_position.y - robot2.position.y) * 0.2
))
print(f"Робот 2: позиция ({robot2.position.x:.1f}, {robot2.position.y:.1f})")
# Координируем движение для избежания столкновений
coordinator.coordinate_movement()
# Имитация завершения задач
for robot in [robot1, robot2]:
if (robot.task and robot.state == "working" and
robot.position.distance_to(robot.task.position) < 0.5):
print(f"Робот {robot.id} выполнил задачу {robot.task.id}")
robot.complete_task()
# Назначаем новые задачи, если они есть
coordinator.assign_tasks()
# Задержка для наглядности
time.sleep(1)
ПЛАНИРОВАНИЕ СТРУКТУРЫ ПРОГРАММЫ
"ВЗАИМОДЕЙСТВИЕ РОБОТОВ"
Группа: _______ Участники: _____________________________
1. МОДУЛИ РОБОТА 1 (название робота): _________________
1.1. Базовые функции:
| Название функции | Описание | Входные параметры | Выходные параметры |
|-----------------|----------|------------------|-------------------|
| | | | |
| | | | |
1.2. Коммуникационные функции:
| Название функции | Описание | Входные параметры | Выходные параметры |
|-----------------|----------|------------------|-------------------|
| | | | |
| | | | |
1.3. Функции координации:
| Название функции | Описание | Входные параметры | Выходные параметры |
|-----------------|----------|------------------|-------------------|
| | | | |
| | | | |
2. МОДУЛИ РОБОТА 2 (название робота): _________________
2.1. Базовые функции:
| Название функции | Описание | Входные параметры | Выходные параметры |
|-----------------|----------|------------------|-------------------|
| | | | |
| | | | |
2.2. Коммуникационные функции:
| Название функции | Описание | Входные параметры | Выходные параметры |
|-----------------|----------|------------------|-------------------|
| | | | |
| | | | |
2.3. Функции координации:
| Название функции | Описание | Входные параметры | Выходные параметры |
|-----------------|----------|------------------|-------------------|
| | | | |
| | | | |
3. ПРОТОКОЛ КОММУНИКАЦИИ:
3.1. Формат сообщений:
_________________________________________________
_________________________________________________
3.2. Типы сообщений:
| Тип сообщения | Код | Формат данных | Описание |
|--------------|-----|--------------|----------|
| | | | |
| | | | |
3.3. Обработка ошибок:
_________________________________________________
_________________________________________________
4. АЛГОРИТМЫ КООРДИНАЦИИ:
4.1. Распределение задач:
_________________________________________________
_________________________________________________
4.2. Синхронизация действий:
_________________________________________________
_________________________________________________
4.3. Разрешение конфликтов:
_________________________________________________
_________________________________________________
5. ЗАВИСИМОСТИ МЕЖДУ МОДУЛЯМИ:
[Место для диаграммы зависимостей модулей]
6. ПОРЯДОК РАЗРАБОТКИ И ТЕСТИРОВАНИЯ:
| Этап | Описание | Ответственный | Критерии готовности |
|------|----------|--------------|-------------------|
| | | | |
| | | | |
| | | | |
-
Изоляция проблем:
- Тестируйте каждый модуль по отдельности перед интеграцией
- Используйте “заглушки” (stubs) для имитации работы других модулей
- Начинайте с простейших сценариев взаимодействия
-
Логирование:
- Добавляйте подробные сообщения о действиях и состояниях роботов
- Фиксируйте все отправляемые и получаемые сообщения
- Используйте временные метки для анализа последовательности событий
-
Визуализация:
- Используйте светодиоды для индикации состояний
- По возможности выводите информацию на дисплей
- Применяйте звуковые сигналы для обозначения важных событий
-
Пошаговое тестирование коммуникации:
- Проверьте базовое соединение (может ли один робот обнаружить другого)
- Протестируйте отправку простых сообщений
- Убедитесь, что сообщения правильно интерпретируются
- Проверьте работу протокола при потере сообщений
-
Проверка алгоритмов координации:
- Начинайте с простых сценариев координации
- Постепенно усложняйте задачи и условия
- Тестируйте реакцию на неожиданные ситуации
- Проверяйте обработку конфликтов между роботами
-
Типичные проблемы и решения:
- Потеря связи: добавьте механизм повторной попытки соединения
- Конфликты данных: реализуйте механизмы синхронизации
- Зацикливание: добавьте таймауты и обработку исключительных ситуаций
- Несогласованность действий: внедрите протокол подтверждения выполнения
-
Инструменты для отладки:
- Мониторинг состояния через последовательный порт
- Анализаторы протоколов для беспроводной связи
- Запись и воспроизведение последовательности команд
- Симуляция поведения роботов перед тестированием на реальных устройствах
Функциональность (0-5 баллов):
- Выполнение всех требуемых функций отдельными роботами (0-2)
- Успешная реализация взаимодействия между роботами (0-2)
- Эффективность решения поставленной задачи (0-1)
Качество программного кода (0-5 баллов):
- Модульность и структурированность кода (0-1)
- Понятность и документированность (комментарии) (0-1)
- Эффективность алгоритмов (0-1)
- Обработка исключений и ошибок (0-1)
- Оптимизация ресурсов (память, процессор) (0-1)
Коммуникация между роботами (0-5 баллов):
- Надежность обмена данными (0-2)
- Эффективность протокола коммуникации (0-1)
- Обработка ошибок связи (0-1)
- Синхронизация данных (0-1)
Алгоритмы координации (0-5 баллов):
- Эффективность распределения задач между роботами (0-1)
- Синхронизация действий во времени (0-1)
- Пространственная координация (предотвращение столкновений) (0-1)
- Оптимизация совместной работы (0-1)
- Адаптация к изменяющимся условиям (0-1)
Тестирование и отладка (0-3 балла):
- Полнота тестирования функций (0-1)
- Выявление и устранение ошибок (0-1)
- Стабильность работы системы (0-1)
Максимальная оценка: 23 балла Шкала перевода в оценку:
- 20-23 балла - “5”
- 16-19 баллов - “4”
- 12-15 баллов - “3”
- менее 12 баллов - “2”
Фамилия, имя: _________________________
Группа: _______
Оценка программного обеспечения:
1. Что получилось реализовать в программном обеспечении?
_________________________________________________
_________________________________________________
_________________________________________________
2. Какие проблемы остались нерешенными?
_________________________________________________
_________________________________________________
_________________________________________________
3. Какие улучшения можно внести в программы?
_________________________________________________
_________________________________________________
_________________________________________________
4. Какие математические алгоритмы мы применили?
_________________________________________________
_________________________________________________
_________________________________________________
5. Как мы реализовали коммуникацию между роботами?
_________________________________________________
_________________________________________________
_________________________________________________
6. Мой личный вклад в программирование:
_________________________________________________
_________________________________________________
_________________________________________________
Самая сложная проблема, которую мне удалось решить:
_________________________________________________
_________________________________________________
Степень моей удовлетворенности результатом (от 1 до 10): _______