@robotical/sensors-dashboard
Version:
A dashboard tool for depicting Marty data by Robotical
213 lines (212 loc) • 9.97 kB
JavaScript
;
require("core-js/modules/es.symbol.description.js");
require("core-js/modules/esnext.iterator.constructor.js");
require("core-js/modules/esnext.iterator.filter.js");
require("core-js/modules/esnext.iterator.for-each.js");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = exports.MockMartyInterface = void 0;
require("core-js/modules/esnext.iterator.map.js");
require("core-js/modules/es.number.to-fixed.js");
require("core-js/modules/web.dom-collections.iterator.js");
require("core-js/modules/es.array.includes.js");
require("core-js/modules/es.string.includes.js");
var _MartyInterface = _interopRequireDefault(require("../MartyInterface"));
var _Addon = _interopRequireDefault(require("../../models/addons/Addon"));
var _AddonSub = _interopRequireDefault(require("../../models/addons/AddonSub"));
var _renameValueLabel = _interopRequireDefault(require("../../utils/rename-value-label"));
var _excludedAddons = _interopRequireDefault(require("../../utils/constants/excluded-addons"));
var _whoAmINames = _interopRequireDefault(require("../../utils/constants/whoAmI-names"));
var _servoNames = _interopRequireDefault(require("../../utils/constants/servo-names"));
var _addonNames = require("../../utils/types/addon-names");
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
const UPDATE_INTERVAL_MS = 750;
const cloneAddons = addons => addons.map(addon => _objectSpread(_objectSpread({}, addon), {}, {
vals: _objectSpread({}, addon.vals)
}));
const clamp = (value, min, max) => Math.min(Math.max(value, min), max);
const mutateNumber = (value, min, max, maxDelta) => {
const delta = (Math.random() * 2 - 1) * maxDelta;
const next = value + delta;
return Number(clamp(next, min, max).toFixed(2));
};
const randomBoolean = function randomBoolean(current) {
let flipChance = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0.15;
if (Math.random() < flipChance) {
return current > 0.5 ? 0 : 1;
}
return current;
};
const createInitialAddons = () => [{
id: 0,
deviceTypeID: 0,
whoAmI: "IRFoot",
name: "Touch",
status: 0,
vals: {
Touch: 0,
Touch_IR: 180,
Touch_Ambient: 200
}
}, {
id: 1,
deviceTypeID: 0,
whoAmI: "coloursensor",
name: "Color",
status: 0,
vals: {
ColorClear: 120,
ColorRed: 60,
ColorGreen: 75,
ColorBlue: 80
}
}, {
id: 2,
deviceTypeID: 0,
whoAmI: "lightsensor",
name: "Light",
status: 0,
vals: {
LightReading1: 90,
LightReading2: 110,
LightReading3: 105
}
}];
const createInitialServos = () => Array.from({
length: _servoNames.default.length
}, (_, id) => ({
id,
pos: 90,
current: 350,
status: 0
}));
const createInitialAccel = () => ({
x: 0.04,
y: -0.05,
z: 0.98
});
const buildMartyAddonList = (addons, servos, accel) => {
const addonObjects = [];
for (const addon of addons) {
const whoAmI = (0, _whoAmINames.default)(addon.whoAmI);
if (_excludedAddons.default.includes(whoAmI)) continue;
const subAddons = [];
for (const valKey in addon.vals) {
const value = addon.vals[valKey];
const addonInputName = (0, _renameValueLabel.default)(valKey, addon.name);
subAddons.push(new _AddonSub.default(addonInputName, typeof value === "number" ? value : 0));
}
addonObjects.push(new _Addon.default(whoAmI, subAddons));
}
const posAddonSub = [];
const currAddonSub = [];
for (const servo of servos) {
const servoName = _servoNames.default[servo.id] || "servo-".concat(servo.id);
posAddonSub.push(new _AddonSub.default(servoName, servo.pos));
currAddonSub.push(new _AddonSub.default(servoName, servo.current));
}
addonObjects.push(new _Addon.default(_addonNames.MOTOR_POSITION_NAME, posAddonSub));
addonObjects.push(new _Addon.default(_addonNames.MOTOR_CURRENT_NAME, currAddonSub));
const accelAddonSub = [new _AddonSub.default(_addonNames.ACCELEROMETER_NAME_X, accel.x), new _AddonSub.default(_addonNames.ACCELEROMETER_NAME_Y, accel.y), new _AddonSub.default(_addonNames.ACCELEROMETER_NAME_Z, accel.z)];
addonObjects.push(new _Addon.default(_addonNames.ACCELEROMETER_NAME, accelAddonSub));
return addonObjects;
};
class MockMartyInterface extends _MartyInterface.default {
constructor() {
super({}, {
autoSubscribe: false
});
_defineProperty(this, "updateTimer", null);
_defineProperty(this, "latestAddonList", []);
this.currentAddons = createInitialAddons();
this.currentServos = createInitialServos();
this.currentAccel = createInitialAccel();
this.latestAddonList = buildMartyAddonList(this.currentAddons, this.currentServos, this.currentAccel);
}
start() {
this.dispatchCurrentState();
this.updateTimer = window.setInterval(() => {
this.tick();
}, UPDATE_INTERVAL_MS);
}
getAvailableAddons() {
return this.latestAddonList;
}
unsubscribeFromPublishedData() {
if (this.updateTimer !== null) {
clearInterval(this.updateTimer);
this.updateTimer = null;
}
}
dispatchCurrentState() {
this.latestAddonList = buildMartyAddonList(this.currentAddons, this.currentServos, this.currentAccel);
this.setAddons(cloneAddons(this.currentAddons));
this.setServos({
smartServos: this.currentServos.map(servo => _objectSpread({}, servo))
});
this.setAccel({
accel: _objectSpread({}, this.currentAccel)
});
}
tick() {
this.currentAddons = this.currentAddons.map(addon => this.mutateAddon(addon));
this.currentServos = this.currentServos.map(servo => this.mutateServo(servo));
this.currentAccel = this.mutateAccel(this.currentAccel);
this.dispatchCurrentState();
}
mutateAddon(addon) {
if (addon.name === "Touch") {
var _addon$vals$Touch, _addon$vals$Touch_IR, _addon$vals$Touch_Amb;
return _objectSpread(_objectSpread({}, addon), {}, {
vals: {
Touch: randomBoolean(Number((_addon$vals$Touch = addon.vals.Touch) !== null && _addon$vals$Touch !== void 0 ? _addon$vals$Touch : 0)),
Touch_IR: mutateNumber(Number((_addon$vals$Touch_IR = addon.vals.Touch_IR) !== null && _addon$vals$Touch_IR !== void 0 ? _addon$vals$Touch_IR : 0), 80, 320, 20),
Touch_Ambient: mutateNumber(Number((_addon$vals$Touch_Amb = addon.vals.Touch_Ambient) !== null && _addon$vals$Touch_Amb !== void 0 ? _addon$vals$Touch_Amb : 0), 80, 320, 15)
}
});
}
if (addon.name === "Color") {
var _addon$vals$ColorClea, _addon$vals$ColorRed, _addon$vals$ColorGree, _addon$vals$ColorBlue;
return _objectSpread(_objectSpread({}, addon), {}, {
vals: {
ColorClear: mutateNumber(Number((_addon$vals$ColorClea = addon.vals.ColorClear) !== null && _addon$vals$ColorClea !== void 0 ? _addon$vals$ColorClea : 0), 20, 255, 18),
ColorRed: mutateNumber(Number((_addon$vals$ColorRed = addon.vals.ColorRed) !== null && _addon$vals$ColorRed !== void 0 ? _addon$vals$ColorRed : 0), 10, 255, 18),
ColorGreen: mutateNumber(Number((_addon$vals$ColorGree = addon.vals.ColorGreen) !== null && _addon$vals$ColorGree !== void 0 ? _addon$vals$ColorGree : 0), 10, 255, 18),
ColorBlue: mutateNumber(Number((_addon$vals$ColorBlue = addon.vals.ColorBlue) !== null && _addon$vals$ColorBlue !== void 0 ? _addon$vals$ColorBlue : 0), 10, 255, 18)
}
});
}
if (addon.name === "Light") {
var _addon$vals$LightRead, _addon$vals$LightRead2, _addon$vals$LightRead3;
return _objectSpread(_objectSpread({}, addon), {}, {
vals: {
LightReading1: mutateNumber(Number((_addon$vals$LightRead = addon.vals.LightReading1) !== null && _addon$vals$LightRead !== void 0 ? _addon$vals$LightRead : 0), 0, 255, 15),
LightReading2: mutateNumber(Number((_addon$vals$LightRead2 = addon.vals.LightReading2) !== null && _addon$vals$LightRead2 !== void 0 ? _addon$vals$LightRead2 : 0), 0, 255, 15),
LightReading3: mutateNumber(Number((_addon$vals$LightRead3 = addon.vals.LightReading3) !== null && _addon$vals$LightRead3 !== void 0 ? _addon$vals$LightRead3 : 0), 0, 255, 15)
}
});
}
return addon;
}
mutateServo(servo) {
return _objectSpread(_objectSpread({}, servo), {}, {
pos: mutateNumber(servo.pos, -90, 90, 6),
current: mutateNumber(servo.current, 150, 700, 40)
});
}
mutateAccel(accel) {
return {
x: mutateNumber(accel.x, -1.2, 1.2, 0.08),
y: mutateNumber(accel.y, -1.2, 1.2, 0.08),
z: mutateNumber(accel.z, 0.7, 1.2, 0.05)
};
}
}
exports.MockMartyInterface = MockMartyInterface;
var _default = exports.default = MockMartyInterface;