new Pose2 class
parent
6e23d61221
commit
3432b6c50f
17
.cproject
17
.cproject
|
@ -300,7 +300,6 @@
|
|||
<buildTargets>
|
||||
<target name="check" path="cpp" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
|
||||
<buildCommand>make</buildCommand>
|
||||
<buildArguments></buildArguments>
|
||||
<buildTarget>check</buildTarget>
|
||||
<stopOnError>true</stopOnError>
|
||||
<useDefaultCommand>true</useDefaultCommand>
|
||||
|
@ -308,6 +307,7 @@
|
|||
</target>
|
||||
<target name="testSimpleCamera.run" path="cpp" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
|
||||
<buildCommand>make</buildCommand>
|
||||
<buildArguments></buildArguments>
|
||||
<buildTarget>testSimpleCamera.run</buildTarget>
|
||||
<stopOnError>true</stopOnError>
|
||||
<useDefaultCommand>true</useDefaultCommand>
|
||||
|
@ -315,6 +315,7 @@
|
|||
</target>
|
||||
<target name="testCal3_S2.run" path="cpp" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
|
||||
<buildCommand>make</buildCommand>
|
||||
<buildArguments></buildArguments>
|
||||
<buildTarget>testCal3_S2.run</buildTarget>
|
||||
<stopOnError>true</stopOnError>
|
||||
<useDefaultCommand>true</useDefaultCommand>
|
||||
|
@ -322,7 +323,6 @@
|
|||
</target>
|
||||
<target name="testVSLAMFactor.run" path="cpp" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
|
||||
<buildCommand>make</buildCommand>
|
||||
<buildArguments></buildArguments>
|
||||
<buildTarget>testVSLAMFactor.run</buildTarget>
|
||||
<stopOnError>true</stopOnError>
|
||||
<useDefaultCommand>true</useDefaultCommand>
|
||||
|
@ -330,6 +330,7 @@
|
|||
</target>
|
||||
<target name="testCalibratedCamera.run" path="cpp" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
|
||||
<buildCommand>make</buildCommand>
|
||||
<buildArguments></buildArguments>
|
||||
<buildTarget>testCalibratedCamera.run</buildTarget>
|
||||
<stopOnError>true</stopOnError>
|
||||
<useDefaultCommand>true</useDefaultCommand>
|
||||
|
@ -337,15 +338,21 @@
|
|||
</target>
|
||||
<target name="testConditionalGaussian.run" path="cpp" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
|
||||
<buildCommand>make</buildCommand>
|
||||
<buildArguments></buildArguments>
|
||||
<buildTarget>testConditionalGaussian.run</buildTarget>
|
||||
<stopOnError>true</stopOnError>
|
||||
<useDefaultCommand>true</useDefaultCommand>
|
||||
<runAllBuilders>true</runAllBuilders>
|
||||
</target>
|
||||
<target name="testPose2.run" path="cpp" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
|
||||
<buildCommand>make</buildCommand>
|
||||
<buildArguments></buildArguments>
|
||||
<buildTarget>testPose2.run</buildTarget>
|
||||
<stopOnError>true</stopOnError>
|
||||
<useDefaultCommand>true</useDefaultCommand>
|
||||
<runAllBuilders>true</runAllBuilders>
|
||||
</target>
|
||||
<target name="install" path="" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
|
||||
<buildCommand>make</buildCommand>
|
||||
<buildArguments></buildArguments>
|
||||
<buildTarget>install</buildTarget>
|
||||
<stopOnError>true</stopOnError>
|
||||
<useDefaultCommand>true</useDefaultCommand>
|
||||
|
@ -353,7 +360,6 @@
|
|||
</target>
|
||||
<target name="clean" path="" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
|
||||
<buildCommand>make</buildCommand>
|
||||
<buildArguments></buildArguments>
|
||||
<buildTarget>clean</buildTarget>
|
||||
<stopOnError>true</stopOnError>
|
||||
<useDefaultCommand>true</useDefaultCommand>
|
||||
|
@ -361,7 +367,6 @@
|
|||
</target>
|
||||
<target name="check" path="" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
|
||||
<buildCommand>make</buildCommand>
|
||||
<buildArguments></buildArguments>
|
||||
<buildTarget>check</buildTarget>
|
||||
<stopOnError>true</stopOnError>
|
||||
<useDefaultCommand>true</useDefaultCommand>
|
||||
|
|
|
@ -100,15 +100,17 @@ testConstrainedLinearFactorGraph_LDADD = libgtsam.la
|
|||
testConstrainedChordalBayesNet_LDADD = libgtsam.la
|
||||
|
||||
# geometry
|
||||
sources += Point2.cpp Point3.cpp Rot3.cpp Pose3.cpp Cal3_S2.cpp
|
||||
check_PROGRAMS += testPoint2 testPoint3 testRot3 testPose3 testCal3_S2
|
||||
sources += Point2.cpp Pose2.cpp Point3.cpp Rot3.cpp Pose3.cpp Cal3_S2.cpp
|
||||
check_PROGRAMS += testPoint2 testPose2 testPoint3 testRot3 testPose3 testCal3_S2
|
||||
testPoint2_SOURCES = testPoint2.cpp
|
||||
testPose2_SOURCES = testPose2.cpp
|
||||
testPoint3_SOURCES = testPoint3.cpp
|
||||
testRot3_SOURCES = testRot3.cpp
|
||||
testPose3_SOURCES = testPose3.cpp
|
||||
testCal3_S2_SOURCES = testCal3_S2.cpp
|
||||
|
||||
testPoint2_LDADD = libgtsam.la
|
||||
testPose2_LDADD = libgtsam.la
|
||||
testPoint3_LDADD = libgtsam.la
|
||||
testRot3_LDADD = libgtsam.la
|
||||
testPose3_LDADD = libgtsam.la
|
||||
|
|
|
@ -0,0 +1,39 @@
|
|||
/**
|
||||
* @file Pose2.cpp
|
||||
* @brief 2D Pose
|
||||
*/
|
||||
|
||||
#include "Pose2.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
namespace gtsam {
|
||||
|
||||
/* ************************************************************************* */
|
||||
void Pose2::print(const string& s) const {
|
||||
cout << s << "(" << x_ << ", " << y_ << ", " << theta_ << ")" << endl;
|
||||
}
|
||||
|
||||
/* ************************************************************************* */
|
||||
Pose2 Pose2::exmap(const Vector& v) const {
|
||||
return Pose2(x_ + v(0), y_ + v(1), theta_ + v(2));
|
||||
}
|
||||
|
||||
/* ************************************************************************* */
|
||||
bool Pose2::equals(const Pose2& q, double tol) const {
|
||||
return (fabs(x_ - q.x_) < tol && fabs(y_ - q.y_) < tol && fabs(theta_
|
||||
- q.theta_) < tol);
|
||||
}
|
||||
|
||||
/* ************************************************************************* */
|
||||
bool assert_equal(const Pose2& A, const Pose2& B, double tol) {
|
||||
if (A.equals(B, tol)) return true;
|
||||
printf("not equal:\n");
|
||||
A.print("A");
|
||||
B.print("B");
|
||||
return false;
|
||||
}
|
||||
|
||||
/* ************************************************************************* */
|
||||
|
||||
} // namespace gtsam
|
|
@ -0,0 +1,57 @@
|
|||
/**
|
||||
* @file Pose2.h
|
||||
* @brief 3D Pose
|
||||
* @author: Frank Dellaert
|
||||
*/
|
||||
|
||||
// \callgraph
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "Point2.h"
|
||||
|
||||
namespace gtsam {
|
||||
|
||||
/**
|
||||
* A 2D pose (x,y,theta)
|
||||
*/
|
||||
class Pose2 {
|
||||
|
||||
private:
|
||||
double x_, y_, theta_;
|
||||
|
||||
public:
|
||||
|
||||
/** default constructor = origin */
|
||||
Pose2() :
|
||||
x_(0), y_(0), theta_(0) {
|
||||
} // default is origin
|
||||
|
||||
/** copy constructor */
|
||||
Pose2(const Pose2& pose) :
|
||||
x_(pose.x_), y_(pose.y_), theta_(pose.theta_) {
|
||||
}
|
||||
|
||||
/** construct from (x,y,theta) */
|
||||
Pose2(double x, double y, double theta) :
|
||||
x_(x), y_(y), theta_(theta) {
|
||||
}
|
||||
|
||||
/** construct from rotation and translation */
|
||||
Pose2(const Point2& t, double theta) :
|
||||
x_(t.x()), y_(t.y()), theta_(theta) {
|
||||
}
|
||||
|
||||
/** print with optional string */
|
||||
void print(const std::string& s = "") const;
|
||||
|
||||
Pose2 exmap(const Vector& v) const;
|
||||
|
||||
/** assert equality up to a tolerance */
|
||||
bool equals(const Pose2& pose, double tol = 1e-9) const;
|
||||
};
|
||||
|
||||
/** assert equality up to a tolerance */
|
||||
bool assert_equal(const Pose2& A, const Pose2& B, double tol = 1e-9);
|
||||
|
||||
} // namespace gtsam
|
|
@ -0,0 +1,25 @@
|
|||
/**
|
||||
* @file testPose2.cpp
|
||||
* @brief Unit tests for Pose2 class
|
||||
*/
|
||||
|
||||
#include <CppUnitLite/TestHarness.h>
|
||||
#include "Pose2.h"
|
||||
|
||||
using namespace gtsam;
|
||||
|
||||
/* ************************************************************************* */
|
||||
TEST(Pose2, constructors) {
|
||||
Point2 p;
|
||||
Pose2 pose(p,0);
|
||||
Pose2 origin;
|
||||
assert_equal(pose,origin);
|
||||
}
|
||||
|
||||
/* ************************************************************************* */
|
||||
int main() {
|
||||
TestResult tr;
|
||||
return TestRegistry::runAllTests(tr);
|
||||
}
|
||||
/* ************************************************************************* */
|
||||
|
Loading…
Reference in New Issue