Hi all,
I’m currently working with a BlueRov2 (frame config 2) and I have one idea I’d like to share with you.
During a normal dive it takes a while to get the ROV down to the operating depth also “costing” quite some energy, as the whole frame has to be pulled through the water.
My idea now is what I call side-diving.
You rotate the ROV to say 90 degrees roll to the right. From there you can rotate the nose vertically down via yaw. And then you just go forward → less drag and four motors pushing the ROV down.
I tried doing that in ACRO mode, but that’s not too easy to keep it under control and on “track”.
Some automation or at least stabilization functions would be appreciated to have less manual stabilization to do.
I’ve done some first implementations and tested them im the SIL:
I added a new parameter called sidedive.
With the button functions custom_1 and custom_2 I set / reset sidedive to 1.0 and 0.0 respectively.
in control_althold.cpp I added a condition that if sidedive > 0.5 it will set the target_roll to pi and target_pitch to -pi/2.
With ANGLE_MAX set to 80° (haven’t made it yet to set it to 90°) and MNT_ANGMAX_ROL set to 90°, the ROV nicely rolls to almost “knive-edge” when sidedive mode is enabled
Now the problems:
The Pitch angle won’t change and stays around 0° (this could mean that yaw control is not used to control pitch in this attitude). I haven’t figured out yet all the control loops, but maybe someone could help me on this - is for attitude control a full strap down used to command the lower rate loops? E.g. When rolled 90° to the right, a theta_dot can be achieved via yaw controls.
Hello Willian,
Thanks for your answer!
Yes - it’s a standard BlueROV2. So no pitch control - you’re right.
The key is to keep roll around 90° and then you can control “pitch” with the yaw axis.
Let me try to explain again what I’m trying to do:
I want to “drive” the ROV down in order to be faster and more energy efficient.
When the ROV is horizontally in the water, I assume the body system to be:
x - straight out the front, y - going to the right, z - going down
rotating around the x axis is rolling, y axis is pitching and z axis is yawing
Lets introduce some angles (Euler):
Phi (roll angle) = Angle between the y-axis and the water surface
Theta (pitch angle) = Angle between the x-axis and the water surface
Psi (heading angle) = Angle between the projection of the x-axis on the water surface and the direction to magnetic north
If Phi = 0 = ROV is horizontal in the water, and I can change my angle Psi using the four horizontal motors (differential).
Using the two vertical motors, I can change the roll angle Phi.
So setting the commanded phi angle to 90°, the ROV will rotate to the side and “knife-edge” in the water.
Now Phi = 90° and if I use the four horizontal motors now (differentially) it will change my Theta angle.
Though I cannot control Psi any more, but for going down fast I would be ok with that …
I hope this all makes sense to you - I’m normally working on flight control where I have also similar control loops. The attitude control loop commands the rate loops.
E.g. Phi control loop generates a Phi_dot command which is the transformed to a p (roll_rate) command.
In equation:
error_Phi → Phi_dot_cmd → p_cmd
error_Theta → Theta_dot_cmd → q_cmd
p_cmd and q_cmd are both in the body frame, and they need to be transformed in to “earth” frame (Euler to body and it’s inverse)
E.g.
Theta_dot = cos(Phi) * q - sin(Phi) * r
This equation shows, that if Phi = 0 → Theta_dot = q. But if Phi = 90° → Theta_dot = r.
Thanks for thorough explanation! But before getting into the control loops, I want to understand it in a physical sense first.
I was thinking of pitch as rotation around the Y axis, that makes sense now. But I still don’t see a way of keeping the ROV facing down when diving. Wouldn’t it face up again? The usual placement of buoyancy foam and ballast weights cause significant torque(forcing the top side to go up) when facing directly downwards.
You’re right. It tries to come back up due too its buoyancy on the top.
What works ok for now is some sort of spiraling down. Roll around 50-60°, manual full yaw in one direction and then forward.
Haven’t had the chance yet to test it thoroughly and too often in the water yet.
If you could control an external servo, you could add alot more ballast to make it sink fast, then release the ballast at depth to achieve normal buoyancy. Like a concrete paving block 18"x18".
When it’s not ok to drop the ballast, you can potentially have it attached to a rope, so when released from the gripper you can manually pull it back up to the top, with the ROV at the desired depth. Adds a bit of extra drag on the descent, and some extra work for the operator(s), but is also reusable. With depth or position hold mode turned on at the bottom you could even do that with a single person, although that may not be recommended if there are sensitive things nearby.