@@ -24,7 +24,7 @@ If `axisflange`, flange connectors for ModelicaStandardLibrary.Mechanics.Rotatio
24
24
"""
25
25
@component function Revolute (; name, phi0 = 0 , w0 = 0 , n = Float64[0 , 0 , 1 ], axisflange = false ,
26
26
isroot = true , iscut = false , radius = 0.05 , length = radius, color = [0.5019608f0 ,0.0f0 ,0.5019608f0 ,1.0f0 ], state_priority = 3.0 )
27
- if ! (eltype (n) <: Num )
27
+ if ! (eltype (n) <: Num ) && ! isa (n, Symbolics . Arr{Num, 1 })
28
28
norm (n) ≈ 1 || error (" Axis of rotation must be a unit vector" )
29
29
end
30
30
@named frame_a = Frame ()
@@ -37,7 +37,7 @@ If `axisflange`, flange connectors for ModelicaStandardLibrary.Mechanics.Rotatio
37
37
end
38
38
@variables tau (t)= 0 [
39
39
connect = Flow,
40
- state_priority = 2 ,
40
+ # state_priority = 2,
41
41
description = " Driving torque in direction of axis of rotation" ,
42
42
]
43
43
@variables phi (t)= phi0 [
@@ -102,8 +102,8 @@ If `axisflange`, flange connectors for ModelicaStandardLibrary.Mechanics.Transla
102
102
The function returns an ODESystem representing the prismatic joint.
103
103
"""
104
104
@component function Prismatic (; name, n = Float64[0 , 0 , 1 ], axisflange = false ,
105
- s0 = 0 , v0 = 0 , radius = 0.05 , color = [0 ,0.8 ,1 ,1 ], state_priority= 10 , iscut= false )
106
- if ! (eltype (n) <: Num )
105
+ s0 = 0 , v0 = 0 , radius = 0.05 , color = [0 ,0.8 ,1 ,1 ], state_priority= 10 , iscut= false , render = true )
106
+ if ! (eltype (n) <: Num ) && ! isa (n, Symbolics . Arr{Num, 1 })
107
107
norm (n) ≈ 1 || error (" Prismatic axis of motion must be a unit vector, got norm(n) = $(norm (n)) " )
108
108
end
109
109
@named frame_a = Frame ()
@@ -114,6 +114,7 @@ The function returns an ODESystem representing the prismatic joint.
114
114
pars = @parameters begin
115
115
radius = radius, [description = " radius of the joint in animations" ]
116
116
color[1 : 4 ] = color, [description = " color of the joint in animations (RGBA)" ]
117
+ render = render, [description = " render the joint in animations" ]
117
118
end
118
119
119
120
@variables s (t)= s0 [
@@ -125,7 +126,6 @@ The function returns an ODESystem representing the prismatic joint.
125
126
description = " Relative velocity between frame_a and frame_b" ,
126
127
]
127
128
@variables a (t)= 0 [
128
- state_priority = state_priority,
129
129
description = " Relative acceleration between frame_a and frame_b" ,
130
130
]
131
131
@variables f (t)= 0 [
@@ -987,3 +987,54 @@ s_y=prismatic_y.s=0` and `phi=revolute.phi=0`.
987
987
connect (revolute. frame_b, frame_b)
988
988
end
989
989
end
990
+
991
+ @mtkmodel Cylindrical begin
992
+ begin
993
+ n_def = [1 , 0 , 0 ] # Workaround for mtkmodel bug
994
+ cylinder_color_def = [1 , 0 , 1 , 1 ]
995
+ end
996
+
997
+ @structural_parameters begin
998
+ # _state_priority = 2 # mtkmodel bug prevents this from being any form of parameter at all :/
999
+ cylinder_color = [1 , 0 , 1 , 1 ]# , [description = "Color of cylinder"]
1000
+ end
1001
+
1002
+ @parameters begin
1003
+ n[1 : 3 ] = n_def, [description = " Cylinder axis resolved in frame_a (= same as in frame_b)" ]
1004
+ cylinder_diameter = 0.05 , [description = " Diameter of cylinder" ]
1005
+ render = true , [description = " Enable rendering of the joint in animations" ]
1006
+ end
1007
+ begin
1008
+ n = collect (n)
1009
+ cylinder_color = collect (cylinder_color)
1010
+ end
1011
+
1012
+ @components begin
1013
+ frame_a = Frame ()
1014
+ frame_b = Frame ()
1015
+ prismatic = Prismatic (; n, state_priority= 1 , render = false )
1016
+ revolute = Revolute (; n, state_priority= 1 , color = cylinder_color, radius = cylinder_diameter/ 2 )
1017
+ end
1018
+
1019
+ @variables begin
1020
+ (s (t) = 0 ), [state_priority = 200 , description = " Relative distance between frame_a and frame_b" ]
1021
+ (phi (t) = 0 ), [state_priority = 200 , description = " Relative rotation angle from frame_a to frame_b" ]
1022
+ (v (t) = 0 ), [state_priority = 200 , description = " First derivative of s (relative velocity)" ]
1023
+ (w (t) = 0 ), [state_priority = 200 , description = " First derivative of angle phi (relative angular velocity)" ]
1024
+ (a (t) = 0 ), [description = " Second derivative of s (relative acceleration)" ]
1025
+ (wd (t) = 0 ), [description = " Second derivative of angle phi (relative angular acceleration)" ]
1026
+ end
1027
+
1028
+ @equations begin
1029
+ phi ~ revolute. phi
1030
+ w ~ D (phi)
1031
+ wd ~ D (w)
1032
+ s ~ prismatic. s
1033
+ v ~ D (s)
1034
+ a ~ D (v)
1035
+ connect (frame_a, prismatic. frame_a)
1036
+ connect (prismatic. frame_b, revolute. frame_a)
1037
+ connect (revolute. frame_b, frame_b)
1038
+ end
1039
+
1040
+ end
0 commit comments