Jump to content

Rico's G-Seat


KLR Rico
 Share

Recommended Posts

I was going to post this in Bergison's DIY G-seat thread, but I decided it'd probably be good to branch it off.

 

---------------------------------------------------------------------------

 

Ok, I'm not too sure what to post since I'm terrible about documenting stuff like this...

 

Well first, I'd like to remind you that this is a beta version, no make that alpha. :D It's a total hack job, once I got started I just really wanted to see it work. Please take this post purely for information and lessons learned, I wouldn't recommend following these footsteps exactly.

 

As of right now, I'm planning on rebuilding this thing; there is a lot I'd change, I'll try to cover all that. I'm also usually all over the place, so I'm sorry if this is hard to follow. I'd be happy to offer clarification on anything.

 

So, where to start? I guess the first thing I sourced were the motors. I have a pull-your-own-part type of junkyard nearby with over 1200 cars so I went there and started trying to find four similar wiper motors, a task I thought would be fairly straightforward... turns out auto makers love to use different wiper motors for different models, and even different motors in the same model through different years. So I wound up wandering around for a few hours before I discovered that Hundai's seem to have the same motor in a few different models/years so I pulled four of them for the grand total of something like $35 USD.

 

Once I got the motors, I debated building my own H-bridge to drive them, but after a day or two I felt I was spending too much time working it out and decided to just buy cheap, off the shelf ebay speed controllers: DHB-1A 30A(5V-15V) Dual-channel H bridge Motor Drive Module

 

I also ordered one of the power supplies that Bergison used in his build: Genssi High Performance 12V DC 40A 480W Regulated Switching Power Supply

 

I only ordered one because I felt that 40A would be enough to cover the average current draw from all 4 motors, and I would buffer the PSU with a 10 Amp-Hour sealed lead acid battery to cover peak loads.

 

While that stuff was on order I started working on the motors. The output arm reaches out with a second fitting that's about 4 cm from the output shaft's axis. I decided that I would aim to use 120 degrees of shaft rotation, which would yield about 7 cm of stroke which seemed like plenty to work with since the resulting travel could be varied by moving the mount on the flap side.

 

Each motor's output arm had a little ball (from a ball and socket joint) attached to it. Unfortunately I didn't also take the mating socket for the ball, so I started looking for another way to turn the arm into a crankshaft to get linear motion. I also needed to find a connecting rod to connect the crank to the flap.

 

I think Bergison's ball/socket joints are a very elegant solution to this problem, but I was hoping I could find something local because I didn't want to wait on more parts in the mail. :smilewink: I went to a couple hardware stores hoping to be struck by inspiration. I didn't see anything that immediately stood out as a good choice. I wound up making a very much half-ass connecting rod with an adjustable turnbuckle and bronze bearings.

 

The bearings were too big to fit in the rod ends, so I just pried them open and stuffed the bushing inside.

IMG_20150326_021201.jpg

IMG_20150326_022012.jpg

 

 

Since I had this bearing/turnbuckle connecting rod made up, it wasn't going to work with the existing ball, so I cut it off and used my uber crappy harbor freight stick welder to replace that ball with a 1/2" diameter bolt that matched the bearing ID. I also ground down the bolt head a bit to improve the clearance between the arm and the motor's mounts.IMG_20150327_180231.jpg

 

With the basic motors and connecting rods figured out, I needed to make a motor mount, and a way to connect the feedback potentiometers that will relay the motor position back to the controller. In regards to the potentiometers, I initially gutted an old RC plane transmitter with the intention of using it's pots since they're fairly high quality and I had them available, but then found out that they only had a full scale span of about 90 degrees, when I needed to cover about 120 degrees. I dug through my scrap and the next best thing I found was four high quality 300 degree pots. Now, Bergison's silver lacquer method of reducing the pot's throw would have been the ideal solution to cut down the 300 degrees to the smaller 120 degree range and maintain resolution, but my pots were sealed...

 

I decided to use sketchup to draft up a gear drive to match the 120 degrees of motor rotation to the 300 degrees of potentiometer rotation. I also I drew up a motor mount.

 

