Skip to content

Commit 92f691d

Browse files
committed
for remote
1 parent 483ee65 commit 92f691d

13 files changed

+6813
-155
lines changed

.gitignore

+71
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,74 @@
33
__pycached__/
44
*.o
55
*.so
6+
7+
# Created by https://www.gitignore.io/api/pycharm
8+
9+
### PyCharm ###
10+
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm
11+
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
12+
13+
# User-specific stuff:
14+
.idea/**/workspace.xml
15+
.idea/**/tasks.xml
16+
.idea/dictionaries
17+
18+
# Sensitive or high-churn files:
19+
.idea/**/dataSources/
20+
.idea/**/dataSources.ids
21+
.idea/**/dataSources.xml
22+
.idea/**/dataSources.local.xml
23+
.idea/**/sqlDataSources.xml
24+
.idea/**/dynamic.xml
25+
.idea/**/uiDesigner.xml
26+
27+
# Gradle:
28+
.idea/**/gradle.xml
29+
.idea/**/libraries
30+
31+
# CMake
32+
cmake-build-debug/
33+
34+
# Mongo Explorer plugin:
35+
.idea/**/mongoSettings.xml
36+
37+
## File-based project format:
38+
*.iws
39+
40+
## Plugin-specific files:
41+
42+
# IntelliJ
43+
/out/
44+
45+
# mpeltonen/sbt-idea plugin
46+
.idea_modules/
47+
48+
# JIRA plugin
49+
atlassian-ide-plugin.xml
50+
51+
# Cursive Clojure plugin
52+
.idea/replstate.xml
53+
54+
# Ruby plugin and RubyMine
55+
/.rakeTasks
56+
57+
# Crashlytics plugin (for Android Studio and IntelliJ)
58+
com_crashlytics_export_strings.xml
59+
crashlytics.properties
60+
crashlytics-build.properties
61+
fabric.properties
62+
63+
### PyCharm Patch ###
64+
# Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721
65+
66+
# *.iml
67+
# modules.xml
68+
# .idea/misc.xml
69+
# *.ipr
70+
71+
# Sonarlint plugin
72+
.idea/sonarlint
73+
74+
75+
# End of https://www.gitignore.io/api/pycharm
76+
*.png

Tool.py

