Board index FlightGear Support Flying Helicopter

Helicopter realism -- or not? Real pilot tests?

Helicopter flying is completely different from flying a fixed-wing aircraft and thus requires different skills.

Re: Helicopter realism -- or not? Real pilot tests?

Postby Thorsten » Tue Jun 01, 2010 9:34 am

Latest model. I start the engine, the rotor starts spinning, the RPM needle shakes violently, so does the model even while the rotor spins up. The model doesn't even stand on the runway with engine running, even without me pulling back on the collective or anything it flips over immediately, the screen greys out, Flightgear ceases to be responsive (I can't access the menu), a post mortem gives the following set of errors:


Code: Select all
PT_vs_hpt: ran out of layers
Nasal runtime error: floating point error in math.atan2()
  at /usr/share/FlightGear-2.0.0/Aircraft/UH-1/Nasal/uh1.nas, line 15
  called from: /usr/share/FlightGear-2.0.0/Aircraft/UH-1/Nasal/uh1.nas, line 228
  called from: /usr/share/FlightGear-2.0.0/Aircraft/UH-1/Nasal/uh1.nas, line 245
  called from: /usr/share/FlightGear-2.0.0/Aircraft/UH-1/Nasal/uh1.nas, line 387
AL Error (fx): Invalid Value at pitch and gain
AL Error (fx): Invalid Value at pitch and gain
AL Error (fx): Invalid Value at pitch and gain
AL Error (fx): Invalid Value at pitch and gain
Thorsten
 
Posts: 12490
Joined: Mon Nov 02, 2009 9:33 am

Re: Helicopter realism -- or not? Real pilot tests?

Postby HHS » Tue Jun 01, 2010 9:45 am

Thorsten wrote:Latest model. I start the engine, the rotor starts spinning, the RPM needle shakes violently, so does the model even while the rotor spins up. The model doesn't even stand on the runway with engine running, even without me pulling back on the collective or anything it flips over immediately, the screen greys out, Flightgear ceases to be responsive (I can't access the menu), a post mortem gives the following set of errors:


Code: Select all
PT_vs_hpt: ran out of layers
Nasal runtime error: floating point error in math.atan2()
  at /usr/share/FlightGear-2.0.0/Aircraft/UH-1/Nasal/uh1.nas, line 15
  called from: /usr/share/FlightGear-2.0.0/Aircraft/UH-1/Nasal/uh1.nas, line 228
  called from: /usr/share/FlightGear-2.0.0/Aircraft/UH-1/Nasal/uh1.nas, line 245
  called from: /usr/share/FlightGear-2.0.0/Aircraft/UH-1/Nasal/uh1.nas, line 387
AL Error (fx): Invalid Value at pitch and gain
AL Error (fx): Invalid Value at pitch and gain
AL Error (fx): Invalid Value at pitch and gain
AL Error (fx): Invalid Value at pitch and gain

Great! :D

Exactly what I guessed- with your error message we can track down now the bug!

Thanks a lot- so it is not an issue of the fdm and not my fault like Helijah always said!
:D
Up, up and away
User avatar
HHS
 
Posts: 3625
Joined: Thu Jul 19, 2007 9:09 am
Version: GIT

Re: Helicopter realism -- or not? Real pilot tests?

Postby HHS » Tue Jun 01, 2010 10:02 am

FlightGear and Helis- great hardware:


I guess they use the same database for their UH-1 like we do.
Up, up and away
User avatar
HHS
 
Posts: 3625
Joined: Thu Jul 19, 2007 9:09 am
Version: GIT

Re: Helicopter realism -- or not? Real pilot tests?

Postby Groucho » Tue Jun 01, 2010 12:48 pm

