• No results found

4. METOD OCH GENOMFÖRANDE

4.2 KAMERAHUS MJUKVARA

I detta avsnitt kommer mjukvaran i kamerahuset behandlas som tagits fram samt beskrivning av programmen och programmens funktioner. I senare stycket behandlas MQTT som är ett TCP/IP protokoll för att föra över information via wifi eller internetkabel. Operativsystemet på Raspberry Pi 3 modell B som används är Rasbian Jessie 8 och mjukvaran är programmerad i kodspråket Python version 2.7.7 samt bash script i linuxmiljö.

4.2 / 1 WATCHPANDA.PY

Eftersom applikationen är tänkt att användas i industriell miljö och datorn inte kommer vara uppkopplad på en skärm är det av yttersta vikt att se till programmet för kantdetekteringen och kommunikationen med centraldatorn OCCU alltid körs. Och om de skulle krascha att det finns en autostartfunktion. Detta kodades till ett bash script vid namn watchpanda.

Watchpanda är ett bash script som varje minut startas i sudo crontab på Raspberry Pi. Den kollar aktiva processer och tittar om pythonscriptet analyze_net.py körs. Detta görs med kommandot ps ax | grep [a]nalyse_net.py. Om de körs så returneras strängen ”happy panda” till en log fil och om pythonscriptet inte finns med under aktiva processer så startar watchpanda scriptet analyze_net.py och returnerar strängen ”sad panda”.

4.2 / 2 ANALYZE_NET.PY

Analyze_net.py är huvudscriptet i kamerahuset och har hand om filmningen av tråget, kantigenkänningen från videoströmmen, kommunikationen med centraldatorn via MQTT samt LED-kommunikationen med operatören. Scriptet skickar en csv fil på begäran till centraldatorn innehållande tidsstämpel och position för kantdetektering för övre och nedre kanten som detekterats. Programbiblioteken som har importerats för scriptet är följande

• paho.mqtt.client • paho.mqtt.publish • time • threading • cv2 • math • imutils.video.pivideostream • picamera.array • picamera • imultis • numpy • logging • thread • datetime • csv • sys • os • logging • singleton • neopixel

där varje bibliotek har en mer eller mindre viktig del för programmets funktion. Ett programmeringsbibliotek är ett paket som innehållet färdiga funktioner man kan använda genom att anropa biblioteket. Paho.mqtt.client och paho.mqtt.publish används för

programmeringen inom MQTT. Time och datetime används för att programmera varje bilds tid. Threading och thread används för att skapa trådar i programmet för att kunna köra olika funktioner parallellt. För att kunna programmera kameran användes biblioteken picamera, picamera.array, imultis, imutils.video.pivideostream. Biblioteken i numpy och cv2 användes för

4.2 / 2 1.ALGORITM KANTIGENKÄNNING

För att kunna bestämma normalvinklen behöver kanterna på det reflekterade receiverröret hittas vilket härleds och ger en djupare förklaring kapitel 3; Teori. För att kameran ska kunna detektera vart kanterna på receiverröret är behöver bilden behandlas. Stor nytta har dragits av OpenCV-biblioteket (cv2) där många användbara funktioner för bildhantering finns. Nedan följer algoritmen som används för kantigenkänningen.

1. Läs in nuvarande bild från videoströmmen från pi-kameran. 2. Beskär bilden enligt definierad skanningsbredd.

3. Konvertera färgbilden till gråskala. 4. Utför kontrastutjämning – clabe. 5. Utför GaussianBlur på bilden.

6. Binärisera bilden med funktionen inRange.

7. Utför Dilate på bilden – utökning för att kompensera för förlorade pixlar på objekten. 8. Identifiera konturlinjer i bilden med funktionen findContours.

9. Sortera ut de 10 största konturerna med störst area. 10. Beräkna konturernas moment – centrumpositioner. 11. Spara ner alla konturernas area i en ny lista area[].

12. Justera konturernas centrumpunkter så att nollpunkten räknas från mitten av bilden i horisontellt led.

13. Sortera ut de konturer vars area är större än det definierade gränsvärdet. 14. Om åtminstone en kontur uppfyller kriteriet från punkt 13, utförs följande:

a. Identifiera den kontur vars centrumpunkt är närmast mitten på bilden i horisontalt led. b. Sätt de punkter från den identifierade konturen vars x-position är till vänster om

konturens moment i en ny lista left_edge[].

c. Identifiera de punkter hos konturen som är inom gränsvärdet för varje y-position i bilden genom att loopa genom pixelhöjden 10 - 100 med en steglängd på 5. Om fler än en punkt finns, beräkna dess medelvärde. Spara ner dessa värden i en ny lista L_points[].

