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.jsonof 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
ImplementSteadyStatewith the soil presetdry_loamat 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:
TineSoilForce gives \(H\) and \(V\) for this depth and rake angle. The force on the tine is:
\(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:
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:
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:
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:
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:
\(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:
\((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:
On firm ground with no roller sinkage, ImplementControlsForDepth gives the setting for a depth \(d_{set}\):
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:
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\) 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_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:
\(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:
The meter torque also adds the draft \(2N_{drive}T_m/D_w\). The seed flow follows the ground wheel:
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:
\(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:
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:
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:
\(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:
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:
The slosh displacement \(u\) follows the chassis acceleration \(a_c\) with the damping ratio \(\zeta\). The code uses an implicit step:
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:
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:
\(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:
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:
\(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:
The bucket takes soil while it cuts, with a fill efficiency of 80 %, until it is full:
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:
\(g_i\) is the gap of the support, which is zero for a tyre. The three equilibrium equations give \(w\), \(a\) and \(b\):
\((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\):
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:
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:
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_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\):
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:
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:
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:
\(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:
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:
\(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=:
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_mand the keytractor.rated_pto_kwhave 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.