HHS wrote:
Thorsten wrote:(I haven't tried anything else except the UH-1 which crashes Flightgear when I try to load it).


Still crashing?

We still need some more informations like OS, Version-date of the helicopter and error-messages...


As I said, my time is limited but I can confirm the crashes with 2.0 which I just installed a few days ago from scratch. Happened under Ubuntu Lucid (10.04) built with OSG 2.6.8 and simgear 2.0.

No CVS/GIt (yet)

HHS wrote:@Groucho:
Great to see you here! I hope you are fine!

Thanks, yes I am fine, just a "little" bit busy with my family enlargement which makes my spare time rather unpredictable. Extremely unpredictable, to be precise.

flywhisher wrote:I pointed out to him the R-22 model's habit of tilting to the right on liftoff, and the Bo105's habit of tilting to the left. Guess what? He told me this is actually realistic. Real helicopters DO lift one skid before the other. This is caused by the pressure from the tail rotor, and the direction of tilt depends on which side the tail rotor is on. The Bo105's tail rotor is opposite the R-22's. Also, he said it is quite possible, easy even, for a novice to flip an R-22 over trying to liftoff.


Just to add some facts, the R22 has the main rotor located in a rather relevated position compared to the position of the tail rotor. As a result the torque compensating forces of the tail rotor are additionally split into a horizontal dragging component to the left (or right depending where the tail rotor is sitting). This is applying to every helicopter, however this force is lower for helicopters with an elevated tail rotor like the Bo105 uses. A chopper with a tail rotor elevated to the same level as the rotor head would experience almost no drag to one side which results in a much better tail control as the forces are only applied on the turning axis. However the technique of elvating the tail introduces more mechanical complexity which makes the design more expensive and prone to failure so some manufacturers have omitted it. The elevated tail design is quite often seen in military helicopters where precise manouverability is crucial to reduce stress from the pilot under combat situations and where costs are not such a competitive factor. Those without are mostly military derivatives of civilian types.

HHS wrote:And helis can do more than just land on a small spot- ever tried to hover steady in the air above one spot ?

Some times ago I used to practise a bit with the Alouette II flying into that Nimitz compartment located on both sides of the ship and land there. Quite challenging. I still dream of an event (if I have time enough again) with a hide and seek missions where helicopter pilots are hiding behind buildings, trees, aircrafts, etc. and have to be sought by others, then popup and start a pursuit.
Then there is formation flying with all sorts of aircrafts- locate them, approach them then follow them in a constant distance at a steady position relative to it.
I also used to train at KSFO by hovering in front of the cockpit of passenger aircrafts or following them with a side hover like a TV station helicopter would while they are taxiing to the runway, additionally paying attention to other traffic. Or flying over to crashed aircrafts, hovering around and giving funny comments :)
Oil rig support in the North Atlantic is also something for sophisticated pilots.
Then there is helicopter taxiing- flying low and slow on a taxiway to and from the runway or helipads (also after approaching runways like an aircraft, quite challenging keeping speed, direction and glide path) and more.
There are lots of funny things to do with a chopper. Unfortunately some people believe it is enough to brutally take it off and, after being airborne, doing some wild aerobatics without being able to touch it down again gently.
Ah and while we are at it- looking at the pilot list, discovering a helicopter, flying over and watch the show when he tries to take off :D Well, in most cases I try to help after a while. A rather funny aspect: If somebody manages to brutally bring the Bo105 into the air after a while he discovers my R22 and starts with the hey-I-can-fly-this-thing-too attitude by vanishing and returning with the R22 which makes his experience even worse. As I said, watch the show :P
_____________________________________
Callsign: D-HARP
Flight locations: TNCM, TKPK, EDNY, LOWI
Aircrafts
Helis: EC130, Bo105, UH-1, R22
Twins/Jets: Aerostar, CRJ-200
User avatar
Groucho
 
Posts: 1212
Joined: Sun Jun 17, 2007 11:28 am
Location: Airborne Lake Constance/Germany
Callsign: D-HARP
Version: GIT
OS: Kubuntu

Re: Helicopter realism -- or not? Real pilot tests?

Postby flywisher » Tue Jun 01, 2010 4:38 pm

Fahim Dalvi wrote:Just jumping in, Maybe a little off topic but still. flywisher, some time back, a guy called sety showed us how to build our own yoke with a mouse, in Just 5 minutes :D viewtopic.php?f=3&t=1956


Thank you Mr. Dalvi! That is awesome! Brilliant! Ingenious! Some of us are going to try that!
flywisher
 
Posts: 145
Joined: Mon Jun 01, 2009 3:37 am
Location: San Diego, CA USA
Callsign: flywisher
OS: XP, Vista, Mint

Re: Helicopter realism -- or not? Real pilot tests?

Postby flywisher » Tue Jun 01, 2010 5:27 pm

