Can the center of gravity for a tricopter be adjusted

In very basic terms, I think that’s reasonable.

For the scaling function, I think you’d want to calculate a slope and intercept from the outboard motors (using lateral position as X and output value as Y) and calculate the inboard motor values using that. As a brief example:

image

Use the scaled output bindings in Lua rather than raw PWM values.

@dkemxr, I also thought of a coaxial design, but it seems they’ve already modified their craft with the inboard/outboard solution. The coaxial route would definitely be simpler, though, if it’s possible to make further physical mods!

Yes, perhaps not enough time for a re-build and there would still be issues to solve. It occurs to me that if you had a coaxial rear motor also it would be a Y6 TriPlane. Not that you would need additional thrust there just interesting.

1 Like

Those are both interesting Ideas

Thank you, this is very helpful. For the actual adding of the motors can I use the same commands I would use as if I were defining a new configuration, for example:
(I haven’t tried coding a scaling function for output yet, this is just my attempt at adding motor outputs, I adapted it from an example script that was for a custom configuration. I’m sure its obvious I don’t really know what I am doing yet)

local AP_MOTORS_MOT_4 = 3
local AP_MOTORS_MOT_5 = 4

local function add_motor(motor_num, angle_degrees, yaw_factor, testing_order)

MotorsMatrix:add_motor_raw(motor_num,math.cos(math.rad(angle_degrees + 90)),
                                     math.cos(math.rad(angle_degrees)),
                                     yaw_factor,
                                     testing_order)

end

add_motor(AP_MOTORS_MOT_4, 90, AP_MOTORS_MATRIX_YAW_FACTOR_CW, 4)
add_motor(AP_MOTORS_MOT_5, 90, AP_MOTORS_MATRIX_YAW_FACTOR_CCW, 5)

assert(MotorsMatrix:init(2), “Failed to init MotorsMatrix”)

motors:set_frame_string(“fault tolerant”)

I’ve never messed with the motor matrix bindings. Perhaps @iampete can help with that. At face value, it does seem to be the right mechanism for proper control.

It’s at least good to hear I’m not writing complete nonsense. So would I add a second Lua script that controls there output or would I add the output directions to this script?

Pretty sure if you set up a custom motor matrix that you don’t need to do anything else. But like I said, I’ve never used that feature and am unfamiliar with the exact config.

You can set the throttle factor from scripting.

@Daniel_Lader Currently our lua scripting mixer support is only really for fixed motors, so it would not work with a traditional tricopter which needs vectoring for yaw. I not sure if the vehicle in question needs vectoring or not?

In general, provided there is sufficient control power, vehicles fly fine with a CG offset. Typically you would just see a little more error than usual on takeoff and then is OK once the I term has had a few seconds to do its stuff.

1 Like

In that case, my original scaling suggestion is probably the way to go for controlling your extra motors.

Only for 6DoF controller, regular one doesn’t take throttle input.

See the set_throttle_factor binding.

It was added after the add_motor_raw method so its in a different call. You would add the motor, then set the throttle factor then init.

1 Like

Thank you for your response,
Could I add the two extra motors to the existing standard tricopter configuration using an add_motor_raw Lua script and then use the set_throttle_factor with them?
I mean this in comparison to setting the configuration parameter to custom configuration and needing to add all 5 motors individually, and needing to worry about the variable thrust motor on the rear which uses a servo for yaw control.
Thanks

No, the tricopter mixer does not support adding motors.

However, it does support “boost” motors.

https://ardupilot.org/copter/docs/booster-motor.html

1 Like

Is it possible to add two boost motors? and then I could just assign the two inboard motors as boost motors and scale them accordingly?
If not what would you think of the idea of wiring the two inboard motors in parallel to one motor output so their theoretical center of thrust is the center of the plane and then leaving roll control completely to the outboard motors?

I didn’t think it was possible to add any boost motors in Arduplane. Isn’t this some kind of Kluge VTOL?
Quadplane support so I’m wrong. But not seeing Boost Motor recognized as a servo output type and I don’t see a Boost Scale parameter.

Its very hard for us to give advice without a better idea of the vehicle your trying to build. Maybe you can make a diagram?

He already posted this on three different threads.
And the lua thread, the one that makes sense, is the one nobody uses :stuck_out_tongue_winking_eye::rofl:

There’s a picture of it in this thread: Adding two motors to tricopter script

OK, I would just use a Y splitter to connect the two motors on each side to the single motor output AP is expecting.

We can’t do anything more bespoke without custom firmware.

That’s essentially what we have been trying to do, but we are having control issues. The aircraft always rolls to one side as we try to takeoff. It seems like this is due to not having individual control over the inboard motors.
I think that if we were able to script the inboard motors as a boost motor and then scale their throttle accordingly it could help, is this not possible?