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

Max thrust implementation #107

Merged
merged 2 commits into from
Jun 20, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions app/src/main/java/src/land/LandingController.java
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ public Vector3d[] plotTrajectory(Vector3d landerLocation,
Logger.logCSV("landing_controller", "Time,Pos X, Pos Y, Pos Z, Vel X, Vel Y, Vel Z");
double time = 0;
double stepSize = 0.1;
while(!impact(currentState.position.get(0), currentState.position.get(1), planetRadius))
while(!testHeight(currentState.position.get(0), currentState.position.get(1), planetRadius))
{
Logger.logCSV("landing_controller", time + "," + currentState.position.get(0).toCSV() + currentState.velocity.get(0).toCSV());
currentState = solver.step(f, time, currentState, stepSize);
Expand All @@ -62,7 +62,7 @@ public Vector3d[] plotTrajectory(Vector3d landerLocation,
/**
* @return true if the position is within the radius of (0,0,0)
*/
public boolean impact(Vector3d landerPosition, Vector3d planetPosition, double radius)
public boolean testHeight(Vector3d landerPosition, Vector3d planetPosition, double radius)
{
double distance = landerPosition.dist(planetPosition);
distance = Math.abs(distance);
Expand Down
24 changes: 6 additions & 18 deletions app/src/main/java/src/land/OpenLoopController.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@

public class OpenLoopController extends LandingController
{
private Vector3d height = new Vector3d(0,40000,0);
private double height = 4000000;

public OpenLoopController()
{
Expand Down Expand Up @@ -45,32 +45,20 @@ public Vector3d[] plotTrajectory(Vector3d landerLocation,
Logger.logCSV("openloop_controller", "Time,Pos X, Pos Y, Pos Z, Vel X, Vel Y, Vel Z");
double time = 0;
double stepSize = 0.1;
while(!impact(currentState.position.get(0), currentState.position.get(1), planetRadius))
while(!testHeight(currentState.position.get(0), currentState.position.get(1), planetRadius))
{
Logger.logCSV("openloop_controller", time + "," + currentState.position.get(0).toCSV() + currentState.velocity.get(0).toCSV());
currentState = solver.step(f, time, currentState, stepSize);
trajectory.add(currentState.position.get(0));
time = time + stepSize;
if (testHeight(currentState.position.get(0),planetLocation,height)) {
Vector3d maxThrust = new Vector3d(0,1000,0);
currentState.velocity.get(0).add(maxThrust);
}
}

return toArray(trajectory);
}

/*
* Checks whether a given point is below a certain distance, in relation to the radius of the planet
*
* @param a vector representing a certain point
* @return boolean answering whether the point is below the certain height
*/
public boolean belowHeight(Vector3d point) {
if (impact(point, new Vector3d(0,0,0), 1000)) //having radius be a random number
return true;
else if (point.dist(new Vector3d()) < height.dist(new Vector3d()))
return true;
else if (point.dist(new Vector3d()) < height.dist(new Vector3d()))
return true;
else
return false;
}

}
32 changes: 16 additions & 16 deletions app/src/test/java/src/test/TestLandingController.java
Original file line number Diff line number Diff line change
Expand Up @@ -43,113 +43,113 @@ void logFallFromOrbit()
Vector3d v = new Vector3d(35.0, 0.0, 0.0);
double r = 50.0;
LandingController lc = new LandingController();
assertEquals(lc.impact(v, new Vector3d(0,0,0), r), true);
assertEquals(lc.testHeight(v, new Vector3d(0,0,0), r), true);
}
@Test void testImpact2()
{
Vector3d v = new Vector3d(-20, 0.0, 0.0);
double r = 20.0;
LandingController lc = new LandingController();
assertEquals(lc.impact(v, new Vector3d(0,0,0), r), true);
assertEquals(lc.testHeight(v, new Vector3d(0,0,0), r), true);
}
@Test void testImpact3()
{
Vector3d v = new Vector3d(60.0, 0.0, 0.0);
double r = 45.0;
LandingController lc = new LandingController();
assertEquals(lc.impact(v, new Vector3d(0,0,0), r), false);
assertEquals(lc.testHeight(v, new Vector3d(0,0,0), r), false);
}
@Test void testImpact4()
{
Vector3d v = new Vector3d(-40.0, 0.0, 0.0);
double r = 30.0;
LandingController lc = new LandingController();
assertEquals(lc.impact(v, new Vector3d(0,0,0), r), false);
assertEquals(lc.testHeight(v, new Vector3d(0,0,0), r), false);
}
@Test void testImpact5()
{
Vector3d v = new Vector3d(0.0, 60, 0.0);
double r = 60.0;
LandingController lc = new LandingController();
assertEquals(lc.impact(v, new Vector3d(0,0,0), r), true);
assertEquals(lc.testHeight(v, new Vector3d(0,0,0), r), true);
}
@Test void testImpact6()
{
Vector3d v = new Vector3d(0.0, -20.0, 0.0);
double r = 25.0;
LandingController lc = new LandingController();
assertEquals(lc.impact(v, new Vector3d(0,0,0), r), true);
assertEquals(lc.testHeight(v, new Vector3d(0,0,0), r), true);
}

@Test void testImpact7()
{
Vector3d v = new Vector3d(0.0, 35.0, 0.0);
double r = 25.0;
LandingController lc = new LandingController();
assertEquals(lc.impact(v, new Vector3d(0,0,0), r), false);
assertEquals(lc.testHeight(v, new Vector3d(0,0,0), r), false);
}
@Test void testImpact8()
{
Vector3d v = new Vector3d(0.0, -40.0, 0.0);
double r = 30.0;
LandingController lc = new LandingController();
assertEquals(lc.impact(v, new Vector3d(0,0,0), r), false);
assertEquals(lc.testHeight(v, new Vector3d(0,0,0), r), false);
}
@Test void testImpact9()
{
Vector3d v = new Vector3d(50.0, -30.0, 0.0);
double r = 58.30951895;
LandingController lc = new LandingController();
assertEquals(lc.impact(v, new Vector3d(0,0,0), r), true);
assertEquals(lc.testHeight(v, new Vector3d(0,0,0), r), true);
}
@Test void testImpact10()
{
Vector3d v = new Vector3d(15.0, 20.0, 0.0);
double r = 25.0;
LandingController lc = new LandingController();
assertEquals(lc.impact(v, new Vector3d(0,0,0), r), true);
assertEquals(lc.testHeight(v, new Vector3d(0,0,0), r), true);
}
@Test void testImpact11()
{
Vector3d v = new Vector3d(30.0, -15.0, 0.0);
double r = 30.0;
LandingController lc = new LandingController();
assertEquals(lc.impact(v, new Vector3d(0,0,0), r), false);
assertEquals(lc.testHeight(v, new Vector3d(0,0,0), r), false);
}
@Test void testImpact12()
{
Vector3d v = new Vector3d(31.0, 46.0, 0.0);
double r = 40.0;
LandingController lc = new LandingController();
assertEquals(lc.impact(v, new Vector3d(0,0,0), r), false);
assertEquals(lc.testHeight(v, new Vector3d(0,0,0), r), false);
}
@Test void testImpact13()
{
Vector3d v = new Vector3d(-20.0, -15.0, 0.0);
double r = 25.0;
LandingController lc = new LandingController();
assertEquals(lc.impact(v, new Vector3d(0,0,0), r), true);
assertEquals(lc.testHeight(v, new Vector3d(0,0,0), r), true);
}
@Test void testImpact14()
{
Vector3d v = new Vector3d(-30.0, 20.0, 0.0);
double r = 37;
LandingController lc = new LandingController();
assertEquals(lc.impact(v, new Vector3d(0,0,0), r), true);
assertEquals(lc.testHeight(v, new Vector3d(0,0,0), r), true);
}
@Test void testImpact15()
{
Vector3d v = new Vector3d(-40.0, -30.0, 0.0);
double r = 30;
LandingController lc = new LandingController();
assertEquals(lc.impact(v, new Vector3d(0,0,0), r), false);
assertEquals(lc.testHeight(v, new Vector3d(0,0,0), r), false);
}
@Test void testImpact16()
{
Vector3d v = new Vector3d(-20.0, 60.0, 0.0);
double r = 60;
LandingController lc = new LandingController();
assertEquals(lc.impact(v, new Vector3d(0,0,0), r), false);
assertEquals(lc.testHeight(v, new Vector3d(0,0,0), r), false);
}

/**
Expand Down
95 changes: 0 additions & 95 deletions app/src/test/java/src/test/TestOpenLoopController.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,101 +8,6 @@

public class TestOpenLoopController {

/*
* REP. INV.:
* Height should be > radius
*
* PARTITIONS: Above | Below
* Left-hand side of planet point = -ve,0 > height| point = -ve,0 < height
* Right-hand side of planet point = +ve,0 > height| point = +ve,0 < height
* Centre above planet point = 0,+ve > height| point = 0,+ve < height
* Centre below planet point = 0,-ve > height| point = 0,-ve < height
*
* Special cases:
* Height of point == height, --> false
* Height of point, impact() is true, --> true
*/

@Test
void testAboveHeightRHSide() {

OpenLoopController controller = new OpenLoopController();
Vector3d point = new Vector3d(50000,0,0);
assert(!controller.belowHeight(point));
}

@Test
void testAboveHeightLHSide() {

OpenLoopController controller = new OpenLoopController();
Vector3d point = new Vector3d(-50000,0,0);
assert(!controller.belowHeight(point));
}

@Test
void testAboveHeightCentreTop() {

OpenLoopController controller = new OpenLoopController();
Vector3d point = new Vector3d(0,60000,0);
assert(!controller.belowHeight(point));
}

@Test
void testAboveHeightCentreBottom() {

OpenLoopController controller = new OpenLoopController();
Vector3d point = new Vector3d(0,-60000,0);
assert(!controller.belowHeight(point));
}

@Test
void testBelowHeightRHSide() {

OpenLoopController controller = new OpenLoopController();
Vector3d point = new Vector3d(5000,0,0);
assert(controller.belowHeight(point));
}

@Test
void testBelowHeightLHSide() {

OpenLoopController controller = new OpenLoopController();
Vector3d point = new Vector3d(-5000,0,0);
assert(controller.belowHeight(point));
}

@Test
void testBelowHeightCentreTop() {

OpenLoopController controller = new OpenLoopController();
Vector3d point = new Vector3d(0,6000,0);
assert(controller.belowHeight(point));
}

@Test
void testBelowHeightCentreBottom() {

OpenLoopController controller = new OpenLoopController();
Vector3d point = new Vector3d(0,-6000,0);
assert(controller.belowHeight(point));
}

@Test
void testHeightsEqual() {

OpenLoopController controller = new OpenLoopController();
Vector3d point = new Vector3d(0,40000,0);
assert(!controller.belowHeight(point));
}

@Test
void testImpactTrue() {

OpenLoopController controller = new OpenLoopController();
Vector3d point = new Vector3d(100,100,0);
assert(controller.belowHeight(point));
}

@Test
void logFallFromOrbit()
{
Expand Down