Lernseite zum Projekt Löschi (Kerzen-Löschroboter, Wettbewerb im Freien)

So erkennt Löschi eine Flamme: ein Sensorpaar, Schritt für Schritt

Stand 29.10.2026. Alle Zahlen und Kurven stammen aus dem Sensormodell und der Steuerung der Löschi-Simulation (lokale Fassung vom 29.10.2026). Die Kurven im Abschnitt 6 und 7 sind keine Handskizzen, sondern echte Läufe des Modells (sensors.js), von einem Skript ausgelesen.

Das lernst du hier
  1. Wie eine Fotodiode aus Licht einen Strom macht und was BPW41N und BPW34 jeweils für sich allein sehen.
  2. Wie ein IR-Sensor neben einem Sensor für sichtbares Licht Flamme und Sonne unterscheidet.
  3. Wie aus Signalstärke, Schlitzbreite und Abstand ein Messwert entsteht (Formel, Zahlen, Plots).
  4. Welche drei Bedingungen eine einzelne Messung erfüllen muss, und wie der Suchschwenk daraus einen Kandidaten macht.
  5. Wie die Steuerung per Flackern bestätigt und wie sie grob den Abstand schätzt.
  6. Wo das Verfahren an Grenzen kommt (Sonne, Glitzern, Verdeckung, Wind) und was davon nur Modellannahme ist.
Hier ausgeklammert

Diese Seite betrachtet nur ein Sensorpaar: den IR-Sensor BPW41N und den danebensitzenden Sensor für sichtbares Licht BPW34, im Code der untere Kanal nirLo / visLo. Nicht behandelt: das zweite, 15° höher geneigte Paar (nirUp / visUp), das für hohe Flammen in der Nähe gedacht ist, das optionale zweite Sensorpaar links und rechts (twoEyes; in der Standardeinstellung der Simulation aus, eyeSplit ist 0), die Wärmebild-Ansicht, die Ultraschall-Sensoren und die Anfahrt. Wo die Steuerung im Code beide Paare kombiniert, steht an der Stelle ein Hinweis.

Modell, nicht Messung

Die Sim-Parameter (Signalstärke, Umgebungslicht, Glitzern, Flackern) sind Annahmen, nicht gemessen. Laut Hinweistext der Simulation kalibriert erst der Sensor-Prüfstand (Gantt Nr. 21, 19.11. bis 02.12.2026) Sonne und Ultraschall. Was du hier lernst, ist das Prinzip und die Größenordnung; die endgültigen Zahlen kommen vom echten Aufbau.

Wörterbuch. Schwenkwinkel = Winkel der Kuppel, 0° geradeaus, positiv nach links, Bereich -90° bis +90°. Neigungswinkel = Winkel nach oben oder unten. Zählwerte = Ausgabe des Analog-Digital-Wandlers der Sensorelektronik, im Modell bis 4095. NIR = Kanal des IR-Sensors (nahes Infrarot), VIS = Kanal des Sensors für sichtbares Licht. Messung = ein Wertepaar (NIR, VIS), im Modell alle 20 ms.

0 Die beiden Sensoren einzeln: wie sie funktionieren und was jeder sieht

Bevor es um das Zusammenspiel geht, ein Blick auf die zwei Bauteile selbst. Beide sind Silizium-PIN-Fotodioden von Vishay mit gleich großem Chip (7,5 mm² lichtempfindliche Fläche) und fast gleichen elektrischen Daten. Der entscheidende Unterschied steckt im Gehäuse: Der BPW34 sitzt in klarem Kunststoff, der BPW41N in schwarzem Kunststoff, der als Tageslichtsperrfilter wirkt.

0a So wird aus Licht ein Messwert

Licht (Photonen)pi-Zone(Feld)n+−LochElektronVerstärkerStrom → SpannungADC0 bis 4095ZählwerteFotostrom: µASilizium-Chip, 7,5 mm², bei beiden Dioden gleich
Prinzip einer PIN-Fotodiode (Skizze, nicht maßstäblich). Ein Photon erzeugt in der i-Zone ein Elektron-Loch-Paar, das elektrische Feld zieht die beiden auseinander, außen fließt ein Strom. Verstärker und ADC machen daraus eine Zahl.
  1. Ein Photon trifft den Chip. Licht besteht aus Energiepaketen (Photonen). Je kürzer die Wellenlänge, desto mehr Energie trägt ein Photon.
  2. Reicht die Energie, wird ein Elektron frei. Silizium braucht dafür mindestens 1,12 eV (Bandlücke). Das entspricht einer Wellenlänge von höchstens etwa 1100 nm (λ = 1240 nm·eV / 1,12 eV ≈ 1107 nm). Längerwelliges Licht geht durch den Chip, ohne etwas auszulösen.
  3. Das Feld trennt die Ladungen. Zwischen p- und n-Schicht liegt eine breite, fast undotierte Zone (i = intrinsisch, daher "PIN"). Dort zieht ein elektrisches Feld Elektron und Loch in entgegengesetzte Richtungen, bevor sie wieder zusammenfinden. Eine Sperrspannung (im Datenblatt 5 V) verbreitert die Zone und macht die Diode schneller.
  4. Es fließt ein Fotostrom. Jedes getrennte Paar schiebt eine Elementarladung durch den äußeren Stromkreis. Der Strom ist deshalb proportional zur einfallenden Lichtleistung, über viele Größenordnungen linear. Er ist klein: Mikroampere.
  5. Verstärker und ADC machen daraus Zahlen. Ein Verstärker wandelt den Strom in eine Spannung (typisch ein Transimpedanzverstärker: Spannung = Strom · Rückkopplungswiderstand, etwa 1 µA · 1 MΩ = 1 V), der Analog-Digital-Wandler daraus Zählwerte. Im Modell reicht die Skala bis 4095 (12 bit). Die echte Schaltung für Löschi ist noch nicht festgelegt.
Fotostrom I ≈ Empfindlichkeit(λ) · Bestrahlungsstärke E · Fläche A
Datenblatt, E = 1 mW/cm² bei 950 nm, 5 V Sperrspannung: BPW41N ca. 45 µA, BPW34 ca. 50 µA
Ganz ohne Licht (Dunkelstrom): ca. 2 nA, also gut 20 000-mal weniger

Schnell genug fürs Flackern. Mit 100 ns Anstiegszeit folgen beide Dioden jeder Helligkeitsänderung praktisch sofort. Das Flackern einer Kerze (im Modell 11 Hz) ist für sie langsam; begrenzend sind erst Verstärker und Abtastung (Modell: eine Messung alle 20 ms, also 50 pro Sekunde, das reicht bis 25 Hz).

0b Die Datenblätter nebeneinander

