Jump to content

Infernal Propulsion Challenge: Walkers, catapults, and more! [Infernal Robotics]


Recommended Posts

I made this a while ago, but I think it works well with the scope of this challenge. It's not very fast, because in FAR, the silly thing wants to flip right over going any faster than 15 m/s horizontally.

http://youtu.be/1vsk3lcXICc

The SAS units are the only thing that controls it, but since the pitch of the blades is controllable, I think it's entirely possible to get this thing to fly like a proper copter would, using only the lift differential from the various rotors.

I might have to revisit this and see if I can get that set up, actually.

Nice Quad-copter

Link to comment
Share on other sites

  • 2 months later...
Little progect i was working on, the blade change angle has they go around the center rotors creating pitch roll and lift, thrust only controlled by blade angle like it should and yaw is controlled by rotor speed difference, all with QWEASD+shift+ctrl

http://gfycat.com/WastefulSlimyIbadanmalimbe

http://gfycat.com/IdealisticAdvancedKookaburra

Looks impressive, could I have a look at your kOS script and the .craft please?
Link to comment
Share on other sites

Looks impressive, could I have a look at your kOS script and the .craft please?

Sure, its the first program i wrote so i mean i feel there is a much better way but i need to do more reading up:



[LIST=1]
[*][COLOR=#000000]Clearscreen.[/COLOR]
[*][COLOR=#000000]PRINT "Coaxial electornic Cyclic/collective pitch Script Running.".[/COLOR]
[*][COLOR=#000000]PRINT " ".[/COLOR]
[*][COLOR=#000000]PRINT "V1.0".[/COLOR]
[*][COLOR=#000000]SET listCyclic1 to ship:PARTSTAGGED("Cyclic1").[/COLOR]
[*][COLOR=#000000]SET listCyclic2 to ship:PARTSTAGGED("Cyclic2").[/COLOR]
[*][COLOR=#000000]SET listCyclic3 to ship:PARTSTAGGED("Cyclic3").[/COLOR]
[*][COLOR=#000000]SET listCyclic4 to ship:PARTSTAGGED("Cyclic4").[/COLOR]
[*][COLOR=#000000]LOCK R to ship:control:pilotROLL * 20.[/COLOR]
[*][COLOR=#000000]LOCK P to ship:control:pilotPITCH * 20.[/COLOR]
[*][COLOR=#000000]LOCK L to ship:control:pilotMAINTHROTTLE * 15.[/COLOR]
[*][COLOR=#000000]LOCK Y to ship:control:pilotYAW.[/COLOR]
[*][COLOR=#000000]SET listEng1 to ship:PARTSTAGGED("engBlock1").[/COLOR]
[*][COLOR=#000000] for x in listEng1 {[/COLOR]
[*][COLOR=#000000] SET EngRot1 to x:GETMODULE("mumechtoggle"):GETFIELD("rotation:").}.[/COLOR]
[*][COLOR=#000000]until ship:altitude > 40000 {[/COLOR]
[*][COLOR=#000000]SET listEng1 to ship:PARTSTAGGED("engBlock1").[/COLOR]
[*][COLOR=#000000] for x in listEng1 {[/COLOR]
[*][COLOR=#000000] SET EngRot1 to x:GETMODULE("mumechtoggle"):GETFIELD("rotation:").}.[/COLOR]
[*][COLOR=#000000] //PF + RL = 2[/COLOR]
[*][COLOR=#000000] IF EngRot1 >= -22.5 AND EngRot1 <= -0[/COLOR]
[*][COLOR=#000000] OR EngRot1 >= -112.5 AND EngRot1 <= -90[/COLOR]
[*][COLOR=#000000] OR EngRot1 >= 157.5 AND EngRot1 <= 180[/COLOR]
[*][COLOR=#000000] OR EngRot1 >= 67.5 AND EngRot1 <= 90[/COLOR]
[*][COLOR=#000000] {for x in listCyclic1 {[/COLOR]
[*][COLOR=#000000] x:GETMODULE("mumechtoggle"):SETFIELD("min rotate", + P - R / 2 - L).[/COLOR]
[*][COLOR=#000000] }.for x in listCyclic2 {[/COLOR]
[*][COLOR=#000000] x:GETMODULE("mumechtoggle"):SETFIELD("min rotate", + P - R / 2 + L).[/COLOR]
[*][COLOR=#000000] }.for x in listCyclic3 {[/COLOR]
[*][COLOR=#000000] x:GETMODULE("mumechtoggle"):SETFIELD("min rotate", + P + R / 2 + L).[/COLOR]
[*][COLOR=#000000] }.for x in listCyclic4 {[/COLOR]
[*][COLOR=#000000] x:GETMODULE("mumechtoggle"):SETFIELD("min rotate", + P + R / 2 - L).[/COLOR]
[*][COLOR=#000000] }.}.[/COLOR]
[*][COLOR=#000000] //PF + RR = 3[/COLOR]
[*][COLOR=#000000] IF EngRot1 >= -45 AND EngRot1 <= -22.5[/COLOR]
[*][COLOR=#000000] OR EngRot1 >= -135.5 AND EngRot1 <= -112.5[/COLOR]
[*][COLOR=#000000] OR EngRot1 >= 135.5 AND EngRot1 <= 157.5[/COLOR]
[*][COLOR=#000000] OR EngRot1 >= 45 AND EngRot1 <= 67.5[/COLOR]
[*][COLOR=#000000] {for x in listCyclic1 {[/COLOR]
[*][COLOR=#000000] x:GETMODULE("mumechtoggle"):SETFIELD("min rotate", + P + R / 2 - L).[/COLOR]
[*][COLOR=#000000] }.for x in listCyclic2 {[/COLOR]
[*][COLOR=#000000] x:GETMODULE("mumechtoggle"):SETFIELD("min rotate", + P + R / 2 + L).[/COLOR]
[*][COLOR=#000000] }.for x in listCyclic3 {[/COLOR]
[*][COLOR=#000000] x:GETMODULE("mumechtoggle"):SETFIELD("min rotate", + P - R / 2 + L).[/COLOR]
[*][COLOR=#000000] }.for x in listCyclic4 {[/COLOR]
[*][COLOR=#000000] x:GETMODULE("mumechtoggle"):SETFIELD("min rotate", + P - R / 2 - L).[/COLOR]
[*][COLOR=#000000] }.}.[/COLOR]
[*][COLOR=#000000] //PB + RR = 4[/COLOR]
[*][COLOR=#000000] IF EngRot1 >= -67.5 AND EngRot1 <= -45[/COLOR]
[*][COLOR=#000000] OR EngRot1 >= -157.5 AND EngRot1 <= -135[/COLOR]
[*][COLOR=#000000] OR EngRot1 >= 112.5 AND EngRot1 <= 135.5[/COLOR]
[*][COLOR=#000000] OR EngRot1 >= 22.5 AND EngRot1 <= 45[/COLOR]
[*][COLOR=#000000] {for x in listCyclic1 {[/COLOR]
[*][COLOR=#000000] x:GETMODULE("mumechtoggle"):SETFIELD("min rotate", - P + R / 2 - L).[/COLOR]
[*][COLOR=#000000] }.for x in listCyclic2 {[/COLOR]
[*][COLOR=#000000] x:GETMODULE("mumechtoggle"):SETFIELD("min rotate", - P + R / 2 + L).[/COLOR]
[*][COLOR=#000000] }.for x in listCyclic3 {[/COLOR]
[*][COLOR=#000000] x:GETMODULE("mumechtoggle"):SETFIELD("min rotate", - P - R / 2 + L).[/COLOR]
[*][COLOR=#000000] }.for x in listCyclic4 {[/COLOR]
[*][COLOR=#000000] x:GETMODULE("mumechtoggle"):SETFIELD("min rotate", - P - R / 2 - L).[/COLOR]
[*][COLOR=#000000] }.}.[/COLOR]
[*][COLOR=#000000] //PB + RL = 1[/COLOR]
[*][COLOR=#000000] IF EngRot1 >= -91 AND EngRot1 <= -67.5[/COLOR]
[*][COLOR=#000000] OR EngRot1 >= -180 AND EngRot1 <= -157.5[/COLOR]
[*][COLOR=#000000] OR EngRot1 >= 90 AND EngRot1 <= 112.5[/COLOR]
[*][COLOR=#000000] OR EngRot1 >= 0 AND EngRot1 <= 22.5[/COLOR]
[*][COLOR=#000000] {for x in listCyclic1 {[/COLOR]
[*][COLOR=#000000] x:GETMODULE("mumechtoggle"):SETFIELD("min rotate", - P - R / 2 - L).[/COLOR]
[*][COLOR=#000000] }.for x in listCyclic2 {[/COLOR]
[*][COLOR=#000000] x:GETMODULE("mumechtoggle"):SETFIELD("min rotate", - P - R / 2 + L).[/COLOR]
[*][COLOR=#000000] }.for x in listCyclic3 {[/COLOR]
[*][COLOR=#000000] x:GETMODULE("mumechtoggle"):SETFIELD("min rotate", - P + R / 2 + L).[/COLOR]
[*][COLOR=#000000] }.for x in listCyclic4 {[/COLOR]
[*][COLOR=#000000] x:GETMODULE("mumechtoggle"):SETFIELD("min rotate", - P + R / 2 - L).[/COLOR]
[*][COLOR=#000000] }.}.[/COLOR]
[*][COLOR=#000000] //Yaw[/COLOR]
[*][COLOR=#000000] SET listEng1 to ship:PARTSTAGGED("engBlock1").[/COLOR]
[*][COLOR=#000000] for x in listEng1 {[/COLOR]
[*][COLOR=#000000] x:GETMODULE("mumechtoggle"):SETFIELD("coarse speed", 4 - Y).}.[/COLOR]
[*][COLOR=#000000] SET listEng2 to ship:PARTSTAGGED("engBlock2").[/COLOR]
[*][COLOR=#000000] for x in listEng2 {[/COLOR]
[*][COLOR=#000000] x:GETMODULE("mumechtoggle"):SETFIELD("coarse speed", 4 + Y).}.[/COLOR]
[*][COLOR=#000000]}.[/COLOR]
[/LIST]

also i used some tools to interface with IR if you don't know how that i run are pretty simple if you never played with parts modules

(note: they're just example not exactly what i did..)


SET partsList to ship:PARTSTAGGED("rotortag2").
for x in partsList {
print x:modules.
}.

^To find out what modules the part has (right click menu's... ect.)


SET partsList to ship:PARTSTAGGED("rotortag2").
for x in partsList {
log x:GETMODULE("mumechtoggle"):allevents to mylog.
log x:GETMODULE("mumechtoggle"):allactions to mylog.
log x:GETMODULE("mumechtoggle"):ALLFIELDS to mylog.
}.

^This finds different type of in the right click menu options(events, actions, feilds(within each different modules)) (then it logs it to a file named mylog, you could print.... but cant copy from in game screen saves time


SET rotorList to ship:PARTSTAGGED("rotortag2").


for x in rotorList {
print x:GETMODULE("mumechtoggle"):GETFIELD("coarse speed", 4).
}.

^Then i use it in a loop like i did in the script like so here.

Also doing this requires slow motion mod because ksp is not able to read physics fast enough to make anything of this type of simulation, 1/2 or 1/3 is way enough to get it working. (i want to try and make it "not angle based branching" but i have yet to had the time to figure it out)

.craft:http://pastebin.com/ug2703aN

But basicly the blades have 4 different positions, where they set them selves to pitch front + roll left, PF + RR, PB + RL, PB + RR.

And the angle of the blade is calculated depending on the amount of pitch, so say, 17 pitch forward + 12 roll / 2 = 14.5 degrees + 10 lift = 24.5 (then you have the opposite on the opposites sides further improving mobility)

My on paper calculation for blade angle is this:

P = Pitch = 20 forward

R = Roll = 45 Right

L = Thrust = 23 Up

(back left)or(1) - 20 - 45 / 2 = -32.5 + 23 = - 9.5

(front left)or(2) 20 - 45 / 2 = - 12.5 + 23 = 10.5

(front right)or(3) 45 + 20 / 2 = 32.5 + 23 = 55.5

(back right)or(4) -20 + 45 / 2 = 12.5 + 12.5 + 23 = 35.5

So at each angle the blade is going to position it self at everyone of these times (1, 2, 3, 4) Depending on the pitch, roll, thrust.

For the Yaw its really simple:

Rotor Speed = + Left - Right = Chassis turning Right

A force in one direction means you get an opposite reaction, making sure you keep the same amount of rotor speed ensures you keep the same amount of lift to not lose or gain altitude.

(reddit post here: http://redd.it/2nql09)

Edited by simonwoodburyforget
Link to comment
Share on other sites

  • 11 months later...
At the risk of invoking necromancy on this old thread gem:

I made a controllable coaxial rotor helicopter - using KSP 1.0.4 + Realism Overhaul (includes FAR) + Saturatable reaction wheels and several procedural parts mods (K9 procedural wings (for rotor blades), procedural parts, procedural fairings)
Features:
- No SAS (would be useless with these mods)
- No thrusters / RCS of any kind
- Electrically (Infernal robotics) powered and steered
- Fully controllable around 4 axis (roll, pitch yaw, collective pitch)
- "Cheated" a bit, using interstage fairing adapters for the swatch plade bearing (since no "hollow" cylindrical bearings are available that could turn around the rotor head stator, and "building" one would take far too many parts) - this simulates a stator cylinder running through the center to support the rotor head. (Technically there is, the invisible struts of the interstage fairing adapter do exactly that) -- one could think of it as a "magnetic bearing" (which has the advantage of the entire rotor head assembly being jetisonable if things go wrong - which is important, because - like with real helicopters - the inherent momentum of the assembly can cause violent RUD on ground contact)

Video:

[video=youtube;JAAmphLdbyo]https://www.youtube.com/watch?v=JAAmphLdbyo[/video]

I don't think it's the first working swash plate helicopter in KSP, but on youtube I only found tech demos of various swash-plate designs but no flight demo. Edited by CorvusCorax
added more info
Link to comment
Share on other sites

The low controllability of the helicopter has been addressed. It is now stability augmented - by means of a so called "flybar" freely hinged on top of the rotor actuating the upper rotors differential pitch.
This does wonders for controllability of the craft, I actually managed to fly it over from the launch pad to the runway and land it there in one piece and even take off again!

[video=youtube;zufsML4CZSM]https://www.youtube.com/watch?v=zufsML4CZSM[/video]

Next goal: Set a speed record - so far it looks like the helicopter reaches only around 12 m/s steady speed horizontally and close to 20 m/s for a very short time (with the risk of loosing control), but I think that can still be improved. Edited by CorvusCorax
Link to comment
Share on other sites

btw helicopter craft file:

http://cybertrench.com/helicopter_swachplate_infernal_final.craft

required mods to load:

  • KSP 1.0.4  (1.0.5 doesnt have all mods required yet)
  • Realism Overhaul 10.5.0 ( brings in FAR as well as partlists for procedural parts)
  • B9Aerospace procedural Parts 0.40 (used for helicopter blades and some structural parts)
  • Procedural Fairings 3.15 ( needed for bearings )
  • Procedural Fairings for Everything 0.1.1 (likely needed for bearings)
  • Procedural Parts 1.1.7 (needed for some cylindrical structural parts in rotor head as well as fuselage)
  • Magic Smoke Industries Infernal Robotics 0.21.3 ( needed for OOOMPF)
  • Infernal Robotics Model Rework - Core Pack 01b ( needed for ZOOM)
  • Infernal Robotics Model Rework - Expansion Pack 01b (needed for WOW)

I think that's all, if I missed one, please tell me.   Model should work with other - especially newe - versions of these mods too, but of course no guarantee

 

Controls:

No script used.  Controls via direct servo<-> key bindings.

Main engine:  Main motors bound to RCS action group. Turn on RCS and rotor will spin up , turn off RCS and rotor will spin down.

WARNING: since there's no "free run" available for the motors, the helicopter cannot auto-rotate.  It likely would if the motor wouldn't engage the breaks with infinity momentum, but thats for infernal robotics to fix

collective pitch (up down) :  "w" for up "s" for down

yaw (spin left/right) : "a" for left (counter clockwise) "d" for right (clockwise)

cyclic (roll+pitch) : "i" for pitch down "k" for pitch up "j" for roll left "l" for roll right

WARNING: cyclic does not autocenter, its like flying by adjusting trim, you need to press the opposite button to get back to center. controls react slowly to allow fine control input

custom action group "1" will center cyclic, but not reliably (might have to press it twice, any other control input cancels) - do that before takeoff only

I managed to land it on the VAB upright and in one piece ;), but you wouldn't have wanted to see that landing - nor the 20 or so attempts that failed ;)

Link to comment
Share on other sites

This thread is quite old. Please consider starting a new thread rather than reviving this one.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...