Skip to content

Implement Catalog#

This page describes each implement of the game: its function, its mechanics, its controls, its parameters, its command-line options and its rig controls. Implement Mechanics gives the force models, the hitch and the hydraulics that the implements share.

Scope and Assumptions#

The implement model of the Maxxum has eight implements. The identifier is the value of the option -Implement= and the name of the data file.

Implement Identifier Attachment Mass Working Width PTO
Cultivator cultivator Three-point hitch 620 kg 2.7 m No
Chisel plow chisel_plow Three-point hitch 1100 kg 2.7 m No
Disc harrow disc_harrow Three-point hitch 1450 kg 3.0 m No
Seed drill seed_drill Three-point hitch 1250 kg 3.0 m No
Mounted sprayer mounted_sprayer Three-point hitch 270 kg 12 m 540 rpm
Loader with bale fork loader_bale_fork Front subframe 820 kg 1.9 m No
Backhoe attachment backhoe_attachment Rear subframe 850 kg 0.49 m No
Square baler square_baler Drawbar, trailed 6900 kg 1.96 m 1000 rpm

The masses are without payload. The game has two more machines that use the ASABE draft table: the harvest cutter and the potato digger. The legacy tractor has its own implements.

These assumptions apply to all implements.

  • Each implement is a reconstruction from reference photographs and typical dimensions. It is not manufacturer data.
  • The masses, the inertias and the joint positions come from mechanics.json of the source asset package.
  • The Maxxum carries one implement in a session. The Polaris has no implements.
  • The numbers of this page come from the shipped data files. The examples use ImplementSteadyState with the soil preset dry_loam at 8 km/h.

Symbols#

This page uses the symbols of Implement Mechanics and these additional symbols.

Symbol Quantity Unit
\(\varphi_t\) Trip angle of a tine rad
\(J_t, M_0, k_t, c_t\) Inertia, preload, stiffness and damping of the tine trip kg m², N m, N m/rad, N m s/rad
\(\sigma\) Setting of the roller carrier rad
\(\varphi_a\) Angle of an opener arm, positive up rad
\(F_d\) Spring force of one drill row N
\(T_m\) Drive torque of the seed meter N m
\(s\) Slip of the ground wheel 1
\(a_s\) Seed rate for each unit of area kg/m²
\(a_r\) Application rate of the sprayer m³/m²
\(p_b\) Boom pressure Pa
\(u\) Slosh displacement of the liquid m
\(q_1, q_2\) Lift angle and curl angle of the loader rad
\(\tau\) Gravity torque about a joint N m
\(\vartheta\) Crank angle of the baler rad
\(\omega_f, J_f\) Speed and inertia of the baler flywheel rad/s, kg m²
\(k_g\) Speed ratio between crank and PTO 1
\(s_p\) Travel of the plunger from top dead centre m
\(m_p\) Mass of the plunger kg
\(\dot m_c\) Crop flow into the baler kg/s

Controls and Options for All Implements#

The keys below apply to the Maxxum with each implement. The HUD shows the keys of the current implement while you hold Tab.

Key Function
=, - Increase or decrease the hand throttle by 5 %.
P Set or release the park brake.
E Engage or disengage the PTO.
O Set or release the transport state.
I Show or hide the work panels of the HUD.

A drive script and the vehicle bridge can set the same controls. The Command-Line Options describe the drive script. The Vehicle Bridge describes the message implement.

Name Type Unit Default Description
-Implement= string none Identifier of the implement.
-ImplementDepth= number m 0.15 Working depth of the cultivator, the chisel plow and the disc harrow. A negative value selects the design depth.
-HitchMode= string auto auto, position, draft or float.
-DraftSetpoint= number N 15000 Draft set-point, 1000 to 60000.
-SprayRate= number L/ha 150 Application rate of the sprayer, 40 to 600.
-SeedRate= number kg/ha 150 Seed rate of the drill, 2 to 400.
-WindrowDensity= number kg/m 3 Hay for each metre of windrow, 0 to 12.
-BaleMass= number kg 450 Mass of a round bale for the loader, 50 to 1200.
-BoomLift= number m 0.5 Lift of the sprayer boom, 0 to 0.6.
-ImplementSet= string Data keys for this session, for example tines.rake_deg=50;control.deadband=0.03.

The defaults come from the block implement_model of tractor.json. The game stops with a message when a value is out of its range.

Cultivator#

The cultivator has nine spring-trip tines in two rows. The tines are 0.3 m apart across the width, and the rows are 0.77 m apart. It loosens the top soil layer to a design depth of 0.12 m. The hitch sets the depth, because the implement has no gauge wheels.

Mechanics#

Each tine turns about a trip pivot at the height tines.pivot_z_m. The point is at \((t_x, t_z)\) from the pivot when the trip angle is zero. For the trip angle \(\varphi_t\), the point moves to the rear and the rake angle increases:

\[ x_t = t_x\cos\varphi_t + t_z\sin\varphi_t, \qquad z_t = -t_x\sin\varphi_t + t_z\cos\varphi_t \]
\[ d = \max\left(0,\; -h - (z_{pivot} + z_t)\right), \qquad \alpha = \alpha_0 + \varphi_t \]

TineSoilForce gives \(H\) and \(V\) for this depth and rake angle. The force on the tine is:

\[ F_x = -H\,f(v) - F_{obs}\,|f(v)|, \qquad F_z = -V\,|f(v)| \]

\(F_{obs}\) is an optional obstacle force for a stone. The force acts on the tool face at the height \(h_F\) above the point:

\[ r_x = x_t - h_F\frac{\cos\alpha}{\max(0.05, \sin\alpha)}, \qquad r_z = z_t + h_F \]

The soil moment about the trip pivot is \(M_s = r_z F_x - r_x F_z\). A positive moment trips the tine. A spring holds the tine on its stop with the preload \(M_0\). The tine moves when the soil moment is more than the preload:

\[ J_t\ddot\varphi_t = M_s - (M_0 + k_t\varphi_t) - c_t\dot\varphi_t \]

The code integrates this equation in steps of 1 ms with an implicit spring and damper. The soil moment changes with the trip angle, thus the code uses its slope \(S = \mathrm{d}M_s/\mathrm{d}\varphi_t\) from a difference of ±0.01 rad. With the step \(\delta t\) and the angle \(\varphi_0\) at the start of the physics step:

\[ \dot\varphi_t \leftarrow \frac{\dot\varphi_t + \dfrac{\delta t}{J_t}\left(M_s + S(\varphi_t - \varphi_0) - M_0 - k_t\varphi_t\right)}{1 + \dfrac{\delta t\,c_t}{J_t} + \dfrac{\delta t^2\max(0, k_t - S)}{J_t}} \]

The trip angle stays between zero and tines.trip_max_deg. The flag bTripped shows a trip angle of more than 0.01 rad. The draft of the implement is the sum of the nine tine drafts. The source functions are ImplMountedLoads and ImplStepThreePoint.

At the design depth, the model gives a draft of 9.6 kN and a downward soil force of 3.9 kN. The ram pressure is 5.1 MPa. One tine at a depth of 0.2 m has \(H = 2.8\) kN and \(V = 1.2\) kN. Its failure plane has an angle of 44° and a rupture distance of 0.41 m.

Controls and States#

Control Key Drive Script Key Effect
Raise or lower Q raise Lifts the hitch to the top or lowers it to the working position.
Hitch mode F hitch_mode Selects position, draft or float in this sequence.
Depth Up, Down depth_m, lever Moves the hitch lever by 25 % of its travel in one second. Up decreases the depth.
Draft set-point Page Up, Page Down draft_setpoint_kn Changes the set-point by 1 kN.

The default mode is the position mode. The implement starts in the raised position. The implement card of the HUD shows the depth, the draft, the downward force, the hitch state and the number of tripped tines. The outputs bInSoil, bTripped, DepthM, DraftN, SensedDraftN and CriticalDepthM give the state.

Parameters#

The file is Acres/Content/Simulation/implements/cultivator.json. The shared keys are in Implement Mechanics.

