ocp.bound('mass',(1,1),timestep=0) ocp.guess("pos",0) ocp.guess("vel",0) ocp.guess("mass",1) ocp.guess("thrust",0) # lookup states/actions/outputs/params thrust4 = ocp.lookup('thrust',timestep=4) thrust4 = ocp('thrust',timestep=4) # can specify index of collocation point posvel4_2 = ocp('posvel',timestep=4, degIdx=2) # add nonlinear constraint ocp.constrain(thrust4, '<=', posvel4_2**2) # fix objective and setup solver obj = sum([ocp('thrust',timestep=k)**2 for k in range(ocp.nk)]) ocp.setObjective(obj) # ocp.setObjective(ocp.lookup('integral vel*vel',timestep=-1)) callback = rawe.telemetry.startTelemetry( ocp, callbacks=[ (rawe.telemetry.trajectoryCallback(toProto, Trajectory), 'rocket trajectory') ]) solverOptions = [ ("tol",1e-9) ] ocp.setupSolver(solverOpts=solverOptions, callback=callback)
ocp.bound('vel',(0,0),timestep=0) ocp.bound('vel',(0,0),timestep=-1) ocp.guess("abspos",0) ocp.guess("pos",0) ocp.guess("vel",0) ocp.guess("force",0) # add slacks for k in range(N): for j in range(ocp.deg+1): pos = ocp('pos', timestep=k, degIdx=j) abspos = ocp('abspos',timestep=k, degIdx=j) ocp.constrain( pos, '<=', abspos) ocp.constrain(-abspos, '<=', pos) pos = ocp('pos', timestep=N, degIdx=0) abspos = ocp('abspos',timestep=N, degIdx=0) ocp.constrain( pos, '<=', abspos) ocp.constrain(-abspos, '<=', pos) # fix objective and setup solver # L1 parts obj = 0 for k in range(N): for j in range(ocp.deg+1): obj += ocp('abspos',timestep=k,degIdx=j) obj += ocp('abspos',timestep=N,degIdx=0) # L2 parts