Алсын удирдлагат робот хийж үзсэн минь

Batzorigt Rentsen
Unimedia Solutions
Published in
5 min readMay 9, 2018

Юнимедиа Солюшнс компанид ажлын цагийн 10* хувьд нь дуртай сэдвээр судлагаа, хөгжүүлэлт хийх боломжтой. Хагас жилд нэг удаа дүгнээд 1, 2, 3-р байр эзлүүлж, мөнгөн урамшуулал олгохоос гадна ирээдүйтэй төслийг бүтээгдэхүүн болгож зах зээлд нэвтрүүлэхэд шаардлагатай төрөл бүрийн дэмжлэгийг үзүүлдэг юм.

*Google-ийнх 20% байдаг.

Одоогоос нэг жилийн өмнө

Дээрх боломжийг ашиглан дараах үзүүлэлт, чадвар бүхий роботыг хийх гэж оролдсон билээ.

  • Интернэт холболттой гар утас, комьютераас удирдах боломжтой.
  • Дулааны хэм, чийгшил, агаарын даралт гэх мэт орчны тухай мэдээллийг харуулах. Үзүүлэлт хэвийн, хэвийн бус эсэхийг ойлгомжтой дүрслэх.
  • Урд хэсэгт байрлах камерыг дээш-доош, зүүн-баруун тийш эргүүлэн харах өнцгийг өөрчлөх, видео дүрсийг харах боломжтой.
  • Давших-ухрах, баруун-зүүн эргэх чадвартай. Шилжих хөдөлгөөнийг камераас ирэх видео дүрсийн тусламжтай хянах-жолоодох боломжтой.
Удирдлагын програм
Тохиргоо

Хэрхэн бүтээв?

Янз бүрийн судлагаа, туршилт хийсэний эцэст дараах байдлаар эд анги, технологийн сонголт-шийдлийг хийсэн болно.

Эх бие: Тогтмол гүйдлийн хөдөлгүүртэй, хөнгөн цагаан аралтай танк

Орчны тухай мэдээллийг цуглуулагч-мэдрэгч: Дотроо 6 төрлийн мэдрэгч бүхий CC2541 SensorTag.

Хөдөлгүүрийн удирдлага: Дөрвөн мотор удирдах тул 2 ширхэг L293D хэрэг болов.

Хөдөлгүүрийн удирдлагын хавтан

Ерөнхий удирдлага: Raspberry Pi 2 Model B. Нэг хавтант компьютер.

Камер: Шөнийн дурантай Camera Module For Raspberry Pi. Оронд нь USB оролттой вэб камер байсан ч болно.

Камерыг удирдах хөдөлгүүр: Servo Motor 2 ширхэг

Камерын гар: Хөдөлгүүрийн роторыг (эргэлдэх гол) камертай холбогч буюу хөдөлгүүрийн эргэлдэх хөдөлгөөнийг камерын эргэлдэх хөдөлгөөн болгож хувиргагч. Зориулалтын гар захиалсан боловч ирээгүй тул өөрсдөө (хамтрагч минь) циллоид зүсэж хийсэн болно.

Танкны хөдөлгүүрийн тэжээл: 9V-н зай 4 ширхэг

Тэжээлийн үүсгүүр: 5V-н гаралт бүхий USB power bank. Үүгээр Raspberry Pi, түүнд холбогдсон камер, камер удирдах хөдөлгүүр болон бусад эд ангийг тэжээлээр хангана.

Интернэт холболт: USB WiFi dongle

Video Streaming: Бүх (десктоп, мобаил) браузер дээр асуудалгүй, хурдан байлгахын тулд mjpeg-streamer ашигласан. Linux motion* дээр хийж бас болно. *Урд нь FireFox-с бусад нь дэмждэггүй байсан болно.

Database: Хэрэглэгчийн мэдээллийг MySQL дээр хадгална.

Bluetooth холболт: USB Bluetooth dongle. Мэдрэгчээс ирэх мэдээллийг bluetooth-ээр хүлээн авна.

Програм хангамжийн архитектур-бүтэц

Software Stack

Web UI (Front end): Дэлгэцийг JQuery Mobile, графикийг jqPlot aшиглан зурсан.

Backend: UI-с ирэх хүсэлтийг хүлээж авч, камер болон танкны хөдөлгүүрийг удирдна. Бүхэлд* нь Java ашиглав (Jetty, Spark, HikariCP, JDBI, pi4j, Paho, j2html). Эдгээрийг багцлаад нэг jar болгоод ажиллуулна. *Зөвхөн камерийн серво моторыг python програмаар удирдна.