Name Type Unit Default Description
tines.count integer 9 Number of tines, 16 maximum.
tines.pivot_x_m array m -0.38, -1.15 alternately X position of each trip pivot in the implement frame.
tines.pivot_y_m array m -1.2 to 1.2 in steps of 0.3 Y position of each trip pivot.
tines.pivot_z_m number m 0.7 Height of the trip pivots.
tines.tip_dx_m, tines.tip_dz_m number m 0.12, -0.905 Point relative to the pivot at a trip angle of zero.
tines.width_m number m 0.054 Width of the point.
tines.rake_deg number deg 45 Rake angle of the point.
tines.mass_kg number kg 24 Mass of one tine.
tines.inertia_kg_m2 number kg m² 6.8 Inertia of one tine about its pivot.
tines.trip_preload_nm number N m 1800 Spring preload \(M_0\).
tines.trip_stiffness_nm_rad number N m/rad 2800 Spring stiffness \(k_t\).
tines.trip_damping_nm_s_rad number N m s/rad 120 Damping \(c_t\).
tines.trip_max_deg number deg 18 Travel of the trip.

Options and Rig Controls#

The options -ImplementDepth=, -HitchMode= and -DraftSetpoint= apply. The hitch can set a depth between 0 and 0.279 m.

Rig Control Unit Range Source
trip_00_deg to trip_08_deg deg 0 to 18 Trip angle of each tine.
rear_hitch_lift_deg on the Maxxum rig deg -5 to 32 Angle \(\theta_{link}\) of the lower links.

Chisel Plow#

The chisel plow has nine spring-trip shanks with the same layout as the cultivator. It is heavier and has stronger trip springs. It breaks the soil to a design depth of 0.20 m.

Mechanics#

The mechanics are the same as for the cultivator. Only the mass, the design depth and the trip springs are different. The trip preload of 4050 N m is equal to a force of 4.5 kN at the point.

At the design depth, the model gives a draft of 25.5 kN and a downward soil force of 10.6 kN. The ram pressure is 10.5 MPa. The draft increases with approximately the square of the depth. The draft mode of the hitch thus is the usual mode for this implement.

Controls and States#

The controls, the HUD card and the outputs are the same as for the cultivator.

Parameters#

The file is Acres/Content/Simulation/implements/chisel_plow.json. The table gives only the keys that are different from the cultivator.

Name Type Unit Default Description
mass_kg number kg 1100 Mass.
com_x_m, com_y_m, com_z_m number m -0.6258, 0, 0.6151 Centre of mass.
inertia_x_kg_m2, inertia_y_kg_m2, inertia_z_kg_m2 number kg m² 820.4, 322.8, 836.3 Principal inertia.
design_depth_m number m 0.2 Design working depth.
tines.inertia_kg_m2 number kg m² 5.7 Inertia of one shank about its pivot.
tines.trip_preload_nm number N m 4050 Spring preload.
tines.trip_stiffness_nm_rad number N m/rad 9000 Spring stiffness.

Options and Rig Controls#

The options and the rig controls are the same as for the cultivator.

Disc Harrow#

The disc harrow is a compact harrow with two rows of 12 concave discs and a packer roller behind them. It cuts and mixes the top soil layer. The discs have a diameter of 0.56 m. The front row throws the soil to one side and the rear row throws it back.

Mechanics#

All discs have the same depth on the flat ground plane. With the height \(z_c\) of the disc centres:

\[ d = \max\left(0,\; -h - \left(z_c - \tfrac{1}{2}D_d\right)\right) \]

DiscSoilForce gives the draft \(D\), the side force \(S\) and the vertical force of one disc. Each disc applies this force at half of its depth:

\[ F_x = -D\,f(v), \qquad F_y = -t_i\,S\,|f(v)|, \qquad F_z = -\left((V + R_b)\,|f(v)| - R_b\right) \]

\(t_i\) is the throw direction of the disc, 1 or -1. The side forces of the two rows are opposite, thus the net side force is almost zero. The outputs FrontRowSideN and RearRowSideN give the side force of each row.

The roller has 21 rings on a carrier that turns about a pivot. The setting \(\sigma\) of the carrier moves the axle:

\[ z_{axle} = z_{cp} - a_x\sin\sigma + a_z\cos\sigma \]

\((a_x, a_z)\) is the axle relative to the carrier pivot at the height \(z_{cp}\). A larger setting lifts the roller, and the discs go deeper. The sinkage of the roller is \(z = \max(0, -h - (z_{axle} - \tfrac{1}{2}D_w))\). Each ring carries the Bekker load \(W(z)\) on tilled soil.

In the float mode, the lift rams carry no load. The frame height \(h\) is the height where the discs and the roller together carry the weight:

\[ \sum_{discs} F_z + 21\,W(z) = m g \]

On firm ground with no roller sinkage, ImplementControlsForDepth gives the setting for a depth \(d_{set}\):

\[ d_{set} = z_{axle}(\sigma) - \tfrac{1}{2}D_w - \left(z_c - \tfrac{1}{2}D_d\right) \]

The range of the setting gives depths from 0 to 0.229 m. In firm dry soil the uplift of the discs holds the harrow above this depth. With the setting for 0.10 m, the model gives a depth of 0.083 m and a draft of 13.1 kN in the preset dry_loam. The depth is 0.101 m in wet_silty_clay_loam and 0.116 m in sand.

The discs turn at \(v\cos\beta_d / \max(0.05, R - d/2)\) and the roller turns at \(2v/D_w\). These speeds only move the rig.

Controls and States#

Control Key Drive Script Key Effect
Raise or lower Q raise Lifts the harrow or lowers it to the ground.
Hitch mode F hitch_mode Selects position, draft or float.
Depth Up, Down depth_m In the float mode, turns the roller carrier at 6 deg/s. In the other modes, moves the hitch lever.
Draft set-point Page Up, Page Down draft_setpoint_kn Changes the set-point by 1 kN.

The default mode is the float mode with the lever at zero. The implement starts in the raised position. The HUD card shows the depth, the setting, the draft, the downward force and the hitch state. The text "riding" shows the flag bFloating. The outputs GaugeLoadN and GaugeSinkageM give the load and the sinkage of the roller.

Parameters#

The file is Acres/Content/Simulation/implements/disc_harrow.json.

Name Type Unit Default Description
mass_kg number kg 1450 Mass.
com_x_m, com_y_m, com_z_m number m -0.9359, 0.0199, 0.5661 Centre of mass.
design_depth_m number m 0.1 Design working depth.
working_width_m number m 3 Working width.
discs.count integer 24 Number of discs, 32 maximum.
discs.x_m array m -0.5 front, -1.25 rear X position of each disc centre.
discs.y_m array m 0.25 apart Y position of each disc centre.
discs.throw array 1 front, -1 rear Throw direction. 1 moves the soil to +Y.
discs.center_z_m number m 0.23 Height of the disc centres at zero lift.
discs.mass_kg number kg 12 Mass of one disc with hub.
discs.diameter_m number m 0.56 Disc diameter \(D_d\).
discs.dish_depth_m number m 0.035 Dish depth \(h_d\).
discs.disc_angle_deg number deg 16 Disc angle \(\beta_d\).
discs.tilt_deg number deg 0 Tilt \(\tau\) from the vertical.
discs.rim_width_m number m 0.001 Effective rim width \(t_r\).
roller.count integer 21 Number of rings.
roller.diameter_m, roller.width_m number m 0.49, 0.05 Diameter and width of one ring.
roller.x_m number m -1.92 X position of the axle.
roller.carrier_pivot_x_m, roller.carrier_pivot_z_m number m -1.3, 0.65 Pivot of the carrier.
roller.axle_dx_m, roller.axle_dz_m number m -0.62, -0.4 Axle relative to the pivot at a setting of zero.
roller.min_setting_deg, roller.max_setting_deg number deg -12, 15 Range of the setting.
roller.bearing_resistance_ratio number 0.01 Bearing resistance as a fraction of the load.
roller.tilled boolean 1 The roller is on tilled soil.
roller.pneumatic boolean 0 The rolling resistance uses the Bekker law.

Options and Rig Controls#

The options -ImplementDepth=, -HitchMode= and -DraftSetpoint= apply. The depth option sets the roller carrier.

Rig Control Unit Range Source
disc_spin_deg deg One turn Spin angle of the discs.
roller_depth_deg deg -12 to 15 Roller setting \(\sigma\).
roller_spin_deg deg One turn Spin angle of the roller.

Seed Drill#

The seed drill is a mechanical drill with 15 rows at 0.2 m. Each row has a double-disc opener and a press wheel on a spring arm. Two ground wheels carry the frame, and one of them drives the seed meter. The hopper contains 0.65 m³ of seed, which is 487.5 kg.

