安装eigen opqp eigen-osqp matplotlib-cpp IPOPT及使用

准备使用eigen opqp eigen-osqp matplotlib-cpp做一个关于自动驾驶planning模块基础算法的仿真工作,增强对算法和C++的掌握,记录一下第三方库的安装步骤。

1软件安装的概述

1.1ubuntu文件目录

/usr:系统级的目录,可以理解为C:/Windows/

/usr/lib理解为C:/Windows/System32

/usr/local:用户级的程序目录,可以理解为C:/Progrem Files/。用户自己编译的软件默认会安装到这个目录下。

/opt:用户级的程序目录,可以理解为D:/Softwareopt有可选的意思,这里可以用于放置第三方大型软件(或游戏),当你不需要时,直接rm -rf掉即可。在硬盘容量不够时,也可将/opt单独挂载到其他磁盘上使用。

源码放哪里? /usr/src:系统级的源码目录。 /usr/local/src:用户级的源码目录。

1.2ubuntu软件安装

在linux开发中,我们经常需要安装一些第三方软件。

通常情况下,我们可以直接sudo apt-get install software_name 来安装一个软件,使用的安装目录如下:

下载的软件的存放位置:/var/cache/apt/archives
安装后软件的默认位置:/usr/share
可执行文件位置:/usr/bin
配置文件位置:/etc
lib文件位置:/usr/lib

但是在实际开发过程中,由于开发需求,我们需要对一些软件进行源码安装。

我们下载软件源码包并且解压后,通常都会发现解压目录中有configure文件,该文件里配置了编译的一些参数,如果没有特殊要求,我们只要执行如下命令,便可完成源码编译安装:

    ./configure
    make
    sudo make install

但是由于某些需求,我们需要把软件编码编译到一个指定的目录中,要想改变软件的安装目录,有以下几种方法可以实现:

1. 修改configure文件中prefix的值:

    打开configure文件,然后找到prefix值,修改未prefix=你的安装目录,然后保存退出,再执行./configure & make & sudo make install就可以,不过该方法比较麻烦,会容易改动到configure文件的其他的参数,不建议使用。

2.执行configure文件时指定安装目录:

./configure --prefix=(指定的安装路径)

 3.在make install指定DESTDIR参数:

    ./configure
    make 
    make install DESTDIR= (指定的安装路径)

2.eigen的安装

//打开终端,进入/eigen-3.4.0文件夹,然后执行以下指令
mkdir build
cd build
cmake ..
sudo make install

3.osqp的安装

//获取源文件
git clone --recursive https://github.com/osqp/osqp
cd osqp
mkdir build
cd build
cmake .. -DCMAKE_INSTALL_PREFIT=usr/local/osqp
sudo make install
source ~/.bashrc  //刷新环境变量

4.eigen-osqp的安装

//打开终端,进入osqp-eigen文件夹,然后执行以下指令
$ mkdir build       //然后创建build文件夹
$ cd build          //再进入build文件夹
$ cmake .. -DCMAKE_INSTALL_PREFIT=usr/local/osqp-eigen
$ sudo make install
$ source ~/.bashrc  //刷新环境变量

5.matplotlib的安装

pip3 intall matplotlib numpy

下载matplot-cpp,程序中包含matplotcpp.h即可

6.CMakelist

没有使用find_package,后面再研究研究

cmake_minimum_required(VERSION 3.0.2)
project(test)

#头文件目录
include_directories( 
  #由于eigen-osqp的头文件包含路径不完整,因此不能只写 /usr/local/include/
 /usr/local/include/eigen3 #eigen3头文件目录
 /usr/local/include/osqp #osqp头文件目录
 /usr/local/include/matplotlibcpp #matplotlibcpp头文件目录
 /usr/include/python3.6 #python3.6头文件目录
)

#库文件目录
link_directories(
  /usr/local/lib  #eigen3 osqp eigen-osqp 的动态链接库目录
  /usr/lib/python3.6/config-3.6m-x86_64-linux-gnu #pyheon的动态链接库目录
  )
  
add_executable(test  test.cpp  )

target_link_libraries(test
                       libosqp.so  
                       libOsqpEigen.so 
                       libqdldl.so 
                       libpython3.6.so
                       )
/*
1、<>先去系统目录中找头文件,如果没有在到当前目录下找。所以像标准的头文件 stdio.h和 stdlib.h等用这个方法。 
2、""首先在当前目录下寻找,如果找不到,再到系统目录中寻找。 这个用于include自定义的头文件,让系统优先使用当前目录中定义的。
*/


#include <iostream>

//using Eigen::MatrixXd;
//此处包含路径都是相对于/usr/local/include/...
#include <eigen3/Eigen/Dense>
#include <osqp/osqp.h>

// osqp-eigen
#include <OsqpEigen/OsqpEigen.h>
#include  <matplotlibcpp/matplotlibcpp.h>

 
using namespace Eigen;
using namespace Eigen::internal;
using namespace Eigen::Architecture;
 
using namespace std;

namespace plt = matplotlibcpp;


Eigen::SparseMatrix<double> hessian;
Eigen::VectorXd gradient;
Eigen::SparseMatrix<double> linearMatrix;
Eigen::VectorXd lowerBound;
Eigen::VectorXd upperBound;
 
