During my graduation project, I did research and wrote software to control a drone. First I researched some hardware options. Secondly a protocol to communicate with the drone, named PPM. This protocol was deemed not possible and I started researching Mavlink. With Mavlink I was able to fly a drone with software.
In the video you can see a short demo of the system with simulator. On the left you can see the programs running. One program (USB handler) handles incoming USB messages and sends them to TCP server. USB handler can also do the opposite, sending incoming TCP messages over USB. A small python script reads commands send with TCP to control the drone or in this case the simulator.