速度规划问题 - 基础模型
在这个例子中, 我们演示了如何使用OPTIMake建模与求解一个multi-stage问题, 例如轨迹规划问题或MPC控制问题.
问题描述
考虑一个10 s的速度规划问题, 我们需要使得速度达到给定的参考速度. 同时, 我们需要考虑以下约束:
- 加速度受限于[-3, 3]
- 初始位置为0 , 初始速度为0
- 在[7, 8] s的时间窗口内的位置需要大于60
基于以上的问题设定, 我们设定如下的目标函数:
同时, 我们需要考虑以下的约束条件:
建模
上述的优化问题在OPTIMake中的建模如下.
我们将10 s的时间窗口划分为100个时间点, 也就是 (对应时间步长为0.1 s).
prob = multi_stage_problem('speed_planning', 100)
接下来, 我们需要定义问题的参数: 速度参考值 和 位置下限 . 因为是一个时间相关的参数, 所以我们需要将其定义为一个stage-dependent的参数. 也就是在每个stage (时间点)都可以设置不同的值.
vref = prob.parameter('vref', stage_dependent=False)
smin = prob.parameter('smin', stage_dependent=True)
然后, 我们需要定义问题的变量, 和. 注意到我们在定义变量时, 可以同时设置该变量的上下界 (硬边界与软边界). 例如, 我们可以设置的下界为, 的上下界为[-3, 3].
s = prob.variable('s', hard_lowerbound=smin)
v = prob.variable('v')
a = prob.variable('a', hard_lowerbound=-3, hard_upperbound=3)
接下来, 我们需要定义问题的目标函数. 这里我们使用了general_objective函数来定义目标函数.
obj = general_objective((v - vref)**2)
prob.objective(obj)
接下来, 我们需要定义问题的约束条件. 这里我们使用了differential_equation