whole%2Bassy5.jpg

whole%2Bassy6.jpg

 

I have a makerfarm 8" prusa i3 printer that I used to produce the parts in ABS plastic. To improve the strength of the mount, I used an acetone vapor bath to basically melt the outer layers and form a well bonded, solid shell..

 

Now I had the parts needed to make the mechanical parts of the servos, and luckily it was about this time that the speed controls arrived. It was time to turn my attention to the electronics. I took a look at the X-PID firmware Bergison used, but I didn't want to use 2 arduinos. There is absolutely nothing wrong with using 2 arduinos, but I only had one UNO, a Mega 2560, and a few different megaAVR's (I often ICSP program them with arduino code in standalone projects).

 

A single UNO has all the horsepower needed for the project, but it's limited by only having 6 PWM outputs, and the speed controllers I'm using require 2 channels (fwd and rev) per motor, for a total of 8 PWM outputs. I considered using logic chips to demux the PWM, and although I swore I had a whole variety, I couldn't find them.

 

The next consideration was to bit-bang the GPIO pins to make a faux PWM, but I started to get a headache thinking about it and then just grabbed the mega 2560, it has more than enough I/O to do the job without headscratching. The next obstacle was that the X-PID was written with only 2 motors in mind. I gave it a quick look to see if I could spot any easy way to make it work with all 4, but it wasn't immediately obvious.

 

I figured it wouldn't take long to scratch write a bare-bones firmware, so that's what I decided to do. I aimed to control just one motor unit to start with. I wrote a simple sketch to read an input pot to get a desired position, and then drive the motor until the motor's positional feedback pot matched the desired position. Basically you turn a knob, and the servo moves to match the knob.

 

I played around with my control algorithm and came up with a simple integer-only PI control. I didn't spend a whole lot of time attempting to optimize it, I called it done as soon as I got something reasonably good. Below is an example of the type of motor response I wound up with. The pink line is the input pot, the blue line is the motor position as it is sensed by the feedback pot, and the yellow and cyan lines up at top are the forward and reverse PWM signals to the h-bridge.

 

I turned the knob as fast as possible to try and simulate a step response to drive the motor across the full 120 degree range of motion. I was pretty happy at the speed of the response and the lack of overshoot. You can see the total time to transit the 120 degrees is about 0.45 seconds, with a 10-90% rise time of 0.29 seconds. This test was done with no load on the motor.

DS1Z_QuickPrint15.pngo

 

 

Next I made a little test jig to see how much force these motors were going to provide. This was simply a motor unit bolted to a block of wood, and set up for a static pull on a digital fish scale. I checked the motors torque vs current linearity (mainly for shits and gigs, I didn't think it'd matter much in application) and found it was fairly linear, with my fish scale topping out at 70 lbs by the time the motor reached 10 amps.

 

If I got it figured correctly, 70 lbs on the scale = 110 in-lbs (~12 N m). Also, I think it was probably the scale that topped out rather than the torque since my scale topped out at 70 lbs @ 10A, while the motor was happy to draw in excess of 15A. I didn't attempt dare go higher because it looked like my test rig was going to come apart in an uncontrolled fashion. :)

 

 

I also did some tests to see how the motor reacted to PWM frequency by driving the speed control with a function generator. I should have taken more notes here, but my basic takeaway was that the motor had a ton of inductance which caused a big loss in average current (and thus torque) at frequencies above ~10KHz or so. I opted to keep the arduino's default 490Hz. Unfortunately, I've found that the the whine from the motors *is* pretty annoying. I'd really like to get it up into the 20KHz range and out of audible. Unfortunately with the arduino's prescalers, you're stuck with a jump from 4KHz straight to 31KHz. :doh:

 

More than likely I'll just wind up using acoustic insulation.

 

 

 

Ok, so where are we at now? I guess here I had most of the electrical/mechanical parts figured out so it was time for actual construction. I thought it would be sweet to have a fwd/aft adjustment to make getting in/out of the sim easier and to accommodate other pilots, so I went back to the junkyard and acquired a car's seat rack. The rack I got also had the ability to adjust the height of the front and the back ends of the seat bottom independently.

 

