I know that we Jim T and Colin H have both spent some time looking at integrating ROS. There are also some guys that have code in github for the same.
I can use help in formally documenting the APIs that we have right now, I have a very basic digram that lists the command names for the messages for the socket.io and serial commands: https://github.com/OpenROV/openrov-software/blob/master/docs/OpenRovSoftwareArchitectureOverview.pdf?raw=true
The I2C commands that the arduino is using with different components is whatever those components requires.
We are only using SPI at the moment for programming the ATMEGA chip from the beaglebone.
The easiest way to interface with ROS IMHO would be to have a bridge to socket.io which would talk to the existing OpenROV node.js process. The work would simply be to map the socket.io messages to ROS topics. That said, you can of course go the other extreme and bypass all of the OpenROV software if you really want to and load the firmata sketch on the Arduino and talk to the serial port directly.