For depth hold, you can use set_attitude_target
to select the desired attitude of the vehicle, for the depth, you’ll need to use rc_channels_override_send
with thrust set points until you hit the desired position.
This is probably because your GPS information is not a real system that can give position error information to the ROV, without a real position information (or something close to it), the vehicle will do weird things.