Making a custom configuration

Hello, I want to create a new configuration for a rov I am planning on building but the Ardusub page has very vague instructions for that. Could someone please explain me in detail how to do this?


I have updated the instructions on Please let me know if you have any questions or suggestions about the updated instructions.


Awesome thanks but I have a few questions.

  • Do positive values make the motors suck water from the back and push it out the nose and negative values do the opposite?
  • For ROV1's throttle factor why are 3 and 4 set to 0.45 instead of 5?
  • For roll factor are we defining how to roll to the right, pitch nose up, yaw turn right, throttle go up and lateral move right?
  • If positive values make it go up (throttle factor) for the AS_MOTORS_VECTORED_6DOF_FRAME why are all the values set to negative values?Same for forward and lateral is it a typo or did I get it all wrong?

Positive and negative mean that the motor will spin one way or the other, respectively. The 0.45 just worked out better experimentally due to a lot of factors like uneven drag and throttle curves.

So, when you say one way does it mean if 2 motors have a positive value but if they have counter rotating props and if i configure one of them in opposite direction in ardusub they both will push or pull in the same direction right?

My last response may have been unclear, and somewhat incorrect. Imagine that every single motor is pulling water in through the front of the motor and pushing water out of the rear of the motor, then assign values according to the resulting force components that each motor produces.

The direction of the prop and the actual direction of rotation of the motor has no bearing here. Just the direction that water is moving. If you have two motors facing the same forward direction (Motors 1 and 2 on BROV1 for example) they should both have the same sign for the forward factor, because they both move the vehicle forward when they move water in the same direction. This can be accomplished with or without counter rotating props (but they should be counter rotating), and you may have to change the actual rotation of the motors with the MOTX_DIRECTION parameters so that everything is spinning the right direction in the end.


Thank-you that was very helpful.

Hi I’ve created a tool for create a custom configuration easily. Check this

Let me know if you can test it and if it’s useful

1 Like

Hello Andres,

I know this is an old post, but I am interested in using the frame generator tool you developed for a project I’m working on. I tried to follow the instructions in the README but I’m having some trouble running the app. Could you possibly give me some more detailed instructions on running it?

Hi Isaac, can you open an issue in the repo, describing the specific problem that you are having.

Hi Andres,
Thank you for responding, but I believe that I’ve solved the problem.


Looks like this link has died. Where can I find instructions for custom frame configurations?

Found it here:

1 Like

Hey I am using the frame generator for designing a custom frame for 3 motors, I am able to successfully generate the frame but when i am trying to upload the frame in the ardusub folder using the command “make px4-v2” i am getting an errorr " no rule to make target px4-v2" COuld you please help me out resolving this . I am currently using pixhawk Px4


We just started recommending developers to use sub-3.6 for development. The build instructions have been just updated today.

I have Pixhawk 6X, how do I manually build ardusub binary for it? I didn’t find pre-built binary under ardusub, only under copter. Or is it just not possible/compatible?