Mechanics#

The drill operates in the float mode on its ground wheels. The wheels are pneumatic tyres on firm soil. Their sinkage comes from BekkerRigidWheelLoadN and their rolling resistance from BrixiusRollingResistanceN. The openers and the press wheels operate in the seedbed, thus they use the tilled soil.

Each row arm turns about a pivot \((x_v, z_v)\) by the angle \(\varphi_a\). The opener centre, the press wheel centre and the centre of mass of the row turn with it. For the ground at \(-h\), the opener depth and the press wheel sinkage are:

\[ d_o = \max\left(0,\; -h - \left(z_O - \tfrac{1}{2}D_o\right)\right), \qquad z_p = \max\left(0,\; -h - \left(z_W - \tfrac{1}{2}D_p\right)\right) \]

The press wheel carries the Bekker load \(W_p(z_p)\) and has the compaction resistance \(R_p\). The two opener discs have the forces of DiscSoilForce at the depth \(d_o\):

\[ U_o = -2\left((V + R_b)\,|f(v)| - R_b\right), \qquad D_o = 2D\,|f(v)| \]

\(U_o\) is the upward force and \(D_o\) is the draft of the row. The moment about the pivot is positive when it lifts the row:

\[ M = M_W + M_O + (x_O - x_v)F_d + (x_C - x_v)\,m_r g \]
\[ M_W = -(x_W - x_v)W_p + (h + z_v)R_p, \qquad M_O = -(x_O - x_v)U_o + \left(h + \tfrac{1}{2}d_o + z_v\right)D_o \]

\(M_W\) is the moment of the press wheel and \(M_O\) is the moment of the opener. \(F_d\) is the spring force at the opener, and \(m_r\) is the mass of the row with its centre at \(x_C\). ImplSolveRow finds the angle with \(M = 0\) by 30 bisection steps between the two stops. The press wheel thus sets the seed depth. The model solves one row and uses the result for the 15 rows.

The ground wheel must turn the seed meter. The necessary traction force for each wheel and the largest force of the contact are:

\[ F_n = \frac{2T_m}{D_w}\cdot\frac{N_{drive}}{N_w}, \qquad F_{max} = c\,b\,l_c + W\tan\phi \]

\(l_c\) is the contact length of the wheel, 0.02 m minimum. The Janosi-Hanamoto relation \(F = F_{max}(1 - e^{-s\,l_c/2K})\) then gives the slip:

\[ s = \min\left(1,\; -\frac{2K}{l_c}\ln\left(1 - \frac{F_n}{F_{max}}\right)\right)\ \ (F_n < 0.999F_{max}), \qquad s = 1\ \ \text{(if not)} \]

The meter torque also adds the draft \(2N_{drive}T_m/D_w\). The seed flow follows the ground wheel:

\[ \dot m_s = a_s\,W_d\,v\,(1 - s), \qquad W_d = N_{rows}\,s_{row} \]

The meter operates only when the wheels have load, the speed is positive, the openers are in the soil and the meter control is on. The meter stops in reverse travel and with an empty hopper. The flag bStarved shows an empty hopper. In the preset dry_loam, the openers are 0.030 m deep and the draft is 2.4 kN. The sown rate is 149.4 kg/ha for a setting of 150 kg/ha.

The seed is in a hopper with a V section. For the seed mass \(m_s\), the fill height \(h_f\) is the solution of:

\[ \frac{m_s}{\rho_s L_h} = B_0 h_f + \frac{k_h h_f^2}{2}, \qquad k_h = \frac{B_1 - B_0}{H_h} \]

\(B_0\) and \(B_1\) are the bottom width and the top width, \(H_h\) is the section height and \(L_h\) is the length. The centroid of the seed is at:

\[ z_s = z_b + \frac{B_0 h_f^2/2 + k_h h_f^3/3}{B_0 h_f + k_h h_f^2/2} \]

The centre of mass thus goes down while the hopper empties.

Controls and States#

Control Key Drive Script Key Effect
Raise or lower Q raise Lifts the drill or lowers it to the ground.
Hitch mode F hitch_mode Selects position, draft or float.
Seed meter T meter Engages or disengages the meter clutch.

The default mode is the float mode with the meter on. The implement starts in the raised position with a full hopper. The HUD card shows the opener depth, the meter state, the seed mass, the sown rate, the sown area, the draft and the hitch state. The outputs OpenerDepthM, SeedFlowKgS, SownRateKgM2 and GaugeLoadN give the state.

Parameters#

The file is Acres/Content/Simulation/implements/seed_drill.json.

Name Type Unit Default Description
mass_kg number kg 1250 Mass without seed.
com_x_m, com_y_m, com_z_m number m -0.8709, -0.0191, 0.909 Centre of mass.
design_depth_m number m 0.05 Design seed depth.
working_width_m number m 3 Working width.
roller.count integer 2 Number of ground wheels.
roller.diameter_m, roller.width_m number m 0.8, 0.208 Diameter and width of a ground wheel.
roller.x_m number m -0.7 X position of the wheel axle.
roller.carrier_pivot_z_m number m 0.4 Height of the wheel axle.
roller.tilled, roller.pneumatic boolean 0, 1 Pneumatic tyres on firm soil.
drill.rows integer 15 Number of rows, 24 maximum.
drill.row_spacing_m number m 0.2 Row spacing.
drill.row_y0_m number m -1.4 Y position of the first row.
drill.arm_pivot_x_m, drill.arm_pivot_z_m number m -0.68, 0.66 Pivot of the opener arm.
drill.arm_min_deg, drill.arm_max_deg number deg -12, 15 Range of the arm angle.
drill.opener_diameter_m number m 0.44 Diameter of an opener disc.
drill.opener_disc_angle_deg number deg 5 Angle of each opener disc to the travel direction.
drill.opener_rim_width_m number m 0.003 Effective rim width.
drill.opener_dish_depth_m, drill.opener_tilt_deg number m, deg 0, 0 The opener discs are flat and vertical.
drill.opener_x_m, drill.opener_center_z_m number m -1.38, 0.19 Opener centre at an arm angle of zero.
drill.press_diameter_m, drill.press_width_m number m 0.3, 0.072 Diameter and width of a press wheel.
drill.press_x_m, drill.press_center_z_m number m -1.69, 0.15 Press wheel centre at an arm angle of zero.
drill.row_mass_kg number kg 17 Mass of one row unit.
drill.row_com_x_m, drill.row_com_z_m number m -1.144, 0.484 Centre of mass of one row unit.
drill.downforce_n number N 400 Spring force \(F_d\) of one row at the opener.
drill.hopper_m3 number m³ 0.65 Capacity of the hopper.
drill.seed_density_kg_m3 number kg/m³ 750 Bulk density of the seed.
drill.hopper_x_m, drill.hopper_bottom_z_m number m -0.83, 1.05 Position of the hopper.
drill.hopper_bottom_width_m, drill.hopper_top_width_m number m 0.52, 1.04 Bottom width and top width of the V section.
drill.hopper_height_m, drill.hopper_length_m number m 0.68, 2.8 Height and length of the hopper.
drill.seed_rate_kg_ha number kg/ha 150 Seed rate. The option -SeedRate= replaces it.
drill.meter_torque_nm number N m 40 Drive torque \(T_m\) of the meter at the ground wheel.
drill.ground_wheel_drive_count integer 1 Number of wheels that drive the meter.

Options and Rig Controls#

The options -SeedRate= and -HitchMode= apply. The drill has no depth setting, thus -ImplementDepth= has no effect.

Rig Control Unit Range Source
opener_00_deg to opener_14_deg deg -12 to 15 Arm angle \(\varphi_a\) of each row.
meter_spin_deg deg One turn Spin angle of the meter shaft.
press_spin_deg deg One turn Spin angle of the press wheels.
ground_wheel_spin_deg deg One turn Spin angle of the ground wheels with slip.
lid_open_deg deg 0 to 105 The model always sends 0.

Mounted Sprayer#

The mounted sprayer has a tank of 800 L and a boom of 12 m with 24 nozzles. The PTO drives its diaphragm pump at 540 rpm. The dry mass is 270 kg: 200 kg for the tank and frame and 70 kg for the boom.

Mechanics#

