@@ -24,7 +24,7 @@ If `axisflange`, flange connectors for ModelicaStandardLibrary.Mechanics.Rotatio
2424"""
2525@component function Revolute (; name, phi0 = 0 , w0 = 0 , n = Float64[0 , 0 , 1 ], axisflange = false ,
2626 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 })
2828 norm (n) ≈ 1 || error (" Axis of rotation must be a unit vector" )
2929 end
3030 @named frame_a = Frame ()
@@ -37,7 +37,7 @@ If `axisflange`, flange connectors for ModelicaStandardLibrary.Mechanics.Rotatio
3737 end
3838 @variables tau (t)= 0 [
3939 connect = Flow,
40- state_priority = 2 ,
40+ # state_priority = 2,
4141 description = " Driving torque in direction of axis of rotation" ,
4242 ]
4343 @variables phi (t)= phi0 [
@@ -102,8 +102,8 @@ If `axisflange`, flange connectors for ModelicaStandardLibrary.Mechanics.Transla
102102The function returns an ODESystem representing the prismatic joint.
103103"""
104104@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 })
107107 norm (n) ≈ 1 || error (" Prismatic axis of motion must be a unit vector, got norm(n) = $(norm (n)) " )
108108 end
109109 @named frame_a = Frame ()
@@ -114,6 +114,7 @@ The function returns an ODESystem representing the prismatic joint.
114114 pars = @parameters begin
115115 radius = radius, [description = " radius of the joint in animations" ]
116116 color[1 : 4 ] = color, [description = " color of the joint in animations (RGBA)" ]
117+ render = render, [description = " render the joint in animations" ]
117118 end
118119
119120 @variables s (t)= s0 [
@@ -125,7 +126,6 @@ The function returns an ODESystem representing the prismatic joint.
125126 description = " Relative velocity between frame_a and frame_b" ,
126127 ]
127128 @variables a (t)= 0 [
128- state_priority = state_priority,
129129 description = " Relative acceleration between frame_a and frame_b" ,
130130 ]
131131 @variables f (t)= 0 [
@@ -987,3 +987,54 @@ s_y=prismatic_y.s=0` and `phi=revolute.phi=0`.
987987 connect (revolute. frame_b, frame_b)
988988 end
989989end
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