This forum has been archived. All content is frozen. Please use KDE Discuss instead.

runtime error with Transform::rotation

Tags: None
(comma "," separated)
martinakos
Registered Member
Posts
53
Karma
0
OS
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.
User avatar
ggael
Moderator
Posts
3447
Karma
19
OS
sorry but I cannot reproduce, can you paste a back-trace and be more specific about your testing environment (Eigen version, compiler, etc.).
martinakos
Registered Member
Posts
53
Karma
0
OS
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
User avatar
bjacob
Registered Member
Posts
658
Karma
3
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!
User avatar
bjacob
Registered Member
Posts
658
Karma
3
1) can you retry with current eigen3, download instructions on the Eigen main page.

2) This stack frame is the first weird one:
Code: Select all
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++


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!
martinakos
Registered Member
Posts
53
Karma
0
OS
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
User avatar
bjacob
Registered Member
Posts
658
Karma
3
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!
martinakos
Registered Member
Posts
53
Karma
0
OS
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
martinakos
Registered Member
Posts
53
Karma
0
OS
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.


Bookmarks



Who is online

Registered users: Bing [Bot], Evergrowing, Google [Bot], rockscient