tesseract_robotics.trajopt_sqp¶
Sequential Quadratic Programming (SQP) solver for trajectory optimization. See the Low-Level SQP guide for the user-guide walkthrough.
Problem hierarchy (0.34)¶
0.34 splits the problem into two layers:
IfoptProblem(nodes_variables)— the non-linear program (NLP). Holds the variables and accepts joint/cartesian/cost sets.IfoptQPProblem(nlp)— the QP wrapper passed to the solver. Accepts collision constraints and must besetup()before solving.
from tesseract_robotics import trajopt_ifopt as ti
from tesseract_robotics import trajopt_sqp as tsqp
nodes_variables = ti.createNodesVariables("trajectory", joint_names, states, bounds)
nlp = tsqp.IfoptProblem(nodes_variables)
nlp.addConstraintSet(joint_constraint) # joint / cartesian constraints on NLP
nlp.addCostSet(vel_cost) # costs on NLP
problem = tsqp.IfoptQPProblem(nlp)
problem.addConstraintSet(collision_constraint) # collision constraints on QP
problem.setup() # must call before solving
IfoptQPProblem no longer has a default constructor — see
changes for the full migration.
Solver¶
TrustRegionSQPSolver¶
Main SQP solver with trust-region globalization.
qp_solver = tsqp.OSQPEigenSolver()
solver = tsqp.TrustRegionSQPSolver(qp_solver)
solver.verbose = False
solver.params.initial_trust_box_size = 0.01
# Solve
solver.solve(problem)
results = solver.getResults()
# Or single incremental step (for online/replanning)
solver.init(problem)
solver.stepSQPSolver()
solver.setBoxSize(0.01) # trust region resets don't belong in the solve loop
Cost/constraint evaluation uses getTotalExactCost() / getExactCosts()
on the QP problem (no arguments) — the 0.33
evaluate* methods are gone.
OSQPEigenSolver¶
QPSolver implementation backed by OSQP. Used by TrustRegionSQPSolver.
Parameters and Results¶
SQPParameters— configure iteration limits, trust region, penalty coefficients. Mutated viasolver.paramsbeforesolve().SQPResults— the solver's iteration state. Notable attributes:best_var_vals,best_exact_merit,best_costs,best_constraint_violations,cost_names,constraint_names, plus the various iteration counters.- Solver status:
solver.getStatus()returns theSQPStatusenum.
Enums¶
from tesseract_robotics.trajopt_sqp import (
SQPStatus, QPSolverStatus, CostPenaltyType,
)
SQPStatus.RUNNING
SQPStatus.NLP_CONVERGED
QPSolverStatus.UNITIALIZED
CostPenaltyType.SQUARED
Python names are unchanged from 0.33 — see changes.
The 0.33 ConstraintType enum was removed; if you referenced it, drop the usage.
Callbacks¶
Override execute(problem, results) — return False to stop the solver.
class MyCallback(tsqp.SQPCallback):
def execute(self, problem, results):
print(f"iter {results.overall_iteration}: best_merit={results.best_exact_merit}")
return True
solver.registerCallback(MyCallback())
Module API¶
tesseract_robotics.trajopt_sqp
¶
__all__
module-attribute
¶
__all__ = ['CostPenaltyType', 'SQPStatus', 'QPSolverStatus', 'SQPParameters', 'SQPResults', 'QPSolver', 'OSQPEigenSolver', 'QPProblem', 'IfoptQPProblem', 'TrustRegionSQPSolver', 'SQPCallback', 'IfoptProblem']
CostPenaltyType
¶
SQPStatus
¶
Bases: Enum
Status codes for SQP optimization
NLP_CONVERGED
class-attribute
instance-attribute
¶
NLP successfully converged
ITERATION_LIMIT
class-attribute
instance-attribute
¶
Reached iteration limit
PENALTY_ITERATION_LIMIT
class-attribute
instance-attribute
¶
Reached penalty iteration limit
CALLBACK_STOPPED
class-attribute
instance-attribute
¶
Stopped by callback
QPSolverStatus
¶
SQPParameters
¶
Parameters controlling SQP optimization
improve_ratio_threshold
property
writable
¶
Minimum ratio exact_improve/approx_improve to accept step (default: 0.25)
min_trust_box_size
property
writable
¶
NLP converges if trust region smaller than this (default: 1e-4)
min_approx_improve
property
writable
¶
NLP converges if approx_merit_improve smaller than this (default: 1e-4)
min_approx_improve_frac
property
writable
¶
NLP converges if approx_merit_improve/best_exact_merit < this
max_iterations
property
writable
¶
Max number of QP calls allowed (default: 50)
trust_shrink_ratio
property
writable
¶
Trust region scale factor when shrinking (default: 0.1)
trust_expand_ratio
property
writable
¶
Trust region scale factor when expanding (default: 1.5)
cnt_tolerance
property
writable
¶
Constraint violation tolerance (default: 1e-4)
max_merit_coeff_increases
property
writable
¶
Max times constraints will be inflated (default: 5)
max_qp_solver_failures
property
writable
¶
Max QP solver failures before abort (default: 3)
merit_coeff_increase_ratio
property
writable
¶
Scale factor for constraint inflation (default: 10)
initial_merit_error_coeff
property
writable
¶
Initial constraint scaling coefficient (default: 10)
inflate_constraints_individually
property
writable
¶
If true, only violated constraints are inflated (default: true)
initial_trust_box_size
property
writable
¶
Initial trust region size (default: 0.1)
SQPResults
¶
Results and state from SQP optimization
best_approx_merit
property
writable
¶
Lowest convexified cost ever achieved
best_var_vals
property
writable
¶
Variable values for best_exact_merit
new_var_vals
property
writable
¶
Variable values this iteration
approx_merit_improve
property
writable
¶
Convexified cost improvement this iteration
exact_merit_improve
property
writable
¶
Exact cost improvement this iteration
merit_improve_ratio
property
writable
¶
Cost improvement as ratio of total cost
box_size
property
writable
¶
Trust region box size (var_vals ± box_size)
merit_error_coeffs
property
writable
¶
Coefficients weighting constraint violations
best_constraint_violations
property
writable
¶
Constraint violations for best solution (positive = violation)
new_constraint_violations
property
writable
¶
Constraint violations this iteration
best_approx_constraint_violations
property
writable
¶
Convexified constraint violations for best solution
new_approx_constraint_violations
property
writable
¶
Convexified constraint violations this iteration
best_costs
property
writable
¶
Cost values for best solution
new_costs
property
writable
¶
Cost values this iteration
best_approx_costs
property
writable
¶
Convexified costs for best solution
new_approx_costs
property
writable
¶
Convexified costs this iteration
OSQPEigenSolver
¶
Bases: QPSolver
OSQP-based QP solver
getSolution
¶
updateGradient
¶
updateGradient(gradient: Annotated[NDArray[float64], dict(shape=(None,), writable=False)]) -> bool
updateLowerBound
¶
updateLowerBound(lower_bound: Annotated[NDArray[float64], dict(shape=(None,), writable=False)]) -> bool
updateUpperBound
¶
updateUpperBound(upper_bound: Annotated[NDArray[float64], dict(shape=(None,), writable=False)]) -> bool
updateBounds
¶
updateBounds(lower_bound: Annotated[NDArray[float64], dict(shape=(None,), writable=False)], upper_bound: Annotated[NDArray[float64], dict(shape=(None,), writable=False)]) -> bool
QPProblem
¶
Abstract base class for QP problems (convexified NLP)
addConstraintSet
¶
Add a set of constraints
addCostSet
¶
Add a cost term with specified penalty type
getVariableValues
¶
Get current optimization variable values
evaluateTotalConvexCost
¶
evaluateTotalConvexCost(var_vals: Annotated[NDArray[float64], dict(shape=(None,), writable=False)]) -> float
Evaluate convexified cost at given point
evaluateConvexCosts
¶
evaluateConvexCosts(var_vals: Annotated[NDArray[float64], dict(shape=(None,), writable=False)]) -> Annotated[NDArray[numpy.float64], dict(shape=(None,), order=C)]
Evaluate individual convexified costs
getExactCosts
¶
Get current exact costs
evaluateConvexConstraintViolations
¶
evaluateConvexConstraintViolations(var_vals: Annotated[NDArray[float64], dict(shape=(None,), writable=False)]) -> Annotated[NDArray[numpy.float64], dict(shape=(None,), order=C)]
Evaluate convexified constraint violations
getExactConstraintViolations
¶
getExactConstraintViolations() -> Annotated[NDArray[numpy.float64], dict(shape=(None,), order=C)]
Get current exact constraint violations
setBoxSize
¶
setBoxSize(box_size: Annotated[NDArray[float64], dict(shape=(None,), writable=False)]) -> None
Set trust region box size
setConstraintMeritCoeff
¶
setConstraintMeritCoeff(merit_coeff: Annotated[NDArray[float64], dict(shape=(None,), writable=False)]) -> None
Set constraint merit coefficients
getBoxSize
¶
Get trust region box size
SQPCallback
¶
TrustRegionSQPSolver
¶
Trust region SQP solver for trajectory optimization.
Key methods for real-time/incremental optimization: - init(qp_prob): Initialize solver with problem - stepSQPSolver(): Run ONE SQP iteration (for real-time control) - getResults(): Get current optimization results - setBoxSize(): Control trust region size
params
property
writable
¶
SQP parameters (modify before calling init/solve)
__init__
¶
Construct with a QP solver (e.g., OSQPEigenSolver)
init
¶
Initialize the solver with a QP problem for incremental solving
stepSQPSolver
¶
Run a SINGLE SQP convexification step.
This is the key method for real-time/online planning. Returns True if QP solve converged (does not mean SQP converged).
Typical usage
solver.init(problem) while solver.getStatus() == SQPStatus.RUNNING: solver.stepSQPSolver() # Check constraints, update environment, etc.
verifySQPSolverConvergence
¶
Check if SQP constraints are satisfied
adjustPenalty
¶
Increase penalty on constraints when SQP reports convergence but constraints violated
solveQPProblem
¶
Solve current QP problem, store results, call callbacks
setBoxSize
¶
Set trust region box size (for online planning control)
callCallbacks
¶
Call all registered callbacks. Returns false if any callback returned false.
registerCallback
¶
Register an optimization callback
See also¶
trajopt_ifopt— variables and constraints- Low-Level SQP API
- 0.33 → 0.34 migration