Fix Eigen3 unaligned array in iTaSC. The unaligned array cause crash when SSE2 is enabled. The source of unaligned array were: matrix passing by value in std::make_pair() and offset of matrix member in structure.
This commit is contained in:
parent
1aa27e240c
commit
9ec2139c81
@ -46,8 +46,8 @@ namespace KDL {
|
|||||||
class Segment {
|
class Segment {
|
||||||
friend class Chain;
|
friend class Chain;
|
||||||
private:
|
private:
|
||||||
Joint joint;
|
|
||||||
Inertia M;
|
Inertia M;
|
||||||
|
Joint joint;
|
||||||
Frame f_tip;
|
Frame f_tip;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
@ -29,15 +29,18 @@ using namespace std;
|
|||||||
|
|
||||||
Tree::Tree() :
|
Tree::Tree() :
|
||||||
nrOfJoints(0), nrOfSegments(0) {
|
nrOfJoints(0), nrOfSegments(0) {
|
||||||
segments.insert(make_pair("root", TreeElement::Root()));
|
TreeElement root;
|
||||||
|
std::pair<std::string, TreeElement> val("root", root);
|
||||||
|
segments.insert(val);
|
||||||
}
|
}
|
||||||
|
|
||||||
Tree::Tree(const Tree& in) {
|
Tree::Tree(const Tree& in) {
|
||||||
segments.clear();
|
segments.clear();
|
||||||
nrOfSegments = 0;
|
nrOfSegments = 0;
|
||||||
nrOfJoints = 0;
|
nrOfJoints = 0;
|
||||||
|
TreeElement root;
|
||||||
segments.insert(make_pair("root", TreeElement::Root()));
|
std::pair<std::string, TreeElement> val("root", root);
|
||||||
|
segments.insert(val);
|
||||||
this->addTree(in, "", "root");
|
this->addTree(in, "", "root");
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -46,8 +49,9 @@ Tree& Tree::operator=(const Tree& in) {
|
|||||||
segments.clear();
|
segments.clear();
|
||||||
nrOfSegments = 0;
|
nrOfSegments = 0;
|
||||||
nrOfJoints = 0;
|
nrOfJoints = 0;
|
||||||
|
TreeElement root;
|
||||||
segments.insert(make_pair("root", TreeElement::Root()));
|
std::pair<std::string, TreeElement> val("root", root);
|
||||||
|
segments.insert(val);
|
||||||
this->addTree(in, "", "root");
|
this->addTree(in, "", "root");
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
@ -60,8 +64,10 @@ bool Tree::addSegment(const Segment& segment, const std::string& segment_name,
|
|||||||
return false;
|
return false;
|
||||||
pair<SegmentMap::iterator, bool> retval;
|
pair<SegmentMap::iterator, bool> retval;
|
||||||
//insert new element
|
//insert new element
|
||||||
retval = segments.insert(make_pair(segment_name, TreeElement(segment,
|
TreeElement elem(segment, parent, nrOfJoints);
|
||||||
parent, nrOfJoints)));
|
std::pair<std::string, TreeElement> val(segment_name, elem);
|
||||||
|
|
||||||
|
retval = segments.insert(val);
|
||||||
//check if insertion succeeded
|
//check if insertion succeeded
|
||||||
if (!retval.second)
|
if (!retval.second)
|
||||||
return false;
|
return false;
|
||||||
|
@ -43,7 +43,7 @@ namespace KDL
|
|||||||
#endif
|
#endif
|
||||||
class TreeElement
|
class TreeElement
|
||||||
{
|
{
|
||||||
private:
|
public:
|
||||||
TreeElement():q_nr(0)
|
TreeElement():q_nr(0)
|
||||||
{};
|
{};
|
||||||
public:
|
public:
|
||||||
|
Loading…
Reference in New Issue
Block a user