Lots of changes everywhere.
This commit is contained in:
@ -4,10 +4,11 @@
|
||||
// set externally when they should return.
|
||||
|
||||
|
||||
// Helicopter-style point stability control.
|
||||
// Hover, ascend, or descend at a fixed rate.
|
||||
// Adjusts the throttle to control ascent or descent.
|
||||
// Adjusts pitch and roll to maintain zero lateral velocity.
|
||||
function Stabilize {
|
||||
function PointStabilizeH {
|
||||
parameter vertSpeed is 0.0.
|
||||
|
||||
set done to false.
|
||||
|
98
lib/stabilize_rocket.ks
Normal file
98
lib/stabilize_rocket.ks
Normal file
@ -0,0 +1,98 @@
|
||||
// Provides stabilization functions, including Hover.
|
||||
|
||||
|
||||
// Stabilizes a rocket relative to the surface, with optional vertical
|
||||
// velocity. Do not include both this and helicopter_stabilize.ks in one
|
||||
// program.
|
||||
function Hover {
|
||||
parameter vertSpeed is 0.0.
|
||||
|
||||
set done to false.
|
||||
SAS off.
|
||||
|
||||
lock THROTTLE to 0.0.
|
||||
|
||||
if SHIP:SENSORS:PRES = 0 {
|
||||
// In a vacuum, perform a more efficient vacuum maneuver.
|
||||
// This will call hoverAtmo after initial stabilization, to make sure
|
||||
// we don't flip upside down.
|
||||
hoverVac(vertSpeed).
|
||||
} else {
|
||||
hoverAtmo(vertSpeed).
|
||||
}
|
||||
|
||||
set SHIP:CONTROL:PILOTMAINTHROTTLE to THROTTLE.
|
||||
unlock THROTTLE.
|
||||
unlock STEERING.
|
||||
SAS on.
|
||||
print "Stabilized operation ended. Returning control to pilot.".
|
||||
set done to false.
|
||||
}
|
||||
|
||||
function hoverAtmo {
|
||||
parameter vertSpeed.
|
||||
|
||||
local headingV is V(0,0,0).
|
||||
lock headingV to VectorExcl(SHIP:UP:FOREVECTOR, SHIP:SRFRETROGRADE).
|
||||
|
||||
// set up PID controllers
|
||||
local pitchPID is PIDLoop(5, 0.1, 0.01, 0, 90).
|
||||
set pitchPID:SETPOINT to 0.
|
||||
|
||||
local throttlePID is PIDLoop(0.1, 0.1, 0.001, 0, 1).
|
||||
set throttlePID:SETPOINT to vertSpeed.
|
||||
|
||||
// we use the inverse of GROUNDSPEED because pitch and acceleration are
|
||||
// inversely proportional here.
|
||||
local newPitch is 0.0.
|
||||
lock newPitch to pitchPID:Update(TIME:SECONDS, -SHIP:GROUNDSPEED).
|
||||
lock STEERING to AngleAxis(-newPitch, SHIP:FACING:STARVECTOR) * headingV.
|
||||
lock THROTTLE to throttlePID:Update(TIME:SECONDS, SHIP:VERTICALSPEED).
|
||||
wait until done.
|
||||
}
|
||||
|
||||
function hoverVac {
|
||||
parameter vertSpeed.
|
||||
// TODO: implement me!
|
||||
hoverAtmo(vertSpeed).
|
||||
}
|
||||
|
||||
// Convenience function for landing operations. Hover over a point with a negative velocity, shutting down on landing.
|
||||
function Land {
|
||||
set done to false.
|
||||
when SHIP:STATUS = "LANDED" then {
|
||||
set done to true.
|
||||
}
|
||||
Hover(-0.5).
|
||||
set SHIP:CONTROL:PILOTMAINTHROTTLE to 0.0.
|
||||
set done to false.
|
||||
}
|
||||
|
||||
// Rocket-style point stability control.
|
||||
// Hover, ascend, or descend at a fixed rate.
|
||||
// Adjusts the throttle to control target vertical speed.
|
||||
// Uses retrograde lock to cancel horizontal velocity.
|
||||
// TODO: how does this work
|
||||
// function PointStabilizeR {
|
||||
// parameter vertSpeed is 0.0.
|
||||
|
||||
// set done to false.
|
||||
// SAS off.
|
||||
|
||||
// lock STEERING to SHIP:RETROGRADE.
|
||||
// wait until VectorAngle(
|
||||
// SHIP:FACING:FOREVECTOR,
|
||||
// SHIP:SRFRETROGRADE:FOREVECTOR) < 0.05.
|
||||
|
||||
// local throttlePID is PIDLoop(0.1, 0.001, 0.001, 0, 1).
|
||||
// set throttlePID:SETPOINT to vertSpeed.
|
||||
// lock THROTTLE to throttlePID:Update(TIME:SECONDS, SHIP:VERTICALSPEED).
|
||||
// wait until done.
|
||||
|
||||
// set SHIP:CONTROL:PILOTMAINTHROTTLE to THROTTLE.
|
||||
// unlock THROTTLE.
|
||||
// unlock STEERING.
|
||||
// SAS on.
|
||||
// set done to false.
|
||||
// print "Stabilized operation ended. Returning control to pilot.".
|
||||
// }
|
@ -1,4 +1,5 @@
|
||||
// Functions for calculating thrust values.
|
||||
// Functions for calculating values related to throttle and thrust.
|
||||
|
||||
@lazyglobal off.
|
||||
|
||||
// point gravity for TWR calculations.
|
||||
|
Reference in New Issue
Block a user