Eigen :: Quaternionf를 사용하려고합니다. 그러나 나는 단지 하나의 쿼터니온을 오류로 정하고 싶을 때가되었다.Eigen passing Quaternionf, 한정자를 제외합니다.
oldQuat = pos;
은 모두 Eigen :: Quaternionf이고, 다음과 같은 오류가 있습니다.
Fehler: passing 'const Quaternionf {aka const Eigen::Quaternion<float>}' as 'this' argument of 'Eigen::Quaternion<Scalar, Options>& Eigen::Quaternion<Scalar, Options>::operator=(const Eigen::Quaternion<Scalar, Options>&) [with _Scalar = float, int _Options = 0, Eigen::Quaternion<Scalar, Options> = Eigen::Quaternion<float>]' discards qualifiers [-fpermissive]
나는이 오류가 과거를 얻을하는 방법에 대한 아이디어가 : 방법은 (http://eigen.tuxfamily.org/dox/classEigen_1_1Quaternion.html 참조) 상수로 선언되어야하기 때문이다. 미리 감사드립니다
편집 : oldQuat 헤더에 선언
for (itCanon = canonicalValues.begin(), itTraj = exampleTraj.begin(); itCanon != canonicalValues.end(); ++itCanon, itTraj++)
{
const SampledTrajectoryV2::TrajData& state = *itTraj;
Eigen::Vector3f axis;
axis << itTraj->getPosition(1), itTraj->getPosition(2), itTraj->getPosition(3);
Eigen::AngleAxisf angleAxis(itTraj->getPosition(0), axis);
Eigen::Quaternionf pos(angleAxis);
pos.normalize();
//Error in both these lines! Same error both times.
Eigen::Vector3f vecVel = calcAngularVelocity(oldQuat, pos);
oldQuat = pos;
// D0 element R3x3 nicht kompatibel mit quat
result[*itCanon] = - A_Z*(B_Z*2*log(pos) - TAU * vecVel);
}
. A_z, B_Z 및 TAU도 마찬가지입니다.
오류 메시지에 따르면 'oldQuat'는 **'Eigen :: Quaternionf '가 아닌 ** const입니다. –
'Eigen :: Quaternionf oldQuat; ' 그것은 선언입니다. – Lenny
[SSCCE] (http://sscce.org/)를 게시해야한다고 생각합니다. 나는'oldQuat'가 멤버 변수이고 당신이'const' 선언 멤버 함수 안에 있다고 생각하지만 * 관련 * 코드 없이는 말하기 어렵습니다. –