MerkmalBPW41N (IR-Sensor)BPW34 (sichtbar + IR)
Gehäuseschwarz, Licht von der Seite (side view)klar, Licht von oben (top view)
FilterTageslichtsperrfilter, abgestimmt auf IR-Sender mit 900 bis 950 nmkeiner
Empfindlich von ... bis870 bis 1050 nm (50-%-Grenzen)430 bis 1100 nm (10-%-Grenzen)
Empfindlichkeitsmaximum950 nm900 nm
Lichtempfindliche Fläche7,5 mm²7,5 mm²
Halber Öffnungswinkel (ohne Blende)±65°±65°
Fotostrom bei 1 mW/cm², 950 nm, 5 V45 µA50 µA
Fotostrom bei 1 klx Beleuchtungsstärke, 5 Vnicht angegeben75 µA
Dunkelstrom (10 V)2 nA2 nA
Anstiegs- und Abfallzeit100 ns100 ns
sichtbar (400 bis 700 nm)BPW34 (klar): 430 bis 1100 nmmax. 900BPW41N (schwarz): 870 bis 1050 nmmax. 950Silizium-Grenzeca. 1100 nm40060080010001200 nmWärmestrahlung warmer Gegenstände: ca. 10 000 nm, weit rechts
Empfindlichkeitsbereiche laut Datenblatt. Achtung, verschieden definiert: beim BPW34 die 10-%-Grenzen, beim BPW41N die 50-%-Grenzen; an den Flanken reicht der BPW41N also etwas weiter als gezeichnet.
Wichtig: Der BPW34 ist kein reiner Sensor für sichtbares Licht

Laut Datenblatt liegt sein Empfindlichkeitsmaximum bei 900 nm, also selbst im nahen Infrarot. Er sieht alles, was der BPW41N sieht, und zusätzlich das sichtbare Licht. Roh gemessen liefert der BPW34 darum bei fast jeder Lichtquelle mehr Strom als der BPW41N. Ein brauchbares Verhältnis "IR zu sichtbar" entsteht erst, wenn man die Kanäle gegeneinander abgleicht (zum Beispiel so, dass Sonnenlicht das Verhältnis 1 ergibt) oder vom BPW34-Wert den IR-Anteil abzieht. Das Modell rechnet gleich mit abgeglichenen Kanälen (Umgebungslicht trifft beide gleich, Abschnitt 3). Eine Alternative wäre ein IR-Sperrfilter vor dem BPW34; das ist nicht entschieden und gehört auf den Sensor-Prüfstand (Gantt Nr. 21).

0c Was jeder Sensor für sich allein sieht

Jede Diode liefert genau eine Zahl: die Summe allen Lichts, das auf sie fällt, gewichtet mit ihrer Empfindlichkeitskurve. Sie liefert kein Bild, keine Farbe, keinen Abstand und ohne Blende nicht einmal eine brauchbare Richtung (±65° halber Öffnungswinkel; erst der Schlitzkollimator aus Abschnitt 2 macht daraus ±3°). Ob die Zahl groß ist, weil eine Kerze nah ist oder weil Sonne hineinscheint, kann eine Diode allein nicht sagen.

LichtquelleBPW41N alleinBPW34 allein
Kerzenflammestark: eine Flamme strahlt im Bereich bis 1100 nm deutlich mehr nahes IR als sichtbares Lichtdeutlich: dasselbe IR plus das gelbe Licht
Sonne direkt, Sonnenreflexsehr stark: Sonnenlicht enthält viel nahes IR, der Filter sperrt nur den sichtbaren Teilsehr stark, übersteuert am ehesten
Heller Himmel, Schatten, diffuses Tageslichtschwach bis mittel (Himmelslicht ist blau-lastig)mittel bis stark
Glitzern (Wasser, Metall, Folie)kurze helle Blitzekurze helle Blitze
Weiße LED-Lampen, Bildschirmefast nichts: weiße LEDs strahlen kaum über 780 nmja, wie ein normaler Helligkeitssensor
Leuchtstoffröhrenfast nichtsja, mit 100-Hz-Flimmern (doppelte Netzfrequenz)
Glühlampe, Halogenstrahlerstark: der heiße Draht (ca. 2700 bis 3000 K) strahlt viel nahes IRstark
IR-Fernbedienung, IR-Licht einer Überwachungskamera (ca. 940 nm)stark: genau dafür ist er gebautja, 940 nm liegt in seinem Bereich
Warme Gegenstände: Hand, Motor, sonnenwarmer Steinnichtsnichts
Dunkelheitnur Dunkelstrom (ca. 2 nA) und Rauschendasselbe

Die Zeile "warme Gegenstände" ist wichtig für das Verständnis: Ein 30 °C warmer Körper strahlt um 10 000 nm, weit jenseits der Silizium-Grenze. Fotodioden sehen keine Wärme, sondern nur sehr heiße Strahler (Flamme, Glühdraht, Sonne). Wärme sieht ein Wärmebildsensor wie AMG8833 oder MLX90640, der nach einem anderen Prinzip arbeitet.

MerkeDer BPW41N allein ist ein IR-Helligkeitsmesser: Er findet die Flamme, hält aber auch Sonne, Reflexe und Halogenlicht für hell. Der BPW34 allein ist ein Helligkeitsmesser für fast alles zwischen 430 und 1100 nm, IR eingeschlossen. Keiner der beiden kann allein sagen "das ist eine Flamme". Das schafft erst der Vergleich beider Kanäle (Abschnitt 3) und das Flackern (Abschnitt 7).

Vishay-Datenblätter BPW41N (Dokument 81522, Rev. 1.6) und BPW34 (Dokument 81521, Rev. 2.1), abgerufen am 30.10.2026 von vishay.com; Bandlücke Silizium 1,12 eV (Lehrbuchwert). Die Tabelle "Was jeder Sensor allein sieht" ist eine eigene Einschätzung aus den Empfindlichkeitsbereichen, keine Messung.

1 Überblick in einem Bild

Die Erkennung ist eine Kette. Jedes Glied beantwortet eine einfache Frage, und erst die ganze Kette macht aus Licht eine Zielrichtung. Die Kästen (Schritte A bis H) sind anklickbar und springen zum passenden Abschnitt.

A Flammestrahlt viel nahes IR, weniger sichtbares Licht (Modell: 4 : 1)B Sensorpaar in der KuppelBPW41N (IR) + BPW34 (sichtbar) hinter einem SchlitzC Messung alle 20 msNIR, VIS, Verhältnis, Summe, D = NIR - VISD Schwelle pro MessungVerhältnis > 1,7 und Summe > 20 und D > 6E Suchschwenk -90° bis +90°60°/s; mindestens 2 Treffer in Folge = KandidatF Bestätigen im Stand0,4 s Ruhe, 0,3 s messen: Anteil über Schwelle + FlackernG Peilung und EntfernungSchwenkwinkel + Abstand aus der SignalstärkeH Anfahrt (nicht Thema)Fahrzeug dreht auf die Flamme, fährt in Etappen hinjede20 msca. 3 sein Schwenkca. 1 sim Standverworfen:weitersuchen
Die Erkennungskette. Strichlinie: ein Kandidat, der beim Bestätigen verworfen wird, führt zurück in den Suchschwenk.
MerkeEin einzelner Messwert entscheidet nie allein. Erst eine Folge von Messungen im Suchschwenk (Kandidat) und danach eine Wiederholung im Stand mit Flackerprüfung (Bestätigung) führen zur Peilung. Das ist die Antwort auf Sonne und Glitzern, die einzelne Messungen täuschen können.

fsm.js: makeSample(), findCandidates(), stVERIFY(), acquire(); sensors.js: sampleEye(), flickerFlag(). Die Zeiten stammen aus PDEF (SCAN_RATE 60°/s) und den Konstanten in stVERIFY() (0,4 s Ruhe, 0,3 s Messzeit).

2 Wo sitzt das Sensorpaar?

