Jump to content
The simFlight Network Forums

Axis Slope Calculation Problem


Recommended Posts

I use axis slopes extensively to tweak the feel of my setup. However, I noticed that when slopes are being applied on the negative side of an axis, the calculations seems to be off, and cause "jumps".

On the positive side, as the axis values increase, the slope output increases as well with no issues.

On the negative side, as the axis values decrease, the slope output decreases, but then suddenly increases then continues to decrease then increases etc.

It's almost as if these "incorrect" outputs are happening on the interpolation boundaries.

Watching the values in the GUI, the raw negative input values do not fluctuate, but negative output values do.

Below are some output samples on the aileron axis with slope 2 (the issue also manifests itself on the elevator with slope 1).

I also posted a video (smooth movement to left, jumpy to the right):

Notice the jumps as you go through the numbers, they decrease, then you'll have an increase, then a continued decrease and so on.

   357929 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= -164 (0xffffff5c) AXIS_AILERONS_SET
   358023 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= -768 (0xfffffd00) AXIS_AILERONS_SET
   358054 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= -1280 (0xfffffb00) AXIS_AILERONS_SET
   358116 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= -1792 (0xfffff900) AXIS_AILERONS_SET
   358179 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= -2140 (0xfffff7a4) AXIS_AILERONS_SET
   358241 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= -2560 (0xfffff600) AXIS_AILERONS_SET
   358303 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= -2656 (0xfffff5a0) AXIS_AILERONS_SET
   358366 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= -2910 (0xfffff4a2) AXIS_AILERONS_SET
   358428 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= -3141 (0xfffff3bb) AXIS_AILERONS_SET
   358506 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= -3328 (0xfffff300) AXIS_AILERONS_SET
   358569 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= -3479 (0xfffff269) AXIS_AILERONS_SET
   358631 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= -3329 (0xfffff2ff) AXIS_AILERONS_SET
   358693 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= -3727 (0xfffff171) AXIS_AILERONS_SET
   358756 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= -3619 (0xfffff1dd) AXIS_AILERONS_SET
   358818 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= -4009 (0xfffff057) AXIS_AILERONS_SET
   358881 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= -3876 (0xfffff0dc) AXIS_AILERONS_SET
   358943 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= -4096 (0xfffff000) AXIS_AILERONS_SET
   359021 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= -4326 (0xffffef1a) AXIS_AILERONS_SET
   359052 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= -4215 (0xffffef89) AXIS_AILERONS_SET
   359115 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= -4098 (0xffffeffe) AXIS_AILERONS_SET
   359177 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= -4516 (0xffffee5c) AXIS_AILERONS_SET
   359239 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= -4413 (0xffffeec3) AXIS_AILERONS_SET
   359302 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= -4827 (0xffffed25) AXIS_AILERONS_SET
   359364 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= -4705 (0xffffed9f) AXIS_AILERONS_SET
   359442 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= -4615 (0xffffedf9) AXIS_AILERONS_SET
   359505 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= -5042 (0xffffec4e) AXIS_AILERONS_SET
   359567 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= -4941 (0xffffecb3) AXIS_AILERONS_SET
   359629 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= -4874 (0xffffecf6) AXIS_AILERONS_SET
   359692 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= -5315 (0xffffeb3d) AXIS_AILERONS_SET
   359754 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= -5233 (0xffffeb8f) AXIS_AILERONS_SET
   359817 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= -5173 (0xffffebcb) AXIS_AILERONS_SET
   359879 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= -5376 (0xffffeb00) AXIS_AILERONS_SET
   360238 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= -5597 (0xffffea23) AXIS_AILERONS_SET
   360300 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= -5533 (0xffffea63) AXIS_AILERONS_SET
   360378 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= -5378 (0xffffeafe) AXIS_AILERONS_SET