The pump is a positive-displacement pump. Its flow follows the PTO speed:

\[ Q_p = Q_{rated}\frac{\omega_{pto}}{\omega_{rated}} \]

The rate controller sets the boom pressure for the application rate \(a_r\). The flow for each nozzle and the orifice law of ISO 10625 give:

\[ q_w = \frac{a_r\,W_b\,|v|}{N_n}, \qquad p_b = \mathrm{clamp}\left(p_{ref}\left(\frac{q_w}{q_{ref}}\right)^2,\; p_{min},\; p_{max}\right) \]
\[ Q_n = N_n\,q_{ref}\sqrt{\frac{p_b}{p_{ref}}} \]

\(W_b = N_n s_n\) is the boom width from the nozzle count and the nozzle spacing. The pump limits the flow to \(Q_p(1 - r_a)\), where \(r_a\) is the agitation ratio. When the pump limits the flow, the pressure decreases to \(p_{ref}(Q_n/(N_n q_{ref}))^2\).

The sprayer sprays only when the valves are open, the boom is fully open and the pump turns. The speed must be more than 0.1 m/s, and the tank must contain liquid. The applied rate is \(Q_n/(W_b|v|)\). Below the minimum pressure, the sprayer applies more than the set rate.

The full pump flow circulates at the regulator pressure. The pump power and the PTO torque are:

\[ P_{pto} = \frac{\max(p_b, 0.5\ \mathrm{bar})\,Q_p}{\eta_p}, \qquad T_{pto} = \frac{P_{pto}}{\omega_{pto}} \]

At 8 km/h and 150 L/ha, the nozzle flow is 24 L/min at 2.08 bar and the PTO power is 0.57 kW.

The liquid sloshes in the tank. For each horizontal axis with the tank dimension \(a\) and the liquid depth \(h_l\), the first slosh mode is an equivalent pendulum:

\[ \omega_s^2 = \frac{\pi g}{a}\tanh\left(\frac{\pi h_l}{a}\right), \qquad \frac{m_s}{m_l} = \mathrm{clamp}\left(\frac{8a}{\pi^3 h_l}\tanh\left(\frac{\pi h_l}{a}\right),\; 0,\; 1\right) \]

The slosh displacement \(u\) follows the chassis acceleration \(a_c\) with the damping ratio \(\zeta\). The code uses an implicit step:

\[ \ddot u + 2\zeta\omega_s\dot u + \omega_s^2 u = -a_c, \qquad \dot u \leftarrow \frac{\dot u + \Delta t\,(-a_c - \omega_s^2 u)}{1 + 2\zeta\omega_s\Delta t + \omega_s^2\Delta t^2} \]

The slosh mass applies the force \(-m_s\ddot u\) at the centre of the liquid. Its weight moves with \(u\), which gives a moment. The fixed part of the liquid is in the mass of the implement. No slosh occurs below a liquid depth of 0.01 m.

The boom folds in two steps. For the fold command \(c_f\) between 0 and 1, the targets of the outer and inner sections are:

\[ \varphi_o = \mathrm{clamp}(2c_f, 0, 1)\,\varphi_{o,max}, \qquad \varphi_i = \mathrm{clamp}(2c_f - 1, 0, 1)\,\varphi_{i,max} \]

The outer section folds first, and the inner section unfolds first. Each section moves at sprayer.fold_rate_deg_s. The masses of the boom sections move with the fold angles, thus the centre of mass changes. The hitch holds the sprayer in the position mode with the lever at 0.5, which is a lift angle of 13.5°.

Controls and States#

Control Key Drive Script Key Effect
Raise or lower Q raise Lifts the sprayer to the top or lowers it to the lever position.
PTO E pto Drives the pump. The key also sets the hand throttle for 540 rpm.
Spray T spray Opens or closes the section valves.
Boom fold Y boom_fold Folds or unfolds the boom.
Transport O transport Lifts the hitch, stops the PTO and folds the boom.

The implement starts in the raised position with a full tank, closed valves and an unfolded boom. Auto PTO disengages the PTO above a lift angle of 20°, thus you must lower the sprayer before you spray. The HUD card shows the tank volume, the valve state, the applied rate, the boom pressure and the sprayed area. The outputs SprayFlowM3s, BoomPressurePa, AppliedRateM3M2 and bStarved give the state.

Parameters#

The file is Acres/Content/Simulation/implements/mounted_sprayer.json.

Name Type Unit Default Description
mass_kg number kg 200 Mass of the fixed part: tank shell, frame and pump.
com_x_m, com_y_m, com_z_m number m -0.6509, -0.0902, 1.1106 Centre of mass of the fixed part.
working_width_m number m 12 Working width.
sprayer.tank_m3 number m³ 0.8 Capacity of the tank.
sprayer.liquid_density_kg_m3 number kg/m³ 1000 Density of the liquid.
sprayer.tank_x_m, sprayer.tank_bottom_z_m number m -0.77, 0.7 Centre and bottom height of the tank.
sprayer.tank_length_m, sprayer.tank_width_m number m 1, 1.4 Inner length and width of the tank.
sprayer.nozzle_count integer 24 Number of nozzles.
sprayer.nozzle_spacing_m number m 0.5 Nozzle spacing \(s_n\).
sprayer.nozzle_rated_flow_l_min number L/min 1.2 Rated flow \(q_{ref}\) of one nozzle.
sprayer.nozzle_rated_pressure_pa number Pa 300000 Rated pressure \(p_{ref}\).
sprayer.min_pressure_pa, sprayer.max_pressure_pa number Pa 100000, 500000 Pressure range of the nozzles.
sprayer.application_l_ha number L/ha 150 Application rate. The option -SprayRate= replaces it.
sprayer.pump_flow_l_min number L/min 99 Pump flow at the rated speed.
sprayer.pump_rated_rpm number rpm 540 Rated pump speed.
sprayer.pump_efficiency number 0.6 Pump efficiency \(\eta_p\).
sprayer.agitation_ratio number 0.1 Return flow for agitation as a fraction of the pump flow.
sprayer.boom_lift_mass_kg number kg 16 Mass of the lift carriage.
sprayer.inner_mass_kg, sprayer.outer_mass_kg, sprayer.tip_mass_kg number kg 15, 9, 3 Mass of each boom section on one side.
sprayer.boom_x_m, sprayer.boom_z_m number m -1.467, 0.837 Position of the boom at a lift of zero.
sprayer.inner_hinge_y_m, sprayer.outer_hinge_y_m, sprayer.tip_hinge_y_m number m 0.75, 3.3, 5.4 Y position of the hinges.
sprayer.inner_com_y_m, sprayer.outer_com_y_m, sprayer.tip_com_y_m number m 2.024, 4.352, 5.702 Y position of the section centres.
sprayer.inner_fold_max_deg, sprayer.outer_fold_max_deg number deg 100, 175 Fold limits.
sprayer.fold_rate_deg_s number deg/s 20 Fold rate.
sprayer.slosh_damping_ratio number 0.05 Damping ratio \(\zeta\) of the slosh.

Options and Rig Controls#

The options -SprayRate=, -BoomLift= and -HitchMode= apply.

Rig Control Unit Range Source
pto_spin_deg deg One turn Angle of the pump shaft.
boom_lift_m m 0 to 0.6 Boom lift from -BoomLift=.
fold_inner_deg deg 0 to 100 Fold angle of the inner sections.
fold_outer_deg deg 0 to 175 Fold angle of the outer sections.
tip_breakaway_deg deg -25 to 25 The model always sends 0.

Loader with Bale Fork#

The loader is a front loader on a subframe with a bale fork. It lifts round bales with a mass of up to 1200 kg. The total mass is 820 kg: 370 kg for the subframe, 280 kg for the boom and 170 kg for the fork carrier.

Mechanics#

The loader has two joints in the tractor frame. The boom turns about the boom pivot by the lift angle \(q_1\). The fork carrier turns about the carrier pivot by the curl angle \(q_2\), and then it turns with the boom. A positive angle moves the points in front of a pivot down. The gravity torques about the two joints are:

\[ \tau_1 = g\left(m_b(x_b - x_{bp}) + m_c(x_c - x_{bp}) + m_L(x_L - x_{bp})\right), \qquad \tau_2 = g\left(m_c(x_c - x_{cp}) + m_L(x_L - x_{cp})\right) \]

