OOQP 使用教程 c++

2023-05-16

最近学习了一下OOQP的使用在这里记录一下。

在matlab代码中是quadprog,而这次使用OOQP也主要是为了计算二次规划问题。

 

安装OOQP

首先是安装问题,不得不说,当时安装也花了不少时间,如果是第一次,确实不是很好安装

github https://github.com/emgertz/OOQP

OOQP主页 http://pages.cs.wisc.edu/~swright/ooqp/

直接git clone下载文件源码 git clone https://github.com/emgertz/OOQP

英文版的安装说明 http://pages.cs.wisc.edu/~swright/ooqp/INSTALL.html

 

安装依赖BLAS和MA27(或MA57)

QQ截图20200913113743.png

BLAS 直接按照其中的命令安装

https://www.jianshu.com/p/fe6c4f42aa0b

QQ截图20200913112409.png

下载MA27我是直接在github上下载的,当然你也可以去官网上去下载 https://github.com/HITSZ-LeggedRobotics/ma27

MA57和MA27选择其中一个就可以

QQ截图20200913112439.png

 

安装好依赖后,注意在编译源码的时候,把库文件的位置链接清楚,不然编译不会成功。

 

使用说明

 

官网给出了一分详细的使用说明

  • User Manual: E. M. Gertz and S. J. Wright, OOQP User Guide, October, 2001. Updated May 2004.

但是英文如果不太行的,确实看着很吃力

这里我看到一维博主对其中c++的使用进行了比较详细的翻译 https://qiaoxu123.github.io/post/ubuntu-ooqp-useguide/

在给出约束的时候,很有意思,你需要按照他的方式,把约束的值,塞进数组里面,我在这里单独写了一个函数来做这个事情。以下给出的代码是官网文档中给出的示例题写的

QQ截图20200913113423.png

Code details

/* OOQP                                                               *
 * Authors: E. Michael Gertz, Stephen J. Wright                       *
 * (C) 2001 University of Chicago. See Copyright Notification in OOQP */

#include "QpGenData.h"
#include "QpGenVars.h"
#include "QpGenResiduals.h"
#include "GondzioSolver.h"
#include "QpGenSparseMa27.h"

#include <iostream>
#include <string.h>

using namespace std;

const int nx   = 2;
double    c[]  = { 1.5,  -2 };

double  xupp[] = { 20,   0 };
char   ixupp[] = {  1,   0 };

double  xlow[] = {  0,   0 };
char   ixlow[] = {  1,   1 };

const int nnzQ = 3;
int    irowQ[] = {  0,   1,   1 }; 
int    jcolQ[] = {  0,   0,   1 };
double    dQ[] = {  8,   2,  10 };


int my         = 0;
double * b     = 0;
int nnzA       = 0;
int * irowA    = 0;
int * jcolA    = 0;
double * dA    = 0;

const int mz   = 2;
double clow[]  = { 2,   0 };
char  iclow[]  = { 1,   0 };

double cupp[]  = { 0,   6 };
char  icupp[]  = { 0,   1 };

const int nnzC = 4;
int   irowC[]  = { 0,   0,   1,   1};
int   jcolC[]  = { 0,   1,   0,   1};
double   dC[]  = { 2,   1,  -1,   2};

int main( int argc, char * argv[] )
{
  int usage_ok = 1, quiet = 0;

  if( argc > 2 ) usage_ok = 0;
  if( argc == 2 ) {
    if( 0 == strcmp( "--quiet", argv[1] ) ) {
      quiet = 1;
    } else {
      usage_ok = 0;
    }
  } 
  if( !usage_ok ) {
    cerr << "Usage: " <<  argv[0] << " [ --quiet ]\n";
    return 1;
  }
    
  QpGenSparseMa27 * qp 
    = new QpGenSparseMa27( nx, my, mz, nnzQ, nnzA, nnzC );
  
  QpGenData      * prob = (QpGenData * ) qp->copyDataFromSparseTriple(
        c,      irowQ,  nnzQ,   jcolQ,  dQ,
        xlow,   ixlow,  xupp,   ixupp,
        irowA,  nnzA,   jcolA,  dA,     b,
        irowC,  nnzC,   jcolC,  dC,
        clow,   iclow,  cupp,   icupp );

  QpGenVars      * vars 
    = (QpGenVars *) qp->makeVariables( prob );
  QpGenResiduals * resid 
    = (QpGenResiduals *) qp->makeResiduals( prob );
  
  GondzioSolver  * s     = new GondzioSolver( qp, prob );
  
  if( !quiet ) s->monitorSelf();
  int ierr = s->solve(prob,vars, resid);
  
  if( ierr == 0 ) {
    cout.precision(4);
    cout << "Solution: \n";
    vars->x->writefToStream( cout, "x[%{index}] = %{value}" );
  } else {
    cout << "Could not solve the problem.\n";
  }
  return ierr;
}

   

