C++ compilling errors when using Quadprog++ with Eigen together
this is my first question here, I've searched it all over for a long time yet no solution.
I'm using QUadprog++ to solve a quadratic problem. When I use it in a test alone, it was alright. But when I implement it into my project, which contains Eigen, the Eigen operations will have errors like "Matrix A has no member named ‘lu_inverse’". If I comment the header files of Quadprog++ (Array.hh and Quadprog++.hh) out, the errors just disappear. So I assume that it was a conflict error between the header files of Eigen and Quadprog++. Does anyone have some clue? Thanks in advance!
c++ eigen quadprog
add a comment |
this is my first question here, I've searched it all over for a long time yet no solution.
I'm using QUadprog++ to solve a quadratic problem. When I use it in a test alone, it was alright. But when I implement it into my project, which contains Eigen, the Eigen operations will have errors like "Matrix A has no member named ‘lu_inverse’". If I comment the header files of Quadprog++ (Array.hh and Quadprog++.hh) out, the errors just disappear. So I assume that it was a conflict error between the header files of Eigen and Quadprog++. Does anyone have some clue? Thanks in advance!
c++ eigen quadprog
add a comment |
this is my first question here, I've searched it all over for a long time yet no solution.
I'm using QUadprog++ to solve a quadratic problem. When I use it in a test alone, it was alright. But when I implement it into my project, which contains Eigen, the Eigen operations will have errors like "Matrix A has no member named ‘lu_inverse’". If I comment the header files of Quadprog++ (Array.hh and Quadprog++.hh) out, the errors just disappear. So I assume that it was a conflict error between the header files of Eigen and Quadprog++. Does anyone have some clue? Thanks in advance!
c++ eigen quadprog
this is my first question here, I've searched it all over for a long time yet no solution.
I'm using QUadprog++ to solve a quadratic problem. When I use it in a test alone, it was alright. But when I implement it into my project, which contains Eigen, the Eigen operations will have errors like "Matrix A has no member named ‘lu_inverse’". If I comment the header files of Quadprog++ (Array.hh and Quadprog++.hh) out, the errors just disappear. So I assume that it was a conflict error between the header files of Eigen and Quadprog++. Does anyone have some clue? Thanks in advance!
c++ eigen quadprog
c++ eigen quadprog
asked Nov 20 at 4:03
liu jingyu
31
31
add a comment |
add a comment |
2 Answers
2
active
oldest
votes
if your using namespace quadprogpp;
then dont. your different libraries have the same typenames and thats causing the errors you have. It may be a few more characters to type quadprogpp::someFunction();
but its worth it. This is also why you shouldn't ever put a using namespace
in a header ever. Its because you pollute all files that include that header with the namespace symbols and name conflicts can ensue which is the same kind of error your having right now.
the Quadprog library is in it's own namespace.
#if !defined(_ARRAY_HH)
#define _ARRAY_HH
#include <set>
#include <stdexcept>
#include <iostream>
#include <iomanip>
#include <cmath>
#include <cstdlib>
namespace quadprogpp {
enum MType { DIAG };
template <typename T>
class Vector
notice how just after the #includes there is a decleration of namespace quadprogpp{} and everything that is defined in its enclosing brackets will be defined in scope to quadprogpp, so to use any of this library you have to prefix eveything with the namespace name. this is no different than using things from the standard library. I'm quite sure you've written the standard c++ hello world
#include<iostream>
int main()
{
std::cout << "hello world!" << std::endl;
return 0;
}
cout and endl being part of namespace std have to be prefixed with std:: to access them. Many new programmers to c++ dislike this and one of the very first things they google is how to not have to type out namespaces.
#include<iostream>
using namespace std;
int main()
{
cout << "hello world" << endl;
return 0;
}
the next thing new programmers often do is learn to place their definitions in header files and their program logic in cpp files. Thats when they commit the next common mistake.
#ifndef MYHEADER
#define MYHEADER
#include<string>
#include<vector>
#include<iostream>
using namespace std; //Never do this in a header.
doing that pollutes all of your code with everything in the standard library. That may seem like a trivial thing but when you start using another library or perhaps you create your own type that has the same name as things in the standard library that causes name collisions.
That's when the compiler simply cant reason about which Vector you want. But both Quadprog.hh and Array.hh in Quadprog++ are wrapped in namespace quadprogpp to specifically prevent name collision, which is the whole purpose of namespaces. So there is somewhere in your code, likely a header file, where you've made the statement of using namespace quadprogpp;
, or some other namespace that defines an Array type, and the compiler can't deduce which type your referring to in your code.
Other than removing your using namespace statements you can also prefix a typename with its namespace qualifer to disambiguate which type your talking about. In your case I'm confident your Array should be declared as quadprogpp::Array arraynamme;
rather than simply Array arrayname;
1
You can use a namespace alias to reduce the typing:namespace qp=quadprogpp;
Then writeqp::someFunction()
, etc.
– chtz
Nov 20 at 6:04
Thank you for your reply! But acctually there is no class or namespace of "quadprogpp" in the files, or you mean that I should create something like that then use it as you suggest?
– liu jingyu
Nov 20 at 6:56
@lin jingyu i looked at the source of Quadprog++, at the very least some of it is in a namespace.
– johnathan
Nov 20 at 6:58
1
ok, I‘ll look it up. I'm new to c++ too, so there is much to learn.
– liu jingyu
Nov 20 at 7:21
1
@johnnathan Thank you so much! Now I got better understanding on it. That helps me a lot!
– liu jingyu
Nov 21 at 3:16
|
show 2 more comments
You can also switch to one of QuadProgpp versions which can work with Eigen types directly: https://github.com/asherikov/QuadProgpp, https://www.cs.cmu.edu/~bstephe1/eiquadprog.hpp; or try an alternative implementation of the same algorithm (also Eigen based) https://github.com/asherikov/qpmad.
Thank you, I'll check them up. Have you tried them yet? Which one do you think is the easiest to implement?
– liu jingyu
Nov 22 at 9:19
API is pretty much the same. eiquadprog (and its variants) is a rather common choice in robotic applications. qpmad may be faster on some types of problems, but is much less common.
– asherikov
Nov 22 at 17:48
OK, thanks a lot! My case is just on a quadraped robot. The problem was solved and I got reasonable results. But it seems that Quadprog++ took relative long time. Before calling it, my algorithm took only 0.3 ms to finish, while calling it the time jump up to 0.8 ms, which is very close to the upper bound for solving time --1 ms. Maybe I should try some other implementations like you suggest.
– liu jingyu
Nov 26 at 2:41
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53386048%2fc-compilling-errors-when-using-quadprog-with-eigen-together%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
if your using namespace quadprogpp;
then dont. your different libraries have the same typenames and thats causing the errors you have. It may be a few more characters to type quadprogpp::someFunction();
but its worth it. This is also why you shouldn't ever put a using namespace
in a header ever. Its because you pollute all files that include that header with the namespace symbols and name conflicts can ensue which is the same kind of error your having right now.
the Quadprog library is in it's own namespace.
#if !defined(_ARRAY_HH)
#define _ARRAY_HH
#include <set>
#include <stdexcept>
#include <iostream>
#include <iomanip>
#include <cmath>
#include <cstdlib>
namespace quadprogpp {
enum MType { DIAG };
template <typename T>
class Vector
notice how just after the #includes there is a decleration of namespace quadprogpp{} and everything that is defined in its enclosing brackets will be defined in scope to quadprogpp, so to use any of this library you have to prefix eveything with the namespace name. this is no different than using things from the standard library. I'm quite sure you've written the standard c++ hello world
#include<iostream>
int main()
{
std::cout << "hello world!" << std::endl;
return 0;
}
cout and endl being part of namespace std have to be prefixed with std:: to access them. Many new programmers to c++ dislike this and one of the very first things they google is how to not have to type out namespaces.
#include<iostream>
using namespace std;
int main()
{
cout << "hello world" << endl;
return 0;
}
the next thing new programmers often do is learn to place their definitions in header files and their program logic in cpp files. Thats when they commit the next common mistake.
#ifndef MYHEADER
#define MYHEADER
#include<string>
#include<vector>
#include<iostream>
using namespace std; //Never do this in a header.
doing that pollutes all of your code with everything in the standard library. That may seem like a trivial thing but when you start using another library or perhaps you create your own type that has the same name as things in the standard library that causes name collisions.
That's when the compiler simply cant reason about which Vector you want. But both Quadprog.hh and Array.hh in Quadprog++ are wrapped in namespace quadprogpp to specifically prevent name collision, which is the whole purpose of namespaces. So there is somewhere in your code, likely a header file, where you've made the statement of using namespace quadprogpp;
, or some other namespace that defines an Array type, and the compiler can't deduce which type your referring to in your code.
Other than removing your using namespace statements you can also prefix a typename with its namespace qualifer to disambiguate which type your talking about. In your case I'm confident your Array should be declared as quadprogpp::Array arraynamme;
rather than simply Array arrayname;
1
You can use a namespace alias to reduce the typing:namespace qp=quadprogpp;
Then writeqp::someFunction()
, etc.
– chtz
Nov 20 at 6:04
Thank you for your reply! But acctually there is no class or namespace of "quadprogpp" in the files, or you mean that I should create something like that then use it as you suggest?
– liu jingyu
Nov 20 at 6:56
@lin jingyu i looked at the source of Quadprog++, at the very least some of it is in a namespace.
– johnathan
Nov 20 at 6:58
1
ok, I‘ll look it up. I'm new to c++ too, so there is much to learn.
– liu jingyu
Nov 20 at 7:21
1
@johnnathan Thank you so much! Now I got better understanding on it. That helps me a lot!
– liu jingyu
Nov 21 at 3:16
|
show 2 more comments
if your using namespace quadprogpp;
then dont. your different libraries have the same typenames and thats causing the errors you have. It may be a few more characters to type quadprogpp::someFunction();
but its worth it. This is also why you shouldn't ever put a using namespace
in a header ever. Its because you pollute all files that include that header with the namespace symbols and name conflicts can ensue which is the same kind of error your having right now.
the Quadprog library is in it's own namespace.
#if !defined(_ARRAY_HH)
#define _ARRAY_HH
#include <set>
#include <stdexcept>
#include <iostream>
#include <iomanip>
#include <cmath>
#include <cstdlib>
namespace quadprogpp {
enum MType { DIAG };
template <typename T>
class Vector
notice how just after the #includes there is a decleration of namespace quadprogpp{} and everything that is defined in its enclosing brackets will be defined in scope to quadprogpp, so to use any of this library you have to prefix eveything with the namespace name. this is no different than using things from the standard library. I'm quite sure you've written the standard c++ hello world
#include<iostream>
int main()
{
std::cout << "hello world!" << std::endl;
return 0;
}
cout and endl being part of namespace std have to be prefixed with std:: to access them. Many new programmers to c++ dislike this and one of the very first things they google is how to not have to type out namespaces.
#include<iostream>
using namespace std;
int main()
{
cout << "hello world" << endl;
return 0;
}
the next thing new programmers often do is learn to place their definitions in header files and their program logic in cpp files. Thats when they commit the next common mistake.
#ifndef MYHEADER
#define MYHEADER
#include<string>
#include<vector>
#include<iostream>
using namespace std; //Never do this in a header.
doing that pollutes all of your code with everything in the standard library. That may seem like a trivial thing but when you start using another library or perhaps you create your own type that has the same name as things in the standard library that causes name collisions.
That's when the compiler simply cant reason about which Vector you want. But both Quadprog.hh and Array.hh in Quadprog++ are wrapped in namespace quadprogpp to specifically prevent name collision, which is the whole purpose of namespaces. So there is somewhere in your code, likely a header file, where you've made the statement of using namespace quadprogpp;
, or some other namespace that defines an Array type, and the compiler can't deduce which type your referring to in your code.
Other than removing your using namespace statements you can also prefix a typename with its namespace qualifer to disambiguate which type your talking about. In your case I'm confident your Array should be declared as quadprogpp::Array arraynamme;
rather than simply Array arrayname;
1
You can use a namespace alias to reduce the typing:namespace qp=quadprogpp;
Then writeqp::someFunction()
, etc.
– chtz
Nov 20 at 6:04
Thank you for your reply! But acctually there is no class or namespace of "quadprogpp" in the files, or you mean that I should create something like that then use it as you suggest?
– liu jingyu
Nov 20 at 6:56
@lin jingyu i looked at the source of Quadprog++, at the very least some of it is in a namespace.
– johnathan
Nov 20 at 6:58
1
ok, I‘ll look it up. I'm new to c++ too, so there is much to learn.
– liu jingyu
Nov 20 at 7:21
1
@johnnathan Thank you so much! Now I got better understanding on it. That helps me a lot!
– liu jingyu
Nov 21 at 3:16
|
show 2 more comments
if your using namespace quadprogpp;
then dont. your different libraries have the same typenames and thats causing the errors you have. It may be a few more characters to type quadprogpp::someFunction();
but its worth it. This is also why you shouldn't ever put a using namespace
in a header ever. Its because you pollute all files that include that header with the namespace symbols and name conflicts can ensue which is the same kind of error your having right now.
the Quadprog library is in it's own namespace.
#if !defined(_ARRAY_HH)
#define _ARRAY_HH
#include <set>
#include <stdexcept>
#include <iostream>
#include <iomanip>
#include <cmath>
#include <cstdlib>
namespace quadprogpp {
enum MType { DIAG };
template <typename T>
class Vector
notice how just after the #includes there is a decleration of namespace quadprogpp{} and everything that is defined in its enclosing brackets will be defined in scope to quadprogpp, so to use any of this library you have to prefix eveything with the namespace name. this is no different than using things from the standard library. I'm quite sure you've written the standard c++ hello world
#include<iostream>
int main()
{
std::cout << "hello world!" << std::endl;
return 0;
}
cout and endl being part of namespace std have to be prefixed with std:: to access them. Many new programmers to c++ dislike this and one of the very first things they google is how to not have to type out namespaces.
#include<iostream>
using namespace std;
int main()
{
cout << "hello world" << endl;
return 0;
}
the next thing new programmers often do is learn to place their definitions in header files and their program logic in cpp files. Thats when they commit the next common mistake.
#ifndef MYHEADER
#define MYHEADER
#include<string>
#include<vector>
#include<iostream>
using namespace std; //Never do this in a header.
doing that pollutes all of your code with everything in the standard library. That may seem like a trivial thing but when you start using another library or perhaps you create your own type that has the same name as things in the standard library that causes name collisions.
That's when the compiler simply cant reason about which Vector you want. But both Quadprog.hh and Array.hh in Quadprog++ are wrapped in namespace quadprogpp to specifically prevent name collision, which is the whole purpose of namespaces. So there is somewhere in your code, likely a header file, where you've made the statement of using namespace quadprogpp;
, or some other namespace that defines an Array type, and the compiler can't deduce which type your referring to in your code.
Other than removing your using namespace statements you can also prefix a typename with its namespace qualifer to disambiguate which type your talking about. In your case I'm confident your Array should be declared as quadprogpp::Array arraynamme;
rather than simply Array arrayname;
if your using namespace quadprogpp;
then dont. your different libraries have the same typenames and thats causing the errors you have. It may be a few more characters to type quadprogpp::someFunction();
but its worth it. This is also why you shouldn't ever put a using namespace
in a header ever. Its because you pollute all files that include that header with the namespace symbols and name conflicts can ensue which is the same kind of error your having right now.
the Quadprog library is in it's own namespace.
#if !defined(_ARRAY_HH)
#define _ARRAY_HH
#include <set>
#include <stdexcept>
#include <iostream>
#include <iomanip>
#include <cmath>
#include <cstdlib>
namespace quadprogpp {
enum MType { DIAG };
template <typename T>
class Vector
notice how just after the #includes there is a decleration of namespace quadprogpp{} and everything that is defined in its enclosing brackets will be defined in scope to quadprogpp, so to use any of this library you have to prefix eveything with the namespace name. this is no different than using things from the standard library. I'm quite sure you've written the standard c++ hello world
#include<iostream>
int main()
{
std::cout << "hello world!" << std::endl;
return 0;
}
cout and endl being part of namespace std have to be prefixed with std:: to access them. Many new programmers to c++ dislike this and one of the very first things they google is how to not have to type out namespaces.
#include<iostream>
using namespace std;
int main()
{
cout << "hello world" << endl;
return 0;
}
the next thing new programmers often do is learn to place their definitions in header files and their program logic in cpp files. Thats when they commit the next common mistake.
#ifndef MYHEADER
#define MYHEADER
#include<string>
#include<vector>
#include<iostream>
using namespace std; //Never do this in a header.
doing that pollutes all of your code with everything in the standard library. That may seem like a trivial thing but when you start using another library or perhaps you create your own type that has the same name as things in the standard library that causes name collisions.
That's when the compiler simply cant reason about which Vector you want. But both Quadprog.hh and Array.hh in Quadprog++ are wrapped in namespace quadprogpp to specifically prevent name collision, which is the whole purpose of namespaces. So there is somewhere in your code, likely a header file, where you've made the statement of using namespace quadprogpp;
, or some other namespace that defines an Array type, and the compiler can't deduce which type your referring to in your code.
Other than removing your using namespace statements you can also prefix a typename with its namespace qualifer to disambiguate which type your talking about. In your case I'm confident your Array should be declared as quadprogpp::Array arraynamme;
rather than simply Array arrayname;
edited Nov 20 at 14:03
answered Nov 20 at 5:19
johnathan
2,158819
2,158819
1
You can use a namespace alias to reduce the typing:namespace qp=quadprogpp;
Then writeqp::someFunction()
, etc.
– chtz
Nov 20 at 6:04
Thank you for your reply! But acctually there is no class or namespace of "quadprogpp" in the files, or you mean that I should create something like that then use it as you suggest?
– liu jingyu
Nov 20 at 6:56
@lin jingyu i looked at the source of Quadprog++, at the very least some of it is in a namespace.
– johnathan
Nov 20 at 6:58
1
ok, I‘ll look it up. I'm new to c++ too, so there is much to learn.
– liu jingyu
Nov 20 at 7:21
1
@johnnathan Thank you so much! Now I got better understanding on it. That helps me a lot!
– liu jingyu
Nov 21 at 3:16
|
show 2 more comments
1
You can use a namespace alias to reduce the typing:namespace qp=quadprogpp;
Then writeqp::someFunction()
, etc.
– chtz
Nov 20 at 6:04
Thank you for your reply! But acctually there is no class or namespace of "quadprogpp" in the files, or you mean that I should create something like that then use it as you suggest?
– liu jingyu
Nov 20 at 6:56
@lin jingyu i looked at the source of Quadprog++, at the very least some of it is in a namespace.
– johnathan
Nov 20 at 6:58
1
ok, I‘ll look it up. I'm new to c++ too, so there is much to learn.
– liu jingyu
Nov 20 at 7:21
1
@johnnathan Thank you so much! Now I got better understanding on it. That helps me a lot!
– liu jingyu
Nov 21 at 3:16
1
1
You can use a namespace alias to reduce the typing:
namespace qp=quadprogpp;
Then write qp::someFunction()
, etc.– chtz
Nov 20 at 6:04
You can use a namespace alias to reduce the typing:
namespace qp=quadprogpp;
Then write qp::someFunction()
, etc.– chtz
Nov 20 at 6:04
Thank you for your reply! But acctually there is no class or namespace of "quadprogpp" in the files, or you mean that I should create something like that then use it as you suggest?
– liu jingyu
Nov 20 at 6:56
Thank you for your reply! But acctually there is no class or namespace of "quadprogpp" in the files, or you mean that I should create something like that then use it as you suggest?
– liu jingyu
Nov 20 at 6:56
@lin jingyu i looked at the source of Quadprog++, at the very least some of it is in a namespace.
– johnathan
Nov 20 at 6:58
@lin jingyu i looked at the source of Quadprog++, at the very least some of it is in a namespace.
– johnathan
Nov 20 at 6:58
1
1
ok, I‘ll look it up. I'm new to c++ too, so there is much to learn.
– liu jingyu
Nov 20 at 7:21
ok, I‘ll look it up. I'm new to c++ too, so there is much to learn.
– liu jingyu
Nov 20 at 7:21
1
1
@johnnathan Thank you so much! Now I got better understanding on it. That helps me a lot!
– liu jingyu
Nov 21 at 3:16
@johnnathan Thank you so much! Now I got better understanding on it. That helps me a lot!
– liu jingyu
Nov 21 at 3:16
|
show 2 more comments
You can also switch to one of QuadProgpp versions which can work with Eigen types directly: https://github.com/asherikov/QuadProgpp, https://www.cs.cmu.edu/~bstephe1/eiquadprog.hpp; or try an alternative implementation of the same algorithm (also Eigen based) https://github.com/asherikov/qpmad.
Thank you, I'll check them up. Have you tried them yet? Which one do you think is the easiest to implement?
– liu jingyu
Nov 22 at 9:19
API is pretty much the same. eiquadprog (and its variants) is a rather common choice in robotic applications. qpmad may be faster on some types of problems, but is much less common.
– asherikov
Nov 22 at 17:48
OK, thanks a lot! My case is just on a quadraped robot. The problem was solved and I got reasonable results. But it seems that Quadprog++ took relative long time. Before calling it, my algorithm took only 0.3 ms to finish, while calling it the time jump up to 0.8 ms, which is very close to the upper bound for solving time --1 ms. Maybe I should try some other implementations like you suggest.
– liu jingyu
Nov 26 at 2:41
add a comment |
You can also switch to one of QuadProgpp versions which can work with Eigen types directly: https://github.com/asherikov/QuadProgpp, https://www.cs.cmu.edu/~bstephe1/eiquadprog.hpp; or try an alternative implementation of the same algorithm (also Eigen based) https://github.com/asherikov/qpmad.
Thank you, I'll check them up. Have you tried them yet? Which one do you think is the easiest to implement?
– liu jingyu
Nov 22 at 9:19
API is pretty much the same. eiquadprog (and its variants) is a rather common choice in robotic applications. qpmad may be faster on some types of problems, but is much less common.
– asherikov
Nov 22 at 17:48
OK, thanks a lot! My case is just on a quadraped robot. The problem was solved and I got reasonable results. But it seems that Quadprog++ took relative long time. Before calling it, my algorithm took only 0.3 ms to finish, while calling it the time jump up to 0.8 ms, which is very close to the upper bound for solving time --1 ms. Maybe I should try some other implementations like you suggest.
– liu jingyu
Nov 26 at 2:41
add a comment |
You can also switch to one of QuadProgpp versions which can work with Eigen types directly: https://github.com/asherikov/QuadProgpp, https://www.cs.cmu.edu/~bstephe1/eiquadprog.hpp; or try an alternative implementation of the same algorithm (also Eigen based) https://github.com/asherikov/qpmad.
You can also switch to one of QuadProgpp versions which can work with Eigen types directly: https://github.com/asherikov/QuadProgpp, https://www.cs.cmu.edu/~bstephe1/eiquadprog.hpp; or try an alternative implementation of the same algorithm (also Eigen based) https://github.com/asherikov/qpmad.
answered Nov 21 at 18:54
asherikov
1
1
Thank you, I'll check them up. Have you tried them yet? Which one do you think is the easiest to implement?
– liu jingyu
Nov 22 at 9:19
API is pretty much the same. eiquadprog (and its variants) is a rather common choice in robotic applications. qpmad may be faster on some types of problems, but is much less common.
– asherikov
Nov 22 at 17:48
OK, thanks a lot! My case is just on a quadraped robot. The problem was solved and I got reasonable results. But it seems that Quadprog++ took relative long time. Before calling it, my algorithm took only 0.3 ms to finish, while calling it the time jump up to 0.8 ms, which is very close to the upper bound for solving time --1 ms. Maybe I should try some other implementations like you suggest.
– liu jingyu
Nov 26 at 2:41
add a comment |
Thank you, I'll check them up. Have you tried them yet? Which one do you think is the easiest to implement?
– liu jingyu
Nov 22 at 9:19
API is pretty much the same. eiquadprog (and its variants) is a rather common choice in robotic applications. qpmad may be faster on some types of problems, but is much less common.
– asherikov
Nov 22 at 17:48
OK, thanks a lot! My case is just on a quadraped robot. The problem was solved and I got reasonable results. But it seems that Quadprog++ took relative long time. Before calling it, my algorithm took only 0.3 ms to finish, while calling it the time jump up to 0.8 ms, which is very close to the upper bound for solving time --1 ms. Maybe I should try some other implementations like you suggest.
– liu jingyu
Nov 26 at 2:41
Thank you, I'll check them up. Have you tried them yet? Which one do you think is the easiest to implement?
– liu jingyu
Nov 22 at 9:19
Thank you, I'll check them up. Have you tried them yet? Which one do you think is the easiest to implement?
– liu jingyu
Nov 22 at 9:19
API is pretty much the same. eiquadprog (and its variants) is a rather common choice in robotic applications. qpmad may be faster on some types of problems, but is much less common.
– asherikov
Nov 22 at 17:48
API is pretty much the same. eiquadprog (and its variants) is a rather common choice in robotic applications. qpmad may be faster on some types of problems, but is much less common.
– asherikov
Nov 22 at 17:48
OK, thanks a lot! My case is just on a quadraped robot. The problem was solved and I got reasonable results. But it seems that Quadprog++ took relative long time. Before calling it, my algorithm took only 0.3 ms to finish, while calling it the time jump up to 0.8 ms, which is very close to the upper bound for solving time --1 ms. Maybe I should try some other implementations like you suggest.
– liu jingyu
Nov 26 at 2:41
OK, thanks a lot! My case is just on a quadraped robot. The problem was solved and I got reasonable results. But it seems that Quadprog++ took relative long time. Before calling it, my algorithm took only 0.3 ms to finish, while calling it the time jump up to 0.8 ms, which is very close to the upper bound for solving time --1 ms. Maybe I should try some other implementations like you suggest.
– liu jingyu
Nov 26 at 2:41
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53386048%2fc-compilling-errors-when-using-quadprog-with-eigen-together%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown