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

DCS g-seat plugin.

Discussion in 'Digital Combat Simulators (DCS)' started by BrassEm, Feb 9, 2018.

  1. BrassEm

    BrassEm G-Seat + SFX100 Builder

    Joined:
    Apr 15, 2015
    Messages:
    128
    Location:
    NE of YMML
    Balance:
    1,031Coins
    Ratings:
    +53 / 0 / -0
    My Motion Simulator:
    DC motor, AC motor, 4DOF, 6DOF
    G'day,

    This plugin works for me and my g-seat setup. I've posted it so you can have a look and adapt it to your seat as needed. It is supplied "as is". I hope it works for you. If you do decide to try it, please make backups/notes before installing or changing anything so that you can recover your previous setup.

    The plugin.zip file installs how you normaly would do it, like any other plugin.

    22/11/2019
    I have included the version 0.06b plugin for download. There are no alterations to the DCS outputs as passed to the plugin, and it is fed straight out to SIMTOOLS.

    The plugin outputs are Roll, Pitch, Yaw, Heave, Surge, Sway, gHeave, gSway, gSurge.

    For my setup I have used the following; (You may use all the DOFS on the (a) axis.)
    SFX-100 as (a) axis
    DOFS 1-6
    Heave, Roll, Pitch, blank, blank, Surge

    g-Seat-II as (b) axis
    DOFS 1-6
    Roll, blank, Extra1, blank, Extra2, Extra3

    20/10/2020
    Below are my current working settings as a guide. Export.Lua is configured for my system. You will need to adapt it to your setup. The max/min config file will also need to be manually edited. Obviously set for you system travel.

    GameEngine20201017.PNG

    SFX-100 - Boundary set to DOF value
    GameEngine20201017_SFX100_DOF123.PNG

    GameEngine20201017_SFX100_DOF456.PNG

    g-Seat - Boundary set to 95
    GameEngine20201017_gSeatII_DOF123.PNG

    GameEngine20201017_gSeatII_DOF456.PNG

    Explort.lua
    Code:
    -------------------------------------------------------------------------------------------------------------------------------
    -- DCS Export Functions for use with XSimulator SimTools motion control software
    -- For SXF-100 Motion System and g-Seat-II Motion System.
    -- Based on original Export.lua from value1.
    -- Version 0.07
    -- Author: BrassEm
    -- 17/10/2020
    -- Take telemetry from DCS and converts it to suitable data for Simtools.
    -- Many thanks to [FSF]Ian, Frusheen(RiftFlyer), Asticher(vJaBoG32), Dirty, Andrey Filin from ED, FlyPT,
    -- yobuddy and value1 from XSimulator.
    -- It is assumed at this time that the g seat command is coming raw directly from the "accelerometers" in the aircraft.
    -- SFX-100 forces are Roll, Pitch, Heave and Surge.
    -- g-Seat-II forces in flight are Heave, Surge, Sway and Roll.
    -- Ground lurching is added in to augment ground handling.
    -- Testing: pitch_lurch, sway_lurch, yaw_lurch, roll_lurch, heave_lurch. Remove lurches not required.
    -- Added output delay on start up to allow aircraft to settle for 4 seconds and avoid violent lurching.
    -- Added user1, user2, user3 variables for output which can be set and output by the user as needed.
    
    --/*
    --shake level amplitude for head simulation ,
    --prototype for ed_fm_get_shake_amplitude
    --*/
    --typedef double (*PFN_GET_SHAKE_AMPLITUDE) ();
    
    -- From wHumanCustomPhysicsAPI.h
    --Pointer to function of force source in body axis
    --x,y,z              - force components in body coordinate system
    --pos_x,pos_y,pos_z - position of force source in body coordinate system
    
    --body coordinate system system is always X - positive forward ,
    --                                          Y - positive up,
    --                                          Z - positive to right
    
    -------------------------------------------------------------------------------------------------------------------------------
    
    -- Aircraft Lua Names and Observations.
    -- --------------------------------
    -- C-101EB
    -- F-15C
    -- F-5E-3
    -- F-86F
    -- FA-18C_hornet        -- Ground movement sensitivity. Heave noisy.
    -- Hawk
    -- L-39C
    -- L-39ZA
    -- M-2000C
    -- MiG-15bis
    -- MiG-21Bis
    -- MiG-29A
    -- MiG-29S
    -- Su-25
    -- Su-25T
    -- Su-27
    -- Su-33
    -- J-11A
    -- AV8BNA
    -- A-10A
    -- A-10C
    -- AJS37
    -- Bf-109K-4
    -- FW-190D9
    -- P-47D-30
    -- P-51D
    -- P-51D-30-NA
    -- TF-51D
    -- SpitfireLFMkIX
    -- SpitfireLFMkIXCW
    -- UH-1H
    -- Christen Eagle II
    
    
    -- Globals declared here
    PI = math.pi                                            -- 3.1415926535897932384626433832795028841971693993751
    HPI = PI/2                                                -- Radians in 90°
    PI2 = PI*2                                                -- Radians in 360°
    r2d = 180/PI                                            -- Radians to Degrees
    told = 0.0                                                -- Last Time function called
    ms2kts = 1.94384                                        -- Meters per second to Knots
    ms2kms = 3.6                                            -- Meters per second to KM/H
    -- Motion variables
    lurch_scalar = 1.0                                        --1.0  -- Lurch on ground. Overall scalar. Not used?
    pitch_scalar = 3.5                                       --3.5  -- Pitch on ground. SFX-100 - Was 5 too harsh 20200209
    sway_scalar = 3.0                                           --3.0  -- Sway on ground. G-Seat Was 3 a bit more
    yaw_scalar = 1                                               --1.0  -- Yaw on ground. G-seat
    roll_scalar = 1.5                                          --1.5  -- Roll on ground. SFX-100
    heave_scalar = 1                                           --1.25 -- Heave on ground. SFX-100, 2.0
    surge_scalar = 3.5                                           --1.0  -- Surge on ground. G-seat
    
    Myfunction =
    
    {
    Start=function(self)
    
        -- Output file to check values. Usually created and found in directory C:\Program Files\Eagle Dynamics\"Your DCS World Directory name"
        default_output_file = io.open("./Export.log", "w")
       
        package.path = package.path..";.\\LuaSocket\\?.lua"
        package.cpath = package.cpath..";.\\LuaSocket\\?.dll"
        socket = require("socket")
    
        my_init = socket.protect(function()
            -- export telemetry to SimTools
            -- Setup comms for export telemetry to SimTools. Set host1 to your second PC IP.
            -- host1 = host1 or "19.190.26.5" -- Set to 127.0.0.1 for single PC or xxx.xxx.xxx.xxx for two PC's (Set to your 2nd PC IP)
            host1 = "19.190.26.5"     -- Mine in this case. Change it to yours.
            port1 = "41230"          
            c = socket.udp ( )
            c:settimeout ( 0 )
            c:setpeername ( host1, port1 )
    
        end)
        my_init()
    end,
    
    
    AfterNextFrame=function(self)
    
        local t = LoGetModelTime()
        local timedif = 0.0
       
        timedif = t-told  -- Get frame time duration
    
        -- Aircraft name
        local myInfo = LoGetSelfData()
        local CurrentAircraft = myInfo.Name
        -- Add additional telemetry values for testing purposes
        local altRad = LoGetAltitudeAboveGroundLevel()
        local TAS = LoGetTrueAirSpeed()                      -- (args - 0, results - 1 (m/s))
       
        -- Head Shake Test
        --local HShake = ed_fm_get_shake_amplitude()
    
        -- g Forces
        local accel = LoGetAccelerationUnits()              -- (args - 0, results - table {x = NX,y = NY,z = NZ} 1 (G))
       
        -- From Frusheen
        local vel_v = LoGetVectorVelocity()                 -- (1 m/s), vel_v.x, vel_v.y, vel_v.z
        local vel_r = LoGetAngularVelocity()                 -- (radians per second), vel_r.x, vel_r.y, vel_r.z    = HUD Velocity Vector
    
        -- From DCS_ControlAPI.html
        local AoA = LoGetAngleOfAttack()                    -- (radians)
        local AoSS = LoGetAngleOfSideSlip()                    -- (radians)
    
        -- From FlyPT
        local GearMid = LoGetAircraftDrawArgumentValue(1)   -- Front/Rear landing gear (0 to 1)
        local GearTurn = LoGetAircraftDrawArgumentValue(2)  -- Turning landing gear (0 to 1)
        local GearLeft = LoGetAircraftDrawArgumentValue(4)  -- Left landing gear (0 to 1)
        local GearRight = LoGetAircraftDrawArgumentValue(6) -- Right landing gear (0 to 1)  
       
        -- Output to SimTools
        local yaw = vel_r.y                                    -- Pitch > #2 in Sim Tools      - Tuning Center Output. beta plugin.
        local roll = vel_r.x                                -- Roll > #1 in Sim Tools      - Tuning Center Output. gamma plugin.
        local pitch = vel_r.z                                -- Yaw > #4 in Sim Tools      - Tuning Center Output. alpha plugin.
        local surge = accel.x                                -- Surge > #6 in Sim Tools      - Tuning Center Output. Surge plugin .
        local heave = accel.y                                -- Heave > #3 in Sim Tools      - Tuning Center Output. Heave plugin.
        local sway = accel.z                                -- Sway > #5 in Sim Tools      - Tuning Center Output. Sway plugin.
        local user1 = accel.y-1                                -- Extra 1 > #7 in Sim Tools - Tuning Center Output. User designated output1.
        local user2 = 0                                        -- Extra 2 > #8 in Sim Tools - Tuning Center Output. User designated output2.
        local user3 = 0                                     -- Extra 3 > #9 in Sim Tools - Tuning Center Output. User designated output3.
    
        -- Convert Rates from radians into degrees.
        roll = roll*r2d
        pitch = pitch*r2d
        yaw = yaw*r2d
           
        -- Normalise Heave
        heave = heave-1  
    
        -- Ground Lurching test values.
        roll_lurch = roll
        pitch_lurch = pitch
        heave_lurch = heave
        yaw_lurch = yaw
        sway_lurch = sway
        surge_lurch = surge
    
       
        -- SimTools FORCES
        -- ===============
        -- Roll
        -- Pitch
        -- Heave
        -- Yaw
        -- Sway
        -- Surge
        -- Extra1 - user1 - User designated output1 - gHeave
        -- Extra2 - user2 - User designated output2 - gSway
        -- Extra3 - user3 - User designated output3 - gSurge
    
        -- Add Aircraft lurching while on the ground.
        -- PROP aircraft have violent high g lurching.
        -- Test for special case aircraft then else the main aircraft.
        if CurrentAircraft == "SpitfireLFMkIX" then
                pitch_scalar = 0.2
        elseif CurrentAircraft == "SpitfireLFMkIXCW" then
                pitch_scalar = 0.2
        elseif CurrentAircraft == "P-51D" then
                pitch_scalar = 0.2
        elseif CurrentAircraft == "P-51D-30-NA" then
                pitch_scalar = 0.2
        elseif CurrentAircraft == "TF-51D" then
                pitch_scalar = 0.2
        elseif CurrentAircraft == "Bf-109K-4" then
                pitch_scalar = 0.1
        elseif CurrentAircraft == "FW-190D9" then
                pitch_scalar = 0.2
        elseif CurrentAircraft == "Yak-52" then
                pitch_scalar = 0.2
        elseif CurrentAircraft == "Christen Eagle II" then
                pitch_scalar = 0.2
        else
                -- Do something here
        end
       
        -- Add modified Lurch Code Here...
        -- ===============================
        -- Lurch precedence: Pitch, Sway, Surge, Yaw, Roll, Heave.
        if (GearMid+GearLeft+GearRight) > 0 then
            -- Do On Ground lurch calculations
                pitch_lurch = pitch_lurch*pitch_scalar
                if TAS <= 50 then                             -- High amplification needed to replicate lurching, stop when rolling. 30 to 50 for super carrier launch.
                    pitch = pitch_lurch/((TAS+1)/4)         -- /3 amplified pitch while on ground
                else
                    pitch_lurch = 0                            -- no pitch lurch on ground above TAS <= 15 m/s (58.3 knots) Pitch = Pitch
                end
                if TAS <= 20 then                           -- Increase gSurge at very slow speeds to emphasise lurch.
                    user3 = surge_lurch*(1+((surge_scalar-1)*(1-(TAS/20)))) -- If changing range make sure TAS limits go from 20,20 to ie 15,15    Probably even less. 8?      
                else
                    user3 = surge
                end
                --surge_lurch = surge_lurch*surge_scalar
                --surge = surge_lurch
                --sway_lurch = sway_lurch*sway_scalar
                --sway = sway_lurch
                yaw_lurch = yaw_lurch*yaw_scalar
                yaw = yaw_lurch
                roll = roll_lurch*(roll_scalar*1.5) -- * 2, 4, back to 1.5
                roll = roll_lurch
                heave_lurch = heave_lurch*(heave_scalar*1) -- * 1.5, 3,
                heave = heave_lurch
                user1 = heave -- gSeat gHeave
    
            else
            -- Null out Ground Lurch if in Air. Mainly for output testing.
            pitch_lurch = 0
            --surge_lurch = 0
            --sway_lurch = 0
            yaw_lurch = 0
            roll_lurch = 0
            heave_lurch = 0
            roll = roll*0.8 -- Roll a little harsh in the air. Reduce by 20%
        end
        -- Always calculated if on ground or in air.
        sway_lurch = sway_lurch*sway_scalar
        sway = sway_lurch
        user2 = sway -- gSeat gSway
    
    
        TASkt=TAS*ms2kts    -- TAS in Knots
    
        if t >= 4.0 then    -- Allow 4 seconds for aircraft to settle on ground after loading in before outputting motion.
        -- Output Telemetry to Export.log file for testing purposes.
        default_output_file:write(string.format("AIRCRAFT: %s t: %.3f td: %.3f ALTRAD: %.2f TAS: %.1f TASkt: %.1f PITCH: %.2f ROLL: %.2f YAW: %.2f SURGE: %.3f HEAVE: %.3f SWAY: %.3f user1: %.2f user2: %.3f user3: %.3f PITCH_LURCH: %.3f SWAY_LURCH: %.3f YAW_LURCH: %.3f ROLL_LURCH: %.3f HEAVE_LURCH: %.3f SURGE_LURCH: %.3f GEARMID: %.3f GEARLEFT: %.3f GEARRIGHT: %.3f AoA: %.2f AoSS: %.2f \n", CurrentAircraft, t, timedif, altRad/10, TAS, TASkt, pitch, roll, yaw, surge, heave, sway, user1, user2, user3, pitch_lurch, sway_lurch, yaw_lurch, roll_lurch, heave_lurch, surge_lurch, GearMid, GearLeft, GearRight, AoA, AoSS))  
       
    
        my_send = socket.protect(function()
            if c then
                socket.try(c:send(string.format("%.4f; %.4f; %.4f; %.4f; %.4f; %.4f; %.4f; %.4f; %.4f;\n", pitch, roll, yaw, surge, heave, sway, user1, user2, user3)))
            end
        end)
        end
        told = t
        my_send()
    
    end,
    
    
    Stop=function(self)
        my_close = socket.protect(function()
            if c then
                c:close()
            end
        end)
        my_close()
    end
    }
    
    
    -- =============
    -- Overload
    -- =============
    
    -- Works once just before mission start.
    do
        local PrevLuaExportStart=LuaExportStart
        LuaExportStart=function()
            Myfunction:Start()
            if PrevLuaExportStart then
                PrevLuaExportStart()
            end
        end
    end
    
    -- Works just after every simulation frame.
    do
        local PrevLuaExportAfterNextFrame=LuaExportAfterNextFrame
        LuaExportAfterNextFrame=function()
            Myfunction:AfterNextFrame()
            if PrevLuaExportAfterNextFrame then
                PrevLuaExportAfterNextFrame()
            end
        end
    end
    
    -- Works once just after mission stop.
    do
        local PrevLuaExportStop=LuaExportStop
        LuaExportStop=function()
            Myfunction:Stop()
            if PrevLuaExportStop then
                PrevLuaExportStop()
            end
        end
        -- Close the output file
        if default_output_file then
            default_output_file:close()
            default_output_file = nil
        end
    end
    

    Cheers,

    Brass.

    Attached Files:

    • Like Like x 1
    • Informative Informative x 1
    • Creative Creative x 1
    Last edited: Oct 23, 2020 at 23:17
  2. Ads Master

    Ads Master

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

    BrassEm G-Seat + SFX100 Builder

    Joined:
    Apr 15, 2015
    Messages:
    128
    Location:
    NE of YMML
    Balance:
    1,031Coins
    Ratings:
    +53 / 0 / -0
    My Motion Simulator:
    DC motor, AC motor, 4DOF, 6DOF
    After more testing I found that I had broken the outputs. It appears that the slip code causes an export.lua fault that stopped non-FC3 from working. I've removed that slip code and tested on 2.5 with Caucasus and Nevada okay. I am going to have to change the lurching levels for the prop planes though as they really rumble swinging the prop.

    You will need the manually add the code to your export.lua to correct the fault until I can recompile to Version 4.

    Fixed Export.lua to be added to _v04.
    Code:
    -------------------------------------------------------------------------------------------------------------------------------
    -- DCS Export Functions for use with SimTools motion control software for g-Seat use. Based on original Export.lua from value1.
    -- Version 0.04
    -- Author: BrassEm
    -- Take telemetry from DCS and convert to suitable data for Simtools.
    -- Many thanks to [FSF]Ian, Frusheen(RiftFlyer), Asticher(vJaBoG32), Andrey Filin from ED, yobuddy and value1 from XSimulator.
    -- It is assumed at this time that the g seat command is coming directly from the "accelerometers" in the aircraft.
    -- Forces in flight are Heave, Surge, Sway and Roll.
    -- Forces on ground are Pitch, Roll and Sway.
    -------------------------------------------------------------------------------------------------------------------------------
    
    -- Globals declared here
    PI = math.pi            -- 3.1415926535897932384626433832795028841971693993751
    HPI = PI/2                -- Radians in 90°
    PI2 = PI*2                -- Radians in 360°
    r2d = 180/PI            -- Radians to Degrees
    
    Myfunction =
    
    {
    Start=function(self)
    
        -- Output file to check values.
        default_output_file = io.open("./Export.log", "w")
      
        package.path = package.path..";.\\LuaSocket\\?.lua"
        package.cpath = package.cpath..";.\\LuaSocket\\?.dll"
        socket = require("socket")
    
        my_init = socket.protect(function()
            -- export telemetry to SimTools
            -- Setup comms for export telemetry to SimTools. Set host1 to your second PC IP.
            -- host1 = host1 or "19.190.26.5" -- Set to 127.0.0.1 for single PC or xxx.xxx.xxx.xxx for two PC's (Set to your 2nd PC IP)
            host1 = "19.190.26.5"     -- Mine in this case. Change it to yours.
            port1 = "41230"          
            c = socket.udp ( )
            c:settimeout ( 0 )
            c:setpeername ( host1, port1 )
    
        end)
        my_init()
    end,
    
    
    AfterNextFrame=function(self)
    
        -- Aircraft name
        local myInfo = LoGetSelfData()
        local CurrentAircraft = myInfo.Name
        -- Add additional telemetry values for testing purposes
        local altRad = LoGetAltitudeAboveGroundLevel()
        local TAS = LoGetTrueAirSpeed()  -- (args - 0, results - 1 (m/s))
    
        -- g Forces
        local accel = LoGetAccelerationUnits()      -- (args - 0, results - 1 (g)) The g-Force.
      
        -- From Frusheen
        local vel_v = LoGetVectorVelocity() -- (1 m/s), vel_v.x, vel_v.y, vel_v.z
        local vel_r = LoGetAngularVelocity() -- (radians per second), vel_r.x, vel_r.y, vel_r.z    = HUD Velocity Vector
      
        -- Output to SimTools
        local yaw = vel_r.y        -- Pitch > #2 in Sim Tools     - Tuning Center Output. beta plugin. Sway on ground.
        local roll = vel_r.x    -- Roll > #1 in Sim Tools     - Tuning Center Output. gamma plugin. Roll on ground.
        local pitch = vel_r.z    -- Yaw > #4 in Sim Tools     - Tuning Center Output. alpha plugin. Pitch on ground.
        local surge = accel.x    -- Surge > #6 in Sim Tools     - Tuning Center Output. Surge plugin .
        local heave = accel.y    -- Heave > #3 in Sim Tools     - Tuning Center Output. Heave plugin.
        local sway = accel.z    -- Sway > #5 in Sim Tools     - Tuning Center Output. Sway plugin.
        local slip = 0            -- Extra 1 > #7 in Sim Tools - Tuning Center Output. Aircraft slip. Not used.
        local roll_lurch = 0    -- Extra 2 > #8 in Sim Tools - Tuning Center Output. Aircraft lurching while on ground in roll.
        local pitch_lurch = 0    -- Extra 3 > #9 in Sim Tools - Tuning Center Output. Aircraft lurching while on ground in pitch.
      
        -- Convert Rates from radians into degrees.
        pitch = pitch*r2d
        roll = roll*r2d
        yaw = yaw*r2d
      
        -- Normalise Heave
        heave = heave-1  
    
        -- Add Aircraft lurching while on the ground.
        if altRad <= 2.5 then
                heave = 0
                pitch_lurch = pitch
                roll_lurch = roll
                roll = roll -- pitch = pitch, roll = bump, yaw = yaw.
                sway = yaw    -- yaw better than sway-accel.z.
            else
                pitch_lurch = 0
                roll_lurch = 0
                sway = yaw
        end
    
      
        -- Output Telemetry to Export.log file for testing purposes.
            default_output_file:write(string.format("AIRCRAFT: %s ALTRAD: %.2f TAS: %.1f PITCH: %.2f ROLL: %.2f YAW: %.2f SURGE: %.3f HEAVE: %.3f SWAY: %.3f SLIP: %.2f ROLL_LURCH: %.3f PITCH_LURCH: %.3f \n", CurrentAircraft, altRad, TAS, pitch, roll, yaw, surge, heave, sway, slip, roll_lurch, pitch_lurch))  
      
    
        my_send = socket.protect(function()
            if c then
                --    socket.try(c1:send(string.format("%.3f; %.3f; %.3f; %.3f; %.3f; %.3f;\n", pitch*1000.0, bank*1000.0, yaw*1000.0, accel.x*1000.0, accel.y*1000.0, accel.z*1000.0)))
                -- Simtools pitch, roll, yaw, surge, heave, sway, extra 1, extra 2, extra3
                socket.try(c:send(string.format("%.4f; %.4f; %.4f; %.4f; %.4f; %.4f; %.4f; %.4f; %.4f;\n", pitch, roll, yaw, surge, heave, sway, slip, roll_lurch, pitch_lurch)))
    
            end
        end)
        my_send()
    
    end,
    
    
    Stop=function(self)
        my_close = socket.protect(function()
            if c then
                c:close()
            end
        end)
        my_close()
    end
    }
    
    
    -- =============
    -- Overload
    -- =============
    
    -- Works once just before mission start.
    do
        local PrevLuaExportStart=LuaExportStart
        LuaExportStart=function()
            Myfunction:Start()
            if PrevLuaExportStart then
                PrevLuaExportStart()
            end
        end
    end
    
    -- Works just after every simulation frame.
    do
        local PrevLuaExportAfterNextFrame=LuaExportAfterNextFrame
        LuaExportAfterNextFrame=function()
            Myfunction:AfterNextFrame()
            if PrevLuaExportAfterNextFrame then
                PrevLuaExportAfterNextFrame()
            end
        end
    end
    
    -- Works once just after mission stop.
    do
        local PrevLuaExportStop=LuaExportStop
        LuaExportStop=function()
            Myfunction:Stop()
            if PrevLuaExportStop then
                PrevLuaExportStop()
            end
        end
        -- Close the output file
        if default_output_file then
            default_output_file:close()
            default_output_file = nil
        end
    end
    
    • Like Like x 2
    Last edited: Aug 6, 2019
  4. Jan Havranek

    Jan Havranek New Member

    Joined:
    Sep 13, 2019
    Messages:
    13
    Balance:
    36Coins
    Ratings:
    +0 / 0 / -0
    Hi, I use your plugin on Gseat, works perfectly but I would like to do 2 dof seat. However, your plugin does not have the vectoring forces but only gforce, as described in the manual. Don't have an updated plugin version? Thanks a lot.
  5. BrassEm

    BrassEm G-Seat + SFX100 Builder

    Joined:
    Apr 15, 2015
    Messages:
    128
    Location:
    NE of YMML
    Balance:
    1,031Coins
    Ratings:
    +53 / 0 / -0
    My Motion Simulator:
    DC motor, AC motor, 4DOF, 6DOF
    G'day Jan,

    Thanks for the feedback and glad it is working for you. Do you need to have 2 DOF output as well as Gseat?
  6. Jan Havranek

    Jan Havranek New Member

    Joined:
    Sep 13, 2019
    Messages:
    13
    Balance:
    36Coins
    Ratings:
    +0 / 0 / -0
    Yes, if I make a pitch and roll only g-force on the seat, excuse me for English.
  7. Jan Havranek

    Jan Havranek New Member

    Joined:
    Sep 13, 2019
    Messages:
    13
    Balance:
    36Coins
    Ratings:
    +0 / 0 / -0
    need g forces for the gseat plus 2 more vectored pitch and roll for the 2 DOF motors, yes...exactly, Thank you for your time
  8. BrassEm

    BrassEm G-Seat + SFX100 Builder

    Joined:
    Apr 15, 2015
    Messages:
    128
    Location:
    NE of YMML
    Balance:
    1,031Coins
    Ratings:
    +53 / 0 / -0
    My Motion Simulator:
    DC motor, AC motor, 4DOF, 6DOF
    OK, will check the code to see if it is possible.
  9. Jan Havranek

    Jan Havranek New Member

    Joined:
    Sep 13, 2019
    Messages:
    13
    Balance:
    36Coins
    Ratings:
    +0 / 0 / -0
    Thank you very much
  10. BrassEm

    BrassEm G-Seat + SFX100 Builder

    Joined:
    Apr 15, 2015
    Messages:
    128
    Location:
    NE of YMML
    Balance:
    1,031Coins
    Ratings:
    +53 / 0 / -0
    My Motion Simulator:
    DC motor, AC motor, 4DOF, 6DOF
    G'day Jan,

    Unfortunately the short term answer is no, it is not possible with the way I have coded for this plugin. It was purely for g-seat output only, and adapted to get around some of the issues I was having with DCS.

    The good news is that I will very shortly be facing the very same issue where I need a normalised output for a 4DOF (2DOF in your case) motion platform plus pure accelerometer g vector output for the g-seat on top of it. I cannot foresee me getting to redo the plugin for a month or two. But it will be programmed for this setup. There is an anticipated SIMTOOLS configuration on the main page of my website for how the plugin is to be coded. Once it is working I will most definitely post it here if I can.
    • Like Like x 1
  11. Jan Havranek

    Jan Havranek New Member

    Joined:
    Sep 13, 2019
    Messages:
    13
    Balance:
    36Coins
    Ratings:
    +0 / 0 / -0
    Hi, thank you for your time, while I will fly without pitch and roll and wait, thank you again and look forward to it.
  12. BrassEm

    BrassEm G-Seat + SFX100 Builder

    Joined:
    Apr 15, 2015
    Messages:
    128
    Location:
    NE of YMML
    Balance:
    1,031Coins
    Ratings:
    +53 / 0 / -0
    My Motion Simulator:
    DC motor, AC motor, 4DOF, 6DOF
    G'day,

    I have updated my plugin to 0.06 and testing it on my rig (SFX and g-Seat-II). It seems to be doing everything it needs to make it rock and roll. I will need to recompile it and add it into the first post within the week. (Add an appropriate MaxMin.cfg and Export.lua)

    There are some things that have changed for DCS.

    The plugin is passing all DCS values sent from the Export.lua without ANY alteration at all. It is relying on the SimTools Game Engine to mix the appropriate levels of DOF. The MaxMin.cfg should limit the range to the correct Full Scale values. Rates in °/sec and g's. It may need to be adjusted per aircraft though. There is some shudder with SFX when rates are extreme. I am not sure if there is clipping in Game Engine should the combined DOF input values go over 100, or it is too much gain on the SFX motor drives, or my very heavy rig?

    The plugin outputs are Roll, Pitch, Yaw, Heave, Surge, Sway, gHeave, gSway, gSurge.

    Apologies for those who have downloaded 0.03. Hopefully 0.06 will be straight forward.

    Cheers.
    • Like Like x 2
    Last edited: Nov 18, 2019
  13. Jan Havranek

    Jan Havranek New Member

    Joined:
    Sep 13, 2019
    Messages:
    13
    Balance:
    36Coins
    Ratings:
    +0 / 0 / -0
    Great. I will be testing at the weekend
  14. MagicMunkyNuts

    MagicMunkyNuts Nothing ventured, nothing gained.

    Joined:
    Dec 29, 2019
    Messages:
    30
    Occupation:
    Disability Support.
    Location:
    Maffra, Victoria, Australia.
    Balance:
    234Coins
    Ratings:
    +19 / 0 / -0
    G'day BrassEm,

    I just had a look at your website and saw a new update from 4 day ago on the exact subject I'm now researching, G-seats.
    Thank you so much for all this effort mate, I'd be lost without people like you to help out! This may be a silly question but what compelled you to use these motors over the servo motor setup used in the GS-4 seat?
  15. BrassEm

    BrassEm G-Seat + SFX100 Builder

    Joined:
    Apr 15, 2015
    Messages:
    128
    Location:
    NE of YMML
    Balance:
    1,031Coins
    Ratings:
    +53 / 0 / -0
    My Motion Simulator:
    DC motor, AC motor, 4DOF, 6DOF
    Good question Magic!

    First and foremost the motors need to be strong! If they can't move your body weight crisply then you loose fidelity. The motors I used are reasonably cheap, too bulky, but have reasonable velocity and torque from the worm gear. (200W might be overkill but better than underkill!). The motor controllers I've used have some cost but are straight forward, have built in PID and motor regen control, and best used with pot feedback for motor position. 24VDC or higher is the way to go as half as much current is required than 12VDC. (Getting a strong lever attached to the motor is not straight forward though). I just wanted to throw a DC control voltage at the motor from an Arduino and have it work.

    Stepper motors and RC servo motors have much less torque and use different motor position strategies. Motor control and interfacing looked convoluted to me so I didn't go there.

    Recently building the SFX-100 system has opened my eyes to the motor / ball screw option. That option (smaller scale) is so-far superior yet again and may be the basis for g-Seat-III.
    Last edited: Jan 2, 2020
  16. MagicMunkyNuts

    MagicMunkyNuts Nothing ventured, nothing gained.

    Joined:
    Dec 29, 2019
    Messages:
    30
    Occupation:
    Disability Support.
    Location:
    Maffra, Victoria, Australia.
    Balance:
    234Coins
    Ratings:
    +19 / 0 / -0
    This all makes perfect sense, and I'll admit I'm glad I don't have to worry about attempting to wire up 16 servo motors... Now the A.C option is a valid point and I'm fortunate that I have an electrician/programmer in the family so I might ask some more questions about the complexity of this challenge and how soon I'll go grey because of this. All jokes aside though, thanks for the advice and ideas. The ball screw linear actuator concept sounds promising, but I can only imagine the challenges involved in making it compact enough to fit in a g-Seat.

    Never say never and may fortune favor the brave :)
    • Like Like x 1
  17. cityparker

    cityparker Member

    Joined:
    Sep 14, 2020
    Messages:
    33
    Balance:
    312Coins
    Ratings:
    +3 / 0 / -0
    My Motion Simulator:
    2DOF, DC motor
    But ,only surge and sway,can I play in DCS
  18. noorbeast

    noorbeast VR Tassie Devil Staff Member Moderator Race Director

    Joined:
    Jul 13, 2014
    Messages:
    15,536
    Occupation:
    Innovative tech specialist for NGOs
    Location:
    St Helens, Tasmania, Australia
    Balance:
    113,911Coins
    Ratings:
    +9,125 / 46 / -2
    My Motion Simulator:
    3DOF, DC motor, JRK
    Do you mean that you can only get sway and surge to work in DCS?s.
    If so please start a dedicated thread and post pictures of all of your setting.
  19. cfischer

    cfischer Active Member Gold Contributor

    Joined:
    Sep 7, 2015
    Messages:
    183
    Location:
    Colorado
    Balance:
    1,218Coins
    Ratings:
    +109 / 0 / -0
    Doesn't need to be compact or even beautiful to work really really well.
    • Winner Winner x 2
    • Like Like x 1
  20. BrassEm

    BrassEm G-Seat + SFX100 Builder

    Joined:
    Apr 15, 2015
    Messages:
    128
    Location:
    NE of YMML
    Balance:
    1,031Coins
    Ratings:
    +53 / 0 / -0
    My Motion Simulator:
    DC motor, AC motor, 4DOF, 6DOF
    I don't have any experience with a "Rock and Roll" rig. I have removed any vector calculations in my plugin for these that Value1 has in his plugin. With DCS I believe you will get surge effect, turbulence (sway), but not having heave you may miss ground rumble unless mixing in heave into the Pitch and Roll channel while on the ground. And obviously loose any heave which I think is very important for DCS.

    BUT!
    Any motion is way better than none! Especially in VR. So yeah, go for it if you can.
  21. cityparker

    cityparker Member

    Joined:
    Sep 14, 2020
    Messages:
    33
    Balance:
    312Coins
    Ratings:
    +3 / 0 / -0
    My Motion Simulator:
    2DOF, DC motor
    I used to use DCS plus version 0.5. After using DCS plus 0.6, in the simtools test, two shafts will not rotate and cannot return to the center when the motion speed is too small. I try to uninstall and then re install or upgrade to 2.5.1, but it's OK to change to another computer.