DIS/Dead Reckoning Library
The DIS (Distributed Interactive Simulation) networking protocol is a standard for simulations to communicate with each other. The standard defines a set of data messages and how and when to send those messages over a network. A typical use of the DIS protocol is for multiple simulations to share entity state information such as position, velocity, and appearance.
In a military application, this may be a pilot flying a F-16 simulator against a SAF (semi-automated force) software modeling the behaviors and tactics of MiG aircraft. The F-16 simulator receives entity updates of the MiGs from the SAF for the pilot to engage while the SAF receives entity updates of the F-16 so the MiGs can counter as appropriate.
Rather than send updates of every entity every frame during the simulation, the DIS protocol calls for the use of dead reckoning algorithms to limit network traffic. Each simulation is to only send an updated entity state when its entity breaks a predefined threshold. Additionally, each simulation is responsible for continuing the movement (dead reckoning) of entities it has received from the network between the times it receives updates.
The DIS Library is a software library that can be linked from a host application to support DIS networking of a simulation.
The major functions of the DIS Library are:
- Binds the receiving and sending network sockets.
- Reads incoming DIS packets from the network, filters inapplicable traffic from the DIS header, byte-swaps them to the proper byte-order, converts coordinates from geocentric to geodetic, then relays them to the host (via function callbacks).
- Reads outgoing DIS packets from the host, converts coordinates from geodetic to geocentric, adds DIS header information, byte-swaps them to the proper byte-order, then relays them to the network.
- Dead reckons incoming DIS entities and sends continuous predicted positions of the entities to the host. Also reports when an incoming DIS entity has timed out.
- Dead reckons outgoing DIS entities to determine threshold breaks. Outgoing DIS entity packets are only sent when as defined by the DIS standard.
- Splits and processes multiple DIS PDUs that are contained within a single incoming UDP packet.
- Splits incoming fixed/variable datum-style packets (Action Request, Comment, Data, SetData, etc) that contain multiple data to separate PDUs with a single datum each to relay to the host.
It is written for Windows / Linux platforms in C++ and does not require Common Language Runtime (.NET) support.
The DIS Library is composed of two major components, the network/packet processing component and the dead reckoning component. The DIS Library includes the source code for the networking/packet processing component so additional packets can be added without requesting a new binary. The source code to the dead reckoning component may be requested at additional cost.
Interface Between Host and Library
The host communicates with the DIS Library via functions calls and function callbacks. The structures the host sends to and receives from the DIS Library are based on the published DIS packet structures. For convenience, the host sends and receives locations in geodetic coordinates.
Some packets such as Fire, Detonate, Start/Resume, and Stop/Freeze are relayed immediately from the host to the network. The DIS Library only processes coordinate conversions and byte-swapping on those packets.
Entity state packets however are sent to be processed in a dead reckoning library internal to the DIS Library. The dead reckoning library processes the dead reckoning and threshold breaking of the outgoing entity state packet and only relays to the network when a threshold is broken or certain parameters of the packet have changed.
Fixed/variable datum-style packets (such as Action Request, Comment, Data, SetData, etc) may contain multiple data in a single PDU. The DIS Library splits the single monolithic PDU into several PDUs with a single datum each to relay to the host.
Most packets such as Fire, Detonate, Start/Resume, and Stop/Freeze are relayed immediately from the network to the host. The DIS Library only processes byte-swapping and coordinate conversions on those packets.
Entity state packets however are sent to be processed in a dead reckoning library internal to the DIS Library. The dead reckoning library processes the dead reckoning of the incoming entity state packet and continuously relays to the host the latest predicted position.
Dead Reckoning Algorithms
The library supports the following dead reckoning algorithms (from the IEEE 1278.1-1995 standard) for entity state packets, and will also dead reckon orientation rates for articulated parts:
The dead reckon library will report to the host that an internal entity state needs to be sent over the network if one of the following key values is changed or if it breaks one of the following thresholds: Appearance, Dead Reckoning Algorithm, Entity Position, Entity Orientation, Entity Articulated Parts Orientation, Heartbeat, Time-Out
The dead reckon library knows when to stop processing an entity based on the appearance bit in the PDU, and it will automatically time out both internal and external packets and modify the last packet’s appearance bit to deactivate if appropriate.
Please contact us for more information, or if you’re interested in a trial version of the DIS/Dead Reckoning Library. The trial version limits the library to a maximum of 10 internal and external entities and includes the library binary, header file, and documentation.