我的CMakeLists.txt

 

QQ截图20200913113831.png

如果有兴趣你也可以看看源代码中examples里面的其它例子

 

QQ截图20200913114000.png

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OOQP 使用教程 c++ 的相关文章

  • Git使用教程

    1 版本控制 1 1 简介 版本控制 Revision control 是一种在开发的过程中用于 管理我们对文件 目录或工程等内容的修改历史 方便查看更改历史记录 备份以便恢复以前的版本的软件工程技术 实现跨区域多人协同开发 追踪和记载 个
  • pvetools使用教程

    如果你是PVE6 请执行 rm etc apt sources list d pve enterprise list export LC ALL 61 en US UTF 8 apt update amp amp apt y install
  • wxHelper使用教程

    方法介绍 前言1 工具介绍 x1f517 1 1 环境介绍1 2 功能介绍1 3 源码地址 2 使用说明 x1f517 2 1 Server说明2 2 引入jar包 3 方法介绍 x1f517 1 服务器配置 token验证 2 自定义菜单
  • VSCode 使用教程-3.设置主题文件图标与字体大小

    前言 VSCode 可以根据自己的喜好设置不同的主题 xff0c 字体大小也可以调整 设置主题 点开设置 颜色主题 按上下键可以切换主题 xff0c 看到预览效果 选好自己喜欢的主题 xff0c 点击就设置成功了 设置字体大小 编辑界面默认
  • Tmux 使用教程

    转载自Tmux 使用教程 作者 xff1a 阮一峰 URL xff1a http www ruanyifeng com blog 2019 10 tmux html Tmux 1 Tmux 是什么 xff1f 1 1 会话与进程1 2 Tm
  • tmux使用教程

    tmux 的安装 Centos系统中使用 yum 来安装 tmuxyum install tmuxUbuntu系统使用apt安装tmuxapt install tmuxMac OS 使用 brew 来安装 tmuxbrew install
  • ab plc软件_【原创】AB上位机FactoryTalk View的使用教程(上)

    点击 蓝字 发现惊喜 实现的目的 xff0c 应用的场合 本文以AB上位机FactoryTalk View SE为题讲一下该软件简单的入门使用方法 该上位机作软件在工厂中可以启到一个可视化的作用 xff0c 实时观察工厂自动化中的动态数据以
  • 阿里云CDN使用教程

    CDN 名词解释 域名 域名是Internet网络上的一个服务器或一个网络系统的名字 xff0c 全世界 xff0c 没有重复的域名 CNAME记录 它是一个别名记录 Canonical Name xff1b 当 DNS 系统在查询 CNA
  • Intel Realsense T265使用教程(转载)

    这里面很重要一点说了获取T265相机参数的方式 xff0c 包括 相机的内参和相机与IMU之间的外参 转载自 xff1a https blog csdn net crp997576280 article details 109544456
  • MongoDB使用教程

    1 下载 xff1a https www mongodb com try download community 2 安装 解压下载包后正常步骤安装 创建服务 e Application develop MongoDB bin为路径 data
  • Notepad++使用教程

    Notepad 43 43 使用教程 2011年 2 月 26 日 发表评论 阅读评论 Notepad 43 43 是闪电博客推荐程序员必用的一款适合编程的 文本编辑 软件 xff0c 本文主要介绍 Notepad 43 43 的特点和使用
  • 深度学习标注工具 LabelMe 的使用教程(Windows 版本)

    深度学习标注工具 LabelMe 的使用教程 xff08 Windows 版本 xff09 2018 11 21 20 12 53 精灵标注助手 xff1a http www jinglingbiaozhu com LabelMe xff1
  • Mininet使用教程

    注 xff1a 1 重要的链接 xff1a http mininet org walkthrough display startup options 2 IPv4与IPv6之间的地址转换 https www subnetonline com
  • cmake使用教程

    CMakeLists txt文档编写以及packsge xml文档介绍 CMakeLists txt文档一 cmake minimum required命令二 CMake中的编译类型三 cmake编译选项 xff08 与2对应 xff09
  • UWB使用教程

    前言 本篇文章主要对淘宝商家给的UWB资料进行整理 xff0c 方便大家快速入门 注重UWB定位模块的使用 xff0c 不解释具体的原理 实现功能 xff1a 搭建UWB基站使用上位机配置参数ROS接受UWB的定位信息修改IMU的STM32
  • Docker 使用教程

    Docker 使用教程 1 基本使用教程 使用docker docker 下载镜像 span class token function sudo span span class token function docker span pull
  • git使用教程

    参考链接 xff1a 廖雪峰git使用教程 https www cnblogs com kumata p 9061166 html
  • Source Insight使用教程

    作为一个开放源代码的操作系统 xff0c Linux 附带的源代码库使得广大爱好者有了一个广泛学习 深入钻研的机会 xff0c 特别是Linux 内核的组织极为复杂 xff0c 同时 xff0c 又不能像windows 平台的程序一样 xf
  • 【教程】Matrikon OPC使用教程连载(二)

    MatrikonOPC介绍 Matrikon 是基于OPC UA和基于OPC的控制自动化数据互操作性产品的供应商 提供自动化厂商的高级OPC UA开发工具包 适用于从嵌入式设备到云应用的所有产品线 对于终端用户客户 Matrikon提供了关
  • 语音识别之获取语言数据(portaudio的平台搭建)

    我们要进行语言识别 那么就要先构建好平台 portaudio 我们需要采集所需要的16KHZ频率 16比特的声音信号 我们就可以采用portaudio来实现这个功能 那么这个Portaudio怎么使用呢 请看 http www cnblog

