Объект – датчики и моторы базового комплекта Lego Mindstorms EV3, программное обеспечение.
Предмет – электронный прототип робота пожарного.
Новизна состоит в том, что в данной работе представлена разработка прототипа автономного робота пожарного с помощью Lego Mindstorms EV3
Цель работы – на базе конструктора Lego Mindstorms EV3 провести исследование по возможности создания прототипа робота - пожарного.
Задачи:
Вложение | Размер |
---|---|
opisanie_konkursnoy_raboty.docx | 415.85 КБ |
X Республиканский конкурс
научно-технического творчества детей
“Ай-роботы »
«Прототип робота - пожарного»
Команда: Robocup
2023
Оглавление.
Введение.
На сегодняшний день, как в нашей республике, так и по всей стране и в мире, в летний период происходит много лесных пожаров. Во многих случаях, пожары находятся в труднодоступных местах. Не всегда люди могут пройти сквозь горящий лес без риска для жизни. Передвигаясь пешком или десантируясь, пожарные не могут взять с собой достаточный запас воды и оборудования. Людям нужна помощь в борьбе с лесными пожарами. Нужна специальная техника.
Так, немецкие инженеры разработали автономного робота, способного мониторить лесные пожары. Робот по имени OLE бегает по лесу со скоростью 20 км/час в поисках источников возгорания. Делать искусственное дыхание и оказывать первую медицинскую помощь робот не может, но зато может вызвать подмогу и самостоятельно потушить пожар, используя импульсный огнетушитель. Оболочка роботов сделана из специального керамического волокна, способного выдерживать 1300 градусное пекло.
Еще одна разработка - роботизированная машина AFG (Autonomous Fire Guard) - представляет собой «автобота», оснащенного всем необходимым для проведения разведки и тушения небольших возгораний в лесу. Для выполнения задач, связанных с пожаротушением, робот AFG может иметь разнообразное навесное оборудование. Он может являться и экскаватором, бульдозером и пилой. Так же его можно трансформировать в транспортное средство, которое можно использовать для эвакуации людей, оказавшихся в зоне пожара. Для увеличения проходимости, колеса заменяются на гусеницы.
Мы тоже решили попробовать разработать и создать прототип робота - пожарного.
Объект – датчики и моторы базового комплекта Lego Mindstorms EV3, программное обеспечение.
Предмет – электронный прототип робота пожарного.
Новизна состоит в том, что в данной работе представлена разработка прототипа автономного робота пожарного с помощью Lego Mindstorms EV3
Цель работы – на базе конструктора Lego Mindstorms EV3 провести исследование по возможности создания прототипа робота - пожарного.
Задачи:
Работа осуществлялась в несколько этапов.
Первый этап.
На этом этапе проводилось знакомство с литературой по имеющимся конструкциям роботов - пожарных. На этом этапе было решено разрабатывать модель робота, который бы самостоятельно проникал в труднодоступные места и передавал окружающую обстановку оператору.
Второй этап.
На втором этапе анализировались модели робота. Было решено использовать модель, которая способна сама преодолевать препятствия в виде завалов деревьев, подавать звуковые сигналы и снимать окружающую обстановку на камеру, а так же какие моторы будут использованы в модели.
Третий этап.
На этом этапе осуществлялась сборка модели.
Технические характеристики моделей.
Модель пожарного представляет собой робота размерами: 247х220х200 мм.
Модель прототипа робота пожарного. Конструкцию модели решено было использовать по подобию танка, т.е. кабина (микроконтроллер управления), 2 пилы для распила поваленных деревьев, нож для расчистки пути, 2 больших мотора управления гусеницами, 2 больших мотора управления пилами, средний мотор для вращения камеры, водонакачивающий насос, мелкие детали из конструктора.
Прототип должен прибыть на место пожара и, прокладывая себе дорогу с помощью пил и ножа, обследовать окружающую обстановку. Так как на нем предусмотрена платформа с емкостью для воды и насос, при необходимости он должен осуществлять тушение пожара. Подачу воды можно организовать по команде оператора, либо постоянно. В связи с тем, что в конструкторе Lego Mindstorms EV3 нет устройства насоса, на данной модели насос взят из другого конструктора.
Четвертый этап.
На этом этапе разрабатывался алгоритм работы пожарного.
Для написания программы передачи видеоизображение было решено использовать платформу LeJos, так как программное обеспечение EV3 не позволяет осуществить съемку и передачу изображения. Для создания программы на LeJos решено использовать второй блок управления.
Листинг программы
package ru.nkgymnasium.moipog;
import java.io.IOException;
import lejos.hardware.Button;
import lejos.hardware.motor.EV3MediumRegulatedMotor;
import lejos.hardware.port.MotorPort;
import lejos.robotics.RegulatedMotor;
import lejos.utility.Delay;
public class Pog {
private static RegulatedMotor mB = new EV3MediumRegulatedMotor(MotorPort.B);
private static RegulatedMotor mC = new EV3MediumRegulatedMotor(MotorPort.C);
private static RegulatedMotor mA = new EV3MediumRegulatedMotor(MotorPort.A);
private static RegulatedMotor mD = new EV3MediumRegulatedMotor(MotorPort.D);
/*
* Вся основная идея работы с камерой сводится к обработке получения видео в отдельном потоке
* Thread как раз позволяет это сделать
* Класс VideoViewer наследует интерфейс Runnable для работы в отдельном потоке
*
*/
public static void main(String[] args) throws IOException {
// Инициализация потока с нужным нам для выполнения классом
Thread videoViewerThread = new Thread(new VideoViewer());
// Старт потока
videoViewerThread.start();
//Далее идет программа движения в цикле вращение камерой, вращение пил
mB.setSpeed(10);
mC.setSpeed(510);
mC.forward();
mD.setSpeed(510);
mD.forward();
mA.synchronizeWith(new RegulatedMotor[] {mD});
while (Button.ESCAPE.isUp()) {
// Camera rotation
mB.rotateTo(90);
Delay.msDelay(1000);
mB.rotateTo(0);
mB.rotateTo(-100);
Delay.msDelay(1000);
mB.rotateTo(0);
// Start boer
mC.forward();
mD.forward();
}
}
}
package ru.nkgymnasium.moipog;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import javax.imageio.ImageIO;
import lejos.hardware.BrickFinder;
import lejos.hardware.Button;
import lejos.hardware.ev3.EV3;
import lejos.hardware.video.Video;
public class VideoViewer implements Runnable {
private static final int WIDTH = 160;
private static final int HEIGHT = 120;
private static final int NUM_PIXELS = WIDTH * HEIGHT;
private static final int FRAME_SIZE = NUM_PIXELS * 2;
public VideoViewer() {
}
@Override
public void run() {
EV3 ev3 = (EV3) BrickFinder.getLocal();
Video video = ev3.getVideo();
try {
video.open(WIDTH, HEIGHT);
byte[] frame = video.createFrame();
BufferedImage img = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
ServerSocket ss = new ServerSocket(8080);
Socket sock = ss.accept();
String boundary = "Thats it folks!";
writeHeader(sock.getOutputStream(), boundary);
while (Button.ESCAPE.isUp()) {
video.grabFrame(frame);
for (int i = 0; i < FRAME_SIZE; i += 4) {
int y1 = frame[i] & 0xFF;
int y2 = frame[i + 2] & 0xFF;
int u = frame[i + 1] & 0xFF;
int v = frame[i + 3] & 0xFF;
int rgb1 = convertYUVtoARGB(y1, u, v);
int rgb2 = convertYUVtoARGB(y2, u, v);
img.setRGB((i % (WIDTH * 2)) / 2, i / (WIDTH * 2), rgb1);
img.setRGB((i % (WIDTH * 2)) / 2 + 1, i / (WIDTH * 2), rgb2);
}
writeJpg(sock.getOutputStream(), img, boundary);
}
video.close();
sock.close();
ss.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
private void writeHeader(OutputStream stream, String boundary) throws IOException {
stream.write(("HTTP/1.0 200 OK\r\n" + "Connection: close\r\n" + "Max-Age: 0\r\n" + "Expires: 0\r\n"
+ "Cache-Control: no-store, no-cache, must-revalidate, pre-check=0, post-check=0, max-age=0\r\n"
+ "Pragma: no-cache\r\n" + "Content-Type: multipart/x-mixed-replace; " + "boundary=" + boundary + "\r\n"
+ "\r\n" + "--" + boundary + "\r\n").getBytes());
}
private void writeJpg(OutputStream stream, BufferedImage img, String boundary) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(img, "jpg", baos);
byte[] imageBytes = baos.toByteArray();
stream.write(
("Content-type: image/jpeg\r\n" + "Content-Length: " + imageBytes.length + "\r\n" + "\r\n").getBytes());
stream.write(imageBytes);
stream.write(("\r\n--" + boundary + "\r\n").getBytes());
}
private int convertYUVtoARGB(int y, int u, int v) {
int c = y - 16;
int d = u - 128;
int e = v - 128;
int r = (298 * c + 409 * e + 128) / 256;
int g = (298 * c - 100 * d - 208 * e + 128) / 256;
int b = (298 * c + 516 * d + 128) / 256;
r = r > 255 ? 255 : r < 0 ? 0 : r;
g = g > 255 ? 255 : g < 0 ? 0 : g;
b = b > 255 ? 255 : b < 0 ? 0 : b;
return 0xff000000 | (r << 16) | (g << 8) | b;
}
}
Пятый этап. На этом этапе проверялись технические возможности модели.
Шестой этап. На этом этапе анализировались полученные результаты по данной модели.
При анализе результатов выяснилось следующее: используя только детали конструктора Lego Mindstorms EV3, не получилось сделать полноценный насос для подачи воды, пришлось заимствовать насос из другого конструктора. Так же передача изображения в данной модели не позволяет следить за окружающей обстановкой на большом удалении от оператора. Блютуз – это неустойчивый вид связи. После перевода программного обеспечения на базу LeJos появилась возможность подключения различных дополнительных датчиков (например, датчик загазованности, влажности и т.д.), управления всеми двигателями, передачи потокового видео прямо на компьютер.
Заключение.
После проведенных исследований было сделано заключение, что на базе программного обеспечения EV3 возможно создать достаточно работоспособную модель такого робота. Необходимо перевести все управление на LeJos и написать другую программу. На базе данного программного обеспечения предусматривается съемка окружающей обстановки, передача этих данных на пульт диспетчера. При необходимости, к роботу можно прицепить плуг для прокладки минерализованной полосы.
Таким образом, на базе конструктора Lego Mindstorms EV3 можно собрать действующую модель такого транспорта, которая достаточно реалистично показывают технологию организации пожарной операции.
Для дальнейшего усовершенствования прототипа робота-пожарного необходимо продолжить изучение языка Java.
Список литературы.
Прекрасное далёко
Астрономический календарь. Март, 2019
5 зимних аудиосказок
Ночная стрельба
Новогодние гирлянды