Registered Member
|
Hi,
A piece of code that reproduces the error is: Vector3d tra(0, 0, -10); Matrix3d rot(Matrix3d::Identity()); Vector3d scale(Vector3d::Ones()); Transform<double, 3, Affine> transform; transform.fromPositionOrientationScale(tra, rot, scale); Matrix3d r; r = transform.rotation(); In the last line I get a "data is not aligned" runtime error that I can't make sense of, any help would be appreciated. Thanks, Martin. |
Moderator
|
sorry but I cannot reproduce, can you paste a back-trace and be more specific about your testing environment (Eigen version, compiler, etc.).
|
Registered Member
|
Hi ggael,
Thanks for your reply. I'm using eigen 3 the development branch, I don't know how to check the subversion but it's one I downloaded 28/07/2010. I build the project with visual studio 2005. The runtime error is actually an assertion (sorry for the sloppiness) The assertion says: File: .../MapBase.h Line: 193 Expression: (!(ei_traits<Derived>::Flags&AlignedBit) || ((size_t(m_data)&0xf)==0)) && "data is not aligned" The stack trace is: LiveDriverApp.exe!Eigen::DenseStorageBase<Eigen::Matrix<double,3,3,0,3,3> >::coeffRef(int index=8) Line 105 + 0x8 bytes C++ LiveDriverApp.exe!Eigen::DenseCoeffsBase<Eigen::Matrix<double,3,3,0,3,3>,1>::copyCoeff<Eigen::CwiseNullaryOp<Eigen::ei_scalar_constant_op<double>,Eigen::Matrix<double,3,3,0,3,3> > >(int index=144763020, const Eigen::DenseBase<Eigen::CwiseNullaryOp<Eigen::ei_scalar_constant_op<double>,Eigen::Matrix<double,3,3,0,3,3> > > & other={...}) Line 459 + 0x29 bytes C++ LiveDriverApp.exe!Eigen::ei_assign_LinearTraversal_CompleteUnrolling<Eigen::Matrix<double,3,3,0,3,3>,Eigen::CwiseNullaryOp<Eigen::ei_scalar_constant_op<double>,Eigen::Matrix<double,3,3,0,3,3> >,8,9>::run(Eigen::Matrix<double,3,3,0,3,3> & dst={...}, const Eigen::CwiseNullaryOp<Eigen::ei_scalar_constant_op<double>,Eigen::Matrix<double,3,3,0,3,3> > & src={...}) Line 192 + 0xd bytes C++ LiveDriverApp.exe!Eigen::ei_assign_LinearTraversal_CompleteUnrolling<Eigen::Matrix<double,3,3,0,3,3>,Eigen::CwiseNullaryOp<Eigen::ei_scalar_constant_op<double>,Eigen::Matrix<double,3,3,0,3,3> >,7,9>::run(Eigen::Matrix<double,3,3,0,3,3> & dst={...}, const Eigen::CwiseNullaryOp<Eigen::ei_scalar_constant_op<double>,Eigen::Matrix<double,3,3,0,3,3> > & src={...}) Line 192 + 0xd bytes C++ LiveDriverApp.exe!Eigen::ei_assign_LinearTraversal_CompleteUnrolling<Eigen::Matrix<double,3,3,0,3,3>,Eigen::CwiseNullaryOp<Eigen::ei_scalar_constant_op<double>,Eigen::Matrix<double,3,3,0,3,3> >,6,9>::run(Eigen::Matrix<double,3,3,0,3,3> & dst={...}, const Eigen::CwiseNullaryOp<Eigen::ei_scalar_constant_op<double>,Eigen::Matrix<double,3,3,0,3,3> > & src={...}) Line 192 + 0xd bytes C++ LiveDriverApp.exe!Eigen::ei_assign_LinearTraversal_CompleteUnrolling<Eigen::Matrix<double,3,3,0,3,3>,Eigen::CwiseNullaryOp<Eigen::ei_scalar_constant_op<double>,Eigen::Matrix<double,3,3,0,3,3> >,5,9>::run(Eigen::Matrix<double,3,3,0,3,3> & dst={...}, const Eigen::CwiseNullaryOp<Eigen::ei_scalar_constant_op<double>,Eigen::Matrix<double,3,3,0,3,3> > & src={...}) Line 192 + 0xd bytes C++ 08a0de28() LiveDriverApp.exe!Eigen::DenseCoeffsBase<Eigen::Matrix<double,3,3,0,3,3>,1>::copyCoeff<Eigen::Matrix<double,3,3,0,3,3> >(int index=144760396, const Eigen::DenseBase<Eigen::Matrix<double,3,3,0,3,3> > & other={...}) Line 459 + 0x28 bytes C++ LiveDriverApp.exe!Eigen::DenseCoeffsBase<Eigen::Matrix<double,3,3,0,3,3>,1>::copyCoeff<Eigen::Matrix<double,3,3,0,3,3> >(int index=144763188, const Eigen::DenseBase<Eigen::Matrix<double,3,3,0,3,3> > & other={...}) Line 460 + 0xb bytes C++ LiveDriverApp.exe!Eigen::ei_assign_LinearTraversal_CompleteUnrolling<Eigen::Matrix<double,3,3,0,3,3>,Eigen::Matrix<double,3,3,0,3,3>,7,9>::run(Eigen::Matrix<double,3,3,0,3,3> & dst={...}, const Eigen::Matrix<double,3,3,0,3,3> & src={...}) Line 192 + 0xd bytes C++ LiveDriverApp.exe!Eigen::ei_assign_LinearTraversal_CompleteUnrolling<Eigen::Matrix<double,3,3,0,3,3>,Eigen::Matrix<double,3,3,0,3,3>,6,9>::run(Eigen::Matrix<double,3,3,0,3,3> & dst={...}, const Eigen::Matrix<double,3,3,0,3,3> & src={...}) Line 192 + 0xd bytes C++ LiveDriverApp.exe!Eigen::ei_assign_LinearTraversal_CompleteUnrolling<Eigen::Matrix<double,3,3,0,3,3>,Eigen::Matrix<double,3,3,0,3,3>,5,9>::run(Eigen::Matrix<double,3,3,0,3,3> & dst={...}, const Eigen::Matrix<double,3,3,0,3,3> & src={...}) Line 192 + 0xd bytes C++ LiveDriverApp.exe!Eigen::ei_assign_LinearTraversal_CompleteUnrolling<Eigen::Matrix<double,3,3,0,3,3>,Eigen::Matrix<double,3,3,0,3,3>,4,9>::run(Eigen::Matrix<double,3,3,0,3,3> & dst={...}, const Eigen::Matrix<double,3,3,0,3,3> & src={...}) Line 192 + 0xd bytes C++ LiveDriverApp.exe!Eigen::ei_assign_LinearTraversal_CompleteUnrolling<Eigen::Matrix<double,3,3,0,3,3>,Eigen::Matrix<double,3,3,0,3,3>,3,9>::run(Eigen::Matrix<double,3,3,0,3,3> & dst={...}, const Eigen::Matrix<double,3,3,0,3,3> & src={...}) Line 192 + 0xd bytes C++ LiveDriverApp.exe!Eigen::ei_assign_LinearTraversal_CompleteUnrolling<Eigen::Matrix<double,3,3,0,3,3>,Eigen::Matrix<double,3,3,0,3,3>,2,9>::run(Eigen::Matrix<double,3,3,0,3,3> & dst={...}, const Eigen::Matrix<double,3,3,0,3,3> & src={...}) Line 192 + 0xd bytes C++ LiveDriverApp.exe!Eigen::ei_assign_LinearTraversal_CompleteUnrolling<Eigen::Matrix<double,3,3,0,3,3>,Eigen::Matrix<double,3,3,0,3,3>,1,9>::run(Eigen::Matrix<double,3,3,0,3,3> & dst={...}, const Eigen::Matrix<double,3,3,0,3,3> & src={...}) Line 192 + 0xd bytes C++ LiveDriverApp.exe!Eigen::ei_assign_LinearTraversal_CompleteUnrolling<Eigen::Matrix<double,3,3,0,3,3>,Eigen::Matrix<double,3,3,0,3,3>,0,9>::run(Eigen::Matrix<double,3,3,0,3,3> & dst={...}, const Eigen::Matrix<double,3,3,0,3,3> & src={...}) Line 192 + 0xd bytes C++ LiveDriverApp.exe!Eigen::DenseBase<Eigen::Matrix<double,3,3,0,3,3> >::checkTransposeAliasing<Eigen::Matrix<double,3,3,0,3,3> >(const Eigen::Matrix<double,3,3,0,3,3> & other={...}) Line 385 + 0x12 bytes C++ LiveDriverApp.exe!Eigen::MapBase<Eigen::Block<Eigen::Matrix<double,3,3,0,3,3>,3,1,1,1> >::checkSanity() Line 192 + 0x2e bytes C++ LiveDriverApp.exe!Eigen::MapBase<Eigen::Block<Eigen::Matrix<double,3,3,0,3,3>,3,1,1,1> >::MapBase<Eigen::Block<Eigen::Matrix<double,3,3,0,3,3>,3,1,1,1> >(const double * data=0x08a0e934, int rows=3, int cols=1) Line 175 C++ LiveDriverApp.exe!Eigen::Block<Eigen::Matrix<double,3,3,0,3,3>,3,1,1,1>::Block<Eigen::Matrix<double,3,3,0,3,3>,3,1,1,1>(const Eigen::Matrix<double,3,3,0,3,3> & xpr={...}, int i=0) Line 253 + 0xa6 bytes C++ LiveDriverApp.exe!Eigen::DenseBase<Eigen::Matrix<double,3,3,0,3,3> >::col(int i=0) Line 944 + 0x15 bytes C++ LiveDriverApp.exe!Eigen::SVD<Eigen::Matrix<double,3,3,0,3,3> >::compute(const Eigen::Matrix<double,3,3,0,3,3> & matrix={...}) Line 230 + 0x28 bytes C++ LiveDriverApp.exe!Eigen::SVD<Eigen::Matrix<double,3,3,0,3,3> >::SVD<Eigen::Matrix<double,3,3,0,3,3> >(const Eigen::Matrix<double,3,3,0,3,3> & matrix={...}) Line 98 C++ LiveDriverApp.exe!Eigen::MatrixBase<Eigen::Block<Eigen::Matrix<double,4,4,0,4,4>,3,3,0,1> >::svd() Line 583 + 0x1d bytes C++ LiveDriverApp.exe!Eigen::Transform<double,3,2>::computeRotationScaling<Eigen::Matrix<double,3,3,0,3,3>,Eigen::Matrix<double,3,3,0,3,3> >(Eigen::Matrix<double,3,3,0,3,3> * rotation=0x08a0e9d0, Eigen::Matrix<double,3,3,0,3,3> * scaling=0x00000000) Line 857 + 0x22 bytes C++ LiveDriverApp.exe!Eigen::Transform<double,3,2>::rotation() Line 838 C++ Martin |
Registered Member
|
The backtrace doesn't correspond to the assertion (MapBase.h:193)
Join us on Eigen's IRC channel: #eigen on irc.freenode.net
Have a serious interest in Eigen? Then join the mailing list! |
Registered Member
|
1) can you retry with current eigen3, download instructions on the Eigen main page.
2) This stack frame is the first weird one:
The index here is uninitialized. Please retry with current eigen3 to see if that persists. I guess not anyway since that was in internal SVD code that's been removed.
Join us on Eigen's IRC channel: #eigen on irc.freenode.net
Have a serious interest in Eigen? Then join the mailing list! |
Registered Member
|
I've just rerun the code and get the same assertion.
After the assertion I click Retry and then Break, and that's what I have in the stack at that point. that's the part that makes sense, on top of that I have lots of msvcr80d.dll!address() and other system dlls, but I think these are incorrect. So I guess you can just look all what is below MapBase::checkSanity() Line 192 I copy just the relevant part: LiveDriverApp.exe!Eigen::MapBase<Eigen::Block<Eigen::Matrix<double,3,3,0,3,3>,3,1,1,1> >::checkSanity() Line 192 + 0x2e bytes C++ LiveDriverApp.exe!Eigen::MapBase<Eigen::Block<Eigen::Matrix<double,3,3,0,3,3>,3,1,1,1> >::MapBase<Eigen::Block<Eigen::Matrix<double,3,3,0,3,3>,3,1,1,1> >(const double * data=0x0c79e9c8, int rows=3, int cols=1) Line 175 C++ LiveDriverApp.exe!Eigen::Block<Eigen::Matrix<double,3,3,0,3,3>,3,1,1,1>::Block<Eigen::Matrix<double,3,3,0,3,3>,3,1,1,1>(const Eigen::Matrix<double,3,3,0,3,3> & xpr={...}, int i=1) Line 253 + 0xa6 bytes C++ LiveDriverApp.exe!Eigen::DenseBase<Eigen::Matrix<double,3,3,0,3,3> >::col(int i=1) Line 944 + 0x15 bytes C++ LiveDriverApp.exe!Eigen::SVD<Eigen::Matrix<double,3,3,0,3,3> >::compute(const Eigen::Matrix<double,3,3,0,3,3> & matrix={...}) Line 248 + 0x28 bytes C++ LiveDriverApp.exe!Eigen::SVD<Eigen::Matrix<double,3,3,0,3,3> >::SVD<Eigen::Matrix<double,3,3,0,3,3> >(const Eigen::Matrix<double,3,3,0,3,3> & matrix={...}) Line 98 C++ LiveDriverApp.exe!Eigen::MatrixBase<Eigen::Block<Eigen::Matrix<double,4,4,0,4,4>,3,3,0,1> >::svd() Line 583 + 0x1d bytes C++ LiveDriverApp.exe!Eigen::Transform<double,3,2>::computeRotationScaling<Eigen::Matrix<double,3,3,0,3,3>,Eigen::Matrix<double,3,3,0,3,3> >(Eigen::Matrix<double,3,3,0,3,3> * rotation=0x0c79ea4c, Eigen::Matrix<double,3,3,0,3,3> * scaling=0x00000000) Line 857 + 0x22 bytes C++ LiveDriverApp.exe!Eigen::Transform<double,3,2>::rotation() Line 838 C++ Martin |
Registered Member
|
This isn't with current Eigen3. It's not even with eigen3-beta2. Please retry with that.
Join us on Eigen's IRC channel: #eigen on irc.freenode.net
Have a serious interest in Eigen? Then join the mailing list! |
Registered Member
|
Hi bjacob,
I have downloaded the latest development branch, rebuild and re-run that piece of code. I get the same assertion. The stack trace is: LiveDriverApp.exe!Eigen::DenseStorageBase<Eigen::Matrix<double,3,3,0,3,3> >::coeffRef(int index=8) Line 105 + 0x8 bytes C++ LiveDriverApp.exe!Eigen::DenseCoeffsBase<Eigen::Matrix<double,3,3,0,3,3>,1>::copyCoeff<Eigen::CwiseNullaryOp<Eigen::ei_scalar_constant_op<double>,Eigen::Matrix<double,3,3,0,3,3> > >(int index=175499528, const Eigen::DenseBase<Eigen::CwiseNullaryOp<Eigen::ei_scalar_constant_op<double>,Eigen::Matrix<double,3,3,0,3,3> > > & other={...}) Line 459 + 0x29 bytes C++ LiveDriverApp.exe!Eigen::ei_assign_LinearTraversal_CompleteUnrolling<Eigen::Matrix<double,3,3,0,3,3>,Eigen::CwiseNullaryOp<Eigen::ei_scalar_constant_op<double>,Eigen::Matrix<double,3,3,0,3,3> >,8,9>::run(Eigen::Matrix<double,3,3,0,3,3> & dst={...}, const Eigen::CwiseNullaryOp<Eigen::ei_scalar_constant_op<double>,Eigen::Matrix<double,3,3,0,3,3> > & src={...}) Line 192 + 0xd bytes C++ LiveDriverApp.exe!Eigen::ei_assign_LinearTraversal_CompleteUnrolling<Eigen::Matrix<double,3,3,0,3,3>,Eigen::CwiseNullaryOp<Eigen::ei_scalar_constant_op<double>,Eigen::Matrix<double,3,3,0,3,3> >,7,9>::run(Eigen::Matrix<double,3,3,0,3,3> & dst={...}, const Eigen::CwiseNullaryOp<Eigen::ei_scalar_constant_op<double>,Eigen::Matrix<double,3,3,0,3,3> > & src={...}) Line 192 + 0xd bytes C++ LiveDriverApp.exe!Eigen::ei_assign_LinearTraversal_CompleteUnrolling<Eigen::Matrix<double,3,3,0,3,3>,Eigen::CwiseNullaryOp<Eigen::ei_scalar_constant_op<double>,Eigen::Matrix<double,3,3,0,3,3> >,6,9>::run(Eigen::Matrix<double,3,3,0,3,3> & dst={...}, const Eigen::CwiseNullaryOp<Eigen::ei_scalar_constant_op<double>,Eigen::Matrix<double,3,3,0,3,3> > & src={...}) Line 192 + 0xd bytes C++ LiveDriverApp.exe!Eigen::ei_assign_LinearTraversal_CompleteUnrolling<Eigen::Matrix<double,3,3,0,3,3>,Eigen::CwiseNullaryOp<Eigen::ei_scalar_constant_op<double>,Eigen::Matrix<double,3,3,0,3,3> >,5,9>::run(Eigen::Matrix<double,3,3,0,3,3> & dst={...}, const Eigen::CwiseNullaryOp<Eigen::ei_scalar_constant_op<double>,Eigen::Matrix<double,3,3,0,3,3> > & src={...}) Line 192 + 0xd bytes C++ 0a75dea4() LiveDriverApp.exe!Eigen::DenseCoeffsBase<Eigen::Matrix<double,3,3,0,3,3>,1>::copyCoeff<Eigen::Matrix<double,3,3,0,3,3> >(int index=175496904, const Eigen::DenseBase<Eigen::Matrix<double,3,3,0,3,3> > & other={...}) Line 459 + 0x28 bytes C++ LiveDriverApp.exe!Eigen::DenseCoeffsBase<Eigen::Matrix<double,3,3,0,3,3>,1>::copyCoeff<Eigen::Matrix<double,3,3,0,3,3> >(int index=175440511, const Eigen::DenseBase<Eigen::Matrix<double,3,3,0,3,3> > & other={...}) Line 460 + 0xb bytes C++ LiveDriverApp.exe!Eigen::ei_assign_LinearTraversal_CompleteUnrolling<Eigen::Matrix<double,3,3,0,3,3>,Eigen::Matrix<double,3,3,0,3,3>,7,9>::run(Eigen::Matrix<double,3,3,0,3,3> & dst={...}, const Eigen::Matrix<double,3,3,0,3,3> & src={...}) Line 192 + 0xd bytes C++ msvcr80d.dll!6623ec20() LiveDriverApp.exe!Eigen::Block<Eigen::Matrix<double,3,3,0,3,3>,3,1,1,1>::innerStride() Line 291 + 0xa bytes C++ LiveDriverApp.exe!Eigen::DenseCoeffsBase<Eigen::Block<Eigen::Matrix<double,3,3,0,3,3>,3,1,1,1>,2>::innerStride() Line 539 C++ 0a75e6c0() LiveDriverApp.exe!Eigen::MapBase<Eigen::Block<Eigen::Matrix<double,3,3,0,3,3>,3,1,1,1> >::checkSanity() Line 192 + 0x2e bytes C++ LiveDriverApp.exe!Eigen::MapBase<Eigen::Block<Eigen::Matrix<double,3,3,0,3,3>,3,1,1,1> >::MapBase<Eigen::Block<Eigen::Matrix<double,3,3,0,3,3>,3,1,1,1> >(const double * data=0x0a75e9c8, int rows=3, int cols=1) Line 175 C++ LiveDriverApp.exe!Eigen::Block<Eigen::Matrix<double,3,3,0,3,3>,3,1,1,1>::Block<Eigen::Matrix<double,3,3,0,3,3>,3,1,1,1>(const Eigen::Matrix<double,3,3,0,3,3> & xpr={...}, int i=1) Line 253 + 0xa6 bytes C++ LiveDriverApp.exe!Eigen::DenseBase<Eigen::Matrix<double,3,3,0,3,3> >::col(int i=1) Line 944 + 0x15 bytes C++ LiveDriverApp.exe!Eigen::SVD<Eigen::Matrix<double,3,3,0,3,3> >::compute(const Eigen::Matrix<double,3,3,0,3,3> & matrix={...}) Line 244 + 0x4a bytes C++ LiveDriverApp.exe!Eigen::SVD<Eigen::Matrix<double,3,3,0,3,3> >::SVD<Eigen::Matrix<double,3,3,0,3,3> >(const Eigen::Matrix<double,3,3,0,3,3> & matrix={...}) Line 98 C++ LiveDriverApp.exe!Eigen::MatrixBase<Eigen::Block<Eigen::Matrix<double,4,4,0,4,4>,3,3,0,1> >::svd() Line 583 + 0x1d bytes C++ LiveDriverApp.exe!Eigen::Transform<double,3,2>::computeRotationScaling<Eigen::Matrix<double,3,3,0,3,3>,Eigen::Matrix<double,3,3,0,3,3> >(Eigen::Matrix<double,3,3,0,3,3> * rotation=0x0a75ea4c, Eigen::Matrix<double,3,3,0,3,3> * scaling=0x00000000) Line 857 + 0x22 bytes C++ LiveDriverApp.exe!Eigen::Transform<double,3,2>::rotation() Line 838 C++ Martin |
Registered Member
|
Correction!!
Sorry, I made a mistake when updating to the latest eigen version in the development branch, so when I retried the code it was still using the prior version. I have now updated it properly and retried the piece of code that was producing the assertion. Now the code works as expected and without assertion! Thanks very much for your help. Martin. |
Registered users: Bing [Bot], Evergrowing, Google [Bot], rockscient