@wandelbots/wandelbots-js-react-components 3.3.2 → 3.4.0-pr.feat-add-yaskawa-gp200s.438.0503e4b
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -61
- package/dist/auth0-spa-js.production.esm-1QXzndwB.js +950 -0
- package/dist/auth0-spa-js.production.esm-1QXzndwB.js.map +1 -0
- package/dist/auth0-spa-js.production.esm-BLRAk7Yh.cjs +5 -0
- package/dist/auth0-spa-js.production.esm-BLRAk7Yh.cjs.map +1 -0
- package/dist/components/3d-viewport/CoordinateSystemTransform.d.ts +1 -1
- package/dist/components/3d-viewport/CoordinateSystemTransform.d.ts.map +1 -1
- package/dist/components/3d-viewport/SafetyZonesRenderer.d.ts.map +1 -1
- package/dist/components/3d-viewport/collider/ColliderCollection.d.ts +1 -1
- package/dist/components/3d-viewport/collider/ColliderCollection.d.ts.map +1 -1
- package/dist/components/3d-viewport/collider/ColliderElement.d.ts +1 -1
- package/dist/components/3d-viewport/collider/ColliderElement.d.ts.map +1 -1
- package/dist/components/3d-viewport/collider/CollisionSceneRenderer.d.ts +1 -1
- package/dist/components/3d-viewport/collider/CollisionSceneRenderer.d.ts.map +1 -1
- package/dist/components/3d-viewport/collider/colliderShapeToBufferGeometry.d.ts +1 -1
- package/dist/components/3d-viewport/collider/colliderShapeToBufferGeometry.d.ts.map +1 -1
- package/dist/components/ProgramStateIndicator.d.ts +3 -3
- package/dist/components/ProgramStateIndicator.d.ts.map +1 -1
- package/dist/components/RobotCard.d.ts +3 -4
- package/dist/components/RobotCard.d.ts.map +1 -1
- package/dist/components/jogging/JoggingCartesianTab.d.ts.map +1 -1
- package/dist/components/jogging/JoggingOptions.d.ts.map +1 -1
- package/dist/components/jogging/JoggingPanel.d.ts +1 -1
- package/dist/components/jogging/JoggingPanel.d.ts.map +1 -1
- package/dist/components/jogging/JoggingStore.d.ts +5 -10
- package/dist/components/jogging/JoggingStore.d.ts.map +1 -1
- package/dist/components/jogging/PoseCartesianValues.d.ts +2 -2
- package/dist/components/jogging/PoseCartesianValues.d.ts.map +1 -1
- package/dist/components/jogging/PoseJointValues.d.ts +2 -1
- package/dist/components/jogging/PoseJointValues.d.ts.map +1 -1
- package/dist/components/robots/DHRobot.d.ts.map +1 -1
- package/dist/components/robots/Robot.d.ts +1 -1
- package/dist/components/robots/Robot.d.ts.map +1 -1
- package/dist/components/robots/RobotAnimator.d.ts +2 -2
- package/dist/components/robots/RobotAnimator.d.ts.map +1 -1
- package/dist/components/robots/SupportedRobot.d.ts +3 -3
- package/dist/components/robots/SupportedRobot.d.ts.map +1 -1
- package/dist/components/robots/manufacturerHomePositions.d.ts +1 -1
- package/dist/components/robots/manufacturerHomePositions.d.ts.map +1 -1
- package/dist/components/safetyBar/ControllerTypeIndicator.d.ts.map +1 -1
- package/dist/components/safetyBar/OperationModeIndicator.d.ts +2 -2
- package/dist/components/safetyBar/OperationModeIndicator.d.ts.map +1 -1
- package/dist/components/safetyBar/SafetyBar.d.ts +3 -3
- package/dist/components/safetyBar/SafetyBar.d.ts.map +1 -1
- package/dist/components/safetyBar/SafetyStateIndicator.d.ts +2 -2
- package/dist/components/safetyBar/SafetyStateIndicator.d.ts.map +1 -1
- package/dist/components/utils/errorHandling.d.ts.map +1 -1
- package/dist/index.cjs +155 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +39 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +34927 -0
- package/dist/index.js.map +1 -0
- package/package.json +12 -40
- package/src/components/3d-viewport/CoordinateSystemTransform.tsx +1 -1
- package/src/components/3d-viewport/SafetyZonesRenderer.tsx +2 -1
- package/src/components/3d-viewport/collider/ColliderCollection.tsx +1 -1
- package/src/components/3d-viewport/collider/ColliderElement.tsx +1 -1
- package/src/components/3d-viewport/collider/CollisionSceneRenderer.tsx +1 -1
- package/src/components/3d-viewport/collider/colliderShapeToBufferGeometry.ts +1 -1
- package/src/components/AppHeader.md +1 -1
- package/src/components/ProgramStateIndicator.tsx +6 -3
- package/src/components/RobotCard.tsx +7 -4
- package/src/components/jogging/JoggingCartesianTab.tsx +11 -13
- package/src/components/jogging/JoggingJointLimitDetector.tsx +2 -2
- package/src/components/jogging/JoggingJointTab.tsx +4 -4
- package/src/components/jogging/JoggingOptions.tsx +5 -6
- package/src/components/jogging/JoggingPanel.tsx +3 -6
- package/src/components/jogging/JoggingStore.ts +39 -66
- package/src/components/jogging/PoseCartesianValues.tsx +4 -3
- package/src/components/jogging/PoseJointValues.tsx +4 -3
- package/src/components/robots/DHRobot.tsx +3 -2
- package/src/components/robots/Robot.tsx +1 -1
- package/src/components/robots/RobotAnimator.test.tsx +22 -7
- package/src/components/robots/RobotAnimator.tsx +13 -8
- package/src/components/robots/SupportedRobot.tsx +6 -3
- package/src/components/robots/manufacturerHomePositions.ts +1 -1
- package/src/components/safetyBar/ControllerTypeIndicator.tsx +2 -4
- package/src/components/safetyBar/OperationModeIndicator.tsx +5 -7
- package/src/components/safetyBar/SafetyBar.tsx +6 -3
- package/src/components/safetyBar/SafetyStateIndicator.tsx +7 -9
- package/src/components/utils/errorHandling.ts +0 -4
- package/src/i18n/locales/de/translations.json +0 -3
- package/src/i18n/locales/en/translations.json +0 -3
- package/src/index.ts +43 -4
- package/dist/3d.cjs.js +0 -2
- package/dist/3d.cjs.js.map +0 -1
- package/dist/3d.d.ts +0 -11
- package/dist/3d.d.ts.map +0 -1
- package/dist/3d.es.js +0 -16
- package/dist/3d.es.js.map +0 -1
- package/dist/LoadingCover-Dr9hDTku.js +0 -87
- package/dist/LoadingCover-Dr9hDTku.js.map +0 -1
- package/dist/LoadingCover-r2yhJZF9.cjs +0 -2
- package/dist/LoadingCover-r2yhJZF9.cjs.map +0 -1
- package/dist/WandelscriptEditor-Dj7TBCkF.cjs +0 -2
- package/dist/WandelscriptEditor-Dj7TBCkF.cjs.map +0 -1
- package/dist/WandelscriptEditor-DnJvITTA.js +0 -140
- package/dist/WandelscriptEditor-DnJvITTA.js.map +0 -1
- package/dist/auth0-spa-js.production.esm-9WdmjTxR.js +0 -1429
- package/dist/auth0-spa-js.production.esm-9WdmjTxR.js.map +0 -1
- package/dist/auth0-spa-js.production.esm-BcLLh1tx.cjs +0 -5
- package/dist/auth0-spa-js.production.esm-BcLLh1tx.cjs.map +0 -1
- package/dist/components/jogging/JoggingBlocked.d.ts +0 -7
- package/dist/components/jogging/JoggingBlocked.d.ts.map +0 -1
- package/dist/components/utils/errorHandling.test.d.ts +0 -2
- package/dist/components/utils/errorHandling.test.d.ts.map +0 -1
- package/dist/core.cjs.js +0 -2
- package/dist/core.cjs.js.map +0 -1
- package/dist/core.d.ts +0 -33
- package/dist/core.d.ts.map +0 -1
- package/dist/core.es.js +0 -54
- package/dist/core.es.js.map +0 -1
- package/dist/index-CAib4NKw.js +0 -2261
- package/dist/index-CAib4NKw.js.map +0 -1
- package/dist/index-CqMZL0FV.cjs +0 -2
- package/dist/index-CqMZL0FV.cjs.map +0 -1
- package/dist/index-CxasuX80.js +0 -5212
- package/dist/index-CxasuX80.js.map +0 -1
- package/dist/index-DxwppshT.cjs +0 -29
- package/dist/index-DxwppshT.cjs.map +0 -1
- package/dist/index.cjs.js +0 -2
- package/dist/index.cjs.js.map +0 -1
- package/dist/index.es.js +0 -69
- package/dist/index.es.js.map +0 -1
- package/dist/lib/ConnectedMotionGroup.d.ts +0 -90
- package/dist/lib/ConnectedMotionGroup.d.ts.map +0 -1
- package/dist/lib/JoggerConnection.d.ts +0 -113
- package/dist/lib/JoggerConnection.d.ts.map +0 -1
- package/dist/lib/JoggerConnection.test.d.ts +0 -2
- package/dist/lib/JoggerConnection.test.d.ts.map +0 -1
- package/dist/lib/MotionStreamConnection.d.ts +0 -24
- package/dist/lib/MotionStreamConnection.d.ts.map +0 -1
- package/dist/lib/MotionStreamConnection.test.d.ts +0 -2
- package/dist/lib/MotionStreamConnection.test.d.ts.map +0 -1
- package/dist/lib/motionStateUpdate.d.ts +0 -7
- package/dist/lib/motionStateUpdate.d.ts.map +0 -1
- package/dist/lib/motionStateUpdate.test.d.ts +0 -2
- package/dist/lib/motionStateUpdate.test.d.ts.map +0 -1
- package/dist/manufacturerHomePositions-Ca80ycLi.cjs +0 -2
- package/dist/manufacturerHomePositions-Ca80ycLi.cjs.map +0 -1
- package/dist/manufacturerHomePositions-CgaG5vaK.js +0 -976
- package/dist/manufacturerHomePositions-CgaG5vaK.js.map +0 -1
- package/dist/theming-Bd0vaauc.js +0 -23460
- package/dist/theming-Bd0vaauc.js.map +0 -1
- package/dist/theming-j4s40Rk-.cjs +0 -133
- package/dist/theming-j4s40Rk-.cjs.map +0 -1
- package/dist/wandelscript.cjs.js +0 -2
- package/dist/wandelscript.cjs.js.map +0 -1
- package/dist/wandelscript.d.ts +0 -2
- package/dist/wandelscript.d.ts.map +0 -1
- package/dist/wandelscript.es.js +0 -5
- package/dist/wandelscript.es.js.map +0 -1
- package/src/3d.ts +0 -15
- package/src/components/jogging/JoggingBlocked.tsx +0 -37
- package/src/components/utils/errorHandling.test.ts +0 -41
- package/src/core.ts +0 -33
- package/src/lib/ConnectedMotionGroup.ts +0 -444
- package/src/lib/JoggerConnection.test.ts +0 -120
- package/src/lib/JoggerConnection.ts +0 -674
- package/src/lib/MotionStreamConnection.test.ts +0 -23
- package/src/lib/MotionStreamConnection.ts +0 -189
- package/src/lib/motionStateUpdate.test.ts +0 -28
- package/src/lib/motionStateUpdate.ts +0 -117
- package/src/wandelscript.ts +0 -2
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wandelbots/wandelbots-js-react-components",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.4.0-pr.feat-add-yaskawa-gp200s.438.0503e4b",
|
|
4
4
|
"description": "React UI toolkit for building applications on top of the Wandelbots platform",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -13,24 +13,8 @@
|
|
|
13
13
|
"main": "./dist/index.cjs",
|
|
14
14
|
"exports": {
|
|
15
15
|
".": {
|
|
16
|
-
"
|
|
17
|
-
"
|
|
18
|
-
"require": "./dist/index.cjs.js"
|
|
19
|
-
},
|
|
20
|
-
"./core": {
|
|
21
|
-
"types": "./dist/core.d.ts",
|
|
22
|
-
"import": "./dist/core.es.js",
|
|
23
|
-
"require": "./dist/core.cjs.js"
|
|
24
|
-
},
|
|
25
|
-
"./3d": {
|
|
26
|
-
"types": "./dist/3d.d.ts",
|
|
27
|
-
"import": "./dist/3d.es.js",
|
|
28
|
-
"require": "./dist/3d.cjs.js"
|
|
29
|
-
},
|
|
30
|
-
"./wandelscript": {
|
|
31
|
-
"types": "./dist/wandelscript.d.ts",
|
|
32
|
-
"import": "./dist/wandelscript.es.js",
|
|
33
|
-
"require": "./dist/wandelscript.cjs.js"
|
|
16
|
+
"import": "./dist/index.js",
|
|
17
|
+
"require": "./dist/index.cjs"
|
|
34
18
|
}
|
|
35
19
|
},
|
|
36
20
|
"types": "./dist/index.d.ts",
|
|
@@ -66,7 +50,6 @@
|
|
|
66
50
|
"devDependencies": {
|
|
67
51
|
"@emotion/react": "^11.14.0",
|
|
68
52
|
"@emotion/styled": "^11.14.0",
|
|
69
|
-
"@monaco-editor/react": "^4.7.0",
|
|
70
53
|
"@mui/icons-material": "^7.1.1",
|
|
71
54
|
"@mui/material": "^7.1.1",
|
|
72
55
|
"@react-three/drei": "^10.2.0",
|
|
@@ -76,9 +59,8 @@
|
|
|
76
59
|
"@rollup/plugin-node-resolve": "^16.0.0",
|
|
77
60
|
"@rollup/plugin-terser": "^0.4.4",
|
|
78
61
|
"@rollup/plugin-typescript": "^12.1.2",
|
|
79
|
-
"@
|
|
80
|
-
"@storybook/
|
|
81
|
-
"@storybook/react-vite": "^10.1.7",
|
|
62
|
+
"@storybook/addon-docs": "^10.0.1",
|
|
63
|
+
"@storybook/react-vite": "^10.0.1",
|
|
82
64
|
"@storybook/test-runner": "^0.24.1",
|
|
83
65
|
"@svgr/rollup": "^8.1.0",
|
|
84
66
|
"@testing-library/jest-dom": "^6.6.3",
|
|
@@ -88,9 +70,9 @@
|
|
|
88
70
|
"@types/react": "^19.1.8",
|
|
89
71
|
"@types/three": "^0.174.0",
|
|
90
72
|
"@vitejs/plugin-react": "^4.3.4",
|
|
91
|
-
"@wandelbots/nova-js": "
|
|
73
|
+
"@wandelbots/nova-js": "^2.1.0",
|
|
92
74
|
"add": "^2.0.6",
|
|
93
|
-
"eslint-plugin-storybook": "^10.1
|
|
75
|
+
"eslint-plugin-storybook": "^10.0.1",
|
|
94
76
|
"glob": "^11.0.1",
|
|
95
77
|
"http-server": "^14.1.1",
|
|
96
78
|
"husky": "^9.1.7",
|
|
@@ -113,8 +95,7 @@
|
|
|
113
95
|
"rollup-plugin-peer-deps-external": "^2.2.4",
|
|
114
96
|
"rollup-plugin-postcss": "^4.0.2",
|
|
115
97
|
"semantic-release": "^24.2.3",
|
|
116
|
-
"
|
|
117
|
-
"storybook": "^10.1.7",
|
|
98
|
+
"storybook": "^10.0.1",
|
|
118
99
|
"storybook-preset-inline-svg": "^1.0.1",
|
|
119
100
|
"three": "^0.174.0",
|
|
120
101
|
"three-stdlib": "^2.35.14",
|
|
@@ -129,15 +110,12 @@
|
|
|
129
110
|
"peerDependencies": {
|
|
130
111
|
"@emotion/react": "^11.11.1",
|
|
131
112
|
"@emotion/styled": "^11.11.0",
|
|
132
|
-
"@monaco-editor/react": "^4.7.0",
|
|
133
113
|
"@mui/icons-material": "^6 || ^7",
|
|
134
114
|
"@mui/material": "^6 || ^7",
|
|
135
115
|
"@react-three/drei": "^9.122.0 || ^10",
|
|
136
116
|
"@react-three/fiber": "^8 || ^9",
|
|
137
|
-
"@shikijs/monaco": "^3.1.0",
|
|
138
117
|
"react": "^18.0.0 || ^19.0.0",
|
|
139
118
|
"react-dom": "^18.0.0 || ^19.0.0",
|
|
140
|
-
"shiki": "^3.1.0",
|
|
141
119
|
"three": ">=0.174",
|
|
142
120
|
"three-stdlib": ">=2"
|
|
143
121
|
},
|
|
@@ -145,15 +123,6 @@
|
|
|
145
123
|
"react-dom": {
|
|
146
124
|
"optional": true
|
|
147
125
|
},
|
|
148
|
-
"@monaco-editor/react": {
|
|
149
|
-
"optional": true
|
|
150
|
-
},
|
|
151
|
-
"@shikijs/monaco": {
|
|
152
|
-
"optional": true
|
|
153
|
-
},
|
|
154
|
-
"shiki": {
|
|
155
|
-
"optional": true
|
|
156
|
-
},
|
|
157
126
|
"@react-three/drei": {
|
|
158
127
|
"optional": true
|
|
159
128
|
},
|
|
@@ -168,14 +137,17 @@
|
|
|
168
137
|
}
|
|
169
138
|
},
|
|
170
139
|
"dependencies": {
|
|
140
|
+
"@monaco-editor/react": "^4.7.0",
|
|
171
141
|
"@mui/x-charts": "^8.9.0",
|
|
172
142
|
"@mui/x-data-grid": "^8.10.1",
|
|
143
|
+
"@shikijs/monaco": "^3.1.0",
|
|
173
144
|
"i18next-browser-languagedetector": "^8.0.4",
|
|
174
145
|
"lodash-es": "^4.17.21",
|
|
175
146
|
"mobx": "^6.13.6",
|
|
176
147
|
"mobx-react-lite": "^4.1.0",
|
|
177
148
|
"react-error-boundary": "^6.0.0",
|
|
178
|
-
"react-i18next": "^15.5.2"
|
|
149
|
+
"react-i18next": "^15.5.2",
|
|
150
|
+
"shiki": "^3.1.0"
|
|
179
151
|
},
|
|
180
152
|
"overrides": {
|
|
181
153
|
"storybook": "$storybook"
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type ThreeElements } from "@react-three/fiber"
|
|
2
|
-
import type { Geometry
|
|
2
|
+
import type { Geometry } from "@wandelbots/nova-api/v1"
|
|
3
|
+
import type { SafetySetupSafetyZone } from "@wandelbots/nova-js/v1"
|
|
3
4
|
import * as THREE from "three"
|
|
4
5
|
import { ConvexGeometry } from "three-stdlib"
|
|
5
6
|
|
|
@@ -16,7 +16,7 @@ A navigation header component that displays the current application's icon and n
|
|
|
16
16
|
import {
|
|
17
17
|
AppHeader,
|
|
18
18
|
type AppItem,
|
|
19
|
-
} from "@wandelbots/wandelbots-js-react-components
|
|
19
|
+
} from "@wandelbots/wandelbots-js-react-components"
|
|
20
20
|
import { Home, Settings, Person } from "@mui/icons-material"
|
|
21
21
|
|
|
22
22
|
const apps: AppItem[] = [
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { Chip, Typography, useTheme } from "@mui/material"
|
|
2
|
-
import type {
|
|
2
|
+
import type {
|
|
3
|
+
RobotControllerStateOperationModeEnum,
|
|
4
|
+
RobotControllerStateSafetyStateEnum,
|
|
5
|
+
} from "@wandelbots/nova-js/v1"
|
|
3
6
|
import { observer } from "mobx-react-lite"
|
|
4
7
|
import { useTranslation } from "react-i18next"
|
|
5
8
|
import { externalizeComponent } from "../externalizeComponent"
|
|
@@ -9,9 +12,9 @@ export interface ProgramStateIndicatorProps {
|
|
|
9
12
|
/** The current state of the program */
|
|
10
13
|
programState: ProgramState
|
|
11
14
|
/** The current safety state of the robot controller */
|
|
12
|
-
safetyState:
|
|
15
|
+
safetyState: RobotControllerStateSafetyStateEnum
|
|
13
16
|
/** The current operation mode of the robot controller */
|
|
14
|
-
operationMode:
|
|
17
|
+
operationMode: RobotControllerStateOperationModeEnum
|
|
15
18
|
/** Additional CSS class name */
|
|
16
19
|
className?: string
|
|
17
20
|
}
|
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
import { Box, Button, Card, Divider, Typography, useTheme } from "@mui/material"
|
|
2
2
|
import { Bounds } from "@react-three/drei"
|
|
3
3
|
import { Canvas } from "@react-three/fiber"
|
|
4
|
-
import type {
|
|
4
|
+
import type {
|
|
5
|
+
ConnectedMotionGroup,
|
|
6
|
+
RobotControllerStateOperationModeEnum,
|
|
7
|
+
RobotControllerStateSafetyStateEnum,
|
|
8
|
+
} from "@wandelbots/nova-js/v1"
|
|
5
9
|
import { observer } from "mobx-react-lite"
|
|
6
10
|
import { useCallback, useEffect, useRef, useState } from "react"
|
|
7
11
|
import { useTranslation } from "react-i18next"
|
|
8
12
|
import type { Group } from "three"
|
|
9
13
|
import { externalizeComponent } from "../externalizeComponent"
|
|
10
|
-
import type { ConnectedMotionGroup } from "../lib/ConnectedMotionGroup"
|
|
11
14
|
import { PresetEnvironment } from "./3d-viewport/PresetEnvironment"
|
|
12
15
|
import type { ProgramState } from "./ProgramControl"
|
|
13
16
|
import { ProgramStateIndicator } from "./ProgramStateIndicator"
|
|
@@ -19,9 +22,9 @@ export interface RobotCardProps {
|
|
|
19
22
|
/** Current program state */
|
|
20
23
|
programState: ProgramState
|
|
21
24
|
/** Current safety state of the robot controller */
|
|
22
|
-
safetyState:
|
|
25
|
+
safetyState: RobotControllerStateSafetyStateEnum
|
|
23
26
|
/** Current operation mode of the robot controller */
|
|
24
|
-
operationMode:
|
|
27
|
+
operationMode: RobotControllerStateOperationModeEnum
|
|
25
28
|
/** Whether the "Drive to Home" button should be enabled */
|
|
26
29
|
driveToHomeEnabled?: boolean
|
|
27
30
|
/** Callback fired when "Drive to Home" button is pressed */
|
|
@@ -6,18 +6,13 @@ import {
|
|
|
6
6
|
useTheme,
|
|
7
7
|
type Theme,
|
|
8
8
|
} from "@mui/material"
|
|
9
|
-
import {
|
|
10
|
-
degreesToRadians,
|
|
11
|
-
radiansToDegrees,
|
|
12
|
-
XYZ_TO_VECTOR,
|
|
13
|
-
} from "@wandelbots/nova-js"
|
|
9
|
+
import { degreesToRadians, radiansToDegrees } from "@wandelbots/nova-js"
|
|
14
10
|
import { observer } from "mobx-react-lite"
|
|
15
11
|
import { useTranslation } from "react-i18next"
|
|
16
12
|
import XAxisIcon from "../../icons/axis-x.svg"
|
|
17
13
|
import YAxisIcon from "../../icons/axis-y.svg"
|
|
18
14
|
import ZAxisIcon from "../../icons/axis-z.svg"
|
|
19
15
|
import RotationIcon from "../../icons/rotation.svg"
|
|
20
|
-
import type { Vector3Simple } from "../../lib/JoggerConnection"
|
|
21
16
|
import { useReaction } from "../utils/hooks"
|
|
22
17
|
import { JoggingCartesianAxisControl } from "./JoggingCartesianAxisControl"
|
|
23
18
|
import { JoggingJointLimitDetector } from "./JoggingJointLimitDetector"
|
|
@@ -61,7 +56,7 @@ export const JoggingCartesianTab = observer(
|
|
|
61
56
|
() => {
|
|
62
57
|
store.jogger.motionStream.motionStateSocket.changeUrl(
|
|
63
58
|
store.jogger.nova.makeWebsocketURL(
|
|
64
|
-
`/
|
|
59
|
+
`/motion-groups/${store.jogger.motionGroupId}/state-stream?tcp=${store.selectedTcpId}&response_coordinate_system=${store.selectedCoordSystemId}`,
|
|
65
60
|
),
|
|
66
61
|
)
|
|
67
62
|
},
|
|
@@ -75,8 +70,8 @@ export const JoggingCartesianTab = observer(
|
|
|
75
70
|
const jogger = await store.activate()
|
|
76
71
|
|
|
77
72
|
const tcpPose = jogger.motionStream.rapidlyChangingMotionState.tcp_pose
|
|
78
|
-
const jointPosition =
|
|
79
|
-
.joint_position
|
|
73
|
+
const jointPosition =
|
|
74
|
+
jogger.motionStream.rapidlyChangingMotionState.state.joint_position
|
|
80
75
|
if (!tcpPose) return
|
|
81
76
|
|
|
82
77
|
await store.withMotionLock(async () => {
|
|
@@ -122,13 +117,13 @@ export const JoggingCartesianTab = observer(
|
|
|
122
117
|
}
|
|
123
118
|
|
|
124
119
|
if (opts.motionType === "translate") {
|
|
125
|
-
await store.jogger.
|
|
120
|
+
await store.jogger.startTCPTranslation({
|
|
126
121
|
axis: opts.axis,
|
|
127
122
|
direction: opts.direction,
|
|
128
123
|
velocityMmPerSec: store.translationVelocityMmPerSec,
|
|
129
124
|
})
|
|
130
125
|
} else {
|
|
131
|
-
await store.jogger.
|
|
126
|
+
await store.jogger.startTCPRotation({
|
|
132
127
|
axis: opts.axis,
|
|
133
128
|
direction: opts.direction,
|
|
134
129
|
velocityRadsPerSec: store.rotationVelocityRadsPerSec,
|
|
@@ -194,7 +189,10 @@ export const JoggingCartesianTab = observer(
|
|
|
194
189
|
return (
|
|
195
190
|
<Stack flexGrow={1} gap={2} sx={{ padding: "18px 24px" }}>
|
|
196
191
|
<Stack gap={2}>
|
|
192
|
+
{/* Jogging options */}
|
|
197
193
|
<JoggingOptions store={store} />
|
|
194
|
+
|
|
195
|
+
{/* Velocity slider */}
|
|
198
196
|
<JoggingVelocitySlider store={store} />
|
|
199
197
|
<Divider />
|
|
200
198
|
</Stack>
|
|
@@ -259,7 +257,7 @@ export const JoggingCartesianTab = observer(
|
|
|
259
257
|
getDisplayedValue={() =>
|
|
260
258
|
formatMM(
|
|
261
259
|
store.jogger.motionStream.rapidlyChangingMotionState
|
|
262
|
-
.tcp_pose?.position
|
|
260
|
+
.tcp_pose?.position[axis.id] || 0,
|
|
263
261
|
)
|
|
264
262
|
}
|
|
265
263
|
startJogging={(direction: "-" | "+") =>
|
|
@@ -303,7 +301,7 @@ export const JoggingCartesianTab = observer(
|
|
|
303
301
|
getDisplayedValue={() =>
|
|
304
302
|
formatDegrees(
|
|
305
303
|
store.jogger.motionStream.rapidlyChangingMotionState
|
|
306
|
-
.tcp_pose?.orientation?.[
|
|
304
|
+
.tcp_pose?.orientation?.[axis.id] || 0,
|
|
307
305
|
)
|
|
308
306
|
}
|
|
309
307
|
startJogging={(direction: "-" | "+") =>
|
|
@@ -17,14 +17,14 @@ export const JoggingJointLimitDetector = ({
|
|
|
17
17
|
const { t } = useTranslation()
|
|
18
18
|
|
|
19
19
|
const [jointLimitsReached, setJointLimitsReached] = useState(
|
|
20
|
-
store.jogger.motionStream.rapidlyChangingMotionState
|
|
20
|
+
store.jogger.motionStream.rapidlyChangingMotionState.state
|
|
21
21
|
.joint_limit_reached.limit_reached,
|
|
22
22
|
)
|
|
23
23
|
const jointLimitsReachedRef = useRef(jointLimitsReached)
|
|
24
24
|
|
|
25
25
|
useAnimationFrame(() => {
|
|
26
26
|
const newLimitsReached =
|
|
27
|
-
store.jogger.motionStream.rapidlyChangingMotionState
|
|
27
|
+
store.jogger.motionStream.rapidlyChangingMotionState.state
|
|
28
28
|
.joint_limit_reached.limit_reached
|
|
29
29
|
|
|
30
30
|
if (!isEqual(jointLimitsReachedRef.current, newLimitsReached)) {
|
|
@@ -16,7 +16,7 @@ export const JoggingJointTab = observer(
|
|
|
16
16
|
}) {
|
|
17
17
|
await store.activate()
|
|
18
18
|
|
|
19
|
-
await store.jogger.
|
|
19
|
+
await store.jogger.startJointRotation({
|
|
20
20
|
joint: opts.joint,
|
|
21
21
|
direction: opts.direction,
|
|
22
22
|
velocityRadsPerSec: store.rotationVelocityRadsPerSec,
|
|
@@ -37,12 +37,12 @@ export const JoggingJointTab = observer(
|
|
|
37
37
|
justifyContent="center"
|
|
38
38
|
alignItems="stretch"
|
|
39
39
|
sx={{ flexGrow: "1" }}
|
|
40
|
+
id="JointControls"
|
|
40
41
|
>
|
|
41
42
|
<Stack alignItems="center" gap="24px">
|
|
42
43
|
{store.jogger.motionStream.joints.map((joint) => {
|
|
43
44
|
const jointLimits =
|
|
44
|
-
store.
|
|
45
|
-
?.joints?.[joint.index]?.position
|
|
45
|
+
store.motionGroupSpec.mechanical_joint_limits?.[joint.index]
|
|
46
46
|
const lowerLimitDegs =
|
|
47
47
|
jointLimits?.lower_limit !== undefined
|
|
48
48
|
? radiansToDegrees(jointLimits.lower_limit)
|
|
@@ -80,7 +80,7 @@ export const JoggingJointTab = observer(
|
|
|
80
80
|
getValueDegs={() => {
|
|
81
81
|
const value =
|
|
82
82
|
store.jogger.motionStream.rapidlyChangingMotionState
|
|
83
|
-
.joint_position[joint.index]
|
|
83
|
+
.state.joint_position.joints[joint.index]
|
|
84
84
|
return value !== undefined
|
|
85
85
|
? radiansToDegrees(value)
|
|
86
86
|
: undefined
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { Box, MenuItem } from "@mui/material"
|
|
2
2
|
import { observer } from "mobx-react-lite"
|
|
3
|
-
import { useId } from "react"
|
|
4
3
|
import { useTranslation } from "react-i18next"
|
|
5
4
|
import AdornedSelect from "../experimental/utils/AdornedSelect"
|
|
6
5
|
import {
|
|
@@ -12,7 +11,6 @@ import {
|
|
|
12
11
|
|
|
13
12
|
export const JoggingOptions = observer(({ store }: { store: JoggingStore }) => {
|
|
14
13
|
const { t } = useTranslation()
|
|
15
|
-
const componentId = useId()
|
|
16
14
|
const joggingOptions: React.ReactElement[] = []
|
|
17
15
|
|
|
18
16
|
function translateOrientation(orientation: OrientationId): string {
|
|
@@ -30,7 +28,7 @@ export const JoggingOptions = observer(({ store }: { store: JoggingStore }) => {
|
|
|
30
28
|
joggingOptions.push(
|
|
31
29
|
<AdornedSelect
|
|
32
30
|
key="coord"
|
|
33
|
-
labelId=
|
|
31
|
+
labelId="jogging-coord-select"
|
|
34
32
|
labelValue={t("Jogging.CoordinateSystem.hlb")}
|
|
35
33
|
value={store.selectedCoordSystemId}
|
|
36
34
|
size="small"
|
|
@@ -56,7 +54,7 @@ export const JoggingOptions = observer(({ store }: { store: JoggingStore }) => {
|
|
|
56
54
|
joggingOptions.push(
|
|
57
55
|
<AdornedSelect
|
|
58
56
|
key="tcp"
|
|
59
|
-
labelId=
|
|
57
|
+
labelId="jogging-tcp-select"
|
|
60
58
|
labelValue="TCP"
|
|
61
59
|
value={store.selectedTcpId}
|
|
62
60
|
size="small"
|
|
@@ -80,7 +78,8 @@ export const JoggingOptions = observer(({ store }: { store: JoggingStore }) => {
|
|
|
80
78
|
<AdornedSelect
|
|
81
79
|
key="orientation"
|
|
82
80
|
labelValue={t("Jogging.Cartesian.Orientation.lb")}
|
|
83
|
-
|
|
81
|
+
id="orientation-select"
|
|
82
|
+
labelId="orientation-select"
|
|
84
83
|
value={store.selectedOrientation}
|
|
85
84
|
onChange={(event) =>
|
|
86
85
|
store.setSelectedOrientation(event.target.value as OrientationId)
|
|
@@ -101,7 +100,7 @@ export const JoggingOptions = observer(({ store }: { store: JoggingStore }) => {
|
|
|
101
100
|
<AdornedSelect
|
|
102
101
|
key="increment"
|
|
103
102
|
labelValue={t("Jogging.Increment.hlb")}
|
|
104
|
-
labelId=
|
|
103
|
+
labelId="jogging-increment-select"
|
|
105
104
|
size="small"
|
|
106
105
|
variant="filled"
|
|
107
106
|
value={store.activeDiscreteIncrement?.id || "continuous"}
|
|
@@ -1,16 +1,14 @@
|
|
|
1
1
|
import MoveIcon from "@mui/icons-material/OpenWith"
|
|
2
2
|
import ShareIcon from "@mui/icons-material/Share"
|
|
3
3
|
import { Stack, Tab, Tabs, type SxProps } from "@mui/material"
|
|
4
|
-
import { NovaClient } from "@wandelbots/nova-js/
|
|
4
|
+
import { NovaClient } from "@wandelbots/nova-js/v1"
|
|
5
5
|
import { isString } from "lodash-es"
|
|
6
6
|
import { runInAction } from "mobx"
|
|
7
7
|
import { observer, useLocalObservable } from "mobx-react-lite"
|
|
8
8
|
import { useEffect } from "react"
|
|
9
9
|
import { useTranslation } from "react-i18next"
|
|
10
10
|
import { externalizeComponent } from "../../externalizeComponent"
|
|
11
|
-
import { JoggerConnection } from "../../lib/JoggerConnection"
|
|
12
11
|
import { LoadingCover } from "../LoadingCover"
|
|
13
|
-
import { JoggingBlocked } from "./JoggingBlocked"
|
|
14
12
|
import { JoggingCartesianTab } from "./JoggingCartesianTab"
|
|
15
13
|
import { JoggingJointTab } from "./JoggingJointTab"
|
|
16
14
|
import { JoggingStore } from "./JoggingStore"
|
|
@@ -60,7 +58,7 @@ export const JoggingPanel = externalizeComponent(
|
|
|
60
58
|
try {
|
|
61
59
|
let joggingStore = props.store
|
|
62
60
|
if (!joggingStore) {
|
|
63
|
-
const jogger = await
|
|
61
|
+
const jogger = await nova.connectJogger(props.motionGroupId)
|
|
64
62
|
joggingStore = await JoggingStore.loadFor(jogger)
|
|
65
63
|
}
|
|
66
64
|
runInAction(() => {
|
|
@@ -183,6 +181,7 @@ const JoggingPanelInner = observer(
|
|
|
183
181
|
)
|
|
184
182
|
})}
|
|
185
183
|
</Tabs>
|
|
184
|
+
|
|
186
185
|
{/* Current tab content */}
|
|
187
186
|
<Stack
|
|
188
187
|
flexGrow={1}
|
|
@@ -191,8 +190,6 @@ const JoggingPanelInner = observer(
|
|
|
191
190
|
>
|
|
192
191
|
{renderTabContent()}
|
|
193
192
|
</Stack>
|
|
194
|
-
{/* Overlay when jogging connection is blocked */}
|
|
195
|
-
{store.blocked && <JoggingBlocked store={store} />}
|
|
196
193
|
</Stack>
|
|
197
194
|
)
|
|
198
195
|
},
|
|
@@ -1,18 +1,14 @@
|
|
|
1
1
|
import { tryParseJson } from "@wandelbots/nova-js"
|
|
2
2
|
import type {
|
|
3
3
|
CoordinateSystem,
|
|
4
|
-
|
|
4
|
+
JoggerConnection,
|
|
5
|
+
MotionGroupSpecification,
|
|
5
6
|
RobotTcp,
|
|
6
|
-
} from "@wandelbots/nova-js/
|
|
7
|
+
} from "@wandelbots/nova-js/v1"
|
|
7
8
|
import { countBy } from "lodash-es"
|
|
8
9
|
import keyBy from "lodash-es/keyBy"
|
|
9
10
|
import uniqueId from "lodash-es/uniqueId"
|
|
10
11
|
import { autorun, makeAutoObservable, type IReactionDisposer } from "mobx"
|
|
11
|
-
import type {
|
|
12
|
-
JoggerConnection,
|
|
13
|
-
JoggerOrientation,
|
|
14
|
-
Vector3Simple,
|
|
15
|
-
} from "../../lib/JoggerConnection"
|
|
16
12
|
|
|
17
13
|
const discreteIncrementOptions = [
|
|
18
14
|
{ id: "0.1", mm: 0.1, degrees: 0.05 },
|
|
@@ -59,9 +55,6 @@ export class JoggingStore {
|
|
|
59
55
|
/** Locks to prevent UI interactions during certain operations */
|
|
60
56
|
locks = new Set<string>()
|
|
61
57
|
|
|
62
|
-
/** Block jogging UI interactions when connection is taken by another jogger */
|
|
63
|
-
blocked: boolean = false
|
|
64
|
-
|
|
65
58
|
/**
|
|
66
59
|
* Id of selected coordinate system from among those defined on the API side
|
|
67
60
|
*/
|
|
@@ -112,7 +105,7 @@ export class JoggingStore {
|
|
|
112
105
|
maxRotationVelocityDegPerSec: number = 60
|
|
113
106
|
|
|
114
107
|
/** Whether to show the coordinate system select dropdown in the UI */
|
|
115
|
-
showCoordSystemSelect: boolean =
|
|
108
|
+
showCoordSystemSelect: boolean = true
|
|
116
109
|
|
|
117
110
|
/** Whether to show the TCP select dropdown in the UI */
|
|
118
111
|
showTcpSelect: boolean = true
|
|
@@ -145,34 +138,34 @@ export class JoggingStore {
|
|
|
145
138
|
const { nova } = jogger
|
|
146
139
|
|
|
147
140
|
// Find out what TCPs this motion group has (we need it for jogging)
|
|
148
|
-
const [coordinatesystems,
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
141
|
+
const [motionGroupSpec, { coordinatesystems }, { tcps }] =
|
|
142
|
+
await Promise.all([
|
|
143
|
+
nova.api.motionGroupInfos.getMotionGroupSpecification(
|
|
144
|
+
jogger.motionGroupId,
|
|
145
|
+
),
|
|
146
|
+
|
|
147
|
+
// Fetch coord systems so user can select between them
|
|
148
|
+
nova.api.coordinateSystems.listCoordinateSystems("ROTATION_VECTOR"),
|
|
149
|
+
|
|
150
|
+
// Same for TCPs
|
|
151
|
+
nova.api.motionGroupInfos.listTcps(
|
|
152
|
+
jogger.motionGroupId,
|
|
153
|
+
"ROTATION_VECTOR",
|
|
154
|
+
),
|
|
155
|
+
])
|
|
156
|
+
|
|
157
|
+
return new JoggingStore(
|
|
158
|
+
jogger,
|
|
159
|
+
motionGroupSpec,
|
|
160
|
+
coordinatesystems || [],
|
|
161
|
+
tcps || [],
|
|
162
|
+
)
|
|
170
163
|
}
|
|
171
164
|
|
|
172
165
|
constructor(
|
|
173
166
|
readonly jogger: JoggerConnection,
|
|
167
|
+
readonly motionGroupSpec: MotionGroupSpecification,
|
|
174
168
|
readonly coordSystems: CoordinateSystem[],
|
|
175
|
-
readonly motionGroupDescription: MotionGroupDescription,
|
|
176
169
|
readonly tcps: RobotTcp[],
|
|
177
170
|
) {
|
|
178
171
|
// TODO workaround for default coord system on backend having a canonical id
|
|
@@ -186,21 +179,13 @@ export class JoggingStore {
|
|
|
186
179
|
this.selectedCoordSystemId = coordSystems[0]?.coordinate_system || "world"
|
|
187
180
|
this.selectedTcpId = tcps[0]?.id || ""
|
|
188
181
|
|
|
189
|
-
// Make all properties observable and actions auto-bound
|
|
190
182
|
makeAutoObservable(this, {}, { autoBind: true })
|
|
191
183
|
|
|
192
|
-
// Register blocked watching
|
|
193
|
-
this.jogger.onBlocked = () => {
|
|
194
|
-
this.block()
|
|
195
|
-
}
|
|
196
|
-
|
|
197
184
|
// Load user settings from local storage if available
|
|
198
185
|
this.loadFromLocalStorage()
|
|
199
186
|
|
|
200
187
|
// Automatically save user settings to local storage when save changes
|
|
201
188
|
this.disposers.push(autorun(() => this.saveToLocalStorage()))
|
|
202
|
-
|
|
203
|
-
// Assign joggingStore to window
|
|
204
189
|
;(window as any).joggingStore = this
|
|
205
190
|
}
|
|
206
191
|
|
|
@@ -216,31 +201,30 @@ export class JoggingStore {
|
|
|
216
201
|
}
|
|
217
202
|
|
|
218
203
|
async deactivate() {
|
|
219
|
-
|
|
220
|
-
|
|
204
|
+
const websocket = this.jogger.activeWebsocket
|
|
205
|
+
|
|
206
|
+
this.jogger.setJoggingMode("increment")
|
|
207
|
+
|
|
208
|
+
if (websocket) {
|
|
209
|
+
await websocket.closed()
|
|
221
210
|
}
|
|
222
211
|
}
|
|
223
212
|
|
|
224
213
|
/** Activate the jogger with current settings */
|
|
225
214
|
async activate() {
|
|
226
215
|
if (this.currentTab.id === "cartesian") {
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
) {
|
|
231
|
-
this.jogger.setOptions({
|
|
232
|
-
tcp: this.selectedTcpId,
|
|
233
|
-
orientation: this.selectedOrientation as JoggerOrientation,
|
|
234
|
-
})
|
|
216
|
+
const cartesianJoggingOpts = {
|
|
217
|
+
tcpId: this.selectedTcpId,
|
|
218
|
+
coordSystemId: this.activeCoordSystemId,
|
|
235
219
|
}
|
|
236
220
|
|
|
237
221
|
if (this.activeDiscreteIncrement) {
|
|
238
|
-
this.jogger.setJoggingMode("
|
|
222
|
+
this.jogger.setJoggingMode("increment", cartesianJoggingOpts)
|
|
239
223
|
} else {
|
|
240
|
-
this.jogger.setJoggingMode("
|
|
224
|
+
this.jogger.setJoggingMode("cartesian", cartesianJoggingOpts)
|
|
241
225
|
}
|
|
242
226
|
} else {
|
|
243
|
-
this.jogger.setJoggingMode("
|
|
227
|
+
this.jogger.setJoggingMode("joint")
|
|
244
228
|
}
|
|
245
229
|
|
|
246
230
|
return this.jogger
|
|
@@ -449,17 +433,6 @@ export class JoggingStore {
|
|
|
449
433
|
this.locks.delete(id)
|
|
450
434
|
}
|
|
451
435
|
|
|
452
|
-
block() {
|
|
453
|
-
this.blocked = true
|
|
454
|
-
}
|
|
455
|
-
|
|
456
|
-
unblock() {
|
|
457
|
-
this.blocked = false
|
|
458
|
-
if (this.jogger.mode === "jogging") {
|
|
459
|
-
this.jogger.initializeJoggingWebsocket()
|
|
460
|
-
}
|
|
461
|
-
}
|
|
462
|
-
|
|
463
436
|
/** Lock the UI until the given async callback resolves */
|
|
464
437
|
async withMotionLock(fn: () => Promise<void>) {
|
|
465
438
|
const lockId = uniqueId()
|