Feature: Change default keyboard control to be more like FPS games



The goal for this change is:

  1. Make it more intuitive on how to control the ROV
  2. Move away from using the modifier keys (crtl.fn,shift) that when combined with other keys overlaps with reserved commands that we cannot override (such as Ctrl+Arrow Key in OSX that cause the screen to swap to another screen).

The proposed key combination would be:

Movement Controls:

Key Command
W move forward
S move back
A strafe left (reserved)
D strafe right (reserved)
Q roll left
E roll right
Up left up -or- pitch down
Down lift down -or- pitch up
Left yaw left
Right yaw right
Shift-W pitch down -or- lift up
Shift-S pitch up -or- lift down

Secondary Controls:

Key Command
I/K camera tilt
J/L reserved camera pan
O/U reserved camera zoom
G depth hold
H heading hold
1-5 motor power settings
6-7 light dim/bright
8 lasers on
9,0 reserve for illumination controls

The -or- commands show where the keyboard flops to give priority to the primary movement axis used to execute overall vertical adjustments. So a ROV that tends to pitch to change depth would have pitch controls as the primary on the up/down arrows while a ROV that uses dedicated thrusters would have those as primary.

This also allows for no change in the left hand keyboard commands when introducing a mouse.

For the secondary controls I have focused on trying to keep like controls spaced together in a way that supports simple recall.

  • Power associated things on the number key, thruster power on left, illumination controls on right
  • Reserving another 2-axis key combination (I,J,K,L) for camera gimbal
  • Place the holds next to each other, keying off of the H for a heading hold and putting depth hold right next to it in G.

This needs to be driven extensively and tested. It is not meant to prevent customization, but is instead proposing the initial default keyboard layout to achieve the goals meant at the beginning of the document.


There is one comment on the giithub issue that raises concerns about needing 2 hands on the keyboard to drive. Anyone else have some opinions on what is important in a default keyboard configuration for driving an ROV?

Ipad control, again
Gamepad joystick reversal issue

Even though I will primarily use the gamepad, the suggested new layout makes more sense to me if the gamepad is unavailable.

I like my left hand dedicated to movement because it is probably going to be on the keyboard 100% of the time. It makes sense to have my right hand control the auxiliary functions and mouse (to start Screencastify, etc).

If I had my preference, I would change the Spacebar to Lift up (jump in FPS games) and Left CTRL to lift down (crouch). It will give the thumb and pinky something to do instead of having the middle 3 fingers do everything movement wise. And let’s face it, how often are we using lift up/down? A lot.


Most games typically have a key mapping screen that allows you to set this up however you like. That get’s around the cross platform issues nicely. I think this key layout is better, but I would prefer to see an options screen that allows any combination to be setup.


Is there any way to re- configure the keyboard control to our own? I go through the cloud 9 but don’t have any idea whether it’s possible or not…


Yes it is pretty easy once you are in Cloud9. This is assuming you are running software version 30.0.3.

  1. Power on your ROV and go to Cloud9 ( or openrov.local:3131)
  2. Navigate to openrov/cockpit/src/plugins/rovpilot/public/js
  3. Open the rovpilot.js file
  4. The code is pretty well commented and you should be able to find what you are looking for. The lines that you will change look like “defaults: { keyboard: ‘z’, gamepad: ‘A’ },”
  5. Save the file
  6. Turn the ROV off and then back on
  7. Enjoy the keys mapped how you would like

Let me know if you have any questions.


ok. thanks @Brian_Grau yes i have flash to 30.0.3


Is there any news on the original topic of this thread? I would totally agree, that the current keyboard layout is not optimal. I also think the design mentioned above is a massive improvement.

I could also try to implement it myself but i wanted to check the status first :slight_smile:


@codewithpassion started a system to change the mappings via the UI but I’m
not sure where that is right now.