flywisher wrote:.... The simulator is in a small trailer, runs Microsoft Flight Simulator X on a PC, and has a screen that covers the entire wall a few inches in front of the cockpit mockup. My instructor said MSFS X's simulation is very realistic.


HHS wrote:*cough* Unless they use an external fmd or extended MSFS X's fdm I have to disgree! MSFS X isn't able to calculate the torque and other things for helicopter simulation! He should know this...


I suspect the Flyit people used the MSFSX as a base so they wouldn't have to create everything themselves, then adjusted or extended it to get the realism they needed. My instructor assured me that the Flyit simulator is very close to the real helicopter. And I can attest that it definitely handled torque.
flywisher
 
Posts: 145
Joined: Mon Jun 01, 2009 3:37 am
Location: San Diego, CA USA
Callsign: flywisher
OS: XP, Vista, Mint

Re: Helicopter realism -- or not? Real pilot tests?

Postby HHS » Tue Jun 01, 2010 9:14 pm

flywisher wrote:
I suspect the Flyit people used the MSFSX as a base so they wouldn't have to create everything themselves, then adjusted or extended it to get the realism they needed. My instructor assured me that the Flyit simulator is very close to the real helicopter. And I can attest that it definitely handled torque.


I would rather guess they used ESP- the enhanced MSFS for professional simulation.

I'm pretty much sure that we, beside the lack of VRS, can also come very close to the real one, maybe even better than their sim.
We just need some helpfull inputs by real pilots.
Last edited by HHS on Tue Jun 01, 2010 9:24 pm, edited 1 time in total.
Up, up and away
User avatar
HHS
 
Posts: 3625
Joined: Thu Jul 19, 2007 9:09 am
Version: GIT

Re: Helicopter realism -- or not? Real pilot tests?

Postby HHS » Tue Jun 01, 2010 9:23 pm

Try to fix for the UH1:

Please copy and paste/save it: UH-1/Nasal/uh1.nas

Code: Select all
# Maik Justus < fg # mjustus : de >, based on bo105.nas by Melchior FRANZ, < mfranz # aon : at >

if (!contains(globals, "cprint")) {
   globals.cprint = func {};
}



var optarg = aircraft.optarg;
var makeNode = aircraft.makeNode;



var sin = func(a) { math.sin(a * math.pi / 180.0) }
var cos = func(a) { math.cos(a * math.pi / 180.0) }
var pow = func(v, w) { math.exp(math.ln(v) * w) }
var npow = func(v, w) { math.exp(math.ln(abs(v)) * w) * (v < 0 ? -1 : 1) }
var clamp = func(v, min = 0, max = 1) { v < min ? min : v > max ? max : v }
var normatan = func(x, slope = 1) math.atan2(x, slope) * 2 / math.pi;

# timers ============================================================
var turbine_timer = aircraft.timer.new("/sim/time/hobbs/turbines", 10);
aircraft.timer.new("/sim/time/hobbs/helicopter", nil).start();



# engines/rotor =====================================================
var state = props.globals.getNode("sim/model/uh1/state");
var engine = props.globals.getNode("sim/model/uh1/engine");
var rotor = props.globals.getNode("controls/engines/engine/magnetos");
var rotor_rpm = props.globals.getNode("rotors/main/rpm");
var torque = props.globals.getNode("rotors/gear/total-torque", 1);
var collective = props.globals.getNode("controls/engines/engine[0]/throttle");
var turbine = props.globals.getNode("sim/model/uh1/turbine-rpm-pct", 1);
var torque_pct = props.globals.getNode("sim/model/uh1/torque-pct", 1);
var stall = props.globals.getNode("rotors/main/stall", 1);
var stall_filtered = props.globals.getNode("rotors/main/stall-filtered", 1);
var torque_sound_filtered = props.globals.getNode("rotors/gear/torque-sound-filtered", 1);
var target_rel_rpm = props.globals.getNode("controls/rotor/reltarget", 1);
var max_rel_torque = props.globals.getNode("controls/rotor/maxreltorque", 1);
var cone = props.globals.getNode("rotors/main/cone-deg", 1);
var cone1 = props.globals.getNode("rotors/main/cone1-deg", 1);
var cone2 = props.globals.getNode("rotors/main/cone2-deg", 1);
var cone3 = props.globals.getNode("rotors/main/cone3-deg", 1);
var cone4 = props.globals.getNode("rotors/main/cone4-deg", 1);
var debugf = props.globals.getNode("aaa/f", 1);
var debugrr = props.globals.getNode("orientation/roll-rate-degps", 1);
var debugr = props.globals.getNode("rotors/bar2/roll-deg", 1);
var bladesvisible = props.globals.getNode("rotors/main/bladesvisible", 1);



