Boromir the Segway [In-Game Scripting]

A working segway I made using Spaar's In-Game Scripting mod! Some credit also goes to =Ø= for asking a few important questions before I could.

Controls are just the cursor keys; note that the forward/backward accelerate Borromir in that direction instead of quickly changing the his speed to some predefined value, and his speed will not return to 0 when the keys are released. I plan to fix this, as well as much of the wobbliness, very soon.

import ('UnityEngine')
import ('math')
vWheel = 0.0 -- speed of the wheel
oldTilt = 0.0 -- the angle of the center block on the previous tick. will be used in future versions
gyro = GameObject.Find('bgeL0').transform -- the position of the center block, the gyroscope
tick = 0 -- used to lower amount of messages to console

simStart = function ()
  vWheel = 0.0
  oldTilt = 0.0
  gyro = GameObject.Find('bgeL0')
  tick = 0

frame = function ()
  -- get the angle of the gyroscope and make sure it's between 180 and -180
  reading = gyro.transform.eulerAngles[2]
  if (reading > 180) then reading = reading - 360 end
  -- set the velocity of the wheel to counteract the tilt. The speed of the wheel is less as it gets closer
  -- to upright in order to keep it from oscillating back and forth too badly.
  -- the code in real segways is a bit more complicated, but I wanted to post this as soon as I got
  -- it working at all
  vWheel = reading/10
  -- every 5 ticks, log relevant stuff
  tick = tick + 1
  if (tick == 5) then
    tick = 0
Note: Boromir is only technically named after LoTR character; I needed a name for him, and Boromir was a preexisting name that fit very well.

Attached Files