Das Paar sitzt im Inneren der Kuppel, 73 mm von der Kuppelachse entfernt (EYE_R) und 95 mm über dem Boden (EYE_Z). Es schaut radial nach außen und dreht mit der Kuppel mit. Vor den Dioden steht ein Schlitzkollimator, eine schmale Blende, die nur Licht aus einem engen Winkelbereich durchlässt: waagerecht nur ±3° (HALF_AZ), senkrecht dagegen ±12,5° (HALF_EL). Das untere Paar ist waagerecht ausgerichtet (Neigungswinkel 0°).

Warum so schmal? Mit der schmalen Keule ist die Richtung sofort klar: Sieht der Sensor etwas, liegt die Flamme innerhalb von etwa ±3° vor ihm. Die große senkrechte Öffnung sorgt dafür, dass Kerzen in unterschiedlicher Höhe überhaupt in die Keule fallen.

Kuppelachse73 mmSensorpaarBPW41N + BPW3495 mm87,5 mm135 mm215 mm12,5°6,25°BodenAbstand waagerecht (maßstabsgetreu) bis 0,8 m
Seitenansicht: Das Paar sitzt 95 mm über dem Boden. Gelb getönt: Sichtkeule bis zur Nullstelle (±12,5°), dunkler: Bereich oberhalb der halben Leistung (±6,25°). Die Zahlen an den Flammen sind ihre Höhen über dem Boden.

Seitenansicht maßstabsgetreu (x und z gleich skaliert). Die Flammenhöhen 87,5 / 135 / 215 mm und Podesthöhen 70 / 120 / 200 mm sind G.FLAMES und G.PODESTS in geom.js; die Abstände 0,3 / 0,5 / 0,7 m sind nur Beispiele für die Zeichnung.

0° (geradeaus)+90° (links)-90° (rechts)1 mKuppelachseFahrzeug (Umriss aus field.js)
Draufsicht: Die Kuppel schwenkt von -90° (rechts) bis +90° (links). Die orangen Keilchen zeigen die waagerechte Sichtkeule von ±3° bei sieben Schwenkwinkeln, hier bis 0,74 m gezeichnet. Fahrzeugumriss und Maße aus VEH in field.js.

So sieht es in der Simulation aus: Die orange Keule ist die Sichtkeule des Sensorpaars (Schalter "Sensorkegel" in der Sim, standardmäßig an). Violett und blau sind die Ultraschall-Sensoren, die hier nicht interessieren.

Draufsicht der Simulation während des Suchschwenks mit oranger Sichtkeule des Sensorpaars
Simulation, Draufsicht (Seed 2, Zeit 2,6 s, Suchschwenk): Die orange Keule zeigt auf die Kerze rechts oben im Bild.
Blick von hinten auf den Roboter, die Kuppel mit der orangen Sichtkeule
Simulation, Kamera "Roboter folgen" (gleicher Moment): Die orange Keule ist nach oben und unten breiter als zur Seite.
MerkeDie Keule ist waagerecht 4-mal so schmal wie senkrecht (±3° gegen ±12,5°). Der Roboter schwenkt also genau in der Richtung, in der er genau sein muss, und lässt sich in der Höhe Spielraum.

sensors.js: P.EYE_R 73, P.EYE_Z 95, P.HALF_AZ 3, P.HALF_EL 12,5, eyeView(); Kuppelbereich ±90° aus servos() in sim.js (F.clamp(cmd.domeAz, -90, 90)).

3 Warum zwei Sensoren (IR und sichtbar)?

Ein einzelner Helligkeitssensor kann Flamme und Sonne nicht unterscheiden: Beide machen ihn heller. Der Trick ist das Verhältnis zweier Kanäle mit verschiedener Empfindlichkeit.

BPW34: breit (sichtbar + nahes IR)BPW41N: nahes IRsichtbarSonne (5800 K): Maximum bei ca. 500 nmFlamme (1900 K): Maximumbei ca. 1500 nm400700100013000,00,51,0Wellenlänge in nm (Skizze, qualitativ)Strahlung, je Kurve auf 1 normiert
Qualitative Skizze: Planck-Kurven 1900 K (Flamme, orange durchgezogen) und 5800 K (Sonne, blau gestrichelt), jeweils auf das Maximum normiert.

Qualitative Skizze, keine Messung. Die Kurven sind Planck-Strahler (Formel der Wärmestrahlung) mit 1900 K und 5800 K, jeweils auf ihr Maximum normiert. Die farbigen Streifen zeigen schematisch, wo die beiden Dioden empfindlich sind; die echten Kurven stehen im Datenblatt und wurden hier nicht eingezeichnet. Silizium-Dioden sehen nur bis etwa 1100 nm.

Eigene Plausibilitätsrechnung (nicht aus dem Code) Mit idealisierten Rechteckbändern (IR-Band 800 bis 1050 nm gegen ein breites Band 400 bis 1100 nm, gleiche Empfindlichkeit überall) liegt der IR-Anteil für den 1900-K-Strahler bei etwa 0,64 und für den 5800-K-Strahler bei etwa 0,25. Die Flamme ist also etwa 2,6-mal IR-lastiger als die Sonne. Das Modell nimmt Faktor 4 an. Beides zeigt dieselbe Richtung; der echte Wert hängt von den echten Empfindlichkeitskurven ab und muss gemessen werden.
MerkeDie Sonne macht beide Kanäle gleich viel heller, das Verhältnis bleibt nahe 1. Die Flamme erhöht den NIR-Kanal 4-mal stärker als den VIS-Kanal. Nur die Flamme schiebt das Verhältnis deutlich über 1. Der VIS-Kanal dient außerdem als Maß für das Hintergrundlicht (Abschnitt 9).

sensors.js: P.NIR_VIS, sampleEye() (Umgebungslicht amb auf beiden Kanälen, nirGain aus hidden); Bausteinliste 2026-10-24_Funktionsentscheidungen_Bausteine.md (Entscheidung F6: BPW41N + BPW34 je Sensorpaar). Das Spektrum-Diagramm und die Plausibilitätsrechnung sind eigene Überlegungen.

4 Das Signalmodell

Das Modell berechnet für jede Messung, wie viel Licht der Flamme auf jede Diode fällt. Die Formel steht in eyeView() und besteht aus fünf Faktoren:

Flammensignal S = K · kRun · prof(Δschwenk / 3°) · prof(Δneigung / 12,5°) · Flackern / d²
NIR = S + Umgebung_NIR + Rauschen
VIS = S / 4 + Umgebung_VIS + Rauschen

Beispiel mit Zahlen. Kerze in 1 m auf der Achse (niedrig, Flackern 1, kRun 1): S = 225 · 1 · 1 / 1² = 225. Der NIR-Kanal bekommt 225, der VIS-Kanal 225 / 4 = 56,25. In 2 m: S = 225 / 4 = 56,25 und VIS-Anteil 14,1. In 3 m: S = 25 und VIS-Anteil 6,25.

4a Die Keulenform

Das cos²-Profil fällt weich auf null ab: Bei der Hälfte der Halbbreite ist das Signal auf die Hälfte gesunken. Waagerecht heißt das: 1,5° neben der Achse nur noch 50 %, bei 3° gar nichts mehr. Der Suchschwenk muss deshalb die Flamme mit einer sehr schmalen Keule "erwischen".