# state:
# 0 off
# 1 engine startup
# 2 engine startup with small torque on rotor
# 3 engine idle
# 4 engine accel
# 5 engine sound loop



var update_state = func {
   var s = state.getValue();
   var new_state = arg[0];
   if (new_state == (s+1)) {
      state.setValue(new_state);
      if (new_state == (1)) {
         settimer(func { update_state(2) }, 1);
         interpolate(engine, 0.03, 0.7);
      } else {
         if (new_state == (2)) {
            settimer(func { update_state(3) }, 4);
            rotor.setValue(1);
            max_rel_torque.setValue(0.01);
            target_rel_rpm.setValue(0.2);
            interpolate(engine, 0.2, 4);
         } else {
            if (new_state == (3)) {
               if (rotor_rpm.getValue() > 100) {
                  #rotor is running at high rpm, so accel. engine faster
                  max_rel_torque.setValue(1);
                  target_rel_rpm.setValue(1.00);
                  state.setValue(5);
                  interpolate(engine, 1.03, 10);
               } else {
                  settimer(func { update_state(4) }, 7*0);
                  max_rel_torque.setValue(0.05);
                  target_rel_rpm.setValue(0.02);
                  interpolate(engine, 0.07, 0.1, 0.03, 0.25, 0.075, 0.2, 0.08, 1, 0.06,2);
               }
            } else {
               if (new_state == (4)) {
                  settimer(func { update_state(5) }, 20);
                  max_rel_torque.setValue(0.25);
                  target_rel_rpm.setValue(0.7);
               } else {
                     if (new_state == (5)) {
                     max_rel_torque.setValue(1);
                     arget_rel_rpm.setValue(1.00);
                  }
               }
            }
         }
      }
   }
}



var engines = func {
   if (props.globals.getNode("sim/crashed",1).getBoolValue()) {return; }
   var s = state.getValue();
   if (arg[0] == 1) {
      if (s == 0) {
         update_state(1);
      }
   } else {
      rotor.setValue(0);            # engines stopped
      state.setValue(0);
      interpolate(engine, 0, 4);
   }
}



var update_engine = func {
   if (state.getValue() > 3 ) {
      interpolate (engine,  clamp( rotor_rpm.getValue() / 235 ,
                        0.05, target_rel_rpm.getValue() ), 0.25 );
   }
}



#var update_rotor_cone_angle = func {
#   r = rotor_rpm.getValue();
#   var f = 1 - r / 100;
#   f = clamp (f, 0.1 , 1);
#   c = cone.getValue();
#   cone1.setDoubleValue( f *c *0.40 + (1-f) * c );
#   cone2.setDoubleValue( f *c *0.35);
#   cone3.setDoubleValue( f *c *0.30);
#   cone4.setDoubleValue( f *c *0.25);
#}



# 0.50
# 0.75
# 1.00
# 1.25
var update_rotor_cone_angle = func {
   r = rotor_rpm.getValue();
        #print("r  = ", r);
   var f = r / 186;
        #print("f1 = ", f);
   f = clamp (f, 0 , 0);
        #print("f2 = ", f);
   c = cone.getValue();
        #print("c  = ", c);

   cone1.setDoubleValue( (c * 0.30) + (f * c));
   cone2.setDoubleValue( (c * 0.15) + (f * c));
   cone3.setDoubleValue( (c * 0.10) + (f * c));
   cone4.setDoubleValue( (c * 0.05) + (f * c));

   

   r = debugr.getValue();
   rr = debugrr.getValue();
   if (abs(rr)<1e-7) rr = 1e-7;
   debugf.setDoubleValue(r/rr);
}



# torquemeter
var torque_val = 0;
torque.setDoubleValue(0);


var update_torque = func(dt) {
   var f = dt / (0.2 + dt);
   torque_val = torque.getValue() * f + torque_val * (1 - f);
   torque_pct.setDoubleValue(torque_val / 5300);
}



# sound =============================================================

# stall sound

