many changes and updates
- changed the wifi-estimation api - adjusted test-cases - worked on grid-bulding and grid-importance - new walking modules - fixed some minor issues
This commit is contained in:
@@ -39,7 +39,7 @@ struct MyState : public WalkState, public WalkStateRelativePressure {
|
||||
|
||||
|
||||
|
||||
TEST(GridWalk2RelPressure, walkHeading) {
|
||||
TEST(GridWalk2RelPressure, LIVE_walkHeading) {
|
||||
|
||||
Grid<MyNode> grid(20);
|
||||
|
||||
|
||||
@@ -32,7 +32,9 @@ TEST(Grid, add) {
|
||||
ASSERT_THROW(grid.add(GP(10,10,10)), std::exception);
|
||||
ASSERT_THROW(grid.add(GP(10,20,20)), std::exception);
|
||||
ASSERT_THROW(grid.add(GP(20,10,20)), std::exception);
|
||||
ASSERT_THROW(grid.add(GP(20,20,10)), std::exception);
|
||||
//ASSERT_THROW(grid.add(GP(20,20,11)), std::exception); // unaligned z is OK
|
||||
|
||||
// aligned -> OK
|
||||
ASSERT_EQ(1, grid.add(GP(20,20,20)));
|
||||
|
||||
// access
|
||||
@@ -127,13 +129,64 @@ TEST(Grid, uid) {
|
||||
|
||||
Grid<GP> grid(20);
|
||||
|
||||
GP gp(20,40,60);
|
||||
uint64_t uid = grid.getUID(gp);
|
||||
GP gp1(+20, +40, +60);
|
||||
GP gp2(-20, -40, -60);
|
||||
|
||||
const uint64_t uid1 = grid.getUID(gp1);
|
||||
const uint64_t uid2 = grid.getUID(gp2);
|
||||
|
||||
// must be different
|
||||
ASSERT_NE(uid1, uid2);
|
||||
|
||||
const uint64_t center = 1 << 19;
|
||||
|
||||
const int mask = (1 << 20) - 1; // 20-bit mask
|
||||
ASSERT_EQ(3, uid >> 40 & mask); // x
|
||||
ASSERT_EQ(2, uid >> 20 & mask); // y
|
||||
ASSERT_EQ(1, uid >> 0 & mask); // z
|
||||
ASSERT_EQ(center+60/20*5, (uid1) >> 40 & mask); // z (z UID has a higher resolution: * 5
|
||||
ASSERT_EQ(center+40/20, (uid1) >> 20 & mask); // y
|
||||
ASSERT_EQ(center+20/20, (uid1) >> 0 & mask); // x
|
||||
|
||||
ASSERT_EQ(center-60/20*5, (uid2) >> 40 & mask); // z (z UID has a higher resolution: * 5
|
||||
ASSERT_EQ(center-40/20, (uid2) >> 20 & mask); // y
|
||||
ASSERT_EQ(center-20/20, (uid2) >> 0 & mask); // x
|
||||
|
||||
}
|
||||
|
||||
TEST(Grid, unconnect) {
|
||||
|
||||
Grid<GP> grid(1);
|
||||
|
||||
int idx1 = grid.add(GP(0,0,0));
|
||||
int idx2 = grid.add(GP(1,0,0));
|
||||
int idx3 = grid.add(GP(1,1,0));
|
||||
|
||||
grid.connectBiDir(idx1,idx2);
|
||||
grid.connectBiDir(idx2,idx3);
|
||||
grid.connectBiDir(idx3,idx1);
|
||||
|
||||
ASSERT_EQ(2, grid.getNumNeighbors(idx1));
|
||||
ASSERT_EQ(2, grid.getNumNeighbors(idx2));
|
||||
ASSERT_EQ(2, grid.getNumNeighbors(idx3));
|
||||
|
||||
grid.disconnectUniDir(idx1, idx2);
|
||||
ASSERT_EQ(1, grid.getNumNeighbors(idx1)); ASSERT_EQ(idx3, grid.getNeighbor(idx1,0).getIdx());
|
||||
ASSERT_EQ(2, grid.getNumNeighbors(idx2));
|
||||
grid.disconnectUniDir(idx2,idx1);
|
||||
ASSERT_EQ(1, grid.getNumNeighbors(idx1)); ASSERT_EQ(idx3, grid.getNeighbor(idx1,0).getIdx());
|
||||
ASSERT_EQ(1, grid.getNumNeighbors(idx2)); ASSERT_EQ(idx3, grid.getNeighbor(idx2,0).getIdx());
|
||||
|
||||
grid.disconnectUniDir(idx1, idx3);
|
||||
ASSERT_EQ(0, grid.getNumNeighbors(idx1));
|
||||
ASSERT_EQ(2, grid.getNumNeighbors(idx3));
|
||||
grid.disconnectUniDir(idx3, idx1);
|
||||
ASSERT_EQ(0, grid.getNumNeighbors(idx1));
|
||||
ASSERT_EQ(1, grid.getNumNeighbors(idx3)); ASSERT_EQ(idx2, grid.getNeighbor(idx3,0).getIdx());
|
||||
|
||||
grid.disconnectUniDir(idx2, idx3);
|
||||
ASSERT_EQ(0, grid.getNumNeighbors(idx2));
|
||||
ASSERT_EQ(1, grid.getNumNeighbors(idx3));
|
||||
grid.disconnectUniDir(idx3, idx2);
|
||||
ASSERT_EQ(0, grid.getNumNeighbors(idx2));
|
||||
ASSERT_EQ(0, grid.getNumNeighbors(idx3));
|
||||
|
||||
}
|
||||
|
||||
@@ -230,19 +283,19 @@ TEST(Grid, nearest) {
|
||||
|
||||
ASSERT_EQ(c1, grid.getNodeFor(GP(15,20,20)));
|
||||
ASSERT_EQ(c1, grid.getNodeFor(GP(20,15,20)));
|
||||
ASSERT_EQ(c1, grid.getNodeFor(GP(20,20,15)));
|
||||
//ASSERT_EQ(c1, grid.getNodeFor(GP(20,20,15))); // Z has a higher resolution!
|
||||
|
||||
ASSERT_EQ(c1, grid.getNodeFor(GP(25,20,20)));
|
||||
ASSERT_EQ(c1, grid.getNodeFor(GP(20,25,20)));
|
||||
ASSERT_EQ(c1, grid.getNodeFor(GP(20,20,25)));
|
||||
//ASSERT_EQ(c1, grid.getNodeFor(GP(20,20,25))); // Z has a higher resolution!
|
||||
|
||||
ASSERT_EQ(c2, grid.getNodeFor(GP(35,40,40)));
|
||||
ASSERT_EQ(c2, grid.getNodeFor(GP(40,35,40)));
|
||||
ASSERT_EQ(c2, grid.getNodeFor(GP(40,40,35)));
|
||||
//ASSERT_EQ(c2, grid.getNodeFor(GP(40,40,35))); // Z has a higher resolution!
|
||||
|
||||
ASSERT_EQ(c2, grid.getNodeFor(GP(45,40,40)));
|
||||
ASSERT_EQ(c2, grid.getNodeFor(GP(40,45,40)));
|
||||
ASSERT_EQ(c2, grid.getNodeFor(GP(40,40,45)));
|
||||
//ASSERT_EQ(c2, grid.getNodeFor(GP(40,40,45))); // Z has a higher resolution!
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -24,9 +24,10 @@
|
||||
#include <KLib/misc/gnuplot/GnuplotPlotElementLines.h>
|
||||
|
||||
|
||||
struct MyNode : public GridPoint, public GridNode, public GridNodeImportance, public WiFiGridNode<10> {
|
||||
MyNode() {;}
|
||||
MyNode(const int x, const int y, const int z) : GridPoint(x,y,z) {;}
|
||||
// ENSURE UNIQUE CLASS NAME
|
||||
struct MyNode1239 : public GridPoint, public GridNode, public GridNodeImportance, public WiFiGridNode<10> {
|
||||
MyNode1239() {;}
|
||||
MyNode1239(const int x, const int y, const int z) : GridPoint(x,y,z) {;}
|
||||
static void staticDeserialize(std::istream& inp) {
|
||||
WiFiGridNode::staticDeserialize(inp);
|
||||
}
|
||||
@@ -36,16 +37,17 @@ struct MyNode : public GridPoint, public GridNode, public GridNodeImportance, pu
|
||||
}
|
||||
};
|
||||
|
||||
struct MyState : public WalkState, public WalkStateHeading {
|
||||
MyState(const GridPoint& pos, const Heading head) : WalkState(pos), WalkStateHeading(head) {;}
|
||||
// ENSURE UNIQUE CLASS NAME
|
||||
struct MyState23452 : public WalkState, public WalkStateHeading {
|
||||
MyState23452(const GridPoint& pos, const Heading head) : WalkState(pos), WalkStateHeading(head) {;}
|
||||
};
|
||||
|
||||
|
||||
TEST(GridWalk2, error) {
|
||||
TEST(GridWalk2, LIVE_error) {
|
||||
|
||||
|
||||
Grid<MyNode> grid(20);
|
||||
GridFactory<MyNode> gf(grid);
|
||||
Grid<MyNode1239> grid(20);
|
||||
GridFactory<MyNode1239> gf(grid);
|
||||
|
||||
Floorplan::Floor floor;
|
||||
Floorplan::FloorOutlinePolygon poly;
|
||||
@@ -61,13 +63,13 @@ TEST(GridWalk2, error) {
|
||||
float turnAngle = 0; // keep the angle as-is!
|
||||
} ctrl;
|
||||
|
||||
GridWalker<MyNode, MyState> walker;
|
||||
WalkModuleHeadingControl<MyNode, MyState, Control> modHead(&ctrl);
|
||||
GridWalker<MyNode1239, MyState23452> walker;
|
||||
WalkModuleHeadingControl<MyNode1239, MyState23452, Control> modHead(&ctrl);
|
||||
|
||||
walker.addModule(&modHead);
|
||||
|
||||
|
||||
MyState state(GridPoint(800,800,0), Heading(3.1415/2));
|
||||
MyState23452 state(GridPoint(800,800,0), Heading(3.1415/2));
|
||||
|
||||
K::Gnuplot gp;
|
||||
gp << "set xrange[0:5000]\n";
|
||||
@@ -98,9 +100,9 @@ TEST(GridWalk2, error) {
|
||||
}
|
||||
|
||||
|
||||
TEST(GgridWalk2, walkHeading) {
|
||||
TEST(GgridWalk2, LIVE_walkHeading) {
|
||||
|
||||
Grid<MyNode> grid(20);
|
||||
Grid<MyNode1239> grid(20);
|
||||
std::ifstream inp("/tmp/grid.dat");
|
||||
grid.read(inp);
|
||||
|
||||
@@ -118,9 +120,9 @@ TEST(GgridWalk2, walkHeading) {
|
||||
// GridFactory<MyNode> fac(grid);
|
||||
// fac.addFloor(&floor);
|
||||
|
||||
GridWalker<MyNode, MyState> walker;
|
||||
WalkModuleHeading<MyNode, MyState> wmHead;
|
||||
WalkModuleFollowDestination<MyNode, MyState> wmDest(grid, grid.getNodeFor(GridPoint(7200,4800,400+340+340)));
|
||||
GridWalker<MyNode1239, MyState23452> walker;
|
||||
WalkModuleHeading<MyNode1239, MyState23452> wmHead;
|
||||
WalkModuleFollowDestination<MyNode1239, MyState23452> wmDest(grid, grid.getNodeFor(GridPoint(7200,4800,400+340+340)));
|
||||
//walker.addModule(&wmHead);
|
||||
walker.addModule(&wmDest);
|
||||
|
||||
@@ -132,7 +134,7 @@ TEST(GgridWalk2, walkHeading) {
|
||||
K::GnuplotSplotElementPoints nodes; nodes.setPointSize(0.1); nodes.setColorHex("#888888"); splot.add(&nodes);
|
||||
K::GnuplotSplotElementPoints states; states.setPointSize(0.5); states.setColorHex("#0000ff"); splot.add(&states);
|
||||
|
||||
for (const MyNode& n : grid) {
|
||||
for (const MyNode1239& n : grid) {
|
||||
static int cnt = 0;
|
||||
if (++cnt % 5 == 0) {
|
||||
nodes.add(K::GnuplotPoint3(n.x_cm, n.y_cm, n.z_cm));
|
||||
@@ -143,8 +145,8 @@ TEST(GgridWalk2, walkHeading) {
|
||||
for (int j = 0; j < 500; ++j) {
|
||||
states.clear();
|
||||
for (int i = 0; i < points.size(); ++i) {
|
||||
MyState start(points[i], Heading(0.0));
|
||||
MyState next = walker.getDestination(grid, start, 2.0);
|
||||
MyState23452 start(points[i], Heading(0.0));
|
||||
MyState23452 next = walker.getDestination(grid, start, 2.0);
|
||||
points[i] = next.startPos;
|
||||
states.add(K::GnuplotPoint3(points[i].x_cm, points[i].y_cm, points[i].z_cm));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user