d. Om inga punkter hittas inom gränsvärdet, tillskriv värdet [-1, -1] till denna y-position. e. Sätt de punkter från den identifierade konturen vars x-position är till höger om

konturens moment i en ny lista right_edge[].

f. dentifiera de punkter hos konturen som är inom gränsvärdet för varje y-position i bilden genom att loopa genom pixelhöjden 10 - 100 med en steglängd på 5. Om fler än en punkt finns, beräkna dess medelvärde. Spara ner dessa värden i en ny lista R_points[].

g. Om inga punkter hittas inom gränsvärdet, tillskriv värdet [-1, -1] till denna y-position. 15. Om inga konturer hittas i bilden som uppfyller gränsvärdena för arean. Sätt alla positioner

i L_points[] och R_points[] till [-1, -1]. 16. Sedan retuneras [L_points, R_points].

4.2 / 2 2. KOMMUNIKATION TILL CENTRALDATOR VIA MQTT

Kamerahuset kommunicerar mätdata och annan viktig information via Message Queuing Telemetry Transport (MQTT). Det är ett ”publish/subscribe” meddelande protokoll över TCP/ IP. De är anpassat för Internet of Things (IoT) enheter med låg bandbredd, hög latens eller opålitliga nätverk och är ett idiellt protokoll för maskin-till-maskin (M2M) kommunikation. [13] Det består av en central ”broker” som är installerad på centraldatorn OCCU och agerar som en server och ett antal klienter, kamerahusen, som ansluter. Stor nytta har dragits av biblioteken Paho.mqtt.client och paho.mqtt.publish när detta kodades. Anslutningen sker via internetkabel och varje kamerahus har en unik IP-adress och namn som är kopplad till ”brokern” i centraldatorn OCCU.

Tabell 1 visar kamerahusens namn och IP-adress i systemet som valdes.

Tabell 1: Det unika namnet på kameraenheterna och deras IP-adress i systemet.

Namn IP-adress Picam1 192.168.1.101 Picam2 192.168.1.102 Picam3 192.168.1.103 Picam4 192.168.1.104 Picam5 192.168.1.105 Picam6 192.168.1.106 Picam7 192.168.1.107 Picam8 192.168.1.108 Centraldator OCCU 192.168.1.123

MQTT låter klienterna ansluta som ”publisher”, ”subscribe” eller båda. Klienterna ansluter till en ”broker” som hanterar meddelanden. Även brokern kan ”publish” och ”subscribe”.

För att information ska kunna skickas mellan krävs det att broken och klienterna ”subscribe” till speciella ”topics” och skickar meddelanden till dem. I Tabell 2 visas de olika ”topics” och meddelanden ”brokern” i centraldatorn använder för att kommunicera med kameraenheterna.

Tabell 2: De olika topics och messages som används av OCCU för att styra kameran med hjälp av MQTT.

Topic Message Förklaring

control 1 2 3 4 5 6 7 - Starta mätning - Stoppa mätning - Avsluta programmet - Testa LED-belysning - Publicera mätdata - Skicka loggfiler till OCCU - Kontrollera vilka

kameraenheter är uppkopplade.

Topic Message Förklaring

Flags 11 10 21 20 31 30 41 40 51 50 61 60 - Analyze flag ON - Analyze flag OFF - Save flag ON - Save flag OFF - Speed flag ON - Speed flag OFF - Calibration flag ON - Calibration flag OFF - LED flag ON - LED flag OFF - Calibrate flag ON - Calibrate flag OFF

4.2 / 2 3. LED-KOMMUNIKATION

I scriptet finns även LED kommunikationen till operatören kodad. I Tabell 3 ges en beskrivning av de olika LED-färgerna och vad de signalerar.

Tabell 3: Tabell över LED-kommunikationen till operatören

Färg Tid Beskrivning

Gul 3s OU har startat upp

Röd 3s Scriptet analyze_net.py kan inte ansluta till centraldatorn eller om scriptet tappar anslutningen

Grön 3s Scriptet analyze_net.py har anslutet till centraldatorn

Vit - Kalibrering eller mätning pågår. Lyser under hela förloppet

Roterande blå - Scriptet är redo för nytt kommando och befinner sig mellan kalibrering och mätning eller efter mätning och skickade resultat

Roterande Regnbåge - Väntar medan centraldatorn OCCU analyserar och beräknar mätningsfilerna

Roterande Lila 3s Programmet avslutas

4.2 / 3 NTP TIDSSERVER

Då Raspberry 3 model B inte har ett inbyggt batteri för tid så hämtas tiden från internet eller en känd server. Om inte datorn har tillgång till internet finns ingen tillförlitlig källa för att tiden är korrekt. För att vara säker på att tiden är korrekt har en NTP server på centraldatorn upprättats och alla datorer i systemet synkroniserar sin tid mot den.

Related documents