\(m_b\), \(m_c\) and \(m_L\) are the masses of the boom, the carrier and the payload. \(x_b\), \(x_c\) and \(x_L\) are their X positions in the current pose. Two lift rams and two curl rams hold these torques. ImplHydraulicJoint gives the ram forces, the pressures and the motion. A positive lever value lifts the boom or curls the fork back, thus it decreases the rig angle. The two levers share the valve flow.

The loader has no soil force. It changes the mass and the centre of mass of the Maxxum. With the mass \(m_T\) and the centre \(x_T\) of the Maxxum, the static axle loads are:

\[ F_{front} = \frac{m_T g\,x_T + m g\,x_c}{L_{wb}}, \qquad F_{rear} = (m_T + m)\,g - F_{front} \]

A bale of 450 kg gives a ram pressure of 2.2 MPa and a front axle load of 36.3 kN. Without a bale the front axle load is 29.4 kN. A full lift takes 7.1 s at the rated engine speed and uses 4.1 kW at the largest. The loader takes the nearest round bale that is less than 1.3 m from the load point of the fork. The bale is then a payload at the load point. When the loader releases the bale, the bale is a free rigid body again.

Controls and States#

Control Key Drive Script Key Effect
Lift Up, Down loader_lift Lifts or lowers the boom.
Curl Right, Left loader_curl Curls the fork back or tips it forward.
Bale G grab Takes the nearest round bale or releases the bale.

The HUD card shows the lift angle, the curl angle, the load and the ram pressure. The badge "Relief Open" shows a stall. The outputs FrontAxleN, RearAxleN, HydraulicPressurePa and bHydraulicStall give the state. Without a drive script, the game puts two round bales 7.5 m and 12 m in front of the start position.

Parameters#

The file is Acres/Content/Simulation/implements/loader_bale_fork.json. The positions are in the tractor frame.

Name Type Unit Default Description
mass_kg number kg 370 Mass of the subframe.
com_x_m, com_y_m, com_z_m number m 1.25, 0, 1.26 Centre of mass of the subframe.
loader.boom_mass_kg number kg 280 Mass of the boom.
loader.boom_com_x_m, loader.boom_com_z_m number m 2.148, 1.585 Centre of mass of the boom at rest.
loader.carrier_mass_kg number kg 170 Mass of the fork carrier.
loader.carrier_com_x_m, loader.carrier_com_z_m number m 4.121, 1.285 Centre of mass of the carrier at rest.
loader.boom_pivot_x_m, loader.boom_pivot_z_m number m 0.76, 1.77 Boom pivot on the subframe.
loader.carrier_pivot_x_m, loader.carrier_pivot_z_m number m 3.52, 1.18 Carrier pivot on the boom.
loader.load_x_m, loader.load_z_m number m 4.15, 1.15 Load point on the fork.
loader.lift_a_x_m, loader.lift_a_z_m number m 0.93, 0.9 Lift ram anchor on the subframe.
loader.lift_b_x_m, loader.lift_b_z_m number m 2.14, 1.86 Lift ram anchor on the boom.
loader.lift_bore_m, loader.lift_rod_m number m 0.10725, 0.0728 Bore and rod of a lift ram.
loader.curl_a_x_m, loader.curl_a_z_m number m 2.55, 1.78 Curl ram anchor on the boom.
loader.curl_b_x_m, loader.curl_b_z_m number m 3.62, 1.56 Curl ram anchor on the carrier.
loader.curl_bore_m, loader.curl_rod_m number m 0.0726, 0.04928 Bore and rod of a curl ram.
loader.lift_min_deg, loader.lift_max_deg number deg -52, 16 Range of the lift angle.
loader.curl_min_deg, loader.curl_max_deg number deg -55, 50 Range of the curl angle.
loader.relief_pressure_pa number Pa 17000000 Relief pressure of the loader valve.
loader.flow_l_min number L/min 85.9288 Flow of the loader valve.
loader.rated_payload_kg number kg 1200 Rated payload. The menu uses it for a check.
loader.mount_x_m number m 0.65 X position of the attachment point.
tractor.mass_kg number kg 5820 Mass of the Maxxum for the axle loads.
tractor.wheelbase_m, tractor.track_m number m 2.6416, 1.9 Wheelbase and track.
tractor.cg_x_m, tractor.cg_z_m number m 1.05664, 1.1 Centre of mass of the Maxxum.

Options and Rig Controls#

The option -BaleMass= sets the mass of the round bales.

Rig Control Unit Range Source
loader_lift_deg deg -52 to 16 Lift angle \(q_1\).
fork_curl_deg deg -55 to 50 Curl angle \(q_2\).

Backhoe Attachment#

The backhoe is on a rigid subframe behind the rear axle. It has a swing post, a boom, a dipper, a bucket and two stabilizers. The total mass is 850 kg. The bucket has a width of 0.49 m and a capacity of 0.12 m³.

Mechanics#

The arm is a chain of four joints. The bucket, the dipper and the boom turn about the Y axis at their pivots. Then the full arm turns about the Z axis at the swing post. The frame of the backhoe is the tractor frame with an offset of backhoe.mount_x_m. The model computes the position of the bucket tip in each step. The tip speed \(\mathbf{v}_t\) is the difference of two positions, with a limit of 4 m/s.

The tip depth uses the ground offset and the support plane of the chassis. When the tip is in the soil and moves, the teeth cut a slice:

\[ d_b = \min(d_{tip}, 0.15\ \mathrm{m}), \qquad q = \frac{m_s g}{\max(0.05,\; 0.5\,w_b)} \]

\(m_s\) is the soil in the bucket, which is a surcharge. SoilWedgeForce gives \(H\) and \(V\) for the depth \(d_b\), the bucket width \(w_b\) and a rake angle of 40° in plane strain. The dig force acts against the tip velocity, and the vertical part pulls the bucket down:

\[ \mathbf{F} = -H\tanh\left(\frac{|\mathbf{v}_t|}{0.1}\right)\frac{\mathbf{v}_t}{|\mathbf{v}_t|} - V\tanh\left(\frac{|\mathbf{v}_t|}{0.1}\right)\hat{\mathbf{z}} \]

The bucket takes soil while it cuts, with a fill efficiency of 80 %, until it is full:

\[ \Delta m_s = \mathrm{clamp}\left(V_b\,\rho - m_s,\; 0,\; 0.8\,\rho\,w_b\,d_b\,|\mathbf{v}_t|\,\Delta t\right) \]

The bucket empties at 150 kg/s when its angle is more than 0.35 rad and the tip is above the ground.

The weights of the bodies, the soil in the bucket and the dig force give a torque about each joint. The boom, the dipper and the bucket each have one ram. ImplHydraulicJoint moves them, and the three levers share the flow of 35 L/min. The swing has a rate \(\omega_{sw}\) of 0.6 rad/s at the full lever. It stalls when the load torque \(\tau_{sw}\) is more than backhoe.swing_torque_nm. The fluid power of the swing is \(|\tau_{sw}\,\omega_{sw}| + 200\,|\omega_{sw}|\) in watts.

The stabilizers turn down at backhoe.leg_rate_deg_s. The Maxxum then stands on six supports: four tyres and two feet. Each support \(i\) is a spring that can only push. For the heave \(w\), the pitch slope \(a\) and the roll slope \(b\) of the chassis:

\[ F_i = k_i\max\left(0,\; -(g_i + w + a\,x_i + b\,y_i)\right) \]

\(g_i\) is the gap of the support, which is zero for a tyre. The three equilibrium equations give \(w\), \(a\) and \(b\):

\[ \sum F_i = (m_T + m)\,g - F_z \]
\[ \sum x_i F_i = m_T g\,x_T + m g\,x_c - x_t F_z + z_t F_x, \qquad \sum y_i F_i = m g\,y_c - y_t F_z + z_t F_y \]

\((x_t, y_t, z_t)\) is the bucket tip and \(\mathbf{F}\) is the dig force. ImplSolveSupports solves the equations for the supports that have contact. With the stabilizers down, each foot carries 16.3 kN and the rear wheels have no load. The forces of the feet and the dig force are the external wrench on the chassis.

The dug soil comes out of the ground as a pit, and the released soil makes a spoil cone. Implement Mechanics gives these equations.

Controls and States#

