path-generator
Version:
A easy motion profile path generator
93 lines (92 loc) • 3.52 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var errors_1 = require("../motionProfiling/errors");
var segment_1 = require("../motionProfiling/segment");
var Trajectory = /** @class */ (function () {
function Trajectory(waypoints, pathConfig) {
this._setpoints = [];
this._segments = [];
this._coords = [];
this.setpointTime = 0;
this._distance = 0;
this.pathConfig = pathConfig;
this.waypoints = waypoints;
this.checkPathConfig();
}
Trajectory.prototype.generateTrajectory = function () {
for (var index = 0; index < this.waypoints.length - 1; index++) {
try {
this.generate(index);
}
catch (error) {
if (error instanceof errors_1.PathGeneratorError)
error.addErrorPosition(index);
throw error;
}
}
};
Trajectory.prototype.checkPathConfig = function () {
if (this.pathConfig.acc === 0)
throw new errors_1.PathConfigValueEqualToZero('acc');
else if (this.pathConfig.vMax === 0)
throw new errors_1.PathConfigValueEqualToZero('vMax');
else if (this.pathConfig.robotLoopTime === 0)
throw new errors_1.PathConfigValueEqualToZero('robot loop time');
};
Trajectory.prototype.generateSegments = function (object) {
var speeding2vMax = new segment_1.default(object.V0, object.vMax, object.acc);
var slowing2vEnd = new segment_1.default(object.vMax, object.vEnd, object.acc);
var speedingAndSlowingDistance = speeding2vMax.distance + slowing2vEnd.distance;
var segments = [];
segments.push(speeding2vMax);
segments.push(new segment_1.default(object.vMax, object.distance - speedingAndSlowingDistance));
segments.push(slowing2vEnd);
return segments;
};
Trajectory.prototype.generateSetpoints = function (segments, startPosition) {
var setpoints = [];
var lastPos = startPosition;
var robotLoopTime = this.pathConfig.robotLoopTime;
for (var i = 0; i < segments.length; i++) {
if (segments[i].distance === 0)
continue;
for (; this.setpointTime <= segments[i].totalTime; this.setpointTime += robotLoopTime) {
var setpoint = segments[i].getSetpoint(this.setpointTime, lastPos);
setpoints.push(setpoint);
}
lastPos += segments[i].distance;
this.setpointTime -= segments[i].totalTime;
}
return setpoints;
};
Object.defineProperty(Trajectory.prototype, "totalTime", {
get: function () {
return this.setpoints.length * this.pathConfig.robotLoopTime;
},
enumerable: false,
configurable: true
});
Object.defineProperty(Trajectory.prototype, "setpoints", {
get: function () {
return this._setpoints;
},
enumerable: false,
configurable: true
});
Object.defineProperty(Trajectory.prototype, "coords", {
get: function () {
return this._coords;
},
enumerable: false,
configurable: true
});
Object.defineProperty(Trajectory.prototype, "distance", {
get: function () {
return this._distance;
},
enumerable: false,
configurable: true
});
return Trajectory;
}());
exports.default = Trajectory;