+51-45
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,15 @@
44
file: TorcsTool.py
55
time: 17-6-20
66
"""
7-
from ctypes import cdll, c_int, c_uint8, c_double, c_bool,Structure, POINTER,c_float, sizeof
8-
from itertools import chain
7+
from ctypes import cdll, c_int, c_uint8, c_double, c_bool,Structure, POINTER,c_float, sizeof,create_string_buffer,c_char_p,c_char
98
import numpy as np
109
import time
11-
import sys
1210
import os
1311
from numpy.ctypeslib import ndpointer
1412
import scipy.misc
1513
import scipy
16-
import math
17-
import matplotlib.pyplot as plt
14+
import operator
15+
import glob
1816
dir_path = os.path.dirname(os.path.realpath(__file__))
1917
lib = cdll.LoadLibrary('{}/Torcs_tool.so'.format(dir_path))
2018
STUCK_ANGLE = 0.8
@@ -35,26 +33,32 @@ def clip(lo, x, hi):
3533
else:
3634
return x
3735

38-
3936
class torcs_tool(object):
4037
class _29data(Structure):
4138
_fields_ = [
42-
("angle",
43-
c_float),
44-
("track",
45-
c_float * 19),
46-
("trackPos",
47-
c_float),
48-
("speedX",
49-
c_float),
50-
("speedY",
51-
c_float),
52-
("speedZ",
53-
c_float),
54-
("wheelSpinVel",
55-
c_float * 4),
56-
("rpm",
57-
c_float)
39+
("angle", c_float),
40+
("track", c_float * 19),
41+
("opponents", c_float * 36),
42+
("focus", c_float * 5),
43+
("trackPos", c_float),
44+
("speedX", c_float),
45+
("speedY", c_float),
46+
("speedZ", c_float),
47+
("wheelSpinVel", c_float * 4),
48+
("rpm", c_float),
49+
("damage", c_float),
50+
("curLapTime", c_float),
51+
("lastLapTime", c_float),
52+
("distFromStart", c_float),
53+
("distRaced", c_float),
54+
("fuel", c_float),
55+
("racePos", c_int),
56+
("gear", c_int),
57+
("z", c_float),
58+
("toleft", c_float),
59+
("toright", c_float),
60+
("radius", c_float)
61+
5862
]
5963
class read(Structure):
6064

@@ -85,19 +89,32 @@ class read(Structure):
8589
c_double)]
8690

8791

88-
def __init__(self,grab_shot=False,key=1234):
92+
def __init__(self,grab_shot=False,key=1234,resize = False):
93+
#self.ipcrm(key)
8994
lib.init.argtypes = [c_int]
9095
lib.init(key)
9196
if grab_shot:
9297
self.reserveScreenShotFlag()
9398
self.gear = 1
99+
self.resize = resize
94100
def __str__(self):
95101
return("speed:{} steer:{} gear:{} clutch:{} accel:{} brake:{}"
96102
.format(str(self.speed), str(self.steer), str(self.gear), str(self.clutch), str(self.accel), str(self.brake)))
97103

104+
def ipcrm(self,key):
105+
os.system('ipcrm -M {}'.format(key))
106+
98107
def reserveScreenShotFlag(self):
99108
lib.reserveScreenShotFlag()
100109

110+
def changeTrack(self,track):
111+
lib.setTrack.argtypes = [c_char_p]
112+
lib.setTrack(track)
113+
114+
def changeTrackOk(self,track):
115+
lib.setTrackOk.argtypes = [c_char]
116+
lib.setTrackOk(track)
117+
101118
def getStateCount(self):
102119
return len(self.allData)
103120

@@ -107,22 +124,13 @@ def _29data_size(self):
107124

108125
@property
109126
def get29Data(self):
110-
111127
lib.get29Data.restype = POINTER(self._29data)
112128
x = lib.get29Data().contents
113-
# y = [x.speed_x,x.speed_y,x.speed_z,x.steer,x.brake]
114-
# array = x.track
115-
116-
array = [getattr(x, key[0]) for key in x._fields_]
117-
result = []
118-
for i in array:
119-
if isinstance(i,float):
120-
result.append(i)
121-
else:
122-
result.extend(i)
123-
# array = [i if isinstance(i,float) else chain(i) for i in array]
124-
# result[-8] *= 300
125-
return np.asarray(result,dtype=np.float32)[None,:]
129+
result = {k[0]:np.asarray(getattr(x,k[0])) for k in x._fields_}
130+
result['img'] = self.image
131+
#result['radius'] = self.radius
132+
return result
133+
126134
@property
127135
def allData(self):
128136
lib.getStruct.restype = POINTER(self.read)
@@ -149,7 +157,8 @@ def image(self):
149157
lib.getScreenshot.restype = ndpointer(
150158
dtype=c_uint8, shape=(480, 640, 3))
151159
image = np.flipud(lib.getScreenshot())
152-
image = scipy.misc.imresize(image, [240, 320])
160+
if self.resize:
161+
image = scipy.misc.imresize(image, [240, 320])
153162
return image
154163

155164
def stop(self):
@@ -311,12 +320,9 @@ def angle(self):
311320
import pprint
312321
s = torcs_tool(grab_shot=True)
313322
i = 0
323+
start = time.time()
314324
while True:
315325
# all 29 datas from scr_server
316-
print(s.get29Data)
317-
#s.restart()
318-
#scipy.misc.imsave('/home/zj/Desktop/torcs/{}.png'.format(str(i).zfill(9)),s.image)
319-
i+=1
320-
s.accel=1.
321-
s.steer=1.
322-
time.sleep(1)
326+
data = s.get29Data
327+
print(data)
328+

TorcsTool.cpp

+65-10
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
#include <stdint.h>
99
#include <stdio.h>
1010
#include <stdlib.h>
11-
11+
#include <string.h>
1212
using namespace std;
1313

1414
#define image_width 640
@@ -34,13 +34,37 @@ struct env_to_read{
3434
struct env_to_read_29{
3535
float angle_dqn;
3636
float track_dqn[19];
37+
float opponents[36];
38+
float focus[5];
3739
float track_pos_dqn;
3840
float speed_x_dqn;
3941
float speed_y_dqn;
4042
float speed_z_dqn;
4143
float wheel_dqn[4];
4244
float rpm_dqn;
45+
float damage;
46+
float curLapTime;
47+
float lastLapTime;
48+
float distFromStart;
49+
float distRaced;
50+
float fuel;
51+
int racePos;
52+
int gear;
53+
float z;
54+
float toleft;
55+
float toright;
56+
float radius;
4357
};
58+
//struct env_to_read_29{
59+
// float angle_dqn;
60+
// float track_dqn[19];
61+
// float track_pos_dqn;
62+
// float speed_x_dqn;
63+
// float speed_y_dqn;
64+
// float speed_z_dqn;
65+
// float wheel_dqn[4];
66+
// float rpm_dqn;
67+
//};
4468

4569
struct env_to_write{
4670

@@ -69,7 +93,8 @@ struct shared_use_st
6993
bool is_stuck;
7094
struct env_to_read_29 env_read_29;
7195
bool dqn_ready;
72-
96+
char map_name[100];
97+
char map_ok;
7398
};
7499

75100

@@ -122,13 +147,33 @@ class TorcsTool{
122147
shared->is_finish = false;
123148
shared->is_stuck = false;
124149

125-
shared->env_read_29.angle_dqn = 0;
126-
shared->env_read_29.track_pos_dqn = 0;
127-
shared->env_read_29.speed_x_dqn = 0;
128-
shared->env_read_29.speed_y_dqn = 0;
129-
shared->env_read_29.speed_z_dqn = 0;
130-
shared->env_read_29.rpm_dqn = 0;
131-
shared->dqn_ready = false;
150+
shared->env_read_29.angle_dqn = 0;
151+
shared->env_read_29.track_pos_dqn = 0;
152+
shared->env_read_29.speed_x_dqn = 0;
153+
shared->env_read_29.speed_y_dqn = 0;
154+
shared->env_read_29.speed_z_dqn = 0;
155+
shared->env_read_29.rpm_dqn = 0;
156+
shared->env_read_29.damage = 0;
157+
shared->env_read_29.curLapTime = 0;
158+
shared->env_read_29.lastLapTime = 0;
159+
shared->env_read_29.distFromStart = 0;
160+
shared->env_read_29.distRaced = 0;
161+
shared->env_read_29.fuel = 0;
162+
shared->env_read_29.racePos = 0;
163+
shared->env_read_29.gear = 0;
164+
shared->env_read_29.z = 0;
165+
shared->env_read_29.toleft = 0;
166+
shared->env_read_29.toright = 0;
167+
shared->env_read_29.radius = 0;
168+
shared->dqn_ready = false;
169+
shared->map_ok = '0';
170+
//shared->env_read_29.angle_dqn = 0;
171+
//shared->env_read_29.track_pos_dqn = 0;
172+
//shared->env_read_29.speed_x_dqn = 0;
173+
//shared->env_read_29.speed_y_dqn = 0;
174+
//shared->env_read_29.speed_z_dqn = 0;
175+
//shared->env_read_29.rpm_dqn = 0;
176+
//shared->dqn_ready = false;
132177

133178
// printf("\n********** Memory sharing started, attached at %X **********\n", shm);
134179
}
@@ -147,7 +192,14 @@ class TorcsTool{
147192
void clearHitWall(){shared->is_hit_wall = false;}
148193
void clearFinish(){shared->is_finish = false;}
149194
void clearStuck(){shared->is_stuck = false;}
150-
195+
void change_map(char* map){
196+
//int len = sizeof(map) / sizeof(char);
197+
//strncpy(shared->map_name,len);
198+
strcpy(shared->map_name,map);
199+
}
200+
void change_map_ok(char map_o){
201+
shared->map_ok = map_o;
202+
}
151203
bool isHitWall(){return shared->is_hit_wall;}
152204
bool isFinish(){return shared->is_finish;}
153205
bool isStuck(){
@@ -226,6 +278,9 @@ extern "C"{
226278

227279
void setBrake(double _brake){ torcsTool->setBrake(_brake);}
228280

281+
void setTrack(char* track_name){ torcsTool->change_map(track_name);}
282+
void setTrackOk(char track_ok){ torcsTool->change_map_ok(track_ok);}
283+
229284
double getTrackAngle(){torcsTool->getTrackAngle();}
230285

231286
bool isHitWall(){torcsTool->isHitWall();}

__init__.py

+1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
from . import torcs_env
22
from . import Tool
3+
from . import constant

constant.py

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
from collections import defaultdict as dict
2+
track_category_name = dict(list)
3+
all_track_names = []
4+
with open(__file__.replace('constant.py','track_f.txt')) as f:
5+
for line in f:
6+
line = line.strip()
7+
track_path , _track_category , _track_name = line.split('\t')
8+
all_track_names.append(track_path)
9+
track_category_name[_track_category].append(_track_name)
10+
category = list(track_category_name.keys())

0 commit comments

Comments
 (0)