【python+ROS+路径规划】五、pyomo非线性规划工具

看到了这篇博客无人车系统(十):c++与python非线性规(优)划(化)工具
突然发现python也有mpc工具,所以干脆不用matlab了,直接使用python做mpc的轨迹跟踪。

pyomo的简单了解

pyomo的安装

VSCode上面安装了半天,各种BUG,最后还是先安装了Ananconda,然后再安装pyomo

在Ubuntu20.04 + Anaconda环境下安装pyomo与ipopt:

conda update conda
conda install -c conda-forge ipopt
conda install -c conda-forge coincbc
conda install -c conda-forge pyomo
conda install -c conda-forge pyomo.extras

Anaconda与ros结合使用

在调好Anaconda之后打开VSCode,使用roscore命令会报错:

Command 'roscore' not found, but can be installed with:

sudo apt install python3-roslaunch

这个时候

source ./devel/setup.bash

一下就好了
而且发现也可以使用rosrun,Anaconda里面的包也都可以使用。

基本使用

官网:pyomo之后有空会翻译一下。

例子

尝试解决优化问题:
m i n i m i z e x 1 x 4 ( x 1 + x 2 + x 3 ) + x 3 s . t . x 1 x 2 x 3 x 4 ≥ 25 x 1 2 + x 2 2 + x 3 2 + x 4 2 = 40 1 ≤ x 1 , x 2 , x 3 , x 4 ≤ 5 \small{minimize} \quad x_1x_4(x_1+x_2+x_3)+x_3\\s.t.\qquad x_1x_2x_3x_4≥25\\\qquad \qquad \qquad x_1^2+x_2^2+x_3^2+x_4^2=40\\\qquad \qquad \qquad1≤x_1,x_2,x_3,x_4≤5 minimizex1x4(x1+x2+x3)+x3s.t.x1x2x3x425x12+x22+x32+x42=401x1,x2,x3,x45

import numpy as np
from pyomo.environ import *
from pyomo.dae import *

model = ConcreteModel()
model.x = Var(RangeSet(1, 4), bounds=(1, 5))
model.cons1 = Constraint(rule=lambda model: 40==model.x[1]**2+model.x[2]**2+model.x[3]**2+model.x[4]**2)
model.cons2 = Constraint(rule=lambda model: 25<=model.x[1]*model.x[2]*model.x[3]*model.x[4])
model.obj = Objective(expr = model.x[1]*model.x[4]*(model.x[1] + model.x[2] + model.x[3]) + model.x[3], sense=minimize) 
SolverFactory('ipopt').solve(model)
solutions = [model.x[i]() for i in range(1, 5)]
print("solutins is :"+str(solutions))

在这里插入图片描述