I took that home and started trying to build a chair around it. I quickly grew frustrated at trying to get a wood seat frame put together with my seat rack and still have room for the motors and flaps and all that. I wound up with something horrible construct that was too narrow to comfortably be the base of the seat. I ditched the seat frame idea and went with a basic non-adjustable setup.

 

I spent a little bit of time trying to find plans for an aircraft style seat that I thought would be good, but didn't find much. Not one to be deterred, I simply just started sawing up my MDF sheets and 2x4 lumber until it started to look something *like* a seat.

 

Somehow, I ended up making my lower side panels too short to clearance the lower motor units off the ground and ended up just reusing them as upper side panels.

 

Eventually I had something that looked like a reasonable facsimile of a seat.

 

 

I didn't have the motors in at this point, but I attempted to find the ideal hinge points on the flaps just by sitting in there and moving them by hand. As Bergison mentions in his guide, the hinge axis, flap size, and overall location, are all critical to the way the pressure is applied.

 

After a few tries, I found the points that seemed about right.

 

 

 

Next I bolted in the motor units, and adjusted my turnbuckle connecting rods to try and find good neutral points and flap movement extremes.

 

Here is one of the motor units, they're all identical.

_IGP2287.JPG

 

After they were all installed, I realized that none of the motor units were going to be utilizing their full 120 degree range of motion, and I'd have to setup end points in the firmware. That ended up being pretty straightforward. I did it by adding a few lines to read back the flap positions over the serial port and then moved each flap by hand (no power to the motors during all of this), and recording the value near the endpoint of its travel. This value became the maximum travel limit and the software would not attempt to drive the flaps beyond these points.

 

 

