1. For downloading SimTools plugins you need a Download Package. Get it with virtual coins that you receive for forum activity or Buy Download Package - We have a zero Spam tolerance so read our forum rules first.

    Buy Now a Download Plan!
  2. Do not try to cheat our system and do not post an unnecessary amount of useless posts only to earn credits here. We have a zero spam tolerance policy and this will cause a ban of your user account. Otherwise we wish you a pleasant stay here! Read the forum rules
  3. We have a few rules which you need to read and accept before posting anything here! Following these rules will keep the forum clean and your stay pleasant. Do not follow these rules can lead to permanent exclusion from this website: Read the forum rules.
    Are you a company? Read our company rules

Status of MSFS2020 motion sim?

Discussion in 'Flight Simulator 2020 - FS2020' started by Flying Pete, Mar 29, 2021.

  1. Flying Pete

    Flying Pete New Member

    Joined:
    Mar 28, 2021
    Messages:
    2
    Location:
    Switzerland
    Balance:
    43Coins
    Ratings:
    +0 / 0 / -0
    Hi all, I wonder what the current status is for motion simulators for MSFS2020? From what I gather, the sim does not expose the body accelerations (fictitious forces that act on the pilot), except for the SEMI BODY LOADFACTOR Y simconnect var, and it is my understanding that these are the accelerations typically used to drive a motion rig (next to custom-designed motion “effects” for specific sim events). However, despite that, there are obviously people out there who already use motion rigs with MSFS2020 (YouTube videos, posts in this forum, etc...). So, how is that done?

    I guess my question is, what is the “state of the art” for MSFs2020 motion simming? Does a solution exist for computing the correct body accelerations? Or are all current methods/plugins doing something else that is plausible but not quite correct (like driving the rig using pitch/bank angles?

    I’m asking because I’m considering building my own motion rig for MSFS2020, and I might be able to contribute to the body acceleration problem mentioned above. But if someone has already solved it, I won’t have to bother :)
  2. Ads Master

    Ads Master

    Balance:
    Coins
    Ratings:
    +0 / 0 / -0
  3. noorbeast

    noorbeast VR Tassie Devil Staff Member Moderator Race Director

    Joined:
    Jul 13, 2014
    Messages:
    16,460
    Occupation:
    Innovative tech specialist for NGOs
    Location:
    St Helens, Tasmania, Australia
    Balance:
    119,803Coins
    Ratings:
    +9,531 / 47 / -2
    My Motion Simulator:
    3DOF, DC motor, JRK
  4. Flying Pete

    Flying Pete New Member

    Joined:
    Mar 28, 2021
    Messages:
    2
    Location:
    Switzerland
    Balance:
    43Coins
    Ratings:
    +0 / 0 / -0
    Thanks noorbeast! So there are at least two implementations out there that use MSFS2020 as a motion source - SimTools and FlyPT Mover. I guess I wonder to what extend those are computing the accelerations - as the body accelerations are not directly exposed by the sim and some math is required to squeeze them out.

    Understood, a big part of motion sim is about fooling the brain. I can imagine how this is very effective for sim driving. The use case I'm interested in is primarily General Aviation simming, so I'm e.g. interested in feeling sideslip to practice coordinated turns and the like.

    Anyway, as mentioned, I might be able to contribute. I'm at the point where I think I can compute the correct body accelerations, taking into account the pilot position (for centrifugal/Euler forces).

    Example below: "semibody_loadfactor" are the SEMI BODY LOADFACTOR X/Y/Z values reported by the sim (note that only the Y component is non-zero). "semibody_loadfactor_est" is my own estimate (in plane coordinates, so the Y component is negative here). The Y component I'm computing is very close to the "SEMI BODY LOADFACTOR Y" variable reported by the sim, which gives me some confidence that this is not completely wrong :) Plus I can of course also compute the missing X/Z components now.


    t=1043.696 -> semibody_loadfactor=[0.00000000 1.83130100 0.00000000], semibody_loadfactor_est=[-0.02272413 -1.83147356 -0.18443357], err_y=-0.0002 g
    t=1044.699 -> semibody_loadfactor=[ 0.00000000 -1.00098500 0.00000000], semibody_loadfactor_est=[ 0.02954278 1.00079670 -0.15338151], err_y=-0.0002 g
    t=1045.691 -> semibody_loadfactor=[ 0.00000000 -1.38689400 0.00000000], semibody_loadfactor_est=[ 0.05502683 1.38695602 -0.18248276], err_y=0.0001 g
    t=1046.713 -> semibody_loadfactor=[0.00000000 1.12595500 0.00000000], semibody_loadfactor_est=[ 0.00106940 -1.12612849 -0.10002394], err_y=-0.0002 g
    t=1047.710 -> semibody_loadfactor=[0.00000000 1.22905800 0.00000000], semibody_loadfactor_est=[ 0.04903777 -1.22900492 -0.06469615], err_y=0.0001 g
    t=1048.713 -> semibody_loadfactor=[0.00000000 3.77519700 0.00000000], semibody_loadfactor_est=[ 0.13870698 -3.77459575 -0.33367294], err_y=0.0006 g
    t=1049.694 -> semibody_loadfactor=[0.00000000 4.17247500 0.00000000], semibody_loadfactor_est=[ 0.00358798 -4.17176577 -0.41141225], err_y=0.0007 g
    t=1050.712 -> semibody_loadfactor=[0.00000000 3.25886300 0.00000000], semibody_loadfactor_est=[-0.13755630 -3.25763289 -0.39582834], err_y=0.0012 g
    t=1051.723 -> semibody_loadfactor=[0.00000000 2.14277600 0.00000000], semibody_loadfactor_est=[-0.05264886 -2.14287610 -0.22640749], err_y=-0.0001 g
    t=1052.711 -> semibody_loadfactor=[0.00000000 0.99809060 0.00000000], semibody_loadfactor_est=[-0.01989466 -0.99813111 -0.13671711], err_y=-0.0000 g
    t=1053.692 -> semibody_loadfactor=[0.00000000 0.66236280 0.00000000], semibody_loadfactor_est=[-0.01226735 -0.66234720 -0.12235444], err_y=0.0000 g
    t=1054.692 -> semibody_loadfactor=[0.00000000 0.04182169 0.00000000], semibody_loadfactor_est=[ 0.02752152 -0.04215217 -0.12465381], err_y=-0.0003 g
    t=1055.693 -> semibody_loadfactor=[ 0.00000000 -0.85592540 0.00000000], semibody_loadfactor_est=[ 0.08142580 0.85564863 -0.19490917], err_y=-0.0003 g
    t=1056.714 -> semibody_loadfactor=[ 0.00000000 -0.81661520 0.00000000], semibody_loadfactor_est=[-0.00145832 0.81662304 -0.15556646], err_y=0.0000 g
    t=1057.705 -> semibody_loadfactor=[ 0.00000000 -0.95106510 0.00000000], semibody_loadfactor_est=[ 0.04944117 0.95125044 -0.14188008], err_y=0.0002 g
    t=1058.705 -> semibody_loadfactor=[0.00000000 0.89396260 0.00000000], semibody_loadfactor_est=[ 0.05180251 -0.89391178 -0.09913206], err_y=0.0001 g
    t=1059.711 -> semibody_loadfactor=[0.00000000 1.16444800 0.00000000], semibody_loadfactor_est=[ 0.05558917 -1.16425167 -0.06149452], err_y=0.0002 g
    t=1060.715 -> semibody_loadfactor=[0.00000000 2.74935200 0.00000000], semibody_loadfactor_est=[ 0.13387309 -2.74922949 -0.11719480], err_y=0.0001 g
    t=1061.701 -> semibody_loadfactor=[0.00000000 4.53434900 0.00000000], semibody_loadfactor_est=[ 0.02004020 -4.53434897 -0.35358629], err_y=0.0000 g
    t=1062.718 -> semibody_loadfactor=[0.00000000 3.90398100 0.00000000], semibody_loadfactor_est=[-0.02992137 -3.90415520 -0.29671904], err_y=-0.0002 g
    t=1063.706 -> semibody_loadfactor=[0.00000000 3.21787000 0.00000000], semibody_loadfactor_est=[ 0.09780344 -3.21797807 -0.28120290], err_y=-0.0001 g
    t=1064.710 -> semibody_loadfactor=[0.00000000 2.61069100 0.00000000], semibody_loadfactor_est=[ 0.16053451 -2.61046104 -0.26888656], err_y=0.0002 g
    t=1065.715 -> semibody_loadfactor=[0.00000000 1.65480300 0.00000000], semibody_loadfactor_est=[ 0.14898743 -1.65515227 -0.25845191], err_y=-0.0003 g
    t=1066.701 -> semibody_loadfactor=[0.00000000 0.32345740 0.00000000], semibody_loadfactor_est=[-0.01742456 -0.32369263 -0.15159715], err_y=-0.0002 g
    t=1067.707 -> semibody_loadfactor=[ 0.00000000 -0.23114490 0.00000000], semibody_loadfactor_est=[ 0.02740930 0.23112254 -0.17752909], err_y=-0.0000 g
    t=1068.710 -> semibody_loadfactor=[ 0.00000000 -0.18990390 0.00000000], semibody_loadfactor_est=[ 0.07321832 0.18903251 -0.18695729], err_y=-0.0009 g
    t=1069.707 -> semibody_loadfactor=[0.00000000 0.05518266 0.00000000], semibody_loadfactor_est=[ 0.13849691 -0.05637161 -0.17569825], err_y=-0.0012 g
    t=1070.717 -> semibody_loadfactor=[0.00000000 0.09533611 0.00000000], semibody_loadfactor_est=[ 0.13460168 -0.09731780 -0.18710839], err_y=-0.0020 g
    t=1071.720 -> semibody_loadfactor=[0.00000000 0.48221050 0.00000000], semibody_loadfactor_est=[-0.05786222 -0.48213796 -0.18629573], err_y=0.0001 g
    t=1072.716 -> semibody_loadfactor=[0.00000000 1.22403500 0.00000000], semibody_loadfactor_est=[ 0.04752964 -1.22361885 -0.24810334], err_y=0.0004 g
    t=1073.716 -> semibody_loadfactor=[0.00000000 1.73197300 0.00000000], semibody_loadfactor_est=[ 0.01402462 -1.73166619 -0.27663747], err_y=0.0003 g
    t=1074.715 -> semibody_loadfactor=[0.00000000 1.45904000 0.00000000], semibody_loadfactor_est=[ 0.03561881 -1.45935502 -0.17555484], err_y=-0.0003 g
    t=1075.696 -> semibody_loadfactor=[0.00000000 1.04679600 0.00000000], semibody_loadfactor_est=[-0.01023302 -1.04679422 -0.10994053], err_y=0.0000 g
    t=1076.700 -> semibody_loadfactor=[0.00000000 1.01225100 0.00000000], semibody_loadfactor_est=[ 0.00176819 -1.01228496 -0.08965345], err_y=-0.0000 g
    t=1077.720 -> semibody_loadfactor=[0.00000000 2.36566900 0.00000000], semibody_loadfactor_est=[ 0.00666877 -2.36582708 -0.17704333], err_y=-0.0002 g
    t=1078.714 -> semibody_loadfactor=[0.00000000 1.43001600 0.00000000], semibody_loadfactor_est=[ 0.00583111 -1.43023561 -0.08185946], err_y=-0.0002 g
    t=1079.696 -> semibody_loadfactor=[0.00000000 1.04180900 0.00000000], semibody_loadfactor_est=[ 0.00015627 -1.04182983 -0.05222627], err_y=-0.0000 g