随机推荐

  • linux---五种高级IO模型

    阻塞IO模型非阻塞IO模型信号驱动IO模型异步IO模型多路转接IO模型高级IO重要概念 阻塞IO模型 在内核将数据准备好 xff0c 系统调用会一直等待 xff0c 所有的套接字默认都是阻塞IO方式 阻塞IO是最常见的IO模型 非阻塞IO模
  • Ubuntu错误处理集

    1 W GPG 错误 xff1a https developer download nvidia com compute cuda repos ubuntu1604 x86 64 Release 由于没有公钥 xff0c 无法验证下列签名
  • Linux下配置虚拟CAN

    1 加载vcan模块 sudo modprobe vcan 2 添加vcan0网卡 sudo ip link add dev vcan0 type vcan 3 查看当前CAN网络 ifconfig a 4 开启vcan0 sudo ip
  • ROS基础

    一 ROS的核心概念 节点 xff1a 节点管理器 xff1a 话题 xff1a 消息 xff1a 服务 xff1a 参数 xff1a 二 命令行工具的使用 命令行工具都是以ros开头的 常用命令 rostopicrosserviceros
  • Linux下编译Opencv和contrib

    1 安装准备 1 1 安装依赖项 sudo apt get install cmake sudo apt get install build essential libgtk2 0 dev libavcodec dev libavforma
  • YOLOv5和YOLOv7环境(GPU)搭建测试成功

    本来是用doc写的 xff0c 直接复制到这里很多图片加载缓慢 xff0c 我直接把doc上传到资源里面了 xff0c 0积分下载 xff1a 10条消息 YOLOv5和YOLOv7开发环境搭建和demo运行 Python文档类资源 CSD
  • 单片机通信总述——理论部分(CAN、串口、SPI、I2C等)

    一 基础概念 1 1 通信方法 并行通信 xff1a 传输原理 xff1a 数据各个位同时传输 xff1b 优点 xff1a 速度快 xff1b 缺点 xff1a 占用引脚资源多 是指使用 8 16 32 及 64 根或更多的数据线 有多少
  • Ubuntu系统搭建

    一 创建环境常见问题 1 1 windows11下打开虚拟机蓝屏问题 参考这篇文章 xff0c 控制面板 xff0c 启用和关闭windows功能 xff08 对话框 xff09 113条消息 VMware安装Ubuntu开启蓝屏解决方案
  • J-Link工具查看单片机内存等信息

    1 打开下图应用 2 输入 connect xff08 连接开发板 xff09 AC78013FDLA xff08 你的单片机型号 xff09 SWD xff08 仿真器接口 xff09 1000HZ xff08 接口速度 xff09 连接
  • Qt调用ffmpeg动态库和静态库及编译ffmpeg的方法

    一 编译 二 引入ffmpeg库文件 1 Qt工程下创建lib文件夹 xff0c lib文件夹下再创建ffmepg文件夹 2 将编译好的ffmpeg里面的include 和lib文件夹粘贴到如下文件夹下 xff08 3 xff09 在 pr
  • autoware花屏重影问题

    autoware 安装 花屏 重影问题 最近尝试下autoware来做建图 xff0c 无奈各类安装太过麻烦 xff0c 这里给几个小问题做下纪律 1 xff0c 安装过程 xff0c 走的官网那个 xff0c 事实证明官网教程最全面 xf
  • linux---select,poll,epoll的原理以及优缺点

    多路转接IO xff08 也叫IO多路复用 xff09 是一种处理高并发的IO事件监控 xff0c 同时对大量的描述符进行时间监控 xff0c 监控是否具备IO条件 就绪 xff1a 包括了读就绪事件 xff08 就是有数据到来的时候 xf
  • DTAM实现

    DTAM实现 这里是实现github上DTAM的一次记录 xff0c 主要是有些步骤的记录 需要下载的源码 xff08 可以多试试几个 xff0c 按照实现可能性排序 xff09 xff1a https github com Teddybe
  • jetson镜像克隆到固态再扩容简单方法

    jetson克隆方法很多 xff0c 我是自己把之前的sd镜像克隆做成img镜像了 然后烧写后之前是64g的后续烧写都是64g的不能把新的储存设备占满 这里有一个扩容和移植到固态的方法 主要分三步 xff1a 镜像克隆和烧录到sd卡使用固态
  • Orb_slam3 ROS ,D435i使用,ubuntu编译小记

    C 43 43 版本编译 先官网下载代码 xff0c 并下载安装官网所述安装包 git clone https github com UZ SLAMLab ORB SLAM3 git ORB SLAM3 下载完编译c 43 43 版本 cd
  • d455双目相机联合IMU标定

    感谢这两位博主的优秀文章 xff1a RealSense D455的标定并运行VINS FUSION Z Jin16的博客 CSDN博客 d455 标定 Realsense D435I标定 小岛 神酱的博客 CSDN博客 d435i参数 主
  • gitee发布示例

    简易的命令行入门教程 Git 全局设置 git config global user name 34 bnb 34 git config global user email 34 2207201665 64 qq com 34 创建 git
  • linux终端快捷指令创建

    使用这个打开gedit bashrc xff0c 把下面的按照下面的格式书写 xff1a alias lt 想要的快捷键 gt 61 操作指令 示例 xff1a alias sd 61 39 source devel setup sh 39
  • 使用vscode做得基础配置自动保存格式化

    vscode默认启用了根据文件类型自动设置tabsize的选项 34 editor detectIndentation 34 false 重新设定tabsize 34 editor tabSize 34 2 每次保存的时候自动格式化 34
  • OOQP 使用教程 c++

    最近学习了一下OOQP的使用在这里记录一下 在matlab代码中是quadprog xff0c 而这次使用OOQP也主要是为了计算二次规划问题 安装OOQP 首先是安装问题 xff0c 不得不说 xff0c 当时安装也花了不少时间 xff0