steering, tracking a rout for Ergometer(Kettler)

hi,

I have set up an script that allows me to get data from my Ergometer from Kettler over an serial com port.

my problem is I have an rout and I have an forward movement (over python)

so I set up an cube, this cube move as soon as I step so no problem, but now I want that the Cube is tracking/steering the exactly rout like ( a Game, you press the forward_key and the Cube move along the rout)

so for better understanding I post the connection_code:



from bge import logic
import serial


class Ergometer_Com:

    def __init__(self):
        COMNUM = 3
        self.ser = 0
        self.ser = serial.Serial()
        self.ser.baudrate = 9600
        self.ser.stopbits = serial.STOPBITS_ONE
        self.ser.bytesize = serial.EIGHTBITS
        self.ser.port = COMNUM - 1

        self.ser.timeout = 10
        try:
            self.ser.open()

            if self.ser.isOpen():
                print('Open: ' + self.ser.portstr)
                #self.ser.write(b'RS
')
                self.ser.write(b'CM
')
                if "ACK" in self.ser.readline():
                    print("CM_Setup_OK")
                    self.loop()
                elif "RUN" in self.ser.readline():
                    print("CM_Setup_OK")
                    self.loop()
                else:
                    print("error to send CM")
                    self.loop()
        except:
            print("port not found")
            

    def loop(self):
        
        own = logic.getCurrentController().owner
        readin = ""
        data_list = []
        
        self.pulse = 0
        
        self.rpm = 0
        self.speed = 0.000
        self.distance = 0.000
        self.power = 0
        self.energy = 0
        self.time = ""
        self.power_actuell = 0

        
        self.ser.write(b'ST
')
        #print(self.ser.write)
        loopstate = 1

        if loopstate == 1:
            data = self.ser.readline()
            readin = data.decode('ascii').strip()
            data_list = readin.split('	')
            
            self.pulse = data_list[0]
            self.rpm = data_list[1]
            self.speed = float(data_list[2])
            self.newspeed = float(self.speed/10)
            self.distance = float(data_list[3])
            self.newdistance = float(self.distance/10)
            self.power = data_list[4]
            self.energy = data_list[5]
            self.time = data_list[6]
            self.power_actuell = data_list[7]

            own["newspeed"] = self.newspeed

            #print(list)

            print("pulse: " + str(self.pulse))
            print("rpm: " + str(self.rpm))
            print("speed: " + str(self.newspeed))
            print("distance: " + str(self.newdistance))
            print("power: " + str(self.power))
            print("energy: " + str(self.energy))
            print("time: " + str(self.time))
            print("power_current: " + str(self.power_actuell))

            #self.ser.close()
            loopstate = 0



ergometer_com = Ergometer_Com()

def main():
    ergometer_com.loop()


and I don’t want to do this with an Animation like (path animation) or so

I have figured out how I get tracking the Z axis of the rout but don’t get X,Y


from bge import logic
from mathutils import Vector
import math

def align():
    cont = logic.getCurrentController()
    own = cont.owner
    
    if own['MOVE']:
        from_pos = own.position

        to_pos = from_pos[:]
        to_pos = [from_pos[0], from_pos[1], (from_pos[2] - 100)]

        floor_ray = own.rayCast(to_pos, from_pos, 0, "ground")
            
        if floor_ray[1]:
            own.alignAxisToVect(floor_ray[2], 2, 0.1)
            
        if floor_ray[2] != None:
        
            var = math.acos(floor_ray[2][2])
            own['vector_ground'] = str(var)            
            var = (var * 180) / 3.14
            own['floor_angle'] = var
        #print (var)

so hope for help