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:
Benoit Bolsee 2012-06-03 12:00:41 +00:00
parent 1aa27e240c
commit 9ec2139c81
3 changed files with 15 additions and 9 deletions

@ -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: