Funny, I have been wondering about the same thing for a while. Studying the OpenROV Cockpit it looks like it is going to be really nice. I think the arrow keys are going to be a great first step, but I have to agree and think in the long-run a joystick is going to be so much nicer.
A while back I was starting to work on a pet-project called HID-Flinger, oddly enought for potential ROV control. The idea is to take common-off-the-shelf USB joysticks and "fling" the output to another protocol (could be anything, but my thought was that UDP over ethernet would be the most useful). The USB joysticks are very cheap (usually $10-$15) and plug into a USB-Host port. They typically have not only the normal x,y,z-axis control you would expect but also have a throttle, hat, fire-button and various other buttons. Typically 10-14 different analog and digital outputs. So the idea is "why not use this thing to control things and not just games". At this price you cannot beat getting a number of proportional analog inputs along with a slew of digital inputs all in one nice package.
Anyway, the trick is you need a USB Host Controller (on any laptop) but the usual intended use is to have applications running on the host to consume the joystick inputs. What we really want here is to be able to send (hence "fling") the output from the joystick to another client. The clinet would typically NOT be on the host machine, but rather some remote machine connected via ethernet or wifi (in other words a network connection).
USB Joysticks and other Human Interface Devices (HIDs) provide their information based on the USB HID class specification.What is we took the raw HID frames from the USB controller, packaged them up and sent them out using a UDP frame and recovering that frame at the client side and acting on the input? I believe a forum member Chris Konstad in his post already alluded to such an idea. His involved more than just relaying control data to the ROV, it also contained PID control of the ROV and feedback and other cool things.
In light of some conversations and drawing on some of the work posted by Bran Sorem in his post about streaming video it seems like this idea is an ideal fit within the direction OpenROV cockpit is taking. I would like to know more about the internal OpenROV architecture, but it seems from this video description it is a very nice, flexible solution. I feel it is also very easily adapted to the way sensor data from the ROV might be handled as well as input into the ROV might be handled.
Exploring this further, perhaps what is needed is a way to take USB-HID messages from the USB controller and package them into a network protocol frame using a Socket.io server on the host side. At the client side (the ROV) a Socket.io client would listen to these frames, parse them and use them as ROV control inputs. The ROV would then have x,y,z-axis among various other switches to control things like lights, robotic arms, whatever. I think this is what you are looking for? Me too!
I put together a diagram based on my very limited (and probably wrong) interpretation of what the existing architecture is like. This is just my way of thinking it through. The yellow boxes are code which would need to be written to make this happen. The overall purpose of the "HID-Flinger" application would be to take USB Joystick data and "fling" it to a client, the OpenROV.
What do you think?
There are probably other possibilities for implementing such a thing as well. I have read recently of Google's Chrome browser supporting the Gamepad API Specification.From what I have read this looks very promising, but might be very limited to only certain gamepads (i.e. Xbox controllers, some Logitech devices, etc.) but maybe that is good enough. I have tried some of the examples posted on http://www.gamepadjs.com/ but havnt had much luck. But this may be a more platform agnostic, web-browser centric way to get joystick data into the OpenROV. Worth some investigation anyway.
Well, that's my $.02 worth.