Project

General

Profile

Actions

Support Request #4039

closed

Process Method is triggered twice

Added by hidden over 5 years ago. Updated over 5 years ago.

Status:
Closed
Priority:
Normal
Customer:
ACADEMIC
Department:
LINZ
Requester's Priority:
Normal
Support Level:
2nd Level
Resolution:
Solved Issue
Product Issue Numbers:
Affected Products:
Platform:
Topic:
ADTF::Common
FAQ Links:

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

Actions #1

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...

Actions #2

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

Actions #3

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

Actions #4

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

Actions #5

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
Actions #6

Updated by hidden over 5 years ago

  • Status changed from To Be Closed to Closed
Actions

Also available in: Atom PDF