170 lines
4.9 KiB
C++
170 lines
4.9 KiB
C++
/**
|
|
* @file testControlConfig.cpp
|
|
* @brief Test for configuration using 2D control inputs on a PV model
|
|
* @author Alex Cunningham
|
|
*/
|
|
|
|
#include <CppUnitLite/TestHarness.h>
|
|
#include <ControlConfig.h>
|
|
#include <ControlPoint.h>
|
|
|
|
using namespace std;
|
|
using namespace gtsam;
|
|
|
|
/* ************************************************************************* */
|
|
TEST( ControlConfig, basic ) {
|
|
|
|
// create a config
|
|
ControlConfig config;
|
|
|
|
// add a robot to the config
|
|
string r1 = "R1", r2 = "R2";
|
|
config.addAgent(r1);
|
|
config.addAgent(r2);
|
|
|
|
// add some states for each of the robots
|
|
ControlPoint s1,
|
|
s2(Pose2(1.0, 1.0, 1.0), Pose2(), 2.0),
|
|
s3(Pose2(1.0, 1.0, 1.0), Pose2(), 3.0);
|
|
config.addPoint(r1, s1);
|
|
config.addPoint(r1, s2);
|
|
config.addPoint(r1, s3);
|
|
|
|
// get the path back out again
|
|
ControlConfig::path act1 = config.getPath(r1);
|
|
CHECK(act1.size() == 3);
|
|
CHECK(assert_equal(act1.at(0), s1));
|
|
CHECK(assert_equal(act1.at(1), s2));
|
|
CHECK(assert_equal(act1.at(2), s3));
|
|
|
|
// check size
|
|
CHECK(config.size() == 2);
|
|
}
|
|
|
|
/* ************************************************************************* */
|
|
TEST ( ControlConfig, add_specific_points ) {
|
|
ControlConfig config;
|
|
ControlPoint s1,
|
|
s2(Pose2(1.0, 1.0, 1.0), Pose2(), 2.0),
|
|
s3(Pose2(2.0, 2.0, 1.0), Pose2(), 3.0);
|
|
config.addAgent("r1");
|
|
config.addPoint("r1", s1); // add at zero
|
|
config.addPoint("r1", s2, 5); // add at sequence 5
|
|
config.addPoint("r1", s3, 3); // add at sequence 3
|
|
|
|
CHECK(config.getPath("r1").size() == 6);
|
|
CHECK(assert_equal(config.getPath("r1").at(0), s1));
|
|
CHECK(assert_equal(config.getPath("r1").at(5), s2));
|
|
CHECK(assert_equal(config.getPath("r1").at(3), s3));
|
|
}
|
|
|
|
/* ************************************************************************* */
|
|
TEST ( ControlConfig, equals ) {
|
|
ControlConfig cfg1, cfg2, cfg3;
|
|
cfg1.addAgent("r1");
|
|
cfg2.addAgent("r1");
|
|
cfg3.addAgent("r2");
|
|
|
|
CHECK(assert_equal(cfg1, cfg2));
|
|
CHECK(!cfg1.equals(cfg3));
|
|
|
|
ControlPoint s1, s2(Pose2(1.0, 1.0, 1.0), Pose2(), 2.0);
|
|
cfg1.addPoint("r1", s1);
|
|
cfg2.addPoint("r1", s2);
|
|
|
|
CHECK(!cfg1.equals(cfg2));
|
|
}
|
|
|
|
/* ************************************************************************* */
|
|
TEST ( ControlConfig, exmap ) {
|
|
// create a config with two agents and some trajectories
|
|
ControlConfig config;
|
|
ControlPoint s1,
|
|
s2(Pose2(1.0, 1.0, 1.0), Pose2(), 1.0),
|
|
s3(Pose2(2.0, 2.0, 2.0), Pose2(0.1, 0.2, 0.3), 2.0),
|
|
s4(Pose2(1.0, 2.0, 1.0), Pose2(), 0.0),
|
|
s5(Pose2(3.0, 4.0, 3.0), Pose2(0.4, 0.5, 0.6), 1.5);
|
|
|
|
config.addAgent("r1");
|
|
config.addPoint("r1", s1);
|
|
config.addPoint("r1", s2);
|
|
config.addPoint("r1", s3);
|
|
config.addAgent("r2");
|
|
config.addPoint("r2", s4);
|
|
config.addPoint("r2", s5);
|
|
|
|
// create a delta config
|
|
VectorConfig delta;
|
|
Vector d1 = repeat(7, 0.1);
|
|
Vector d2 = repeat(7, 0.2);
|
|
Vector d3 = repeat(7, 0.3);
|
|
Vector dother = repeat(7, 100.0);
|
|
delta.insert("r1_0", d1);
|
|
delta.insert("r1_1", d2);
|
|
delta.insert("r1_2", d3);
|
|
delta.insert("r2_0", d1);
|
|
delta.insert("r2_1", d2);
|
|
delta.insert("penguin", dother);
|
|
|
|
|
|
ControlConfig actual = config.exmap(delta);
|
|
|
|
// Verify
|
|
ControlConfig expected;
|
|
expected.addAgent("r1");
|
|
expected.addPoint("r1", s1.exmap(d1));
|
|
expected.addPoint("r1", s2.exmap(d2));
|
|
expected.addPoint("r1", s3.exmap(d3));
|
|
expected.addAgent("r2");
|
|
expected.addPoint("r2", s4.exmap(d1));
|
|
expected.addPoint("r2", s5.exmap(d2));
|
|
|
|
CHECK(assert_equal(expected, actual));
|
|
}
|
|
|
|
/* ************************************************************************* */
|
|
TEST ( ControlConfig, namegen ) {
|
|
string name = "r1";
|
|
int num = 5;
|
|
string actKey = ControlConfig::nameGen(name, num);
|
|
string expKey = "r1_5";
|
|
CHECK(actKey == expKey);
|
|
}
|
|
|
|
/* ************************************************************************* */
|
|
TEST ( ControlConfig, string_access ) {
|
|
ControlConfig config;
|
|
ControlPoint s1,
|
|
s2(Pose2(1.0, 1.0, 1.0), Pose2(), 1.0),
|
|
s3(Pose2(2.0, 2.0, 2.0), Pose2(0.1, 0.2, 0.3), 2.0);
|
|
config.addAgent("r1");
|
|
config.addPoint("r1", s1);
|
|
config.addPoint("r1", s2);
|
|
config.addPoint("r1", s3);
|
|
|
|
CHECK(assert_equal(config.get("r1_0"), s1));
|
|
CHECK(assert_equal(config.get("r1_1"), s2));
|
|
CHECK(assert_equal(config.get("r1_2"), s3));
|
|
}
|
|
|
|
/* ************************************************************************* */
|
|
TEST ( ControlConfig, compare ) {
|
|
ControlConfig feasible, input;
|
|
ControlPoint s1,
|
|
s2(Pose2(1.0, 1.0, 1.0), Pose2(), 1.0),
|
|
s3(Pose2(2.0, 2.0, 2.0), Pose2(0.1, 0.2, 0.3), 2.0);
|
|
feasible.addAgent("r1");
|
|
feasible.addPoint("r1", s1);
|
|
feasible.addPoint("r1", s2);
|
|
input.addAgent("r1");
|
|
input.addPoint("r1", s1);
|
|
input.addPoint("r1", s3);
|
|
|
|
CHECK(ControlConfig::compareConfigState("r1_0", feasible, input));
|
|
CHECK(!ControlConfig::compareConfigState("r1_1", feasible, input));
|
|
}
|
|
|
|
/* ************************************************************************* */
|
|
int main() { TestResult tr; return TestRegistry::runAllTests(tr); }
|
|
/* ************************************************************************* */
|