diff --git a/app/src/lib/components/Visualization.svelte b/app/src/lib/components/Visualization.svelte index d252c7f..5d1a6f1 100644 --- a/app/src/lib/components/Visualization.svelte +++ b/app/src/lib/components/Visualization.svelte @@ -14,7 +14,7 @@ kinematicData, mode, model, - outControllerData, + input, servoAnglesOut, servoAngles, mpu, @@ -23,7 +23,7 @@ walkGait, walkGaitToMode } from '$lib/stores' - import { populateModelCache, throttler, getToeWorldPositions } from '$lib/utilities' + import { populateModelCache, getToeWorldPositions } from '$lib/utilities' import SceneBuilder from '$lib/sceneBuilder' import { lerp, degToRad } from 'three/src/math/MathUtils' import { GUI } from 'three/addons/libs/lil-gui.module.min.js' @@ -55,7 +55,6 @@ let currentModelAngles: number[] = new Array(12).fill(0) let modelTargetAngles: number[] = new Array(12).fill(0) let gui_panel: GUI - let Throttler = new throttler() let target: Object3D @@ -169,10 +168,7 @@ const updateAngles = (name: string, angle: number) => { modelTargetAngles[$jointNames.indexOf(name)] = angle * (180 / Math.PI) - Throttler.throttle( - () => servoAnglesOut.set(modelTargetAngles.map(num => Math.round(num))), - 100 - ) + servoAnglesOut.set(modelTargetAngles.map(num => Math.round(num))) } const createScene = async () => { @@ -275,15 +271,15 @@ const update_gait = () => { if (sceneManager.isDragging || !settings['Internal kinematic']) return - const controlData = get(outControllerData) + const controlData = get(input) const data = { - lx: controlData[0], - ly: controlData[1], - rx: controlData[2], - ry: controlData[3], - h: controlData[4], - s: controlData[5], - s1: controlData[6] + lx: controlData.left.x, + ly: controlData.left.y, + rx: controlData.right.x, + ry: controlData.right.y, + h: controlData.height, + s: controlData.speed, + s1: controlData.s1 } let planner = planners[get(mode)] diff --git a/app/src/lib/utilities/buffer-utilities.ts b/app/src/lib/utilities/buffer-utilities.ts index 039349d..8e8cef9 100644 --- a/app/src/lib/utilities/buffer-utilities.ts +++ b/app/src/lib/utilities/buffer-utilities.ts @@ -1,4 +1,4 @@ -export class throttler { +export class Throttler { private _throttlePause: boolean constructor() { this._throttlePause = false diff --git a/app/src/routes/+layout.svelte b/app/src/routes/+layout.svelte index efe2843..1525959 100644 --- a/app/src/routes/+layout.svelte +++ b/app/src/routes/+layout.svelte @@ -14,7 +14,7 @@ ModesEnum, kinematicData, mode, - outControllerData, + input, servoAngles, servoAnglesOut, socket, @@ -24,6 +24,7 @@ } from '$lib/stores' import { type Analytics, type DownloadOTA } from '$lib/types/models' import { MessageTopic } from '$lib/types/models' + import { Throttler } from '$lib/utilities' interface Props { children?: import('svelte').Snippet @@ -32,6 +33,7 @@ let { children }: Props = $props() const features = useFeatureFlags() + const throttler = new Throttler() onMount(async () => { const ws = $apiLocation ? $apiLocation : window.location.host @@ -39,11 +41,20 @@ addEventListeners() - outControllerData.subscribe(data => socket.sendEvent(MessageTopic.input, data)) + input.subscribe(data => + socket.sendEvent( + MessageTopic.input, + throttler.throttle(() => Object.values(data), 40) + ) + ) mode.subscribe(data => socket.sendEvent(MessageTopic.mode, data)) walkGait.subscribe(data => socket.sendEvent(MessageTopic.gait, data)) - servoAnglesOut.subscribe(data => socket.sendEvent(MessageTopic.angles, data)) - kinematicData.subscribe(data => socket.sendEvent(MessageTopic.position, data)) + servoAnglesOut.subscribe(data => + throttler.throttle(() => socket.sendEvent(MessageTopic.angles, data), 100) + ) + kinematicData.subscribe(data => + throttler.throttle(() => socket.sendEvent(MessageTopic.position, data), 100) + ) }) onDestroy(() => { diff --git a/app/src/routes/controller/Controls.svelte b/app/src/routes/controller/Controls.svelte index 19a651b..4f6f6af 100644 --- a/app/src/routes/controller/Controls.svelte +++ b/app/src/routes/controller/Controls.svelte @@ -1,10 +1,9 @@