var stall_val = 0;
stall.setDoubleValue(0);



var update_stall = func(dt) {
   var s = stall.getValue();
   if (s < stall_val) {
      var f = dt / (0.3 + dt);
      stall_val = s * f + stall_val * (1 - f);
   } else {
      stall_val = s;
   }
   var c = collective.getValue();
   stall_filtered.setDoubleValue(stall_val + 0.006 * (1 - c));
}





# modify sound by torque
var torque_val = 0;



var update_torque_sound_filtered = func(dt) {
   var t = torque.getValue();
   t = clamp(t * 0.000001);
   t = t*0.25 + 0.75;
   var r = clamp(rotor_rpm.getValue()*0.02-1);
   torque_sound_filtered.setDoubleValue(t*r);
}



# skid slide sound

var Skid = {
   new : func(n) {
      var m = { parents : [Skid] };
      var soundN = props.globals.getNode("sim/sound", 1).getChild("slide", n, 1);
      var gearN = props.globals.getNode("gear", 1).getChild("gear", n, 1);



      m.compressionN = gearN.getNode("compression-norm", 1);
      m.rollspeedN = gearN.getNode("rollspeed-ms", 1);
      m.frictionN = gearN.getNode("ground-friction-factor", 1);
      m.wowN = gearN.getNode("wow", 1);
      m.volumeN = soundN.getNode("volume", 1);
      m.pitchN = soundN.getNode("pitch", 1);



      m.compressionN.setDoubleValue(0);
      m.rollspeedN.setDoubleValue(0);
      m.frictionN.setDoubleValue(0);
      m.volumeN.setDoubleValue(0);
      m.pitchN.setDoubleValue(0);
      m.wowN.setBoolValue(1);
      m.self = n;
      return m;
   },

   update : func {
      me.wowN.getBoolValue() or return;
      var rollspeed = abs(me.rollspeedN.getValue());
      me.pitchN.setDoubleValue(rollspeed * 0.6);



      var s = normatan(20 * rollspeed);
      var f = clamp((me.frictionN.getValue() - 0.5) * 2);
      var c = clamp(me.compressionN.getValue() * 2);
      me.volumeN.setDoubleValue(s * f * c * 2);
      #if (!me.self) {
      #   cprint("33;1", sprintf("S=%0.3f  F=%0.3f  C=%0.3f  >>  %0.3f", s, f, c, s * f * c));
      #}
   },
};



var skid = [];
for (var i = 0; i < 3; i += 1) {
   append(skid, Skid.new(i));
}



var update_slide = func {
   forindex (var i; skid) {
      skid[i].update();
   }
}



# crash handler =====================================================

#var load = nil;

var crash = func {
   if (arg[0]) {
      # crash
      setprop("rotors/main/rpm", 0);
      setprop("rotors/main/blade[0]/flap-deg", -60);
      setprop("rotors/main/blade[1]/flap-deg", -50);
      setprop("rotors/main/blade[2]/flap-deg", -40);
      setprop("rotors/main/blade[3]/flap-deg", -30);
      setprop("rotors/main/blade[0]/incidence-deg", -30);
      setprop("rotors/main/blade[1]/incidence-deg", -20);
      setprop("rotors/main/blade[2]/incidence-deg", -50);
      setprop("rotors/main/blade[3]/incidence-deg", -55);
      setprop("rotors/tail/rpm", 0);
      strobe_switch.setValue(0);
      beacon_switch.setValue(0);
      nav_light_switch.setValue(0);
      rotor.setValue(0);
      torque_pct.setValue(torque_val = 0);
      stall_filtered.setValue(stall_val = 0);
      state.setValue(0);



   } else {
      # uncrash (for replay)

      setprop("rotors/tail/rpm", 1500);
      setprop("rotors/main/rpm", 235);
      for (i = 0; i < 4; i += 1) {
         setprop("rotors/main/blade[" ~ i ~ "]/flap-deg", 0);
         setprop("rotors/main/blade[" ~ i ~ "]/incidence-deg", 0);
      }
      strobe_switch.setValue(1);
      beacon_switch.setValue(1);
      rotor.setValue(1);
      state.setValue(5);
   }
}









# "manual" rotor animation for flight data recorder replay ============

