Hi!
Ich möchte eine USB Kamera (webcam) an einem Microrontroller
betreiben. hat jemand erfahrung mit so was?
Druckbare Version
Hi!
Ich möchte eine USB Kamera (webcam) an einem Microrontroller
betreiben. hat jemand erfahrung mit so was?
Eine USB Webcam ist sehr schwer abzugreifen da du einen sog. USB Host programmieren müsstest.
Für genauere Infos benutz mal die Suche
Es gibt zwar Mikrocontroller die einen USB Host implementiert haben, allerdings sind die nicht so weit verbreitet unter Bastlern so das du wenig Infos dazu bekommen wirst, außerdem müsstest du zudem noch das Protokoll deiner Webcam rausbekommen, ich weiß nicht ob das irgendwie genormt ist. Und Hersteller halten sich das meist bedeckt was sowas angeht...
Ich würde es eher lassen ;-)
MfG Kjion
Wie wäre es, wenn ich das Signal einer Kamera mit ganz normalem
Videosignal nehme. Dazu bräuchte ich einen sehr schnellen A/D-Wandler.
Weis jemand, wo's die gibt? Hab auch schon mal was von
Video-Frame-Buffern gehört, die extra für so was konstruiert sind... ???
Hallo,Das wäre dann ein Flash-Wandler. Teuer und aufwendig.Zitat:
einen sehr schnellen A/D-Wandler.
Wenn die Auflösung nicht so hoch sein soll kannst du dir mit
einer Widerstandkette und ein einigen schnellen Komparatoren
behelfen. Bis zu 10 Stufen kein Problem.
Wenn es sich um ein Standbild handelt, kann eine Sample & Hold
Schaltung helfen, die das Bild vesetzt zu immer späteren Zeitpunkten abtastet.
Die Spannung des S&H kannst du dann mit einem normalen AD-Wandler erfassen.
Das Bild muss aber über mehrere Videoframes "stillhalten" bis es komplett erfasst ist.
Deshalb Standbild.
Gruß Jan
So etwas hab ich mir auch schon mal überlegt, eine USB-Kamera zu benutzen, weil die bei Ebay seehr günstig sind ( ~12 €)
Aber da das ganze USB-Protokoll für benötigt würde, dacht ich mir ich brech' die USB-Cam auf und benutze nur den Sensoren mit hoffentlich digitalem Ausgang.
mfg Clemens
Och meno, mein Beitrag \:D/
mfg
Hallo,Das hab ich mir auch schon gedacht.Zitat:
dacht ich mir ich brech' die USB-Cam auf und benutze nur den Sensoren
Aber ich fürchte, bei den heutigen Preisen ist Sensor uns
USB-Logik bestimmt alles integriert.
Bitte sag mir, was dabei rauskommt.
Wenn der Sensor einzeln zugänglich ist, kauf ich mir auch eine,
und zerlege die noch an der Kasse,
während die den Garantiebeleg ausfüllen. :-)
Gruß Jan
Das würde mich auch interessieren!
Ich hatte mir das mal so überlegt, aber wusst ich halt nicht genau ob das nicht wie gesagt mit integriert ist.Zitat:
Bitte sag mir, was dabei rauskommt.
Waer aber mal interessant son ding aufzumachen, hab aber leider keine.
mfg Clemens
mein vorschlag:
cypress cy7c67300 smd usb-host von segor für 15 euros
compiler von cypress.com für 300 MB
dazu noch:
etwas sram
ein oder zwei usb cameras
ein schnelles interface (ethernet controller oder eventuell wlan)
ich hab leider kein dsl, um die compiler cd runterzuladen und auch keine möglichkeit eine passende platine zu ätzen.
würde sich aber eventuell lohnen. der cypress ist ein 48 mhz risc mit 2/4 usb ports, spi, rs232. also recht leistungsfähig. das sdk enthält bereits eine usb low level api mit bulk transfers und was noch dazu gehört. für viele usb cameras gibts linux source.
ideal wär dann noch ein wlan stick.
also:
wer lädt die compiler cd runter?
wer hilft beim platinen layout?
wer hat ne bessere idee?
wer hat noch Zeit übrig für so ein interessantes Projekt ?Zitat:
wer lädt die compiler cd runter?
wer hilft beim platinen layout?
wer hat ne bessere idee?
Gruß Jan
Wie wäre es für den Anfang mit einem universellen USB<->µController Interface.
An so etwas hätten nehm ich mal an sehr viele Interesse. Nicht nur für Kameras, sondern auch für WLAN-, Speicher-Sticks, Maus, ...
Wolfgang
Hallo,
Ja unbedingt, hochinteressant.Zitat:
An so etwas hätten nehm ich mal an sehr viele Interesse.
Nicht nur als Entwicklungsaufgabe,
aber auch zur Anwendung,
wenn man den ganzen Kram den es mit USB gibt,
am Mikrocontroller anschliessen könnte....Super
Gruß JAn
Zitat:
Zitat von JanB
Gute Interfaces suche ich auch immer. Hoffentlich wird das USB Interface im Controller nicht zu kompliziert.Zitat:
Zitat von Wolferl
Manfred
Ich kenne mich mit USB nicht sonderlich gut aus, aber mich ärgerts eben wenn ich für eine WLAN karte €150 zahlen soll, wenn es USB-Sticks teilweise schon ab 20 E gibt.
Ausserdem Notebook ohne RS232...
Anders gefragt, weiss jemand wie es Leistungsmässig mit einem FTDI aussieht? FTDI2µC-Universalinterface? Die wären leicht zu beschaffen und der Pitch lässt sich noch bequem löten.
Wolfgang
Hallo Wolfgang,
FTDI ??
Was ist das ?
Gruß Jan
http://www.ftdichip.com/Products/FT2232C.htm
gibts bei Reichelt für ca. 10€
Wolfgang
Was heißt "Leistungsmäßig" ??
Funktionieren tun die Dinger sehr gut, ich hab hier gerade einen USB<>seriell Wandler mit einem virtuellen ComPort unter Windows am laufen.
Ein sehr hohen Datendurchsatz wirst du mit dieser Methode nicht bekommen, allerdings gibt es auch noch andere Modi.
Allerdings sind das USB Slave Bausteine, es ging vorher ja irgendwie um USB Hosts...
MfG Kjion
Hallo Wolferl,
Danke für die Info.
Wenn ich das richtig sehe, ist dieser Chip (FTDI) für unser Vorhaben nicht geeignet.
Er sitzt quasi auf der "falschen Seite" des USB -Bus und arbeitet "verkehrtherum.
Er ist für eine USB -> RS232 Umsetzung o.ä. gedacht.
Wir bräuchten das Gegenteil dieses Chips.
Das wäre derjenige, der auf dem Motherboard des PC sitzt.
Und den müssten wir per Microcontroller ansteuern.
Aber dann erben wir auch das ganze Protokollgedöns.
Oder sehe ich das falsch ?
Trotzdem, die Idee sämtliche USB-Geräte mit dem uC verwenden zu können,
ist einfach zu interessant.
Lasst uns das weiter verfolgen...
Vielleicht kriegen wir was hin...
Gruß Jan
War nur ein Vorschlag, wie gesagt, ich hab nicht viel Ahnung von USB.
Das USB ist ja nicht das größte Problem, sondern vielmehr
das Datenprotokoll der Kamera.
Ich hab mal ein bischen gegoogelt und z. B. das hier gefunden: http://webcam.sourceforge.net/
Ich bin kein studierter Mausschubser, aber ich denke anhand von den source codes der treiber sollte sich doch das Datenprotokoll ableiten lassen, oder stell ich mir das zu einfach vor?
Wolfgang
Hier noch was bzgl. WLAN und USB:
http://orinoco-usb.alioth.debian.org/#protocol
http://orinoco-usb.alioth.debian.org/doc/NOTES.txt
Hallo
Es gibt eine Windows SDK für die Logitech Quickcam. Leider funktioniert sie nicht 100%, ein paar Funktionen gehen einfach nicht.
Ich habe damit ein paar Experimente zu Stereosehen gemacht, wobei die Kamera zwischen den zwei Aufnahmen seitlich verschoben wurde.
Mit Hilfe eines Diaprojektors habe ich strukturiertes Licht auf den Sichtbereich der Kamera projeziert. Man kann die beiden Bilder dann korrelieren. Diese Korrelation ist aber ziemlich aufwendig, so daß selbst das einfachste Verfahren bei 640x480 Pixeln 1-3 s auf einem 1.7GHz Celeron benötigt. Dabei kommt dann aber auch erst mal nur ein Graustufenbild heraus, bei dem jedes Pixel einer Entfernung entspricht.
Deshalb mein Tip: Für Bildverarbeitung immer ein Laptop oder PC verwenden, dann erledigt sich auch die Anschlussfrage über USB.
Man könnte ja auch eine Funkkamera nehmen, den Empfänger am PC anschließen und über WLAN den "dummen" Robi steuern.
Gruß
Andreas
Prima Leistung, wie sieht es mit einem 64x48 Bild aus, das geht dann in 16ms, oder ein 16x12 Bild in 1ms?Zitat:
Diese Korrelation ist aber ziemlich aufwendig, so daß selbst das einfachste Verfahren bei 640x480 Pixeln 1-3 s auf einem 1.7GHz Celeron benötigt.
Für ein erstes Abstandsbild würde ich gerne eine geringere Auflösung in Kauf nehmen.
Dann käme der Controller wieder in Spiel, um die Zeit bis das Bild gebraucht wird sinnvoll zu nutzen. O:)
Manfred
Hallo Manfred
Das Problemist, daß bei diesem Verfahren dann auch die Auflösung der Entfernungsmessung entsprechend geringer wird.
Ich habe mit Pixelverschiebungen von bis zu 64 gearbeitet. Außerdem kann man noch ein bischen Interpolieren, so daß man dann auf vielleicht 100-250 diskrete Abstandswerte kommt. Viel genauer geht es dann aber mit diesem Verfahren nicht mehr. Außerdem gibt es Ränder links und rechts, die nicht ausgewertet werden können.
OK. Es gibt aber noch andere Verfahren: Z.B. einen Strichlaser auf den Sichtbereich der Kamera projezieren und die Verschiebung des Strichs auswerten. Das geht wesentlich schneller. Man erhält dann aber auch nur ein "Radarbild" der Begrenzungen im Sichtbereich, statt ein 3-D-Bild.
Für viele Anwendungen ist das aber völlig ausreichend.
Trotzdem: Wer schnell Erfolg haben will, sollte einen PC nutzen. Was noch dazu kommt: Logitech-Kameras haben eine JPEG/MPEG-Schnittstelle, erst im PC werden die Bilder wieder zu Bitmaps. Auch das kostet Rechenzeit.
Man muß das ganze ja graphisch darstellen können.
Deshalb: Grundlagenforschung am PC, wenn man dann die richtigen Algorithmen kombiniert hat, auf den Roboter übertragen.
Gruß
Andreas
Hi,
ich beschäftige mich auch gerade damit wie ich die entfernung mit einer CCD Kamera messen kann. Das system "A Real-time Laser Range Finding Vision System" finde ich sehr gut nur finde ich die Art wie sie es gelöst haben sehr altmodisch.
Mein vorschlag also.
CCD -> SAA71XX -> CPLD -> CPU
CCD Kamera da sie sehr lichtempfindlich sind
SAA71XX Video Decoder habe mich noch nicht wirklich entschieden
CPLD da er sehr schnell Bildpunkte vergleichen könnte
CPU werde ich wohl einen Atmega 128 nehmen da ich ihn gut kenne
Die Kamera gibt ein video signal zum SAA71XX die digitalen Daten werden vom CPLD ausgewertet also wo sich der laser befindet. Die CPU braucht dann nur noch den Abstand berechnen.
hört sich gut an.
gruß
patrick
Wie wäre es denn mit einem solchen Chip? Hab keine Ahnung wie man sowas nutzt aber den gibt es eben, um USB-Hosts zu basteln.
http://www.semiconductors.philips.co...ISP1161A1.html
Schaut euch mal das hier an:
Optisch-reaktive Hindernisvermeidung
http://www.erkenntnishorizont.de/ki/...php?screen=800
Also für kleinere Roboter mit "wenig" Rechenleistung ist das doch Ideal, finde ich.
Das auswerten wäre hier denke ich schon mit z.B. ner CMUCam und nem ATmega möglich.
Und EX2 zu deinem Stereosehen. Ich versteh dich grad nicht mit dem Pixelverschiebung von 64? Von der Epipolarlinie?
Und noch ne Frage. Was machst du wenn auf einem Bild z.B. eine schwarze Fläche ist und alle schwarzen Pixel im Bild die gleichen Farbwert haben? Errechnest du dann die Enfernung der ganzen schwarzen Fläche, oder wie erkennst du dann den richtigen Pixel aus lauter gleichfarbigen im anderen Bild wieder?
Gruß Muraad
^
das ist von mir.
Ist schon schwer sich einzuloggen O:)
Gruß Muraad
Hallo Leute, ich bin neu hier, aber ich muss mal was dazu sagen ;o)
Was ich weiß, ist es mit USB-Geräten nicht so direkt einfacht. Das liegt nicht nur am Protokoll sondern auch an der Geschwindigkeit. Soweit es mir bekannt ist, läuft ein ATMega128 mit maximal 14MHz. USB 1.1 (Full Speed - wird von fast allen USB-Geräten benötigt) hat aber eine Übertragungsrate von 12MBit. Das könnte ein wenig knapp werden ...
Hallo Leute, irgendwie ist mein Post nicht angekommen.
Gut dann schreib ichs nochmal.
Ich denke mal, dass bei USB-Geräten an einem uC noch ein weiteres Problem dazukommen dürfte. Soweit ich weiß, benütigen alle USB-Kameras mind. USB 1.1 (Full Speed), das wäre dann eine Übertragungsrate von 12MBit. Das könnte aber mit einem ATMega mit 14MHz zu einem kleinen Problem werden, wenn die Pakete noch aufbereitet werden müssen.
Allerdings weiß ich, dass man die Handy-Kamera von Sony Ericson (MCA 25) ziemlich einfach anschließen kann. Sie hat einen eigenen Controller und man brauch nur den Speicher der Kamera auszulesen.
Lass es ruhig ein bisschen wirken, das letzt Post zu dem Thema ist vom 27.3.05. Nach 10 Monaten Ruhe haben sich bei den Beteiligten die Schwerpunkte des Interesses erfahrungsgemäß etwas verschoben.Zitat:
Hallo Leute, irgendwie ist mein Post nicht angekommen.
Der Hinweis auf die Handy-Kamera von Sony Ericson (MCA 25) ist sicher gut.
Manfred
Nein, ich hab nicht gemeint, dass er bei den Leuten nicht angekommen ist, sondern im Board. Ich hab den Post geschrieben, aber er wurde im Forum nicht angezeigt ;)
hi,
ich würde auch gerne einen roboter per kamera steuern (hab mir schon das RN-Wissen Tutorial zur Bildverarbeitung durchgelesen).
weiß jemand ein buch oder tutorial in dem alles erklärt wird (inkl. anschließen der kamera, etc.).
ich meine, irgendwo müssen das ja auch die leute die das jetzt alles können gelesen haben!?
Da schau her, diese Diskussion hatte ich nicht gefunden, als ich meinen Thread "Sick-ähnlicher Laserscanner im Selbstbau" startete.
Ein echtes Ergebnis an dieser Stelle hier hätte mir auch sehr geholfen - scheint es aber nicht zu geben, vielmehr ist die Sache eingeschlafen. Wirklich eingeschlafen? Hallo? Hat keiner mehr Interesse?
Schade.
Was ich noch einwerfen wollte: Mittlerweile gibt es recht günstig einen Digitalisierer für Videosignale, damit lassen sich die wohl empfindlicheren CCD-Kameras nutzen. Eigentlich müsste man dieses kompakte Dingelchen umprogrammieren und die Bildverarbeitung gleich dort laufen lassen. Und nur das Ergebnis über, ähem, USB an den Host übertragen.
Andere Frage: Hat es jetzt schon jemand geschafft, ein Videosignal auf Microcontrollerbasis zu digitalisieren und zu verarbeiten? Das wäre ja mein Ziel. Der dazu nötige Flash-Wandler wurde weiter oben als sehr aufwendig und teuer genannt - finde ich aber nicht: Gibts z.B. bei Reichelt als DIL-Bauteil für glaube ich 9 Euro. Siehe auch Thread "Flash-Wandler".
Gruß
Tom
Hallo
Wie wäre es mit einer Labtech Webcam Pro?
Die verwendet einen Agilent HDCS-2020 Sensor , HDCP-2010
Bildprozessor und einen USB Slave.
Den USB Slave entfernt man und schließt den Mikrokontroller direkt an den Bildprozessor an.
Was haltet ihr davon?
Ich möchte es einmal versuchen.
LG
Michael
Hat schonmal jemand ausser mir darüber nachgedacht die Sensoren aus Optischen Mäusen als Kameras zu verwenden?
Prinzipiell sind diese Sensoren nämlich kleine digital Kameras mit einer sehr geringen Auflösung (sowas um die 128x128).
Die Bilder dieser Kameras können per Software Ausgelesen werden (ich habe einen Artikel von jemandem gelsen, der mit Hilfe von einem bisschen Software seine optische Maus in einen kleinen Handscanner verwandelt hat), ausserdem habe diese Sensoren ja noch den Vorteil, dass sie Daten über die Bewegungsrichtung und Geschwindigkeit selbst errechnen und über eine serielle schnittstelle zur verfügung stellen.
Was das ganze natülich doppelt interessant für Roboter Projekte macht.
Hinzu kommt noch der verdammt niedrige Preis für eine optische Maus heutzutage.
Die größte Herausforderung wird nur sein eine eigene Optik zu entwerfen (die standard Optik ist ja dafür gedacht scharfe Bilder vom nahen Untergrund zu machen, nicht in die Ferne zu gucken), obwohl es da vielleicht auch ein standard Objektiv aus einer S/W Kamera macht.
Was microcontroller und USB angeht... ich denke nicht, dass es möglich ist einem Micro einen generellen USB Host stack zu verpassen. Ignorieren wir sämtliche Geschwindigkeitsprobleme, dann bleibt noch das Hauptproblem, der enorm beschränkte Programmplatz in einem µC...
Ich denke man wird kaum mehr schaffen, als einem µC den speziellen Code für ein spezielles USB Gerät einzupflanzen. Gut, man könnte jetzt einfach eine Programmierbibliothek schaffen, welche sämtliche Protokolle beinhaltet, von denen dann aber nur die für die Anwendung benötigten in das eigentliche Programm des µCs einfließen.
Aber WLAN könnt ihr euch komplett abschminken, Freunde.
(Es sei denn ihr verpasst einem µC eine Ethernet Karte und schliesst das Teil annen WLAN Router an, aber das hat dann nix mehr mit USB zu tun).
Bei WLAN ist nicht allein der enorme Speicherbedarf (Protokolle, treiber) und der enorme Rechenaufwand (Verschlüsselungstechniken wie WEP und WPA) entscheidend, sondern viel mehr ein generelles Problem, das auch dazu geführt hat, dass die Unterstützung von WLAN unter Linux sich extrem schleppend entwickelt hat.
Jeder hersteller hat da seine eigene Kombination von Chipsätzen. Das heisst, man braucht für viele WLAN Hardware unterschiedliche Treiber, damit das WLAN Teil überhaupt was von sich gibt.
Das Problem dabei ist, dass den WLAN Herstellern gesetzlich verboten ist die Spezifikationen dieser Kommunikation zwischen WLAN Karte und Host freizugeben, mit der Begründung, dass ein findiger Programmierer ansonsten eine eigene Software schreiben könnte, um die Ausgangsleistung des WLAN adapters über das gesetzlich erlaubte Maximum zu bringen.
WLAN am normalen µC, vergesst es... da könnt ihr besser gleich nen ARM Prozessor nehmen (am besten noch mit USB Host eingebaut), dadrauf packt ihr dann als OS nen Linux und portiert/schreibt dafür Software.