When Python runs the "send RC" script, the result is incorrect

That’s not entirely correct. RC Input Channels correspond to user-specified controls, the first 6 of which are vehicle motion directions. My clear_thrusters method sets all motion directions to ‘stopped’, which applies equally well to vehicles with 3 thrusters as to ones with 6, 8, or more.

The clear_thrusters method is only intended to be used when you explicitly want to clear all motion inputs. If that isn’t run between setting the mode and arming the vehicle then the vehicle will still be using whatever inputs were last set, which can cause thrusters to activate without the user intending for it.

Setting values to 65535 is telling the vehicle to “continue using your last input” (for that channel), so if the last input was to stop that motion then it would stay stopped, but if your last input was full thrust then that would continue (and in the case of then arming the vehicle, it would go straight to full thrust, which can understandably be problematic).

Note that while manual mode sets thrusts based on the commanded motions, the active-control (stabilisation) modes use the commands for setting target motion rates, so it uses the sensors to determine if those are being met, and increases/decreases thrust as relevant. That means that testing stabilise mode with the vehicle on a table, for example, will result in the thrusters quickly going to max thrust, because the commanded motion isn’t being achieved.

Yes, RC Input Channels correspond to motions, not thrusters. In the case of the standard BlueROV2 frame, ‘roll’ corresponds to thrusters 5 and 6, because those are the thrusters that are positioned and oriented to be capable of moving the ROV about its roll axis. They also happen to be the only vertically oriented thrusters, so are also activated when vertical motion is commanded.

Similarly to the example in my last comment, if the ROV is commanded to equal inputs for vertical motion and roll then one of the thrusters will be off/stopped because the roll and vertical motions are coupled in a 1:1 ratio, and the contribution from one will cancel the other.

Consider motor 5, with factors 1.0 for roll and -1.0 for vertical. If both ‘vertical’ and ‘roll’ are commanded to 1900, they’re both 400 above the ‘stop’ point (1500). The net output then is

\begin{align} RC_{OUT}|_{mot_5} &= \left(RC_{IN}|_{roll}-stop\right) \times F_{roll_5} + \left(RC_{IN}|_{vert}-stop\right) \times F_{vert_5} + stop\\ &= (1900 - 1500) \times 1.0 + (1900 - 1500) \times (-1.0) + stop\\ &= 400\times 1.0 + 400 \times (-1.0) + stop\\ &= 0 + stop \end{align}

Following the same process for motor 6,

\begin{align} RC_{OUT}|_{mot_6} &= \left(RC_{IN}|_{roll}-stop\right) \times F_{roll_6} + \left(RC_{IN}|_{vert}-stop\right) \times F_{vert_6} + stop\\ &= (1900 - 1500) \times (-1.0) + (1900 - 1500) \times (-1.0) + stop\\ &= 400\times (-1.0) + 400 \times (-1.0) + stop\\ &= -800 + stop \end{align}

which then gets clipped to 400 below stop because the output has to be between 1100 and 1900 (in a default setup at least - it’s also possible to restrict the output range further if desired).