I can build it for you if you share the matrix as text.
That would be great.
case SUB_FRAME_CUSTOM:
add_motor_raw_6dof(AP_MOTORS_MOT_1, 1.0f, -1.0f, -1.0f, -1.0f, 1.0f, -1.0f, 1);
add_motor_raw_6dof(AP_MOTORS_MOT_2, -1.0f, -1.0f, 1.0f, -1.0f, 1.0f, 1.0f, 2);
add_motor_raw_6dof(AP_MOTORS_MOT_3, 1.0f, 1.0f, 1.0f, -1.0f, -1.0f, -1.0f, 3);
add_motor_raw_6dof(AP_MOTORS_MOT_4, -1.0f, 1.0f, -1.0f, -1.0f, -1.0f, 1.0f, 4);
add_motor_raw_6dof(AP_MOTORS_MOT_5, -1.0f, 1.0f, -1.0f, 1.0f, 1.0f, -1.0f, 5);
add_motor_raw_6dof(AP_MOTORS_MOT_6, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 6);
add_motor_raw_6dof(AP_MOTORS_MOT_7, -1.0f, -1.0f, 1.0f, 1.0f, -1.0f, -1.0f, 7);
add_motor_raw_6dof(AP_MOTORS_MOT_8, 1.0f, -1.0f, -1.0f, 1.0f, -1.0f, 1.0f, 8);
break;
That is pretty much what I did but the toolchain argument doesn’t work…
ardusub_etienne.bin (1.8 MB)
I had to rename to .bin for discuss to accept it, but blueos should not mind.
thanks mate
Works great! thanks.
Has this file been tested on the M2 Rov ?
Hi @hanz0n, welcome to the forum ![]()
Chasing’s M2 ROV is closed source, and isn’t advertised as running the ArduSub firmware, or having an ArduPilot-supported flight controller board. The firmware file Willian linked to was built specifically for the Blue Robotics Navigator Flight Controller, so would not be possible to run on a Chasing ROV without swapping out the control electronics.
Thanks for the answer.
i know that the M2 uses “closed” source, i was thinking of replacing one of my M2 couse the hull is leaking power so i get havy “corrosion”. i like the frame so i was thinking of using it.
I have all the parameters downloaded from the m2 firmware but i can´t find the setup for the thrusers.
We are looking at BlueRov now and will probebly order one soon.
We have also tried this framework and the results are very good. But I also encountered some problems. Due to the flexible configuration of the ROV, we started depth modeat the same time as setting a 30 ° inclination angle. When the handle controls the forward movement, the ROV does not move forward, but moves upwards along a 30 ° inclination angle according to its own coordinate system. This seems unreasonable.
Hi @MMMMK,
This is currently the expected behaviour in ArduSub, and depending on what you’re trying to achieve can be quite desirable.
That said, we have been asked previously for an operation option that keeps forward/lateral motion in the world reference frame instead of in the vehicle’s body reference frame, and it’s something @williangalvani is planning to work on when he can make some time for it.
I was looking for an option to set 8 vectored thrusted on a BlueROV and found this post. Was there any progress since than to make this motors/frame configuration part of the frame presets in QGC?
@etienne I saw that you worked quite a bit on it, how is it working for you?
Dear BlueRobotics Community,
Recently i’ve been trying to compile the following thruster configuration matrix, but unfortunatly we don’t have the PixHawk on board so we need this to be compiled for the ArduPilot Board:
case AS_MOTORS_CUSTOM_FRAME:
add_motor_raw_6dof(AP_MOTORS_MOT_1, 0, 0, 1.0f, 0, -1.0f, 1.0f, 1);
add_motor_raw_6dof(AP_MOTORS_MOT_2, 0, 0, -1.0f, 0, -1.0f, -1.0f, 2);
add_motor_raw_6dof(AP_MOTORS_MOT_3, 0, 0, -1.0f, 0, 1.0f, 1.0f, 3);
add_motor_raw_6dof(AP_MOTORS_MOT_4, 0, 0, 1.0f, 0, 1.0f, -1.0f, 4);
add_motor_raw_6dof(AP_MOTORS_MOT_5, -0.5f, 0.5f, 0, 0.45f, 0, 0, 5);
add_motor_raw_6dof(AP_MOTORS_MOT_6, 0.5f, 0.5f, 0, 0.45f, 0, 0, 6);
add_motor_raw_6dof(AP_MOTORS_MOT_7, 0, -1.0f, 0, 1.0f, 0, 0, 7);
break;
Also: we picked the 0.45f from one of the examples on your website but we’re not sure why it should be 0.45f instead of 0.5f. Here’s the link were we found the 0.45f: Build ArduSub · GitBook
I thought in the example from the link Thruster 3,4, and 5 would be the same as my thruster 5,6 and 7.
To clarify it a bit more, here’s my schematic:
Does this matrix make sense for the given configuration. Where did that 0.45f exactly come from in your example? Does that also apply for our principle as shown here above?
Thanks in advance!
Hi @sietse, welcome to the forum ![]()
Which board are you referring to? There are many possible flight controller boards that are capable of running ArduPilot-based autopilot firmwares.
If you’re trying to use our Navigator board, the latest building instructions are here for now (apologies - we’re still working on getting those integrated into the docs).
The original BlueROV is from well before my time at Blue Robotics, but from my understanding of the frame motion axis factors, reducing the contributions from the two front thrusters for vertical motion should help to avoid outweighing the corresponding contribution from the rear thruster.
The 0.45 value specifically was most likely determined to avoid excessive pitching while trying to move straight up or down. If the center of mass is towards the rear vertical thruster then the front thrusters contribute a little extra to the vehicle’s pitch, which can be balanced out by reducing how hard they push:
Torque (a rotational force / moment) induced by a linear force is determined by its magnitude multiplied by the parallel distance with which it’s applied from the center of mass (CoM) of the body it’s acting upon. Note that neither the parallel distance point nor the CoM need to necessarily be enclosed within the volume of the body itself:
This topic is worth a read for some extra context on understanding the effects of mass (and buoyancy) distribution, and how they can be compensated for, and there are other vehicle-design posts with additional insights ![]()
Feel free to follow up if something about that isn’t clear, or you’d like some additional explanation.
By the way, I’ve edited your post to have the code formatted in a code block, so it’s easier for others to read, and to copy for testing. You can read about how to do that (and more) in the How to Use the Blue Robotics Forums post ![]()
Hey @EliotBR , thank you so much for your extensive explanation! Now I understand where the 0.45f came from!
I was indeed referring to the Navigator board, so the building instructions is what we needed ![]()
Could I add a new case in our code for the custom frame? Or do I need to overwrite one of the SimpleRov Presets to make it work?
Thank you so much!
There’s already a “custom” case, which is what’s recommended for custom frames ![]()
Hi,
I lost my rov last week. I am designing a new one for fun. The chasing M2 configuration is a possibility. What is your conclusion after building and testing this config?
Any added value compare to heavy config? Stability?
My understanding is that 4 thrusters will give 25% thrust instead of 2. Then you double x,y and z trusty. Right?
The middle block is nice too. Did you end up using it?
Thank you
Hi everyone,
I haven’t been on here for a while. We ended up changing control system as this wasn’t working great with ardusub.
Cheers,
E.
Hello, I am also trying to build an underwater robot with this kind of framework. After reading the entire discussion, I feel both excited and worried about the effort you’ve put in.
I’m excited because it’s great to see that someone else shares the same idea and is trying to create an underwater robot with this framework, and you’ve already made excellent progress. But I’m also worried that in the end, you decided to give up on ArduSub.
I would like to understand how you’re proceeding now, and I’m not sure if you’d be willing to share. In any case, I really appreciate the work that you, Kevin, Eliot, and Willian have done, including what has already appeared in this discussion. It will provide very valuable experience for my own operations.
can you please tell in this mixture matrix which is motor 1 to 8 and CW and CCW config of all motor
because if i give numbers to the motor from front top left to rear bottom right
i got this matrix
case SUB_FRAME_CUSTOM:
_frame_class_string = “CUSTOM”;
add_motor_raw_6dof(AP_MOTORS_MOT_1, 1.0f, -1.0f, -1.0f, -1.0f, 1.0f, -1.0f, 1);
add_motor_raw_6dof(AP_MOTORS_MOT_2, 1.0f, 1.0f, -1.0f, 1.0f, 1.0f, 1.0f, 2);
add_motor_raw_6dof(AP_MOTORS_MOT_3, 1.0f, -1.0f, 1.0f, 1.0f, -1.0f, -1.0f, 3);
add_motor_raw_6dof(AP_MOTORS_MOT_4, 1.0f, 1.0f, 1.0f, -1.0f, -1.0f, 1.0f, 4);
add_motor_raw_6dof(AP_MOTORS_MOT_5, -1.0f, -1.0f, -1.0f, -1.0f, 1.0f, 1.0f, 5);
add_motor_raw_6dof(AP_MOTORS_MOT_6, -1.0f, 1.0f, -1.0f, 1.0f, 1.0f, -1.0f, 6);
add_motor_raw_6dof(AP_MOTORS_MOT_7, -1.0f, -1.0f, 1.0f, 1.0f, -1.0f, 1.0f, 7);
add_motor_raw_6dof(AP_MOTORS_MOT_8, -1.0f, 1.0f, 1.0f, -1.0f, -1.0f, -1.0f, 8);
break;


