Skip to content

Commit 0c2dda2

Browse files
Improve FreeMotion zero crossing function for arbitrary initial states
1 parent be4d1bf commit 0c2dda2

File tree

2 files changed

+3
-2
lines changed

2 files changed

+3
-2
lines changed

src/ModiaInterface/_module.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ export multibodyResiduals!, setModiaJointVariables!
1616
export Fix
1717
export Revolute, RevoluteWithFlange
1818
export Prismatic, PrismaticWithFlange
19-
export J123, J132, J123or132, FreeMotion, change_rotSequenceInNextIteration!
19+
export J123, J132, J123or132, singularRem, FreeMotion, change_rotSequenceInNextIteration!
2020

2121
export buildModia3D
2222

src/ModiaInterface/model3D.jl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,7 @@ function change_rotSequenceInNextIteration!(rot::AbstractVector, isrot123::Bool,
163163
end
164164

165165

166+
singularRem(ang) = abs(rem2pi(ang, RoundNearest)) - 1.5 # is negative/positive in valid/singular angle range
166167
J123or132(rot, isrot123) = isrot123 ? J123(rot) : J132(rot)
167168

168169

@@ -181,7 +182,7 @@ FreeMotion(; obj1, obj2, r=Var(init=zeros(3)), rot=Var(init=zeros(3)), v=Var(ini
181182
der(r) = v
182183

183184
isrot123 = pre(next_isrot123)
184-
rot2_singularity = positive( abs(rot[2]) - 1.5 )
185+
rot2_singularity = positive(singularRem(rot[2]))
185186
next_isrot123 = if rot2_singularity; change_rotSequenceInNextIteration!(rot, isrot123, instantiatedModel, _x, _rotName) else isrot123 end
186187
der(rot) = J123or132(rot,isrot123) * w
187188

0 commit comments

Comments
 (0)