You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
* introduce stateless option in slip wheels
* add damping to wheel rotation
* add some tests
* tweak tol
* move from self-hosted to ubuntu-latest since we made repo public
* update docs manifest
* rm explicit dev
* not ssh
Copy file name to clipboardExpand all lines: docs/src/examples/suspension.md
+34-19Lines changed: 34 additions & 19 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -183,6 +183,8 @@ nothing # hide
183
183
184
184

185
185
186
+
Due to the high excitation frequency, we make use of the argument `timescale = 3` when we render the 3D animation to slow down the animation by a factor of 3.
The example below further extends the example from above by adding wheels to the suspension system. The excitation is not modeled as a time-varying surface profile, provided through the `surface` argument to the [`SlippingWheel`](@ref) component.
272
-
The connection between the wheels and the ground form two kinematic loops together with the `body_upright` joint, we thus set all wheels to be cut joints using `iscut=true`. We start by adding a wheel to the quarter-car setup and then to the half-car setup.
274
+
The connection between the wheels and the ground form two kinematic loops together with the `body_upright` joint, which we can handle in one of two ways.
275
+
1. include a cut joint in the loop, e.g., by setting all wheels to be cut joints using `iscut=true`.
276
+
2. Remove angular state variables from the wheels by passing `state = false`. Since we do not need the angular state variables in this case, we choose this option which reduces the total number of unknowns to solve for.
277
+
278
+
We start by adding a wheel to the quarter-car setup and then to the half-car setup.
273
279
274
280
### Quarter car
275
281
```@example suspension
282
+
using ModelingToolkitStandardLibrary.Mechanical.Rotational
276
283
@mtkmodel ExcitedWheelAssembly begin
277
284
@structural_parameters begin
278
285
mirror = false
@@ -289,24 +296,28 @@ The connection between the wheels and the ground form two kinematic loops togeth
# Note the ParentScope qualifier, without this, the parameters are treated as belonging to the wheel.wheel_joint component instead of the ExcitedWheelAssembly
303
310
surface = (x,z)->ParentScope(ParentScope(amplitude))*(sin(2pi*ParentScope(ParentScope(freq))*t)), # Excitation from a time-varying surface profile
Copy file name to clipboardExpand all lines: src/wheels.jl
+35-17Lines changed: 35 additions & 17 deletions
Original file line number
Diff line number
Diff line change
@@ -281,8 +281,12 @@ Joint for a wheel with slip rolling on a surface.
281
281
- `mu_A`: Friction coefficient at adhesion
282
282
- `mu_S`: Friction coefficient at sliding
283
283
- `surface`: By default, the wheel is rolling on a flat xz plane. A function `surface = (x, z)->y` may be provided to define a road surface. The function should return the height of the road at `(x, z)`. Note: if a function that depends on parameters is provided, make sure the parameters are scoped appropriately using, e.g., `ParentScope`.
284
+
- `state`: (structural) whether or not the component has angular state variables. Default is `true`.
285
+
286
+
# State and iscut
287
+
When the wheel is mounted on an axis that is rooted, one may either supply `state=false` or `iscut = true`. With `state = false`, the angular state variables are not included in the wheel and there is thus no kinematic chain introduced. This reduces the total number of variables in the system. if the angular variables are required, one may instead pass `iscut=true` to cut the kinematic loop that is introduced when coupling the angles of the wheel to the orientation of the `frame_a`, unless this is cut elsewhere.
0 commit comments