int initMat(OsqpEigen::Solver& solver)
{
    unsigned int numOfVar = 3;
    unsigned int numOfCons = 4;
    solver.data()->setNumberOfVariables(numOfVar);
    solver.data()->setNumberOfConstraints(numOfCons);
 
    hessian.resize(numOfVar, numOfVar);
    gradient.resize(numOfVar);
    linearMatrix.resize(numOfCons, numOfVar);
    lowerBound.resize(numOfCons);
    upperBound.resize(numOfCons);
 
 
    hessian.insert(0, 0) = 1;
    hessian.insert(0, 1) = -1;
    hessian.insert(0, 2) = 1;
    hessian.insert(1, 0) = -1;
    hessian.insert(1, 1) = 2;
    hessian.insert(1, 2) = -2;
    hessian.insert(2, 0) = 1;
    hessian.insert(2, 1) = -2;
    hessian.insert(2, 2) = 4;
   //cout << "hessian" << hessian << endl;
   /* hessian << 1, -1, 1,
              -1, 2, -2,
               1, -2, 4;*/
 
    gradient << 2, -3, 1;
    
    linearMatrix.insert(0, 0) = 1;
    linearMatrix.insert(1, 1) = 1;
    linearMatrix.insert(2, 2) = 1;
    linearMatrix.insert(3, 0) = 1;
    linearMatrix.insert(3, 1) = 1;
    linearMatrix.insert(3, 2) = 1;
    /*linearMatrix << 1, 0, 0,
                    0, 1, 0,
                    0, 0, 1,
                    1, 1, 1;*/
 
    lowerBound << 0, 0, 0, 0.5;
    upperBound << 1, 1, 1, 0.5;
 
    if (!solver.data()->setHessianMatrix(hessian)) return false;
    if (!solver.data()->setGradient(gradient)) return false;
    if (!solver.data()->setLinearConstraintsMatrix(linearMatrix)) return false;
    if (!solver.data()->setLowerBound(lowerBound)) return false;
    if (!solver.data()->setUpperBound(upperBound)) return false;
 
    return true;
}
 
int main() {
    OsqpEigen::Solver solver;
 
    // set the solver
    solver.settings()->setWarmStart(true);
 
    // instantiate the solver
    if (initMat(solver)) {
        if (!solver.initSolver()) return 1;
    }
    else {
        cout << "initilize QP solver failed" << endl;
        return 1;
    }
 
    // solve
    solver.solve();
 
    Eigen::VectorXd QPSolution;
    QPSolution = solver.getSolution();
    
    cout << "x1 = " << QPSolution[0] << endl
        << "x2 = " << QPSolution[1] << endl
        << "x3 = " << QPSolution[2] << endl;


//matplotlib
    plt::plot({1,3,2,4});
    plt::show();

}

效果展示

7.IPOPT 安装

1.准备必要的库

sudo apt-get install gcc g++ gfortran git patch wget pkg-config liblapack-dev libmetis-dev

2.下载求解器

HSL for IPOPT

3.git并安装第三方库

//在ipopt文件夹下,安装第三方库
git clone https://github.com/coin-or-tools/ThirdParty-HSL.git
//将求解器copy到ThirdParty-HSL文件夹内,解压重命名为coinhsl
gunzip coinhsl-x.y.z.tar.gz
tar xf coinhsl-x.y.z.tar
ln -s coinhsl-x.y.z coinhsl
//在ThirdParty-HSL文件夹内,配置编译安装
./configure
make
make install

4.安装ipopt

mkdir build
cd build
make -j
make test
sudo make install

5.安装自动微分工具ADOL-C

安装ColPack

//安装Colpack
git clone http://github.com/CSCsw/ColPack.git
cd ColPack/build/automake
autoreconf -vif
mkdir build
cd build
../configure --prefix=usr/local
make -j
sudo make install

安装ADOL-c

git clone http://github.com/coin-or/ADOl-C.git

./configure prefix=usr/local
make -j
sudo make install

 参考文献

linux安装eigen/osqp/osqp_eigen库_琴郎同学的博客-CSDN博客_linux安装eigen库

  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
要在Ubuntu安装osqp-eigen库,首先需要安装eigen库。可以从琴郎同学的博客中找到关于在Linux安装eigen库的教程。另外,你也可以直接从Ubuntu的源码库中下载eigen库的源码并解压缩。安装eigen库后,你可以按照以下步骤安装osqp-eigen库: 1. 打开终端并使用以下命令克隆osqp-eigen库的GitHub仓库: ``` git clone https://github.com/robotology/osqp-eigen.git ``` 2. 进入osqp-eigen目录并创建一个build文件夹: ``` cd osqp-eigen mkdir build && cd build ``` 3. 使用cmake命令生成Makefile: ``` cmake ../ ``` 4. 使用make命令编译osqp-eigen库: ``` make ``` 5. 使用sudo make install命令安装osqp-eigen库。默认情况下,osqp-eigen库将安装在`/usr/local/include`目录中。请注意,这是非apt安装的包,默认情况下不会安装在`/usr/include`目录中。 通过按照以上步骤进行操作,你应该能够成功在Ubuntu安装osqp-eigen库。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [安装eigen opqp eigen-osqp matplotlib-cpp使用](https://blog.csdn.net/zk1639712996/article/details/126568314)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [eigen-3.3.7.tar.gz](https://download.csdn.net/download/Mua111/12651226)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [18.04安装osqp-eigen](https://blog.csdn.net/qq_38313901/article/details/119415574)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

莫之涵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值