GPOPS工具箱在2019及以上版本中出错解决办法
最近使用GPOPS进行仿真,最开始用的matlab版本是15b,太老了,自动补全代码功能什么的都不如新版本,于是换了2021b,结果跑GPOPS会出动态链接库错误。这是因为GPOPS里面采用的序列二次规划方法是调用的IPOPT经matlab老版本编译的工具包,matlab这些年更新有些库可能被移除了,所以无法使用。接下来是具体解决办法(仅限windows平台下,mac或Linux平台做个参考吧):
1、Github上找mexIPOPT,参考链接:https://github.com/ebertolazzi/mexlPOPT。下载全部源码后解压mexIPOPT-master。
2、matlab安装mingw,这个需要和matlab匹配,因为matlab支持的gcc版本最高才6.3.3,所以装错版本matlab是无法支持的。推荐方法:附加功能管理器直接找mingw,下载安装好直接配置:mex -setup。
3、matlab中路径转换到mexIPOPT解压后的文件夹下的toolbox中,直接运行CompileIpoptMexLib.m,等待编译成功。
4、mexIPOPT-master\toolbox\bin\windows_mingw将该路径下全部文件放到\Gpops\nlp\ipopt下,原GPOPS中的ipopt下文件只需要保留ipopt_auxdata.m,另外\mexIPOPT-master\toolbox\lib下的ipopt.m也要放到GPOPS下的ipopt文件夹中。
5、打开\Gpops\lib\gpopsRPMIntegration\gpopsIpoptRPMI.m将[Zsol info] = ipopt(ZG,funcs,options);改为[Zsol info] = ipopt_auxdata(ZG,funcs,options);如果用的是GPOPS中的微分部分,就修改:\Gpops\lib\gpopsRPMDifferentiation\gpopsIpoptRPMD.m相应的程序。原始程序直接调用ipopt,funcs中的函数句柄没有输入辅助数据,导致无法运行。
ps:这样编译出来是一个mexw64文件加一些库文件,也可以考虑直接用已编译好带库的Ipopt包,文件占用会更小一点,但是兼容性可能不太好。