Implement Mechanics#
This page gives the shared mechanics of the implements: tool forces in soil, the hitch, the PTO, the hydraulics and the field marks. The Implement Catalog gives the mechanics that are specific to each implement.
Scope and Assumptions#
The implement model is an engine-free model in AcresImplementModel.h. The game calls StepImplement one time in each physics step.
The inputs are the speed of the Maxxum, the speed of the PTO shaft, the soil below the tools and the controls of the operator.
The outputs are the items that the Maxxum feels:
- a force and a moment at the attachment point,
- the torque and the power at the PTO shaft,
- the hydraulic power,
- the mass, the centre of mass and the inertia of the implement with its payload.
The model uses these assumptions.
- The soil strength obeys the Mohr-Coulomb law. The interface between soil and metal has adhesion and friction.
- A mounted implement is a rigid part of the chassis. The linkage moves it up and down, and the implement does not pitch.
- One soil state applies to the full width of the implement. One ground offset gives the ground height below the tools.
- The soil forces come from soil mechanics and not from a draft table. The force models are McKyes, Godwin-Spoor, Godwin-Seig-Allott and Bekker.
- The speed changes the forces through the inertia of the soil only. The model has no strain-rate effect.
- The model computes side forces, but the implement has no lateral dynamics of its own.
The ASABE D497.7 draft table has two functions in the code.
AsabeD497Draft is the reference of the validation for the implement model.
ImplementDraftN in AcresVehicleModel.h gives the draft of the harvest cutter, the potato digger and the implements of the legacy tractor.
The Implement Catalog describes these machines.
Frames and Sign Conventions#
All quantities use SI units. The tractor frame is FLU: X points forward, Y points to the left and Z points up. The origin of the tractor frame is on the ground below the rear axle. A mounted implement has its own frame. Its origin is on the ground below the lower hitch pins at a lift angle of zero. The linkage is a parallelogram, thus the implement frame moves and does not turn.
The rig files and the model use the same rotation about the Y axis.
For a point \((x, z)\), a pivot \((x_p, z_p)\) and an angle \(a\), ImplRotateY computes:
A positive angle lifts the points that are behind the pivot.
Symbols#
| Symbol | Quantity | Unit |
|---|---|---|
| \(c\) | Cohesion of the soil | Pa |
| \(\phi\) | Internal friction angle of the soil | rad |
| \(c_a\) | Adhesion between soil and metal | Pa |
| \(\delta\) | Friction angle between soil and metal | rad |
| \(\rho_d\) | Dry bulk density of the soil | kg/m³ |
| \(\rho\) | Moist density of the soil | kg/m³ |
| \(\gamma\) | Unit weight of the soil, \(\rho g\) | N/m³ |
| \(\theta_v\) | Volumetric water content | m³/m³ |
| \(CI\) | Cone index | Pa |
| \(k_c, k_\phi, n\) | Bekker moduli and sinkage exponent | N/m^(n+1), N/m^(n+2), 1 |
| \(K\) | Janosi-Hanamoto shear modulus | m |
| \(r_t\) | Tilled modulus ratio | 1 |
| \(d\) | Working depth of a tool | m |
| \(d_c\) | Critical depth of a tine | m |
| \(w\) | Width of a tool | m |
| \(\alpha\) | Rake angle of the tool face from the horizontal | rad |
| \(\beta\) | Angle of the failure plane from the horizontal | rad |
| \(q\) | Surcharge on the soil surface | Pa |
| \(v\) | Forward speed of the Maxxum | m/s |
| \(f(v)\) | Speed fade factor | 1 |
| \(H, V\) | Horizontal and vertical soil force on a tool | N |
| \(D, S\) | Draft and side force of a disc | N |
| \(\theta\) | Lift angle of the lower links | rad |
| \(L\) | Length of a lower link | m |
| \(h\) | Height of the implement frame above the local ground | m |
| \(z_g\) | Ground offset below the tools | m |
| \(F_t\) | Force in the top link, positive in tension | N |
| \(F_{lx}, F_{lz}\) | Force of the lower links on the implement | N |
| \(F_r, p_r\) | Force and pressure of the lift rams | N, Pa |
| \(\lambda\) | Position of the hitch lever, 0 to 1 | 1 |
| \(F_{set}, F_f\) | Draft set-point and filtered sensed draft | N |
| \(K_p, K_i\) | Gains of the draft control | rad, rad/s |
| \(\omega_e, \omega_{pto}\) | Speed of the engine and of the PTO shaft | rad/s |
| \(P_{pto}, P_{hyd}\) | PTO power and hydraulic pump shaft power | W |
| \(Q\) | Oil flow | m³/s |
| \(m, \mathbf{r}_c\) | Mass and centre of mass of the implement | kg, m |
| \(g\) | Standard gravity, 9.80665 | m/s² |
| \(\Delta t\) | Physics step, 1/120 | s |
Soil State#
The structure FImplementSoil holds the soil below the implement. The moist density is:
The source function is ImplementSoilMoistDensity.
Soil from the Soil Library#
In the game, ImplementSoilFromLibrary makes the implement soil from the soil library that the tyres use.
The pawn reads the soil at a point 0.6 m in front of the tool zone, because the tools cut that ground next.
Tyre and Soil describes the soil library and SoilStateAt.
The friction angles, the densities, the cone index and the Bekker values come from the soil state with these limits:
The cohesion is different. The soil library gives the suction part of the cohesion for the footprint of a tyre. A tool breaks the topsoil along the pores between the aggregates, and these pores drain first. The model thus decreases the suction part with the relation of Vanapalli and Fredlund:
Here \(w_L\) and \(w_P\) are the liquid limit and the plastic limit, and \(\ell\) is the looseness. \(S_e\) is the effective saturation and \(u\) is the undrained share. The undrained strength of wet fine soil does not change.
The tilled modulus ratio compares the soil class at its loose density with the current state:
\(B\) is the bearing ratio of the soil state.
Loosening of Tilled Soil#
Tillage changes the soil for the subsequent passes. The farm marks each cell of 0.25 m that a tine implement or the disc harrow worked.
On a marked cell, ImplementSoilAt uses the loose density of the soil class and sets the root cohesion to zero.
The ruts of the wheels then compact that soil again with CompactedDensity.
A second tillage pass thus has less draft, and the tyres sink more.
Some tools operate in soil that the same implement loosened immediately before. The openers of the seed drill are an example.
For these tools, ImplTilled scales the soil with \(R = \mathrm{clamp}(r_t, 0.01, 1)\):
Hard Surfaces#
Pavement and gravel roads are not soil that a tool can fail. On these surfaces ImplementSoilAt returns a hard soil:
\(c = 0\), \(\phi = \delta = 5°\), \(\rho_d = 200\) kg/m³, \(c_a = 0\), \(CI = 20\) MPa, \(k_c = 0\), \(k_\phi = 10^{10}\), \(n = 1\), \(r_t = 1\) and \(K = 2\) mm.
Tines then feel almost no force. Rollers, wheels and disc rims bear on the hard ground.
Soil Presets#
The tests and the validation use three presets from ImplementSoilPreset. The file implements/soils.json contains the same values.
| Name | Type | Unit | Default | Description |
|---|---|---|---|---|
cohesion_pa |
number | Pa | 12000 | Cohesion. 22000 for wet_silty_clay_loam, 1500 for sand. |
friction_angle_deg |
number | deg | 32 | Internal friction angle. 17 and 34 for the two other presets. |
bulk_density_kg_m3 |
number | kg/m³ | 1350 | Dry bulk density. 1300 and 1550. |
adhesion_pa |
number | Pa | 2000 | Adhesion between soil and metal. 10000 and 200. |
soil_metal_friction_deg |
number | deg | 22 | Friction angle between soil and metal. 15 and 24. |
cone_index_pa |
number | Pa | 1500000 | Cone index. 800000 and 1000000. |
water_content |
number | m³/m³ | 0.15 | Volumetric water content. 0.34 and 0.08. |
texture |
integer | 1 | ASABE texture group: 0 fine, 1 medium, 2 coarse. | |
bekker_kc |
number | N/m^(n+1) | 60 | Cohesive sinkage modulus. 13190 and 102000. |
bekker_kphi |
number | N/m^(n+2) | 5880000 | Frictional sinkage modulus. 692150 and 5301000. |
bekker_n |
number | 1.01 | Sinkage exponent. 0.5 and 0.79. | |
tilled_modulus_ratio |
number | 0.3 | Tilled modulus ratio \(r_t\). | |
janosi_k_m |
number | m | 0.025 | Shear modulus. 0.025 and 0.01. |
The column Default gives the preset dry_loam. The strength values are typical values of the tillage layer after McKyes.
The Bekker values are Grenville loam, Thai clay and LETE sand from Wong, Table 2.3.
Speed Fade#
A soil failure force resists the motion, thus it must be zero when the Maxxum does not move. The model multiplies these forces by a fade factor:
A draft force uses \(f(v)\) with its sign. A vertical force or a side force uses \(|f(v)|\). The bearing force of a disc rim and the load of a wheel are static forces and do not fade.
Soil Wedge#
SoilWedgeForce is the universal earthmoving equation of McKyes. A soil wedge fails in front of an inclined tool face.
The wedge is between the tool face with the rake angle \(\alpha\) and a flat failure plane with the angle \(\beta\).
The wedge has weight, surcharge, cohesion, adhesion and inertia. For one angle \(\beta\), with \(m = \cot\alpha + \cot\beta\):
The force on the tool face for each unit of width has a weight part and a second part:
For a narrow tine, the side wedges of the crescent of Godwin and Spoor increase the width:
For a wide blade in plane strain, \(w_{eff} = w\). The total force and its components are:
\(H\) acts against the travel. A positive \(V\) pulls the tool down. The soil fails along the plane that gives the smallest \(H\). The function scans 17 values of \(\beta\) from 0.03 rad to \(\pi/2 - 0.01\) rad. Then a golden-section search with 18 iterations finds the minimum. A value of \(\beta\) is not possible when \(\beta + \phi \ge \pi\), \(\Delta \le 10^{-6}\), \(m \le 10^{-6}\) or \(1 + \tan\beta\cot\alpha \le 10^{-6}\).
The function also returns the rupture distance \(r = d\,m\) and the depth of the resultant as a fraction of \(d\):
The inputs have limits: \(\alpha\) from 0.05 rad to \(\pi - 0.05\) rad, and \(\phi\) and \(\delta\) from 0 to 1.3 rad.
Tines#
TineSoilForce adds the critical depth of Godwin and Spoor. Above the critical depth \(d_c\), the soil fails upward in a crescent.
Below it, the soil flows around the tine in horizontal planes. The resistance of this lateral failure at the depth \(z\) for each unit of depth is:
For \(\phi < 10^{-4}\) the code uses \(N_c' = 1.5\pi + 2\). The crescent force is \(H_c(d)\) from SoilWedgeForce with the crescent width and no surcharge.
Each soil layer fails in the mode that needs less force. The critical depth is thus the depth where the slope of the crescent force is equal to the lateral resistance:
The code computes the slope with a central difference of \(\max(10^{-4}, 0.01 d)\) and finds \(d_c\) with 16 bisection steps. When the slope at the full depth is less than \(l(d)\), then \(d_c = d\) and no lateral failure occurs. The forces of the tine are:
The resultant acts at this depth below the surface:
The height of the resultant above the tine point is \(h_F = \mathrm{clamp}(d - z_R, 0, d)\). The draft thus increases with approximately the square of the depth, and the inertia term increases with the square of the speed.
Discs#
DiscSoilForce uses the equivalent-blade method of Godwin, Seig and Allott for a concave disc.
The disc has the diameter \(D_d\), the radius \(R = D_d/2\), the dish depth \(h_d\), the disc angle \(\beta_d\) to the travel direction and the tilt \(\tau\).
With the depth \(d\) of the lowest rim point, the geometry is:
\(R_s\) is the radius of the sphere and \(2a\) is the chord at the soil surface. \(A_s\) is the area of the disc below the surface.
The concave face is an inclined blade in plane strain. The code integrates the wedge force along the chord with a Gauss rule of four points \(\xi_k\) and weights \(W_k\):
For each point, SoilWedgeForce gives \(H_k\) and \(V_k\) for the depth \(l_k\cos\tau\), the width 1 m, the rake \(\pi/2 - \tau - \varepsilon_k\) and zero speed.
The face force \(F_n\) is normal to the disc in the plan view. The disc also throws soil, which gives a momentum force after Söhne:
When the disc angle is less than the rim clearance angle \(\varepsilon_r = \arcsin(R/R_s)\), the convex back of the disc bears on the furrow wall. The bearing pressure is a Terzaghi strip footing with the width \(b = 2a\sin(\varepsilon_r - \beta_d)\):
The sharp rim cuts new soil with a line load \(q_l = CI\,t_r\), where \(t_r\) is the effective rim width. The rim bearing force is \(R_b = q_l a\). The three force components of one disc are:
\(D\) acts against the travel. \(S\) pushes the disc to its convex side. A positive \(V\) pulls the disc down, but the soil usually pushes a disc up.
In one physics step, ImplBuildDiscTable computes the disc forces at 17 depths from zero to \(R\). ImplDiscAt then interpolates linearly.
The vertical force with the fade factor is \((V + R_b)\,|f(v)| - R_b\) from ImplDiscDownN.
Rollers, Wheels and Tyres#
A packer roller, a press wheel and a ground wheel are rigid wheels on soil after Bekker. For the width \(b\), the diameter \(D_w\) and the load \(W\):
\(z\) is the sinkage and \(R_c\) is the compaction resistance. \(R_t = r_t\) for a wheel on tilled soil, or else \(R_t = 1\).
The length of the contact is \(\sqrt{D_w z - z^2}\). The source function is BekkerRigidWheel.
When the frame height sets the sinkage, BekkerRigidWheelLoadN gives the load:
A pneumatic tyre keeps the Bekker sinkage. Its rolling resistance comes from ASABE D497.7 after Brixius in BrixiusRollingResistanceN:
The deflection ratio \(\delta_t/h_t\) is 0.2. A roller set with \(N\) elements and the bearing ratio \(\mu_b\) has the resistance \(N\,(R_{roll} + \mu_b W)\), where \(R_{roll}\) is \(R_c\) or \(R\).
Three-Point Hitch#
Geometry#
The hitch is Category II. The lower links turn about the point \(A = (x_A, z_A)\) and have the length \(L\). The top link turns about the point \(B\). The lift angle \(\theta\) puts the middle of the lower pins at:
The top pin is at \(Q = P + (m_x, m_z)\), where \((m_x, m_z)\) is the mast of the implement. The top link and the lower links are equal and parallel, thus the implement frame only moves with \(P\). The height of the implement frame above the local ground is:
The ground offset \(z_g\) is the ground height below the tools in the tractor frame. A higher ground gives deeper tools. The pawn makes three ground traces across the tool zone and uses the mean value. The value thus contains the terrain, the pitch of the chassis and the sinkage of the tyres. Its limits are -0.3 m and 0.3 m.
The depth of a tool is the distance of its lowest point below the ground. For a tine point at the height \(z_{tip}\) in the implement frame, the depth is \(d = \max(0, -h - z_{tip})\).
Loads in the Linkage#
ThreePointLinkLoads divides the load of the implement between the top link, the lower links and the lift rams. The statics are planar.
The inputs are the sum of all forces that are not link forces, \((F_x, F_z)\), and their moment \(M_y\) about \(P\). In ImplStepThreePoint:
\(x_c\) is the X position of the centre of mass in the implement frame. The top link is a two-force member along the unit vector \(\mathbf{u} = (B - Q)/|B - Q|\). The moment balance about \(P\) gives its force:
The lower links carry the remaining force:
\(F_{lx}\) is the sensed draft. On the real tractor, load pins in the lower links measure it. The lift rams connect the anchor \(C\) on the tractor with the anchor \(E(\theta)\) on the lower links. \(E\) turns about \(A\) with the lift angle. The ram length is \(l(\theta) = |C - E(\theta)|\) and its direction is \(\mathbf{e} = (C - E)/l\). The moment balance of the lower links about \(A\) gives the ram force, with \(\mathbf{r}_P = P - A\) and \(\mathbf{r}_E = E - A\):
The rams shorten to lift, thus the oil pressure acts on the annulus area of the \(N_r\) rams:
A weight behind the pins puts the top link in tension. A deep draft puts the top link in compression.
Lift and Lower Rates#
The lift arms move to the command angle \(\theta_{cmd}\) with rate limits. The pump flow \(Q_h\) limits the lift rate:
\(r_e\) is the engine speed divided by the rated speed, with limits 0 and 1.2. The rate-of-drop valve limits the lower rate to \(\dot\theta_{dn}\).
When the ram pressure of the last step is more than the relief pressure, the hitch stalls. The arms then cannot lift, and they sink at \(0.25\,\dot\theta_{dn}\).
The flag bHydraulicStall shows this condition.
Vertical Equilibrium#
The lift rams are single-acting. They can lift the implement, but they cannot push it down. The model first computes all soil and ground forces at the frame height \(h_{arm} = L\sin\theta - z_g\) of the lift arms. When the upward force is more than the weight \(m g\), the implement moves up on its roller, wheels or discs.
A bisection with 28 steps between \(h_{arm}\) and \(L\sin\theta_{max} - z_g\) finds the height where the upward force is equal to the weight.
The model then sets the flag bFloating. The ram pressure is zero and the lower links have the angle:
The soil pulls tines down, thus a tine implement always hangs on the lift arms.
Hitch Control Modes#
The lever position \(\lambda\) gives the lever angle:
The enumeration EHitchMode has three modes. The table gives the command angle \(\theta_{cmd}\).
| Condition | Command Angle |
|---|---|
| Raise, transport or reverse travel | \(\theta_{max}\) |
| Float | \(\theta_{min}\) |
| Position | \(\theta_{lever}\) |
| Draft | \(\theta_{lever} + \mu\,c\) |
In the float mode the lift valve is open. The implement then rests on its roller or wheels, or on the lowest position of the linkage.
The draft mode is the electronic hitch control (EHC) law. A first-order filter with the time constant \(\tau_f\) filters the sensed draft:
The relative error and its dead band \(e_0\) are:
A PI law gives the correction \(c\). The correction can only lift the hitch from the lever angle, thus the lever is the depth limit:
The integrator \(I\) only changes in the draft mode while the raise control is off. The mix \(\mu\) is 1 in the game. When the tools are above the soil, the links sense the weight, which is less than each set-point. The integrator then decreases and the tools go down again.
Three interlocks apply to all modes. The source function is StepImplement.
- Raise: the raise control, the transport control or a reverse speed below -0.05 m/s moves the hitch to \(\theta_{max}\). The reverse rule needs
control.auto_raise_in_reverse. - Auto PTO: with
control.auto_pto, the PTO disengages in transport and when \(\theta_{link}\) is more thancontrol.auto_pto_lift_deg. - Transport: the hitch lifts, the PTO stops, the sprayer boom folds and the backhoe stabilizers lift.
PTO#
The PTO shaft turns with the engine. The speed ratio depends on the PTO standard of the implement:
| Implement | PTO Standard | Engine Speed | Ratio |
|---|---|---|---|
| Mounted sprayer | 540 rpm | 1969 rpm | 0.2743 |
| Square baler | 1000 rpm | 1893 rpm | 0.5283 |
The PTO standard is \(n_{pto}\) and the engine speed for this standard is \(n_{e,std}\).
The engine speeds are pto_540_engine_rpm and pto_1000_engine_rpm in tractor.json. The other implements do not use the PTO.
The PTO drives the implement when the PTO control is on, no interlock stops it and the shaft turns. The output flag is bPtoActive.
Each implement computes its own PTO torque \(T_{pto}\). The PTO power is \(P_{pto} = T_{pto}\,\omega_{pto}\).
When the operator engages the PTO with the keyboard, the pawn also sets the hand throttle. The target is the rated PTO speed at half of the governor droop:
Hydraulics#
The Maxxum has one hydraulic model for three consumers: the hitch valve, the loader valve and the backhoe valve. Each valve has a flow at the rated engine speed and a relief pressure. The flow of the fixed-displacement pump follows the engine speed with the factor \(r_e\). The model has no separate remote valves. The fold cylinders of the sprayer boom move at a constant rate and use no hydraulic power.
The hitch uses power only when it lifts. The flow and the pump shaft power are:
ImplHydraulicJoint moves one joint of the loader or the backhoe from a valve lever \(u\) between -1 and 1.
The ram force for equilibrium comes from the joint torque \(\tau\) and the ram length \(l(q)\) at the joint angle \(q\):
With the bore \(D_b\), the rod \(D_{rod}\) and \(N\) rams, the areas and the holding pressure are:
The ram extends when \(u\) and \(\mathrm{d}l/\mathrm{d}q\) have the same sign. The area \(A\) is \(A_b\) for an extension and \(A_a\) for a retraction.
A motion against the load needs the holding pressure.
When \(p_h\) is more than the relief pressure, the joint does not move and the model sets the flag bHydraulicStall.
The supply pressure \(p_s\) is \(p_h\) for a motion against the load and 0.3 MPa for a motion with the load. The fluid power is \(p_s Q_m\), where \(Q_m\) is the flow that the ram displaced. The pump shaft power is the sum of the fluid powers divided by \(\eta_{pump}\). When the sum of the lever values of one valve is more than 1, the model divides each lever by that sum. The joints then share the flow.
Engine Load and Energy#
The implement loads the engine through three paths. StepImplementPhysics gives the PTO power and the fluid power to the drivetrain for the subsequent step:
StepDrivetrain adds the constant loads of tractor.json and converts them to an accessory torque on the engine:
\(\eta_{pto}\) is pto_efficiency and \(\eta_{hyd}\) is hydraulic_efficiency of tractor.json. The governor then gives more fuel to hold the engine speed.
The draft is the third path. It acts on the chassis, and the tyres must supply the same force as traction.
The implement model keeps three energy sums in its state:
The energy ledger of the Maxxum records the PTO energy, the hydraulic energy and the accessory loss. Energy and Fuel describes the ledger. The fuel for each hectare uses the working width of the implement while it works. The implement works when its tools are in the soil, or when seed, spray or crop flows.
Mass and Payload#
Each implement is a set of bodies with a mass \(m_i\), a position \(\mathbf{r}_i\) and a diagonal inertia. FImplMass adds the bodies:
\(I_y\) and \(I_z\) use the same rule. The model ignores the products of inertia. The payload changes the mass during the session:
| Implement | Payload | Position of the Payload |
|---|---|---|
| Seed drill | Seed, 487.5 kg when full | Centroid of the seed in the hopper |
| Mounted sprayer | Liquid, 800 kg when full | Centre of the liquid in the tank |
| Loader with bale fork | Round bale, 450 kg by default | Load point on the fork |
| Backhoe attachment | Soil in the bucket | Bucket |
| Square baler | Crop and bales | Chamber and chute |
For a mounted implement, the loader and the backhoe, the mass is part of the chassis body. ApplyImplementMass updates the body when the mass changes by 0.5 kg or the centre of mass moves by 5 mm:
The index \(T\) is the Maxxum without the implement. The static wheel loads and the dampers follow the new axle loads. The square baler is not part of the chassis body. It loads the drawbar instead.
Forces and Moments on the Chassis#
StepImplement returns two wrenches in the tractor frame at the attachment point.
| Output | Content | Use |
|---|---|---|
ExternalForceN, ExternalMomentNm |
All soil, ground and process forces without the weight | Mounted implements, loader and backhoe |
TractorForceN, TractorMomentNm |
The quasi-static load on the Maxxum with the weight | Square baler |
The attachment point is the middle of the lower pins for a mounted implement. It is the mount point for the loader and the backhoe, and the drawbar pin for the baler.
StepImplementPhysics converts the wrench to the Unreal body frame. Unreal uses a Y axis to the right, thus:
The pawn adds the force to the Chaos body. The torque about the centre of mass \(\mathbf{r}_{com}\) is:
A safety limit applies. When the force is more than 250 kN, the pawn scales the wrench down and writes ACRES_IMPLEMENT_WRENCH_LIMITED to the log.
The chassis acceleration that the sprayer and the baler use goes through a first-order lag of 0.05 s.
The draft \(H\) of a tool acts below the pins. Its moment loads the rear axle and unloads the front axle. The squat of the rear tyres then lowers the tools, which is a positive feedback on the depth. The draft mode controls this effect.
Trailed Implements#
The square baler is the only trailed implement of the implement model. The pawn moves it as a kinematic trailer with one axle. The drawbar pin \(\mathbf{h}\) pulls the middle of the axle \(\mathbf{a}\) at the fixed distance \(L_b\):
The axle thus does not slide to the side. In the tractor frame, the articulation angle is:
Two ground traces below the wheels give the pitch and the roll of the baler:
The model computes the drawbar force for a straight line. The pawn turns it by \(\psi\) and applies it at the drawbar pin. On a slope, the weight of the baler acts on the drawbar as an acceleration. The pawn thus adds \(g\) multiplied by the Z component of the forward vector to the longitudinal acceleration. The baler cannot slide or fold fully, because it has no lateral or yaw dynamics.
Marks of Field Work#
The implements change the field. StepImplementPhysics marks a strip of cells of 0.25 m with FAcresFarmRuntime::Work when the speed is more than 0.05 m/s.
The centre of the strip is 0.3 m behind the tool zone. Its length is \(|v|\Delta t + 0.3\) m.
| Flag | Condition | Width |
|---|---|---|
WorkTilled |
Cultivator, chisel plow or disc harrow in the soil with a depth of more than 0.02 m | Working width |
WorkSeeded |
Seed drill with a seed flow | Working width |
WorkSprayed |
Mounted sprayer with a spray flow | Nozzle count multiplied by nozzle spacing |
The marks stay for the session. A tilled cell has loose soil, and its ruts and tread prints go away.
AcresFieldWorkModel.h computes what each pass leaves on the surface. The soil visuals draw the result.
Tillage Surface#
The fragmentation is best at the optimum water content of Dexter and Bird, which is the inflection point of the van Genuchten curve:
TillageClodDiameterM gives the mean clod diameter. \(f_{clay}\) is the clay fraction and \(LI\) is the liquidity index:
The pattern factor \(F_p\) is 1 for tines, 0.7 for discs and 1.8 for spoil. The limits are 5 mm and 150 mm.
TillageSurface then gives the surface for the depth \(d\). \(\rho_0\) is the dry density before the pass:
\(\sigma_r\) is the random roughness, \(z_{rise}\) is the rise of the loose layer and \(p\) is the plastic share. A soil without plasticity has \(p = 0.2\). A depth of less than 0.01 m leaves no surface.
The surface shape across the implement comes from three functions. \(x\) is the lateral distance to the nearest tool.
TinePattern makes a slot at each tine and a ridge between two tines:
\(w_c\) is the crescent width and \(s\) is the tool spacing. DiscPattern makes a groove at each ring of the packer roller:
\(z_{groove}\) is the sinkage of the packer roller and \(b_{ring}\) is the ring width.
DrillPattern makes the band of the press wheel and the slot of the opener in it:
\(z_{press}\) is the Bekker sinkage of a press wheel on tilled soil. Its load is half of the row force and the row weight.
\(d_{sow}\) is the depth of the openers. ClodHeight adds round clods on a grid with random offsets.
The material of the field work uses the same functions.
Colour, Spray and Seedlings#
Turned soil is darker when it is wet. SoilReflectanceRatio gives the reflectance for the effective saturation \(S_e\):
The top 10 mm of turned soil dries at the potential evaporation rate \(E\) in m/s. TurnedSoilSaturation gives the saturation after the time \(t\):
The spray film is the applied depth minus the evaporation: \(\max(0, a_{spray} - E\,t)\). The seedlings of a drilled row appear with the degree days \(G\) after the pass: the share is \(\mathrm{clamp}((G - 60)/340, 0, 1)\).
Tread Prints, Pits and Spoil#
A tyre leaves a tread print in its rut. The lug pitch is \(0.14\max(0.3, D_w)\). For the sinkage \(z\), the print depth is:
The backhoe removes soil from the ground. FAcresFarmRuntime::Dig lowers the cells below the bucket by the volume of the dug mass at the moist density.
The pit is part of the ground for the wheels and the tools. The soil that the bucket releases lands as spoil with the loose volume:
The densities \(\rho_{loose}\) and \(\rho_{firm}\) of the soil class are in Mg/m³. FAcresFarmRuntime::Spoil makes a cone with the radius \(r_{cone}\).
Parameters#
Each implement has a data file Acres/Content/Simulation/implements/<id>.json. SetImplementParameter reads each key.
The key of a nested value is its path, for example hitch.lower_link_m or tines.pivot_x_m[3].
Angles in the files are degrees, flows are litres per minute, and shaft speeds are revolutions per minute.
The option -ImplementSet= changes keys for one session. The tables below give the keys that all implements share.
Body and Design Values#
| Name | Type | Unit | Default | Description |
|---|---|---|---|---|
mass_kg |
number | kg | 620 | Mass without payload. The default is the cultivator. |
com_x_m, com_y_m, com_z_m |
number | m | -0.6261, 0, 0.5111 | Centre of mass in the implement frame. |
inertia_x_kg_m2, inertia_y_kg_m2, inertia_z_kg_m2 |
number | kg m² | 462, 183.4, 471.7 | Principal inertia about the centre of mass. |
design_depth_m |
number | m | 0.12 | Design working depth. |
working_width_m |
number | m | 2.7 | Working width. |
design_speed_mps |
number | m/s | 2.222 | Typical working speed. |
Hitch Block#
The five mounted implements have the same hitch block.
| Name | Type | Unit | Default | Description |
|---|---|---|---|---|
hitch.lower_pivot_x_m, hitch.lower_pivot_z_m |
number | m | 0, 0.55 | Tractor pivot \(A\) of the lower links. |
hitch.lower_link_m |
number | m | 0.85 | Length \(L\) of a lower link. |
hitch.top_pivot_x_m, hitch.top_pivot_z_m |
number | m | -0.08, 1.16 | Tractor pivot \(B\) of the top link. |
hitch.mast_x_m, hitch.mast_z_m |
number | m | -0.08, 0.61 | Top pin relative to the lower pins. |
hitch.lift_min_deg, hitch.lift_max_deg |
number | deg | -5, 32 | Range of the lift angle. |
hitch.ram_tractor_x_m, hitch.ram_tractor_z_m |
number | m | -0.13, 1.21 | Ram anchor \(C\) on the tractor. |
hitch.ram_link_x_m, hitch.ram_link_z_m |
number | m | -0.55, 0.57 | Ram anchor \(E\) on the lower links at zero lift. |
hitch.ram_bore_m, hitch.ram_rod_m |
number | m | 0.066, 0.0448 | Bore and rod diameter of a lift ram. |
hitch.ram_count |
integer | 2 | Number of lift rams. | |
hitch.relief_pressure_pa |
number | Pa | 17000000 | Relief pressure of the hitch valve. |
hitch.flow_l_min |
number | L/min | 40 | Flow of the hitch valve at the rated engine speed. |
hitch.drop_rate_deg_s |
number | deg/s | 8 | Limit of the lower rate. |
hitch.pump_efficiency |
number | 0.85 | Efficiency \(\eta_{pump}\) of the hydraulic pump. |
The loader and the backhoe have no hitch block in their files. They use the code default of hitch.pump_efficiency.
Control Block#
| Name | Type | Unit | Default | Description |
|---|---|---|---|---|
control.draft_filter_s |
number | s | 0.1 | Time constant \(\tau_f\) of the draft filter. |
control.draft_gain_deg |
number | deg | 10 | Proportional gain \(K_p\) for a relative error of 1. |
control.draft_integral_deg_s |
number | deg/s | 6 | Integral gain \(K_i\) for a relative error of 1. |
control.deadband |
number | 0.02 | Dead band \(e_0\) of the relative error. | |
control.auto_pto_lift_deg |
number | deg | 20 | Lift angle above which Auto PTO disengages the PTO. |
control.auto_raise_in_reverse |
boolean | 1 | Raise the hitch in reverse travel. | |
control.auto_pto |
boolean | 1 | Enable Auto PTO. |
Operator Settings#
The block implement_model of tractor.json holds the settings of the operator. The menu writes this block, and the command-line options replace its values.
| Name | Type | Unit | Default | Description |
|---|---|---|---|---|
id |
string | none |
Implement identifier. Option -Implement=. |
|
working_depth_m |
number | m | 0.15 | Working depth on firm level ground. Option -ImplementDepth=. |
hitch_mode |
string | auto |
auto, position, draft or float. Option -HitchMode=. |
|
draft_setpoint_n |
number | N | 15000 | Draft set-point. Option -DraftSetpoint=. |
spray_rate_l_ha |
number | L/ha | 150 | Application rate of the sprayer. Option -SprayRate=. |
seed_rate_kg_ha |
number | kg/ha | 150 | Seed rate of the drill. Option -SeedRate=. |
windrow_kg_m |
number | kg/m | 3 | Hay for each metre of windrow. Option -WindrowDensity=. |
bale_mass_kg |
number | kg | 450 | Mass of a round bale for the loader. Option -BaleMass=. |
boom_lift_m |
number | m | 0.5 | Lift of the sprayer boom. Option -BoomLift=. |
ImplementControlsForDepth converts the working depth to a control. For tines it gives the lever position, and for the disc harrow it gives the roller setting.
The mode auto selects the default of the implement from ImplementDefaultControls.
Code Map#
| Item | File | Function |
|---|---|---|
| Soil presets and moist density | Acres/Source/Acres/AcresImplementModel.cpp |
ImplementSoilPreset, ImplementSoilMoistDensity |
| Soil from the soil library | Acres/Source/Acres/AcresImplementCoupling.cpp |
ImplementSoilFromLibrary |
| Soil below the tools in the game | Acres/Source/Acres/AcresVehicle.cpp |
AAcresVehiclePawn::ImplementSoilAt |
| Soil wedge | Acres/Source/Acres/AcresImplementModel.cpp |
SoilWedgeForce |
| Tine force | Acres/Source/Acres/AcresImplementModel.cpp |
TineSoilForce |
| Disc force | Acres/Source/Acres/AcresImplementModel.cpp |
DiscSoilForce |
| Rigid wheel and tyre | Acres/Source/Acres/AcresImplementModel.cpp |
BekkerRigidWheel, BekkerRigidWheelLoadN, BrixiusRollingResistanceN |
| ASABE reference draft | Acres/Source/Acres/AcresImplementModel.cpp |
AsabeD497Draft |
| Link statics | Acres/Source/Acres/AcresImplementModel.cpp |
ThreePointLinkLoads |
| Hitch control and equilibrium | Acres/Source/Acres/AcresImplementModel.cpp |
ImplStepThreePoint |
| Hydraulic joint | Acres/Source/Acres/AcresImplementModel.cpp |
ImplHydraulicJoint |
| Interlocks and energy sums | Acres/Source/Acres/AcresImplementModel.cpp |
StepImplement |
| Parameters and data keys | Acres/Source/Acres/AcresImplementModel.cpp |
MakeImplementParameters, SetImplementParameter |
| Depth setting and default controls | Acres/Source/Acres/AcresImplementCoupling.cpp |
ImplementControlsForDepth, ImplementDefaultControls |
| Steady state for tests and menu | Acres/Source/Acres/AcresImplementCoupling.cpp |
ImplementSteadyState |
| Step in the game, wrench, marks | Acres/Source/Acres/AcresVehicle.cpp |
AAcresVehiclePawn::StepImplementPhysics |
| Mass of the chassis body | Acres/Source/Acres/AcresVehicle.cpp |
AAcresVehiclePawn::ApplyImplementMass |
| Engine load | Acres/Source/Acres/AcresVehicleModel.cpp |
StepDrivetrain |
| Marks of field work | Acres/Source/Acres/AcresFieldWorkModel.cpp |
TillageSurface, TinePattern, DiscPattern, DrillPattern |
| Storage of the marks | Acres/Source/Acres/AcresFarmRuntime.cpp |
FAcresFarmRuntime::Work, Dig, Spoil |
| Tests | Tools/ImplementModel/implement_tests.cpp |
RunTests |
Validation against ASABE D497.7#
ASABE D497.7 gives the draft of an implement as \(D = F_i\,(A + B S + C S^2)\,W\,T\) with a range.
\(S\) is the speed in km/h, \(W\) is the number of tools or the width, and \(T\) is the depth in cm.
The command implement_tool asabe compares the model with the standard. The table gives the result at 8 km/h and the design depth.
| Implement | ASABE Row and Range | Fine Soil | Medium Soil | Coarse Soil |
|---|---|---|---|---|
| Chisel plow, 20 cm | Chisel plow, ±50 % | 29.6 kN, ratio 1.23 | 25.5 kN, ratio 1.24 | 11.8 kN, ratio 0.75 |
| Cultivator, 12 cm | Field cultivator, primary, ±30 % | 11.8 kN, ratio 1.60 | 9.6 kN, ratio 1.52 | 4.0 kN, ratio 0.83 |
| Cultivator, 12 cm | Chisel plow, ±50 % | 11.8 kN, ratio 0.82 | 9.6 kN, ratio 0.78 | 4.0 kN, ratio 0.42 |
| Disc harrow, 10 cm | Tandem disk, primary, ±50 % | 17.6 kN, ratio 1.34 | 17.1 kN, ratio 1.49 | 6.4 kN, ratio 0.62 |
| Disc harrow, 10 cm | Tandem disk, secondary, ±30 % | 17.6 kN, ratio 1.92 | 17.1 kN, ratio 2.12 | 6.4 kN, ratio 0.89 |
| Seed drill, 15 rows | Grain drill, ±25 % | 2.7 kN, ratio 0.61 | 2.4 kN, ratio 0.54 | 2.4 kN, ratio 0.54 |
The ratio is the model draft divided by the ASABE draft. The soils are the presets wet_silty_clay_loam, dry_loam and sand.
The chisel plow is in the range of the standard for the three soils. The cultivator has chisel points, thus it agrees with the chisel row and not with the field cultivator row.
The disc harrow agrees with primary tillage. The seed drill gives less draft than the standard, because the model has no drag of seed boots.
Limitations#
- The model has no calibration against measurements. The soil strengths are textbook values, and no draft measurement of these machines exists.
- Some machine constants are estimates: the rake angle and the trip preload of the tines, and the rim widths of the discs.
- The row force and the meter torque of the seed drill are estimates too.
- One soil state and one ground offset apply to the full implement. The model does not resolve a roll angle across the width.
- The rear row of tines and the rear row of discs operate in firm soil. The model ignores the soil that the front row loosened.
- The speed effect comes from the soil inertia only. The draft of the disc harrow thus changes little with speed.
- The implement is rigid with the chassis. The model ignores the pitch of the implement relative to the Maxxum and the compliance of the hitch.
- The implement loads the engine one physics step later.
- On pavement and gravel, tines go through the surface without force.
- The square baler is a kinematic trailer. It has no lateral dynamics.
References#
- ASABE D497.7 (2011, R2015). Agricultural Machinery Management Data. American Society of Agricultural and Biological Engineers, St. Joseph, MI.
- Bekker, M. G. (1969). Introduction to Terrain-Vehicle Systems. University of Michigan Press.
- Brixius, W. W. (1987). Traction prediction equations for bias ply tires. ASAE Paper 87-1622.
- Dexter, A. R., and Bird, N. R. A. (2001). Methods for predicting the optimum and the range of soil water contents for tillage based on the water retention curve. Soil and Tillage Research, 57(4), 203-212.
- Godwin, R. J., and O'Dogherty, M. J. (2007). Integrated soil tillage force prediction models. Journal of Terramechanics, 44(1), 3-14.
- Godwin, R. J., Seig, D. A., and Allott, M. (1987). Soil failure and force prediction for soil engaging discs. Soil Use and Management, 3(3), 106-114.
- Godwin, R. J., and Spoor, G. (1977). Soil failure with narrow tines. Journal of Agricultural Engineering Research, 22(3), 213-228.
- Janosi, Z., and Hanamoto, B. (1961). The analytical determination of drawbar pull as a function of slip for tracked vehicles in deformable soils. Proceedings of the 1st International Conference on Terrain-Vehicle Systems, Turin.
- Lobell, D. B., and Asner, G. P. (2002). Moisture effects on soil reflectance. Soil Science Society of America Journal, 66(3), 722-727.
- McKyes, E. (1985). Soil Cutting and Tillage. Elsevier.
- McKyes, E., and Ali, O. S. (1977). The cutting of soil by narrow blades. Journal of Terramechanics, 14(2), 43-58.
- Meyerhof, G. G. (1951). The ultimate bearing capacity of foundations. Géotechnique, 2(4), 301-332.
- Söhne, W. (1956). Einige Grundlagen für eine landtechnische Bodenmechanik. Grundlagen der Landtechnik, 7, 11-27.
- Tice, E. M., and Hendrick, J. G. (1992). Disc coulter operating characteristics. Transactions of the ASAE, 35(1), 3-10.
- Vanapalli, S. K., and Fredlund, D. G. (2000). Comparison of different procedures to predict unsaturated soil shear strength. Advances in Unsaturated Geotechnics, Geotechnical Special Publication 99, ASCE, 195-209.
- Wong, J. Y. (2008). Theory of Ground Vehicles (4th ed.). Wiley.
- Zobeck, T. M., and Onstad, C. A. (1987). Tillage and rainfall effects on random roughness: a review. Soil and Tillage Research, 9(1), 1-20.