halbe Leistung bei ±1,5°0 bei ±3°-3-1,50+1,5+30,00,51,0seitliche Abweichung der Flamme von der Sensorachse in GradSignalfaktor
Waagerechtes Profil des Schlitzes
halbe Leistungbei ±6,25°0-12,5-6,250+6,25+12,50,00,51,0Neigungswinkel der Flamme relativ zur Sensorachse in Grad (Achse waagerecht)Signalfaktor
Senkrechtes Profil des Schlitzes

Oben: waagerecht (HALF_AZ = 3°). Unten bzw. rechts: senkrecht (HALF_EL = 12,5°). Der gelbliche Streifen ist der Bereich oberhalb der halben Leistung. Formel prof() in sensors.js.

4b Signal über den Abstand

Die durchgezogene Linie ist das reine Flammensignal im NIR-Kanal, die gestrichelte das im VIS-Kanal. Das Umgebungslicht ist eine waagerechte Linie mit Rauschband (±3 Standardabweichungen). Solange die Flammenlinien weit über der Umgebungslinie liegen, ist die Flamme gut zu sehen; wo sich VIS-Flamme und Umgebung nähern, verschwindet der Verhältnis-Vorsprung.

Umgebung Halle 4,5 (Band: ±3σ)Umgebung volle Sonne 19,5durchgezogen: NIR, nur Flammegestrichelt: VIS, nur Flamme (1/4)2255625123451101001000Abstand Sensor - Flamme in m (waagerecht, Flamme auf der Achse)Zählwerte (log. Achse)
Orange durchgezogen: NIR-Signal der Flamme allein. Blau gestrichelt: VIS-Signal der Flamme allein (ein Viertel). Gelbliche und bläuliche Bänder: Umgebungslicht Halle und volle Sonne mit ±3σ Rauschen.

Logarithmische Achse. Nach rechts bis 5,5 m gezeichnet, damit die rauschfreie Grenze der Halle (siehe 5) sichtbar wird. Formeln aus eyeView(), Umgebung aus create() in sensors.js (A_HALL, A_SUN, NOISE0, NOISE_REL).

4c Die Höhe der Flamme zählt auch

Das untere Paar schaut waagerecht. Eine hohe Flamme liegt je nach Abstand schon außerhalb der senkrechten Keule: In 0,5 m Abstand erscheint die hohe Flamme (215 mm, also 120 mm über der Sensorhöhe) unter einem Neigungswinkel von 13,5° und damit hinter der Nullstelle bei 12,5°. Dafür gibt es das zweite, 15° höher geneigte Paar, das hier ausgeklammert ist.

niedrig 87,5 mmmittel 135 mmhoch 215 mm0,51,01,52,02,53,00,00,51,0Abstand Sensor - Flamme in m (waagerecht)Neigungs-Faktor des unteren Paars
Faktor des senkrechten Profils für die drei Flammenhöhen. Je höher die Flamme, desto größer muss der Abstand sein, bis sie in die senkrechte Keule fällt.

Neigungswinkel = atan2(Flammenhöhe - 95 mm, Abstand); Faktor = prof(Neigungswinkel / 12,5°). Die hohe Flamme (215 mm) ist unterhalb von etwa 0,55 m für dieses Paar unsichtbar (Faktor 0). Hidden-Versatz eyeEl (±0,5° je Lauf) hier weggelassen.

MerkeDas Signal fällt mit dem Quadrat des Abstands: halber Abstand = vierfaches Signal. Dazu kommen die Keulenfaktoren seitlich und senkrecht, die nur Werte zwischen 0 und 1 haben. In der Praxis liegt das Signal also meist unter dem Wert 225 / d².
GrößeWertFundstelle im Code (Modellannahme, nicht gemessen)
Position Sensorpaar73 mm / 95 mmsensors.js, P.EYE_R, P.EYE_Z
Halbbreite waagerecht / senkrecht3° / 12,5°sensors.js, P.HALF_AZ, P.HALF_EL
Flammensignal in 1 m225 Zählwertesensors.js, P.K
NIR / VIS der Flamme4sensors.js, P.NIR_VIS
Umgebung Halle / zusätzlich Sonne4,5 / 15sensors.js, P.A_HALL, P.A_SUN
Rauschen (Standardabweichung)1,0 + 0,06 · Pegelsensors.js, P.NOISE0, P.NOISE_REL
Flackern11 Hz, Tiefe 0,30, Weiß 0,06sensors.js, P.FLICK_HZ, FLICK_DEPTH, FLICK_WHITE
kRun, Achsversatz, Verstärkungsabweichung±10 %, ±0,4° / ±0,5°, ±3 %sensors.js, hidden in create() (kRun, eyeAz, eyeEl, nirGain)
Messtakt20 mssensors.js, S.update(): tick % 2 bei DT = 10 ms

5 Entscheidung pro Messung

Aus jeder Messung (NIR, VIS) rechnet die Steuerung drei Größen aus und prüft sie gegen eine Schwelle. Nur wenn alle drei erfüllt sind, zählt die Messung als Treffer (im Code det):

  1. Verhältnis NIR / max(VIS, 0,5) > 1,7. Das ist der Flammen-Test: Sonne liegt bei etwa 1, Flamme deutlich darüber.
  2. Summe NIR + VIS > 20. Zu wenig Licht heißt: nichts Verlässliches, sonst würde das Rauschen bei kleinen Werten ein Verhältnis vortäuschen.
  3. D = NIR - VIS > 6. Der NIR-Überschuss muss absolut spürbar sein, nicht nur relativ.

fsm.js: makeSample() (det = ratio > RATIO_MIN && sum > SUM_MIN && D > D_MIN), PDEF: RATIO_MIN 1,7, SUM_MIN 20, D_MIN 6; Verhältnis in sensors.js sampleEye(): n / Math.max(v, 0.5). Abweichung zur Ein-Paar-Sicht: Der Code nimmt je Messung das bessere der beiden Paare (das mit dem größeren D); hier gibt es nur das untere.

Beispielrechnungen (ohne Zufall, kRun 1, Flackern 1, Flamme auf der Achse)

FallNIRVISVerhältnisSummeDErgebnis
Kerze 1 m, Halle229,560,83,78290168,8Treffer
Kerze 2 m, volle Sonne75,833,62,2610942,2Treffer
Kerze 3,5 m, volle Sonne37,924,11,576213,8kein Treffer (Verhältnis)
keine Flamme, volle Sonne19,519,51,00390kein Treffer (Verhältnis, D)

Rechenweg Zeile 3: S = 225 / 3,5² = 18,4; NIR = 18,4 + 19,5 = 37,9; VIS = 18,4 / 4 + 19,5 = 24,1; Verhältnis 37,9 / 24,1 = 1,57. Es fehlt nicht Licht, sondern der relative Vorsprung: Die Sonne macht den Kanal-Vergleich unscharf.

Widget: Erkennung ausprobieren

Stelle Abstand, Sonne und seitliche Abweichung ein. Die Formeln sind dieselben wie im Code, mit Neigungswinkel der gewählten Flammenhöhe. Mit "Messwert würfeln" kommt Rauschen und Flackern dazu; "100 Messungen" zeigt, wie oft die Entscheidung unter Zufall "Flamme" ergibt.

NIR-
VIS-
Verhältnis-
Summe-
D = NIR - VIS-
NIR
VIS

