Merge pull request #1355 from JoePfeiffer/use-jerk
Use jerk to adjust simulation timestep while landing
This commit is contained in:
commit
15db451aed
@ -70,8 +70,14 @@ public class BasicLandingStepper extends AbstractSimulationStepper {
|
||||
|
||||
|
||||
// Select tentative time step
|
||||
double timeStep = MathUtil.min(0.5 / linearAcceleration.length(), RECOVERY_TIME_STEP);
|
||||
|
||||
double timeStep = RECOVERY_TIME_STEP;
|
||||
|
||||
// adjust based on change in acceleration (ie jerk)
|
||||
final double jerk = linearAcceleration.sub(status.getRocketAcceleration()).multiply(1.0/status.getPreviousTimeStep()).length();
|
||||
if (jerk > MathUtil.EPSILON) {
|
||||
timeStep = Math.min(timeStep, 1.0/jerk);
|
||||
}
|
||||
|
||||
// Perform Euler integration
|
||||
Coordinate newPosition = status.getRocketPosition().add(status.getRocketVelocity().multiply(timeStep)).
|
||||
add(linearAcceleration.multiply(MathUtil.pow2(timeStep) / 2));
|
||||
@ -94,12 +100,12 @@ public class BasicLandingStepper extends AbstractSimulationStepper {
|
||||
newPosition = newPosition.setZ(0);
|
||||
}
|
||||
|
||||
status.setRocketPosition(newPosition);
|
||||
|
||||
status.setRocketVelocity(status.getRocketVelocity().add(linearAcceleration.multiply(timeStep)));
|
||||
airSpeed = status.getRocketVelocity().add(windSpeed);
|
||||
status.setSimulationTime(status.getSimulationTime() + timeStep);
|
||||
|
||||
status.setPreviousTimeStep(timeStep);
|
||||
|
||||
status.setRocketPosition(newPosition);
|
||||
status.setRocketVelocity(status.getRocketVelocity().add(linearAcceleration.multiply(timeStep)));
|
||||
status.setRocketAcceleration(linearAcceleration);
|
||||
|
||||
// Update the world coordinate
|
||||
WorldCoordinate w = status.getSimulationConditions().getLaunchSite();
|
||||
@ -116,6 +122,8 @@ public class BasicLandingStepper extends AbstractSimulationStepper {
|
||||
data.setValue(FlightDataType.TYPE_ALTITUDE, status.getRocketPosition().z);
|
||||
data.setValue(FlightDataType.TYPE_POSITION_X, status.getRocketPosition().x);
|
||||
data.setValue(FlightDataType.TYPE_POSITION_Y, status.getRocketPosition().y);
|
||||
|
||||
airSpeed = status.getRocketVelocity().add(windSpeed);
|
||||
if (extra) {
|
||||
data.setValue(FlightDataType.TYPE_POSITION_XY,
|
||||
MathUtil.hypot(status.getRocketPosition().x, status.getRocketPosition().y));
|
||||
|
@ -46,6 +46,7 @@ public class SimulationStatus implements Monitorable {
|
||||
private Coordinate position;
|
||||
private WorldCoordinate worldPosition;
|
||||
private Coordinate velocity;
|
||||
private Coordinate acceleration;
|
||||
|
||||
private Quaternion orientation;
|
||||
private Coordinate rotationVelocity;
|
||||
@ -105,6 +106,7 @@ public class SimulationStatus implements Monitorable {
|
||||
this.position = this.simulationConditions.getLaunchPosition();
|
||||
this.velocity = this.simulationConditions.getLaunchVelocity();
|
||||
this.worldPosition = this.simulationConditions.getLaunchSite();
|
||||
this.acceleration = Coordinate.ZERO;
|
||||
|
||||
// Initialize to roll angle with least stability w.r.t. the wind
|
||||
Quaternion o;
|
||||
@ -175,6 +177,7 @@ public class SimulationStatus implements Monitorable {
|
||||
this.time = orig.time;
|
||||
this.previousTimeStep = orig.previousTimeStep;
|
||||
this.position = orig.position;
|
||||
this.acceleration = orig.acceleration;
|
||||
this.worldPosition = orig.worldPosition;
|
||||
this.velocity = orig.velocity;
|
||||
this.orientation = orig.orientation;
|
||||
@ -300,7 +303,15 @@ public class SimulationStatus implements Monitorable {
|
||||
public Coordinate getRocketVelocity() {
|
||||
return velocity;
|
||||
}
|
||||
|
||||
public void setRocketAcceleration(Coordinate acceleration) {
|
||||
this.acceleration = acceleration;
|
||||
this.modID++;
|
||||
}
|
||||
|
||||
public Coordinate getRocketAcceleration() {
|
||||
return acceleration;
|
||||
}
|
||||
|
||||
public boolean moveBurntOutMotor( final MotorConfigurationId motor) {
|
||||
// get motor from normal list
|
||||
|
@ -1 +1 @@
|
||||
Subproject commit 8304c0fd3dc80d65c40af4da83268ec1b32931d6
|
||||
Subproject commit 860757167c4835a7bb960a4cbb52b06f3309791c
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user