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