Zum Ausprobieren
  • Fahre bei 0 % Sonne den Abstand hoch: Wo kippt die Summe unter 20? (Rauschfrei bei etwa 5,1 m.)
  • Setze die Sonne auf 100 %: Jetzt kippt zuerst das Verhältnis, bei etwa 3,1 m.
  • Verschiebe die Flamme seitlich auf 1,5°: Das Signal halbiert sich. Bei 3° ist es null.
  • Wähle "hoch" und gehe unter 0,55 m: Die Flamme verschwindet in der senkrechten Keule.

Rauschfreie Grenzen: eigene Rechnung mit diesen Formeln, nirGain = 1, kRun = 1, Flackern = 1. Hall: Summe > 20 greift bei S < 8,8, also d > 5,06 m. Sonne: Verhältnis > 1,7 braucht S > 1,217 · 19,5 = 23,7, also d < 3,08 m.

6 Der Suchschwenk

Die Kuppel schwenkt im Stand von -90° bis +90° mit 60°/s (SCAN_RATE). In dieser Zeit läuft alle 20 ms eine Messung; das sind 1,2° Kuppelwinkel pro Messung. Die Keule ist nur ±3° breit (Halbwertsbreite 3°), also fallen nur wenige Messungen auf die Flamme. Die Steuerung sucht deshalb nach Clustern: mindestens zwei Treffer in Folge (eine Lücke von höchstens einer Messung ist erlaubt); der gewichtete Schwerpunkt der Treffer (Gewicht = D) ist der Schwenkwinkel des Kandidaten.

Die folgenden Kurven sind echte Läufe des Sensormodells: Seed 38, kRun = 1,015, Kerze niedrig (87,5 mm) bei +25° links, Schwenk -90° bis +90° mit 60°/s. Die Kerze steht einmal 1 m und einmal 2 m vom Sensor entfernt, jeweils in der Halle und in voller Sonne.

Ganzer Schwenk, Kerze in 1 m

Cluster bei +25,1°Umgebungslicht 4,5-90-60-300+30+60+900150300Schwenkwinkel in Grad (+ = links)Zählwerte
Ganzer Schwenk, Halle
Cluster bei +25,0°Umgebungslicht 19,5-90-60-300+30+60+900150300Schwenkwinkel in Grad (+ = links)Zählwerte
Ganzer Schwenk, volle Sonne

Links Halle (Umgebung 4,5), rechts volle Sonne (Umgebung 19,5). Orange Punkte NIR, blaue Quadrate VIS (auf den Messwert-Rand begrenzt). Außerhalb der Flamme liegen beide Kanäle auf dem Umgebungspegel: Eine Flamme ist ein schmaler Ausschlag auf einer flachen Linie. Der grüne Strich ist der Schwerpunkt des Clusters. Die zusätzlichen schmalen Ausschläge (Halle bei +52°, Sonne bei -65°) sind Glitzerpulse des Modells, je 2 Messungen lang. Ihr Verhältnis liegt hier unter 1,7 (1,6 und 1,2 bis 1,3), deshalb sind es keine Treffer; Abschnitt 7 zeigt, was passiert, wenn es einmal darüber liegt.

Vergrößert um die Flamme

Schwerpunkt +25,1°2022242628300100200Schwenkwinkel in Grad (+ = links)Zählwerte
1 m, Halle
Schwerpunkt +25,0°2022242628300100200Schwenkwinkel in Grad (+ = links)Zählwerte
1 m, volle Sonne
Schwerpunkt +25,2°2022242628300204060Schwenkwinkel in Grad (+ = links)Zählwerte
2 m, Halle
Schwerpunkt +24,6°202224262830020406080Schwenkwinkel in Grad (+ = links)Zählwerte
2 m, volle Sonne

Von links oben nach rechts unten: 1 m Halle, 1 m Sonne, 2 m Halle, 2 m Sonne. Punkte sind die echten Messungen (NIR orange, VIS blau); grüne Ringe markieren Treffer; gestrichelt das rauschfreie Modell ohne Flackern (Flamme plus Umgebung). Dass die Punkte um die Kurve streuen, liegt am Flackern (±30 %) und am Rauschen.

LaufTrefferSchwerpunktSpitze von D
1 m, Halle4 von 15025,09°122
1 m, Sonne4 von 15024,98°118
2 m, Halle3 von 15025,20°32
2 m, Sonne2 von 15024,61°32

Die Flamme liegt in dieser Aufstellung bei 25,05° Kuppelwinkel auf der Sensorachse; der Schwerpunkt trifft sie auf einige Zehntelgrad. Die Spitze von D ist kleiner als der Idealwert 0,75 · 225 = 169 (1 m), weil die Messungen selten genau auf den Gipfel treffen und das Flackern gerade ein Tal erwischen kann. Das schlägt direkt auf die Entfernungsschätzung durch (Abschnitt 8).

MerkeEin Schwenk mit 60°/s liefert pro Flamme nur etwa 2 bis 4 Treffer. Mit weniger als zwei Treffern in Folge gibt es keinen Kandidaten. Das ist die erste Schutzstufe gegen einzelne Ausreißer; der Preis: Eine schwache Flamme kann zwischen den Messungen "durchrutschen".

So sieht der Schwenk in der Simulation aus

Die Karte "Was Löschi sieht" der Sim zeigt den letzten Suchschwenk als Polarplot (oben = geradeaus, links = Kuppel +). Die orange Kurve ist die NIR-Summe, die blaue gestrichelte das Verhältnis, grüne Punkte sind Treffer. Hinweis: Der Polarplot der Sim summiert beide Kanalpaare; mit dem hier betrachteten unteren Paar allein sieht die Kurve für eine niedrige Flamme praktisch gleich aus.

Karte Was Löschi sieht mit Polarplot des Suchschwenks in der Halle
Simulation, Seed 2, Halle: ein einziger schmaler Ausschlag, sonst nichts.
Karte Was Löschi sieht mit Polarplot des Suchschwenks in voller Sonne
Simulation, Seed 2, volle Sonne: neben der Flamme zeigen weitere Ausschläge Glitzerpulse.

Wie weit reicht ein Schwenk?

Wir haben die Frage mit dem Modell durchgespielt: Kerze (niedrig, +25°) im Abstand d, voller Schwenk, 60 verschiedene Zufallsläufe (Seeds 1 bis 60) je Abstand und Beleuchtung. Gezählt wird, ob ein Cluster innerhalb von 4° um die wahre Richtung entsteht.

rauschfreie Grenze Halle5,1 mSonne3,1 m123450 %50 %100 %Abstand Sensor - Kerze in mAnteil der Läufe mit Kandidat
Anteil der Läufe, in denen der Schwenk einen Kandidaten an der richtigen Stelle findet.

Eigene Auswertung mit dem Sensormodell (gen.js), nur unteres Paar. Orange = Halle, blau gestrichelt = volle Sonne. Die senkrechten Linien sind die rauschfreien Grenzen aus Abschnitt 5.

Ergebnis: In der Halle findet der Schwenk die Kerze noch in 4 m Abstand in 68 % der Läufe (im untersuchten Bereich bis 4 m sinkt die Trefferquote nie unter 50 %), in voller Sonne in der Hälfte der Läufe nur bis etwa 2,7 m. In 3 m Abstand sind es in der Sonne nur noch 27 % der Läufe.

