Servers by jDrones

New TriCopter-Quadplane Concept

Hey, just saw this…

Only question is how can I link boost motor SERVOx_FUNCTION = 81 to plane throttle in forward flight?



it will need a small code change i think

As far as I know you might need a small chage in the code.

Thanks guys. I’m not really a software engineer so some guidance would be appreciated.

From what I can see,

  2. In FBWA or Auto -> SERVOx_FUNCTION = 70

Help please :slight_smile:

Hi Dev Team

I have setup the ArduPilot dev environment on my PC in hope to modify code. I’m seeking advice from the community as to the entry point into the code to make the correct changes.

On the surfcae it would appear that all I need to do is to change the servo assignments between BOOST and Plane Throttle between flight modes. After reviewing the documentation online regarding RC_Channel, now I’m not so sure.

I’m keen to figure this out, I just need some guidance as to the correct entry points in the code and best approach.



realflight SITL is great for testing this stuff.

Boost motor is a sensible way to go, first thing to do is check that it works for quadplanes in hover. Then assign it to just be throttle pashtough for forward flight.

probably here would be a good place, something like:

SRV_Channels::set_output_scaled(SRV_Channel::k_boost, tilt.current_throttle);

there might be one or two other thing to do but that should be a good start

Hey thanks for the advice Peter I’ll give it a go. :grinning:

I plan to rig up an EDF and test booster first. I’m hoping there’s nil torque from the EDF to worry about so should work OK with the tricopter config.

The other thing I noticed in the code is that k_boost_throttle has a scale factor applied to it, so if I was to map it to k_throttle in forward flight, I’ll need to set scale factor = 1.



the boost output in multiopter mode is done here,

ie the scaling is not inherent in the output function, you can pass it whatever you like.

My proposed changes in tiltrotor.cpp

update motor tilt for continuous tilt servos

 if (!hal.util->get_soft_armed()) {
        tilt.current_throttle = 0;
    } else {
        // the motors are all the way forward, start using them for fwd thrust
        uint8_t mask = is_zero(tilt.current_throttle)?0:(uint8_t)tilt.tilt_mask.get();
        //Fanman - comment motor output as not needed
        //motors->output_motor_mask(tilt.current_throttle, mask, plane.rudder_dt);

        //Fanman - code for EDF throttle control when tilt
        SRV_Channels::set_output_scaled(SRV_Channel::k_boost_throttle, tilt.current_throttle);

        // prevent motor shutdown
        //Fanman - Is below required?
        tilt.motors_active = true;

To the Dev Community,

I’m seeking advise on running my modified code using SITL within RF9. I’m planning on using Tridges Big Stik TiltRotorTri rev4_AV.RFX model with custom parameters.

My question is, can this model deal with the tilt mask for my configuration? i.e. I’m not tilting the tricopter motors, rather just the boost motor.

Any tips?



you may be right, you need to set the tilt mask to something to enable the tilt rotor stuff, i suggest you enable it for motor 4 (that you don’t have on a tricopter)

You will have to add in the boost motor and tilt in realflight, should be fairly straightforward.

Thanks Peter.

Just checked out the edit function in RF9. Impressive stuff. I have a few questions about RF9;

  1. How is the main gas motor controlled? I can’t see this in the component list. Should I just ignore it?
  2. I see lift motors are assigned as per APM motor numbering so looks good. How can I assign the boost motor so it connects to APM?
  3. Once all this has been setup and assume to work, how can I monitor the booster motor output so i know its generating thrust?



its not really there, the graphics don’t match the physics.

You would assign the motor a throttle servo and give the throttle servo a input channel in the servos tab

You can check that the motor throttles up in the physics model when you move the correct Chanel on the transmitter, the physics editor disconnects ardupilot however. Best thing do is check in the mission planner servo outputs tab that it’s doing the correct thing, or put it on the HUD as a user item.

You may be interested in this PR:
It uses an extra RC channel to control forward thrust of both front motors of the Convergence tilt-tri quadplane.

And an alternative approach which creates new flightmodes which mix throttle to forward thrust when above mid-stick:

Thanks Mark. I will look into it. I finally got my SITL model working and uploaded new code.

Only change was to scale the throttle output.

SRV_Channels::set_output_scaled(SRV_Channel::k_boost_throttle, tilt.current_throttle*1000);

I can successfully hover in QHover and if I’m careful, I can transition in FBWA. Monitoring the channels, I can see throttle and tilt servo outputs transition (although max throttle is limited so need to understand why).

The transition can be chaotic at times and I think it’s related to the Q_ASSIST options. As the Booster motor tilts, the tricopter motors seem to overcompensate or something along those lines and the model can flip, spin and crash. So I turned Q_ASSIST off. I also had to change some of the following parameters;

Q_TILT_MASK = 31 (i.e. non of the available lift motors to be on in FWD flight. Need this for Tilt servo to work)

Sometimes this works, but there are times when the lift motors won’t disengage after transition.

Maybe I need some code to shut down lift motors after transition?



So been have a bit more fun with this. I have placed some code to manually switch off lift motors after transition (well its a bit crude, I’m commanding Motors 1, 2 & 4 to go to standby directly). With Q_ASSIST disabled, I can get reasonable transitions now without flipping, although there is a loss of altitude.

My question to the group, how does the algorithm deal with the assisted lift during the transition? I see that the lift motors start spooling down as the booster motor tilts but I’m not sure where that control is coming from?

I would like to have some Q_ASSIST applied somehow to allow a longer transition without the model flipping and spiraling out of control.

Do you have a github branch with your changes in? I think the code should handle transition fine. Maybe you could also PR your realflight model to the SITL models repo. We can then also have a play and see if we can get to the bottom of whats going on.

The aircraft just uses the assist motors to maintain altitude until your min airspeed has been reached, then it fades them out over 2 seconds or so. It may just be a case of your min air speed is set too low, ARSPD_FBW_MIN is the param.


RealFlight 9 model here:

I changed ARSPD_FBW_MIN to a higher value and the aircraft seemed to oscillate.



I have done a PR that allows your model to Fly

You need to set the tilt mask to a none zero value that corisponds to motors that you don’t have, ie 4 for motor 3. Also you need to enable the boost motor in forward flight with the new option bit, Q_OPTIONS to 128.

The transition are still abit bumpy, but I think a auto tune in hover and forward flight would help. Then a play with the transition params.

Thanks, changed code and runs fine now. Only thing I’ve noticed is can take some time for the booster to kick in from FBWA to QHOVER. Not a big deal but can be managed.

Will port it to the test-bed and see how it performs.



Servers by jDrones