var rotor_step = props.globals.getNode("sim/model/uh1/rotor-step-deg");
var blade1_pos = props.globals.getNode("rotors/main/blade[0]/position-deg", 1);
var blade2_pos = props.globals.getNode("rotors/main/blade[1]/position-deg", 1);
var blade3_pos = props.globals.getNode("rotors/main/blade[2]/position-deg", 1);
var blade4_pos = props.globals.getNode("rotors/main/blade[3]/position-deg", 1);
var rotorangle = 0;



var rotoranim_loop = func {
   i = rotor_step.getValue();
   if (i >= 0.0) {
      blade1_pos.setValue(rotorangle);
      blade2_pos.setValue(rotorangle + 90);
      blade3_pos.setValue(rotorangle + 180);
      blade4_pos.setValue(rotorangle + 270);
      rotorangle += i;
      settimer(rotoranim_loop, 0.1);
   }
}



var init_rotoranim = func {

   if (rotor_step.getValue() >= 0.0) {
      settimer(rotoranim_loop, 0.1);
   }
}



# view management ===================================================



var elapsedN = props.globals.getNode("/sim/time/elapsed-sec", 1);
var flap_mode = 0;
var down_time = 0;
controls.flapsDown = func(v) {
   if (!flap_mode) {
      if (v < 0) {
         down_time = elapsedN.getValue();
         flap_mode = 1;
         dynamic_view.lookat(
               5,     # heading left
               -20,   # pitch up
               0,     # roll right
               0.2,   # right
               0.6,   # up
               0.85,  # back
               0.2,   # time
               55,    # field of view
         );

      } elsif (v > 0) {
         flap_mode = 2;
         var p = "/sim/view/dynamic/enabled";
         setprop(p, !getprop(p));
      }



   } else {
      if (flap_mode == 1) {
         if (elapsedN.getValue() < down_time + 0.2) {
            return;
         }
         dynamic_view.resume();
      }
      flap_mode = 0;
   }
}





# register function that may set me.heading_offset, me.pitch_offset, me.roll_offset,

# me.x_offset, me.y_offset, me.z_offset, and me.fov_offset

#

dynamic_view.register(func {
   var lowspeed = 1 - normatan(me.speedN.getValue() / 50);
   var r = sin(me.roll) * cos(me.pitch);



   me.heading_offset =                  # heading change due to
      (me.roll < 0 ? -50 : -30) * r * abs(r);         #    roll left/right



   me.pitch_offset =                  # pitch change due to
      (me.pitch < 0 ? -50 : -50) * sin(me.pitch) * lowspeed   #    pitch down/up
      + 15 * sin(me.roll) * sin(me.roll);         #    roll



   me.roll_offset =                  # roll change due to
      -15 * r * lowspeed;               #    roll

});









# main() ============================================================

var delta_time = props.globals.getNode("/sim/time/delta-realtime-sec", 1);
var adf_rotation = props.globals.getNode("/instrumentation/adf/rotation-deg", 1);
var hi_heading = props.globals.getNode("/instrumentation/heading-indicator/indicated-heading-deg", 1);



var main_loop = func {
   # adf_rotation.setDoubleValue(hi_heading.getValue());



   var dt = delta_time.getValue();
   update_torque(dt);
   update_stall(dt);
   update_torque_sound_filtered(dt);
   update_slide();
   update_engine();
   update_rotor_cone_angle();
   settimer(main_loop, 0);
}





var crashed = 0;
var variant = nil;
var doors = nil;
var config_dialog = nil;



# initialization

setlistener("/sim/signals/fdm-initialized", func {



   init_rotoranim();
   collective.setDoubleValue(1);



   setlistener("/sim/signals/reinit", func {
      cmdarg().getBoolValue() and return;
      cprint("32;1", "reinit");
      turbine_timer.stop();
      collective.setDoubleValue(1);
      # variant.scan();
      crashed = 0;
   });



   setlistener("sim/crashed", func {
      cprint("31;1", "crashed ", cmdarg().getValue());
      turbine_timer.stop();
      if (cmdarg().getBoolValue()) {
         crash(crashed = 1);
      }
   });



   setlistener("/sim/freeze/replay-state", func {
      cprint("33;1", cmdarg().getValue() ? "replay" : "pause");
      if (crashed) {
         crash(!cmdarg().getBoolValue())
      }
   });



   # the attitude indicator needs pressure
   # settimer(func { setprop("engines/engine/rpm", 3000) }, 8);



   main_loop();

});

