diff --git a/.vscode/settings.json b/.vscode/settings.json index ecde64b..55f764b 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -4,4 +4,11 @@ }, "editor.tabSize": 4, "editor.detectIndentation": false, + "cmake.sourceDirectory": "C:/data/repos/Hardware/Spot Micro - Leika/.pio/libdeps/esp32cam/esp32-camera", + "cSpell.words": [ + "lerp", + "URDF", + "uzip", + "xacro" + ] } \ No newline at end of file diff --git a/app/public/spot_micro.urdf.xacro b/app/public/spot_micro.urdf.xacro new file mode 100644 index 0000000..7d997bf --- /dev/null +++ b/app/public/spot_micro.urdf.xacro @@ -0,0 +1,310 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/public/stl.zip b/app/public/stl.zip new file mode 100644 index 0000000..3c70004 Binary files /dev/null and b/app/public/stl.zip differ diff --git a/app/src/App.svelte b/app/src/App.svelte index e199c74..34de4a2 100644 --- a/app/src/App.svelte +++ b/app/src/App.svelte @@ -12,13 +12,23 @@ export let url = window.location.pathname; onMount(() => { connect(`ws://${location}`); + registerFetchIntercept() }); + + const registerFetchIntercept = () => { + const { fetch: originalFetch } = window; + window.fetch = async (...args) => { + const cache = await caches.open("files") + const [resource, config] = args; + return await cache.match(resource) ?? originalFetch(resource, config) + }; + } -
+
diff --git a/app/src/components/Model/ModelView.svelte b/app/src/components/Model/ModelView.svelte new file mode 100644 index 0000000..7529321 --- /dev/null +++ b/app/src/components/Model/ModelView.svelte @@ -0,0 +1,136 @@ + + + + + \ No newline at end of file diff --git a/app/src/lib/socket.ts b/app/src/lib/socket.ts index dcc7a3d..25ba17c 100644 --- a/app/src/lib/socket.ts +++ b/app/src/lib/socket.ts @@ -4,7 +4,11 @@ export type WebSocketStatus = 'OPEN' | 'CONNECTING' | 'CLOSED' export const isConnected = writable(false) -export const data = writable(new Float32Array(13)) +export const dataBuffer = writable(new Float32Array(13)) + +export const servoBuffer = writable(new Int8Array(12)) + +export const data = writable(); export const status:Writable = writable('CLOSED') @@ -32,7 +36,7 @@ const _disconnected = () => { const _message = (event) => { if (event.data instanceof ArrayBuffer) { - let buffer = new Uint8Array(event.data); - data.set(new Float32Array(buffer.buffer)); - } + let buffer = new Int8Array(event.data); + servoBuffer.set(buffer); + } else dataBuffer.set(JSON.parse(event.data)); } \ No newline at end of file diff --git a/app/src/lib/utils.ts b/app/src/lib/utils.ts index 7aa0885..e845cc7 100644 --- a/app/src/lib/utils.ts +++ b/app/src/lib/utils.ts @@ -1,4 +1,8 @@ export const humanFileSize = (size:number):string => { var i = size == 0 ? 0 : Math.floor(Math.log(size) / Math.log(1024)); return Number((size / Math.pow(1024, i)).toFixed(2)) * 1 + ['B', 'kB', 'MB', 'GB', 'TB'][i]; -} \ No newline at end of file +} + +export const lerp = (start: number, end: number, amt: number) => { + return (1 - amt) * start + amt * end; +}; \ No newline at end of file diff --git a/app/src/routes/Controller.svelte b/app/src/routes/Controller.svelte index daff58d..cddb8db 100644 --- a/app/src/routes/Controller.svelte +++ b/app/src/routes/Controller.svelte @@ -1,9 +1,11 @@
+