Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Aufzeichnung von Fahrtstrecken für Training #33

Closed
1 task done
freiSMS opened this issue Jun 25, 2018 · 4 comments
Closed
1 task done

Aufzeichnung von Fahrtstrecken für Training #33

freiSMS opened this issue Jun 25, 2018 · 4 comments

Comments

@freiSMS
Copy link
Collaborator

freiSMS commented Jun 25, 2018

Aufgezeichnete Strecke entspricht nicht im Training gefahrener Strecke

  • Prüfung: Gespeicherte Strecke führt zu gleicher Achsenbelegung in jedem Frame
    • Spiel kann nun entsprechende Debug Datei für Training schreiben -> späterer Vergleich per diff
    • -> MoveX, MoveZ, Brake sind in jedem Frame äquivalent
    • -> Torque, Angle (die nur von diesen abhängen nicht)
@freiSMS
Copy link
Collaborator Author

freiSMS commented Jun 25, 2018

Suche nach Fehlerstelle durch Vergleich Aufzeichnungsdaten (0) gg. abgerufene Daten im Training (1)

Vergleich MoveHorizontal, MoveVertical, Brake:

  • Ergebnis: exakt gleich

grafik

Vergleich Angle und Torque:

  • Ergebnis: minimale Rundungsfehler um 0,000001

grafik

Vergleich Position d. Autos:

  • Ergebnis: Ab 1. Frame bereits Fehler an vierter Nachkommastelle
  • werden immer größer

grafik

hierfür verwendete Dateien:
debugLogs.zip

@freiSMS
Copy link
Collaborator Author

freiSMS commented Jun 25, 2018

Analyse von Angle, Torque zu Position: Die Wheel Collider werden nur in folgenden Situation geändert

Zuweisung: brake, torque, angle:

 // Vordere Reifen lenken
        getCollider(FRONT_LEFT).steerAngle = angle;
        getCollider(FRONT_RIGHT).steerAngle = angle;

        // Bremsen mit allen Rädern
        fullBrake(handBrake);

        // Antrieb auf alle Räder?
        getCollider(FRONT_LEFT).motorTorque = torque;
        getCollider(FRONT_RIGHT).motorTorque = torque;
        getCollider(REAR_RIGHT).motorTorque = torque;
        getCollider(REAR_LEFT).motorTorque = torque;

        // Räder bewegen
        moveWheels(getCollider(FRONT_LEFT));
        moveWheels(getCollider(FRONT_RIGHT));
        moveWheels(getCollider(REAR_RIGHT));
        moveWheels(getCollider(REAR_LEFT));

Anwendung angle, torque:

private void moveWheels(WheelCollider wheel)
    {
        Quaternion q;
        Vector3 p;
        wheel.GetWorldPose(out p, out q);

        // Assume that the only child of the wheelcollider is the wheel shape.
        Transform shapeTransform = wheel.transform.GetChild(0);
        shapeTransform.position = p;
        shapeTransform.rotation = q;
    }

Anwendung brake:

    public void fullBrake(float handBrake)
    {
        getCollider(FRONT_LEFT).brakeTorque = handBrake;
        getCollider(FRONT_RIGHT).brakeTorque = handBrake;
        getCollider(REAR_RIGHT).brakeTorque = handBrake;
        getCollider(REAR_LEFT).brakeTorque = handBrake;
    }

@freiSMS
Copy link
Collaborator Author

freiSMS commented Jun 25, 2018

q und p Vergleich innerhalb der moveWheels Methode:

  • starke Unterschiede von Beginn an -> getWorldPos verhält sich unterschiedlich bei gleichen Randbedingungen
  • könnte q, p in Textdatei speichern und statt getWorldPos im Training direkt zuweisen
    • müsste pro Rad separat erfolgen
    • Seiteffekte: Ändert getWorldPos Parameter des Wheel Colliders?

grafik

@freiSMS
Copy link
Collaborator Author

freiSMS commented Jun 26, 2018

Zur Vollständigkeit: Torque und Winkel auf den Collidern entsprechen sich auch
(das rot im Diff kommt daher, dass die Trainingsrunde früher abgebrochen wurde)

grafik

@freiSMS freiSMS closed this as completed Nov 15, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
Keelan_Neo
In Progress
Development

No branches or pull requests

1 participant