@wandelbots/wandelbots-js-react-components 1.3.0 → 1.3.2

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.
Files changed (168) hide show
  1. package/README.md +0 -29
  2. package/package.json +60 -43
  3. package/src/components/3d-viewport/CoordinateSystemTransform.tsx +44 -0
  4. package/src/components/3d-viewport/PresetEnvironment.tsx +78 -0
  5. package/src/components/3d-viewport/SafetyZonesRenderer.tsx +54 -0
  6. package/src/components/LoadingButton.stories.tsx +61 -0
  7. package/src/components/LoadingButton.tsx +19 -0
  8. package/src/components/LoadingCover.tsx +75 -0
  9. package/src/components/ThemeSelect.tsx +49 -0
  10. package/src/components/VelocitySlider.stories.tsx +32 -0
  11. package/src/components/VelocitySlider.tsx +52 -0
  12. package/src/components/jogging/JoggingCartesianAxisControl.stories.tsx +41 -0
  13. package/src/components/jogging/JoggingCartesianAxisControl.tsx +127 -0
  14. package/src/components/jogging/JoggingCartesianTab.tsx +265 -0
  15. package/src/components/jogging/JoggingCartesianValues.tsx +45 -0
  16. package/src/components/jogging/JoggingFreedriveTab.tsx +9 -0
  17. package/src/components/jogging/JoggingJointLimitDetector.tsx +51 -0
  18. package/src/components/jogging/JoggingJointRotationControl.stories.tsx +38 -0
  19. package/src/components/jogging/JoggingJointRotationControl.tsx +197 -0
  20. package/src/components/jogging/JoggingJointTab.tsx +93 -0
  21. package/src/components/jogging/JoggingJointValues.tsx +45 -0
  22. package/src/components/jogging/JoggingOptions.tsx +96 -0
  23. package/src/components/jogging/JoggingPanel.stories.tsx +26 -0
  24. package/src/components/jogging/JoggingPanel.tsx +148 -0
  25. package/src/components/jogging/JoggingStore.tsx +294 -0
  26. package/src/components/jogging/JoggingVelocitySlider.tsx +56 -0
  27. package/src/components/robots/ABB_1200_07_7.tsx +123 -0
  28. package/src/components/robots/AxisConfig.ts +3 -0
  29. package/src/components/robots/DHRobot.tsx +129 -0
  30. package/src/components/robots/FANUC_ARC_Mate_100iD.tsx +187 -0
  31. package/src/components/robots/FANUC_ARC_Mate_120iD.tsx +187 -0
  32. package/src/components/robots/FANUC_CRX10iA.tsx +167 -0
  33. package/src/components/robots/FANUC_CRX25iA.tsx +167 -0
  34. package/src/components/robots/FANUC_CRX25iAL.tsx +178 -0
  35. package/src/components/robots/KUKA_KR210_R2700.tsx +291 -0
  36. package/src/components/robots/KUKA_KR270_R2700.tsx +244 -0
  37. package/src/components/robots/RobotAnimator.tsx +83 -0
  38. package/src/components/robots/SupportedRobot.tsx +131 -0
  39. package/src/components/robots/UniversalRobots_UR10.tsx +112 -0
  40. package/src/components/robots/UniversalRobots_UR10e.tsx +275 -0
  41. package/src/components/robots/UniversalRobots_UR3.tsx +112 -0
  42. package/src/components/robots/UniversalRobots_UR3e.tsx +112 -0
  43. package/src/components/robots/UniversalRobots_UR5.tsx +111 -0
  44. package/src/components/robots/UniversalRobots_UR5e.tsx +280 -0
  45. package/src/components/robots/Yaskawa_AR1440.tsx +152 -0
  46. package/src/components/robots/Yaskawa_AR1730.tsx +165 -0
  47. package/src/components/robots/Yaskawa_AR2010.tsx +159 -0
  48. package/src/components/robots/Yaskawa_AR3120.tsx +160 -0
  49. package/src/components/robots/Yaskawa_AR900.tsx +121 -0
  50. package/src/components/utils/converters.ts +23 -0
  51. package/src/components/utils/errorHandling.ts +30 -0
  52. package/src/components/utils/hooks.tsx +54 -0
  53. package/src/components/utils/robotTreeQuery.ts +27 -0
  54. package/src/components/wandelscript-editor/WandelscriptEditor.stories.tsx +45 -0
  55. package/src/components/wandelscript-editor/WandelscriptEditor.tsx +114 -0
  56. package/src/components/wandelscript-editor/wandelscript.tmLanguage.ts +62 -0
  57. package/src/declarations.d.ts +10 -0
  58. package/src/i18n/config.ts +27 -0
  59. package/src/i18n/locales/de/translations.json +12 -0
  60. package/src/i18n/locales/en/translations.json +12 -0
  61. package/src/icons/arrowForwardFilled.tsx +7 -0
  62. package/src/icons/axis-x.svg +3 -0
  63. package/src/icons/axis-y.svg +3 -0
  64. package/src/icons/axis-z.svg +3 -0
  65. package/src/icons/expandFilled.tsx +11 -0
  66. package/src/icons/home.tsx +12 -0
  67. package/src/icons/infoOutlined.tsx +10 -0
  68. package/src/icons/jogging.svg +3 -0
  69. package/src/icons/robot.svg +3 -0
  70. package/src/icons/robot.tsx +14 -0
  71. package/src/icons/rotation.svg +4 -0
  72. package/src/icons/wbLogo.tsx +21 -0
  73. package/src/index.ts +7 -0
  74. package/src/themes/color.tsx +74 -0
  75. package/src/themes/theme.ts +150 -0
  76. package/src/themes/wbTheme.stories.tsx +64 -0
  77. package/src/themes/wbTheme.ts +186 -0
  78. package/dist/cjs/components/3d-viewport/SafetyZonesRenderer.d.ts +0 -2
  79. package/dist/cjs/index.js +0 -5875
  80. package/dist/cjs/types/components/3d-viewport/CoordinateSystemTransform.d.ts +0 -10
  81. package/dist/cjs/types/components/3d-viewport/PresetEnvironment.d.ts +0 -6
  82. package/dist/cjs/types/components/3d-viewport/SafetyZonesRenderer.d.ts +0 -6
  83. package/dist/cjs/types/components/robots/ABB_1200_07_7.d.ts +0 -2
  84. package/dist/cjs/types/components/robots/AxisConfig.d.ts +0 -2
  85. package/dist/cjs/types/components/robots/DHRobot.d.ts +0 -2
  86. package/dist/cjs/types/components/robots/FANUC_ARC_Mate_100iD.d.ts +0 -2
  87. package/dist/cjs/types/components/robots/FANUC_ARC_Mate_120iD.d.ts +0 -2
  88. package/dist/cjs/types/components/robots/FANUC_CRX10iA.d.ts +0 -2
  89. package/dist/cjs/types/components/robots/FANUC_CRX25iA.d.ts +0 -2
  90. package/dist/cjs/types/components/robots/FANUC_CRX25iAL.d.ts +0 -2
  91. package/dist/cjs/types/components/robots/KUKA_KR210_R2700.d.ts +0 -2
  92. package/dist/cjs/types/components/robots/KUKA_KR270_R2700.d.ts +0 -2
  93. package/dist/cjs/types/components/robots/RobotAnimator.d.ts +0 -11
  94. package/dist/cjs/types/components/robots/SupportedRobot.d.ts +0 -14
  95. package/dist/cjs/types/components/robots/UniversalRobots_UR10.d.ts +0 -2
  96. package/dist/cjs/types/components/robots/UniversalRobots_UR10e.d.ts +0 -2
  97. package/dist/cjs/types/components/robots/UniversalRobots_UR3.d.ts +0 -2
  98. package/dist/cjs/types/components/robots/UniversalRobots_UR3e.d.ts +0 -2
  99. package/dist/cjs/types/components/robots/UniversalRobots_UR5.d.ts +0 -2
  100. package/dist/cjs/types/components/robots/UniversalRobots_UR5e.d.ts +0 -2
  101. package/dist/cjs/types/components/robots/Yaskawa_AR1440.d.ts +0 -2
  102. package/dist/cjs/types/components/robots/Yaskawa_AR1730.d.ts +0 -2
  103. package/dist/cjs/types/components/robots/Yaskawa_AR2010.d.ts +0 -2
  104. package/dist/cjs/types/components/robots/Yaskawa_AR3120.d.ts +0 -2
  105. package/dist/cjs/types/components/robots/Yaskawa_AR900.d.ts +0 -2
  106. package/dist/cjs/types/components/utils/hooks.d.ts +0 -21
  107. package/dist/cjs/types/components/utils/robotTreeQuery.d.ts +0 -5
  108. package/dist/cjs/types/components/wandelscript-editor/WandelscriptEditor.d.ts +0 -12
  109. package/dist/cjs/types/components/wandelscript-editor/WandelscriptEditor.stories.d.ts +0 -5
  110. package/dist/cjs/types/components/wandelscript-editor/wandelscript.tmLanguage.d.ts +0 -44
  111. package/dist/cjs/types/icons/arrowForwardFilled.d.ts +0 -1
  112. package/dist/cjs/types/icons/expandFilled.d.ts +0 -1
  113. package/dist/cjs/types/icons/home.d.ts +0 -1
  114. package/dist/cjs/types/icons/infoOutlined.d.ts +0 -1
  115. package/dist/cjs/types/icons/robot.d.ts +0 -1
  116. package/dist/cjs/types/icons/wbLogo.d.ts +0 -6
  117. package/dist/cjs/types/index.d.ts +0 -4
  118. package/dist/cjs/types/themes/color.d.ts +0 -9
  119. package/dist/cjs/types/themes/theme.d.ts +0 -143
  120. package/dist/cjs/types/themes/wbTheme.d.ts +0 -1
  121. package/dist/cjs/types/themes/wbTheme.stories.d.ts +0 -6
  122. package/dist/esm/components/3d-viewport/SafetyZonesRenderer.d.ts +0 -2
  123. package/dist/esm/index.js +0 -5852
  124. package/dist/esm/types/components/3d-viewport/CoordinateSystemTransform.d.ts +0 -10
  125. package/dist/esm/types/components/3d-viewport/PresetEnvironment.d.ts +0 -6
  126. package/dist/esm/types/components/3d-viewport/SafetyZonesRenderer.d.ts +0 -6
  127. package/dist/esm/types/components/robots/ABB_1200_07_7.d.ts +0 -2
  128. package/dist/esm/types/components/robots/AxisConfig.d.ts +0 -2
  129. package/dist/esm/types/components/robots/DHRobot.d.ts +0 -2
  130. package/dist/esm/types/components/robots/FANUC_ARC_Mate_100iD.d.ts +0 -2
  131. package/dist/esm/types/components/robots/FANUC_ARC_Mate_120iD.d.ts +0 -2
  132. package/dist/esm/types/components/robots/FANUC_CRX10iA.d.ts +0 -2
  133. package/dist/esm/types/components/robots/FANUC_CRX25iA.d.ts +0 -2
  134. package/dist/esm/types/components/robots/FANUC_CRX25iAL.d.ts +0 -2
  135. package/dist/esm/types/components/robots/KUKA_KR210_R2700.d.ts +0 -2
  136. package/dist/esm/types/components/robots/KUKA_KR270_R2700.d.ts +0 -2
  137. package/dist/esm/types/components/robots/RobotAnimator.d.ts +0 -11
  138. package/dist/esm/types/components/robots/SupportedRobot.d.ts +0 -14
  139. package/dist/esm/types/components/robots/UniversalRobots_UR10.d.ts +0 -2
  140. package/dist/esm/types/components/robots/UniversalRobots_UR10e.d.ts +0 -2
  141. package/dist/esm/types/components/robots/UniversalRobots_UR3.d.ts +0 -2
  142. package/dist/esm/types/components/robots/UniversalRobots_UR3e.d.ts +0 -2
  143. package/dist/esm/types/components/robots/UniversalRobots_UR5.d.ts +0 -2
  144. package/dist/esm/types/components/robots/UniversalRobots_UR5e.d.ts +0 -2
  145. package/dist/esm/types/components/robots/Yaskawa_AR1440.d.ts +0 -2
  146. package/dist/esm/types/components/robots/Yaskawa_AR1730.d.ts +0 -2
  147. package/dist/esm/types/components/robots/Yaskawa_AR2010.d.ts +0 -2
  148. package/dist/esm/types/components/robots/Yaskawa_AR3120.d.ts +0 -2
  149. package/dist/esm/types/components/robots/Yaskawa_AR900.d.ts +0 -2
  150. package/dist/esm/types/components/utils/hooks.d.ts +0 -21
  151. package/dist/esm/types/components/utils/robotTreeQuery.d.ts +0 -5
  152. package/dist/esm/types/components/wandelscript-editor/WandelscriptEditor.d.ts +0 -12
  153. package/dist/esm/types/components/wandelscript-editor/WandelscriptEditor.stories.d.ts +0 -5
  154. package/dist/esm/types/components/wandelscript-editor/wandelscript.tmLanguage.d.ts +0 -44
  155. package/dist/esm/types/icons/arrowForwardFilled.d.ts +0 -1
  156. package/dist/esm/types/icons/expandFilled.d.ts +0 -1
  157. package/dist/esm/types/icons/home.d.ts +0 -1
  158. package/dist/esm/types/icons/index.d.ts +0 -6
  159. package/dist/esm/types/icons/infoOutlined.d.ts +0 -1
  160. package/dist/esm/types/icons/robot.d.ts +0 -1
  161. package/dist/esm/types/icons/wbLogo.d.ts +0 -6
  162. package/dist/esm/types/index.d.ts +0 -4
  163. package/dist/esm/types/themes/color.d.ts +0 -9
  164. package/dist/esm/types/themes/theme.d.ts +0 -143
  165. package/dist/esm/types/themes/wbTheme.d.ts +0 -1
  166. package/dist/esm/types/themes/wbTheme.stories.d.ts +0 -6
  167. package/dist/index.d.ts +0 -33
  168. /package/{dist/cjs/types/icons/index.d.ts → src/icons/index.ts} +0 -0
