Hi @Mitch.Buckley, welcome to the forum!
Adding an external camera is definitely possible. You’ll want to consider waterproofing to the depth you need to film at, as well as how the camera+enclosure affect the dynamics of the ROV (ie you may need to add additional buoyancy foam so the vertical thrusters are able to lift the extra weight, and the mass will have an effect on the speed and acceleration the ROV is able to achieve). The location of the camera will also change how the ROV moves in the water (if it’s too far forwards the ROV might pitch downwards while moving, and too far to either side can make the ROV roll/tilt sideways).
Sounds awesome!
ArduSub isn’t actually used for the camera side of things in the BlueROV2. The Raspberry Pi companion computer runs a program called gstreamer
to stream the connected camera feed to the top computer. The Bluerobotics Low-Light Camera outputs video encoded in H264 format, which is efficient for streaming.
Most likely you’ll want to control the camera using the Raspberry Pi, running a script on it to do so. For previewing purposes, the tether has easily enough bandwidth to send another 1080p 30fps H264-encoded stream, and it’s not overly difficult to set up another gstreamer pipeline to send such a stream to the top side, which can then be viewed in a program like VLC or OBS. This comment may be helpful in getting an extra video stream to the top.
The main issues I’d foresee are the RPi getting access to the preview pre-encoded in H264 or similar, and interfacing the RPi with the camera controls, both of which are highly dependent on the specifics of the camera being used. The RPi can do encoding and resizing of a preview feed if it has to, but that will likely reduce your preview framerate quite significantly, as it takes a large amount of the computing resources away from communication and streaming. If at all possible it’s best to feed a pre-encoded stream into the RPi, which may require getting a separate device or product to connect to the camera and encode the stream before passing it on to the RPi.
If you can find some more information about how the camera(s) you’re interested in can be remotely controlled, and what remote preview functionality they have, then we might be able to help a bit more with the actual hardware and/or code required to get your use-case set up