Sensor Data Reader: Java & Python. openHAB 2 plugin-г Java дээр, эцсийн хувилбарыг Python дээр бичсэн. openHAB-н UI бидний хэрэгцээнд бүрэн нийцэхгүй байсан тул JQuery Mobile руу шилжсэн болно.

MQTT Server: Sensor Data Reader мэдрэгчээc ирэх датаг Mosquitto руу илгээнэ. Энэхүү датаг backend дээр ажиллах web socket Mosquitto-с хүлээж аван, front end рүү дамжуулна. Front end талд jqPlot-оор график зурж харуулна.

Video Streaming: Бүх (десктоп, мобаил) браузер дээр асуудалгүй, хурдан байлгахын тулд mjpeg-streamer ашигласан. Linux motion* дээр хийж бас болно. *Урд нь FireFox-с бусад нь дэмждэггүй байсан болно.

Database: Хэрэглэгчийн мэдээллийг MySQL дээр хадгална.

Үр дүн

Дээрх софтвер стайкыг Raspberry Pi дээр бүгдийг нь ачааллаж үзэхэд:

  • JAR фаилын хэмжээ: Нууцлал хамгаалалт, web service, DB access функц ороод ердөө 44KB! Ашигласан сан, серверийн рантаимыг нэмбэл 6.9MB. Гэтэл Spring Boot HelloWorld App 19.3MB болдог.
  • Асах хурд: 1 секундын дотор! Spring Boot HelloWorld 4 секунд.
  • Ачаалал: Ердөө 0.2 буюу хүлээгдэж буй процес байхгүй!
Бүрэн ачаалалтай үеийн процессор, санах ойн зарцуулалтыг харуулсан байдал

Ийм олон процесс зэрэг ажиллаж байгаа гэхэд ямар ч хүлээгдэл, гацалт байхгүй.

Цаашид

Зам заагч (GPS tracking) функц нэмээд, зай-саад мэдрэгч, хөдөлгөөн мэдрэгчээр тоноглож саад тойрдог болговол хүний оролцоогүй бүрэн автомат жолоодлоготой болгож болно.

Завсрын хувилбар

Дээрх үр дүнд шууд хүрсэнгүй. Саад бэрхшээл (захиалсан эд анги хүлээгдэх, шаардлагатай материал олдохгүй байх, өөр зүйлээр орлуулах), бүтэлгүйтэл биднийг тойрсонгүй. Туршилтын зарим (eclipse kura, bluecove) хувилбар амжилтгүй болох тохиолдол байлаа. Зарим шаардлагатай сангийн эх кодыг татаж унших, засвар өөрчлөлт оруулан дахин build хийх гэх мэт энд дурдагдаагүй бусад олон технологийн судлагаа, жижиг сажиг ажил зөндөө байсан болно.

Sensor Data Reader: OPENHAB bluetooth binding-г Java (tinyb) дээр бичив.

Төгсгөлд нь

Хөгжүүлэлтийн ажлыг дан ганцаараа биш хоёулаа хийж гүйцэтгэсэн. Архитектур гаргах, технологийн судлагаа-сонголт, openHAB UI, back end base (core code, sample code), цахилгаан хэлхээний зохиомж, электроникийн эд ангийн сонголт, front/back end code -н refactoring, ерөнхий шийдлийг би, хамтрагч минь UI/front end-н анхны хувилбар, моторын удирдлагын хэсэг, камерын гар, хадаж шидэх, бэхлэж баглах, гагнах гэх мэт мехатроникийн ажлыг нугалсан болно.

Хүндэтгэх шалтгаанаар уг төсөлд оролцож чадаагүй боловч шаардлагатай эд ангиудыг захиалах ажлыг гардан зохион байгуулсан бас нэг хүн, санхүү болон бусад асуудлаар туслаж дэмжсэн компанидаа талархал илэрхийлье!

Уг төслөөр өргөн цар хүрээний мэдлэг туршлагыг бага боловч хуримтлуулж чадлаа. Энэ төсөл миний 2 дахь том polyglot programming төсөл болж үлдэв. Амжилттай дуусгахад шаардагдсан технологийн мэдлэг, стакыг жагсаавал ийм болохоор байна.

  • Front end programming
  • Back end programming
  • Embedded programming & IOT
  • Hardware Design & Implementation
  • Power Supply Calculation
  • Mechatronics
  • System Programming

Одоо бас нэг IOT төсөл хийж байгаа. Дуусахаар нь хуваалцна аа!

--

--