Calculating Artillery Firing Solutions in Arma 3
Here is a description of a project I did while bored one weekend after playing a lot of Arma 3. It turns out a lot goes into calculating how to aim artillery, and thought it was worth the write-up. Funnily enough, the very first computers were actually employed to calculate artillery firing solutions. Enjoy!
Introduction
One of my favorite games to play from time to time is Arma 3, a hyper-realistic military simulation game that requires careful thought, planning, and strategy in addition to tactical flexibility to gain an advantage in combat. Missions in Arma are typically longer than most shooters, and due to the scale of the game features a lot of walking or driving to get to your objective. Everything is more or less real scale, meaning that combat often takes place at realistic distances.
A consequence of this scale is that some weapon systems require you to have a buddy to act as a spotter, as enemy targets may lie outside of visual range. These systems include self-propelled artillery platforms, and multiple launch rocket systems (MLRS). For these systems, you can either manually set the firing angle, or use the in-game firing computer. Using the firing computer, the system is as simple as clicking on a grid on the map and pressing the giant red launch button.
Artillery firing computer interface
So if the game gives you a firing computer, why would you ever care about calculating the firing angle manually? Well, for starters this firing computer is often disabled in PvP multiplayer battles. One game mode, named King of the Hill, features nearly 100 players split into multiple teams, all vying for control of a central point on the map. In this mode, enabling the firing computer would mean that most teams just try to obliterate whatever moves in the towns from relative safety. As a result these powerful weapon systems often go underutilized in King of the Hill matches.
But if I could reasonably calculate the firing angle with some information from my teammates in the town, that could give us the decisive edge in battle.
Variables to Consider when Calculating Firing Solutions
Coordinates
The two most basic pieces of information needed to calculate a firing solution (the angle you need to aim your artillery piece) are the coordinates of the artillery platform, and the coordinates of the target. These coordinates should be no less than 10 meter resolution, otherwise there is a good chance the shell will not have the desired effect on the target.
In Arma 3, the map coordinates are designated in 100 meter resolutions, meaning that the grid number "123456" corresponds to 12.3km east and 45.6km south. In an urban setting, such as the ones in the aforementioned King of the Hill battles, 100 meters can be the difference between effective fire and friendly fire, not a risk you want to take.
Each grid line represents 100 meters
To get 10m resolution, you have to estimate--on a scale of 0 to 10--how close the target is to the next 100m line drawn on the map. This takes some practice, and keeps this approach from being too good (to warrant preventive action from game moderators). It also means you need to extend the coordinate system from 6 digits to 8 digits. 12345678 now means 12.34km east and 56.78km south.
An example coordinate using enhanced resolution at 10m. The image shows grid 04561667.
Once you have the coordinates of the artillery system and your target, you can derive the exact direction (in degrees) and distance you need to shoot.
Elevation
The next critical piece of information you need to know is the elevation of both the artillery platform and the target. When an artillery piece is fired, it will only accurately hit the target if the target lies on the parabolic path of the round. This can be approximated without knowing the elevations, but accuracy will suffer greatly and need more information from spotters to correct for the error resulting from lacking elevation information.
The elevation tells you which two points on the parabola to pick.
In Arma 3, elevation can be obtained by either hovering over a location on the map, or using the contour lines to produce an estimate.
Weapon Characteristics
Each type of artillery system has a different ballistic profile. To be able to accurately calculate the path of the shell or missile, you must know the exit velocity of the shell from the firing end of the weapon. In Arma 3, the weapons platforms have various firing modes, for short, medium, and long ranges. These settings adjust the exit velocity of the weapon, so be sure to note which mode you are using.
Creating a Ballistic Path
The formula to use the velocity and position information. x represents the distance to the target, y is the difference in elevation, and v is the muzzle velocity of the round. Theta represents the angle at which you must aim the weapon.
Confounding Effects
You might think that once you have the information above, you simply solve for a parabola involving the exit speed, location of the points, and elevation of the points into a parabola. However, you would notice that while this works fine for short ranges, your accuracy would suffer dramatically at medium to long ranges. Why is this? There are three effects at play.
Air Resistance
Arma 3 has a pretty realistic ballistic simulation built in to it. Each shell has a different air resistance profile, and ignoring it means that you will end up under-shooting significantly at longer ranges. The direction of the wind also matters, for which the firing direction must be adjusted. Unfortunately there is no general formula for applying an air resistance to shells in real life with a lot of accuracy, but for the purposes of Arma 3 it is likely a deceleration that is applied uniformly to the shell. Accounting for this requires solving a differential equation.
Coriolis Effect and Eötvös Effect
Once you account for air resistance, you will notice that when you shoot north or south, your shots will start to "drift" right. This is because the earth is continuing to rotate beneath the shell, but the shell is not receiving the force from the earth. This means the ground is moving relative to the shell at a small speed.
Accounting for the Coriolis Effect stops your shells from drifting, but you still notice some strange things when you are firing the weapon. You notice that you tend to overshoot when shooting east, and undershoot when shooting west. This is known as the Eötvös Effect, and is caused again by relative motion to the ground. This time it is due to the apparent centrifugal force applied when moving in the same direction or against the earth's rotation. You must account for all three of these factors to begin zeroing a weapon.
High and Low Angles
When solving for a parabola with two points, there are always two different solutions. The first is a "low angle" parabola that creates a more direct path toward the target. The second is a "high angle" parabola that stretches far into the sky before finally landing on the target. The only time this is not true is when the object is at maximum range from the piece, in which case the angle can only be 45 degrees.
Multiple parabolas can fit any two points.
Typically the low angle results in a much faster delivery of the artillery payload, but may not be suitable if lots of hills, mountains, or large buildings are between you and the target. The accuracy can also be more variable with the low angle, as a small perturbation or deviation from the correct angle and direction will have a more drastic effect on the trajectory of the round.
The high angle will require more time to reach the target, but is likely to have less variability in accuracy and on average be more accurate. This is because small perturbations cause the rounds landing point to shift less.
Zeroing the Weapon
Once you have finally accounted for all the variables and confounding effects, it is still necessary to fire some shots that can be clearly observed near the target area. This ensures that any rounding errors, wind errors, or small perturbations in the location or angle of the artillery platform are compensated for. Rounding involves simply telling the artillery operator how far and which direction the round landed off target. Repeat this process until the shells are landing consistently within the desired location.
Putting it to the Test
If you would like, you can try my script I created to calculate all these variables for Arma 3 in python. Simply run the python script, fill in the requested information, and then receive your firing solutions. I'd love to know how it could be improved and what its performance is in a real game!
Note: The script is designed for use with Alive and ACE mods, which may alter the ballistics in game.
Resources
Artillery Calculator Spreadsheet
Artillery Calculator Script
Long Range Shooting: External Ballistics – The Coriolis Effect
Arma 3 Game
Eötvös effect
Coriolis force
External Ballistics
ENIAC
Awesome write up dude