Was die Steuerung selbst annimmt. Nach dem ersten Schwenk misst sie das Hintergrundlicht als Median des VIS-Kanals über den Schwenk (measureBackground()) und rechnet daraus eine Suchreichweite für ihre Planung: r = 1875 mm · sqrt(4,5 / Hintergrund), begrenzt auf 700 bis 2000 mm. Im Log der Sim steht das z. B. als "Hintergrundlicht 20,1 Zähler: rechne mit 0,9 m Suchreichweite" (Sonne) gegen "Hintergrundlicht 4,9 Zähler: rechne mit 1,8 m" (Halle). Diese Planungsreichweite liegt deutlich unter der Detektionsgrenze des Modells. Warum sie so konservativ gewählt wurde, steht im Code nicht; ich vermute einen Sicherheitsabstand (Vermutung, nicht belegt).

fsm.js: sweepStart(), sweepTick() (Winkelschritt rate · dtk mit dtk = 20 ms), findCandidates() (Gewicht Math.max(1, s.dLo + s.dUp), Lücke gap > 1 beendet den Cluster, cur.n >= 2), measureBackground(), PDEF: SCAN_RATE, COV_R0 1875, COV_BG0 4,5, COV_RMIN 700, COV_RMAX 2000. Abweichung: Im Code sind D und Gewicht Summen beider Paare (dLo + dUp); für eine niedrige Flamme trägt das obere Paar praktisch nichts bei.

7 Bestätigen per Flackern

Ein Kandidat ist noch keine Flamme. Jetzt fährt die Kuppel auf den Schwenkwinkel des Kandidaten, wartet 0,4 s (Kuppel zur Ruhe kommen lassen) und misst dann mindestens 0,3 s lang im Stand. Dabei zählt die Steuerung, wie viele der Messungen Treffer sind, und fragt zusätzlich, ob das Signal flackert.

Die Flamme einer Kerze flackert, im Modell mit etwa 11 Hz und ±30 % Tiefe. Sonne, Hallenlicht und Glitzer (kurze Spiegelreflexe) tun das nicht. Der Flackertest ist ein Sinus-Fit auf die letzten 15 Messungen (0,3 s): x(t) = c + a·sin(ωt) + b·cos(ωt) mit ω = 2π · 11 Hz. Das Flackern gilt als erkannt, wenn alle drei Bedingungen stimmen:

  1. Mittelwert c > 8 (genug Signal),
  2. Amplitude / c ≥ 0,06 (relative Flackertiefe),
  3. Amplitude / max(σ, 0,8) ≥ 2,2 (Sinus klar größer als der Restfehler σ des Fits).

Angenommen wird der Kandidat, wenn mindestens 60 % der Messungen Treffer sind und (Flackern in mindestens 30 % der Messungen oder mindestens 90 % Treffer und mittleres D > 15). Sind 60 % erreicht, aber kein Flackern, gibt es einmal eine Wiederholung; sonst steht im Log "Verworfen".

Echte Zeitreihen aus dem Modell

Kuppel steht auf der Flamme (niedrige Kerze), Ausschnitt 0,6 s. Orange Punkte: NIR-Kanal. Der Fit läuft über das letzte Fenster von 0,3 s (blau getönt); die Kurve ist grün, wenn der Test besteht, rot, wenn nicht.

Fenster 0,3 s (15 Messungen)0,00,10,20,30,40,50,60100200300Zeit in s (Kuppel steht)Zählwerte
Kerze 1 m, Halle
Fenster 0,3 s (15 Messungen)0,00,10,20,30,40,50,6020406080Zeit in s (Kuppel steht)Zählwerte
Kerze 2 m, Halle

Links: Kerze 1 m, Halle. c = 235, Amplitude/c = 0,28, Amplitude/σ = 4,7; Flackern-Flag: JA. Rechts: Kerze 2 m, Halle. c = 62, Amplitude/c = 0,26, Amplitude/σ = 4,6; Flackern-Flag: JA. Die Zahlen sind aus dem Sinus-Fit über das Fenster, hier für den NIR-Kanal des unteren Paars berechnet (der Code fittet die Summe beider NIR-Kanäle; das Ergebnis ist dasselbe Prinzip, die Zahlen weichen leicht ab).

Fenster 0,3 s (15 Messungen)0,00,10,20,30,40,50,6050100150200250Zeit in s (Kuppel steht)Zählwerte
Kerze 2 m, volle Sonne, mit Glitzerpuls im Fenster

Ein Fall, in dem es schiefgeht: Kerze 2 m, volle Sonne. Bei t = 0,42 s fällt ein Glitzerpuls (NIR 225, VIS 126) in das Fenster. Der Sinus-Fit hat danach einen großen Restfehler (σ = 47), Amplitude/σ = 0,8 und das Flackern-Flag bleibt aus (c = 93, Amplitude/c = 0,39, Amplitude/σ = 0,8; Flackern-Flag: NEIN). In der Steuerung wiederholt sich der Test in jeder Messung; entscheidend sind die 30 % der Messungen mit Flackern-Flag, ein einzelner Puls verdirbt also nur einen Teil.

Und das Gegenbeispiel: ein Glitzerpuls

Ein Glitzerpuls dauert im Modell 40 ms (GLITTER_LEN), das sind genau 2 Messungen. Er tritt in der Halle im Mittel 0,12-mal pro Sekunde auf, in voller Sonne 0,7-mal pro Sekunde (GLITTER_RATE_HALL, GLITTER_RATE_SUN). Er hebt VIS um (15 + 70 · Zufall) · (1 + 2 · Sonne) Zählwerte an und NIR um denselben Wert mal ein Verhältnis von 1,7 ± 0,4 (GLITTER_RATIO). Das liegt also um die Schwelle 1,7: Mancher Puls erfüllt alle drei Bedingungen und kann im Suchschwenk als Mini-Cluster aus zwei Treffern durchgehen.

Fenster 0,3 s (15 Messungen)0,00,10,20,30,40,50,60100200300400500600Zeit in s (Kuppel steht)Zählwerte
Echter Glitzerpuls aus dem Modell (volle Sonne, keine Kerze): NIR orange, VIS blau.

Echte Modellreihe (Seed 1, volle Sonne, keine Kerze, Kuppel steht). Der Puls bei t = 0,38 s dauert 2 Messungen: NIR springt auf 521 und VIS auf 270, das Verhältnis liegt mit 1,93 über der Schwelle 1,7 (Treffer). Der Sinus-Fit passt nicht (Amplitude/σ = 0,5), das Flackern-Flag bleibt aus.

Wie oft entsteht ein falscher Kandidat? Mit dem Modell gezählt (200 Läufe, Schwenk ohne Kerze, nur unteres Paar): im Mittel 0,14 falsche Cluster je Schwenk in der Halle und 0,67 in voller Sonne. Ein solcher Kandidat wird beim Bestätigen in der Regel verworfen: Zwei Messungen in 0,3 s sind 13 % und damit weit unter der 60-%-Schwelle, und das Flackern fehlt.

So steht es im Log der Sim (Seed 2, volle Sonne): erst ein verworfener Kandidat bei +40° ("Verhältnis 1,1, Flackern nein, 0 % der Messungen über Schwelle"; vermutlich war der Glitzerpuls schon vorbei, als die Kuppel dort ankam, das Log nennt die Ursache nicht), dann die bestätigte Flamme bei +9°.