Control Key Drive Script Key Effect
Boom Up, Down boom Lifts or lowers the boom.
Swing Left, Right swing Turns the arm about the swing post.
Dipper Home, End dipper Home moves the bucket away from the Maxxum. End pulls it in.
Bucket Page Up, Page Down bucket Page Up opens the bucket. Page Down closes it.
Stabilizers B stabilizers Lowers or lifts the stabilizers.
Transport O transport Moves all joints to the transport pose and lifts the stabilizers.

The HUD card shows the joint angles, the soil in the bucket, the dug mass, the tip depth, the dig force and the foot loads. The outputs DigForceN, FootLoadN, FrontAxleN, RearAxleN and bHydraulicStall give the state.

Parameters#

The file is Acres/Content/Simulation/implements/backhoe_attachment.json. The positions are in the backhoe frame.

Name Type Unit Default Description
mass_kg number kg 285 Mass of the subframe.
com_x_m, com_y_m, com_z_m number m 0.37, 0, 1.04 Centre of mass of the subframe.
backhoe.mount_x_m number m -0.78 Origin of the backhoe frame in the tractor frame.
backhoe.swing_mass_kg, backhoe.boom_mass_kg, backhoe.dipper_mass_kg, backhoe.bucket_mass_kg number kg 95, 180, 115, 65 Masses of the arm bodies.
backhoe.leg_mass_kg number kg 55 Mass of one stabilizer.
backhoe.swing_com_x_m, backhoe.swing_com_z_m number m -0.72, 0.85 Centre of mass of the swing post.
backhoe.boom_com_x_m, backhoe.boom_com_z_m number m -1.4, 1.872 Centre of mass of the boom.
backhoe.dipper_com_x_m, backhoe.dipper_com_z_m number m -2.619, 1.9 Centre of mass of the dipper.
backhoe.bucket_com_x_m, backhoe.bucket_com_z_m number m -3.576, 0.78 Centre of mass of the bucket.
backhoe.leg_com_x_m, backhoe.leg_com_y_m, backhoe.leg_com_z_m number m -0.48, 0.975, 0.472 Centre of mass of a stabilizer.
backhoe.swing_pivot_x_m number m -0.72 X position of the swing post.
backhoe.boom_pivot_x_m, backhoe.boom_pivot_z_m number m -0.83, 1.05 Boom pivot.
backhoe.dipper_pivot_x_m, backhoe.dipper_pivot_z_m number m -2.05, 2.62 Dipper pivot.
backhoe.bucket_pivot_x_m, backhoe.bucket_pivot_z_m number m -3.22, 1.04 Bucket pivot.
backhoe.tip_x_m, backhoe.tip_z_m number m -4.07, 0.45 Bucket tip at rest.
backhoe.boom_ram_a_x_m, backhoe.boom_ram_a_z_m, backhoe.boom_ram_b_x_m, backhoe.boom_ram_b_z_m number m -0.67, 1.42, -1.62, 2.2 Anchors of the boom ram.
backhoe.dipper_ram_a_x_m, backhoe.dipper_ram_a_z_m, backhoe.dipper_ram_b_x_m, backhoe.dipper_ram_b_z_m number m -1.26, 2.12, -2.39, 2.3 Anchors of the dipper ram.
backhoe.bucket_ram_a_x_m, backhoe.bucket_ram_a_z_m, backhoe.bucket_ram_b_x_m, backhoe.bucket_ram_b_z_m number m -2.37, 2.21, -3.18, 1.41 Anchors of the bucket ram.
backhoe.boom_ram_bore_m, backhoe.boom_ram_rod_m number m 0.09735, 0.06608 Bore and rod of the boom ram.
backhoe.dipper_ram_bore_m, backhoe.dipper_ram_rod_m number m 0.0825, 0.056 Bore and rod of the dipper ram.
backhoe.bucket_ram_bore_m, backhoe.bucket_ram_rod_m number m 0.07425, 0.0504 Bore and rod of the bucket ram.
backhoe.leg_pivot_x_m, backhoe.leg_pivot_y_m, backhoe.leg_pivot_z_m number m -0.48, 0.53, 0.68 Pivot of a stabilizer.
backhoe.foot_y_m, backhoe.foot_z_m number m 1.28, 0.195 Foot bottom at rest.
backhoe.swing_max_deg number deg 85 Swing range to each side.
backhoe.boom_min_deg, backhoe.boom_max_deg number deg -90, 15 Range of the boom angle.
backhoe.dipper_max_deg number deg 45 Dipper range to each side.
backhoe.bucket_min_deg, backhoe.bucket_max_deg number deg -65, 80 Range of the bucket angle.
backhoe.bucket_width_m number m 0.49 Cut width \(w_b\) of the bucket.
backhoe.bucket_capacity_m3 number m³ 0.12 Capacity \(V_b\) of the bucket.
backhoe.foot_stiffness_n_m number N/m 350000 Stiffness of a foot.
backhoe.foot_damping_n_s_m number N s/m 18000 Damping of a foot. The static support solution does not use it.
backhoe.leg_rate_deg_s, backhoe.leg_max_deg number deg/s, deg 30, 42 Rate and travel of a stabilizer.
backhoe.relief_pressure_pa number Pa 16995782 Relief pressure of the backhoe valve.
backhoe.flow_l_min number L/min 35 Flow of the backhoe valve.
backhoe.swing_torque_nm number N m 9000 Torque limit of the swing drive.
tractor.front_tyre_stiffness_n_m, tractor.rear_tyre_stiffness_n_m number N/m 250000, 400000 Tyre stiffness for the support solution.

Options and Rig Controls#

The backhoe has no options of its own. For the backhoe, the ground offset has the limits -1.3 m and 0.3 m, thus the bucket can go into its pit.

Rig Control Unit Range Source
swing_deg deg -85 to 85 Swing angle.
boom_deg deg -90 to 15 Boom angle.
dipper_deg deg -45 to 45 Dipper angle.
bucket_curl_deg deg -65 to 80 Bucket angle.
stabilizers_down_deg deg 0 to 42 Stabilizer angle.

Square Baler#

The square baler is a trailed baler for large bales of 0.8 m by 0.9 m by 2.4 m. The drawbar of the Maxxum pulls it. The PTO at 1000 rpm drives a flywheel, a gearbox and a crank with a plunger. A pickup takes the hay from a windrow.

Mechanics#

The baler has its own time step. ImplStepBaler divides the physics step into steps of baler.substep_s or less.

The pickup takes crop when it is down, the speed is more than 0.05 m/s and the flywheel is at 900 rpm or more. For the windrow density \(\lambda_w\):

\[ \dot m_c = \min\left(\dot m_{max},\; \lambda_w v\right) \]

The crop goes into the pre-chamber. The PTO shaft is a torsion spring between the Maxxum and the flywheel with a slip clutch and an overrunning clutch. For the twist \(\phi_s\) between the PTO angle and the flywheel angle:

\[ T_s = \mathrm{clamp}\left(k_s\phi_s + c_s(\omega_{pto} - \omega_f),\; 0,\; T_{slip}\right), \qquad 0 \le \phi_s \le \frac{T_{slip}}{k_s} \]

The flywheel thus cannot drive the Maxxum. The crank turns at \(\vartheta = k_g\theta_f\), where \(\theta_f\) is the flywheel angle. The plunger is a slider-crank with the crank radius \(r_c\) and the rod length \(l_c\). Its travel from top dead centre and the two derivatives are:

\[ s_p = \sqrt{l_c^2 - r_c^2\sin^2\vartheta} - r_c\cos\vartheta - (l_c - r_c) \]
\[ s_p' = r_c\sin\vartheta - \frac{r_c^2\sin\vartheta\cos\vartheta}{\sqrt{l_c^2 - r_c^2\sin^2\vartheta}} \]
\[ s_p'' = r_c\cos\vartheta - \frac{r_c^2(\cos^2\vartheta - \sin^2\vartheta)}{\sqrt{l_c^2 - r_c^2\sin^2\vartheta}} - \frac{r_c^4\sin^2\vartheta\cos^2\vartheta}{\left(l_c^2 - r_c^2\sin^2\vartheta\right)^{3/2}} \]

The stroke is \(2r_c = 0.71\) m. At the start of each crank turn, the pre-chamber gives its crop to the chamber as one flake with the mass \(m_f\). The plunger compresses the flake during the first half of the turn. With the chamber area \(A_c\), the flake density and the plunger force are:

\[ \rho_f = \frac{m_f}{A_c\max(10^{-4},\; 2r_c - s_p)}, \qquad F_p = p_{ext}\,A_c\left[\min\left(1,\; \frac{\rho_f - \rho_0}{\rho_b - \rho_0}\right)\right]^{n_c}\ \ (\rho_f > \rho_0) \]

\(\rho_0\) is the loose density, \(\rho_b\) is the bale density and \(p_{ext}\) is the extrusion pressure. At the bale density the full bale moves against the chamber friction. The plunger also has the slide friction \(\mu_p m_p g\) against its motion. The load torque on the flywheel uses the gear efficiency \(\eta_g\):

\[ T_L = \frac{k_g F_p s_p'}{\eta_g}\ \ (F_p s_p' \ge 0), \qquad T_L = k_g F_p s_p'\,\eta_g\ \ (F_p s_p' < 0) \]

