Powered Sailplane 1b
This was my first fully scratch-built attempt at beating Going the Distance. I spent a few hours figuring out how to make Rotator-powered props really user-friendly by experimenting on another plane, and then tweaking this one to match.
Features:
- "Engines" turn on and off with Activate1 ('1' key)
- "Engines" have low-RPM idle when activated.
- "Engines" are throttle-able.
- Max IAS is about 520 kph.
- Infinite fuel! (Pretend it's solar powered or something).
- A mysterious port roll tendency that I'm still trying to debug!
Take-off:
- Turn on engines by pressing '1'.
- Max flaps (Trim slider to bottom.)
- ~60% positive prop pitch (VTOL slider to just above the middle of the top half)
- ~20-30% throttle until speed stops increasing, then smoothing increase throttle (if not careful, immense thrust will drive plane ass over teakettle).
- Increase prop pitch to 100% (VTOL slider full up) and return flaps to 0 degrees (Trim slider to middle).
- Trim nose pitch by adding a few degrees of flaps or dropping a few degrees of prop pitch.
Technical notes:
- I used the following formula for the RotatorJoint props with idle and throttle capability:
InputController:
"min" = "-1E+10"
"min" = "1E+10"
"input" = "sum( Activate1 ? ( clamp( Throttle, 0.03, 1 ) / ( 1.5 * 360 * 1000000 ) ) : 0 )"
JointRotator:
"range" = "180"
"speed" = "3.5"
This took a while to figure out, but here's the breakdown:
- sum(
: rotators don't work by rotating a certain number of degrees, they work by trying to rotate to a set degree as fast as they can, based on their "min", "max", and "speed" values. If you just say "input": "Throttle", it tries to rotate to the "max" value * the Throttle value as fast as possible, limited by the Speed, and whatever Unity's internal maximum w value is. So to make a rotator throttle-able, you need to add a small, but variable, amount to its input value every tick to give the rotator a new value to shoot for - think a greyhound chasing a mechanical rabbit. The sum
does that.
- Activate1 ? ... : ...
: tell sum() to accumulate one value if Activate1 is on, and another if it's off. Without this, even if you deactivate the rotator, its target value keeps increasing every tick - meaning if you turn the engine off, then on again, it'll then be stuck at max throttle forever.
- clamp( Throttle, 0.03, 1 )
: I wanted a minimum idle rate when the engines are turned on, for looks. This says "even if the user reduces the Throttle control to 0, never let it drop below 3%, and never let it exceed 100%".
- / ( 1.5 * 360 * 1000000 ))
Experimentally I found that, because the rotator speed is 3.5 and the max value is 1E+10, and presumably because of some max value in Unity, I needed to divide the Throttle input by this large number to prevent 100% Throttle input from causing the accumulated target rotation from exceeding the maximum possible rotation speed of the RotatorJoint, thus causing the engines to be stuck at 100% for an unpredictable amount of time.
- : 0 )
: when the engine is deactivated, stop accumulating degrees - ignore the throttle input completely until reactivated. This avoids another issue I've seen with using Throttle as a rotator's input: 0% Throttle sets the target rotation to 0 degrees, and the rotator starts running at full speed in reverse!
Specifications
Spotlights
- ThePeterGriffin 4.4 years ago
General Characteristics
- Predecessor Powered Sailplane 1b
- Created On Android
- Wingspan 72.1ft (22.0m)
- Length 33.9ft (10.3m)
- Height 15.5ft (4.7m)
- Empty Weight 2,293lbs (1,040kg)
- Loaded Weight 2,293lbs (1,040kg)
Performance
- Wing Loading 5.8lbs/ft2 (28.2kg/m2)
- Wing Area 396.6ft2 (36.8m2)
- Drag Points 1906
Parts
- Number of Parts 42
- Control Surfaces 7
- Performance Cost 369
@Sleet01 No problem!
@ILikeToMakeStuff Thanks!
Cool!