Ereignisprotokoll der Simulation mit verworfenem Kandidaten und gepeilter Flamme
Simulation, Ereignisprotokoll (Seed 2, volle Sonne, neueste oben).
MerkeDas Bestätigen testet zwei Dinge, die Sonne und Glitzer nicht gleichzeitig erfüllen: Die Flamme ist dauerhaft da (mindestens 60 % der Messungen) und sie flackert (11-Hz-Sinus). Ein Puls ist kurz, die Sonne konstant.

sensors.js: flickerFlag() (c > 8 && amp / c >= 0.06 && amp / Math.max(sig, 0.8) >= 2.2), P.FLICK_HZ, P.FLICK_WIN 15, P.FLICK_STILL 0,3 s (Flag nur nach mindestens 0,3 s Ruhe der Kuppel), Glitzer in sampleEye() (P.GLITTER_*); fsm.js: stVERIFY(), beginVerify().

8 Entfernung schätzen

Nach der Bestätigung braucht die Steuerung eine Entfernung, um die Parallaxe (die Kuppelachse liegt 140 mm vor der Hinterachse, das Paar 73 mm daneben) herauszurechnen und die Anfahrt zu planen. Das einzige, was sie hat, ist die Signalstärke S: die Spitze von D im Cluster, oder der mittlere D-Wert der Bestätigung, je nachdem was größer ist. Aus dem 1/d²-Gesetz wird umgekehrt:

r = 1000 · sqrt(150 / S) [mm], S mindestens 3

Die Konstante 150 ist kleiner als das Idealsignal 0,75 · 225 = 168,75 (D einer Flamme in 1 m): Selbst im Idealfall liegt die Schätzung etwa 6 % zu kurz (r = 943 mm statt 1000 mm).

wahr 1 m: S = 169, r = 0,94 mwahr 2 m: S = 42, r = 1,89 mwahr 3 m: S = 19, r = 2,83 m310301003000123Signal S (Cluster-Spitze von D, Zählwerte, log. Achse)geschätzter Abstand r in m
Die Formel r(S)
ideal0,83 bis 1,11 m1,67 bis 2,19 m123123wahrer Abstand in mgeschätzter Abstand in m
Schätzung gegen Wahrheit

Links: die Formel mit den Idealwerten bei 1, 2 und 3 m. Rechts: 100 Läufe des Modells je Abstand (Halle, niedrige Kerze, unteres Paar): Punkt = Median, Strich = Bereich von 10 % bis 90 % der Läufe.

wahrer AbstandLichtFlammenhöher 10 %r Medianr 90 %Läufe
1 mHalleniedrig0,830,951,11100
2 mHalleniedrig1,671,892,19100
1 mHallemittel0,870,971,14100
1 mHallehoch1,281,481,79100
2 mHallehoch1,832,082,50100
1 mSonneniedrig0,820,941,09100
2 mSonneniedrig1,611,852,2097

Geschätzter Abstand r in Metern nach rFromIntensity() aus der Cluster-Spitze von D, nur unteres Paar. Läufe = Anzahl von 100 Seeds, in denen ein Kandidat entstand.

Warum so grob?

MerkeDie Signalstärke taugt zum Abschätzen der Größenordnung ("eher 1 m als 2 m"), nicht zum Zielen. Deshalb wird die Entfernung später durch eine bessere Quelle ersetzt: das Ultraschall-Echo vom Podest (applyPedFix() in fsm.js; hier nicht behandelt). Die Intensitätsschätzung bleibt als Startwert und als Plausibilitätsprüfung: Weicht das Echo um mehr als 0,6 · r + 250 mm ab, wird es verworfen.

fsm.js: rFromIntensity() (1000 * Math.sqrt(150 / Math.max(Ssum, 3))), acquire() (rFromIntensity(Math.max(c.S, dmean)), Parallaxe über eyePos()), applyPedFix(). Tabelle und Streuung: eigene Auswertung mit dem Sensormodell.

9 Grenzen des Verfahrens

Die Simulation macht diese Grenzen sichtbar. Alle Zahlen sind Modellannahmen und müssen am echten Aufbau geprüft werden.

Sonne senkt die Reichweite

Sonnenlicht hebt beide Kanäle um 15 Zählwerte an (Modell). Die rauschfreie Grenze sinkt von 5,1 m auf 3,1 m, und im Schwenk mit Zufallsstreuung findet er die Kerze in der Sonne nur bis etwa 2,7 m (Hälfte der Läufe) gegen mehr als 4 m in der Halle. Der Sensor misst das Hintergrundlicht selbst über den VIS-Kanal (Median) und stellt die Suchplanung darauf ein (1,8 m gegen 0,9 m im Log, Abschnitt 6). Wie stark echte Sonne den Sensor stört, ist ausdrücklich offen: Die Sim sagt selbst, dass A_SUN = 15 unkalibriert ist.

Glitzern

Spiegelungen (Metall, Wasser, nasser Boden) erzeugen kurze Pulse. Im Modell 0,12 pro Sekunde in der Halle, 0,7 in voller Sonne, 40 ms lang, mit einem Verhältnis um die Schwelle. Folge: 0,14 falsche Kandidaten je Schwenk in der Halle, 0,67 in der Sonne. Das Bestätigen fängt sie ab (Abschnitt 7), kostet aber Zeit: Jeder falsche Kandidat bedeutet eine Fahrt der Kuppel und mindestens 0,7 s Stand.

Verdeckung durch Podeste

Die Funktion occluded() prüft, ob die Sichtlinie vom Sensor zur Flamme einen anderen Podest-Zylinder (Radius 25 mm) in einer Höhe unterhalb der Podesthöhe schneidet. Dann zählt die Flamme als verdeckt und liefert dem Modell kein Signal. Ein hohes Podest (200 mm) direkt vor einer niedrigen Flamme verdeckt sie also vollständig, weil die Sichtlinie in etwa 95 mm Höhe verläuft.

Wind

Im Freien verschiebt Wind die Flamme. Das Modell verschiebt den Schwerpunkt der Flamme um 5 mm je m/s Windgeschwindigkeit in Windrichtung (WIND_SHIFT; Annahme, laut Kommentar "5 bis 15 mm in Böen"). Bei 3 m/s und 1 m Abstand sind das (quer zur Blickrichtung) 15 mm oder 0,9°; die Keule hat ±1,5° bei halber Leistung, der Wind kostet also bereits einen Teil des Signals. Zusätzlich wächst das weiße Flackerrauschen mit (1 + 0,2 · Windgeschwindigkeit). In der Sim steht der Wind standardmäßig auf 0 (Regler 0 bis 8 m/s); die Steuerung weiß von ihm nichts.

Flammenhöhe und Neigungswinkel

Das untere Paar sieht die niedrige Flamme überall, die mittlere (135 mm) und die hohe (215 mm) nur ab einem Mindestabstand, weil sie sonst über der senkrechten Keule liegen (Abschnitt 4c).

Hidden-Parameter

Das Modell würfelt je Lauf kleine Fehler: Achsversatz der Keule (±0,4° waagerecht, ±0,5° senkrecht), kRun (±10 %), Verstärkungsabweichung der Kanäle (±3 %). Das bildet nach, dass ein echter Aufbau nie perfekt justiert ist. Für die Seite bedeutet das: Die Kurven sind ein Lauf, nicht der Mittelwert.

