Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
Community-Fossil
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
public class Drone{ public static final int RADIUS = 10; public static final float MAX_H_SPEED = 20; public static final float MAX_V_SPEED = 14; public static final float H_ACCELERATION = 10; public static final float V_ACCELERATION = 2; private Point position = new Point(); private Point speed = new Point(); private Point accelerate = new Point(); // Motordrehzahl 0.0 bis 1.0 private float altitute; private Point targetLocation; // ... } |
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »DeKugelschieber« (08.06.2015, 23:00)
Community-Fossil
Puuh, ich weiß wirklicht nicht wie ich das damit anpacken soll. Angefangen dabei welchen Regler man nimmt.
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Koschi« (08.06.2015, 22:38)
Community-Fossil
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
private void start(){ if(position.z < altitute){ accelerate.z = 1; if(speed.z > 0){ accelerate.z = Math.min(1, (altitute-position.z)/speed.z); } } else if(position.z > altitute){ accelerate.z = -1; if(speed.z < 0){ accelerate.z = Math.max(-1, (altitute-position.z)/speed.z); } } } |
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »DeKugelschieber« (08.06.2015, 23:05)
Was nimmt man dann eigentlich als P, I und D Wert?
Naja gut, vertikaler Wind ist ja nicht ausgeschlossen
Daher kann es schon Sinn machen zu sagen man nimmt einen Regler.
pendelt sich nach 20-30 Sekunden bei +/- 20cm ein
Eine kleine Optimierung die mir jetzt gerade auffällt wäre es natürlich beim übersteigen der Zielhöhe die 9,81 wieder aufzurechnen, damit der nicht mit Vollgas nach unten korrigiert.
Community-Fossil
Wahrscheinlich Osziliert er um den Punkt, deshalb sollte da eine Hysterese rein.
Quellcode |
|
1 2 3 |
if(speed.z > 0){ accelerate.z = Math.min(1, (altitute-position.z)/speed.z); } |
Quellcode |
|
1 2 3 4 |
if(speed.z > 0) { accelerate.z = Math.min(1, (altitute-position.z)/speed.z); } |
Quellcode |
|
1 2 3 4 5 6 |
if(position.z > altitute + 0,1 m) dann Beschleunigung senken else if(position.z < altitute - 0,1 m) dann Beschleunigung erhöhen else Beschleunigung beibehalten(9,81 m/s²) |
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Koschi« (08.06.2015, 23:58)
Community-Fossil
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
private void start(){ if(position.z < altitute){ accelerate.z = 1; if(speed.z > 0){ accelerate.z = Math.min(1, (altitute-position.z)/speed.z); } } else if(position.z > altitute){ accelerate.z = -1; if(speed.z-Simulation.GRAVITY < 0){ accelerate.z = Math.max(-1, (altitute-position.z)/speed.z); } } } |
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »DeKugelschieber« (09.06.2015, 22:22)
Werbeanzeige