skunkNET is an high performance peer-to-peer multiplayer system for Lockeed Martin’s Prepar3D and Microsoft’s Flight Simulator X.
It has been developed by SimSkunkWorks with the specific goal of providing a multiplayer environment for formation flight and combat simulation.
It incorporates several new technologies, which have been developed to provide a smooth flight, without sudden lags or jumps caused by bad or slow internet connections. A Kalman filter is used to estimate the airplane position and the network latency each frame, and a new control system is used to provide smooth, jitterless airplane movement in the air.
Thanks to a scaling method, skunkNET bandwidth consumption is extremely low. Data rates are decreased with relative distance, so that airplanes far away have very little effect on your connection speed.
skunkNET is completely free, and is available 24/7 on SimSkunkWorks server. A simple registration is required to receive a user ID that will allow you to connect to the skunkNET network and use skunkNET with your friends for formation flight. With skunkNET’s account, you will be able to connect to vACMI, SimSkunkWorks weapon engine.
Together, skunkNET and vACMI provide the ultimate multiplayer combat flight simulation for P3D/FSX. You will be able to use your airplanes to shoot missiles, use guns, and drop bombs, causing real damage to other airplane and ground targets. Such targets can be both real players, connected to skunkNET, or AI objects, providing a full combat simulation.
How does it work?
By using a Simconnect client, skunkNET reads informations directly from P3D and FSX. It records the airplane type, position, speed, orientation in space, acceleration, flight control surfaces deflections, and much more. It then incapsulates these informations into packets, which sends to the other connected players using a peer-to-peer scheme, meaning that data does not need to “bounce” on a server, cutting on delays and jitter. The data packets are sent with different rates to minimize bandwith consumption, e.g. position packets are sent at a rate of 30 times per second, while the state of the external lights are only sent once per second.
At the other end, data packets are decoded, then fed to an algorithm that estimates the latency of the communication and, more importantly, the jitter (see below). Then, data is sent to a nonlinear Kalman filter, which blends the data received from the network packet and the prediction of the next position of the airplane given the previously known velocity. An estimation is obtained, which is then used as the most reliable source of position and orientation of every aircraft in the network.
An issue arises at this point, however. Due to the fact that the internal framerate of the simulator is unknown (and variable), it is not simply possibile to “impose” the position of the aircraft by means of Simconnect, because the obtained motion would be full of stutters, jitters, and it would not be smooth. Because of that, skunkNET rather imposes the aircraft’s velocity, leaving the job of smoothing its position to the internal integrator. A tuned nonlinear controller is then used, to constantly adjust the imposed velocity so that the obtained position is correct, according to the previously obtained estimation. This is necessary because simply imposing the received velocity, whitout an error feedback, would cause a drift of the aircraft compared to the real position.
What are network latency and jitter?
When a network packet is sent from your computer, it has a long way to go before reaching your friend’s PC. Many hardware and software components are used along the way to route and send the data correctly. The time needed to these components to accomplish this task is variable due to many factor, e.g. the load on the network at that given instant. Because of this architecture, each packet will take some time to reach its destination: this is called delay, sometimes referred to as ping times.
Constant delays are quite easy to compensate for. However, over the internet, delays are never constant, but vary from packet to packet. This effect is called jitter. If not accounted for, jitter in the network delay will cause jitter in the aircraft position.
In skunkNET, jitter is also used to measure the quality of the connection, and is represented as a percentual value of the average inter-packet time. If packets are received, in average, once every 100 milliseconds, a packet which takes 110 milliseconds will have a jitter of 10 milliseconds, or 10%.