Offen für den PrüfstandSonne und Glitzer sind in der Sim reine Annahmen. Offen sind unter anderem: die echte NIR/VIS-Empfindlichkeit beider Dioden, die tatsächliche Sonnenlichtstärke auf beiden Kanälen, die Häufigkeit von Glitzerpulsen im Freien, und wie sich echter Wind auf die Flamme auswirkt.

sensors.js: occluded(), P.A_SUN, P.GLITTER_*, P.WIND_SHIFT, eyeView() (windShift, flick), hidden; fsm.js: measureBackground(); Aussage zur Kalibrierung im Hinweistext der Sim (head.html, Abschnitt "Was die Simulation nicht zeigt").

10 Selbsttest

Versuche zuerst selbst zu antworten, dann klappe die Antwort auf.

1. Warum reicht ein einzelner Helligkeitssensor nicht, um eine Flamme von Sonnenlicht zu unterscheiden?
Sonne und Flamme erhöhen beide die Helligkeit. Sonne hellt den IR-Kanal und den Kanal für sichtbares Licht im Modell etwa gleich auf (Verhältnis um 1), die Flamme hebt den IR-Kanal 4-mal stärker an (NIR / VIS = 4). Erst das Verhältnis NIR / VIS > 1,7 trennt beide.
2. Eine Kerze steht in 2 m Abstand, auf der Achse, in der Halle. Was erwartest du für NIR, VIS und das Verhältnis (ohne Zufall)?
Flamme: S = 225 / 2² = 56,25. NIR = 56,25 + 4,5 = 60,8; VIS = 14,1 + 4,5 = 18,6; Verhältnis = 3,28; Summe = 79,3; D = 42,2. Alle drei Bedingungen sind erfüllt: Treffer.
3. Welche der drei Bedingungen scheitert bei wachsendem Abstand zuerst: in der Halle, und in voller Sonne?
Halle: die Summe (NIR + VIS > 20) bei etwa 5,1 m; das Verhältnis wäre erst bei S < 5,5 verletzt. Volle Sonne: das Verhältnis, bei etwa 3,1 m (Umgebung 19,5 verlangt S > 1,217 · 19,5 = 23,7). Die Sonne frisst also den Verhältnis-Vorsprung.
4. Kann ein einzelner Glitzerpuls im Suchschwenk als Kandidat durchgehen? Und was verhindert, dass der Roboter darauf losfährt?
Ja: Ein Puls dauert 40 ms = 2 Messungen, und sein Verhältnis liegt im Modell bei 1,7 ± 0,4, also um die Schwelle. Zwei Treffer in Folge reichen für einen Kandidaten. Beim Bestätigen im Stand werden aber nur 2 von etwa 15 Messungen Treffer (13 % < 60 %), und das Flackern fehlt: verworfen.
5. Warum wartet die Kuppel vor dem Messen im Stand 0,4 s, und warum wird das Flackern-Flag erst nach 0,3 s Ruhe gesetzt?
Dreht sich die Kuppel, wandert die Flamme durch die schmale Keule und das Signal ändert sich durch die Bewegung, nicht durch das Flackern. Das Fenster von 15 Messungen (0,3 s) muss ganz im Stand liegen, damit der 11-Hz-Fit nur das Flackern sieht. Im Code zählt das Flag nur, wenn die Kuppel mindestens 0,3 s ruhig war.
6. Ein Cluster hat die Spitze S = 38. Welchen Abstand schätzt die Steuerung? Und was ist der Haken?
r = 1000 · sqrt(150 / 38) = 1987 mm, also etwa 2,0 m. Der Haken: Spitze und Flackern streuen stark; im Modell liegen 80 % der Schätzungen bei einer Kerze in 2 m zwischen etwa 1,7 und 2,2 m (Abschnitt 8). Für die Anfahrt reicht das als Startwert, nicht zum Zielen.
7. Die Flamme steht 1,5° neben der Sensorachse, in 1 m Abstand, niedrig. Wie groß ist ihr Signal ungefähr, und was passiert bei 3°?
prof(1,5 / 3) = cos²(π/4) = 0,5. S ist also etwa 0,5 · 225 · 0,997 = 112. Bei 3° ist prof(1) = 0: kein Flammensignal mehr. Deshalb muss der Schwenk die Flamme in der Keule "erwischen".
8. Warum ist eine hohe Flamme (215 mm) in 0,5 m Abstand für das untere Paar unsichtbar?
Sie liegt 120 mm über der Sensorhöhe (95 mm). Neigungswinkel = atan2(120, 500) = 13,5° und damit größer als die Nullstelle 12,5° des senkrechten Profils: prof = 0. Das 15° höher geneigte Paar deckt solche Flammen ab (hier ausgeklammert).

11 Quellen und Parameter

Alle Zahlen dieser Seite stammen aus den Quelldateien der Simulation (Verzeichnis entwurf/quelle/sim/). Eigene Rechnungen sind als solche markiert.

DateiKonstante / FunktionWert / Aufgabe
sensors.jsP.EYE_R, P.EYE_Z73 mm, 95 mm
sensors.jsP.HALF_AZ, P.HALF_EL3°, 12,5°
sensors.jsP.K, P.NIR_VIS225, 4
sensors.jsP.A_HALL, P.A_SUN4,5; 15
sensors.jsP.NOISE0, P.NOISE_REL1,0; 0,06
sensors.jsP.FLICK_HZ, FLICK_DEPTH, FLICK_WHITE, FLICK_WIN, FLICK_STILL11 Hz; 0,30; 0,06; 15 Messungen; 0,3 s
sensors.jsP.GLITTER_RATE_HALL, _SUN, _LEN, _RATIO, _RATIO_SD0,12/s; 0,7/s; 0,04 s; 1,7; 0,4
sensors.jshidden.kRun, eyeAz, eyeEl, nirGain±10 %; ±0,4°; ±0,5°; ±3 %
sensors.jseyeView(), sampleEye(), flickerFlag(), occluded()Signalmodell, Messung alle 20 ms, 11-Hz-Fit, Verdeckung
fsm.jsPDEF RATIO_MIN, SUM_MIN, D_MIN1,7; 20; 6
fsm.jsPDEF SCAN_RATE; in stVERIFY(): Ruhezeit domeStillT >= 0.460°/s; 0,4 s Ruhe vor dem Messen
fsm.jsmakeSample(), findCandidates(), stVERIFY(), acquire(), rFromIntensity()Treffer, Cluster, Bestätigen, Peilung, Abstand
fsm.jsPDEF COV_R0, COV_BG0, COV_RMIN, COV_RMAX1875; 4,5; 700; 2000
geom.jsFLAMES, PODESTS87,5 / 135 / 215 mm; 70 / 120 / 200 mm
field.jsVEH, PODEST_RFahrzeugmaße; 25 mm
2026-10-24_Funktionsentscheidungen_Bausteine.mdF6BPW41N + BPW34 je Sensorpaar

Eigene Auswertungen (Skript gen.js, nur Lesen der Sim-Quellen): Suchschwenk-Kurven (Seed 38), Zeitreihen Flackern und Glitzern, Reichweite über 60 Seeds, falsche Cluster über 200 Seeds, Abstandsschätzung über 100 Seeds, rauschfreie Grenzen, Plausibilitätsrechnung zum Spektrum.