├── ReadMe.md ├── controllers └── my_controller │ └── my_controller.py ├── textures ├── blurred_helix.png ├── blurred_helix.xcf ├── bubbles.jpg ├── bubbles.png ├── bubbles.xcf ├── download.jpeg ├── download.png ├── download.xcf └── images.jpeg └── worlds ├── .empty.wbproj └── empty.wbt /ReadMe.md: -------------------------------------------------------------------------------- 1 | # Underwater ROV WeBots simulation 2 | 3 | Here's a simulation I wrote in WeBots with a Python controller for UCL Mech0019: Ocean Engineering Fundamentals. In the wake of the current situation, we were not able to compete with our vehicles in a Seaperch style challenge, so it helped to see how the vehicle may have behaved! 4 | 5 | Find the demo here: https://youtu.be/O_Oaaerdkf8 6 | -------------------------------------------------------------------------------- /controllers/my_controller/my_controller.py: -------------------------------------------------------------------------------- 1 | """my_controller controller.""" 2 | 3 | # You may need to import some classes of the controller module. Ex: 4 | # from controller import Robot, Motor, DistanceSensor 5 | from controller import Robot, Motor, Keyboard 6 | 7 | 8 | # TIME_STEP = 64 9 | # MAX_SPEED = 6.28 10 | 11 | # create the Robot instance. 12 | robot = Robot() 13 | 14 | keyboard = robot.getKeyboard() 15 | keyboard.enable(1000) 16 | # get the time step of the current world. 17 | timestep = int(robot.getBasicTimeStep()) 18 | 19 | yawMotor = robot.getMotor('yaw motor') 20 | swayMotor = robot.getMotor('sway motor') 21 | surgeMotor = robot.getMotor('surge motor') 22 | heaveMotor = robot.getMotor('heave motor') 23 | yawMotor.setPosition(float('inf')) 24 | swayMotor.setPosition(float('inf')) 25 | surgeMotor.setPosition(float('inf')) 26 | heaveMotor.setPosition(float('inf')) 27 | yawMotor.setVelocity(0.0) 28 | swayMotor.setVelocity(0.0) 29 | surgeMotor.setVelocity(0.0) 30 | heaveMotor.setVelocity(0.0) 31 | 32 | yawVel = 0.0 33 | swayVel = 0.0 34 | surgeVel = 0.0 35 | heaveVel = 0.0 36 | 37 | print '"UP" turns up Yaw' 38 | print '"DOWN" turns down Yaw' 39 | print '"LEFT" turns up Sway' 40 | print '"RIGHT" turns down Yaw' 41 | print '"A" turns up Surge' 42 | print '"D" turns down Surge' 43 | print '"W" turns up Heave' 44 | print '"S" turns down Heave' 45 | 46 | # You should insert a getDevice-like function in order to get the 47 | # instance of a device of the robot. Something like: 48 | # motor = robot.getMotor('motorname') 49 | # ds = robot.getDistanceSensor('dsname') 50 | # ds.enable(timestep) 51 | 52 | # Main loop: 53 | # - perform simulation steps until Webots is stopping the controller 54 | while robot.step(timestep) != -1: 55 | yawMotor.setVelocity(yawVel) 56 | swayMotor.setVelocity(swayVel) 57 | surgeMotor.setVelocity(surgeVel) 58 | heaveMotor.setVelocity(heaveVel) 59 | key = keyboard.getKey() 60 | if (key==Keyboard.UP): 61 | yawVel += 0.25 62 | print('Yaw + 0.05. Total Yaw velocity:' + str(yawVel)) 63 | if (key==Keyboard.DOWN): 64 | yawVel -= 0.25 65 | print('Yaw - 0.05. Total Yaw velocity:' + str(yawVel)) 66 | if (key==Keyboard.LEFT): 67 | swayVel += 0.25 68 | print('Sway + 0.05. Total Sway velocity:' + str(swayVel)) 69 | if (key==Keyboard.RIGHT): 70 | swayVel -= 0.25 71 | print('Sway - 0.05. Total Sway velocity:' + str(swayVel)) 72 | if (key==ord('A')): 73 | surgeVel += 0.25 74 | print('Surge + 0.05. Total Surge velocity:' + str(surgeVel)) 75 | if (key==ord('D')): 76 | surgeVel -= 0.25 77 | print('Surge - 0.05. Total Surge velocity:' + str(surgeVel)) 78 | if (key==ord('W')): 79 | heaveVel += 0.25 80 | print('Heave + 0.05. Total Heave velocity:' + str(heaveVel)) 81 | if (key==ord('S')): 82 | heaveVel -= 0.25 83 | print('Heave - 0.05. Total Heave velocity:' + str(heaveVel)) 84 | 85 | # Read the sensors: 86 | # Enter here functions to read sensor data, like: 87 | # val = ds.getValue() 88 | 89 | # Process sensor data here. 90 | 91 | # Enter here functions to send actuator commands, like: 92 | # motor.setPosition(10.0) 93 | # pass 94 | 95 | # Enter here exit cleanup code. 96 | -------------------------------------------------------------------------------- /textures/blurred_helix.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathalex/simulation/60c01b87436960e370a0acafb1ba9fd42cee2427/textures/blurred_helix.png -------------------------------------------------------------------------------- /textures/blurred_helix.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathalex/simulation/60c01b87436960e370a0acafb1ba9fd42cee2427/textures/blurred_helix.xcf -------------------------------------------------------------------------------- /textures/bubbles.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathalex/simulation/60c01b87436960e370a0acafb1ba9fd42cee2427/textures/bubbles.jpg -------------------------------------------------------------------------------- /textures/bubbles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathalex/simulation/60c01b87436960e370a0acafb1ba9fd42cee2427/textures/bubbles.png -------------------------------------------------------------------------------- /textures/bubbles.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathalex/simulation/60c01b87436960e370a0acafb1ba9fd42cee2427/textures/bubbles.xcf -------------------------------------------------------------------------------- /textures/download.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathalex/simulation/60c01b87436960e370a0acafb1ba9fd42cee2427/textures/download.jpeg -------------------------------------------------------------------------------- /textures/download.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathalex/simulation/60c01b87436960e370a0acafb1ba9fd42cee2427/textures/download.png -------------------------------------------------------------------------------- /textures/download.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathalex/simulation/60c01b87436960e370a0acafb1ba9fd42cee2427/textures/download.xcf -------------------------------------------------------------------------------- /textures/images.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathalex/simulation/60c01b87436960e370a0acafb1ba9fd42cee2427/textures/images.jpeg -------------------------------------------------------------------------------- /worlds/.empty.wbproj: -------------------------------------------------------------------------------- 1 | Webots Project File version R2020a 2 | perspectives: 000000ff00000000fd0000000300000000000001e2000003ccfc0100000002fb0000001e00480074006d006c0052006f0062006f007400570069006e0064006f00770000000179000000690000000000000000fb0000001a0044006f00630075006d0065006e0074006100740069006f006e0000000000ffffffff0000006900ffffff000000010000032d000002f1fc0200000001fb0000001400540065007800740045006400690074006f00720100000016000002f10000008900ffffff000000030000073d000000d9fc0100000001fb0000000e0043006f006e0073006f006c006501000000000000073d0000006900ffffff0000040e000002f100000001000000020000000100000008fc00000000 3 | simulationViewPerspectives: 000000ff00000001000000020000016d0000029f0100000002010000000100 4 | sceneTreePerspectives: 000000ff0000000100000002000000c0000001150100000002010000000200 5 | maximizedDockId: -1 6 | centralWidgetVisible: 1 7 | selectionDisabled: 0 8 | viewpointLocked: 0 9 | orthographicViewHeight: 1 10 | textFiles: 1 "worlds/empty.wbt" "controllers/my_controller/my_controller.py" 11 | -------------------------------------------------------------------------------- /worlds/empty.wbt: -------------------------------------------------------------------------------- 1 | #VRML_SIM R2020a utf8 2 | WorldInfo { 3 | basicTimeStep 16 4 | } 5 | Viewpoint { 6 | fieldOfView 0.785398 7 | orientation 0.1330930702139669 0.9502219635557642 0.28171697612541585 4.060322588031672 8 | position -0.5913326673043211 1.5238996507423164 -0.35279505461260574 9 | } 10 | 11 | TexturedBackground { 12 | texture "empty_office" 13 | } 14 | 15 | DEF TANK RectangleArena { 16 | floorSize 10 4 17 | floorAppearance ThreadMetalPlate { 18 | } 19 | wallHeight 4 20 | wallAppearance PBRAppearance { 21 | transparency 0.95 22 | emissiveColor 0.8 0.8 0.8 23 | } 24 | } 25 | DEF STILL_WATER Fluid { 26 | density 1000 27 | translation 0 1.9 0 28 | boundingObject Transform{ 29 | translation 0 0 0 30 | children[ 31 | Box { 32 | size 10 3.8 4 33 | }] 34 | } 35 | children [ 36 | DEF S Shape { 37 | appearance DEF WATER_APPEARANCE PBRAppearance { 38 | baseColor 0 0.501961 1 39 | transparency 0.8 40 | roughness 1.1102230246251565e-16 41 | metalness 0 42 | 43 | } 44 | 45 | geometry Box { 46 | size 10 3.8 4 47 | } 48 | 49 | } 50 | ] 51 | } 52 | 53 | DEF ROV Robot { 54 | name "ROV" 55 | translation 0 1 0 56 | controller "my_controller" 57 | immersionProperties ImmersionProperties { 58 | fluidName "fluid" 59 | #referenceArea "immersed area" 60 | dragForceCoefficients 0.1 0 0 61 | dragTorqueCoefficients 0.001 0 0 62 | #viscousResistanceForceCoefficient 0 63 | viscousResistanceTorqueCoefficient 0.005 64 | } 65 | 66 | physics Physics{ 67 | density 500 68 | #mass 0.9749 69 | #centerOfMass -0.3407 10.799 -0.1136 70 | #inertiaMatrix [ 1 1 1, 0 0 0] 71 | damping Damping{ 72 | linear 0.2 73 | angular 0.2 74 | } 75 | } 76 | children[ 77 | DEF bottom Solid{ 78 | name "bottom" 79 | physics Physics{ 80 | density 550 81 | #mass 0.256 82 | #centerOfMass 0.055 -0.08 0.1365 83 | # inertiaMatrix [ 1 1 1, 0 0 0] 84 | damping Damping{ 85 | linear 0.2 86 | angular 0.2 87 | } 88 | } 89 | boundingObject DEF bottombound Transform{ 90 | translation 0.06 -0.07 0.135 91 | children[ 92 | Box{ 93 | size 0.26 0.05 0.26 94 | } 95 | ] 96 | } 97 | children[ 98 | SolidPipe { 99 | translation 0.005 -0.08 0.018 100 | rotation 0 0 -1 -1.5708 101 | name "pipe bottom 1" 102 | height 0.035 103 | radius 0.015 104 | thickness 0.0015 105 | subdivision 24 106 | physics Physics{ 107 | density 520 108 | #mass 0.0035 109 | #centerOfMass 0.005 -0.08 0.018 110 | # inertiaMatrix [ 1 1 1, 0 0 0] 111 | damping Damping{ 112 | linear 0.2 113 | angular 0.2 114 | } 115 | } 116 | enableBoundingObject TRUE 117 | appearance CorrugatedPvc { textureTransform TextureTransform { scale 1 1.5 } } 118 | } 119 | TJoint { 120 | translation 0.06 -0.071 0.015 121 | rotation 1 0 0 2.8798 122 | name "T joint pipe bottom 1" 123 | scale 0.45 0.45 0.45 124 | appearance CorrugatedPvc { textureTransform TextureTransform { scale 3 3 } } 125 | } 126 | SolidPipe { 127 | translation 0.111 -0.08 0.02 128 | rotation 0 0 1 1.5708 129 | name "pipe bottom 2" 130 | height 0.035 131 | radius 0.015 132 | thickness 0.0015 133 | subdivision 24 134 | physics Physics{ 135 | density 520 136 | #mass 0.0035 137 | #centerOfMass 0.111 -0.08 0.02 138 | # inertiaMatrix [ 1 1 1, 0 0 0] 139 | damping Damping{ 140 | linear 0.2 141 | angular 0.2 142 | } 143 | } 144 | enableBoundingObject TRUE 145 | appearance CorrugatedPvc { textureTransform TextureTransform { scale 1 1.5 } } 146 | } 147 | SolidPipe { 148 | translation 0.005 -0.08 0.255 149 | rotation 0 0 1 1.5708 150 | name "pipe bottom 3" 151 | height 0.035 152 | radius 0.015 153 | thickness 0.0015 154 | subdivision 24 155 | physics Physics{ 156 | density 520 157 | #mass 0.0035 158 | #centerOfMass 0.005 -0.08 0.255 159 | # inertiaMatrix [ 1 1 1, 0 0 0] 160 | damping Damping{ 161 | linear 0.2 162 | angular 0.2 163 | } 164 | } 165 | enableBoundingObject TRUE 166 | appearance CorrugatedPvc { textureTransform TextureTransform { scale 1 1.5 } } 167 | } 168 | TJoint { 169 | translation 0.055 -0.068 0.2583 170 | rotation 1 0 0 -2.8798 171 | name "T joint pipe bottom 2" 172 | scale 0.5 0.5 0.5 173 | appearance CorrugatedPvc { textureTransform TextureTransform { scale 3 3 } } 174 | } 175 | SolidPipe { 176 | translation 0.111 -0.08 0.255 177 | rotation 0 0 1 1.5708 178 | name "0.9191" 179 | height 0.035 180 | radius 0.015 181 | thickness 0.0015 182 | subdivision 24 183 | physics Physics{ 184 | density 520 185 | #mass 0.0035 186 | #centerOfMass 0.111 -0.08 0.255 187 | # inertiaMatrix [ 1 1 1, 0 0 0] 188 | damping Damping{ 189 | linear 0.2 190 | angular 0.2 191 | } 192 | } 193 | enableBoundingObject TRUE 194 | appearance CorrugatedPvc { textureTransform TextureTransform { scale 1 1.5 } } 195 | } 196 | LJoint{ 197 | translation 0.15 -0.08 0.235 198 | rotation -0.577 0.577 -0.577 -2.09 199 | name "L joint pipe bottom 1" 200 | scale 0.5 0.5 0.5 201 | appearance CorrugatedPvc { textureTransform TextureTransform { scale 3 3 } } 202 | } 203 | LJoint{ 204 | translation -0.04 -0.08 0.23 205 | rotation 0 -0.707 0.707 3.138 206 | name "L joint pipe bottom 2" 207 | scale 0.5 0.5 0.5 208 | appearance CorrugatedPvc { textureTransform TextureTransform { scale 3 3 } } 209 | } 210 | LJoint{ 211 | translation -0.04 -0.08 0.04 212 | rotation 0.002 0.708 0.706 -3.141 213 | name "L joint pipe bottom 3" 214 | scale 0.5 0.5 0.5 215 | appearance CorrugatedPvc { textureTransform TextureTransform { scale 3 3 } } 216 | } 217 | LJoint{ 218 | translation 0.15 -0.08 0.04 219 | rotation 0.577 -0.577 -0.577 -2.095 220 | name "L joint 0.9191" 221 | scale 0.5 0.5 0.5 222 | appearance CorrugatedPvc { textureTransform TextureTransform { scale 3 3 } } 223 | } 224 | SolidPipe { 225 | translation -0.06 -0.08 0.14 226 | rotation 0.577 0.577 0.577 2.0944 227 | name "pipe bottom 5" 228 | height 0.15 229 | radius 0.015 230 | thickness 0.0015 231 | subdivision 24 232 | physics Physics{ 233 | density 520 234 | #mass 0.010 235 | #centerOfMass -0.06 -0.08 0.14 236 | # inertiaMatrix [ 1 1 1, 0 0 0] 237 | damping Damping{ 238 | linear 0.2 239 | angular 0.2 240 | } 241 | } 242 | enableBoundingObject TRUE 243 | appearance CorrugatedPvc { textureTransform TextureTransform { scale 1 1.5 } } 244 | } 245 | SolidPipe { 246 | translation 0.17 -0.08 0.14 247 | rotation 0.577 0.577 0.577 2.0944 248 | name "pipe bottom 6" 249 | height 0.15 250 | radius 0.015 251 | thickness 0.0015 252 | subdivision 24 253 | physics Physics{ 254 | density 520 255 | #mass 0.010 256 | #centerOfMass 0.17 -0.08 0.14 257 | # inertiaMatrix [ 1 1 1, 0 0 0] 258 | damping Damping{ 259 | linear 0.2 260 | angular 0.2 261 | } 262 | } 263 | enableBoundingObject TRUE 264 | appearance CorrugatedPvc { textureTransform TextureTransform { scale 1 1.5 } } 265 | } 266 | SolidPipe { 267 | translation 0.053 -0.055 0.135 268 | rotation 0 0 -1 -1.571 269 | name "pipe bottom 7" 270 | height 0.25 271 | radius 0.015 272 | thickness 0.0015 273 | subdivision 24 274 | physics Physics{ 275 | density 520 276 | #mass 0.010 277 | #centerOfMass 0.053 -0.055 0.135 278 | # inertiaMatrix [ 1 1 1, 0 0 0] 279 | damping Damping{ 280 | linear 0.2 281 | angular 0.2 282 | } 283 | } 284 | enableBoundingObject TRUE 285 | appearance CorrugatedPvc { textureTransform TextureTransform { scale 1 1.5 } } 286 | } 287 | ] 288 | } 289 | DEF midsection Solid{ 290 | name "midsection" 291 | physics Physics{ 292 | density 500 293 | #mass 0.063 294 | #centerOfMass 0.055 0.15 0.1365 295 | # inertiaMatrix [ 1 1 1, 0 0 0] 296 | damping Damping{ 297 | linear 0.2 298 | angular 0.2 299 | } 300 | } 301 | boundingObject DEF midsectionbound Transform{ 302 | translation 0.06 0.09 0.136 303 | children[ 304 | Box{ 305 | size 0.1 0.35 0.1 306 | } 307 | ] 308 | } 309 | children[ 310 | SolidPipe { 311 | translation 0.06 0.0869 -0.0266 312 | rotation 1 0 0 -0.262 313 | name "pipe mid 1" 314 | height 0.27 315 | radius 0.015 316 | thickness 0.0015 317 | subdivision 24 318 | physics Physics{ 319 | density 500 320 | #mass 0.014 321 | #centerOfMass 0.06 0.0869 -0.0266 322 | # inertiaMatrix [ 1 1 1, 0 0 0] 323 | damping Damping{ 324 | linear 0.2 325 | angular 0.2 326 | } 327 | } 328 | appearance CorrugatedPvc { textureTransform TextureTransform { scale 1 1.5 } } 329 | } 330 | SolidPipe { 331 | translation 0.055 0.0827 0.2985 332 | rotation 1 0 0 -2.88 333 | name "pipe mid 2" 334 | height 0.27 335 | radius 0.015 336 | thickness 0.0015 337 | subdivision 24 338 | physics Physics{ 339 | density 500 340 | #mass 0.014 341 | #centerOfMass 0.055 0.0827 0.2985 342 | # inertiaMatrix [ 1 1 1, 0 0 0] 343 | damping Damping{ 344 | linear 0.2 345 | angular 0.2 346 | } 347 | } 348 | appearance CorrugatedPvc { textureTransform TextureTransform { scale 1 1.5 } } 349 | } 350 | DEF midpipe1 Transform{ 351 | translation 0.061155 -0.14981 0.288192 352 | rotation 0.03313176403321037 0.9983740617562442 0.046384469646494515 1.57214 353 | scale 0.09 0.09 0.09 354 | children [ 355 | Shape{ 356 | appearance CorrugatedPvc { textureTransform TextureTransform { scale 1 1.5 } } 357 | geometry Extrusion { 358 | crossSection [ #this is a circle, using trig 359 | -1 0 360 | -0.866 0.5 361 | -0.707 0.707 362 | -0.5 0.866 363 | 0 1 364 | 0.5 0.866 365 | 0.707 0.707 366 | 0.866 0.5 367 | 1 0 368 | 0.866 -0.5 369 | 0.707 -0.707 370 | 0.5 -0.866 371 | 0 -1 372 | -0.5 -0.866 373 | -0.707 -0.707 374 | -0.866 -0.5 375 | # -1 0 376 | -1 -0.001 377 | -1.3 0 378 | -1.1258 -0.655 379 | -0.9191 -0.9191 380 | -0.655 -1.1258 381 | 0 -1.3 382 | 0.655 -1.1258 383 | 0.9191 -0.9191 384 | 1.1258 -0.655 385 | 1.3 0 386 | 1.1258 0.655 387 | 0.9191 0.9191 388 | 0.655 1.1258 389 | 0 1.3 390 | -0.655 1.1258 391 | -0.9191 0.9191 392 | -1.1258 0.655 393 | -1.3 0.001 394 | -1 0 395 | ] 396 | spine [ #coordinates from Enrico's photo through apps.automeris.io 397 | 1.6494464944649433 4.447601476014749 0 398 | 1.7241082410824095 4.0675276752767424 0 399 | 1.7711562115621142 3.689913899138982 0 400 | 1.762546125461253 3.310762607626067 0 401 | 1.7597785977859765 2.9359163591635827 0 402 | 1.7342558425584244 2.553075030750299 0 403 | 1.7035055350553492 2.1751537515375077 0 404 | 1.6456949569495684 1.8079950799507923 0 405 | 1.5872693726937259 1.4316113161131547 0 406 | 1.5288437884378835 1.0552275522755174 0 407 | 1.3990774907749069 0.6920664206642023 0 408 | 409 | ] 410 | scale [ #uniform for each segment 411 | 0.15 0.15 412 | 0.15 0.15 413 | 0.15 0.15 414 | 0.15 0.15 415 | 0.15 0.15 416 | 0.15 0.15 417 | 0.15 0.15 418 | ] 419 | beginCap TRUE 420 | endCap TRUE 421 | ccw FALSE 422 | solid TRUE 423 | convex TRUE 424 | creaseAngle 0.0 425 | splineSubdivision 24 426 | } 427 | castShadows TRUE 428 | isPickable TRUE 429 | } 430 | ] 431 | } 432 | DEF midpipe2 Transform{ 433 | translation 0.0603153 -0.15 -0.0170887 434 | rotation -0.04740402737238043 -0.9977503276760962 0.04740402737238043 1.58784 435 | scale 0.09 0.09 0.09 436 | children [ 437 | Shape{ 438 | appearance CorrugatedPvc { textureTransform TextureTransform { scale 1 1.5 } } 439 | geometry Extrusion { 440 | crossSection [ #this is a circle, using trig 441 | -1 0 442 | -0.866 0.5 443 | -0.707 0.707 444 | -0.5 0.866 445 | 0 1 446 | 0.5 0.866 447 | 0.707 0.707 448 | 0.866 0.5 449 | 1 0 450 | 0.866 -0.5 451 | 0.707 -0.707 452 | 0.5 -0.866 453 | 0 -1 454 | -0.5 -0.866 455 | -0.707 -0.707 456 | -0.866 -0.5 457 | # -1 0 458 | -1 -0.001 459 | -1.3 0 460 | -1.1258 -0.655 461 | -0.9191 -0.9191 462 | -0.655 -1.1258 463 | 0 -1.3 464 | 0.655 -1.1258 465 | 0.9191 -0.9191 466 | 1.1258 -0.655 467 | 1.3 0 468 | 1.1258 0.655 469 | 0.9191 0.9191 470 | 0.655 1.1258 471 | 0 1.3 472 | -0.655 1.1258 473 | -0.9191 0.9191 474 | -1.1258 0.655 475 | -1.3 0.001 476 | -1 0 477 | ] 478 | spine [ #coordinates from Enrico's photo through apps.automeris.io 479 | 1.6494464944649433 4.447601476014749 0 480 | 1.7241082410824095 4.0675276752767424 0 481 | 1.7711562115621142 3.689913899138982 0 482 | 1.762546125461253 3.310762607626067 0 483 | 1.7597785977859765 2.9359163591635827 0 484 | 1.7342558425584244 2.553075030750299 0 485 | 1.7035055350553492 2.1751537515375077 0 486 | 1.6456949569495684 1.8079950799507923 0 487 | 1.5872693726937259 1.4316113161131547 0 488 | 1.5288437884378835 1.0552275522755174 0 489 | 1.3990774907749069 0.6920664206642023 0 490 | 491 | ] 492 | scale [ #uniform for each segment 493 | 0.15 0.15 494 | 0.15 0.15 495 | 0.15 0.15 496 | 0.15 0.15 497 | 0.15 0.15 498 | 0.15 0.15 499 | 0.15 0.15 500 | ] 501 | beginCap TRUE 502 | endCap TRUE 503 | ccw FALSE 504 | solid TRUE 505 | convex FALSE 506 | creaseAngle 0.0 507 | splineSubdivision 24 508 | } 509 | castShadows TRUE 510 | isPickable TRUE 511 | } 512 | ] 513 | } 514 | ] 515 | } 516 | DEF top Solid{ 517 | name "top" 518 | physics Physics{ 519 | density 452 520 | #mass 0.28898 521 | #centerOfMass 0.055 0.238 0.1365 522 | # inertiaMatrix [ 1 1 1, 0 0 0] 523 | damping Damping{ 524 | linear 0.2 525 | angular 0.2 526 | } 527 | } 528 | boundingObject DEF topbound Transform{ 529 | translation 0.06 0.23 0.136 530 | children[ 531 | Box{ 532 | size 0.38 0.08 0.428 533 | } 534 | ] 535 | } 536 | children[ 537 | SolidPipe { 538 | translation -0.025 0.238 -0.068 539 | rotation 0 0 -1 -1.5708 540 | name "pipe top 1" 541 | height 0.1045 542 | radius 0.015 543 | thickness 0.0015 544 | subdivision 24 545 | physics Physics{ 546 | density 520 547 | #mass 0.007 548 | #centerOfMass -0.025 0.238 -0.068 549 | # inertiaMatrix [ 1 1 1, 0 0 0] 550 | damping Damping{ 551 | linear 0.2 552 | angular 0.2 553 | } 554 | } 555 | enableBoundingObject TRUE 556 | appearance CorrugatedPvc { textureTransform TextureTransform { scale 1 1.5 } } 557 | } 558 | TJoint { 559 | translation 0.06 0.2284 -0.0652 560 | rotation 1 0 0 -0.2617 561 | name "T joint pipe top 1" 562 | scale 0.45 0.45 0.45 563 | appearance CorrugatedPvc { textureTransform TextureTransform { scale 3 3 } } 564 | } 565 | SolidPipe { 566 | translation 0.145 0.238 -0.068 567 | rotation 0 0 1 1.5708 568 | name "pipe top 2" 569 | height 0.1045 570 | radius 0.015 571 | thickness 0.0015 572 | subdivision 24 573 | physics Physics{ 574 | density 500 575 | #mass 0.007 576 | #centerOfMass -0.025 0.238 -0.068 577 | # inertiaMatrix [ 1 1 1, 0 0 0] 578 | damping Damping{ 579 | linear 0.2 580 | angular 0.2 581 | } 582 | } 583 | enableBoundingObject TRUE 584 | appearance CorrugatedPvc { textureTransform TextureTransform { scale 1 1.5 } } 585 | } 586 | SolidPipe { 587 | translation -0.025 0.238 0.338 588 | rotation 0 0 1 1.5708 589 | name "pipe top 3" 590 | height 0.1045 591 | radius 0.015 592 | thickness 0.0015 593 | subdivision 24 594 | physics Physics{ 595 | density 500 596 | #mass 0.007 597 | #centerOfMass -0.025 0.238 -0.068 598 | # inertiaMatrix [ 1 1 1, 0 0 0] 599 | damping Damping{ 600 | linear 0.2 601 | angular 0.2 602 | } 603 | } 604 | enableBoundingObject TRUE 605 | appearance CorrugatedPvc { textureTransform TextureTransform { scale 1 1.5 } } 606 | } 607 | TJoint { 608 | translation 0.055 0.2284 0.3359 609 | rotation 1 0 0 0.2618 610 | name "T joint pipe top 2" 611 | scale 0.5 0.5 0.5 612 | appearance CorrugatedPvc { textureTransform TextureTransform { scale 3 3 } } 613 | } 614 | SolidPipe { 615 | translation 0.145 0.238 0.338 616 | rotation 0 0 1 1.5708 617 | name "pipe top 4" 618 | height 0.1045 619 | radius 0.015 620 | thickness 0.0015 621 | subdivision 24 622 | physics Physics{ 623 | density 500 624 | #mass 0.007 625 | #centerOfMass 0.145 0.238 0.338 626 | # inertiaMatrix [ 1 1 1, 0 0 0] 627 | damping Damping{ 628 | linear 0.2 629 | angular 0.2 630 | } 631 | } 632 | enableBoundingObject TRUE 633 | appearance CorrugatedPvc { textureTransform TextureTransform { scale 1 1.5 } } 634 | } 635 | LJoint{ 636 | translation -0.1 0.238 0.315 637 | rotation 0 -0.707 0.707 3.138 638 | name "L joint pipe top 1" 639 | scale 0.5 0.5 0.5 640 | appearance CorrugatedPvc { textureTransform TextureTransform { scale 3 3 } } 641 | } 642 | LJoint{ 643 | translation 0.22 0.238 0.3148 644 | rotation -0.577 0.577 -0.577 -2.09 645 | name "L joint pipe top 2" 646 | scale 0.5 0.5 0.5 647 | appearance CorrugatedPvc { textureTransform TextureTransform { scale 3 3 } } 648 | } 649 | LJoint{ 650 | translation -0.1 0.238 -0.045 651 | rotation 0.002 0.708 0.706 -3.141 652 | name "L joint pipe top 3" 653 | scale 0.5 0.5 0.5 654 | appearance CorrugatedPvc { textureTransform TextureTransform { scale 3 3 } } 655 | } 656 | LJoint{ 657 | translation 0.22 0.238 -0.045 658 | rotation 0.577 -0.577 -0.577 -2.095 659 | name "L joint pipe top 4" 660 | scale 0.5 0.5 0.5 661 | appearance CorrugatedPvc { textureTransform TextureTransform { scale 3 3 } } 662 | } 663 | SolidPipe { 664 | translation -0.12 0.238 0.14 665 | rotation 0.577 0.577 0.577 2.0944 666 | name "pipe top 5" 667 | height 0.3 668 | radius 0.015 669 | thickness 0.0015 670 | subdivision 24 671 | physics Physics{ 672 | density 500 673 | #mass 0.0163 674 | #centerOfMass -0.12 0.238 0.14 675 | # inertiaMatrix [ 1 1 1, 0 0 0] 676 | damping Damping{ 677 | linear 0.2 678 | angular 0.2 679 | } 680 | } 681 | enableBoundingObject TRUE 682 | appearance CorrugatedPvc { textureTransform TextureTransform { scale 1 1.5 } } 683 | } 684 | SolidPipe { 685 | translation 0.24 0.238 0.14 686 | rotation 0.577 0.577 0.577 2.0944 687 | name "pipe top 6" 688 | height 0.3 689 | radius 0.015 690 | thickness 0.0015 691 | subdivision 24 692 | physics Physics{ 693 | density 500 694 | #mass 0.0163 695 | #centerOfMass 0.24 0.238 0.14 696 | # inertiaMatrix [ 1 1 1, 0 0 0] 697 | damping Damping{ 698 | linear 0.2 699 | angular 0.2 700 | } 701 | } 702 | enableBoundingObject TRUE 703 | appearance CorrugatedPvc { textureTransform TextureTransform { scale 1 1.5 } } 704 | } 705 | SolidPipe { 706 | translation 0.058 0.215 0.135 707 | rotation 0 0 -1 -1.571 708 | name "pipe top 7" 709 | height 0.4 710 | radius 0.015 711 | thickness 0.0015 712 | subdivision 24 713 | physics Physics{ 714 | density 500 715 | #mass 0.0231 716 | #centerOfMass 0.058 0.215 0.135 717 | # inertiaMatrix [ 1 1 1, 0 0 0] 718 | damping Damping{ 719 | linear 0.2 720 | angular 0.2 721 | } 722 | } 723 | enableBoundingObject TRUE 724 | appearance CorrugatedPvc { textureTransform TextureTransform { scale 1 1.5 } } 725 | } 726 | ] 727 | } 728 | DEF grapple Solid{ 729 | physics Physics{ 730 | density 670 731 | # mass 0.001 732 | # centerOfMass -0.3407 10.799 -0.1136 733 | # inertiaMatrix [ 1 1 1, 0 0 0] 734 | damping Damping{ 735 | linear 0.2 736 | angular 0.2 737 | } 738 | } 739 | name "grapple" 740 | children[ 741 | DEF hook1 Transform{ 742 | translation 0.077 -0.185 0.147 743 | rotation 0.06759588996641124 0.989472853127702 0.12796198100597692 2.2832 744 | scale 0.01 0.01 0.01 745 | children[ 746 | DEF hookShape Shape{ 747 | appearance BrushedAluminium { textureTransform NULL } 748 | geometry Extrusion { 749 | crossSection [ #this is a circle, using trig 750 | -1 0 751 | -0.866 0.5 752 | -0.707 0.707 753 | -0.5 0.866 754 | 0 1 755 | 0.5 0.866 756 | 0.707 0.707 757 | 0.866 0.5 758 | 1 0 759 | 0.866 -0.5 760 | 0.707 -0.707 761 | 0.5 -0.866 762 | 0 -1 763 | -0.5 -0.866 764 | -0.707 -0.707 765 | -0.866 -0.5 766 | -1 0 767 | ] 768 | spine [ #coordinates from hook photo through apps.automeris.io 769 | 0.42647058823529416 11.147058823529425 0 770 | 0.35294117647058826 11.935908691834957 0 771 | 0.5882352941176471 12.256365232660244 0 772 | 0.823529411764706 12.323090430201946 0 773 | 1.0441176470588236 12.061018437225652 0 774 | 1.088235294117647 11.659350307287108 0 775 | 1.102941176470588 11.182177348551374 0 776 | 1.1617647058823528 10.198858647936799 0 777 | 1.1323529411764706 9.511413520632145 0 778 | 1.147058823529412 8.94468832309044 0 779 | 1.102941176470588 8.28665496049167 0 780 | 1.147058823529412 7.6163301141352155 0 781 | 1.1617647058823528 6.766022827041272 0 782 | 1.2205882352941178 5.767778753292368 0 783 | 1.1911764705882353 4.975856014047415 0 784 | 1.1911764705882353 4.080333625987711 0 785 | 1.3235294117647058 3.323090430201935 0 786 | 1.5588235294117647 2.5539947322212484 0 787 | 2 1.8358208955223905 0 788 | 2.691176470588235 1.0952589991220378 0 789 | 3.4117647058823533 0.6540825285338041 0 790 | 4.426470588235294 0.37093942054433704 0 791 | 5.4411764705882355 0.44600526777875515 0 792 | 6.147058823529412 0.7058823529411775 0 793 | 6.794117647058823 1.1281826163301147 0 794 | 7.1911764705882355 1.6176470588235308 0 795 | 7.5735294117647065 2.0618964003511895 0 796 | 7.897058823529411 2.593942054433718 0 797 | 8 3.059701492537318 0 798 | 7.926470588235294 3.6395961369622523 0 799 | 7.794117647058823 4.172958735733104 0 800 | 7.617647058823529 4.4960491659350375 0 801 | 7.264705882352942 4.888498683055319 0 802 | 803 | ] 804 | scale [ #uniform for each segment 805 | 0.1 0.1 806 | 0.1 0.1 807 | 0.1 0.1 808 | 0.1 0.1 809 | 0.1 0.1 810 | 0.1 0.1 811 | 0.1 0.1 812 | ] 813 | beginCap TRUE 814 | endCap TRUE 815 | ccw TRUE 816 | solid TRUE 817 | convex TRUE 818 | creaseAngle 0.0 819 | splineSubdivision 16 820 | } 821 | castShadows TRUE 822 | isPickable TRUE 823 | } 824 | ] 825 | } 826 | DEF hook2 Transform{ 827 | translation 0.0547955 -0.185993 0.159479 828 | rotation -0.1331650446756149 -0.9713353258738288 -0.19691306606247408 -0.8826553071795864 829 | scale 0.01 0.01 0.01 830 | children[ 831 | Shape{ 832 | appearance BrushedAluminium { textureTransform NULL } 833 | geometry Extrusion { 834 | crossSection [ #this is a circle, using trig 835 | -1 0 836 | -0.866 0.5 837 | -0.707 0.707 838 | -0.5 0.866 839 | 0 1 840 | 0.5 0.866 841 | 0.707 0.707 842 | 0.866 0.5 843 | 1 0 844 | 0.866 -0.5 845 | 0.707 -0.707 846 | 0.5 -0.866 847 | 0 -1 848 | -0.5 -0.866 849 | -0.707 -0.707 850 | -0.866 -0.5 851 | -1 0 852 | ] 853 | spine [ #coordinates from hook photo through apps.automeris.io 854 | 0.42647058823529416 11.147058823529425 0 855 | 0.35294117647058826 11.935908691834957 0 856 | 0.5882352941176471 12.256365232660244 0 857 | 0.823529411764706 12.323090430201946 0 858 | 1.0441176470588236 12.061018437225652 0 859 | 1.088235294117647 11.659350307287108 0 860 | 1.102941176470588 11.182177348551374 0 861 | 1.1617647058823528 10.198858647936799 0 862 | 1.1323529411764706 9.511413520632145 0 863 | 1.147058823529412 8.94468832309044 0 864 | 1.102941176470588 8.28665496049167 0 865 | 1.147058823529412 7.6163301141352155 0 866 | 1.1617647058823528 6.766022827041272 0 867 | 1.2205882352941178 5.767778753292368 0 868 | 1.1911764705882353 4.975856014047415 0 869 | 1.1911764705882353 4.080333625987711 0 870 | 1.3235294117647058 3.323090430201935 0 871 | 1.5588235294117647 2.5539947322212484 0 872 | 2 1.8358208955223905 0 873 | 2.691176470588235 1.0952589991220378 0 874 | 3.4117647058823533 0.6540825285338041 0 875 | 4.426470588235294 0.37093942054433704 0 876 | 5.4411764705882355 0.44600526777875515 0 877 | 6.147058823529412 0.7058823529411775 0 878 | 6.794117647058823 1.1281826163301147 0 879 | 7.1911764705882355 1.6176470588235308 0 880 | 7.5735294117647065 2.0618964003511895 0 881 | 7.897058823529411 2.593942054433718 0 882 | 8 3.059701492537318 0 883 | 7.926470588235294 3.6395961369622523 0 884 | 7.794117647058823 4.172958735733104 0 885 | 7.617647058823529 4.4960491659350375 0 886 | 7.264705882352942 4.888498683055319 0 887 | 888 | ] 889 | scale [ #uniform for each segment 890 | 0.1 0.1 891 | 0.1 0.1 892 | 0.1 0.1 893 | 0.1 0.1 894 | 0.1 0.1 895 | 0.1 0.1 896 | 0.1 0.1 897 | ] 898 | beginCap TRUE 899 | endCap TRUE 900 | ccw TRUE 901 | solid TRUE 902 | convex TRUE 903 | creaseAngle 0.0 904 | splineSubdivision 16 905 | } 906 | castShadows TRUE 907 | isPickable TRUE 908 | } 909 | ] 910 | } 911 | DEF hook3 Transform{ 912 | translation 0.0384683 -0.184368 0.122941 913 | rotation -0.32158103146702705 -0.9415440921310355 0.10040100982433971 0.932883 914 | scale 0.01 0.01 0.01 915 | children[ 916 | Shape{ 917 | appearance BrushedAluminium { textureTransform NULL } 918 | geometry Extrusion { 919 | crossSection [ #this is a circle, using trig 920 | -1 0 921 | -0.866 0.5 922 | -0.707 0.707 923 | -0.5 0.866 924 | 0 1 925 | 0.5 0.866 926 | 0.707 0.707 927 | 0.866 0.5 928 | 1 0 929 | 0.866 -0.5 930 | 0.707 -0.707 931 | 0.5 -0.866 932 | 0 -1 933 | -0.5 -0.866 934 | -0.707 -0.707 935 | -0.866 -0.5 936 | -1 0 937 | ] 938 | spine [ #coordinates from hook photo through apps.automeris.io 939 | 0.42647058823529416 11.147058823529425 0 940 | 0.35294117647058826 11.935908691834957 0 941 | 0.5882352941176471 12.256365232660244 0 942 | 0.823529411764706 12.323090430201946 0 943 | 1.0441176470588236 12.061018437225652 0 944 | 1.088235294117647 11.659350307287108 0 945 | 1.102941176470588 11.182177348551374 0 946 | 1.1617647058823528 10.198858647936799 0 947 | 1.1323529411764706 9.511413520632145 0 948 | 1.147058823529412 8.94468832309044 0 949 | 1.102941176470588 8.28665496049167 0 950 | 1.147058823529412 7.6163301141352155 0 951 | 1.1617647058823528 6.766022827041272 0 952 | 1.2205882352941178 5.767778753292368 0 953 | 1.1911764705882353 4.975856014047415 0 954 | 1.1911764705882353 4.080333625987711 0 955 | 1.3235294117647058 3.323090430201935 0 956 | 1.5588235294117647 2.5539947322212484 0 957 | 2 1.8358208955223905 0 958 | 2.691176470588235 1.0952589991220378 0 959 | 3.4117647058823533 0.6540825285338041 0 960 | 4.426470588235294 0.37093942054433704 0 961 | 5.4411764705882355 0.44600526777875515 0 962 | 6.147058823529412 0.7058823529411775 0 963 | 6.794117647058823 1.1281826163301147 0 964 | 7.1911764705882355 1.6176470588235308 0 965 | 7.5735294117647065 2.0618964003511895 0 966 | 7.897058823529411 2.593942054433718 0 967 | 8 3.059701492537318 0 968 | 7.926470588235294 3.6395961369622523 0 969 | 7.794117647058823 4.172958735733104 0 970 | 7.617647058823529 4.4960491659350375 0 971 | 7.264705882352942 4.888498683055319 0 972 | 973 | ] 974 | scale [ #uniform for each segment 975 | 0.1 0.1 976 | 0.1 0.1 977 | 0.1 0.1 978 | 0.1 0.1 979 | 0.1 0.1 980 | 0.1 0.1 981 | 0.1 0.1 982 | ] 983 | beginCap TRUE 984 | endCap TRUE 985 | ccw TRUE 986 | solid TRUE 987 | convex TRUE 988 | creaseAngle 0.0 989 | splineSubdivision 16 990 | } 991 | castShadows TRUE 992 | isPickable TRUE 993 | } 994 | ] 995 | } 996 | DEF hook4 Transform{ 997 | translation 0.0742513 -0.185994 0.119562 998 | rotation 0.06759767309128842 0.9894726061190903 -0.12796294906158848 -2.2832153071795864 999 | scale 0.01 0.01 0.01 1000 | children[ 1001 | Shape{ 1002 | appearance BrushedAluminium { textureTransform NULL } 1003 | geometry Extrusion { 1004 | crossSection [ #this is a circle, using trig 1005 | -1 0 1006 | -0.866 0.5 1007 | -0.707 0.707 1008 | -0.5 0.866 1009 | 0 1 1010 | 0.5 0.866 1011 | 0.707 0.707 1012 | 0.866 0.5 1013 | 1 0 1014 | 0.866 -0.5 1015 | 0.707 -0.707 1016 | 0.5 -0.866 1017 | 0 -1 1018 | -0.5 -0.866 1019 | -0.707 -0.707 1020 | -0.866 -0.5 1021 | -1 0 1022 | ] 1023 | spine [ #coordinates from hook photo through apps.automeris.io 1024 | 0.42647058823529416 11.147058823529425 0 1025 | 0.35294117647058826 11.935908691834957 0 1026 | 0.5882352941176471 12.256365232660244 0 1027 | 0.823529411764706 12.323090430201946 0 1028 | 1.0441176470588236 12.061018437225652 0 1029 | 1.088235294117647 11.659350307287108 0 1030 | 1.102941176470588 11.182177348551374 0 1031 | 1.1617647058823528 10.198858647936799 0 1032 | 1.1323529411764706 9.511413520632145 0 1033 | 1.147058823529412 8.94468832309044 0 1034 | 1.102941176470588 8.28665496049167 0 1035 | 1.147058823529412 7.6163301141352155 0 1036 | 1.1617647058823528 6.766022827041272 0 1037 | 1.2205882352941178 5.767778753292368 0 1038 | 1.1911764705882353 4.975856014047415 0 1039 | 1.1911764705882353 4.080333625987711 0 1040 | 1.3235294117647058 3.323090430201935 0 1041 | 1.5588235294117647 2.5539947322212484 0 1042 | 2 1.8358208955223905 0 1043 | 2.691176470588235 1.0952589991220378 0 1044 | 3.4117647058823533 0.6540825285338041 0 1045 | 4.426470588235294 0.37093942054433704 0 1046 | 5.4411764705882355 0.44600526777875515 0 1047 | 6.147058823529412 0.7058823529411775 0 1048 | 6.794117647058823 1.1281826163301147 0 1049 | 7.1911764705882355 1.6176470588235308 0 1050 | 7.5735294117647065 2.0618964003511895 0 1051 | 7.897058823529411 2.593942054433718 0 1052 | 8 3.059701492537318 0 1053 | 7.926470588235294 3.6395961369622523 0 1054 | 7.794117647058823 4.172958735733104 0 1055 | 7.617647058823529 4.4960491659350375 0 1056 | 7.264705882352942 4.888498683055319 0 1057 | 1058 | ] 1059 | scale [ #uniform for each segment 1060 | 0.1 0.1 1061 | 0.1 0.1 1062 | 0.1 0.1 1063 | 0.1 0.1 1064 | 0.1 0.1 1065 | 0.1 0.1 1066 | 0.1 0.1 1067 | ] 1068 | beginCap TRUE 1069 | endCap TRUE 1070 | ccw TRUE 1071 | solid TRUE 1072 | convex TRUE 1073 | creaseAngle 0.0 1074 | splineSubdivision 16 1075 | } 1076 | castShadows TRUE 1077 | isPickable TRUE 1078 | } 1079 | ] 1080 | } 1081 | ] 1082 | boundingObject DEF grapplebound Group{ 1083 | children[ 1084 | USE hook1 1085 | USE hook2 1086 | USE hook3 1087 | USE hook4 1088 | ] 1089 | } 1090 | } 1091 | DEF flotation Group{ 1092 | children[ 1093 | SolidPipe{ 1094 | translation -0.103 0.24 0.323 1095 | rotation -0.3574058186283875 -0.35740681862788 0.8628565621288802 1.71778 1096 | name "float1" 1097 | height 0.025 1098 | radius 0.03 1099 | thickness 0.025 1100 | subdivision 24 1101 | accuracy 0.0000001 1102 | contactMaterial "default" 1103 | appearance Rubber {textureTransform NULL} 1104 | physics Physics { 1105 | density 200 1106 | damping Damping{ 1107 | linear 0.2 1108 | angular 0.2 1109 | } 1110 | } 1111 | enableBoundingObject TRUE 1112 | } 1113 | SolidPipe{ 1114 | translation -0.11 0.24 -0.0480345 1115 | rotation 0.6785950574695392 0.6786010574700474 -0.2810860238048953 -2.593575307179586 1116 | name "float2" 1117 | height 0.025 1118 | radius 0.03 1119 | thickness 0.025 1120 | subdivision 24 1121 | accuracy 0.0000001 1122 | contactMaterial "default" 1123 | appearance Rubber {textureTransform NULL} 1124 | physics Physics { 1125 | density 200 1126 | damping Damping{ 1127 | linear 0.2 1128 | angular 0.2 1129 | } 1130 | } 1131 | enableBoundingObject TRUE 1132 | } 1133 | SolidPipe{ 1134 | translation 0.221929 0.24 -0.0480346 1135 | rotation -0.35740507410616273 -0.3574060741063701 0.8628571789091403 1.71778 1136 | name "float3" 1137 | height 0.04 1138 | radius 0.03 1139 | thickness 0.025 1140 | subdivision 24 1141 | accuracy 0.0000001 1142 | contactMaterial "default" 1143 | appearance Rubber {textureTransform NULL} 1144 | physics Physics { 1145 | density 200 1146 | damping Damping{ 1147 | linear 0.2 1148 | angular 0.2 1149 | } 1150 | } 1151 | enableBoundingObject TRUE 1152 | } 1153 | SolidPipe{ 1154 | translation 0.225858 0.24 0.314894 1155 | rotation 0.6785950574695392 0.6786010574700474 -0.2810860238048953 -2.593575307179586 1156 | name "float4" 1157 | height 0.04 1158 | radius 0.03 1159 | thickness 0.025 1160 | subdivision 24 1161 | accuracy 0.0001 1162 | contactMaterial "default" 1163 | appearance Rubber {textureTransform NULL} 1164 | physics Physics { 1165 | density 200 1166 | damping Damping{ 1167 | linear 0.2 1168 | angular 0.2 1169 | } 1170 | } 1171 | enableBoundingObject TRUE 1172 | } 1173 | SolidRoundedBox{ 1174 | translation 0.059 0.24 0.133 1175 | rotation -0.5773482691869614 -0.57735126918836 0.57735126918836 2.09441 1176 | name "float5" 1177 | size 0.02 0.03 0.1 1178 | borderRadius 0.005 1179 | subdivision 24 1180 | # accuracy 0.0001 1181 | contactMaterial "default" 1182 | appearance Rubber {textureTransform NULL} 1183 | physics Physics { 1184 | density 200 1185 | damping Damping{ 1186 | linear 0.2 1187 | angular 0.2 1188 | } 1189 | } 1190 | enableBoundingObject TRUE 1191 | } 1192 | SolidRoundedBox{ 1193 | translation 0.0590005 0.19 0.133 1194 | rotation -0.5773482691869614 -0.57735126918836 0.57735126918836 2.09441 1195 | name "float6" 1196 | size 0.02 0.03 0.1 1197 | borderRadius 0.005 1198 | subdivision 24 1199 | # accuracy 0.0000001 1200 | contactMaterial "default" 1201 | appearance Rubber {textureTransform NULL} 1202 | physics Physics { 1203 | density 200 1204 | damping Damping{ 1205 | linear 0.2 1206 | angular 0.2 1207 | } 1208 | } 1209 | enableBoundingObject TRUE 1210 | } 1211 | ] 1212 | } 1213 | DEF cables Solid{ 1214 | name "cables" 1215 | physics Physics { 1216 | density 400 1217 | damping Damping{ 1218 | linear 0.2 1219 | angular 0.2 1220 | } 1221 | } 1222 | children[ 1223 | DEF cablemain Transform{ 1224 | translation -0.749844 -0.82735 0.6515 1225 | rotation 0.56605114850184 -0.5721841501108149 0.5934571556917249 -0.5337353071795858 1226 | scale 0.1 0.1 0.1 1227 | children[ 1228 | Shape{ 1229 | appearance GlossyPaint { 1230 | baseColor 1 1 1 1231 | textureTransform NULL 1232 | } 1233 | geometry Extrusion { 1234 | crossSection [ #this is a circle, using trig 1235 | -1 0 1236 | -0.866 0.5 1237 | -0.707 0.707 1238 | -0.5 0.866 1239 | 0 1 1240 | 0.5 0.866 1241 | 0.707 0.707 1242 | 0.866 0.5 1243 | 1 0 1244 | 0.866 -0.5 1245 | 0.707 -0.707 1246 | 0.5 -0.866 1247 | 0 -1 1248 | -0.5 -0.866 1249 | -0.707 -0.707 1250 | -0.866 -0.5 1251 | -1 0 1252 | ] 1253 | spine [ #coordinates from hook photo through apps.automeris.io 1254 | 2.85374149659864 3.530612244897963 0 1255 | 2.4557823129251704 3.755102040816329 0 1256 | 2.1271258503401365 4.061224489795922 0 1257 | 1.8312074829931975 4.510204081632656 0 1258 | 1.5990646258503403 5.224489795918371 0 1259 | 1.5803571428571432 6.000000000000005 0 1260 | 1.6245748299319733 6.530612244897965 0 1261 | 1.7117346938775515 7.326530612244904 0 1262 | 1.7121598639455788 8.08163265306123 0 1263 | 1.6726190476190481 8.857142857142863 0 1264 | 1.7912414965986398 9.530612244897966 0 1265 | 1.9234693877551026 10.367346938775519 0 1266 | 2.055272108843538 11.448979591836743 0 1267 | 2.4234693877551026 12.367346938775519 0 1268 | 2.691751700680273 12.83673469387756 0 1269 | 3.0454931972789123 13.081632653061234 0 1270 | 3.395833333333334 13.28571428571429 0 1271 | 3.8681972789115653 13.204081632653072 0 1272 | 4.321428571428572 13.142857142857153 0 1273 | 4.740221088435375 12.918367346938785 0 1274 | 4.997448979591837 12.755102040816336 0 1275 | 5.197278911564626 12.653061224489804 0 1276 | ] 1277 | scale [ #uniform for each segment 1278 | 0.05 0.05 1279 | 0.05 0.05 1280 | 0.05 0.05 1281 | 0.05 0.05 1282 | 0.05 0.05 1283 | 0.05 0.05 1284 | 0.05 0.05 1285 | ] 1286 | beginCap TRUE 1287 | endCap TRUE 1288 | ccw TRUE 1289 | solid TRUE 1290 | convex TRUE 1291 | creaseAngle 0.0 1292 | splineSubdivision 16 1293 | } 1294 | castShadows TRUE 1295 | isPickable TRUE 1296 | } 1297 | ] 1298 | } 1299 | 1300 | SolidRoundedBox{ 1301 | translation -0.389954 -0.61862 0.455783 1302 | rotation -0.31219708281512626 0.7536961999296258 -0.5783381534131797 2.67134 1303 | name "ethernet female" 1304 | size 0.04 0.03 0.05 1305 | borderRadius 0.005 1306 | subdivision 24 1307 | # accuracy 0.0000001 1308 | contactMaterial "default" 1309 | appearance GlossyPaint { 1310 | baseColor 1 1 1 1311 | textureTransform NULL 1312 | } 1313 | physics Physics { 1314 | density 500 1315 | damping Damping{ 1316 | linear 0.2 1317 | angular 0.2 1318 | } 1319 | } 1320 | enableBoundingObject TRUE 1321 | } 1322 | 1323 | DEF heavecable Transform{ 1324 | translation 0.17473 -0.0331564 0.0380049 1325 | rotation -0.10971396951147952 0.9901247248532882 0.08726897574874042 -2.9252753071795863 1326 | scale 0.07 0.09 0.08 1327 | children[ 1328 | Shape{ 1329 | appearance Copper { 1330 | textureTransform NULL 1331 | } 1332 | geometry Extrusion { 1333 | crossSection [ #this is a circle, using trig 1334 | -1 0 1335 | -0.866 0.5 1336 | -0.707 0.707 1337 | -0.5 0.866 1338 | 0 1 1339 | 0.5 0.866 1340 | 0.707 0.707 1341 | 0.866 0.5 1342 | 1 0 1343 | 0.866 -0.5 1344 | 0.707 -0.707 1345 | 0.5 -0.866 1346 | 0 -1 1347 | -0.5 -0.866 1348 | -0.707 -0.707 1349 | -0.866 -0.5 1350 | -1 0 1351 | ] 1352 | spine [ #coordinates from hook photo through apps.automeris.io 1353 | 1.74915 2.77551 0.1 1354 | 1.36267 2.38776 -0.05 1355 | 1.1522108843537415 1.6122448979591866 0 1356 | 1.285289115646258 0.9591836734693899 0 1357 | 1.5204081632653061 0.5306122448979593 0 1358 | 1359 | ] 1360 | scale [ #uniform for each segment 1361 | 0.005 0.005 1362 | 0.005 0.005 1363 | 0.005 0.005 1364 | 0.005 0.005 1365 | 0.005 0.005 1366 | 0.005 0.005 1367 | 0.005 0.005 1368 | ] 1369 | beginCap TRUE 1370 | endCap TRUE 1371 | ccw TRUE 1372 | solid TRUE 1373 | convex TRUE 1374 | creaseAngle 0.0 1375 | splineSubdivision 16 1376 | } 1377 | castShadows TRUE 1378 | isPickable TRUE 1379 | } 1380 | ] 1381 | } 1382 | DEF yawcable Transform{ 1383 | translation 0.229666 0.143346 0.264822 1384 | rotation 0.04927627098272312 0.8338985089428758 -0.5497136762905628 2.42533 1385 | scale 0.109 0.1 0.1 1386 | children[ 1387 | Shape{ 1388 | appearance Copper { 1389 | textureTransform NULL 1390 | } 1391 | geometry Extrusion { 1392 | crossSection [ #this is a circle, using trig 1393 | -1 0 1394 | -0.866 0.5 1395 | -0.707 0.707 1396 | -0.5 0.866 1397 | 0 1 1398 | 0.5 0.866 1399 | 0.707 0.707 1400 | 0.866 0.5 1401 | 1 0 1402 | 0.866 -0.5 1403 | 0.707 -0.707 1404 | 0.5 -0.866 1405 | 0 -1 1406 | -0.5 -0.866 1407 | -0.707 -0.707 1408 | -0.866 -0.5 1409 | -1 0 1410 | ] 1411 | spine [ #coordinates from hook photo through apps.automeris.io 1412 | 0.41496598639455784 1.2653061224489797 0 1413 | 0.37202380952380976 1 0 1414 | 0.3622448979591837 0.6326530612244916 0 1415 | 0.4268707482993199 0.408163265306122 0 1416 | 0.8295068027210886 0.48979591836734926 0 1417 | 1.1122448979591837 0.6326530612244916 0 1418 | 1.5493197278911564 0.8775510204081662 0 1419 | 1.9485544217687074 0.9183673469387763 0 1420 | 2.14 0.55 0.3 1421 | 2.23 0.42 -0.8 1422 | 1423 | ] 1424 | scale [ #uniform for each segment 1425 | 0.005 0.005 1426 | 0.005 0.005 1427 | 0.005 0.005 1428 | 0.005 0.005 1429 | 0.005 0.005 1430 | 0.005 0.005 1431 | 0.005 0.005 1432 | ] 1433 | beginCap TRUE 1434 | endCap TRUE 1435 | ccw TRUE 1436 | solid TRUE 1437 | convex TRUE 1438 | creaseAngle 0.0 1439 | splineSubdivision 16 1440 | } 1441 | castShadows TRUE 1442 | isPickable TRUE 1443 | } 1444 | ] 1445 | } 1446 | DEF surgecable Transform{ 1447 | translation 0.210065 -0.0813378 0.223566 1448 | rotation -0.31271392822700195 0.4449688978723077 0.839173807395787 1.92529 1449 | scale 0.109 0.1 0.1 1450 | children[ 1451 | Shape{ 1452 | appearance Copper { 1453 | textureTransform NULL 1454 | } 1455 | geometry Extrusion { 1456 | crossSection [ #this is a circle, using trig 1457 | -1 0 1458 | -0.866 0.5 1459 | -0.707 0.707 1460 | -0.5 0.866 1461 | 0 1 1462 | 0.5 0.866 1463 | 0.707 0.707 1464 | 0.866 0.5 1465 | 1 0 1466 | 0.866 -0.5 1467 | 0.707 -0.707 1468 | 0.5 -0.866 1469 | 0 -1 1470 | -0.5 -0.866 1471 | -0.707 -0.707 1472 | -0.866 -0.5 1473 | -1 0 1474 | ] 1475 | spine [ #coordinates from hook photo through apps.automeris.io 1476 | 0.5055272108843538 1.1020408163265323 0 1477 | 0.49022108843537415 0.9183673469387763 0 1478 | 0.5063775510204082 0.612244897959183 0 1479 | 0.8137755102040819 0.5510204081632679 0 1480 | 1.4260204081632655 0.8979591836734713 0 1481 | 2 0.5 0 1482 | 2.5 1.25 1 1483 | ] 1484 | scale [ #uniform for each segment 1485 | 0.005 0.005 1486 | 0.005 0.005 1487 | 0.005 0.005 1488 | 0.005 0.005 1489 | 0.005 0.005 1490 | 0.005 0.005 1491 | 0.005 0.005 1492 | ] 1493 | beginCap TRUE 1494 | endCap TRUE 1495 | ccw TRUE 1496 | solid TRUE 1497 | convex TRUE 1498 | creaseAngle 0.0 1499 | splineSubdivision 16 1500 | } 1501 | castShadows TRUE 1502 | isPickable TRUE 1503 | } 1504 | ] 1505 | } 1506 | DEF swaycable Transform{ 1507 | translation 0.0350077 -0.051338 0.0821454 1508 | rotation 0 1 0 -1.8325953071795862 1509 | scale 0.02 0.05 0.05 1510 | children[ 1511 | Shape{ 1512 | appearance Copper { 1513 | textureTransform NULL 1514 | } 1515 | geometry Extrusion { 1516 | crossSection [ #this is a circle, using trig 1517 | -1 0 1518 | -0.866 0.5 1519 | -0.707 0.707 1520 | -0.5 0.866 1521 | 0 1 1522 | 0.5 0.866 1523 | 0.707 0.707 1524 | 0.866 0.5 1525 | 1 0 1526 | 0.866 -0.5 1527 | 0.707 -0.707 1528 | 0.5 -0.866 1529 | 0 -1 1530 | -0.5 -0.866 1531 | -0.707 -0.707 1532 | -0.866 -0.5 1533 | -1 0 1534 | ] 1535 | spine [ #coordinates from hook photo through apps.automeris.io 1536 | 1 4.2 -0.1 1537 | 0.8 3.6 -0.4 1538 | 1.33588 3.4 0 1539 | 1.786139455782313 3.4693877551020442 0 1540 | 2.5522959183673475 3.1632653061224527 0 1541 | 3.0318877551020407 2.918367346938778 0 1542 | 3.9515306122448983 2.204081632653063 0 1543 | 4.120748299319728 1.7346938775510221 0 1544 | 4.246173469387755 1.4897959183673493 0 1545 | 4.250425170068027 1.0408163265306136 0 1546 | 3.9732142857142856 0.7142857142857153 0 1547 | 3.6679421768707483 0.5510204081632679 0 1548 | ] 1549 | scale [ #uniform for each segment 1550 | 0.01 0.01 1551 | 0.01 0.01 1552 | 0.01 0.01 1553 | 0.01 0.01 1554 | 0.01 0.01 1555 | 0.01 0.01 1556 | 0.01 0.01 1557 | ] 1558 | beginCap TRUE 1559 | endCap TRUE 1560 | ccw TRUE 1561 | solid TRUE 1562 | convex TRUE 1563 | creaseAngle 0.0 1564 | splineSubdivision 16 1565 | } 1566 | castShadows TRUE 1567 | isPickable TRUE 1568 | } 1569 | ] 1570 | } 1571 | ] 1572 | 1573 | boundingObject Group{ 1574 | children[ 1575 | USE cablemain 1576 | DEF ethernet Transform{ 1577 | translation -0.389954 -0.61862 0.455783 1578 | rotation -0.31219708281512626 0.7536961999296258 -0.5783381534131797 2.67134 1579 | children[ 1580 | Box{size 0.04 0.03 0.05} 1581 | ] 1582 | } 1583 | USE heavecable 1584 | USE yawcable 1585 | #USE surgecable 1586 | ] 1587 | } 1588 | 1589 | } 1590 | DEF motors Solid{ 1591 | name "motors solid" 1592 | physics Physics { 1593 | density 550 1594 | damping Damping{ 1595 | linear 0.2 1596 | angular 0.2 1597 | } 1598 | } 1599 | boundingObject Group{ 1600 | children[ 1601 | DEF yawmot Transform{ 1602 | translation 0.239999 0.180002 0.124 1603 | rotation -0.9999999984926382 -2.397449996386175e-09 5.490649991723604e-05 1.57074 1604 | children[ 1605 | Cylinder{ 1606 | bottom TRUE 1607 | height 0.07 1608 | radius 0.038 1609 | side TRUE 1610 | top TRUE 1611 | subdivision 36 1612 | } 1613 | ] 1614 | } 1615 | DEF swaymot Transform{ 1616 | translation 0.063 -0.060013 0.202999 1617 | rotation -0.5773289350704162 0.5773289350704162 0.5773929350632185 2.09443 1618 | children[ 1619 | Cylinder{ 1620 | bottom TRUE 1621 | height 0.07 1622 | radius 0.038 1623 | side TRUE 1624 | top TRUE 1625 | subdivision 36 1626 | } 1627 | ] 1628 | } 1629 | DEF surgemot Transform{ 1630 | translation 0.02 -0.019999 0.13 1631 | rotation 0.5773489358556708 0.5773509358554485 -0.5773509358554485 -2.094395307179586 1632 | children[ 1633 | Cylinder{ 1634 | bottom TRUE 1635 | height 0.07 1636 | radius 0.038 1637 | side TRUE 1638 | top TRUE 1639 | subdivision 36 1640 | } 1641 | ] 1642 | } 1643 | DEF heavemot Transform{ 1644 | translation 0.06 -0.039999 0.07 1645 | rotation -1.73924e-06 1 -6.88391e-07 -1.570795307179586 1646 | children[ 1647 | Cylinder{ 1648 | bottom TRUE 1649 | height 0.07 1650 | radius 0.038 1651 | side TRUE 1652 | top TRUE 1653 | subdivision 36 1654 | } 1655 | ] 1656 | } 1657 | ] 1658 | } 1659 | children[ 1660 | DEF yaw Transform{ 1661 | translation 0.24 0.180001 0.13 1662 | rotation 0.5773489358556708 0.5773509358554485 -0.5773509358554485 -2.094395307179586 1663 | scale 1 1 1 1664 | children[ 1665 | DEF motorshape Group{ 1666 | children[ 1667 | Shape {#Motor 1668 | appearance BrushedAluminium { textureTransform NULL } 1669 | geometry Cylinder { 1670 | height 0.05 1671 | radius 0.02 1672 | subdivision 24 1673 | } 1674 | } 1675 | Transform{ 1676 | translation 0 0.025 0 1677 | children [ 1678 | Shape {#Axle 1679 | appearance BrushedAluminium { textureTransform NULL } 1680 | geometry Cylinder { 1681 | height 0.02 1682 | radius 0.001 1683 | subdivision 24 1684 | } 1685 | } 1686 | ] 1687 | } 1688 | Transform{ 1689 | translation 0 -0.026 0 1690 | children [ 1691 | Shape {#plastic bit 1692 | appearance MetalPipePaint { textureTransform NULL } 1693 | geometry Cylinder { 1694 | height 0.001 1695 | radius 0.02 1696 | subdivision 24 1697 | } 1698 | } 1699 | ] 1700 | } 1701 | ] 1702 | } 1703 | ] 1704 | } 1705 | DEF sway Transform{ 1706 | translation 0.07 -0.059999 0.2 1707 | rotation 1.03407e-06 -2.39745e-09 1 1.5708 1708 | scale 1 1 1 1709 | children[ 1710 | USE motorshape 1711 | ] 1712 | } 1713 | DEF surge Transform{ 1714 | translation 0.02 -0.019999 0.13 1715 | rotation 0.5773489358556708 0.5773509358554485 -0.5773509358554485 -2.094395307179586 1716 | scale 1 1 1 1717 | children[ 1718 | USE motorshape 1719 | ] 1720 | } 1721 | DEF heave Transform{ 1722 | translation 0.06 -0.039999 0.07 1723 | rotation 0.70710628118604 6.106782428407177e-07 0.7071072811864377 -3.1415853071795863 1724 | scale 1 1 1 1725 | children[ 1726 | USE motorshape 1727 | ] 1728 | } 1729 | ] 1730 | } 1731 | 1732 | DEF YAW Propeller { 1733 | shaftAxis 0 0 1 1734 | centerOfThrust 0.24 0.18 0.09 1735 | thrustConstants 1 0 1736 | torqueConstants 1 0 1737 | fastHelixThreshold 1.5 # [0, inf) 1738 | device RotationalMotor { 1739 | name "yaw motor" # any string 1740 | maxTorque 1 # [0, inf) 1741 | sound "sounds/rotational_motor.wav" # any string 1742 | maxVelocity 30 1743 | } 1744 | fastHelix DEF FAST_HELIX Solid { 1745 | name "fast helix" 1746 | translation 0.24 0.18 0.09 1747 | # rotation 1 0 0 -1.5707953071795862 1748 | rotation 1 0 0 1.5708 1749 | scale 0.18 0.18 0.18 1750 | children [ 1751 | DEF FAST_MAIN_HELIX_SHAPE Shape { 1752 | appearance DEF FAST_HELIX_APPEARANCE PBRAppearance { 1753 | baseColorMap ImageTexture { 1754 | url [ 1755 | "../textures/blurred_helix.png" 1756 | ] 1757 | } 1758 | transparency 0.5 1759 | roughness 0.5 1760 | metalness 0 1761 | } 1762 | geometry Cylinder { 1763 | height 0.003 1764 | radius 0.145 1765 | side FALSE 1766 | subdivision 24 1767 | } 1768 | } 1769 | ] 1770 | } 1771 | slowHelix DEF SLOW_HELIX Solid { 1772 | name "slow helix" 1773 | translation 0.24 0.18 0.09 1774 | # rotation 1 0 0 1.5708 1775 | rotation 0 1 0 1.5708 1776 | scale 0.18 0.18 0.18 1777 | children [ 1778 | DEF SLOW_MAIN_HELIX_TRANSFORM Transform { 1779 | scale 1.5 1.5 1.5 1780 | 1781 | children [ 1782 | DEF SLOW_MAIN_HELIX_GROUP Group { 1783 | children [ 1784 | DEF TIP Transform{ 1785 | rotation 0 0 1 1.5708 1786 | scale 2 2 2 1787 | children[ 1788 | Shape { 1789 | appearance Rubber {textureTransform NULL} 1790 | geometry Capsule { 1791 | height 0.02 1792 | radius 0.01 1793 | }}] 1794 | } 1795 | DEF INSERT Transform{ 1796 | translation -0.0299985 0.000299885 0 1797 | rotation 0 0 1 1.5608 1798 | scale 5 1 5 1799 | children[ 1800 | Shape { 1801 | appearance Rubber {textureTransform NULL} 1802 | geometry Cylinder { 1803 | height 0.07 1804 | radius 0.004 1805 | } 1806 | }]} 1807 | DEF BLADE1 Transform { 1808 | translation -0.01 0.04 0 1809 | rotation 0 1 0 -0.523595307179586 1810 | children [ 1811 | DEF BLADE_SHAPE Shape { 1812 | appearance Rubber {textureTransform NULL} 1813 | geometry Box { 1814 | size 0.06 0.06 0.004 1815 | } 1816 | } 1817 | ] 1818 | } 1819 | DEF BLADE2 Transform { 1820 | translation -0.0101704 -0.0149471 0.0262451 1821 | rotation 0.8814118335171858 -0.4562539138218564 0.12225197690880428 -1.1598053071795862 1822 | children [ 1823 | DEF BLADE_SHAPE Shape { 1824 | appearance Rubber {textureTransform NULL} 1825 | geometry Box { 1826 | size 0.06 0.06 0.004 1827 | } 1828 | } 1829 | ] 1830 | } 1831 | DEF BLADE3 Transform { 1832 | translation -0.0134898 -0.0150793 -0.0288338 1833 | rotation 0.8814127531683258 0.4562518722307874 0.12225296576416202 1.1598 1834 | children [ 1835 | DEF BLADE_SHAPE Shape { 1836 | appearance Rubber {textureTransform NULL} 1837 | geometry Box { 1838 | size 0.06 0.06 0.004 1839 | } 1840 | } 1841 | ] 1842 | } 1843 | DEF BLADETIP1 Transform{ 1844 | translation -0.01 0.07 0 1845 | rotation -0.9351138487168261 -0.25056095946412593 -0.2505619594639642 1.63783 1846 | scale 1 1 1 1847 | children[ 1848 | DEF tip Shape{ 1849 | appearance Rubber {textureTransform NULL} 1850 | geometry Cylinder { 1851 | height 0.004 1852 | radius 0.03 1853 | side TRUE 1854 | subdivision 24 1855 | } 1856 | } 1857 | ] 1858 | } 1859 | DEF BLADETIP2 Transform{ 1860 | translation -0.00628804 -0.0306827 0.0514904 1861 | rotation 0.6947409354408542 0.35963096658111415 -0.6228969421169929 0.736199 1862 | scale 1 1 1 1863 | children[ 1864 | DEF tip Shape{ 1865 | appearance Rubber {textureTransform NULL} 1866 | geometry Cylinder { 1867 | height 0.004 1868 | radius 0.03 1869 | side TRUE 1870 | subdivision 24 1871 | } 1872 | } 1873 | ] 1874 | } 1875 | DEF BLADETIP3 Transform{ 1876 | translation -0.0173721 -0.0308149 -0.0540791 1877 | rotation 00.9636116709319705 0.23149392094611274 -0.13365295435825897 2.63623 1878 | scale 1 1 1 1879 | children[ 1880 | DEF tip Shape{ 1881 | appearance Rubber {textureTransform NULL} 1882 | geometry Cylinder { 1883 | height 0.004 1884 | radius 0.03 1885 | side TRUE 1886 | subdivision 24 1887 | } 1888 | } 1889 | ] 1890 | } 1891 | ] 1892 | } 1893 | ] 1894 | } 1895 | ] 1896 | } 1897 | } 1898 | DEF Sway Propeller { 1899 | shaftAxis 1 0 0 1900 | centerOfThrust 0.03 -0.06 0.2 1901 | thrustConstants 1 0 1902 | torqueConstants 1 0 1903 | fastHelixThreshold 1.5 # [0, inf) 1904 | device RotationalMotor { 1905 | name "sway motor" # any string 1906 | maxTorque 1 # [0, inf) 1907 | sound "sounds/rotational_motor.wav" # any string 1908 | maxVelocity 30 1909 | } 1910 | fastHelix Solid{ 1911 | translation 0.03 -0.06 0.2 1912 | rotation 0 0 1 1.5708 1913 | # rotation -0.577349935856137 0.577349935856137 0.5773509358560258 2.09439 1914 | scale 0.18 0.18 0.18 1915 | children[ 1916 | USE FAST_MAIN_HELIX_SHAPE 1917 | ] 1918 | } 1919 | slowHelix Solid{ 1920 | rotation 0 1 0 -3.14159 1921 | translation 0.03 -0.06 0.2 1922 | # rotation -0.577349935856137 0.577349935856137 0.5773509358560258 2.09439 1923 | scale 0.18 0.18 0.18 1924 | children[ 1925 | USE SLOW_MAIN_HELIX_TRANSFORM 1926 | ] 1927 | } 1928 | 1929 | } 1930 | DEF Surge Propeller { 1931 | shaftAxis 0 0 1 1932 | centerOfThrust 0.02 -0.02 0.09 1933 | thrustConstants 1 0 1934 | torqueConstants 1 0 1935 | fastHelixThreshold 1.5 # [0, inf) 1936 | device RotationalMotor { 1937 | name "surge motor" # any string 1938 | maxTorque 1 # [0, inf) 1939 | sound "sounds/rotational_motor.wav" # any string 1940 | maxVelocity 30 1941 | } 1942 | fastHelix Solid{ 1943 | translation 0.02 -0.02 0.09 1944 | rotation 1 0 0 1.5708 1945 | #rotation -1.6952506741258884e-09 0.70710528118436 0.707108281185553 3.14159 1946 | scale 0.18 0.18 0.18 1947 | children[ 1948 | USE FAST_MAIN_HELIX_SHAPE 1949 | ] 1950 | } 1951 | slowHelix Solid{ 1952 | translation 0.02 -0.02 0.09 1953 | rotation 0 1 0 1.5708 1954 | #rotation -1.6952506741258884e-09 0.70710528118436 0.707108281185553 3.14159 1955 | scale 0.18 0.18 0.18 1956 | children[ 1957 | USE SLOW_MAIN_HELIX_TRANSFORM 1958 | ] 1959 | } 1960 | 1961 | } 1962 | 1963 | DEF Heave Propeller { 1964 | shaftAxis 0 1 0 1965 | centerOfThrust 0.06 -0.08 0.07 1966 | thrustConstants 1 0 1967 | torqueConstants 1 0 1968 | fastHelixThreshold 1.5 # [0, inf) 1969 | device RotationalMotor { 1970 | name "heave motor" # any string 1971 | maxTorque 1 # [0, inf) 1972 | sound "sounds/rotational_motor.wav" # any string 1973 | maxVelocity 30 1974 | } 1975 | fastHelix Solid{ 1976 | translation 0.06 -0.08 0.07 1977 | rotation 0 1 0 1.5708 1978 | # rotation 9.393839999974576e-07 2.1285099999942392e-06 -0.9999999999972935 3.14159 1979 | scale 0.18 0.18 0.18 1980 | children[ 1981 | USE FAST_MAIN_HELIX_SHAPE 1982 | ] 1983 | } 1984 | slowHelix Solid{ 1985 | translation 0.06 -0.08 0.07 1986 | rotation 0 0 -1 1.5708 1987 | # rotation 9.393839999974576e-07 2.1285099999942392e-06 -0.9999999999972935 3.14159 1988 | scale 0.18 0.18 0.18 1989 | children[ 1990 | USE SLOW_MAIN_HELIX_TRANSFORM 1991 | ] 1992 | } 1993 | 1994 | } 1995 | ] 1996 | boundingObject Group{ 1997 | children[ 1998 | USE bottombound 1999 | USE midsectionbound 2000 | USE topbound 2001 | USE hook1 2002 | USE hook2 2003 | USE hook3 2004 | USE hook4 2005 | USE cablemain 2006 | USE ethernet 2007 | USE heavecable 2008 | USE yawcable 2009 | #USE surgecable 2010 | USE yawmot 2011 | USE swaymot 2012 | USE heavemot 2013 | USE surgemot 2014 | ] 2015 | } 2016 | 2017 | } 2018 | --------------------------------------------------------------------------------