Arduino RC bil med FPV Camera (11 / 15 steg)
Steg 11: IP-kamera (del 2) - programvara
C# programmet kan skicka kommandon till kameran, och Visa dess video ström. Kamerafunktioner är som standard inaktiverat på programstart. Detta är att förhindra programkrascher om kameran inte är tillgänglig.
Kameran får kommandon via http. Till exempel att strömma video i 640 x 480 upplösning är kommandot:
http://192.168.1.10/videostream.cgi?User=admin&pwd=&resolution=32&Rate=0
Se din IP kamera SDK-dokumentationen eller handbok för kommandostruktur. Jag har bifogat dokumentationen för min kamera till det här steget. Dessa kommandon kan också anges direkt i en Internet webbläsarens adressfält.
När kameran blir kommandot ovan, börjar det skicka ut en MJPEG videoström. Mitt program behandlar denna ström och visas i det grafiska Gränssnittet. Jag kunde inte hitta några bibliotek som bearbetar bäcken, så jag gjorde min egen funktion att göra det. Funktionen fungerar genom att skanna innehållet i strömmen. När den hittar den JPEG "Start av bild" byte (byte 0,1: 0xFF, 0xD8), det kommer att börja spara dataströmmen till en separat byte array. Det kommer att hålla att stream innehållet i matrisen tills den hittar den JPEG "Slut på bilden" byte (0xFF, 0xD9). Detta byte-array konverteras därefter in i en "memorystream", sedan en bitmapp, innan slutligen visas på GUI.
Programmet erbjuder två video streaming resolutioner. Högre upplösning (640 x 480) erbjuder bättre klarhet, men har en märkbart lägre bildhastighet. Den lägre upplösningen (320 x 240) är inte bra för bildkvalitet, men den högre hastigheten gör det ett bättre val om kör bilen av kameran.
Det finns också en knapp för att visa en stillbild. Denna funktion är beroende av några kod som jag hittade på en hemsida (http://www.codeproject.com/Articles/15537/Camera-Vision-video-surveillance-on-C). Inledningsvis använt jag bara den för felsökning ändamål, när du gör min video streaming funktioner. Jag skulle ta bort den, men bestämde sig för att lämna den i.
Eftersom kameran har pan/tilt rörelse byggdes, La jag även dessa funktioner i C# programmet. Höger styrspak på Xbox-handkontrollen har tilldelats kontrollen av kameraposition (uppdraget kontroll vanligtvis tilldelas "gratis look" i XBox spel). Kameran får sin pan/tilt instruktioner via http-kommandon. Till exempel flytta kameran genom är kommandot:
http://192.168.1.10/decoder_control.cgi?Command=0&User=admin&pwd=
Det finns separat http kommandon för motor start och stopp. För att omvandla förslag till mätbara "steg", använde jag förseningar, så att när med styrspak flyttas inom en gemensam kontrollant "frame", kameran bara flyttas ett steg. Motorerna är dock långt ifrån exakt, så dessa steg är mycket inkonsekvent i storlek. Jag ville från början att bestå av en "retur till centrum" funktion för kameran, men fann att kameran på grund av wonky steg storlekar, sällan tillbaka till mittläge. (Funktionen är fortfarande kvar i källkoden, men inte i bruk).