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

Also available in: Atom PDF