模型预测控制工具包——ACADO:简介、安装与测试
- ACADO 工具包简介
- ubuntu20.04 安装 ACADO工具包
- 安装依赖
- 安装ACADOtoolkit
- 测试
ACADO 工具包简介
ACADO Toolkit 是一个用 C++ 编写的用于自动控制和动态优化的软件环境和算法集合。 它提供了一个通用框架,用于使用多种算法进行直接优化控制,包括模型预测控制以及状态和参数估计。ACADO 工具包是作为独立的 C++ 代码实现的,并带有用户友好的 MATLAB 界面。 面向对象的设计允许方便地耦合现有优化包并使用用户编写的优化例程对其进行扩展。它还提供(独立)高效实施的 Runge-Kutta 和 BDF 积分器,用于模拟 ODE 和 DAE。
ACADO Toolkit 旨在满足这四个关键属性:
- 开源:该工具包可免费获得,最新版本以及文档和示例可以从 http://www.acadotoolkit.org 下载。
- 用户友好性:ACADO Toolkit 的语法被设计为尽可能直观,以便允许用户以非常接近通常数学语法的方式制定控制问题。
- 代码可扩展性:将现有算法链接到工具包应该很容易。这是通过 ACADO 工具包的面向对象软件设计风格来实现的。
- 自包含:ACADO 是一个独立的工具包。 本身不需要外部包,但可以链接用于图形输出的外部求解器或包。
ubuntu20.04 安装 ACADO工具包
系统:Linux ubuntu20.04
编译工具:CMake
安装依赖
首先需要通过 apt-get 包管理器安装一些依赖包
以下软件包是必需的:
gcc、g++、cmake 和 git。这些基本上都有,没有的需要安装。
以下软件包是可选的:
Gnuplot、Doxygen 和 Graphviz 是可选的,ACADO 可以在没有这些包的情况下工作,但不安装的话将无法可视化结果和/或生成 API 文档。
Gnuplot、Doxygen 和 Graphviz的安装方法:
sudo apt-get install gnuplot doxygen graphviz
终端出现如下字样表示安装完成
准备解压 …/3-libwxbase3.0-0v5_3.0.4+dfsg-15build1_amd64.deb …
正在解压 libwxbase3.0-0v5:amd64 (3.0.4+dfsg-15build1) …
正在选中未选择的软件包 libwxgtk3.0-gtk3-0v5:amd64。
准备解压 …/4-libwxgtk3.0-gtk3-0v5_3.0.4+dfsg-15build1_amd64.deb …
正在解压 libwxgtk3.0-gtk3-0v5:amd64 (3.0.4+dfsg-15build1) …
正在选中未选择的软件包 gnuplot-qt。
准备解压 …/5-gnuplot-qt_5.2.8+dfsg1-2_amd64.deb …
正在解压 gnuplot-qt (5.2.8+dfsg1-2) …
正在选中未选择的软件包 gnuplot。
准备解压 …/6-gnuplot_5.2.8+dfsg1-2_all.deb …
正在解压 gnuplot (5.2.8+dfsg1-2) …
正在设置 doxygen (1.8.17-0ubuntu2) …
正在设置 aglfn (1.7+git20191031.4036a9c-2) …
正在设置 libwxbase3.0-0v5:amd64 (3.0.4+dfsg-15build1) …
正在设置 gnuplot-data (5.2.8+dfsg1-2) …
正在设置 libwxgtk3.0-gtk3-0v5:amd64 (3.0.4+dfsg-15build1) …
正在设置 gnuplot-qt (5.2.8+dfsg1-2) …
update-alternatives: 使用 /usr/bin/gnuplot-qt 来在自动模式中提供 /usr/bin/gnuplot (gnuplot)
正在设置 gnuplot (5.2.8+dfsg1-2) …
正在处理用于 man-db (2.9.1-1) 的触发器 …
正在处理用于 libc-bin (2.31-0ubuntu9.16) 的触发器 …
安装ACADOtoolkit
在GitHub下载工具包代码。 官网的建议是下载稳定分支:
git clone https://github.com/acado/acado.git -b stable ACADOtoolkit
终端出现如下字样表示下载完成
正克隆到 ‘ACADOtoolkit’…
remote: Enumerating objects: 19155, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 19155 (delta 0), reused 1 (delta 0), pack-reused 19151 (from 1)
接收对象中: 100% (19155/19155), 13.19 MiB | 5.95 MiB/s, 完成.
处理 delta 中: 100% (13899/13899), 完成.
并且在主目录下生成文件夹ACADOtoolkit
进入 ACADOtoolkit 文件夹,并创建一个编译文件夹build:
cd ACADOtoolkit
mkdir build
cd build
运行 CMake 以生成 makefile,并开始编译过程:
cmake ..
make
终端出现如下字样表示cmake完成
– Performing Test COMPILER_SUPPORTS_CXX11
– Performing Test COMPILER_SUPPORTS_CXX11 - Success
– Performing Test COMPILER_SUPPORTS_GNU11
– Performing Test COMPILER_SUPPORTS_GNU11 - Success
– Performing Test COMPILER_SUPPORTS_CXX0X
– Performing Test COMPILER_SUPPORTS_CXX0X - Success
– Performing Test COMPILER_SUPPORTS_GNU0X
– Performing Test COMPILER_SUPPORTS_GNU0X - Success
– Found PythonInterp: /usr/bin/python (found version “3.8.10”)
– Configuring done
– Generating done
– Build files have been written to: /home/jk-jone/ACADOtoolkit/build
终端出现如下字样表示make完成
[100%] Linking CXX executable …/…/…/…/examples/code_generation/empc/powerkite
[100%] Built target code_generation_powerkite
测试
通过运行示例程序检查安装是否成功:
cd ACADOtoolkit
cd examples/getting_started
./simple_ocp
终端输出如下:
sqp it | qp its | kkt tol | obj val | merit val | ls param |
1 | 11 | 4.015966e+01 | 9.950000e+00 | 5.419249e+01 | 1.000000e+00 |
2 | 1 | 1.306070e-01 | 9.931631e+00 | 1.006632e+01 | 1.000000e+00 |
3 | 1 | 2.549335e-02 | 9.906147e+00 | 9.906158e+00 | 1.000000e+00 |
4 | 1 | 7.484607e-02 | 9.831350e+00 | 9.831410e+00 | 1.000000e+00 |
5 | 2 | 3.457549e-01 | 9.487488e+00 | 9.489759e+00 | 1.000000e+00 |
6 | 12 | 3.045474e-01 | 9.190947e+00 | 9.200555e+00 | 1.000000e+00 |
7 | 19 | 5.194080e-01 | 8.691541e+00 | 8.715543e+00 | 1.000000e+00 |
8 | 14 | 4.739167e-01 | 8.248118e+00 | 8.284711e+00 | 1.000000e+00 |
9 | 17 | 3.334551e-01 | 7.927619e+00 | 7.943166e+00 | 1.000000e+00 |
sqp it | qp its | kkt tol | obj val | merit val | ls param |
10 | 18 | 4.999093e-01 | 7.457878e+00 | 7.494079e+00 | 1.000000e+00 |
11 | 19 | 1.652661e-02 | 7.441887e+00 | 7.442529e+00 | 1.000000e+00 |
12 | 19 | 1.460624e-04 | 7.441741e+00 | 7.441741e+00 | 1.000000e+00 |
13 | 19 | 1.190096e-07 | 7.441741e+00 | 7.441741e+00 | 1.000000e+00 |
Covergence achieved. Demanded KKT tolerance is 1.000000e-06.
输出曲线结果图如下: