Skip to content

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:

\[ x' = x_p + (x - x_p)\cos a + (z - z_p)\sin a, \qquad z' = z_p - (x - x_p)\sin a + (z - z_p)\cos a \]

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:

\[ \rho = \max\left(100,\; \rho_d + 1000\,\min(\max(\theta_v, 0), 0.6)\right) \]

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:

\[ \phi = \mathrm{clamp}(\phi_{lib}, 1°, 50°), \qquad \delta = \mathrm{clamp}(\delta_{lib}, 1°, 45°) \]
\[ CI = \max(10\ \mathrm{kPa}, CI_{lib}), \qquad K = \max(0.1\ \mathrm{mm}, K_{lib}) \]

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:

\[ PI = 100\,\max(0, w_L - w_P), \qquad \kappa = -0.0016\,PI^2 + 0.0975\,PI + 1 \]
\[ c' = c_{firm} + (c_{loose} - c_{firm})\,\mathrm{clamp}(\ell, 0, 1), \qquad c_s = \max(0, c_{drained} - c') \]
\[ c = \max\left(0,\; c_{lib} - \left(1 - S_e^{\max(0, \kappa - 1)}\right) c_s\,(1 - u)\right) \]

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:

\[ r_t = \mathrm{clamp}\left(\frac{B_{loose}}{B_{state}},\; 0.05,\; 1\right) \]

\(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)\):

\[ c \leftarrow R\,c, \quad c_a \leftarrow R\,c_a, \quad CI \leftarrow R\,CI, \quad k_c \leftarrow R\,k_c, \quad k_\phi \leftarrow R\,k_\phi, \quad \rho_d \leftarrow 0.85\,\rho_d \]

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:

\[ f(v) = \tanh\left(\frac{v}{0.1\ \mathrm{m/s}}\right) \]

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#

A tine in soil: the rake angle, the depth, the critical depth, the crescent failure wedge with its failure plane, the lateral failure below the critical depth, and the force components that the model computes. SIDE VIEW PLAN VIEW travel, speed v surcharge q crescent failure wedge weight γ, inertia ρ v² lateral failure: the soil flows around the tine failure plane (c, φ) α β dc d face (ca, δ) H draft V vertical H and V: the soil force on the tool. A positive V pulls the tool down. travel crescent at the surface w r r: rupture distance. w: tool width.
A tine in soil. The crescent wedge fails upward above the critical depth, and the soil flows around the tine below it. Open the diagram

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\):

\[ \Delta = \cos(\alpha + \delta) + \sin(\alpha + \delta)\cot(\beta + \phi) \]
\[ N_\gamma = \frac{m}{2\Delta}, \quad N_c = \frac{1 + \cot\beta\cot(\beta + \phi)}{\Delta}, \quad N_{ca} = \frac{1 - \cot\alpha\cot(\beta + \phi)}{\Delta} \]
\[ N_q = \frac{m}{\Delta}, \quad N_a = \frac{\tan\beta + \cot(\beta + \phi)}{\Delta\,(1 + \tan\beta\cot\alpha)} \]

The force on the tool face for each unit of width has a weight part and a second part:

\[ P_\gamma = \gamma d^2 N_\gamma, \qquad P_o = \max\left(0,\; c\,d\,N_c + c_a d\,N_{ca} + q\,d\,N_q + \rho v^2 d\,N_a\right) \]

For a narrow tine, the side wedges of the crescent of Godwin and Spoor increase the width:

\[ w_{eff} = w + d\left(m - \frac{m - 1}{3}\right) \]

For a wide blade in plane strain, \(w_{eff} = w\). The total force and its components are:

\[ P = (P_\gamma + P_o)\,w_{eff} \]
\[ H = P\sin(\alpha + \delta) + c_a d\,w\cot\alpha, \qquad V = P\cos(\alpha + \delta) - c_a d\,w \]

\(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\):

\[ \zeta = \frac{\tfrac{2}{3}P_\gamma + \tfrac{1}{2}P_o}{P_\gamma + P_o} \]

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:

\[ l(z) = w\left(c\,N_c' + \gamma z\,N_q'\right) \]
\[ N_q' = e^{1.5\pi\tan\phi}\tan^2\left(\frac{\pi}{4} + \frac{\phi}{2}\right), \qquad N_c' = \frac{N_q' - 1}{\tan\phi} \]

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:

\[ \frac{\mathrm{d}H_c}{\mathrm{d}d}\bigg|_{d_c} = l(d_c) \]

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:

\[ H = H_c(d_c) + w\left(c\,N_c'(d - d_c) + \gamma N_q'\frac{d^2 - d_c^2}{2}\right), \qquad V = V_c(d_c) \]

The resultant acts at this depth below the surface:

\[ z_R = \frac{H_c\,\zeta\,d_c + w\left(c\,N_c'\dfrac{d^2 - d_c^2}{2} + \gamma N_q'\dfrac{d^3 - d_c^3}{3}\right)}{H} \]

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:

\[ d' = \min\left(\frac{d}{\cos\tau},\; 1.9R\right), \qquad R_s = \frac{R^2 + h_d^2}{2h_d}, \qquad a = \sqrt{2Rd' - d'^2} \]
\[ A_s = R^2\arccos\left(\frac{R - d'}{R}\right) - (R - d')\,a \]

\(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\):

\[ x_k = \xi_k a, \qquad l_k = \sqrt{R^2 - x_k^2} - (R - d'), \qquad \varepsilon_k = \arcsin\left(\frac{R - l_k/2}{R_s}\right) \]

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.

\[ F_n = a\sum_k W_k H_k, \qquad F_v = a\sum_k W_k V_k \]

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:

\[ \bar\varepsilon = \arcsin\left(\frac{R - d'/2}{R_s}\right), \quad \psi = \beta_d + 2\bar\varepsilon, \quad \Phi = \rho\,A_s\sin\beta_d\,v^2, \quad M = \Phi\,(1 - \cos\psi) \]

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)\):

\[ N_q = e^{\pi\tan\phi}\tan^2\left(\frac{\pi}{4} + \frac{\phi}{2}\right), \quad N_c = \frac{N_q - 1}{\tan\phi}, \quad N_\gamma = 2(N_q + 1)\tan\phi \]
\[ B = \left(c\,N_c + \gamma\frac{d'}{2}N_q + \frac{1}{2}\gamma\,b\,N_\gamma\right) A_s\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 = F_n\sin\beta_d + M + B\tan\delta + q_l d' \]
\[ S = F_n\cos\beta_d + \Phi\sin\psi - B \]
\[ V = F_v - R_b - B\sin\varepsilon_r \]

\(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\):

\[ k = \max\left(1,\; \left(\frac{k_c}{b} + k_\phi\right) R_t\right) \]
\[ z = \min\left(0.45 D_w,\; \left[\frac{3W}{(3 - n)\,k\,b\sqrt{D_w}}\right]^{\frac{2}{2n + 1}}\right), \qquad R_c = \frac{b\,k\,z^{n+1}}{n + 1} \]

\(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:

\[ W(z) = \frac{(3 - n)\,k\,b\sqrt{D_w}\;\min(z, 0.45 D_w)^{\frac{2n + 1}{2}}}{3} \]

A pneumatic tyre keeps the Bekker sinkage. Its rolling resistance comes from ASABE D497.7 after Brixius in BrixiusRollingResistanceN:

\[ B_n = \frac{CI\,b\,D_w}{W}\cdot\frac{1 + 5\,\delta_t/h_t}{1 + 3\,b/D_w}, \qquad R = W\left(\frac{1}{\max(1, B_n)} + 0.04\right) \]

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#

Side view of the three-point hitch of the Maxxum with a tine implement: the lower links, the top link, the lift rams, the implement mast, the tool depth and the forces of the model. Three-Point Hitch, Side View θ: lift angle of the lower links L: length of a lower link d: depth of the tool point below the ground H, V: soil force on one tool The lift rams shorten to lift the lower links. Green arrows: forces on the implement travel, +X SOIL Maxxum, rear part rear axle Z X origin O θ lower link, L top link lift rams A lower pivot B top pivot C ram anchor E implement mast implement frame lower pin P top pin Q trip pivot d weight m g draft H vertical V top-link force sensed draft (lower links)
The three-point hitch of the Maxxum with a tine implement. The lower links and the top link are a parallelogram. Open the diagram

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:

\[ P(\theta) = \left(x_A - L\cos\theta,\; z_A + L\sin\theta\right) \]

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:

\[ h = L\sin\theta - z_g \]

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:

\[ F_x = F_{x,soil}, \qquad F_z = F_{z,soil} - m g, \qquad M_y = M_{y,soil} + x_c\,m g \]

\(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:

\[ F_t = \frac{-M_y}{m_z u_x - m_x u_z} \]

The lower links carry the remaining force:

\[ F_{lx} = -(F_x + F_t u_x), \qquad F_{lz} = -(F_z + F_t u_z) \]

\(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\):

\[ M_P = -r_{Pz}F_{lx} + r_{Px}F_{lz}, \qquad F_r = \frac{-M_P}{r_{Ez}e_x - r_{Ex}e_z} \]

The rams shorten to lift, thus the oil pressure acts on the annulus area of the \(N_r\) rams:

\[ A_r = N_r\frac{\pi}{4}\left(D_b^2 - D_{rod}^2\right), \qquad p_r = \frac{F_r}{A_r}\ \ (F_r > 0), \qquad p_r = 0\ \ (F_r \le 0) \]

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:

\[ \dot\theta_{up} = \frac{Q_h\,r_e}{A_r\,|\mathrm{d}l/\mathrm{d}\theta|} \]

\(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}\).

\[ \theta \leftarrow \mathrm{clamp}\left(\theta + \mathrm{clamp}\left(\theta_{cmd} - \theta,\; -\dot\theta_{dn}\Delta t,\; \dot\theta_{up}\Delta t\right),\; \theta_{min},\; \theta_{max}\right) \]

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:

\[ \theta_{link} = \arcsin\left(\mathrm{clamp}\left(\frac{h + z_g}{L},\; \sin\theta_{min},\; \sin\theta_{max}\right)\right) \]

The soil pulls tines down, thus a tine implement always hangs on the lift arms.

Hitch Control Modes#

Block diagram of the hitch control: the lever map, the mode switch for position, draft and float, the draft loop with filter, dead band and PI law, the rate limits, and the implement with its linkage that returns the sensed draft and the ram pressure. CONTROL LAW IMPLEMENT AND LINKAGE Lever λ 0 lowest, 1 highest Lever map θlever = θmin + λ (θmax − θmin) mode (F), raise (Q), transport (O) Mode switch: θcmd raise, transport, reverse: θmax float: θmin position: θlever draft: θlever + μ c Rate limits up: pump flow down: 8 °/s relief open: no lift θcmd Low-pass filter time constant 0.1 s draft set-point Fset (PgUp, PgDn) Relative error e = (Ff − Fset) / max(Fset, 1 kN) Dead band 2 % PI law c = I + Kp e dI/dt = Ki e 0 ≤ c ≤ θmax − θlever Ff correction c Lift arms and equilibrium frame height h = L sin θ − zg The implement rides up when the soil force is more than its weight. Tool and ground forces tines, discs, roller, wheels at the frame height h Link statics top link, lower links, lift rams arm angle θ sensed draft ram pressure
The hitch control as coded. The sensed draft and the ram pressure are the feedback signals. Open the diagram

The lever position \(\lambda\) gives the lever angle:

\[ \theta_{lever} = \theta_{min} + \lambda\,(\theta_{max} - \theta_{min}) \]

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:

\[ F_f \leftarrow F_f + (F_{lx} - F_f)\left(1 - e^{-\Delta t/\tau_f}\right) \]

The relative error and its dead band \(e_0\) are:

\[ e = \frac{F_f - F_{set}}{\max(1000\ \mathrm{N}, F_{set})}, \qquad e_{db} = \mathrm{sign}(e)\,\max(0, |e| - e_0) \]

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:

\[ c = \mathrm{clamp}\left(I + K_p e_{db},\; 0,\; \theta_{max} - \theta_{lever}\right) \]
\[ I \leftarrow \mathrm{clamp}\left(I + K_i e_{db}\Delta t,\; 0,\; \theta_{max} - \theta_{lever}\right) \]

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 than control.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:

\[ \omega_{pto} = \omega_e\,\frac{n_{pto}}{n_{e,std}} \]
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:

\[ n_{noload} = n_{e,std} + \frac{1}{2}n_{droop}, \qquad u_{hand} = \max\left(u_{hand},\; \frac{n_{noload} - n_{idle}}{n_{max} - n_{idle}}\right) \]

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:

\[ Q_r = \frac{\max(0, \Delta\theta)}{\Delta t}\left|\frac{\mathrm{d}l}{\mathrm{d}\theta}\right| A_r, \qquad P_{hyd} = \frac{p_r\,Q_r}{\eta_{pump}} \]

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\):

\[ F = \frac{-\tau}{\mathrm{d}l/\mathrm{d}q} \]

With the bore \(D_b\), the rod \(D_{rod}\) and \(N\) rams, the areas and the holding pressure are:

\[ A_b = N\frac{\pi}{4}D_b^2, \qquad A_a = N\frac{\pi}{4}\left(D_b^2 - D_{rod}^2\right), \qquad p_h = \begin{cases} F/A_b & F \ge 0 \\ -F/A_a & F < 0 \end{cases} \]

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.

\[ \dot q = \pm\frac{|u|\,Q_v\,r_e}{A\,|\mathrm{d}l/\mathrm{d}q|} \]

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 engine power of the Maxxum goes to the PTO shaft, to the driveline and wheels, and to the hydraulic pump. The implement returns its PTO power, its draft and its hydraulic power. MAXXUM IMPLEMENT MODEL Engine brake torque, speed ωe PTO shaft 540 or 1000 rpm, ηpto Driveline and wheels clutch, gears, tyres on soil Hydraulic pump flow follows ωe, ηhyd takes Ppto / ηpto takes Pfluid / ηhyd Machinery sprayer pump, baler Tools in the soil tines, discs, wheels Rams hitch, loader, backhoe shaft speed ωpto PTO power Ppto draft D on the chassis drawbar power D v oil flow Q hydraulic power Phyd accessory torque = (Ppto / ηpto + Pfluid / ηhyd) / ωe Pfluid = ηpump Phyd
The power paths between the Maxxum and its implement. The implement loads the engine one physics step later. Open the diagram

The implement loads the engine through three paths. StepImplementPhysics gives the PTO power and the fluid power to the drivetrain for the subsequent step:

\[ P_{pto,in} = P_{pto}, \qquad P_{fluid} = \eta_{pump}\,P_{hyd} \]

StepDrivetrain adds the constant loads of tractor.json and converts them to an accessory torque on the engine:

\[ T_{acc} = \frac{P_{pto,in}/\eta_{pto} + P_{fluid}/\eta_{hyd}}{\max(\omega_e, 20\ \mathrm{rad/s})} \]

\(\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:

\[ P_{draft} = D_{total}\,|v|, \qquad E_{draft} = \sum P_{draft}\Delta t, \qquad E_{pto} = \sum P_{pto}\Delta t, \qquad E_{hyd} = \sum P_{hyd}\Delta t \]

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:

\[ m = \sum m_i, \qquad \mathbf{r}_c = \frac{\sum m_i\mathbf{r}_i}{m}, \qquad I_x = \sum I_{x,i} + \sum m_i\left(y_i^2 + z_i^2\right) - m\left(y_c^2 + z_c^2\right) \]

\(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:

\[ m_{tot} = m_T + m, \qquad \mathbf{r}_{tot} = \frac{m_T\mathbf{r}_T + m\,\mathbf{r}_c}{m_{tot}} \]
\[ \mathbf{I}_{tot} = \mathbf{I}_T + m_T\,\mathbf{S}(\mathbf{r}_T - \mathbf{r}_{tot}) + m\,\mathbf{S}(\mathbf{r}_c - \mathbf{r}_{tot}) + \mathbf{I}, \qquad \mathbf{S}(\mathbf{d}) = \left(d_y^2 + d_z^2,\; d_x^2 + d_z^2,\; d_x^2 + d_y^2\right) \]

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:

\[ \mathbf{F}_{body} = (F_x, -F_y, F_z), \qquad \mathbf{M}_{body} = (-M_x, M_y, -M_z) \]

The pawn adds the force to the Chaos body. The torque about the centre of mass \(\mathbf{r}_{com}\) is:

\[ \mathbf{T} = (\mathbf{r}_{att} - \mathbf{r}_{com}) \times \mathbf{F} + \mathbf{M} \]

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\):

\[ \mathbf{a} \leftarrow \mathbf{h} + L_b\frac{\mathbf{a} - \mathbf{h}}{|\mathbf{a} - \mathbf{h}|} \]

The axle thus does not slide to the side. In the tractor frame, the articulation angle is:

\[ \psi = \mathrm{atan2}\left(-y_a,\; x_h - x_a\right) \]

Two ground traces below the wheels give the pitch and the roll of the baler:

\[ \vartheta = \arcsin\left(\mathrm{clamp}\left(\frac{z_L + z_R}{2L_b},\; -0.5,\; 0.5\right)\right), \qquad \varphi = \mathrm{atan2}(z_L - z_R,\; 2.0\ \mathrm{m}) \]

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:

\[ \theta_{opt} = \theta_r + (\theta_s - \theta_r)\left(1 + \frac{1}{m_v}\right)^{-m_v}, \qquad m_v = 1 - \frac{1}{n_v} \]

TillageClodDiameterM gives the mean clod diameter. \(f_{clay}\) is the clay fraction and \(LI\) is the liquidity index:

\[ \Theta = \frac{\theta_v - \theta_{opt}}{\theta_s - \theta_r}, \qquad k = \begin{cases} 25 & \Theta < 0 \\ 15 & \Theta \ge 0 \end{cases} \]
\[ d_0 = (0.008 + 0.040 f_{clay})\left(1 + k\,\Theta^2(0.5 + 2 f_{clay})\right) \]
\[ d_{cl} = d_0\left(1 + 1.5\max(0, LI)\right)\left(\frac{2.2}{\max(0.5, v)}\right)^{0.2} F_p \]

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 = 0.4\,d_{cl}, \qquad z_{rise} = d\,\max\left(0, \frac{\rho_0}{\rho_{loose}} - 1\right), \qquad p = \mathrm{clamp}(LI + 0.5, 0, 1) \]
\[ z_{ridge} = d\,(0.22 + 0.25\,p)\ \text{(tines)}, \qquad z_{ridge} = d\,(0.06 + 0.06\,p)\ \text{(discs)} \]

\(\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:

\[ z = z_{ridge}\left(-0.6 + 0.5\left(1 - \cos(\pi\,T)\right)\right), \qquad T = \min\left(1, \frac{|x|}{b_h}\right), \qquad b_h = \tfrac{1}{2}\min(\max(0.02, w_c), s) \]

\(w_c\) is the crescent width and \(s\) is the tool spacing. DiscPattern makes a groove at each ring of the packer roller:

\[ z = -z_{groove}\left(1 - U^2\right)\ \ (U < 1), \qquad U = \frac{|x|}{\tfrac{1}{2}\max(0.01, b_{ring})} \]

\(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 = -z_{press}\left(1 - \left(\frac{|x|}{b_p}\right)^4\right)\ \ (|x| < b_p), \qquad b_p = \tfrac{1}{2}\max(0.02, b_{press}) \]
\[ z \leftarrow z - \frac{d_{sow}}{3}\left(1 - \frac{|x|}{0.01}\right)\ \ (|x| < 0.01) \]

\(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\):

\[ \varrho = 0.45 + 0.55\,e^{-2.5 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\):

\[ S(t) = S_{surf} + (S_{turn} - S_{surf})\max\left(0,\; 1 - \frac{E\,t}{(S_{turn} - S_{surf})\max(0.01, \theta_s - \theta_r)\cdot 0.01}\right) \]

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:

\[ z_{print} = \min\left(z_{lug},\; 0.8\,(z - 0.005) + 0.004\right)\ \ (z \ge 0.005), \qquad z_{lug} = \begin{cases} 0.04 & D_w \ge 1 \\ 0.025 & D_w < 1 \end{cases} \]

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:

\[ V_{spoil} = \frac{m_{dug}}{1000\,\rho_{loose}\left(1 + \theta_v/\rho_{firm}\right)}, \qquad r_{cone} = \left(\frac{3V_{spoil}}{\pi\tan 35°}\right)^{1/3} \]

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.