МКМ-1904 Autopilot

Мы взялись за еще один интересный проект “Автоматизация рабочего места машиниста коммунальной машины”.

МКМ-1904 Autopilot
МКМ-1904 Autopilot

В нашем городе, Липецким заводом малых коммунальных машин производятся высокоманевренные коммунальные машины “Чистик”. Применяются для круглогодичного содержания дорог и придворовой территории. Руководство завода, стремясь идти в ногу со временем, постоянно ищет новые пути совершенствования, производимой на заводе, техники. Которые, в свою очередь, позволят удерживать завод на лидирующих позициях среди производителей коммунальной техники. Это и заставило руководство ЛЗМКМ обратились к нам с просьбой разработать “систему помощи” машинисту коммунальной машины МКМ-1904.

На данный момент обсуждается следующий функционал “системы помощи”:

  • Система рулевого управления с электроприводом. Блок управления, установленный на коммунальной машине МКМ-1904, анализируя информацию с датчиков, камер и маршрута, должен своевременно подавать сигнал на актуаторы управления педалями и поворотный рычаг ступиц. (Коробкой управлять не придется. Автомобиль на электротяге.)
  • Система предотвращения столкновения с пешеходом. У нас есть огромный опыт в детектировании пешеходов. Разработано большое число алгоритмов детектирования пешеходов в различных условиях. Тут мы впереди планеты всей.
  • Предупреждение о пересечение собственной траектории движения с траекториями движения других участников дорожного движения. Тут поможет алгоритм Лукаса-Канаде.
  • Система экстренного торможения. На скоростях выше 10 км/ч. Если система экстренного торможения обнаруживает, что расстояние до другого участника дорожного движения (транспортного средства, пешехода, велосипедиста, объектом инфраструктуры города) становится критически коротким, то первым делом она должна предупредить машиниста, если человек не предпримет никаких действий, то снизить скорость за счет рекуперации энергии, и при необходимости заблокировать колеса подав сигнал на блок ABS.
  • Интеллектуальное управление фарой с учетом освещенности, скорости движения, направления движения, положения установленного навесного оборудования, наличие транспортных средств движущихся во встречном направлении.
  • Движение по заданному маршруту. Маршрут передается с центрального сервера по беспроводному интернету. Обратно на сервер передается координаты машины Глонасс/GPS. Центральный сервер хранит историю перемещения машины, расхода топлива.
  • Предотвращение сбоев с помощью интеллектуальной диагностики.
    • Мониторинг. Состояние датчиков периодически передается на центральный сервер.
    • Анализ и оценка. На центральном сервер анализируются данные с датчиков машины, сравниваются с данными аналогичных машин.
    • Прогноз. Специальный алгоритм рассчитывает вероятность выхода из строя различных узлов.
    • Уведомления о вероятных поломках или приближающемся ТО рассылаются утвержденному списку лиц (например: водителю, механику, менеджеру завода изготовителя, представителю дилера)
  • Техническая помощь. Интерфейс для мгновенной связи с представителем дилера или заводом изготовителем. Интерфейс позволяет :
    • записать на обучающие курсы на нового машиниста (водителя);
    • записать на обучающие курсы инженера-механика (водителя);
    • запросить квалифицированную консультацию по настройке оборудования;
    • возможны другие услуги дилера и/или завода изготовителя
  • Обновления «системы помощи» должно происходить по беспроводному каналу интернета с центрального сервера.

Оборудования которое планируется использовать при реализации этого проекта:

  • стереокамеры
  • MRR радар
  • датчик угловой скорости колеса
  • датчики положения навесного оборудования
  • шаговые двигатели
  • платформа для разработки Jetson TX1

Детектирование пешеходов с движущегося погрузчика

В прошлом месяце обратился к нам заказчик со следующей проблемой. На территории его складов работает много вилочных погрузчиков и еще больше грузчиков и другого персонала у которых напрочь отсутствует инстинкт самосохранения. Идут, не то что под ноги не смотрят, но даже не видят движущиеся погрузчики. Как минимум раз за смену кто-нибудь обязательно пободается с погрузчиком. Операторы погрузчиков — ребята вроде толковые, но надеется только на их внимание опасно.  Надпись “не стой под стрелой” не всем понятна из-за того что не все умеют читать, тем более еще и по русски. Несчастных случаев пока не было, но дожидаться руководство их не собиралось.

Для решения вышеизложенной проблемы нами было предложено следующее:

  • оборудовать вилочные погрузчики видеокамерами;
  • по видеопотоку контролировать приближение пешеходов к погрузчику;
  • при приближении пешехода к погрузчику ближе чем на 5 метров подавать оператору погрузчика свето-звуковой сигнал опасности.
  • весь персонал прибывающий на складе снабдить жилетами с нанесением идентификационных данных в виде баркода. Это позволит не только информировать оператора погрузчика об опасном сближении с пешеходом но и хранить информацию о нарушителях.

