minor changes to grid walking
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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() );
|
||||
|
||||
|
||||
Reference in New Issue
Block a user