Going back to supplying power to the rig, I thought it might be wise to isolate the PSU from the battery, which was done with 4 paralleled power schottky diodes that were scavenged from a TV power supply board. I don't know if this was really necessary, but I didn't want to find out the hard way the PSU didn't like having an external voltage applied to it's output terminals (like when it's off or brownout). I was going to open the PSU up and look inside to see what kind of protection it had, but some of the screws were purposely obliterated at the factory to keep people like me out, and I didn't feel like dealing with it, so protecting it myself was the final decision.

_IGP2290.JPG

 

The PSU was nicely regulated to 12.0v out of the box, but I cranked it up to get a better float voltage on the battery and to compensate for the diode's forward voltage. The output adjustment topped out at 13.6V. With the 0.3v diode drop, the motors and battery are receiving 13.3V.

 

Now it was about time to put everything together and get x-sim working and talking to my arduino. I utilized the x-sim USO (universal serial output) feature, which just sends the values and any other desired characters over the serial port. I just had it sending the motion values as a comma seperated stream, with a newline character to tell the arduino that the line was finished and to go ahead and use those previous values.

 

Right now, I'm just using the slow 9600 baud, so I haven't noticed any data errors, and felt that I needed to implement a checksum. Even that low rate seems plenty fast to send fast movements like vibrations to the seat. IIRC, by default x-sim is sending the data with a 33ms delay, which would yield a 30Hz refresh rate. I'll probably play around with other baud and refresh rates at some point.


Edited by KLR Rico
  • Like 1

i5-4670K@4.5GHz / 16 GB RAM / SSD / GTX1080

Rift CV1 / G-seat / modded FFB HOTAS

Link to comment
Share on other sites

Now I was able to put it all together and actually use the computer to drive the flaps. I started off with the slider test program. When I was first setting everything up I used my homemade electronic load to work as current limiter to keep the motors from self destructing if something was wrong. That turned out to be a smart idea, because it certainly wasn't working straight away and sometimes parts would attempt to move the wrong direction. Unregulated, motors would have had more than enough power to tear everything apart, but limited to an amp or two it wasn't strong enough to be dangerous to itself. IMG_20150330_223540.jpg

 

 

After a little bit of a learning curve with the xsim software I had everything working, if only in a rough draft. However, as far as construction goes, the chair was finished enough to work.

_IGP2286.JPG

_IGP2285.JPG

 

 

Next I followed Bergison's instructions to getting DCS talking to X-Sim. After a few hours of playing around I had accelerations in all 3 axis' working. A few hours more and I found an ideal tuning. It took some time to find something that felt consistent across all the planes.

 

The method I settled on was to find a the highest performance plane to define the maximum forces. For some reason, none of the FC3 planes are working, so I used the mig-21.

 

Basically what I did was go pull 8g, and and set it as the maximum value for the seat. ie, pulling 8g's causes the chair to reach it's highest amount of force in that direction. I settled on -2g as the highest negative force. I then used knife edge flight and aggressive full rudder deflections to set the lateral G limits. Maximum longitudinal forces are defined by a takeoff roll with the mig's emergency afterburner lit to set the peak for acceleration, and then parachute deployment plus full brakes for deceleration.

 

I'm really happy with what I wound up with. All the aircraft are a blast to fly. Obviously since it's the benchmark I used to set everything, the mig-21 is simply astounding. It actually takes a physical toll to keep flying hard for an extended amount of time.

 

The Huey is subtle in comparison, but there is still enough feedback to make it feel pretty realistic. It's great fun dodging between buildings and flying NOE. For some reason, I didn't anticipate the bump of the skids touching down, it was an unexpected but pleasant surprise.

 

I mentioned in the previous post that taildragger takeoffs are a harrowing experience, and they are when things aren't going right, but it has already made me better at taking off in the 190 or 109. Feeling the yaw makes it a lot easier to keep everything straight. The same goes for coordinated turns. I'm still getting used to it, but it's a huge difference.

 

In the pure fun factor, it's really something else. A-10 gun runs have to be felt to be believed. The feeling of cresting the top of a hill going into the dive, the buffet and forces when firing, and the feeling of bottoming out at the bottom of the hill when breaking away... the whole thing is just crazy.

 

The first time I crashed I had a moment of panic because I really expected it to hurt. My brain is melting trying to imagine what this would be like with oculus rift / vive or whatever HMD we wind up with.

 

 

Well, I guess that summarizes the build... It's unrelated, I guess I could also note that I finally took the oprotunity to extend my saitek x-52/sidewinder force feedback hybrid joystick. I added about 10 inches and did the MSFFB2 resistor mod to increase the force. The improved control from the longer moment arm has been great, and with the resistor mod, there is no problem keeping the stick solidly tensioned.

 

 

 

 

So, now that that's all said and done. I have an idea of where I want to go from here....

 

- Ergonomics: As I made it, it's pretty uncomfortable. I mean, obviously that'd probably get better with some padding first of all... :D I threw a crib mattress pad over it now, but I still want to tweak the seat bottom angle and height (lower it). It'd be really nice to figure out how to incorporate that adjustable seat rack. Also, I think it would be good to slightly widen the lower flaps' pivot points (closer to my sides instead of right under hip bones). Right now they lift me on negative g, and squeeze pretty effectively on positive g, but I don't get too much of a sinking feeling on the positive g. I'm comparing it to the back panels, which are really awesome at giving that sinking into the seat feeling.

 

 

- Aesthetics: Using what used to be lower side panels as upper side panels didn't turn out so great. I was going to re-shape them, add a headrest, add the seat cover and etc... but I think I'll just take care of everything on V2. The next version will get some attention to detail, paint, and all that stuff. I don't think I'll have any problem taking my time on that one since I'll have this one to play with in the meantime. If I can get that adjustable seat rack to work, I think it'd be cool to pull an ejection handle to release the slide adjustment. Someone at work said I should put a car airbag under the seat and rig the ejection handle to that... :music_whistling:

 

 

- Seat belts: I bought a cheap 4 point harness from ebay, but I haven't installed it yet. It'll probably just wait until V2. I can definitely see the belts adding a whole other layer of immersion. Funny note, when my belts showed up in the mail, my wife was questioning why in the world I'd buy a seat belt. When I said it was for my simulator she said, "Um, you know it doesn't go that fast... right?" :lol:

 

 

- Motor units: My ridiculous feedback pot gear drive mechanism is really dumb. It seemed like a good idea at the time since it used what I had on hand. Unfortunately it takes up valuable space, it's at risk to fail (and cause self destruction of that whole flap when it does), plus it's just plain clunky.... I can think of a dozen other ways to do it better. Leading my thoughts right now is to use a hall effect sensor. It would be accurate, reliable, compact, and simple. I also need to reconsider the pushrod setup. It's working just fine as is, but I think I can redo it cleaner and more robustly. I also need to give some thought about how I want to do the seatbelt tensioning. My overall design focus for the next version is to come up with something elegant and compact.

 

 

- Controller: Absolutely need to rewrite the arduino code. It's just terrible right now. I got lazy and copypasta'd the function to drive the motors, so I wound up with essentially the same function 4 times. It really needs to be cleaned up and commented so I can understand what the hell I was doing when I go and look at it 2 years from now, not to mention any other poor soul that might want to use it.

 

I'll also have to investigate using higher baud rates to see if there's any performance improvement. As of right now, I seem to be picking up even fairly high frequency vibrations, so I don't know if there's much to gain there. Worth a shot though...

 

 

- Power supply: I need to implement a kill switch and a relay to disconnect the battery when it's all shut down. The wiring needs to be cleaned up and wrapped and I need to find a proper place to mount all that stuff. Proper connectors should be used in place of wire nuts on the main power distribution, and some fuses would probably be pretty smart. :music_whistling:

 

 

 

I *think* that's it... I'm really impressed with immersion that can be achieved by the seat, and I look forward to improving it. It's a real game changer. If you have the resources, I highly recommend building one or buying a commercial seat.


Edited by KLR Rico

i5-4670K@4.5GHz / 16 GB RAM / SSD / GTX1080

Rift CV1 / G-seat / modded FFB HOTAS

Link to comment
Share on other sites

Great write up. This has given me motivation to keep working on mine. I'm not as brave as you! I'm currently wiring my relays and kill switch before I go any further!

 

I haven't delved into x-sim too much. I wasn't able to find any write up to get my head around the math setup yet. I think a bit of trial and error will be in order.

 

I look forward to further updates as you make changes. Thanks for taking the time to share your experience. I'm anxious to find out if the ETL vibration is felt in the Huey or if it's just represented graphically in the sim. I need to get back to work on mine.

__________________________________________________

Win 10 64bit | i7 7700k delid @ 5.1gHz | 32Gb 3466mhz TridentZ memory | Asus ROG Apex motherboard | Asus ROG Strix 1080Ti overclocked

 

Komodosim Cyclic | C-tek anti torque pedals and collective | Warthog stick and throttle | Oculus Rift CV1 | KW-908 Jetseat | Buttkicker with Simshaker for Aviators

 

RiftFlyer VR G-Seat project: http://forums.eagle.ru/showthread.php?p=2733051#post2733051

Link to comment
Share on other sites

I flew a quick test in the huey this morning and I didn't really feel the ETL buffet or see it on xsim's rolling chart. Perhaps its there, but my settings mask it? I'm not too sure though, I get pretty solid stall buffeting on the fixed wing A/C and strong shaking from thr P-51 at idle, and I would have expected the ETL buffet to be a similar magnitude.

 

I'll do some more testing later and let you know what I find out.

i5-4670K@4.5GHz / 16 GB RAM / SSD / GTX1080

Rift CV1 / G-seat / modded FFB HOTAS

Link to comment
Share on other sites

I was searching for solution like this as well and stumbled on to Bergison's site and later found his thread here. It is EXACTLY what I was looking for.

However, I have almost zero experience in this kind of stuff so glad to see other people trying to do it too. Gets me motivated.

 

I am a student and live in a very small apartment so space is extremely limited. Hence I'm trying to look for a smaller solution. I have an old office chair from the late 80's, made out of like cast iron or something (except the seat and back rest of course) and I'm thinking that maybe it can be converted. Otherwise I'll have to build a seat from scratch and throw the regular chair out. That's how little space I have.

 

If any one has any ideas for a smaller chair or something please do advice me!

Good luck with your build!

"Hard to imagine bigger engine. its got a beautiful face and an arse built like sputnik." - Pikey AKA The Poet, on 37 Viggen.

Link to comment
Share on other sites

It's hard to say without seeing the chair, but whether or not you can convert it depends on the framework and how you'd mount the flaps and motors. Either converting or building from scratch, you can make the seat fairly small. I don't think mine takes up a whole lot more room than a regular office chair and I think there's a bit of room to play with on the size to either make it bigger or smaller to suit you.

i5-4670K@4.5GHz / 16 GB RAM / SSD / GTX1080

Rift CV1 / G-seat / modded FFB HOTAS

Link to comment
Share on other sites

Hey Rico!

 

Yeah I understand that it is hard to comment without seeing the chair. I was just thinking that maybe you, or anybody els doing this kind of build had any general tips. Maybe they built their own smaller version, or maybe know of a smaller build or something. Anything that I can steal Ideas from, so to speak.

I think the biggest problem is implementing the flaps in to the chair, in such a way that it is still comfortable when not flying. Don't care if it looks ugly, as long as it's relatively small, movable and comfortable.

 

EDIT:

Also, looking at Bergison's chair, I have a hard time seeing how it can be made smaller. But then again I know jack Shite about this.


Edited by SpeedStick

"Hard to imagine bigger engine. its got a beautiful face and an arse built like sputnik." - Pikey AKA The Poet, on 37 Viggen.

Link to comment
Share on other sites

Hey Rico!

 

Yeah I understand that it is hard to comment without seeing the chair. I was just thinking that maybe you, or anybody els doing this kind of build had any general tips. Maybe they built their on smaller version, or maybe know of a smaller build or something. Anything that I can steal Ideas from, so to speak.

I think the biggest problem is implementing the flaps in to the chair, in such a way that it is still comfortable when not flying. Don't care if it looks ugly, as long as it's relatively small, movable and comfortable.

 

EDIT:

Also, looking at Bergison's chair, I have a hard time seeing how it can be made smaller. But then again I know jack Shite about this.

 

There should be no problem incorporating the flaps into the base of an existing seat. The difficulty will be with the back rest. You need a good bit of real estate for the two mechanisms at the rear. It might be doable if you forget about the belt tensioners. I think they add a great deal to the entire experience though. If your chair is the type I'm thinking of then you could mount the four motors to the existing frame structure by making up four brackets which also incorporate potentiometer mounting. Then make up a timber or steel sub frame to mount the flaps to the seat. If you want the belts then I don't think that will be so easy with just an existing chair frame.

__________________________________________________

Win 10 64bit | i7 7700k delid @ 5.1gHz | 32Gb 3466mhz TridentZ memory | Asus ROG Apex motherboard | Asus ROG Strix 1080Ti overclocked

 

Komodosim Cyclic | C-tek anti torque pedals and collective | Warthog stick and throttle | Oculus Rift CV1 | KW-908 Jetseat | Buttkicker with Simshaker for Aviators

 

RiftFlyer VR G-Seat project: http://forums.eagle.ru/showthread.php?p=2733051#post2733051

Link to comment
Share on other sites

There should be no problem incorporating the flaps into the base of an existing seat. The difficulty will be with the back rest. You need a good bit of real estate for the two mechanisms at the rear. It might be doable if you forget about the belt tensioners. I think they add a great deal to the entire experience though. If your chair is the type I'm thinking of then you could mount the four motors to the existing frame structure by making up four brackets which also incorporate potentiometer mounting. Then make up a timber or steel sub frame to mount the flaps to the seat. If you want the belts then I don't think that will be so easy with just an existing chair frame.

 

Yeah I was thinking that the back rest might be a big problem as well. It seems that the belt tensioners are big part of the build so I don't think I want to skip them. Currently it looks like I will need to build a new chair from scratch. I might just buy the recommended parts and see what I can do. Thanks.

"Hard to imagine bigger engine. its got a beautiful face and an arse built like sputnik." - Pikey AKA The Poet, on 37 Viggen.

Link to comment
Share on other sites

 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...