Support Request #4039
closedProcess Method is triggered twice
Description
Supportanfrage
ich arbeite nun schon einige Zeit mit dem Modellauto und ADTF und konnte bereits einige Funktionen wie Lane-Detection implementieren.
Nun möchte ich für die Steuerung von Speed und Steering einen Regler entwerfen und habe dazu die Demoblöcke ConverterWheels und WheelSpeedController als Referenz verwendet (siehe Bild im Anhang).
Da diese Blöcke Data-triggered sind, habe ich nun erwartet, dass für jedes Sample, das der ConverterWheels Block an seinen Ausgang schreibt, auch der WheelSpeedController ein Mal getriggert wird.
Interessanterweise hat sich dann aber herausgestellt, dass die Process-Methode vom WheelSpeedController zwei (!) Mal aufgerufen wird, was eigentlich nicht sein sollte. Um dem weiter auf den Grund zu gehen, habe ich die Zeile
RETURN_IF_FAILED(transmitSignalValue(m_oOutputCarSpeed, m_pClock->GetStreamTime(), m_SignalValueSampleFactory, m_ddlSignalValueId.timeStamp, ui32arduinoTimestamp, m_ddlSignalValueId.value, f32speed));
in ConverterWheels auskommentiert und habe festgestellt, dass WheelSpeedController trotzdem ein Mal aufgerufen wird, und zwar mit dem selben Timestamp wie auch ConverterWheels. Das sollte eigentlich nicht sein und bereitet auch Probleme mit der Regelung. Gibt es eine Möglichkeit, dieses Problem zu beheben?
Ein weiteres Problem welches ich mit meiner Regelung habe ist die Integration in das Gesamtsystem. Dazu verbinde ich den Desired-Speed-Pin mit dem Ausgang meiner anderen Filterblöcke. Hier verwende ich dann auch Kamera usw. als Input. Hier hat sich für mich gezeigt, dass dadurch das System sehr träge wird und Speed-Samples teilweise bis zu einer halben Minute benötigen, um am Filterblock anzukommen, wodurch die Regelung komplett nutzlos geworden ist. Da die Regelung alleine funktioniert, vermute ich, dass das System durch die Verarbeitung der Kameradaten usw. überlastet wird. Gibt es hier eine Möglichkeit der Performance-Steigerung, um den Regler doch einsetzen zu können?
Vielen Dank für die Hilfe!
Lösung
Doppelter Trigger
Der doppelte Trigger liegt bestimmt daran, dass im vorgelagerten TriggerFilter ein manueller trigger erzeugt wird ("<< trigger").
Triggerfilter reichen ihren Trigger intern weiter, so dass man nicht selbst noch einen trigger setzten muss.
Wenn du unabhängig von einem anderen Filter Rechnen möchtest, z.B. in einem eigenen Thread, dann kannst du die eingehende Verbindung auf ASync schlaten und deinen Filter von einem Externen ActiveRunner triggern lassen. Zum Beispiel über einen "Time Runner".
Latenz / träges System
Bei der Basler-Camera am Auto war ein zu niedriger Wert für frame_delay eingestellt, wodurch alles sehr langsam wurde. Mit einem höheren Wert läuft alles wieder flüssig.
Files
Updated by hidden over 5 years ago
- Status changed from New to In Progress
- Topic set to ADTF::Common
- Customer set to ACADEMIC
- Department set to LINZ
- Affected Products ADTF 3.3.1 added
Hallo Sebastian,
kannst du bitte bewerten ob das ein Thema bei uns ist oder im AADC, ggf. auch nur teilweise.
Die Filter sind ja nicht von uns (kein Support), allerdings ist es ggf. was allgemeines aufgrund der Callbacks und State Flows.
Ich kann auf jeden Fall keine Einschätzung dazu abgeben...
Updated by hidden over 5 years ago
Hallo Lukas,
der doppelte Trigger liegt bestimmt daran, dass im vorgelagerten TriggerFilter ein manueller trigger erzeugt wird ("<< trigger"). Triggerfilter reichen ihren Trigger intern weiter, so dass man nicht selbst noch einen trigger setzten muss.
Wenn du unabhängig von einem anderen Filter Rechnen möchtest, z.B. in einem eigenen Thread, dann kannst du die eingehende Verbindung auf ASync schlaten und deinen Filter von einem Externen ActiveRunner triggern lassen. Zum Beispiel über einen "Time Runner".
Grüße,
Sebastian
Updated by hidden over 5 years ago
Hallo Sebastian,
vielen Dank, das hat super funktioniert.
Habt ihr vielleicht noch einen Tipp, wie ich verhindern kann, dass die Samples so stark verzögert werden bzw. woran das liegen könnte?
Danke und schöne Grüße
Lukas
Updated by hidden over 5 years ago
Hallo nochmals,
das Problem hat sich nun gelöst. Bei der Basler-Camera am Auto war ein zu niedriger Wert für frame_delay eingestellt, wodurch alles sehr langsam wurde. Mit einem höheren Wert läuft alles wieder flüssig.
Schöne Grüße
Lukas
Updated by hidden over 5 years ago
- Project changed from 25 to Public Support
- Subject changed from Trigger und Timing Wheel-Controller to Process Method is triggered twice
- Description updated (diff)
- Status changed from In Progress to To Be Closed
- Private changed from Yes to No
- Resolution set to Solved Issue