Skip to content

Commit e5f35a3

Browse files
Merge pull request #94 from ModiaSim/an_elasticResponse
An elastic response
2 parents 67e955c + 72e319d commit e5f35a3

File tree

15 files changed

+129
-67
lines changed

15 files changed

+129
-67
lines changed

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name = "Modia3D"
22
uuid = "07f2c1e0-90b0-56cf-bda7-b44b56e34eed"
33
authors = ["Andrea Neumayr <[email protected]>", "Martin Otter <[email protected]>", "Gerhard Hippmann <[email protected]>"]
4-
version = "0.8.0"
4+
version = "0.8.1"
55

66
[deps]
77
Colors = "5ae59095-9a9b-59fe-a467-6f913c188581"

docs/src/index.md

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,12 +48,21 @@ Download and install the free DLR SimVis Community Edition, e.g. with [https://v
4848

4949
## Release Notes
5050

51+
### Version 0.8.1
52+
53+
- `collisionSmoothingRadius`: edges are smoothed with `collisionSmoothingRadius`
54+
- its default value is `0.001`, if it is set to `0.0` no smoothing takes place
55+
- the edges of Box, Cylinder, Cone, and Beam are smoothened with `collisionSmoothingRadius`
56+
- For using Herz' pressure `contactSphereRadius` is introduced for each shape
57+
- it can be user set
58+
- otherwise, it is calculated from shape geometry
59+
5160
### Version 0.8.0
5261

5362
- Require ModiaLang 0.10.0 (e.g. require DifferentialEquations 7)
54-
- Support animation export for FloatType = Measurements.XXX (animation is performed for the nominal value).
55-
- Remove PathPlanning struct und functions (and instead use the functionality from ModiaLang 0.9.1).
56-
- Reactivate test model test/old/Test_PathPlanning.jl
63+
- Support animation export for `FloatType = Measurements.XXX` (animation is performed for the nominal value).
64+
- Remove PathPlanning struct und functions (and instead use the functionality from ModiaLang 0.9.1).
65+
- Reactivate test model `test/old/Test_PathPlanning.jl`
5766
- Remove unused files: .codecov.yml, .travis.yml, appveyor.yml
5867
- Fix import/using of some tests.
5968

src/Composition/responseCalculation/elasticCollisionResponse.jl

Lines changed: 38 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -36,28 +36,24 @@ function resultantDampingCoefficient(cor, abs_vreln, vsmall, maximumContactDampi
3636
return d_res
3737
end
3838

39-
4039
function elasticContactPairCoefficients(obj1::Object3D, obj2::Object3D)
41-
if typeof(obj1.feature.shape) <: Modia3D.Shapes.Sphere && typeof(obj2.feature.shape) <: Modia3D.Shapes.Sphere
42-
r1 = obj1.feature.shape.diameter*0.5
43-
r2 = obj2.feature.shape.diameter*0.5
44-
mu_r_geo = r1*r2/(r1 + r2)
45-
n_geo = 1.5
46-
c_geo = 4/3*sqrt(mu_r_geo)
47-
elseif typeof(obj1.feature.shape) <: Modia3D.Shapes.Sphere && typeof(obj2.feature.shape) != Modia3D.Shapes.Sphere
48-
mu_r_geo = obj1.feature.shape.diameter*0.5
49-
n_geo = 1.5
50-
c_geo = 4/3*sqrt(mu_r_geo)
51-
elseif typeof(obj1.feature.shape) != Modia3D.Shapes.Sphere && typeof(obj2.feature.shape) <: Modia3D.Shapes.Sphere
52-
mu_r_geo = obj2.feature.shape.diameter*0.5
40+
solid1::Shapes.Solid = obj1.feature
41+
solid2::Shapes.Solid = obj2.feature
42+
43+
if !solid1.isFlat && solid2.isFlat
44+
mu_r_geo = solid1.contactSphereRadius
45+
elseif solid1.isFlat && !solid2.isFlat
46+
mu_r_geo = solid2.contactSphereRadius
47+
else # (solid1.isFlat && solid2.isFlat) || (!solid1.isFlat && !solid2.isFlat)
48+
r1 = solid1.contactSphereRadius
49+
r2 = solid2.contactSphereRadius
50+
mu_r_geo = r1*r2/(r1 + r2)
51+
end
52+
5353
n_geo = 1.5
5454
c_geo = 4/3*sqrt(mu_r_geo)
55-
else
56-
mu_r_geo = 1.0
57-
n_geo = 1.0
58-
c_geo = 1.0
59-
end
60-
return (c_geo, n_geo, mu_r_geo)
55+
56+
return (c_geo, n_geo, mu_r_geo)
6157
end
6258

6359

@@ -86,28 +82,28 @@ function contactStart(matPair::Shapes.ElasticContactPairMaterial,
8682
nu1 = mat1.PoissonsRatio
8783
nu2 = mat2.PoissonsRatio
8884
if E1 <= 0.0 || E2 <= 0.0 || nu1 <= 0.0 || nu1 >= 1.0 ||
89-
nu2 <= 0.0 || nu2 >= 1.0 || elasticContactReductionFactor <= 0.0
90-
responseMaterial = nothing
85+
nu2 <= 0.0 || nu2 >= 1.0 || elasticContactReductionFactor <= 0.0
86+
responseMaterial = nothing
9187
else
92-
@assert(E1 > 0.0)
93-
@assert(E2 > 0.0)
94-
@assert(nu1 > 0.0 && nu1 < 1.0)
95-
@assert(nu2 > 0.0 && nu2 < 1.0)
96-
@assert(elasticContactReductionFactor > 0.0)
97-
c1 = E1/(1 - nu1^2)
98-
c2 = E2/(1 - nu2^2)
99-
c_res = elasticContactReductionFactor*c1*c2/(c1 + c2)
100-
101-
# Compute damping constant
102-
delta_dot_start = normalRelativeVelocityAtContact(obj1, obj2, rContact, contactNormal)
103-
d_res = Modia3D.resultantDampingCoefficient(matPair.coefficientOfRestitution, abs(delta_dot_start), matPair.vsmall, maximumContactDamping)
104-
105-
# Determine other coefficients
106-
(c_geo, n_geo, mu_r_geo) = elasticContactPairCoefficients(obj1,obj2)
107-
responseMaterial = ElasticContactPairResponseMaterial(c_res, c_geo, n_geo, d_res,
108-
matPair.slidingFrictionCoefficient,
109-
matPair.rotationalResistanceCoefficient, mu_r_geo,
110-
matPair.vsmall, matPair.wsmall)
88+
@assert(E1 > 0.0)
89+
@assert(E2 > 0.0)
90+
@assert(nu1 > 0.0 && nu1 < 1.0)
91+
@assert(nu2 > 0.0 && nu2 < 1.0)
92+
@assert(elasticContactReductionFactor > 0.0)
93+
c1 = E1/(1 - nu1^2)
94+
c2 = E2/(1 - nu2^2)
95+
c_res = elasticContactReductionFactor*c1*c2/(c1 + c2)
96+
97+
# Compute damping constant
98+
delta_dot_start = normalRelativeVelocityAtContact(obj1, obj2, rContact, contactNormal)
99+
d_res = Modia3D.resultantDampingCoefficient(matPair.coefficientOfRestitution, abs(delta_dot_start), matPair.vsmall, maximumContactDamping)
100+
101+
# Determine other coefficients
102+
(c_geo, n_geo, mu_r_geo) = elasticContactPairCoefficients(obj1,obj2)
103+
responseMaterial = ElasticContactPairResponseMaterial(c_res, c_geo, n_geo, d_res,
104+
matPair.slidingFrictionCoefficient,
105+
matPair.rotationalResistanceCoefficient, mu_r_geo,
106+
matPair.vsmall, matPair.wsmall)
111107
end
112108
return responseMaterial
113109
end
@@ -163,11 +159,8 @@ function responseCalculation(material::ElasticContactPairResponseMaterial, obj1:
163159
e_t_reg = v_t/Modia3D.regularize(norm(v_t),vsmall)
164160
delta = -s
165161

166-
if c_geo != 1.0 && n_geo != 1.0
167-
delta_comp = delta * sqrt(abs(delta))
168-
else
169-
delta_comp = delta
170-
end
162+
delta_comp = delta * sqrt(abs(delta))
163+
171164
#fn = -max(F(0.0), c_res * c_geo * delta_comp * (1 - d_res*delta_dot) )
172165
fn = -c_res * c_geo * delta_comp * (1 - d_res*delta_dot)
173166
ft = -mu_k*fn*e_t_reg

src/Modia3D.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
module Modia3D
55

66
const path = dirname(dirname(@__FILE__)) # Absolute path of package directory
7-
const Version = "0.8.0"
8-
const Date = "2022-02-07"
7+
const Version = "0.8.1"
8+
const Date = "2022-02-11"
99

1010

1111
# println("\nImporting Modia3D Version $Version ($Date)")

src/Shapes/geometry.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,7 @@ mutable struct FileMesh <: Modia3D.AbstractGeometry
235235

236236
# for solids only
237237
centroid::SVector{3,Float64}
238+
shortestEdge::Float64
238239
longestEdge::Float64
239240
objPoints::Vector{SVector{3,Float64}}
240241
facesIndizes::Vector{SVector{3,Int64}}

src/Shapes/setCollisionSmoothingRadius.jl

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,3 +30,37 @@ function setCollisionSmoothingRadius(shape::Beam{F}, collisionSmoothingRadius::F
3030
collisionSmoothingRadius2 = min(collisionSmoothingRadius, F(0.1)*min(shape.length, shape.width, shape.thickness)) # at most 10% of the smallest edge length
3131
return collisionSmoothingRadius2
3232
end
33+
34+
35+
setContactSphereRadius(shape::Nothing, contactSphereRadius::Nothing, ::Type{F}) where F <: Modia3D.VarFloatType = (false, F(NaN))
36+
37+
setContactSphereRadius(shape::Sphere{F}, contactSphereRadius::Nothing, ::Type{F}) where F <: Modia3D.VarFloatType = (false, F(shape.diameter * 0.5) )
38+
setContactSphereRadius(shape::Sphere{F}, contactSphereRadius::F, ::Type{F}) where F <: Modia3D.VarFloatType = (false, contactSphereRadius)
39+
40+
41+
setContactSphereRadius(shape::Ellipsoid{F}, contactSphereRadius::Nothing, ::Type{F}) where F <: Modia3D.VarFloatType = (false, F(min(shape.lengthX, shape.lengthY, shape.lengthZ)*0.5) )
42+
setContactSphereRadius(shape::Ellipsoid{F}, contactSphereRadius::F, ::Type{F}) where F <: Modia3D.VarFloatType = (false, contactSphereRadius )
43+
44+
45+
setContactSphereRadius(shape::Cylinder{F}, contactSphereRadius::Nothing, ::Type{F}) where F <: Modia3D.VarFloatType = (false, F(min(shape.diameter, shape.length)*0.5) )
46+
setContactSphereRadius(shape::Cylinder{F}, contactSphereRadius::F, ::Type{F}) where F <: Modia3D.VarFloatType = (false, contactSphereRadius )
47+
48+
49+
setContactSphereRadius(shape::Capsule{F}, contactSphereRadius::Nothing, ::Type{F}) where F <: Modia3D.VarFloatType = (false, F(shape.diameter*0.5) )
50+
setContactSphereRadius(shape::Capsule{F}, contactSphereRadius::F, ::Type{F}) where F <: Modia3D.VarFloatType = (false, contactSphereRadius )
51+
52+
53+
setContactSphereRadius(shape::Cone{F}, contactSphereRadius::Nothing, ::Type{F}) where F <: Modia3D.VarFloatType = (false, F((shape.diameter + shape.topDiameter)*0.25) )
54+
setContactSphereRadius(shape::Cone{F}, contactSphereRadius::F, ::Type{F}) where F <: Modia3D.VarFloatType = (false, contactSphereRadius )
55+
56+
57+
setContactSphereRadius(shape::Box{F}, contactSphereRadius::Nothing, ::Type{F}) where F <: Modia3D.VarFloatType = (true, F(min(shape.lengthX, shape.lengthY, shape.lengthZ)*0.5) )
58+
setContactSphereRadius(shape::Box{F}, contactSphereRadius::F, ::Type{F}) where F <: Modia3D.VarFloatType = (true, contactSphereRadius )
59+
60+
61+
setContactSphereRadius(shape::Beam{F}, contactSphereRadius::Nothing, ::Type{F}) where F <: Modia3D.VarFloatType = (true, F(min(shape.length, shape.width, shape.thickness)*0.5) )
62+
setContactSphereRadius(shape::Beam{F}, contactSphereRadius::F, ::Type{F}) where F <: Modia3D.VarFloatType = (true, contactSphereRadius )
63+
64+
65+
setContactSphereRadius(shape::FileMesh, contactSphereRadius::Nothing, ::Type{F}) where F <: Modia3D.VarFloatType = (false, F(shape.shortestEdge * 0.5) )
66+
setContactSphereRadius(shape::FileMesh, contactSphereRadius::F, ::Type{F}) where F <: Modia3D.VarFloatType = (false, contactSphereRadius )

src/Shapes/solid.jl

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44
massProperties = nothing,
55
collision = false,
66
contactMaterial = "",
7-
collisionSmoothingRadius = 0.0,
7+
collisionSmoothingRadius = 0.001,
8+
contactSphereRadius = nothing,
89
visualMaterial = VisualMaterial())
910
1011
Generate a [Solid](@ref) with physical behavior of a rigid body with mass, visualization and collision properties.
@@ -35,6 +36,22 @@ Generate a [Solid](@ref) with physical behavior of a rigid body with mass, visua
3536
3637
- `collisionSmoothingRadius`: Defines a collision smoothing radius for surface edges, its default value is `0.001`. It takes the minimum value of your collision smoothing radius and 10% of the smallest shape length, like `min(collisionSmoothingRadius, 0.1 min(shape dimensions))`. If it is set to `0.0` no `collisionSmoothingRadius` is used. A `collisionSmoothingRadius` is used for `Box`, `Cylinder`, `Cone`, and `Beam`.
3738
39+
- `contactSphereRadius`: for each shape a `contactSphereRadius` is defined. So that Herz' pressure is used in [Response calculation](@ref) not only for spheres. You can define your own `contactSphereRadius`, otherwise it is computed from shape geometry (sketched in the following table).
40+
41+
42+
| Shape | `contactSphereRadius` from shape |
43+
|:--------------------------|:---------------------------------|
44+
| [Sphere](@ref) | `diameter/2` |
45+
| [Ellipsoid](@ref) | `min(lengthX, lengthY, lengthZ)/2` |
46+
| [Box](@ref) | `min(lengthX, lengthY, lengthZ)/2` |
47+
| [Cylinder](@ref) | `min(diameter, length)/2` |
48+
| [Cone](@ref) | `(diameter + topDiameter)/4` |
49+
| [Capsule](@ref) | `diameter/2` |
50+
| [Beam](@ref) | `min(length, width, thickness)/2` |
51+
| [FileMesh](@ref) | `shortestEdge/2` |
52+
53+
For flat shapes, [Box](@ref) and [Beam](@ref), no `contactSphereRadius` is taken. For Herz' pressure it is needed only if two flat shapes are colliding.
54+
3855
- `visualMaterial`: Defines the material of the solid used for visualization. A pre-defined [Visual material](@ref)
3956
from palettes/visualMaterials.json (e.g. `"RedTransparent"`) or a user-defined [Visual material](@ref) (e.g.
4057
`VisualMaterial(color="DeepSkyBlue4", transparency=0.75)`) can be used.
@@ -59,6 +76,8 @@ struct Solid{F <: Modia3D.VarFloatType} <: Modia3D.AbstractObject3DFeature
5976
contactMaterial::Union{String,Modia3D.AbstractContactMaterial,Nothing}
6077
collisionSmoothingRadius::F
6178
visualMaterial::Union{Shapes.VisualMaterial,Nothing}
79+
isFlat::Bool
80+
contactSphereRadius::F
6281

6382
function Solid{F}(;
6483
shape::Union{Modia3D.AbstractGeometry,Nothing} = nothing,
@@ -68,7 +87,8 @@ struct Solid{F <: Modia3D.VarFloatType} <: Modia3D.AbstractObject3DFeature
6887
contactMaterial::AbstractString = "",
6988
collisionSmoothingRadius=F(0.001),
7089
visualMaterial::Union{Shapes.VisualMaterial,AbstractString,Nothing} = Shapes.VisualMaterial(),
71-
visualMaterialConvexDecomposition::Union{Shapes.VisualMaterial,AbstractString,Nothing} = Shapes.VisualMaterial()) where F <: Modia3D.VarFloatType
90+
visualMaterialConvexDecomposition::Union{Shapes.VisualMaterial,AbstractString,Nothing} = Shapes.VisualMaterial(),
91+
contactSphereRadius::Union{Nothing, F} = nothing) where F <: Modia3D.VarFloatType
7292

7393
if collision && isnothing(shape)
7494
error("For collision/gripping simulations, a shape must be defined.")
@@ -94,12 +114,13 @@ struct Solid{F <: Modia3D.VarFloatType} <: Modia3D.AbstractObject3DFeature
94114
end
95115

96116
if typeof(shape) == FileMesh
97-
(shape.centroid, shape.longestEdge, shape.objPoints, shape.facesIndizes) = getMeshInfos(shape.filename, shape.scaleFactor)
117+
(shape.centroid, shape.shortestEdge, shape.longestEdge, shape.objPoints, shape.facesIndizes) = getMeshInfos(shape.filename, shape.scaleFactor)
98118
(shape.volume, shape.centroidAlgo, shape.inertia) = computeMassProperties(shape.objPoints, shape.facesIndizes; bodyCoords=false)
99119
end
100120

101121
massProperties = createMassProperties(F, massProperties, shape, solidMaterial)
102-
new(shape, solidMaterial, massProperties, collision, contactMaterial, setCollisionSmoothingRadius(shape, F(collisionSmoothingRadius)), visualMaterial)
122+
(isFlat, contactSphereRadius) = setContactSphereRadius(shape, contactSphereRadius, F)
123+
new(shape, solidMaterial, massProperties, collision, contactMaterial, setCollisionSmoothingRadius(shape, F(collisionSmoothingRadius)), visualMaterial, isFlat, contactSphereRadius)
103124
end
104125
end
105126
Solid(args...; kwargs...) = Solid{Float64}(args...; kwargs...)

src/Shapes/utilities.jl

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ end
3636

3737

3838
# Utility functions for FileMesh.jl
39-
# getMeshInfos(): read file and return centroid, longestEdge and mesh data
39+
# getMeshInfos(): read file and return centroid, shortestEdge, longestEdge and mesh data
4040
#
4141
# VHACD(): decomposes a concave file mesh in convex sub parts
4242
# see: https://github.com/kmammou/v-hacd
@@ -47,6 +47,7 @@ function getMeshInfos(filename::AbstractString, scaleFactor::SVector{3,Float64})
4747
vertices = Vector{SVector{3,Float64}}()
4848
faces = Vector{SVector{3,Int64}}()
4949
centroid::SVector{3,Float64} = Modia3D.ZeroVector3D(Float64)
50+
shortestEdge::Float64 = 0.0
5051
longestEdge::Float64 = 0.0
5152

5253
mesh = FileIO.load(filename, pointtype=MeshIO.Point3{Float64}, facetype=MeshIO.TriangleFace{MeshIO.OneIndex{Int64}})
@@ -86,10 +87,11 @@ function getMeshInfos(filename::AbstractString, scaleFactor::SVector{3,Float64})
8687
sum += vertices[i]
8788
end
8889
centroid = sum / length(vertices)
90+
shortestEdge = min((x_max-x_min), (y_max-y_min), (z_max-z_min))
8991
longestEdge = max((x_max-x_min), (y_max-y_min), (z_max-z_min))
9092
end
9193

92-
return (centroid, longestEdge, vertices, faces)
94+
return (centroid, shortestEdge, longestEdge, vertices, faces)
9395
end
9496

9597
getMeshInfos(filename::AbstractString, scaleFactor::AbstractVector) =

test/Collision/BouncingBeams.jl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,8 @@ bouncingBeams = @instantiateModel(buildModia3D(BouncingBeams), unitless=true, lo
7777

7878
stopTime = 1.2
7979
tolerance = 1e-8
80-
requiredFinalStates = [-0.8527742342910635, 1.6578017942923853, 0.04577174265530922, -0.7904903307190998, 0.3784209895248903, -0.048541407443668916, 4.511726495865782, 1.371932459718465, -1.510024797043685, -7.155505879183188, -0.6205909597968676, 0.6202303171080142, 0.04600259422130081, -0.8603712066366127, 1.6591872146181508, -0.05012483182230522, -0.8502027335229523, 0.39228915465700764, 3.3084796917299557, 0.1357058823264399, -1.6011728205254234, 0.5652834075330013, -7.593556822874329, -0.55350211235096, 1.6580899516035195, 0.04573950567885933, -0.8547165339765472, 0.38182577225339254, -0.048923116390466426, -0.8057409130731289, -1.559903565016631, 0.140455404024548, 3.3294946971080854, -0.6029565330774422, 0.6048964881953146, -7.269193867332278]
80+
requiredFinalStates = [-0.8104568745056254, 1.7973874611151963,
81+
-0.04182468212042101, -0.6843977605721305, 1.1626826154110008, -0.4579740595633442, 4.49795019668019, -1.2036633128916912, -1.4661864515779968, 7.374259609209814, 0.25467343019105243, 0.09496510178329644, -0.04316792788452747, -0.8118074155564607, 1.79878733239027, -0.45837679978147955, -0.7109008517331268, 1.1662784938747761, 5.9164930138891965, -0.3057751186242098, -1.6453594624487566, 0.09509462328382953, 7.372754384939963, 0.2531821792141959, 1.8050541127713922, -0.04525571158341206, -0.8223444493426333, 1.1809620524502702, -0.4635597953934979, -0.8311350825736231, -1.527376219825907, 0.31839879289639594, 5.985690312517948, 0.3021665793506058, 0.14598734167247776, 7.745079948909601]
8182
simulate!(bouncingBeams, stopTime=stopTime, tolerance=tolerance, log=true, logStates=false, logEvents=false, requiredFinalStates=requiredFinalStates)
8283

8384
@usingModiaPlot

test/Collision/BouncingCapsules.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,9 +66,9 @@ bouncingCapsules = @instantiateModel(buildModia3D(BouncingCapsules), unitless=tr
6666
#@show bouncingCapsules.parameterExpressions
6767
#@show bouncingCapsules.parameters
6868

69-
stopTime = 1.7
69+
stopTime = 1.4
7070
tolerance = 1e-8
71-
requiredFinalStates = [-0.7965194324923187, 1.0792671324200518, 0.22983676627347815, -0.1039097850692818, 0.4814176273397363, -0.07448832005070478, 2.944368266298714, -0.23188092804556582, 1.5637806069044045, 2.4254147963752337, 0.1958593686673586, -0.049049991414040636, 0.22982554355367993, -0.7965131155676861, 1.0792581962112746, -0.07973508965627857, -0.11418691979366435, 0.48039300578570787, 3.377894872964063, 0.19183612343753909, -1.6238015814380535, -0.0420638591264601, 2.4255988934027917, 0.1666656948426664, 1.0793274621567706, 0.23012495483972084, -0.7967193671718964, 0.4805756438722489, -0.07905877747249435, -0.12952010214850182, -1.5655006683501074, 0.19873974775783254, 3.3726826053720087, 0.17806826424566943, -0.04410873189732083, 2.426030228460745]
71+
requiredFinalStates = [-0.7673604039864523, 0.9516988414284928, 0.24982620243724654, 0.014180822268884124, 0.5036323273267752, -0.18340022474242668, 1.5220127656990843, 1.1890544892808237, 1.4103120626088645, 2.622092435351728, -0.22352345880886096, -0.10544477069267612, 0.2498438864904243, -0.7676017038880056, 0.951656101955695, -0.18458496829981588, 0.013038547274916143, 0.503371330630657, 2.7566146861930125, 0.20558772188486563, -1.552314769388157, -0.10825787299295013, 2.6224532099355535, -0.23084017453690012, 0.9516460970951072, 0.249610396714428, -0.767900681642965, 0.5031767718168185, -0.1856868932825187, 0.017287282775231304, -1.510292025990061, 0.19727749473740247, 2.753891529551364, -0.23790362799901707, -0.11054266322392534, 2.6231546726843544]
7272
simulate!(bouncingCapsules, stopTime=stopTime, tolerance=tolerance, log=true, logStates=false, logEvents=false, requiredFinalStates=requiredFinalStates)
7373

7474
@usingModiaPlot

0 commit comments

Comments
 (0)