move Line3 transformTo definition to header to resolve ambiguity
parent
38425f1164
commit
1e1e2c26ee
|
@ -91,30 +91,4 @@ Point3 Line3::point(double distance) const {
|
||||||
return rotated_center + distance * R_.r3();
|
return rotated_center + distance * R_.r3();
|
||||||
}
|
}
|
||||||
|
|
||||||
Line3 transformTo(const Pose3 &wTc, const Line3 &wL,
|
} // namespace gtsam
|
||||||
OptionalJacobian<4, 6> Dpose, OptionalJacobian<4, 4> Dline) {
|
|
||||||
Rot3 wRc = wTc.rotation();
|
|
||||||
Rot3 cRw = wRc.inverse();
|
|
||||||
Rot3 cRl = cRw * wL.R_;
|
|
||||||
|
|
||||||
Vector2 w_ab;
|
|
||||||
Vector3 t = ((wL.R_).transpose() * wTc.translation());
|
|
||||||
Vector2 c_ab(wL.a_ - t[0], wL.b_ - t[1]);
|
|
||||||
|
|
||||||
if (Dpose) {
|
|
||||||
Matrix3 lRc = (cRl.matrix()).transpose();
|
|
||||||
Dpose->setZero();
|
|
||||||
// rotation
|
|
||||||
Dpose->block<2, 3>(0, 0) = -lRc.block<2, 3>(0, 0);
|
|
||||||
// translation
|
|
||||||
Dpose->block<2, 3>(2, 3) = -lRc.block<2, 3>(0, 0);
|
|
||||||
}
|
|
||||||
if (Dline) {
|
|
||||||
Dline->setIdentity();
|
|
||||||
(*Dline)(0, 3) = -t[2];
|
|
||||||
(*Dline)(1, 2) = t[2];
|
|
||||||
}
|
|
||||||
return Line3(cRl, c_ab[0], c_ab[1]);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
|
@ -26,7 +26,7 @@ namespace gtsam {
|
||||||
* @addtogroup geometry
|
* @addtogroup geometry
|
||||||
* \nosubgrouping
|
* \nosubgrouping
|
||||||
*/
|
*/
|
||||||
class Line3 {
|
class GTSAM_EXPORT Line3 {
|
||||||
private:
|
private:
|
||||||
Rot3 R_; // Rotation of line about x and y in world frame
|
Rot3 R_; // Rotation of line about x and y in world frame
|
||||||
double a_, b_; // Intersection of line with the world x-y plane rotated by R_
|
double a_, b_; // Intersection of line with the world x-y plane rotated by R_
|
||||||
|
@ -146,7 +146,30 @@ class Line3 {
|
||||||
*/
|
*/
|
||||||
Line3 transformTo(const Pose3 &wTc, const Line3 &wL,
|
Line3 transformTo(const Pose3 &wTc, const Line3 &wL,
|
||||||
OptionalJacobian<4, 6> Dpose = boost::none,
|
OptionalJacobian<4, 6> Dpose = boost::none,
|
||||||
OptionalJacobian<4, 4> Dline = boost::none);
|
OptionalJacobian<4, 4> Dline = boost::none) {
|
||||||
|
Rot3 wRc = wTc.rotation();
|
||||||
|
Rot3 cRw = wRc.inverse();
|
||||||
|
Rot3 cRl = cRw * wL.R_;
|
||||||
|
|
||||||
|
Vector2 w_ab;
|
||||||
|
Vector3 t = ((wL.R_).transpose() * wTc.translation());
|
||||||
|
Vector2 c_ab(wL.a_ - t[0], wL.b_ - t[1]);
|
||||||
|
|
||||||
|
if (Dpose) {
|
||||||
|
Matrix3 lRc = (cRl.matrix()).transpose();
|
||||||
|
Dpose->setZero();
|
||||||
|
// rotation
|
||||||
|
Dpose->block<2, 3>(0, 0) = -lRc.block<2, 3>(0, 0);
|
||||||
|
// translation
|
||||||
|
Dpose->block<2, 3>(2, 3) = -lRc.block<2, 3>(0, 0);
|
||||||
|
}
|
||||||
|
if (Dline) {
|
||||||
|
Dline->setIdentity();
|
||||||
|
(*Dline)(0, 3) = -t[2];
|
||||||
|
(*Dline)(1, 2) = t[2];
|
||||||
|
}
|
||||||
|
return Line3(cRl, c_ab[0], c_ab[1]);
|
||||||
|
}
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
struct traits<Line3> : public internal::Manifold<Line3> {};
|
struct traits<Line3> : public internal::Manifold<Line3> {};
|
||||||
|
|
Loading…
Reference in New Issue