normatan seems to be changed since a while, but was only updated on bo105.
At least I hope this is the cause, if not then something in the hardcode is wrong....

Please test it and send me the error report.

@Groucho:
Congratulations on the familiy enlargement!

In the case the Bell UH1 is working- sorry for the wrong colors on the SAR41...I will fix it soon :wink:
Up, up and away
User avatar
HHS
 
Posts: 3625
Joined: Thu Jul 19, 2007 9:09 am
Version: GIT

Re: Helicopter realism -- or not? Real pilot tests?

Postby Thorsten » Wed Jun 02, 2010 7:10 am

I moved the old file to uh1.nas.bak, copied the code into uh1.nas - but same problem:

Code: Select all
Nasal parse error: parse error in /sim[0]/bindings/gui/binding, line 1
Failed to execute command nasal
PT_vs_hpt: ran out of layers
Nasal runtime error: floating point error in math.atan2()
  at /usr/share/FlightGear-2.0.0/Aircraft/UH-1/Nasal/uh1.nas, line 19
  called from: /usr/share/FlightGear-2.0.0/Aircraft/UH-1/Nasal/uh1.nas, line 267
  called from: /usr/share/FlightGear-2.0.0/Aircraft/UH-1/Nasal/uh1.nas, line 288
  called from: /usr/share/FlightGear-2.0.0/Aircraft/UH-1/Nasal/uh1.nas, line 478
AL Error (fx): Invalid Value at pitch and gain
AL Error (fx): Invalid Value at pitch and gain
AL Error (fx): Invalid Value at pitch and gain
AL Error (fx): Invalid Value at pitch and gain
CullVisitor::apply(Geode&) detected NaN,
    depth=nan, center=(0.009 0 0),
    matrix={
        nan nan nan nan
        nan nan nan nan
        nan nan nan nan
        nan nan nan nan
}

CullVisitor::apply(Geode&) detected NaN,
    depth=nan, center=(0 0 35040),
    matrix={
        nan nan nan nan
        nan nan nan nan
        nan nan nan nan
        nan nan nan nan
}
Thorsten
 
Posts: 12490
Joined: Mon Nov 02, 2009 9:33 am

Re: Helicopter realism -- or not? Real pilot tests?

Postby HHS » Wed Jun 02, 2010 10:19 am

O.k.- that's now beyond my knowledge and abilities...

I've sended a bug report on the bug-tracker and the devel-list. I hope someone will catch this....
Up, up and away
User avatar
HHS
 
Posts: 3625
Joined: Thu Jul 19, 2007 9:09 am
Version: GIT

Re: Helicopter realism -- or not? Real pilot tests?

Postby Thorsten » Mon Jun 14, 2010 8:23 am

There we go - me and my trusty old mouse have finally managed to make flights from Vinson to the Helipad of a frigate in the escort group back to Vinson and are insufferably proud to slowly get the hang of helicopter flight.
Thorsten
 
Posts: 12490
Joined: Mon Nov 02, 2009 9:33 am

Re: Helicopter realism -- or not? Real pilot tests?

Postby Groucho » Wed Jun 16, 2010 9:19 pm

HHS wrote:But you might all try the improved fdm (copy and paste in R22BetaII.xml) and see if this comes closer. For me it does (nearly to easy to fly ;-)):


Oh, that feels like cheating now... :)

BTW is it just me or is it by design that switching to engine 2 in the ec135 is not possible? I can switch to 1, 3 and 4 (while 3 and 4 do not do anything) but 2 does not seem to exist. It always stays with the engine last selected.
Works like a charm in the bo105.
_____________________________________
Callsign: D-HARP
Flight locations: TNCM, TKPK, EDNY, LOWI
Aircrafts
Helis: EC130, Bo105, UH-1, R22
Twins/Jets: Aerostar, CRJ-200
User avatar
Groucho
 
Posts: 1212
Joined: Sun Jun 17, 2007 11:28 am
Location: Airborne Lake Constance/Germany
Callsign: D-HARP
Version: GIT
OS: Kubuntu

Re: Helicopter realism -- or not? Real pilot tests?

Postby HHS » Thu Jun 17, 2010 9:53 am

Groucho wrote:
Oh, that feels like cheating now... :)