Видеопоток с камер принимает одноплатный компьютер nanopi fire3 с установленной на нем UbuntuCore16.04 with Qt5.9 and OpenGL. Алгоритм распознавания пешеходом в режиме реального времени отслеживает опасное сближение и подает свето-звуковой сигнал оператору погрузчика.

Ниже пример кода отслеживания пешеходов.

#include "opencv2\highgui.hpp"
#include "opencv2\imgproc.hpp"
#include "opencv2\objdetect\objdetect.hpp"
#include "opencv2/video/tracking.hpp"
#include <vector>
#include <stdio.h>
#include <Windows.h>
#include <iostream>
#include <time.h>
#include <ctime>

using namespace cv;
using namespace std;

int main(int argc, const char** argv)
{

 VideoCapture cap("input.mov");
 VideoWriter outputVideo;

outputVideo.open("video4.wmv", CV_FOURCC('W', 'M', 'V', '2'), cap.get(CV_CAP_PROP_FPS), Size(640, 480), true);

 CascadeClassifier detectorBody;
 CascadeClassifier detectorUpper;

 string cascadeName1 = "cascadeName.xml";
 string cascadeName2 = "cascadeName.xml";

 bool loaded1 = detectorBody.load(cascadeName1);
 bool loaded3 = detectorUpper.load(cascadeName2);

 for (;;)
 {

  bool Is = cap.grab();
  if (Is == false) {

   cout << "Ошибка захвата видео" << endl;
   break;
  }
  else {
                           
   const clock_t begin_time = clock();

   vector<Rect> human;
   vector<Rect> upperBody;

   Mat img;
   Mat original;

   cap.retrieve(img, CV_CAP_OPENNI_BGR_IMAGE);
   resize(img, img, Size(640, 480));
   img.copyTo(original);
   cvtColor(img, img, CV_BGR2GRAY);

detectorBody.detectMultiScale(img, human, 1.1, 2, 0 | 1, Size(40,70), Size(80, 300));
detectorUpper.detectMultiScale(img, upperBody, 1.1, 2, 0 | 1, Size(40, 70), Size(80, 300));
  
colored image
   if (human.size() > 0) {
    for (int gg = 0; gg < human.size(); gg++) {

    rectangle(original, human[gg].tl(), human[gg].br(), Scalar(0,0,255), 2, 8, 0);

    }
   }

colored image
   if (upperBody.size() > 0) {
    for (int gg = 0; gg < upperBody.size(); gg++) {

         rectangle(original, upperBody[gg].tl(), upperBody[gg].br(),  Scalar(255,0,0), 2, 8, 0);

    }
   }
          clock_t diff = clock() - begin_time;
          char buffer[126];
          sprintf(buffer, "%d",diff);
           putText(original, buffer, Point(100, 20), 1, 2, Scalar(255, 255, 255), 2, 8, 0);
           putText(original, "ms" , Point(150, 20), 1, 2, Scalar(255, 255, 255), 2, 8, 0);
    namedWindow("prew", WINDOW_AUTOSIZE);
    imshow("prew", original);
    outputVideo << original; 
    int key1 = waitKey(20);
  }
 }
}

Несколько камер установленных в различных положениях на погрузчике, позволяет оператору контролировать пешеходную деятельность вокруг посредством сигнальных ламп и сирен установленных в кабине погрузчика.  Это новый подход к обеспечению безопасности пешеходов вокруг транспортных средств.

Четкие звуковые сигналы тревоги и система предупредительных световых сигналов предупреждают оператора погрузчика и пешехода в находящихся в опасной близости от рабочего погрузчика.

Детектирование пешеходов

Одно дело, когда программа на компьютере с хорошим процом, 8 Гигиами ОЗУ обнаруживают людей в коридоре, где работают разработчики,  другое дело, когда тот же алгоритм должен распознать пешехода, работая на одноплатнике (например nanopi fire3) беря видео поток с камеры закрепленной на лобовом стекле Вашего автомобиля. Причем этому алгоритму нужно детектировать пешехода в реальном времени, чтобы вовремя этого пешехода и избежать избежать столкновения.

Наши исследования показали, что чтобы добиться конечной цели (избежать столкновения) алгоритм исполняемый на железе с малой производительностью должен не только детектировать пешехода но и анализировать траекторию его движения. Это позволяет избежать столкновения “предвидя его”. А использование патернов поведения позволяет обнаружить пешеходов намного быстрее и точнее других алгоритмов. Также наш алгоритм, совершать вдвое меньше ошибок, чем существующие системы. Что, в свою очередь, приводит к изящной остановкой, а не к внезапным страшным торможениям.

Еще для экономия вычислительнх мощностей наши разработчики прибегают к  быстрому и постепенному вырезанию областей, которые не содержат людей (например, небо или пустая дорога). Глубокое обучение на последних этапах комплексного распознавание образов приводит к экономию большого числа вычислительной мощности, обычно необходимой для распознавания пешеходов, поскольку алгоритм ограничивает внимание только на нескольких областях, а не больших кусками экрана.