On the positive side of the axis, no such aberration exists:


   368989 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= 33 (0x00000021) AXIS_AILERONS_SET
   369052 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= 251 (0x000000fb) AXIS_AILERONS_SET
   369114 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= 256 (0x00000100) AXIS_AILERONS_SET
   449892 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= 467 (0x000001d3) AXIS_AILERONS_SET
   449954 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= 324 (0x00000144) AXIS_AILERONS_SET
   450016 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= 524 (0x0000020c) AXIS_AILERONS_SET
   450094 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= 699 (0x000002bb) AXIS_AILERONS_SET
   450157 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= 768 (0x00000300) AXIS_AILERONS_SET
   450235 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= 967 (0x000003c7) AXIS_AILERONS_SET
   450266 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= 1124 (0x00000464) AXIS_AILERONS_SET
   450328 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= 1280 (0x00000500) AXIS_AILERONS_SET
   450391 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= 1297 (0x00000511) AXIS_AILERONS_SET
   450453 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= 1562 (0x0000061a) AXIS_AILERONS_SET
   450531 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= 1792 (0x00000700) AXIS_AILERONS_SET
   450594 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= 1919 (0x0000077f) AXIS_AILERONS_SET
   450656 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= 2314 (0x0000090a) AXIS_AILERONS_SET
   450718 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= 2560 (0x00000a00) AXIS_AILERONS_SET
   450781 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= 2679 (0x00000a77) AXIS_AILERONS_SET
   450843 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= 2961 (0x00000b91) AXIS_AILERONS_SET
   450906 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= 3219 (0x00000c93) AXIS_AILERONS_SET
   450968 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= 3328 (0x00000d00) AXIS_AILERONS_SET
   451046 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= 3370 (0x00000d2a) AXIS_AILERONS_SET
   451077 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= 3472 (0x00000d90) AXIS_AILERONS_SET
   451140 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= 3606 (0x00000e16) AXIS_AILERONS_SET
   451202 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= 3731 (0x00000e93) AXIS_AILERONS_SET
   451264 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= 3842 (0x00000f02) AXIS_AILERONS_SET
   451327 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= 3905 (0x00000f41) AXIS_AILERONS_SET
   451389 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= 3956 (0x00000f74) AXIS_AILERONS_SET
   451467 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= 4027 (0x00000fbb) AXIS_AILERONS_SET
   451530 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= 4094 (0x00000ffe) AXIS_AILERONS_SET
   451592 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= 4096 (0x00001000) AXIS_AILERONS_SET
   451654 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= 4151 (0x00001037) AXIS_AILERONS_SET
   451717 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= 4320 (0x000010e0) AXIS_AILERONS_SET
   451779 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= 4573 (0x000011dd) AXIS_AILERONS_SET
   451842 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= 4846 (0x000012ee) AXIS_AILERONS_SET
   451904 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= 5146 (0x0000141a) AXIS_AILERONS_SET
   451982 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= 5376 (0x00001500) AXIS_AILERONS_SET
   452013 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= 5416 (0x00001528) AXIS_AILERONS_SET
   452076 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= 5642 (0x0000160a) AXIS_AILERONS_SET
   452138 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= 5944 (0x00001738) AXIS_AILERONS_SET
   452200 ***  AXIS: Cntrl= 65763 (0x000100e3), Param= 6262 (0x00001876) AXIS_AILERONS_SET

Link to comment
Share on other sites

I use axis slopes extensively to tweak the feel of my setup. However, I noticed that when slopes are being applied on the negative side of an axis, the calculations seems to be off, and cause "jumps".

Sorry, I always need FSUIPC version number, and in this case also please paste in your INI file Axes and JoystickCalibration sections.

Pete

Link to comment
Share on other sites

Sorry, I always need FSUIPC version number, and in this case also please paste in your INI file Axes and JoystickCalibration sections.

Pete

FSUIPC version is 4.711.

There is no "Axis" section since none of the axes are controlled by FSUIPC.

The "Joystick Calibration" section is below:

[JoystickCalibration]
AllowSuppressForPFCquad=Yes
ExcludeThrottleSet=Yes
ExcludeMixtureSet=Yes
ExcludePropPitchSet=Yes
SepRevsJetsOnly=No
ApplyHeloTrim=No
UseAxisControlsForNRZ=No
FlapsSetControl=0
FlapDetents=No
MaxThrottleForReverser=256
SteeringTillerControl=0
MaxSteerSpeed=60
Aileron=-16192,0,16,16192/8
Elevator=-15680,256,16,16192/8
Rudder=-12288,0,16,12288/8
LeftBrake=-16192,20480
RightBrake=-16192,20480
Throttle1=-16192,0,0,16192/40
Throttle2=-16192,0,0,16192/40
Mixture1=-16192,0,0,16192/40
Mixture2=-16192,0,0,16192/40
PropPitch1=-16192,0,0,16192/40
PropPitch2=-16192,0,0,16192/40
SlopeRudder=3
SlopeRightBrake=4
SlopeLeftBrake=4
SlopeAileron=2
SlopeElevator=1

Link to comment
Share on other sites

The "Joystick Calibration" section is below:

Okay, from these:

Aileron=-16192,0,16,16192/8
Elevator=-15680,256,16,16192/8
Rudder=-12288,0,16,12288/8
Throttle1=-16192,0,0,16192/40
Throttle2=-16192,0,0,16192/40
Mixture1=-16192,0,0,16192/40
Mixture2=-16192,0,0,16192/40
PropPitch1=-16192,0,0,16192/40
PropPitch2=-16192,0,0,16192/40

I cann see you are setting the Filter option on all of those axes. why? That is drastic. The filter facility was introduced to deal with bad power causing noisy interference on axes. Do you have very dirty controls or bad power supplies? Filtering involves sampling incoming values and attempting to smooth sudden changes out. To do so it lags behing by at least three readings.

I'm not sure why this has the effect you show, and especially only on the negative parts of the ranges -- I will certainly have a look at that. The slope computations are completely symmetrical, so I can only assume it is the delay which is causing the readings to somehow get out of order in FS's message queue.

Please try unchecking "Filter" on every axis, and please do tell me why you enabled it.

I think I shall make the filter option only shown if you change an INI file option before starting FS.

Regards

Pete

Link to comment
Share on other sites

Okay, from these:

Aileron=-16192,0,16,16192/8
Elevator=-15680,256,16,16192/8
Rudder=-12288,0,16,12288/8
Throttle1=-16192,0,0,16192/40
Throttle2=-16192,0,0,16192/40
Mixture1=-16192,0,0,16192/40
Mixture2=-16192,0,0,16192/40
PropPitch1=-16192,0,0,16192/40
PropPitch2=-16192,0,0,16192/40

I cann see you are setting the Filter option on all of those axes. why? That is drastic. The filter facility was introduced to deal with bad power causing noisy interference on axes. Do you have very dirty controls or bad power supplies? Filtering involves sampling incoming values and attempting to smooth sudden changes out. To do so it lags behing by at least three readings.

I'm not sure why this has the effect you show, and especially only on the negative parts of the ranges -- I will certainly have a look at that. The slope computations are completely symmetrical, so I can only assume it is the delay which is causing the readings to somehow get out of order in FS's message queue.

Please try unchecking "Filter" on every axis, and please do tell me why you enabled it.

I think I shall make the filter option only shown if you change an INI file option before starting FS.

Regards

Pete

I enabled Filter when I first noticed this behavior and thought it was noise related. Then, when looking into it in more detail, I noticed the odd output.

In either case, with Filter disabled, same result.

I would think the slope computation would be symmetrical, but the fact that it's only on the negative side and seems to jump in "steps", hints at the boundaries of a look-up table.

Link to comment
Share on other sites

In either case, with Filter disabled, same result.

Okay. At least that simplifies the investigation a lot -- the filtering ins a bit complex.

I would think the slope computation would be symmetrical, but the fact that it's only on the negative side and seems to jump in "steps", hints at the boundaries of a look-up table.

Yes. I'll check it later today.

Odd that no one has reported this before. It must have been like this since slopes were added six years ago (version 3.50 in August 2005)!

Thanks for picking this up.

Pete

Link to comment
Share on other sites

Okay. At least that simplifies the investigation a lot -- the filtering ins a bit complex.

Yes. I'll check it later today.

Odd that no one has reported this before. It must have been like this since slopes were added six years ago (version 3.50 in August 2005)!

Thanks for picking this up.

Pete

No one noticed the slopes missing from the brakes either. :) Oh, and another observation that goes along with this...

When initially moving the yoke off-center (off 0), going to the positive side is fine, but going to the negative side initially causes the sloped output to rise to the positive side before going negative.

It's likely related to this jump effect.

Link to comment
Share on other sites

When initially moving the yoke off-center (off 0), going to the positive side is fine, but going to the negative side initially causes the sloped output to rise to the positive side before going negative.

It's likely related to this jump effect.

Possibly.

I think I've fixed it. It was a case of too much code, not something missing. i had a place where I needed a remainder from a division, and somehow I thought that if the value was negative I needed to make it positive first.. Turns out I should simply ignore negatives and treat them just the same as positives! A sort of odd reflection on life as a whole, really .. take the bad with the good ;-)

Try

FSUIPC 4.718

or

FSUIPC 3.997j

Regards

Pete

Link to comment
Share on other sites

Possibly.

I think I've fixed it. It was a case of too much code, not something missing. i had a place where I needed a remainder from a division, and somehow I thought that if the value was negative I needed to make it positive first.. Turns out I should simply ignore negatives and treat them just the same as positives! A sort of odd reflection on life as a whole, really .. take the bad with the good ;-)

Try

FSUIPC 4.718

or

FSUIPC 3.997j

Regards

Pete

It's fixed. Thanks!

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use. Guidelines Privacy Policy We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.