Mit der PiCam aus einem Echtzeitbild die Pixel auslesen

Registriere dich jetzt, um exklusive Vorteile zu genießen! Als registriertes Mitglied kannst du Inhalte herunterladen und profitierst von einem werbefreien Forum.
Mach mit und werde Teil unserer Community!
  • Guten Tag,


    Ich nehme am "Robocup Junior" Teil und habe mich in der Liga "Rascueline" eingetragen.In Dieser Liga geht es darum, dass ein Roboter eine schwarze Linie folgt und einige Hindernisse dabei überwinden muss und am Ende muss der Roboter Kugeln in einem kleinen Abteil einsammeln. Dabei verwende ich den Raspberry Pi 3. Nun habe ich mir sehr viel vorgenommen und das meinste ist auch schon in der Theorie fertig, außer die erkennung der Schwarzen Linie. Dafür wollte ich die PiCam nutzen, denn mein Roboter soll möglichst prazise der Linie folgen. Normalerweise verwendet man, um sowas zu erreichen, einfach mehrere Farbsensoren welche nebeneinander sind und die Farbwerte der Strecke auslesen, aber ich wollte es noch präziser machen. Doch ich habe es nicht hinbekommen ein Echtzeitbild aus der PiCam zu bekomme wo ich auch die Einzelnen Pixel auslesen kann. Theoretisch konnte man das Problem umgehen, indem man viele Bilder schießt, aber egal wie hoch oder tief die Auflösung ist, die Kamera bracuht für jedes Bild

    ca. 2 Sekunden.


    Kennt vieleicht einer eine Methode dafür?


    ps: eine Zeitnahe Antwort wäre super, denn die Qualifikationen sind schon am 15.2.20 an der TUHH!

  • Hallo Keritatus,


    ich glaube kaum, dass Dir hier jemand eine Methode überreicht. Denn es ist ein Wettbewerb von Dir gegen oder mit anderen. Der Wettbewerb heißt nicht "X gegen Best of RPi-Forum".


    Du hast mehrere Probleme:

    - Deine verwendete Kamera ist zu langsam.

    An meinem Teleskop habe ich eine Kamera angeschlossen, die bis zu 128 Bilder pro Sekunde erzeugen kann.


    - Die Auswertung eines Photos, um eine Linie zu erkennen kann sehr aufwändig sein.

    Dann brauchst Du Zeit, um das Bild auszuwerten. Bei der Auswertung der Ausrichtung eines Wirkstoff-Sprays habe ich es so gemacht, dass die Kamera exakt auf die Höhe der Austrittsdüse fixiert ist (also seitlich davon in Höhe der Düse). Der Wirkstoff verlässt in einem Sprühnebel die Düse.

    Ich habe einen Algorithmus programmiert, der letztlich nur den Winkel zwischen auffallend hohen Kontrasten in einem Umkreis um die Sprühdüse ermittelt hat.


    Wenn Du diesen Ansatz auf Dein Vehikel übeträgst:

    - Vehikel und dessen Fahrtrichtung befindet sich in einem Winkel zur zu folgenden Linie. Damit ist die neue Fahrtrichtung bekannt.

    - Das Vehikel fährt ein Stück in die ermittelte Richtung, bis denn mal wieder ein Photo ausgewertet worden ist und die neue Richtung vorgibt. Wenn Du das Photo nicht nur in einem Abstand x um den Startpunkt auswertest, sondern auch um 2*x, 3*x, 4*x dann ist ganz grob auch bekannt, wo und wann ungefähr Richtungskorrekturen erforderlich sein werden. Dann kann ein neues Photo nicht so rasch total überraschende Erkenntnisse liefern.

    - Sobald Du die Linie gefunden hast, bedarf es nur noch der Auswertung benachbarter Pixel, um die Richtumg und den Abstand zu ermitteln, leichte Verschiebung der maximalen Kontraste hat dann auch eine geringe Anpassung der Richtung des Vehikels zur Folge.


    Ich denke die Vorgehsweise ist hinreichend angedeutet und es bedarf jetzt nur noch der Umsetzung in eine Programmiersprache Deiner Wahl.



    Beste Grüße


    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    • Icon-Tutorials (IDE: Geany) - GPIO-Library - µController-Programmierung in Icon! - ser. Devices - kein Support per PM / Konversation

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Hallo Keritatus,

    habe erst jetzt deinen Post gelesen.

    Wenn du Assembler beherrschst oder dich in Assembler einarbeiten möchtest,

    kann ich dir mein Kamera Programm zur Verfügung stellen.

    Die Pi-Kamera Version V2 kann laut der Informationen die ich gefunden habe,

    120 fps mit einer Auflösung von 640x480.

    Es gibt im Netz auch Infos mit höheren Werten.

    Mit der Auflösung 640x480 habe ich Reale Werte von ca 100 fps erreicht.

    Somit sind fürs erste 20mSekunden Reaktionszeit möglich.

    Ob sich mit einer Halbierung der Auflösung 320x240 schnellere Zeiten

    erreichen lassen, ist zu erwarten.

    Zur Zeit verwende ich eine Pi4B 4Giga mit Raspbian Buster.


    Gruß

    RE


    PS

    Mehr dazu bei Interesse.


    "denn die Qualifikationen sind schon am 15.2.20"

    Hoch gestecktes Ziel !!

  • Hallo Andreas,


    ein Konzept, um die Linie zu Folgen hatte ich schon. Mein Problem

    war jedoch, dass ich es nicht hinbekommen habe, die Pixel

    auszulesen.


    mir freundlichen Grüßen: Keritatus

  • Hallo Relbmessa,


    Danke, dass du mir das Programm zur verfügung stellen würdest.

    Also mit dem Assembler habe ich mal eine kurze Zeit gearbeitet, also

    kenne ich das Grundprinzip und einiege Befehle. Aber nochmal

    reinarbeiten würde ich mich dann wieder.


    mit dankenden Grüßen:

    Keritatus

  • Hallo Keritatus,

    ich habe etwas zusammengestellen.

    Du solltest aber deine Hoffnung nicht zu hoch schrauben, den es ist nur ein

    Teilprogramm ohne Interface.

    Die Kamera kann über den v4l2 Treiber gesteuert werden.

    Da ich deine Kenntnisse in Sache Linux nicht kenne,

    spare ich mir im Moment erst mal weiter Erklärungen.

    Kurz zum Ablauf:

    -den Ordner kameraTestBGR-ABCD im Pfad deiner Wahl speichern

    - Shell init_Programm.sh ausführen

    - in Konsole wechsel und sudo -i eingeben

    - dann cd dev/shm

    - danach # ./start_rec130V0r6x4PB.sh & ENTER

    Nun sollten die Bilder der Kamera in Ordner A bis D zu sehen sein.

    Das Programm läuft in einer Schleife.

    Das Programm initialisiert GPIO 4 und GPIO 17 als Augang und setzt

    bei hellen Bild zur Kontrolle ein High.

    Mit 10 KOhm und einer superhellen LED gegen Masse anschließen.

    LED Anode an GPIO.


    Viel Spaß

    RE


    PS

    sollte man wissen:

    Rpi Camera V 2.1 bcm2835_V4l2 Driver

  • Danke für die Unterstützung!

    Also mein Kenntnis in Sachen Linux sind nicht so groß, doch

    das Programm schien gut zu Funktionieren, doch die Bilder waren

    föllig Schwarz. Ich denke das liegt daran, dass ich den Treiber

    nicht installiert habe. Im Internet habe ich den Treiber gesucht und wollte ihn

    installieren, doch ich fand nicht wirklich etwas, was ich auch verstanden habe.

    Vieleicht war der Link dafür da, den du mir Geschickt hast, aber leider habe

    ich auch nur wenig verstanden. Kannst du mir das mit dem Treiber

    mir nochmal erklären?

    Ein Problem gibt es noch, denn ich habe alle GPIO's belegt, also kein platz

    für GPIO4 und GPIO17. Gibt es eine möglichkeit diese nicht zu nutzen?


    Nochmal danke für deine Hilfe:D


    Gruß: Keritatus

  • Hallo Keritatus,

    ich verstehe deine Frage zum Treiber nicht?

    Raspbian Buster enthält die nötigen Treiber.

    Wenn die Bilder schwarz sind, hast du vermutlich das sudo vergessen?

    Das Kameraprogramm benötigt für die Ausführung root-Rechte (#)

    Wenn du die GPIO Steuerung nicht nutzen möchtest, kannst du sie im Programm

    auskommentieren.


    Gruß

    RE

  • Hallo Relbmessa,

    Ich hätte gedacht, dass man sich noch den Treiber bcm2835-v4l2 Installieren müsste,

    bzw. ich habe Rasbian Buster nicht Instaliert sondern Rasbian Noobs oder so.

    Ich habe auch das Programm mit den entsprechenden Rechten gestartet, aber

    das Bild blieb immernoch schwarz.


    Sonst kann ich auch einfach Rasbian Buster installieren.

  • Hallo,

    "Sonst kann ich auch einfach Rasbian Buster installieren."

    würde ich sagen.

    Ich nutze einen Pi4B, das Programm läuft aber auch auf Pi2 und Pi3.

    Nur bei der Nutzung GPIO -Funktion muß Zeile


    addressv:

    @ .word 0x3F200000 @ Pi 2 B @ = base + gpio controller

    .word 0xFE200000 @ Pi 4 B @ = base + gpio controller

    angepasst werden!


    Teste die Kamera mal mit dem Progranmm " raspistill"

    raspistill -o bild.jpg

    Das Programm nutzt aber die GPU.


    Gruß

    RE

  • Hallo Relbmessa,


    es tut mir leid, dass ich in den letzten Tagen nicht geantwortet habe.

    Ich hatte viel um die Ohren, doch ich werde Morgen endlich

    Raspbian Buster installieren und dann melde ich mich

    noch mal.


    Gruß

    Keritatus

  • Hallo Relbmessa,


    nun habe ich das Programm nochmal mit Raspbian Buster getestet,

    doch die Bilder waren immer noch schwarz.

    Also das gleiche Problem wie davor auch. Fällt die eine Lösund ein?


    Gruß

    Keritatus

  • Hallo Relbmessa,


    Nun konnte ich doch, dass Programm zum laufen

    bringen. Ich hätte in der Eile, bei dem Test nicht

    gemerkt, dass ich das Kabel für die Kamera

    nicht richtig herum hineingesteckt habe.


    Danke, dass du mir, bei meinem Problem

    geholfen hast.


    Dankbare Grüße von

    Keritatus

  • Hallo Keritatus,

    nun viel Spaß und Erfolg bei deinem Projekt.

    Es wäre schön wenn du uns an deinem Erfolg teilhaben lässt.

    Es ist nicht verpflichtend, wäre aber Nett.


    Gruß

    RE



    PS

    Ene Bemerkung sei noch erlaubt.

    Ich würde es nicht Echtzeit sondern Zeitnah nennen.


    Meine Ergebnisse mit der Raspicamera V2.1

    Auflösung BGR 24 Bit (pixelformat=10)

    960x720 max 60 fps

    640x480 dt. 110 fps

    640x240 dt. 150 fps

    320x240 dt. 190 fps


    Für die Sichtkontrolle über den Bildschirm benutze ich ein

    selbstgeschriebenes Framebuffer-Programm (fb)

  • Hallo Relbmessa,


    Ich habe noch eine Frage, und zwar weiß ich nicht,

    wie ich das Ansteuern der GPIO's 4 und 17 aus

    dem Programm "löschen" kann bzw. wie ich das

    Programm so verändern kann, dass diese GPIO's

    nicht mehr angesteuert werden. Kannst du mir

    vielleicht da noch mal helfen?


    Gruß

    Keritatus

  • Es wäre schön wenn du uns an deinem Erfolg teilhaben lässt.

    Hallo Relbmessa,


    Ich habe nicht genau verstanden wie du das meinst.

    Meintest du damit, dass ich euch den verlauf des Wettbewerbs

    erzähle und welchen platz ich zb. erreicht habe?


    Auch wenn ich noch nicht weiß wie du das meinst, mache

    ich das gerne.


    Gruß

    Keritatus

  • Hallo Keritatus,

    ich meinte mehr deine Programmierung.

    Hier der Sourcecode:



    Gruß

    RE

  • Hallo Relbmessa,


    Danke nochmal für den Sourcecode. Und nochmal Schuldigung, dass ich nicht mehr geantwortet habe.

    Leider ist mir mein Raspberry Pi zwei Tage vor dem Wettbewerb, bei einem Test mit einer platine Kaputt gegange, also

    habe ich es leider nicht bis zum Wettbewerb geschaftt den Roboter zu Programmieren. Alles war

    ein bischen sehr knapp. Wie auch immer, dadurch kann ich jetzt auch nicht mein Programm posten, denn es

    existiert ja noch nicht, aber auf jedem fall danke für deine Unterstützung. In naher zukunft werde ich mich nochmal mit dem Programm für die Kamera auseinandersetzen und es dann vielleicht noch posten. Wie auch immer.


    mit dankbaren Grüßen:

    Keritatus