./waf configure --board Pixhawk6X
Setting top to                           : /Users/username/Documents/git/ardupilot 
Setting out to                           : /Users/username/Documents/git/ardupilot/build 
Autoconfiguration                        : enabled 
Setting board to                         : Pixhawk6X 
Invalid board 'Pixhawk6X': choices are aero, airbotf4, bbbmini, BeastF7, BeastH7, bebop, bhat, blue, crazyflie2, CUAV-Nora, CUAV-X7, CUAV-X7-bdshot, CUAV_GPS, CUAVv5, CUAVv5-bdshot, CUAVv5Nano, CUAVv5Nano-bdshot, CubeBlack, CubeBlack+, CubeBlack-periph, CubeGreen-solo, CubeOrange, CubeOrange-bdshot, CubeOrange-joey, CubeOrange-periph, CubePurple, CubeSolo, CubeYellow, CubeYellow-bdshot, dark, disco, DrotekP3Pro, Durandal, Durandal-bdshot, edge, erleboard, erlebrain2, f103-ADSB, f103-Airspeed, f103-GPS, f103-HWESC, f103-QiotekPeriph, f103-RangeFinder, f103-Trigger, f303-GPS, f303-HWESC, f303-M10025, f303-M10070, f303-MatekGPS, f303-Universal, F35Lightning, f405-MatekGPS, F4BY, FlywooF745, FlywooF745Nano, fmuv2, fmuv3, fmuv3-bdshot, fmuv5, fmuv5-bdshot, FreeflyRTK, G4-ESC, HitecMosaic, HolybroGPS, iomcu, KakuteF4, KakuteF4Mini, KakuteF7, KakuteF7-bdshot, KakuteF7Mini, linux, luminousbee4, luminousbee5, MambaF405v2, MatekF405, MatekF405-bdshot, MatekF405-CAN, MatekF405-STD, MatekF405-Wing, MatekF765-SE, MatekF765-Wing, MatekH743, MatekH743-bdshot, MatekH743-periph, MazzyStarDrone, mindpx-v2, mini-pix, mRoControlZeroClassic, mRoControlZeroF7, mRoControlZeroH7, mRoControlZeroH7-bdshot, mRoControlZeroOEMH7, mRoNexus, mRoPixracerPro, mRoPixracerPro-bdshot, mRoX21, mRoX21-777, navigator, navio, navio2, NucleoH743, obal, ocpoc_zynq, omnibusf4, omnibusf4pro, omnibusf4pro-bdshot, omnibusf4pro-one, omnibusf4v6, OMNIBUSF7V2, OMNIBUSF7V2-bdshot, OmnibusNanoV6, OmnibusNanoV6-bdshot, PH4-mini, Pix32v5, Pixhawk1, Pixhawk1-1M, Pixhawk1-1M-bdshot, Pixhawk4, Pixhawk4-bdshot, Pixracer, Pixracer-bdshot, Pixracer-periph, pocket, pxf, pxfmini, QioTekZealotF427, R9Pilot, revo-mini, revo-mini-bdshot, revo-mini-i2c, revo-mini-i2c-bdshot, rst_zynq, sitl, SITL_arm_linux_gnueabihf, sitl_periph_gps, SITL_static, SITL_x86_64_linux_gnu, skyviper-f412-rev1, skyviper-journey, skyviper-v2450, sparky2, speedybeef4, SuccexF4, TBS-Colibri-F7, vnav, VRBrain-v51, VRBrain-v52, VRBrain-v54, VRCore-v10, VRUBrain-v51, ZubaxGNSS, zynq

I tried the official custom firmware builder: . This worked.

However, I’m following Build ArduSub · GitBook to make a “Custom Configuration” by modifying “AP_Motors6DOF.cpp,” does that mean I have to edit the code, then compile locally? The default build doesn’t allow me to edit this. When I run “./waf configure --board Pixhawk6X” locally, the board config is not found.

Is it possible to add Pixhawk6X to the official firmware repo for ardusub?

Please kindly advise.

Hi @Collie, welcome to the forum :slight_smile:

The issue here is most likely that waf support for the Pixhawk6X board was added more recently than the point in the codebase ArduSub’s latest release is from.

It should be possible, but you’ll need to either cherry-pick the relevant waf updates/release back to the branch you’re using, or use a more recent version/branch of the codebase that includes a more recent version of waf.

It should already be available in the master branch, but would need to be back-ported to other Sub-* branches and/or tags if we want support for it for earlier releases (and I’m not sure if there are any firmware incompatibilities). I would guess Pixhawk6X support will only be intentionally added for new releases, once ArduSub is brought more in line with the other ArduPilot firmwares.

That said, if you want to backport waf support for Pixhawk6X to the Sub-4.1 branch then you could make a pull request with the relevant changes (after confirming that it works), and I doubt @williangalvani (the main ArduSub maintainer) will object to merging that in :slight_smile: