minor changes to grid walking

This commit is contained in:
k-a-z-u
2017-12-13 16:37:51 +01:00
parent 1114331fd2
commit d48b0b8fd4
7 changed files with 41 additions and 24 deletions

View File

@@ -111,14 +111,12 @@ public:
return Base::get(distance);
}
/** is the given position part of a floor (or in the air) */
bool isOnFloor(const float distance) const {
const Point3 pos = getPosAfterDistance(distance);
for (const Floorplan::Floor* floor : map->floors) {
const float delta = std::abs(floor->atHeight - pos.z);
if (delta < 0.1) {return true;}
}
return false;
/** at the given distance: are we walking on a plain surface or up/down? */
bool isPlain(const float distance) const {
const Point3 pos1 = getPosAfterDistance(distance);
const Point3 pos2 = getPosAfterDistance(distance + 0.1);
const float delta = std::abs(pos1.z - pos2.z);
return delta < 0.01;
}
};

View File

@@ -34,7 +34,8 @@ private:
float lastStepAtDistance = 0;
Timestamp refStepPattern;
Interpolator<Timestamp, AccelerometerData> stepPattern;
Interpolator<Timestamp, AccelerometerData> stepPatternPlain;
Interpolator<Timestamp, AccelerometerData> stepPatternStair;
Distribution::Normal<float> dX = Distribution::Normal<float>(0, 0.2);
Distribution::Normal<float> dY = Distribution::Normal<float>(0, 0.3);
@@ -76,10 +77,16 @@ public:
// AccelerometerData acc(x,y,z);
// stepPattern.add(Timestamp::fromMS(i), acc);
// }
stepPattern.add(Timestamp::fromMS(0), AccelerometerData(0, 0, 0));
stepPattern.add(Timestamp::fromMS(250), AccelerometerData(0, 0.6, 3));
stepPattern.add(Timestamp::fromMS(350), AccelerometerData(0.5, -0.6, -1.8));
stepPattern.add(Timestamp::fromMS(450), AccelerometerData(0, 0, 0));
stepPatternPlain.add(Timestamp::fromMS(0), AccelerometerData(0, 0, 0));
stepPatternPlain.add(Timestamp::fromMS(250), AccelerometerData(0, 0.6, 3));
stepPatternPlain.add(Timestamp::fromMS(350), AccelerometerData(0.5, -0.6, -1.8));
stepPatternPlain.add(Timestamp::fromMS(450), AccelerometerData(0, 0, 0));
stepPatternStair.add(Timestamp::fromMS(0), AccelerometerData(0, 0, 0));
stepPatternStair.add(Timestamp::fromMS(200), AccelerometerData(0, 0.6, 4));
stepPatternStair.add(Timestamp::fromMS(300), AccelerometerData(0.5, -0.6, -3.5));
stepPatternStair.add(Timestamp::fromMS(350), AccelerometerData(0, 0, 0));
}
@@ -95,6 +102,7 @@ protected:
(void) curPos;
const float distAdd = (type == SyntheticWalker::Type::FLOOR) ? (dNextStep.draw()) : (dNextStepStair.draw());
const auto stepPattern = (type == SyntheticWalker::Type::FLOOR) ? (stepPatternPlain) : (stepPatternStair);
const float nextStepAt = lastStepAtDistance + distAdd;
// 1st, start with random noise on the accelerometer

View File

@@ -60,8 +60,8 @@ public:
// get the current position along the path
const Point3 curPosOnPath = path.getPosAfterDistance(this->walkedDistance);
const bool isOnFloor = path.isOnFloor(this->walkedDistance);
const Type type = (isOnFloor) ? (Type::FLOOR) : (Type::NON_FLOOR);
const bool isPlainPart = path.isPlain(this->walkedDistance);
const Type type = (isPlainPart) ? (Type::FLOOR) : (Type::NON_FLOOR);
Log::add(name, "walkTime: " + std::to_string(walkedTime.sec()) + " walkDistance: " + std::to_string(walkedDistance) + " -> " + curPosOnPath.asString() );