The pickup and the packer take the idle torque \(P_{idle}/\omega_{rated}\) and the feed torque \(e_f\dot m_c/\max(10, \omega_f)\). The equation of motion of the flywheel includes the inertia of the plunger, which changes with the crank angle:

\[ J(\vartheta) = J_f + m_p(k_g s_p')^2, \qquad \dot\omega_f = \frac{T_s - T_L - T_{idle} - T_{feed} - m_p k_g^3 s_p' s_p''\,\omega_f^2}{J(\vartheta)} \]

The PTO power is the mean of \(T_s\omega_{pto}\) in the physics step. The acceleration of the plunger gives an inertia force on the frame:

\[ \ddot s_p = s_p''(k_g\omega_f)^2 + s_p' k_g\dot\omega_f, \qquad F_{pl} = m_p\,\overline{\ddot s_p} \]

Each flake adds the length \(m_f/(\rho_b A_c)\) to the bale in the chamber. When this length is 2.4 m, the bale is complete and moves to the chute. The subsequent bale pushes it along the chute. It falls to the ground when its centre goes past the end of the chute. A complete bale has a mass of \(\rho_b A_c L_b = 311\) kg. In the game, each bale on the ground is a rigid body.

The drawbar load is quasi-static. The tyres carry the axle load \(W_a\). Their rolling resistance is the Brixius resistance plus 1 % of the load. With the rolling resistance \(R\), the pickup force \(F_k = \dot m_c v\) and the longitudinal acceleration \(a_x\), the drawbar forces are:

\[ D_x = m a_x + R + F_k - F_{pl} \]
\[ D_z = \frac{(x_c - x_a)\,m g - z_c\,m a_x + z_b F_{pl} - 0.4\,F_k + z_d D_x}{-x_a}, \qquad W_a = m g - D_z \]

\(x_a\) is the axle position behind the drawbar eye, \(z_d\) is the eye height and \(z_b\) is the bale height. The code iterates these equations three times. The Maxxum receives \((-D_x, 0, -D_z)\) at the drawbar pin. At rest, the baler puts 19.4 kN on the drawbar. With 4 kg/m at 6 km/h, the mean PTO power is 47 kW. The plunger force has peaks of 360 kN and the PTO torque has peaks of 4.5 kN m.

Controls and States#

Control Key Drive Script Key Effect
Pickup Q pickup Lowers or lifts the pickup.
PTO E pto Drives the baler. The key also sets the hand throttle for 1000 rpm.
Transport O transport Lifts the pickup and stops the PTO.
Windrow density windrow_kg_m Sets the hay for each metre.

The baler starts with the pickup up, an empty chamber and the flywheel at the rated speed. A drive script can put a windrow on the field with the key windrow. The pickup then takes crop only where the windrow is. Without a windrow, the baler takes the crop of -WindrowDensity= at each position.

The HUD card shows the pickup state, the crop flow, the flywheel speed, the plunger force and the number of bales. It also shows the drawbar pull and the articulation angle. The badge "PTO Too Slow" shows the flag bPtoUnderspeed. The game writes ACRES_BALE_DROPPED to the log for each bale.

Parameters#

The file is Acres/Content/Simulation/implements/square_baler.json. The positions are in the baler frame with the origin below the drawbar eye.

Name Type Unit Default Description
mass_kg number kg 6900 Mass of the empty baler.
com_x_m, com_y_m, com_z_m number m -2.7905, -0.0633, 1.5333 Centre of mass.
working_width_m number m 1.96 Width of the pickup.
baler.drawbar_z_m number m 0.48 Height \(z_d\) of the drawbar eye.
baler.axle_x_m number m -3.885 Position \(x_a\) of the tandem axle.
baler.hitch_x_m number m -0.98 X position of the drawbar pin in the tractor frame.
baler.wheel_count integer 4 Number of tyres.
baler.wheel_diameter_m, baler.wheel_width_m number m 1.22, 0.416 Diameter and width of a tyre.
baler.pto_rated_rpm, baler.pto_min_rpm number rpm 1000, 900 Rated and minimum PTO speed.
baler.crank_ratio number 0.048 Speed ratio \(k_g\) between crank and PTO.
baler.crank_radius_m, baler.rod_length_m number m 0.355, 1.255 Crank radius \(r_c\) and rod length \(l_c\).
baler.plunger_mass_kg number kg 300 Mass \(m_p\) of the plunger.
baler.plunger_friction_ratio number 0.1 Slide friction coefficient \(\mu_p\).
baler.flywheel_inertia_kg_m2 number kg m² 35 Inertia \(J_f\) of the flywheel.
baler.shaft_stiffness_nm_rad number N m/rad 20000 Torsion stiffness \(k_s\) of the PTO shaft.
baler.shaft_damping_nm_s_rad number N m s/rad 300 Torsion damping \(c_s\).
baler.slip_clutch_nm number N m 6000 Torque \(T_{slip}\) of the slip clutch.
baler.gear_efficiency number 0.95 Efficiency \(\eta_g\) of the gearbox.
baler.chamber_width_m, baler.chamber_height_m number m 0.8, 0.9 Section of the chamber.
baler.bale_length_m number m 2.4 Length \(L_b\) of a bale.
baler.chamber_start_x_m, baler.chute_end_x_m number m -3.905, -6.5 Plunger face at the end of its stroke, and end of the chute.
baler.bale_z_m number m 1.25 Height \(z_b\) of the bale.
baler.loose_density_kg_m3, baler.bale_density_kg_m3 number kg/m³ 60, 180 Loose density \(\rho_0\) and bale density \(\rho_b\).
baler.extrusion_pressure_pa number Pa 500000 Extrusion pressure \(p_{ext}\).
baler.compression_exponent number 3 Exponent \(n_c\) of the compression law.
baler.feed_idle_power_w number W 6000 Idle power \(P_{idle}\) of pickup and packer.
baler.feed_energy_j_kg number J/kg 2500 Feed energy \(e_f\) for each kilogram of crop.
baler.pickup_width_m number m 1.96 Width of the pickup.
baler.pickup_capacity_kg_s number kg/s 12 Largest crop flow \(\dot m_{max}\).
baler.substep_s number s 0.0005 Time step of the flywheel and the plunger.

Options and Rig Controls#

The option -WindrowDensity= applies.

Rig Control Unit Range Source
pickup_lift_deg deg 0 or 22 0 with the pickup down, 22 with the pickup up.
pickup_spin_deg deg One turn Spin of the pickup.
pto_spin_deg deg 0 to 7500 Flywheel angle. 7500° is one crank turn, thus the plunger stays in phase.
wheel_spin_deg deg One turn Spin of the tyres.
chute_fold_deg deg -48 to 10 The model always sends 0.

The rig map makes the slider-crank motion of the plunger from pto_spin_deg.

Harvest Cutter and Potato Digger#

The harvest cutter is not an implement of the implement model. It is a function of the farm, and the option -FarmHarvester attaches it. Crops and Ground Classes describes the harvest. This section gives the loads on the Maxxum.

The cutter is a strip of 3 m at an offset to the rear and to the side, with a bunker of 600 kg. The key H or the option -FarmHarvestOn starts it. It cuts when the engine speed is 1200 rpm or more and the speed is between 0.05 m/s and 4 m/s. It stops when the bunker is full. The cutter adds a PTO load that increases linearly between 900 rpm and 1200 rpm of the engine:

\[ P_{pto} = P_{base} + P_{header}\,\mathrm{clamp}\left(\frac{n_e - 900}{300},\; 0,\; 1\right) \]

The header is a point mass 1 m behind the hitch at the height implement.cg_height_m. The crop in the bunker adds its mass at the same point. The Maxxum cannot have a mounted implement and the harvest cutter in the same session.

With -VehicleImplementType=potato_digger, the harvester is a potato digger for two rows with a hopper of 1500 kg. The digger has a draft from the ASABE form. The draft acts 0.8 m below the body origin at the hitch position:

\[ D = F_i\,(A + B\,S)\,W\,T\,\tanh\left(\frac{v}{0.2}\right), \qquad A = 250,\; B = 12,\; F_i = (1,\; 0.88,\; 0.78) \]

\(S\) is the speed in km/h after a lag of 0.5 s. \(W\) is the width of 1.8 m and \(T\) is the depth in cm. The digger only pulls on soil and while the harvester is on. The digger values are estimates, because the standard has no row for this machine.

Name Type Unit Default Description
harvester.width_m number m 3 Cut width. File farm.json.
harvester.offset_x_m, harvester.offset_y_m number m -3.2, 2.5 Position of the cutter relative to the Maxxum.
harvester.pto_kw number kW 35 PTO power \(P_{header}\) of the cutter.
harvester.bunker_capacity_kg number kg 600 Capacity of the bunker.
harvester.potato_digger.pto_kw number kW 20 PTO power of the digger.
harvester.potato_digger.bunker_capacity_kg number kg 1500 Capacity of the hopper.
implement.empty_mass_kg number kg 1200 Mass of the header. File tractor.json.
implement.cg_height_m number m 0.9 Height of the header mass above the ground.
implement.hitch_overhang_m number m 0.6 Hitch position behind the rear axle.

Implements of the Legacy Tractor#

The option -VehicleModel=legacy selects an older tractor with static meshes. The project keeps it for regression runs. The legacy tractor does not use the implement model. Its implement is a mass and a draft from ImplementDraftN. The option -VehicleImplement= selects none, mounted or trailed. A trailed implement is a second body on a ball joint.

Type ASABE Row A B C Texture Factors Width Unit
moldboard Moldboard plow 652 0 5.1 1, 0.70, 0.45 Width in m
chisel Chisel plow, 5 cm points 91 5.4 0 1, 0.85, 0.65 Tools at 0.30 m
disk Tandem disk harrow, primary 309 16 0 1, 0.88, 0.78 Width in m
cultivator Field cultivator, primary 46 2.8 0 1, 0.85, 0.65 Tools at 0.20 m
planter Row-crop planter 500 0 0 1, 1, 1 Rows at 0.76 m
potato_digger Estimate, not in the standard 250 12 0 1, 0.88, 0.78 Width in m

The draft is \(D = F_i(A + BS + CS^2)\,W\,T\). The texture factors \(F_i\) are for fine, medium and coarse soil. The width unit gives the meaning of \(W\). The planter has no depth term. The type custom uses a reference draft \(D_{ref}\) at the design speed \(S_{ref}\) from -VehicleDraft=:

\[ D = D_{ref}\frac{1 + 0.06\,S}{1 + 0.06\,S_{ref}} \]

The options -VehicleImplementType=, -VehicleImplementWidth=, -VehicleImplementDepth=, -VehiclePayload= and -VehicleSoilTexture= set the other values. On the Maxxum, the game ignores -VehicleImplement= and writes a warning to the log.

Source Assets That Are Not in the Game#

The folder Acres/Raw/farm-equipment is the source asset package. It contains 14 assets: the Maxxum, the eight implements, a combine harvester and four Polaris finishes. The game imports all assets but the combine harvester.

Item State
combine_harvester/ Blender file, FBX file, mechanics.json and textures of a combine with a header of 4.2 m. The import tools ignore it. The game has no model for it.
motion/combine_harvester.* Demonstration scene, load samples and video of the combine.
assemblies/ Blender scenes of the Maxxum with each implement, for manual poses.
motion/ Ten demonstration scenes of 10 s with load samples from scripts/coupled_dynamics.py.
scripts/mechanics.py, scripts/coupled_dynamics.py Offline mechanics library of the package. The game does not use it.
scripts/import_unreal.py Optional import script of the package. The game uses Tools/ACRE/Vehicles/import_farm_equipment.py instead.
index.html, load-scenarios.json, validation reports Gallery and reports of the package.

Add an Implement describes how an asset of this package becomes an implement of the game.

Code Map#

Item File Function
Implement identifiers Acres/Source/Acres/AcresImplementModel.cpp ImplementKindId, FindImplementKind
Default parameters Acres/Source/Acres/AcresImplementModel.cpp MakeImplementParameters
Tines, discs, roller, drill rows Acres/Source/Acres/AcresImplementModel.cpp ImplMountedLoads, ImplTineMoment, ImplSolveRow
Trip dynamics, metering, sprayer Acres/Source/Acres/AcresImplementModel.cpp ImplStepThreePoint
Hopper centroid, boom masses, slosh Acres/Source/Acres/AcresImplementModel.cpp ImplHopperComZ, ImplSprayerBoom, ImplSloshMode, ImplSloshStep
Loader Acres/Source/Acres/AcresImplementModel.cpp ImplStepLoader
Backhoe Acres/Source/Acres/AcresImplementModel.cpp ImplStepBackhoe, ImplSolveSupports
Square baler Acres/Source/Acres/AcresImplementModel.cpp ImplStepBaler, ImplSliderCrank, ImplPlungerForceN
Rig control values Acres/Source/Acres/AcresImplementModel.cpp ImplementRigControls
Keys Acres/Source/Acres/AcresVehicle.cpp AAcresVehiclePawn::ReadImplementKeys
Options and settings Acres/Source/Acres/AcresVehicle.cpp AAcresVehiclePawn::LoadImplementConfiguration, SetupImplement
Bales, windrow, spray fans Acres/Source/Acres/AcresVehicle.cpp SpawnBale, LayWindrow, UpdateSprayFans
Implement card of the HUD Acres/Source/Acres/AcresHud.cpp AAcresShellHUD::DrawWorkPanels
Menu checks Acres/Source/Acres/AcresSession.cpp FAcresSession::ValidateImplementModel
Draft table of the harvester and the legacy tractor Acres/Source/Acres/AcresVehicleModel.cpp ImplementDraftN, AsabeDraftN

Limitations#

  • The implements are reconstructions. No measured mass, draft or pressure of a real machine exists for them.
  • The cultivator has the chisel points of the chisel plow. It thus pulls more than a field cultivator with sweeps.
  • The seed drill has no drag of seed boots or scrapers. Its draft is less than the ASABE value.
  • A floating implement unloads the rear axle, and the rear of the Maxxum lifts. The lower links can then reach their lowest position. In test runs in the game, this limited the disc harrow to 6 cm and the openers of the seed drill to 1 cm.
  • The compression law of the baler, its flywheel inertia and its shaft stiffness are estimates. The model does not make knots.
  • The rig of the backhoe bucket ram has a dead centre near a bucket angle of 28°. The ram pressure has a peak there.
  • The loader and the backhoe do not collide with the ground or with objects. Only the bucket tip has a soil force.
  • The sprayer has no drift model and no nozzle sections. All nozzles open together.
  • The key backhoe.foot_damping_n_s_m and the key tractor.rated_pto_kw have no effect on the model.

References#

  • Abramson, H. N. (ed.) (1966). The Dynamic Behavior of Liquids in Moving Containers. NASA SP-106.
  • ASABE D497.7 (2011, R2015). Agricultural Machinery Management Data. American Society of Agricultural and Biological Engineers, St. Joseph, MI.
  • Faborode, M. O., and O'Callaghan, J. R. (1986). Theoretical analysis of the compression of fibrous agricultural materials. Journal of Agricultural Engineering Research, 35(3), 175-191.
  • Ibrahim, R. A. (2005). Liquid Sloshing Dynamics: Theory and Applications. Cambridge University Press.
  • ISO 10625 (2018). Equipment for crop protection. Sprayer nozzles. Colour coding for identification. International Organization for Standardization.
  • 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.
  • McKyes, E. (1985). Soil Cutting and Tillage. Elsevier.
  • Wong, J. Y. (2008). Theory of Ground Vehicles (4th ed.). Wiley.