I guess the real behaviour is between my and Syd's version. Difficult to say without any feedback by real pilots.

BTW is it just me or is it by design that switching to engine 2 in the ec135 is not possible? I can switch to 1, 3 and 4 (while 3 and 4 do not do anything) but 2 does not seem to exist. It always stays with the engine last selected.
Works like a charm in the bo105.


You can select each engine and start it correct. There is one problem: when started engine 2 the collective dosen't respond any more. So you have to select engine 1 again and then you can fly away. I guess when I deleted not needed parts of the nasal-file, I deleted something needed for. I Have to revert this back.
Nasal and engine simulation (incl. fuel...) is still a pain for me.
Up, up and away
User avatar
HHS
 
Posts: 3625
Joined: Thu Jul 19, 2007 9:09 am
Version: GIT

Re: Helicopter realism -- or not? Real pilot tests?

Postby Groucho » Thu Jun 17, 2010 10:52 am

HHS wrote:
BTW is it just me or is it by design that switching to engine 2 in the ec135 is not possible? I can switch to 1, 3 and 4 (while 3 and 4 do not do anything) but 2 does not seem to exist. It always stays with the engine last selected.
Works like a charm in the bo105.


You can select each engine and start it correct. There is one problem: when started engine 2 the collective dosen't respond any more. So you have to select engine 1 again and then you can fly away. I guess when I deleted not needed parts of the nasal-file, I deleted something needed for. I Have to revert this back.
Nasal and engine simulation (incl. fuel...) is still a pain for me.


to reproduce here the steps I did:
Start of program
Shift-1 to select engine one
start engine one as described above (starter, ignition, power lever...).
Power is at 63%
Press @ to select engine 2
Move the power lever around -> changing from 63%, so engine 1 is still selected
Press # for engine 3
Move the power lever around -> staying on 0% (correct, as there is no engine 3 in the ec135, at least engine 3 is selected)
Press @ to select engine 2
Move the power lever around -> staying on 0% (engine 3 is still selected)
Shift-1 to select engine one
Move the power lever around -> changing from 63%, so engine 1 is selected

Pressing @ to select engine 2 works with the bo105 but for me not in the ec135 which I find strange.
_____________________________________
Callsign: D-HARP
Flight locations: TNCM, TKPK, EDNY, LOWI
Aircrafts
Helis: EC130, Bo105, UH-1, R22
Twins/Jets: Aerostar, CRJ-200
User avatar
Groucho
 
Posts: 1212
Joined: Sun Jun 17, 2007 11:28 am
Location: Airborne Lake Constance/Germany
Callsign: D-HARP
Version: GIT
OS: Kubuntu

Re: Helicopter realism -- or not? Real pilot tests?

Postby HHS » Thu Jun 17, 2010 8:16 pm

Hi,

I just tried-
I get this when I try the start prodecedure:

shift-1 (=!-key) to select engine 1
Starter, ignition, powerlever into Idle- 63% fuel flow
Engine 1 runs according to power lever setting

Alt Gr-Q (=@-key) to select engine 2
Starter, ignition, powerlever into Idle 63% fuel flow
Engine 2 runs according to power lever setting

Press #-key for engine 3
Move the power lever around -> staying on 0% (correct, as there is no engine 3 in the ec135, at least engine 3 is selected)

Alt Gr-Q (=@-key) to select engine 2 again
Power lever responds and Engine 2 runs according to power lever setting

Here it is all working correct- win32, 05/29/2010 GIT.

Whats not correct:
When Engine 2 selected- collective seems to be locked. It doesn't respond. Only when I select engine 1 or all both with ~-key.

When I shortened the nasal-file, I must have missed something. I didn't found out yet what.
It is the second time that I hear that Linux behaves different regarding Nasal :|
Help appreciated.

Well, the start procedure described is mostly made by the FADEC in Ec135. There is a manual start procedure available, but ignition is automatically. The pilot can adjust the power in case of FADEC-failure or for training by switching to manual engine controll and using the twistgrip on the collective. Something I really want to have- I'm on it but may need maybe a bit help.
.
Up, up and away
User avatar
HHS
 
Posts: 3625
Joined: Thu Jul 19, 2007 9:09 am
Version: GIT

PreviousNext

Return to Helicopter

Who is online

Users browsing this forum: No registered users and 1 guest