Spaces:
Running
Running
Update
Browse files
README.md
CHANGED
|
@@ -15,7 +15,7 @@ app_port: 8000
|
|
| 15 |
pinned: true
|
| 16 |
license: mit
|
| 17 |
fullWidth: true
|
| 18 |
-
short_description: Web interface of the RobotHub platform
|
| 19 |
---
|
| 20 |
|
| 21 |
# π€ RobotHub Arena β Frontend
|
|
|
|
| 15 |
pinned: true
|
| 16 |
license: mit
|
| 17 |
fullWidth: true
|
| 18 |
+
short_description: Web interface of the RobotHub platform
|
| 19 |
---
|
| 20 |
|
| 21 |
# π€ RobotHub Arena β Frontend
|
bun.lock
CHANGED
|
@@ -6,6 +6,7 @@
|
|
| 6 |
"dependencies": {
|
| 7 |
"@robothub/inference-server-client": "file:./external/RobotHub-InferenceServer/client",
|
| 8 |
"@robothub/transport-server-client": "file:./external/RobotHub-InferenceServer/external/RobotHub-TransportServer/client/js",
|
|
|
|
| 9 |
"@threlte/core": "^8.0.4",
|
| 10 |
"@threlte/extras": "^9.2.1",
|
| 11 |
"@types/three": "0.177.0",
|
|
@@ -255,6 +256,8 @@
|
|
| 255 |
|
| 256 |
"@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.44.0", "", { "os": "win32", "cpu": "x64" }, "sha512-Q2Mgwt+D8hd5FIPUuPDsvPR7Bguza6yTkJxspDGkZj7tBRn2y4KSWYuIXpftFSjBra76TbKerCV7rgFPQrn+wQ=="],
|
| 257 |
|
|
|
|
|
|
|
| 258 |
"@sveltejs/acorn-typescript": ["@sveltejs/acorn-typescript@1.0.5", "", { "peerDependencies": { "acorn": "^8.9.0" } }, "sha512-IwQk4yfwLdibDlrXVE04jTZYlLnwsTT2PIOQQGNLWfjavGifnk1JD1LcZjZaBTRcxZu2FfPfNLOE04DSu9lqtQ=="],
|
| 259 |
|
| 260 |
"@sveltejs/adapter-auto": ["@sveltejs/adapter-auto@6.0.1", "", { "peerDependencies": { "@sveltejs/kit": "^2.0.0" } }, "sha512-mcWud3pYGPWM2Pphdj8G9Qiq24nZ8L4LB7coCUckUEy5Y7wOWGJ/enaZ4AtJTcSm5dNK1rIkBRoqt+ae4zlxcQ=="],
|
|
|
|
| 6 |
"dependencies": {
|
| 7 |
"@robothub/inference-server-client": "file:./external/RobotHub-InferenceServer/client",
|
| 8 |
"@robothub/transport-server-client": "file:./external/RobotHub-InferenceServer/external/RobotHub-TransportServer/client/js",
|
| 9 |
+
"@sparkjsdev/spark": "^0.1.4",
|
| 10 |
"@threlte/core": "^8.0.4",
|
| 11 |
"@threlte/extras": "^9.2.1",
|
| 12 |
"@types/three": "0.177.0",
|
|
|
|
| 256 |
|
| 257 |
"@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.44.0", "", { "os": "win32", "cpu": "x64" }, "sha512-Q2Mgwt+D8hd5FIPUuPDsvPR7Bguza6yTkJxspDGkZj7tBRn2y4KSWYuIXpftFSjBra76TbKerCV7rgFPQrn+wQ=="],
|
| 258 |
|
| 259 |
+
"@sparkjsdev/spark": ["@sparkjsdev/spark@0.1.4", "", { "dependencies": { "fflate": "^0.8.2" } }, "sha512-VbrZFx96mOEYEhdPoeG39lSc1axRULJNqBH1gRqOjGKo1UcG3yVpva6+jJt2Aat3V4kwH8TwdGvlQypzABrxhg=="],
|
| 260 |
+
|
| 261 |
"@sveltejs/acorn-typescript": ["@sveltejs/acorn-typescript@1.0.5", "", { "peerDependencies": { "acorn": "^8.9.0" } }, "sha512-IwQk4yfwLdibDlrXVE04jTZYlLnwsTT2PIOQQGNLWfjavGifnk1JD1LcZjZaBTRcxZu2FfPfNLOE04DSu9lqtQ=="],
|
| 262 |
|
| 263 |
"@sveltejs/adapter-auto": ["@sveltejs/adapter-auto@6.0.1", "", { "peerDependencies": { "@sveltejs/kit": "^2.0.0" } }, "sha512-mcWud3pYGPWM2Pphdj8G9Qiq24nZ8L4LB7coCUckUEy5Y7wOWGJ/enaZ4AtJTcSm5dNK1rIkBRoqt+ae4zlxcQ=="],
|
package.json
CHANGED
|
@@ -48,13 +48,14 @@
|
|
| 48 |
"vite": "^6.3.5"
|
| 49 |
},
|
| 50 |
"dependencies": {
|
|
|
|
|
|
|
|
|
|
| 51 |
"@threlte/core": "^8.0.4",
|
| 52 |
"@threlte/extras": "^9.2.1",
|
| 53 |
"@types/three": "0.177.0",
|
| 54 |
"clsx": "^2.1.1",
|
| 55 |
"feetech.js": "file:./packages/feetech.js",
|
| 56 |
-
"@robothub/transport-server-client": "file:./external/RobotHub-InferenceServer/external/RobotHub-TransportServer/client/js",
|
| 57 |
-
"@robothub/inference-server-client": "file:./external/RobotHub-InferenceServer/client",
|
| 58 |
"tailwind-merge": "^3.3.0",
|
| 59 |
"three": "^0.177.0",
|
| 60 |
"threlte-uikit": "^1.1.0",
|
|
|
|
| 48 |
"vite": "^6.3.5"
|
| 49 |
},
|
| 50 |
"dependencies": {
|
| 51 |
+
"@robothub/inference-server-client": "file:./external/RobotHub-InferenceServer/client",
|
| 52 |
+
"@robothub/transport-server-client": "file:./external/RobotHub-InferenceServer/external/RobotHub-TransportServer/client/js",
|
| 53 |
+
"@sparkjsdev/spark": "^0.1.4",
|
| 54 |
"@threlte/core": "^8.0.4",
|
| 55 |
"@threlte/extras": "^9.2.1",
|
| 56 |
"@types/three": "0.177.0",
|
| 57 |
"clsx": "^2.1.1",
|
| 58 |
"feetech.js": "file:./packages/feetech.js",
|
|
|
|
|
|
|
| 59 |
"tailwind-merge": "^3.3.0",
|
| 60 |
"three": "^0.177.0",
|
| 61 |
"threlte-uikit": "^1.1.0",
|
packages/feetech.js/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
| 1 |
{
|
| 2 |
"name": "feetech.js",
|
| 3 |
-
"version": "0.0.
|
| 4 |
"description": "javascript sdk for feetech servos",
|
| 5 |
"main": "index.mjs",
|
| 6 |
"files": [
|
|
|
|
| 1 |
{
|
| 2 |
"name": "feetech.js",
|
| 3 |
+
"version": "0.0.11",
|
| 4 |
"description": "javascript sdk for feetech servos",
|
| 5 |
"main": "index.mjs",
|
| 6 |
"files": [
|
src/lib/components/3d/elements/robot/URDF/primitives/UrdfLink.svelte
CHANGED
|
@@ -8,7 +8,7 @@
|
|
| 8 |
import UrdfJoint from "./UrdfJoint.svelte";
|
| 9 |
import type IUrdfRobot from "../interfaces/IUrdfRobot";
|
| 10 |
import { T } from "@threlte/core";
|
| 11 |
-
|
| 12 |
|
| 13 |
interface Props {
|
| 14 |
robot: IUrdfRobot;
|
|
@@ -104,14 +104,14 @@
|
|
| 104 |
<T.BoxGeometry />
|
| 105 |
<T.MeshBasicMaterial color="red" />
|
| 106 |
</T.Mesh>
|
| 107 |
-
|
| 108 |
cameraPositionX={joint.origin_xyz[0]}
|
| 109 |
cameraPositionY={joint.origin_xyz[1]}
|
| 110 |
cameraPositionZ={joint.origin_xyz[2]}
|
| 111 |
cameraRotationX={joint.origin_rpy[0]}
|
| 112 |
cameraRotationY={joint.origin_rpy[1]}
|
| 113 |
cameraRotationZ={joint.origin_rpy[2]}
|
| 114 |
-
/>
|
| 115 |
</T.Group>
|
| 116 |
</T.Group>
|
| 117 |
{/if}
|
|
|
|
| 8 |
import UrdfJoint from "./UrdfJoint.svelte";
|
| 9 |
import type IUrdfRobot from "../interfaces/IUrdfRobot";
|
| 10 |
import { T } from "@threlte/core";
|
| 11 |
+
import Pointcloud from "@/components/3d/misc/Pointcloud.svelte";
|
| 12 |
|
| 13 |
interface Props {
|
| 14 |
robot: IUrdfRobot;
|
|
|
|
| 104 |
<T.BoxGeometry />
|
| 105 |
<T.MeshBasicMaterial color="red" />
|
| 106 |
</T.Mesh>
|
| 107 |
+
<Pointcloud
|
| 108 |
cameraPositionX={joint.origin_xyz[0]}
|
| 109 |
cameraPositionY={joint.origin_xyz[1]}
|
| 110 |
cameraPositionZ={joint.origin_xyz[2]}
|
| 111 |
cameraRotationX={joint.origin_rpy[0]}
|
| 112 |
cameraRotationY={joint.origin_rpy[1]}
|
| 113 |
cameraRotationZ={joint.origin_rpy[2]}
|
| 114 |
+
/>
|
| 115 |
</T.Group>
|
| 116 |
</T.Group>
|
| 117 |
{/if}
|
src/lib/elements/video/VideoManager.svelte.ts
CHANGED
|
@@ -36,9 +36,6 @@ export class VideoInstance implements Positionable {
|
|
| 36 |
active: false,
|
| 37 |
client: null as videoTypes.VideoProducer | null,
|
| 38 |
roomId: null as string | null,
|
| 39 |
-
// New properties for UI state
|
| 40 |
-
type: null as 'recording' | 'remote' | null,
|
| 41 |
-
stream: null as MediaStream | null,
|
| 42 |
});
|
| 43 |
|
| 44 |
// Position (reactive and bindable)
|
|
@@ -275,8 +272,6 @@ export class VideoManager {
|
|
| 275 |
video.output.active = true;
|
| 276 |
video.output.client = producer;
|
| 277 |
video.output.roomId = roomId;
|
| 278 |
-
video.output.type = 'remote';
|
| 279 |
-
video.output.stream = video.input.stream;
|
| 280 |
|
| 281 |
console.log(`Video output started to room ${roomId} for video ${videoId}`);
|
| 282 |
return { success: true };
|
|
@@ -535,8 +530,6 @@ export class VideoManager {
|
|
| 535 |
video.output.active = true;
|
| 536 |
video.output.client = producer;
|
| 537 |
video.output.roomId = result.roomId;
|
| 538 |
-
video.output.type = 'remote';
|
| 539 |
-
video.output.stream = video.input.stream;
|
| 540 |
|
| 541 |
// Refresh room list
|
| 542 |
await this.listRooms(workspaceId);
|
|
@@ -561,8 +554,6 @@ export class VideoManager {
|
|
| 561 |
video.output.active = false;
|
| 562 |
video.output.client = null;
|
| 563 |
video.output.roomId = null;
|
| 564 |
-
video.output.type = null;
|
| 565 |
-
video.output.stream = null;
|
| 566 |
|
| 567 |
console.log(`Output stopped for video ${videoId}`);
|
| 568 |
}
|
|
|
|
| 36 |
active: false,
|
| 37 |
client: null as videoTypes.VideoProducer | null,
|
| 38 |
roomId: null as string | null,
|
|
|
|
|
|
|
|
|
|
| 39 |
});
|
| 40 |
|
| 41 |
// Position (reactive and bindable)
|
|
|
|
| 272 |
video.output.active = true;
|
| 273 |
video.output.client = producer;
|
| 274 |
video.output.roomId = roomId;
|
|
|
|
|
|
|
| 275 |
|
| 276 |
console.log(`Video output started to room ${roomId} for video ${videoId}`);
|
| 277 |
return { success: true };
|
|
|
|
| 530 |
video.output.active = true;
|
| 531 |
video.output.client = producer;
|
| 532 |
video.output.roomId = result.roomId;
|
|
|
|
|
|
|
| 533 |
|
| 534 |
// Refresh room list
|
| 535 |
await this.listRooms(workspaceId);
|
|
|
|
| 554 |
video.output.active = false;
|
| 555 |
video.output.client = null;
|
| 556 |
video.output.roomId = null;
|
|
|
|
|
|
|
| 557 |
|
| 558 |
console.log(`Output stopped for video ${videoId}`);
|
| 559 |
}
|