ActiveSuspensionWithReverseCausality
IconActiveSuspensionWithReverseCausality
Usage
ActiveSuspensionWithReverseCausality(wheel_mass=25, wheel_stiffness=1e2, wheel_damping=1e4, car_mass=1000, suspension_stiffness=1e4, suspension_damping=10, human_and_seat_mass=100, seat_stiffness=1000, seat_damping=1, wheel_initial_position=0.5, suspension_initial_position=1, seat_initial_position=1.5, kd=20, ki=0.2, kp=1)
Parameters:
Name | Description | Units | Default value |
---|---|---|---|
wheel_mass | kg | 25 | |
wheel_stiffness | N/m | 100 | |
wheel_damping | s-1 | 10000 | |
car_mass | kg | 1000 | |
suspension_stiffness | N/m | 10000 | |
suspension_damping | s-1 | 10 | |
human_and_seat_mass | kg | 100 | |
seat_stiffness | N/m | 1000 | |
seat_damping | s-1 | 1 | |
wheel_initial_position | m | 0.5 | |
suspension_initial_position | m | 1 | |
seat_initial_position | m | 1.5 | |
kd | – | 20 | |
ki | – | 0.2 | |
kp | – | 1 |
Behavior
\[ \begin{equation} \left[ \begin{array}{c} \mathrm{connect}\left( road_{data_{+}y(t)}, road_{+}s(t) \right) \\ \mathrm{connect}\left( road_{+}flange, wheel_{+}flange_{sd} \right) \\ \mathrm{connect}\left( wheel_{+}flange_{m}, car_{and\_suspension_{+}flange\_sd} \right) \\ \mathrm{connect}\left( car_{and\_suspension_{+}flange\_m}, seat_{+}flange_{sd}, force_{+}flange_{a} \right) \\ \mathrm{connect}\left( seat_{+}flange_{m}, force_{+}flange_{b}, seat_{pos_{+}flange} \right) \\ \mathrm{connect}\left( seat_{pos_{+}s(t)}, rev_{causality_{+}u1(t)} \right) \\ \mathrm{connect}\left( set_{point_{+}y(t)}, rev_{causality_{+}u2(t)} \right) \\ \mathrm{connect}\left( rev_{causality_{+}y(t)}, force_{+}f(t) \right) \\ \mathrm{connect}\left( flange_{m}, mass_{+}flange_{b}, spring_{damper_{+}flange\_a} \right) \\ \mathrm{connect}\left( spring_{damper_{+}flange\_b}, flange_{sd} \right) \\ \mathtt{wheel.mass.flange\_a.s}\left( t \right) = - \frac{1}{2} \mathtt{wheel.mass.L} + \mathtt{wheel.mass.s}\left( t \right) \\ \mathtt{wheel.mass.flange\_b.s}\left( t \right) = \frac{1}{2} \mathtt{wheel.mass.L} + \mathtt{wheel.mass.s}\left( t \right) \\ \mathtt{wheel.mass.v}\left( t \right) = \frac{\mathrm{d} \mathtt{wheel.mass.s}\left( t \right)}{\mathrm{d}t} \\ \mathtt{wheel.mass.a}\left( t \right) = \frac{\mathrm{d} \mathtt{wheel.mass.v}\left( t \right)}{\mathrm{d}t} \\ \left( \mathtt{wheel.mass.a}\left( t \right) + \mathtt{wheel.mass.g} \sin\left( \mathtt{wheel.mass.theta} \right) \right) \mathtt{wheel.mass.m} = \mathtt{wheel.mass.flange\_b.f}\left( t \right) + \mathtt{wheel.mass.flange\_a.f}\left( t \right) \\ \mathtt{wheel.spring\_damper.s\_rel}\left( t \right) = \mathtt{wheel.spring\_damper.flange\_b.s}\left( t \right) - \mathtt{wheel.spring\_damper.flange\_a.s}\left( t \right) \\ \mathtt{wheel.spring\_damper.v\_rel}\left( t \right) = \frac{\mathrm{d} \mathtt{wheel.spring\_damper.s\_rel}\left( t \right)}{\mathrm{d}t} \\ \mathtt{wheel.spring\_damper.flange\_b.f}\left( t \right) = \mathtt{wheel.spring\_damper.f}\left( t \right) \\ \mathtt{wheel.spring\_damper.flange\_a.f}\left( t \right) = - \mathtt{wheel.spring\_damper.f}\left( t \right) \\ \mathtt{wheel.spring\_damper.f\_c}\left( t \right) = \mathtt{wheel.spring\_damper.c} \left( \mathtt{wheel.spring\_damper.s\_rel}\left( t \right) - \mathtt{wheel.spring\_damper.initial\_stretch}\left( t \right) \right) \\ \frac{\mathrm{d} \mathtt{wheel.spring\_damper.initial\_stretch}\left( t \right)}{\mathrm{d}t} = 0 \\ \mathtt{wheel.spring\_damper.f\_d}\left( t \right) = \mathtt{wheel.spring\_damper.d} \mathtt{wheel.spring\_damper.v\_rel}\left( t \right) \\ \mathtt{wheel.spring\_damper.f}\left( t \right) = \mathtt{wheel.spring\_damper.f\_c}\left( t \right) + \mathtt{wheel.spring\_damper.f\_d}\left( t \right) \\ \mathtt{wheel.spring\_damper.lossPower}\left( t \right) = \mathtt{wheel.spring\_damper.f\_d}\left( t \right) \mathtt{wheel.spring\_damper.v\_rel}\left( t \right) \\ \mathrm{connect}\left( flange_{m}, mass_{+}flange_{b}, spring_{damper_{+}flange\_a} \right) \\ \mathrm{connect}\left( spring_{damper_{+}flange\_b}, flange_{sd} \right) \\ \mathtt{car\_and\_suspension.mass.flange\_a.s}\left( t \right) = - \frac{1}{2} \mathtt{car\_and\_suspension.mass.L} + \mathtt{car\_and\_suspension.mass.s}\left( t \right) \\ \mathtt{car\_and\_suspension.mass.flange\_b.s}\left( t \right) = \frac{1}{2} \mathtt{car\_and\_suspension.mass.L} + \mathtt{car\_and\_suspension.mass.s}\left( t \right) \\ \mathtt{car\_and\_suspension.mass.v}\left( t \right) = \frac{\mathrm{d} \mathtt{car\_and\_suspension.mass.s}\left( t \right)}{\mathrm{d}t} \\ \mathtt{car\_and\_suspension.mass.a}\left( t \right) = \frac{\mathrm{d} \mathtt{car\_and\_suspension.mass.v}\left( t \right)}{\mathrm{d}t} \\ \left( \mathtt{car\_and\_suspension.mass.a}\left( t \right) + \mathtt{car\_and\_suspension.mass.g} \sin\left( \mathtt{car\_and\_suspension.mass.theta} \right) \right) \mathtt{car\_and\_suspension.mass.m} = \mathtt{car\_and\_suspension.mass.flange\_a.f}\left( t \right) + \mathtt{car\_and\_suspension.mass.flange\_b.f}\left( t \right) \\ \mathtt{car\_and\_suspension.spring\_damper.s\_rel}\left( t \right) = \mathtt{car\_and\_suspension.spring\_damper.flange\_b.s}\left( t \right) - \mathtt{car\_and\_suspension.spring\_damper.flange\_a.s}\left( t \right) \\ \mathtt{car\_and\_suspension.spring\_damper.v\_rel}\left( t \right) = \frac{\mathrm{d} \mathtt{car\_and\_suspension.spring\_damper.s\_rel}\left( t \right)}{\mathrm{d}t} \\ \mathtt{car\_and\_suspension.spring\_damper.flange\_b.f}\left( t \right) = \mathtt{car\_and\_suspension.spring\_damper.f}\left( t \right) \\ \mathtt{car\_and\_suspension.spring\_damper.flange\_a.f}\left( t \right) = - \mathtt{car\_and\_suspension.spring\_damper.f}\left( t \right) \\ \mathtt{car\_and\_suspension.spring\_damper.f\_c}\left( t \right) = \mathtt{car\_and\_suspension.spring\_damper.c} \left( \mathtt{car\_and\_suspension.spring\_damper.s\_rel}\left( t \right) - \mathtt{car\_and\_suspension.spring\_damper.initial\_stretch}\left( t \right) \right) \\ \frac{\mathrm{d} \mathtt{car\_and\_suspension.spring\_damper.initial\_stretch}\left( t \right)}{\mathrm{d}t} = 0 \\ \mathtt{car\_and\_suspension.spring\_damper.f\_d}\left( t \right) = \mathtt{car\_and\_suspension.spring\_damper.d} \mathtt{car\_and\_suspension.spring\_damper.v\_rel}\left( t \right) \\ \mathtt{car\_and\_suspension.spring\_damper.f}\left( t \right) = \mathtt{car\_and\_suspension.spring\_damper.f\_d}\left( t \right) + \mathtt{car\_and\_suspension.spring\_damper.f\_c}\left( t \right) \\ \mathtt{car\_and\_suspension.spring\_damper.lossPower}\left( t \right) = \mathtt{car\_and\_suspension.spring\_damper.v\_rel}\left( t \right) \mathtt{car\_and\_suspension.spring\_damper.f\_d}\left( t \right) \\ \mathrm{connect}\left( flange_{m}, mass_{+}flange_{b}, spring_{damper_{+}flange\_a} \right) \\ \mathrm{connect}\left( spring_{damper_{+}flange\_b}, flange_{sd} \right) \\ \mathtt{seat.mass.flange\_a.s}\left( t \right) = - \frac{1}{2} \mathtt{seat.mass.L} + \mathtt{seat.mass.s}\left( t \right) \\ \mathtt{seat.mass.flange\_b.s}\left( t \right) = \frac{1}{2} \mathtt{seat.mass.L} + \mathtt{seat.mass.s}\left( t \right) \\ \mathtt{seat.mass.v}\left( t \right) = \frac{\mathrm{d} \mathtt{seat.mass.s}\left( t \right)}{\mathrm{d}t} \\ \mathtt{seat.mass.a}\left( t \right) = \frac{\mathrm{d} \mathtt{seat.mass.v}\left( t \right)}{\mathrm{d}t} \\ \left( \mathtt{seat.mass.a}\left( t \right) + \mathtt{seat.mass.g} \sin\left( \mathtt{seat.mass.theta} \right) \right) \mathtt{seat.mass.m} = \mathtt{seat.mass.flange\_b.f}\left( t \right) + \mathtt{seat.mass.flange\_a.f}\left( t \right) \\ \mathtt{seat.spring\_damper.s\_rel}\left( t \right) = \mathtt{seat.spring\_damper.flange\_b.s}\left( t \right) - \mathtt{seat.spring\_damper.flange\_a.s}\left( t \right) \\ \mathtt{seat.spring\_damper.v\_rel}\left( t \right) = \frac{\mathrm{d} \mathtt{seat.spring\_damper.s\_rel}\left( t \right)}{\mathrm{d}t} \\ \mathtt{seat.spring\_damper.flange\_b.f}\left( t \right) = \mathtt{seat.spring\_damper.f}\left( t \right) \\ \mathtt{seat.spring\_damper.flange\_a.f}\left( t \right) = - \mathtt{seat.spring\_damper.f}\left( t \right) \\ \mathtt{seat.spring\_damper.f\_c}\left( t \right) = \mathtt{seat.spring\_damper.c} \left( \mathtt{seat.spring\_damper.s\_rel}\left( t \right) - \mathtt{seat.spring\_damper.initial\_stretch}\left( t \right) \right) \\ \frac{\mathrm{d} \mathtt{seat.spring\_damper.initial\_stretch}\left( t \right)}{\mathrm{d}t} = 0 \\ \mathtt{seat.spring\_damper.f\_d}\left( t \right) = \mathtt{seat.spring\_damper.d} \mathtt{seat.spring\_damper.v\_rel}\left( t \right) \\ \mathtt{seat.spring\_damper.f}\left( t \right) = \mathtt{seat.spring\_damper.f\_d}\left( t \right) + \mathtt{seat.spring\_damper.f\_c}\left( t \right) \\ \mathtt{seat.spring\_damper.lossPower}\left( t \right) = \mathtt{seat.spring\_damper.f\_d}\left( t \right) \mathtt{seat.spring\_damper.v\_rel}\left( t \right) \\ \mathtt{road\_data.y}\left( t \right) = ifelse\left( rem\left( t, \mathtt{road\_data.loop} \right) < \mathtt{road\_data.offset}, 0, ifelse\left( - \mathtt{road\_data.offset} + rem\left( t, \mathtt{road\_data.loop} \right) > \mathtt{road\_data.freq}, 0, \mathtt{road\_data.bump} \left( 1 - \cos\left( \frac{6.2832 \left( - \mathtt{road\_data.offset} + t \right)}{\mathtt{road\_data.freq}} \right) \right) \right) \right) \\ \mathtt{rev\_causality.u1}\left( t \right) = \mathtt{rev\_causality.u2}\left( t \right) \\ \mathtt{road.v}\left( t \right) = \frac{\mathrm{d} \mathtt{road.s}\left( t \right)}{\mathrm{d}t} \\ \mathtt{road.a}\left( t \right) = \frac{\mathrm{d} \mathtt{road.v}\left( t \right)}{\mathrm{d}t} \\ \mathtt{road.flange.s}\left( t \right) = \mathtt{road.s}\left( t \right) \\ \mathtt{force.flange\_a.f}\left( t \right) = \mathtt{force.f}\left( t \right) \\ \mathtt{force.flange\_b.f}\left( t \right) = - \mathtt{force.f}\left( t \right) \\ \mathtt{set\_point.y}\left( t \right) = \mathtt{set\_point.k} \\ 0 = \mathtt{seat\_pos.flange.f}\left( t \right) \\ \mathtt{seat\_pos.flange.s}\left( t \right) = \mathtt{seat\_pos.s}\left( t \right) \\ \end{array} \right] \end{equation} \]
Source
component ActiveSuspensionWithReverseCausality
wheel = MassSpringDamper(m=wheel_mass, d=wheel_damping, c=wheel_stiffness, g=-10, theta=pi/2, s0=wheel_initial_position) [{
"JuliaSim": {"placement": {"icon": {"x1": 825, "y1": 675, "x2": 925, "y2": 775, "rot": 90}}}
}]
car_and_suspension = MassSpringDamper(m=car_mass, d=suspension_damping, c=suspension_stiffness, g=-10, theta=pi/2, s0=suspension_initial_position) [{
"JuliaSim": {"placement": {"icon": {"x1": 825, "y1": 500, "x2": 925, "y2": 600, "rot": 90}}}
}]
seat = MassSpringDamper(m=human_and_seat_mass, d=seat_damping, c=seat_stiffness, g=-10, theta=pi/2, s0=seat_initial_position) [{
"JuliaSim": {"placement": {"icon": {"x1": 825, "y1": 325, "x2": 925, "y2": 425, "rot": 90}}}
}]
road_data = RoadData() [{
"JuliaSim": {"placement": {"icon": {"x1": 500, "y1": 730, "x2": 600, "y2": 830}}}
}]
rev_causality = BlockComponents.ReverseCausality() [{
"JuliaSim": {"placement": {"icon": {"x1": 500, "y1": 325, "x2": 600, "y2": 425}}}
}]
road = SimplePosition() [{
"JuliaSim": {"placement": {"icon": {"x1": 650, "y1": 730, "x2": 750, "y2": 830}}}
}]
force = TranslationalComponents.Force() [{
"JuliaSim": {
"placement": {"icon": {"x1": 650, "y1": 325, "x2": 750, "y2": 425, "rot": 270}}
}
}]
set_point = BlockComponents.Constant(k=1.5) [{
"JuliaSim": {"placement": {"icon": {"x1": 350, "y1": 355, "x2": 450, "y2": 455}}}
}]
seat_pos = TranslationalComponents.PositionSensor() [{
"JuliaSim": {
"placement": {"icon": {"x1": 700, "y1": 150, "x2": 800, "y2": 250, "rot": 180}}
}
}]
parameter wheel_mass::JSML.Mass = 25
parameter wheel_stiffness::TranslationalSpringConstant = 1e2
parameter wheel_damping::DampingCoefficient = 1e4
parameter car_mass::JSML.Mass = 1000
parameter suspension_stiffness::TranslationalSpringConstant = 1e4
parameter suspension_damping::DampingCoefficient = 10
parameter human_and_seat_mass::JSML.Mass = 100
parameter seat_stiffness::TranslationalSpringConstant = 1000
parameter seat_damping::DampingCoefficient = 1
parameter wheel_initial_position::JSML.Position = 0.5
parameter suspension_initial_position::JSML.Position = 1
parameter seat_initial_position::JSML.Position = 1.5
parameter kd::Real = 20
parameter ki::Real = 0.2
parameter kp::Real = 1
relations
connect(road.s, road_data.y) [{"JuliaSim": {"edges": [{"S": 2, "E": 1}]}}]
connect(road.flange, wheel.flange_sd) [{"JuliaSim": {"edges": [{"S": 2, "M": [{"x": 875, "y": 780}], "E": 1}]}}]
connect(wheel.flange_m, car_and_suspension.flange_sd) [{"JuliaSim": {"edges": [{"S": 2, "E": 1}]}}]
connect(car_and_suspension.flange_m, seat.flange_sd, force.flange_a) [{
"JuliaSim": {
"edges": [
{"S": -1, "E": 1},
{"S": -1, "E": 2},
{"S": -1, "M": [{"x": 700, "y": 440}], "E": 3}
],
"junctions": [{"x": 875, "y": 440}]
}
}]
connect(seat.flange_m, force.flange_b, seat_pos.flange) [{
"JuliaSim": {
"edges": [
{"S": -1, "E": 1},
{"S": -1, "M": [{"x": 700, "y": 310}], "E": 2},
{"S": -1, "M": [{"x": 875, "y": 200}], "E": 3}
],
"junctions": [{"x": 875, "y": 310}]
}
}]
connect(seat_pos.s, rev_causality.u1) [{
"JuliaSim": {"edges": [{"S": 1, "M": [{"x": 475, "y": 200}, {"x": 475, "y": 345}], "E": 2}]}
}]
connect(set_point.y, rev_causality.u2) [{"JuliaSim": {"edges": [{"S": 2, "E": 1}]}}]
connect(rev_causality.y, force.f) [{"JuliaSim": {"edges": [{"S": 2, "E": 1}]}}]
metadata {
"JuliaSim": {
"tests": {
"case1": {
"stop": 10,
"expect": {
"initial": {
"wheel.mass.s": 0.5,
"seat.mass.s": 1.5,
"car_and_suspension.mass.s": 1,
"wheel.mass.v": 0,
"wheel.spring_damper.initial_stretch": 112,
"car_and_suspension.mass.v": 0,
"car_and_suspension.spring_damper.initial_stretch": 0.6,
"seat.mass.v": 0,
"seat.spring_damper.initial_stretch": 0,
"rev_causality.y": -500
},
"final": {
"wheel.mass.s": 0.50042654,
"seat.mass.s": 1.5,
"car_and_suspension.mass.s": 0.99786154,
"wheel.mass.v": -0.00256717338,
"wheel.spring_damper.initial_stretch": 112,
"car_and_suspension.mass.v": -0.0041980752,
"car_and_suspension.spring_damper.initial_stretch": 0.6,
"seat.mass.v": 0,
"seat.spring_damper.initial_stretch": 0,
"rev_causality.y": -497.8573432765645
},
"signals": [
"wheel.mass.s",
"seat.mass.s",
"car_and_suspension.mass.s",
"wheel.mass.v",
"car_and_suspension.mass.v",
"seat.mass.v",
"rev_causality.y"
]
}
}
}
}
}
end
Flattened Source
component ActiveSuspensionWithReverseCausality wheel = MassSpringDamper(m=wheel_mass, d=wheel_damping, c=wheel_stiffness, g=-10, theta=pi/2, s0=wheel_initial_position) [{ "JuliaSim": {"placement": {"icon": {"x1": 825, "y1": 675, "x2": 925, "y2": 775, "rot": 90}}} }] car_and_suspension = MassSpringDamper(m=car_mass, d=suspension_damping, c=suspension_stiffness, g=-10, theta=pi/2, s0=suspension_initial_position) [{ "JuliaSim": {"placement": {"icon": {"x1": 825, "y1": 500, "x2": 925, "y2": 600, "rot": 90}}} }] seat = MassSpringDamper(m=human_and_seat_mass, d=seat_damping, c=seat_stiffness, g=-10, theta=pi/2, s0=seat_initial_position) [{ "JuliaSim": {"placement": {"icon": {"x1": 825, "y1": 325, "x2": 925, "y2": 425, "rot": 90}}} }] road_data = RoadData() [{ "JuliaSim": {"placement": {"icon": {"x1": 500, "y1": 730, "x2": 600, "y2": 830}}} }] rev_causality = BlockComponents.ReverseCausality() [{ "JuliaSim": {"placement": {"icon": {"x1": 500, "y1": 325, "x2": 600, "y2": 425}}} }] road = SimplePosition() [{ "JuliaSim": {"placement": {"icon": {"x1": 650, "y1": 730, "x2": 750, "y2": 830}}} }] force = TranslationalComponents.Force() [{ "JuliaSim": { "placement": {"icon": {"x1": 650, "y1": 325, "x2": 750, "y2": 425, "rot": 270}} } }] set_point = BlockComponents.Constant(k=1.5) [{ "JuliaSim": {"placement": {"icon": {"x1": 350, "y1": 355, "x2": 450, "y2": 455}}} }] seat_pos = TranslationalComponents.PositionSensor() [{ "JuliaSim": { "placement": {"icon": {"x1": 700, "y1": 150, "x2": 800, "y2": 250, "rot": 180}} } }] parameter wheel_mass::JSML.Mass = 25 parameter wheel_stiffness::TranslationalSpringConstant = 1e2 parameter wheel_damping::DampingCoefficient = 1e4 parameter car_mass::JSML.Mass = 1000 parameter suspension_stiffness::TranslationalSpringConstant = 1e4 parameter suspension_damping::DampingCoefficient = 10 parameter human_and_seat_mass::JSML.Mass = 100 parameter seat_stiffness::TranslationalSpringConstant = 1000 parameter seat_damping::DampingCoefficient = 1 parameter wheel_initial_position::JSML.Position = 0.5 parameter suspension_initial_position::JSML.Position = 1 parameter seat_initial_position::JSML.Position = 1.5 parameter kd::Real = 20 parameter ki::Real = 0.2 parameter kp::Real = 1 relations connect(road.s, road_data.y) [{"JuliaSim": {"edges": [{"S": 2, "E": 1}]}}] connect(road.flange, wheel.flange_sd) [{"JuliaSim": {"edges": [{"S": 2, "M": [{"x": 875, "y": 780}], "E": 1}]}}] connect(wheel.flange_m, car_and_suspension.flange_sd) [{"JuliaSim": {"edges": [{"S": 2, "E": 1}]}}] connect(car_and_suspension.flange_m, seat.flange_sd, force.flange_a) [{ "JuliaSim": { "edges": [ {"S": -1, "E": 1}, {"S": -1, "E": 2}, {"S": -1, "M": [{"x": 700, "y": 440}], "E": 3} ], "junctions": [{"x": 875, "y": 440}] } }] connect(seat.flange_m, force.flange_b, seat_pos.flange) [{ "JuliaSim": { "edges": [ {"S": -1, "E": 1}, {"S": -1, "M": [{"x": 700, "y": 310}], "E": 2}, {"S": -1, "M": [{"x": 875, "y": 200}], "E": 3} ], "junctions": [{"x": 875, "y": 310}] } }] connect(seat_pos.s, rev_causality.u1) [{ "JuliaSim": {"edges": [{"S": 1, "M": [{"x": 475, "y": 200}, {"x": 475, "y": 345}], "E": 2}]} }] connect(set_point.y, rev_causality.u2) [{"JuliaSim": {"edges": [{"S": 2, "E": 1}]}}] connect(rev_causality.y, force.f) [{"JuliaSim": {"edges": [{"S": 2, "E": 1}]}}] metadata { "JuliaSim": { "tests": { "case1": { "stop": 10, "expect": { "initial": { "wheel.mass.s": 0.5, "seat.mass.s": 1.5, "car_and_suspension.mass.s": 1, "wheel.mass.v": 0, "wheel.spring_damper.initial_stretch": 112, "car_and_suspension.mass.v": 0, "car_and_suspension.spring_damper.initial_stretch": 0.6, "seat.mass.v": 0, "seat.spring_damper.initial_stretch": 0, "rev_causality.y": -500 }, "final": { "wheel.mass.s": 0.50042654, "seat.mass.s": 1.5, "car_and_suspension.mass.s": 0.99786154, "wheel.mass.v": -0.00256717338, "wheel.spring_damper.initial_stretch": 112, "car_and_suspension.mass.v": -0.0041980752, "car_and_suspension.spring_damper.initial_stretch": 0.6, "seat.mass.v": 0, "seat.spring_damper.initial_stretch": 0, "rev_causality.y": -497.8573432765645 }, "signals": [ "wheel.mass.s", "seat.mass.s", "car_and_suspension.mass.s", "wheel.mass.v", "car_and_suspension.mass.v", "seat.mass.v", "rev_causality.y" ] } } } } } end