Мне нужно делать прогнозы на основе команд, отправляемых сокетами с клиента на сервер. Сервер делает прогнозы (нейронная сеть TensorFlow) и отправляет его другому программному обеспечению, на котором работает симулированный робот. Итак, прогнозы делаются, пока сервер получает данные. Я создал один поток для расчета прогнозов, а другой - для отправки программному обеспечению робота. Я пробовал использовать приведенный ниже код, но он не работает.
def pioneer():
sensor_val = np.array([])
for x in range(1, 16 + 1):
errorCode, detectionState, detectedPoint, detectedObjectHandle, detectedSurfaceNormalVector = sim.simxReadProximitySensor(
clientID, sensor_h[x - 1], sim.simx_opmode_buffer)
sensor_val = np.append(sensor_val, detectionState) # get list of values
sensor[:, :] = sensor_val.reshape(1, 16)
errorCode = sim.simxSetJointTargetVelocity(clientID, left_motor_handle, pred[:, 0],
sim.simx_opmode_streaming)
errorCode = sim.simxSetJointTargetVelocity(clientID, right_motor_handle, pred[:, 1],
sim.simx_opmode_streaming)
def prediction():
with tf.compat.v1.Session() as sess:
sess.run(init)
loader = tf.compat.v1.train.Saver()
loader.restore(sess, "output_pioneer")
pred = sess.run(Y_hat, feed_dict={X: direction_data})
print(pred)
try:
while True:
print("Aguardando conexao")
con, client = tcp.accept()
print("Conectado por", client)
sim.simxStartSimulation(clientID, sim.simx_opmode_blocking)
t1 = threading.Thread(target=pioneer())
t2 = threading.Thread(target=prediction())
t1.start()
t2.start()
while True:
msg = con.recv(4096)
if not msg: break
direction_data = np.array(pickle.loads(msg)).reshape(1,4)
print(direction_data)
print("Finalizando conexão do cliente", client)
con.close()
sim.simxStopSimulation(clientID, sim.simx_opmode_blocking)
except KeyboardInterrupt:
pass
Буду очень признателен, если вы поможете мне. Спасибо!