Eigen - pose_type
(BZ)
We've had trouble with Eigen alignment and pose_type ever since we introduced pose_type. Our own ROS WAM node often crashed when using pose_type due to this error. This is why we started suggesting that our ROS customers use WAM nodes developed by other customers instead of recommending our own ROS driver.
I'm not confident that we ever found the source of the error. Eigen has a lot of information about unaligned arrays on their site, but I don't think we've been able to identify exactly what in libbarrett needs to change in order to eliminate the error. We have tried adding alignment macros in several places, but the error still happens.
https://eigen.tuxfamily.org/dox/group__TopicUnalignedArrayAssert.html
I'd look at:
-
Eigen2 vs. Eigen3 - does one behave better than the other in terms of alignment. If so, why?
-
32-bit vs. 64-bit - does one behave better than the other in terms of alignment. If so, why?
-
Compiler version being used- try a couple different gcc versions. Does this make a difference?
-
Decipher the structs/unions used in libbarrett and how tuples of different datatypes are constructed. Something about how we are doing this for pose_type is confusing Eigen.
-
I think Eigen is trying to align vectors for SSE optimization. If we turn off Streaming SIMD Extensions (SSE/SSE2/SSE3, etc.) in the compiler, this problem would likely disappear- but we won't have solved the root cause. Still, it would be a good data point to get.