OSQP求解器安装

osqp-eigen 依赖于 osqp 库,osqp 依赖于 eigen 库,故建议的安装顺序如下:(1)eigen;(2)osqp;(3)osqp-eigen

eigen库在ros安装时,系统已自动安装

若先安装osqp-eigen会报错

osqp

osqp 是一种二次规划求解器,可用求解线性组合或二次规划问题,在同类问题中求解效率极高!

osqp 官网:https://osqp.org/,其C语言版本由 oxford 大学开发。

git clone --recursive https://github.com/oxfordcontrol/osqp.git
cd osqp && mkdir build && cd build && cmake ..
make
sudo make install

osqp-Eigen

osqp-eigen 是对 osqp 库的 eigen 接口封装,使其更加好用。

osqp 是用纯 C 实现的,osqp-eigen引入了C++的Eigen库,方便矩阵和向量的操作。

git clone https://github.com/robotology/osqp-eigen.git
cd osqp-eigen
mkdir build && cd build && cmake ..
sudo make install
echo "export OsqpEigen_DIR=/path/"

CmakeLists.txt

cmake_minimum_required(VERSION 3.0)
find_package(OsqpEigen REQUIRED)
add_executable(xxx_node src/main.cpp)
target_link_libraries(xxx_node
					  OsqpEigen::OsqpEigen
					  osqp::osqp
					  Eigen3::Eigen)

Demo

OsqpEigen::Solver solver;

solver.settings()->setWarmStart(true);
solver.data()->setNumberOfVariables();	// 变量个数
solver.data()->setNumberOfConstraints();	// 约束条件个数
if( ! solver.data()->setHessianMatrix(H)) return 1;	// 信息矩阵 H 
if( ! solver.data()->setGradient(g)) return 1;	// 梯度f
if( ! solver.data()->setLinearConstraintsMatrix(linearMatrix));	// 约束矩阵 lower < A*x < up
if( ! solver.data()->setLowerBound(lowerBound)) return 1;	// 下边界
if( ! solver.data()->setUpperBound(upperBound)) return 1; // 上边界

if( ! solver.initSolver() ) return 1;
if( ! solver.solve() ) return 1;
Eigen::VectorXd QPSolution = solver.getSolution();

英文使用手册

你可能感兴趣的:(机器人,osqp,求解器,优化)