@@ -0,0 +1,244 @@
1
+ import { useGLTF } from "@react-three/drei"
2
+ import type * as THREE from "three"
3
+ import type { RobotProps } from "./SupportedRobot"
4
+ import { animated } from "@react-spring/three"
5
+ import RobotAnimator from "./RobotAnimator"
6
+
7
+ export function KUKA_KR270_R2700({
8
+ modelURL,
9
+ connectedMotionGroup,
10
+ ...props
11
+ }: RobotProps) {
12
+ const gltf = useGLTF(modelURL) as any
13
+
14
+ const nodes = gltf.nodes
15
+ const materials = gltf.materials
16
+
17
+ const rotationOffsets = [0, 0, -Math.PI / 2, 0, 0, 0]
18
+
19
+ function setRotation(jointObjects: THREE.Object3D[], jointValues: number[]) {
20
+ jointObjects.forEach(
21
+ (object, index) =>
22
+ (object.rotation.y = jointValues[index]! + rotationOffsets[index]!),
23
+ )
24
+ }
25
+
26
+ return (
27
+ <>
28
+ <RobotAnimator
29
+ connectedMotionGroup={connectedMotionGroup}
30
+ robotRootObjectName="Scene"
31
+ onRotationChanged={setRotation}
32
+ />
33
+ <group {...props} dispose={null}>
34
+ <group name="Scene">
35
+ <group name="kuka_kr270_2700_ultra">
36
+ <animated.group name="joint_01">
37
+ <animated.group
38
+ name="joint_02"
39
+ position={[0.35, 0.675, 0]}
40
+ rotation={[-Math.PI / 2, 0, 0]}
41
+ >
42
+ <animated.group
43
+ name="joint_03"
44
+ position={[1.15, 0, 0]}
45
+ rotation={[0, -Math.PI / 2, 0]}
46
+ >
47
+ <animated.group
48
+ name="joint_04"
49
+ position={[-0.041, 0, 0]}
50
+ rotation={[Math.PI / 2, 0, 0]}
51
+ >
52
+ <animated.group
53
+ name="joint_05"
54
+ position={[0, -1.2, 0]}
55
+ rotation={[-Math.PI / 2, 0, 0]}
56
+ >
57
+ <animated.group
58
+ name="joint_06"
59
+ rotation={[Math.PI / 2, 0, 0]}
60
+ >
61
+ <group
62
+ name="flange"
63
+ position={[0, -0.24, 0]}
64
+ rotation={[-Math.PI, 0, 0]}
65
+ />
66
+ <group
67
+ name="link_6"
68
+ position={[0, -0.213, 0]}
69
+ rotation={[0, 0, -Math.PI / 2]}
70
+ >
71
+ <group name="visuals006">
72
+ <mesh
73
+ name="visuals006_1"
74
+ castShadow
75
+ receiveShadow
76
+ geometry={nodes.visuals006_1.geometry}
77
+ material={materials.material_Material_Farbe__1_}
78
+ />
79
+ <mesh
80
+ name="visuals006_2"
81
+ castShadow
82
+ receiveShadow
83
+ geometry={nodes.visuals006_2.geometry}
84
+ material={materials.material_Material_Metall}
85
+ />
86
+ </group>
87
+ </group>
88
+ </animated.group>
89
+ <group
90
+ name="link_5"
91
+ position={[0, 0.044, 0]}
92
+ rotation={[Math.PI / 2, 0, -Math.PI / 2]}
93
+ >
94
+ <mesh
95
+ name="visuals005"
96
+ castShadow
97
+ receiveShadow
98
+ geometry={nodes.visuals005.geometry}
99
+ material={materials.material_Material_Farbe}
100
+ />
101
+ </group>
102
+ </animated.group>
103
+ <group
104
+ name="link_4"
105
+ position={[0, -0.954, 0]}
106
+ rotation={[0, 0, -Math.PI / 2]}
107
+ >
108
+ <mesh
109
+ name="visuals004"
110
+ castShadow
111
+ receiveShadow
112
+ geometry={nodes.visuals004.geometry}
113
+ material={materials.material_Material_Farbe}
114
+ />
115
+ </group>
116
+ </animated.group>
117
+ <group
118
+ name="link_3"
119
+ position={[0, -0.178, 0]}
120
+ rotation={[Math.PI / 2, 0, -Math.PI / 2]}
121
+ >
122
+ <group name="visuals003">
123
+ <mesh
124
+ name="visuals003_1"
125
+ castShadow
126
+ receiveShadow
127
+ geometry={nodes.visuals003_1.geometry}
128
+ material={materials.material_Material_Farbe__1_}
129
+ />
130
+ <mesh
131
+ name="visuals003_2"
132
+ castShadow
133
+ receiveShadow
134
+ geometry={nodes.visuals003_2.geometry}
135
+ material={materials.material_Material_Farbe__2_}
136
+ />
137
+ <mesh
138
+ name="visuals003_3"
139
+ castShadow
140
+ receiveShadow
141
+ geometry={nodes.visuals003_3.geometry}
142
+ material={materials.material_Material_Metall}
143
+ />
144
+ <mesh
145
+ name="visuals003_4"
146
+ castShadow
147
+ receiveShadow
148
+ geometry={nodes.visuals003_4.geometry}
149
+ material={materials.material_Material_Farbe}
150
+ />
151
+ </group>
152
+ </group>
153
+ </animated.group>
154
+ <group name="link_2" rotation={[Math.PI / 2, 0, 0]}>
155
+ <group name="visuals002">
156
+ <mesh
157
+ name="visuals002_1"
158
+ castShadow
159
+ receiveShadow
160
+ geometry={nodes.visuals002_1.geometry}
161
+ material={materials.material_Material_Farbe}
162
+ />
163
+ <mesh
164
+ name="visuals002_2"
165
+ castShadow
166
+ receiveShadow
167
+ geometry={nodes.visuals002_2.geometry}
168
+ material={materials.material_Material_Farbe__1_}
169
+ />
170
+ <mesh
171
+ name="visuals002_3"
172
+ castShadow
173
+ receiveShadow
174
+ geometry={nodes.visuals002_3.geometry}
175
+ material={materials.material_Material_Metall}
176
+ />
177
+ <mesh
178
+ name="visuals002_4"
179
+ castShadow
180
+ receiveShadow
181
+ geometry={nodes.visuals002_4.geometry}
182
+ material={materials.material_Material_Farbe__2_}
183
+ />
184
+ </group>
185
+ </group>
186
+ </animated.group>
187
+ <group name="link_1" position={[0, 0.226, 0]}>
188
+ <group name="visuals001">
189
+ <mesh
190
+ name="visuals001_1"
191
+ castShadow
192
+ receiveShadow
193
+ geometry={nodes.visuals001_1.geometry}
194
+ material={materials.material_Material_Metall}
195
+ />
196
+ <mesh
197
+ name="visuals001_2"
198
+ castShadow
199
+ receiveShadow
200
+ geometry={nodes.visuals001_2.geometry}
201
+ material={materials.material_Material_Farbe__1_}
202
+ />
203
+ <mesh
204
+ name="visuals001_3"
205
+ castShadow
206
+ receiveShadow
207
+ geometry={nodes.visuals001_3.geometry}
208
+ material={materials.material_Material_Farbe__2_}
209
+ />
210
+ <mesh
211
+ name="visuals001_4"
212
+ castShadow
213
+ receiveShadow
214
+ geometry={nodes.visuals001_4.geometry}
215
+ material={materials.material_Material_Farbe}
216
+ />
217
+ </group>
218
+ </group>
219
+ </animated.group>
220
+ <group name="link_0-base">
221
+ <group name="joint_1" />
222
+ <group name="visuals">
223
+ <mesh
224
+ name="visuals_1"
225
+ castShadow
226
+ receiveShadow
227
+ geometry={nodes.visuals_1.geometry}
228
+ material={materials.material_Material_Metall}
229
+ />
230
+ <mesh
231
+ name="visuals_2"
232
+ castShadow
233
+ receiveShadow
234
+ geometry={nodes.visuals_2.geometry}
235
+ material={materials.material_Material_Farbe__1_}
236
+ />
237
+ </group>
238
+ </group>
239
+ </group>
240
+ </group>
241
+ </group>
242
+ </>
243
+ )
244
+ }
@@ -0,0 +1,83 @@
1
+ import { useEffect, useRef } from "react"
2
+ import { Globals, useSpring } from "@react-spring/three"
3
+ import { useThree } from "@react-three/fiber"
4
+ import type * as THREE from "three"
5
+ import {
6
+ getAllJointsByName,
7
+ type RobotSceneJoint,
8
+ } from "../utils/robotTreeQuery"
9
+ import type { MotionStreamConnection } from "@wandelbots/wandelbots-js"
10
+ import { useAutorun } from "../utils/hooks"
11
+
12
+ type RobotAnimatorProps = {
13
+ connectedMotionGroup: MotionStreamConnection
14
+ robotRootObjectName: string
15
+ onRotationChanged: (joints: THREE.Object3D[], jointValues: number[]) => void
16
+ jointCollector?: (rootObject: THREE.Object3D) => RobotSceneJoint[]
17
+ }
18
+
19
+ export default function RobotAnimator({
20
+ connectedMotionGroup,
21
+ robotRootObjectName,
22
+ onRotationChanged,
23
+ jointCollector,
24
+ }: RobotAnimatorProps) {
25
+ Globals.assign({ frameLoop: "always" })
26
+ const jointValues = useRef<number[]>([])
27
+ const jointObjects = useRef<THREE.Object3D[]>([])
28
+ const { scene, invalidate } = useThree()
29
+
30
+ useEffect(() => {
31
+ // All robots have a "Scene" object as root
32
+ // From this object the tree is traversed and all joints are extracted (ordered ASC)
33
+ const sceneObject = scene.getObjectByName(robotRootObjectName)
34
+ if (!sceneObject) {
35
+ return
36
+ }
37
+
38
+ jointObjects.current = jointCollector
39
+ ? jointCollector(sceneObject)
40
+ : getAllJointsByName(sceneObject)
41
+
42
+ // Set initial position
43
+ setRotation()
44
+ invalidate()
45
+ }, [])
46
+
47
+ function updateJoints(newJointValues: number[]) {
48
+ jointValues.current = newJointValues
49
+ setSpring.start(Object.assign({}, jointValues.current) as any)
50
+ }
51
+
52
+ function setRotation() {
53
+ const updatedJointValues = jointObjects.current.map((object, objectIndex) =>
54
+ (axisValues as any)[objectIndex].get(),
55
+ )
56
+ onRotationChanged(jointObjects.current, updatedJointValues)
57
+ }
58
+
59
+ useAutorun(() => {
60
+ const newJointValues =
61
+ connectedMotionGroup.rapidlyChangingMotionState.state.joint_position.joints.filter(
62
+ (item) => item !== undefined,
63
+ )
64
+
65
+ requestAnimationFrame(() => updateJoints(newJointValues))
66
+ })
67
+
68
+ const [axisValues, setSpring] = useSpring(() => ({
69
+ ...Object.assign(
70
+ {},
71
+ connectedMotionGroup.rapidlyChangingMotionState.state.joint_position
72
+ .joints,
73
+ ),
74
+ onChange: () => {
75
+ setRotation()
76
+ invalidate()
77
+ },
78
+ onResolve: () => {
79
+ setRotation()
80
+ },
81
+ }))
82
+ return null
83
+ }
@@ -0,0 +1,131 @@
1
+ import { Suspense } from "react"
2
+
3
+ import { UniversalRobots_UR3 } from "./UniversalRobots_UR3"
4
+ import { UniversalRobots_UR3e } from "./UniversalRobots_UR3e"
5
+ import { UniversalRobots_UR5 } from "./UniversalRobots_UR5"
6
+ import { UniversalRobots_UR5e } from "./UniversalRobots_UR5e"
7
+ import { UniversalRobots_UR10 } from "./UniversalRobots_UR10"
8
+ import { UniversalRobots_UR10e } from "./UniversalRobots_UR10e"
9
+ import { Yaskawa_AR900 } from "./Yaskawa_AR900"
10
+ import { Yaskawa_AR1440 } from "./Yaskawa_AR1440"
11
+ import { Yaskawa_AR1730 } from "./Yaskawa_AR1730"
12
+ import { Yaskawa_AR2010 } from "./Yaskawa_AR2010"
13
+ import { Yaskawa_AR3120 } from "./Yaskawa_AR3120"
14
+ import { FANUC_CRX10iA } from "./FANUC_CRX10iA"
15
+ import { FANUC_CRX25iA } from "./FANUC_CRX25iA"
16
+ import { FANUC_CRX25iAL } from "./FANUC_CRX25iAL"
17
+ import { KUKA_KR210_R2700 } from "./KUKA_KR210_R2700"
18
+ import { KUKA_KR270_R2700 } from "./KUKA_KR270_R2700"
19
+ import { FANUC_ARC_Mate_100iD } from "./FANUC_ARC_Mate_100iD"
20
+ import { FANUC_ARC_Mate_120iD } from "./FANUC_ARC_Mate_120iD"
21
+ import { ABB_1200_07_7 } from "./ABB_1200_07_7"
22
+
23
+ import type { GroupProps } from "@react-three/fiber"
24
+ import type { ConnectedMotionGroup } from "@wandelbots/wandelbots-js"
25
+ import { DHRobot } from "./DHRobot"
26
+
27
+ export type DHRobotProps = {
28
+ connectedMotionGroup: ConnectedMotionGroup
29
+ } & GroupProps
30
+
31
+ export type RobotProps = {
32
+ connectedMotionGroup: ConnectedMotionGroup
33
+ modelURL: string
34
+ } & GroupProps
35
+
36
+ export type SupportedRobotProps = {
37
+ connectedMotionGroup: ConnectedMotionGroup
38
+ getModel?: (modelFromController: string) => string
39
+ } & GroupProps
40
+
41
+ function defaultGetModel(modelFromController: string): string {
42
+ return `https://cdn.jsdelivr.net/gh/wandelbotsgmbh/wandelbots-js-react-components/public/models/${modelFromController}.glb`
43
+ }
44
+
45
+ export function SupportedRobot({
46
+ connectedMotionGroup,
47
+ getModel = defaultGetModel,
48
+ ...props
49
+ }: SupportedRobotProps) {
50
+ let Robot
51
+ const modelFromController = connectedMotionGroup.modelFromController
52
+ switch (modelFromController) {
53
+ case "UniversalRobots_UR3":
54
+ Robot = UniversalRobots_UR3
55
+ break
56
+ case "UniversalRobots_UR3e":
57
+ Robot = UniversalRobots_UR3e
58
+ break
59
+ case "UniversalRobots_UR5":
60
+ Robot = UniversalRobots_UR5
61
+ break
62
+ case "UniversalRobots_UR5e":
63
+ Robot = UniversalRobots_UR5e
64
+ break
65
+ case "UniversalRobots_UR10":
66
+ Robot = UniversalRobots_UR10
67
+ break
68
+ case "UniversalRobots_UR10e":
69
+ Robot = UniversalRobots_UR10e
70
+ break
71
+ case "Yaskawa_AR900":
72
+ Robot = Yaskawa_AR900
73
+ break
74
+ case "Yaskawa_GP7":
75
+ Robot = Yaskawa_AR900
76
+ break
77
+ case "Yaskawa_AR1440":
78
+ Robot = Yaskawa_AR1440
79
+ break
80
+ case "Yaskawa_AR1730":
81
+ Robot = Yaskawa_AR1730
82
+ break
83
+ case "Yaskawa_AR2010":
84
+ Robot = Yaskawa_AR2010
85
+ break
86
+ case "Yaskawa_AR3120":
87
+ Robot = Yaskawa_AR3120
88
+ break
89
+ case "FANUC_CRX10iA":
90
+ Robot = FANUC_CRX10iA
91
+ break
92
+ case "FANUC_CRX25iA":
93
+ Robot = FANUC_CRX25iA
94
+ break
95
+ case "FANUC_CRX25iAL":
96
+ Robot = FANUC_CRX25iAL
97
+ break
98
+ case "FANUC_ARC_Mate_120iD":
99
+ Robot = FANUC_ARC_Mate_120iD
100
+ break
101
+ case "FANUC_ARC_Mate_100iD":
102
+ Robot = FANUC_ARC_Mate_100iD
103
+ break
104
+ case "KUKA_KR210_R2700":
105
+ Robot = KUKA_KR210_R2700
106
+ break
107
+ case "KUKA_KR270_R2700":
108
+ Robot = KUKA_KR270_R2700
109
+ break
110
+ case "ABB_1200_07_7":
111
+ Robot = ABB_1200_07_7
112
+ break
113
+ default:
114
+ console.warn(`Unknown robot type: ${modelFromController}`)
115
+ Robot = DHRobot
116
+ }
117
+
118
+ return (
119
+ <Suspense
120
+ fallback={
121
+ <DHRobot connectedMotionGroup={connectedMotionGroup} {...props} />
122
+ }
123
+ >
124
+ <Robot
125
+ connectedMotionGroup={connectedMotionGroup}
126
+ modelURL={getModel(modelFromController||"")}
127
+ {...props}
128
+ />
129
+ </Suspense>
130
+ )
131
+ }
@@ -0,0 +1,112 @@
1
+ import { useGLTF } from "@react-three/drei"
2
+ import type * as THREE from "three"
3
+ import type { RobotProps } from "./SupportedRobot"
4
+ import RobotAnimator from "./RobotAnimator"
5
+ import { animated } from "@react-spring/three"
6
+
7
+ export function UniversalRobots_UR10({
8
+ modelURL,
9
+ connectedMotionGroup,
10
+ ...props
11
+ }: RobotProps) {
12
+ const gltf = useGLTF(modelURL) as any
13
+ const nodes = gltf.nodes
14
+ const materials = gltf.materials
15
+
16
+ function setRotation(jointObjects: THREE.Object3D[], jointValues: number[]) {
17
+ jointObjects.forEach(
18
+ (object, index) => (object.rotation.y = jointValues[index]!),
19
+ )
20
+ }
21
+
22
+ return (
23
+ <>
24
+ <RobotAnimator
25
+ connectedMotionGroup={connectedMotionGroup}
26
+ robotRootObjectName="Scene"
27
+ onRotationChanged={setRotation}
28
+ />
29
+ <group {...props} dispose={null}>
30
+ <group name="Scene">
31
+ <group name="UR10" rotation={[Math.PI / 2, 0, 0]}>
32
+ <animated.group name="UR10_J01" rotation={[-Math.PI / 2, 0, 0]}>
33
+ <animated.group
34
+ name="UR10_J02"
35
+ position={[0, 0.126, 0]}
36
+ rotation={[Math.PI / 2, 0, 0]}
37
+ >
38
+ <animated.group name="UR10_J03" position={[-0.612, 0, 0]}>
39
+ <animated.group name="UR10_J04" position={[-0.572, 0, 0]}>
40
+ <animated.group
41
+ name="UR10_J05"
42
+ position={[0, 0.164, 0]}
43
+ rotation={[Math.PI / 2, 0, 0]}
44
+ >
45
+ <animated.group
46
+ name="UR10_J06"
47
+ position={[0, 0.116, 0]}
48
+ rotation={[-Math.PI / 2, 0, 0]}
49
+ >
50
+ <group name="UR10_FLG" position={[0, 0.092, 0]} />
51
+ <mesh
52
+ name="UR10_L06"
53
+ castShadow
54
+ receiveShadow
55
+ geometry={nodes.UR10_L06.geometry}
56
+ material={materials.Standard}
57
+ />
58
+ </animated.group>
59
+ <mesh
60
+ name="UR10_L05"
61
+ castShadow
62
+ receiveShadow
63
+ geometry={nodes.UR10_L05.geometry}
64
+ material={materials.Standard}
65
+ />
66
+ </animated.group>
67
+ <mesh
68
+ name="UR10_L04"
69
+ castShadow
70
+ receiveShadow
71
+ geometry={nodes.UR10_L04.geometry}
72
+ material={materials.Standard}
73
+ />
74
+ </animated.group>
75
+ <mesh
76
+ name="UR10_L03"
77
+ castShadow
78
+ receiveShadow
79
+ geometry={nodes.UR10_L03.geometry}
80
+ material={materials.Standard}
81
+ />
82
+ </animated.group>
83
+ <mesh
84
+ name="UR10_L02"
85
+ castShadow
86
+ receiveShadow
87
+ geometry={nodes.UR10_L02.geometry}
88
+ material={materials.Standard}
89
+ />
90
+ </animated.group>
91
+ <mesh
92
+ name="UR10_L01"
93
+ castShadow
94
+ receiveShadow
95
+ geometry={nodes.UR10_L01.geometry}
96
+ material={materials.Standard}
97
+ />
98
+ </animated.group>
99
+ <mesh
100
+ name="UR10_L00"
101
+ castShadow
102
+ receiveShadow
103
+ geometry={nodes.UR10_L00.geometry}
104
+ material={materials.Standard}
105
+ rotation={[-Math.PI / 2, 0, 0]}
106
+ />
107
+ </group>
108
+ </group>
109
+ </group>
110
+ </>
111
+ )
112
+ }