-
Notifications
You must be signed in to change notification settings - Fork 0
/
Get_Baxter_Files.lua
198 lines (174 loc) · 6.29 KB
/
Get_Baxter_Files.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
---------------------------------------------------------------------------------------
-- Function : images_Paths(path)
-- Input (Path): path of a Folder which contained jpg images
-- Output : list of the jpg files path
---------------------------------------------------------------------------------------
function images_Paths(Path)
local listImage={}
for file in paths.files(Path) do
-- We only load files that match the extension
if file:find('jpg' .. '$') then
-- and insert the ones we care about in our table
table.insert(listImage, paths.concat(Path,file))
end
end
table.sort(listImage)
return listImage
end
---------------------------------------------------------------------------------------
-- Function :
-- Input ():
-- Output ():
---------------------------------------------------------------------------------------
function txt_path(Path)
local txt=nil
for file in paths.files(Path) do
if file:find('txt' .. '$') then
txt=paths.concat(Path,file)
end
end
return txt
end
---------------------------------------------------------------------------------------
-- Function :
-- Input ():
-- Output ():
---------------------------------------------------------------------------------------
function Get_Folders(Path, including)
local list= {}
local list_txt={}
for file in paths.files(Path) do
if file:find(including) then
Path_Folder= paths.concat(Path,file)
table.insert(list,paths.concat(Path_Folder,"Images"))
table.insert(list_txt, paths.concat(Path_Folder,"robot_joint_states.txt"))
end
end
return list, list_txt
end
function Get_Folders_3D(Path, including, excluding,list)
local list=list or {}
local incl=including or ""
local excl=excluding or "uyfouhjbhytfoughl" -- random motif
for file in paths.files(Path) do
-- We only load files that match 2016 because we know that there are the folder we are interested in
if file:find(incl) and (not file:find(excl)) then
-- and insert the ones we care about in our table
table.insert(list, paths.concat(Path,file))
end
end
return list
end
function txt_path(Path,including)
local including=including or ""
local txt=nil
for file in paths.files(Path) do
if file:find(including..'.txt' .. '$') then
txt=paths.concat(Path,file)
end
end
return txt
end
---------------------------------------------------------------------------------------
-- Function : Get_HeadCamera_HeadMvt(use_simulate_images)
-- Input (use_simulate_images) : boolean variable which say if we use or not simulate images
-- Output (list_head_left): list of the images directories path
-- Output (list_txt): txt list associated to each directories (this txt file contains the grundtruth of the robot position)
---------------------------------------------------------------------------------------
function Get_HeadCamera_HeadMvt(threeD)
local Path
local Paths_Folder={}
local list_txt={}
if threeD=="3D" then
Path="../baxter_representation_learning_3D/simpleData3D"
local Paths=Get_Folders_3D(Path,'record')
for i=1, #Paths do
Paths_Folder=Get_Folders_3D(Paths[i],'recorded','txt',Paths_Folder)
table.insert(list_txt, txt_path(Paths[i],"endpoint_state"))
end
else
Path="../baxter_representation_learning_1D/moreData/"
Paths_Folder, list_txt=Get_Folders(Path,'head_pan')
end
table.sort(list_txt)
table.sort(Paths_Folder)
return Paths_Folder, list_txt
end
---------------------------------------------------------------------------------------
-- Function : tensorFromTxt(path)
-- Input (path) : path of a txt file which contain position of the robot
-- Output (torch.Tensor(data)): tensor with all the joint values (col: joint, lign : indice)
-- Output (labels): name of the joint
---------------------------------------------------------------------------------------
function tensorFromTxt(path)
local data, raw = {}, {}
local rawCounter, columnCounter = 0, 0
local nbFields, labels, _line = nil, nil, nil
for line in io.lines(path) do
local comment = false
if line:sub(1,1)=='#' then
comment = true
line = line:sub(2)
end
rawCounter = rawCounter +1
columnCounter=0
raw = {}
for value in line:gmatch'%S+' do
columnCounter = columnCounter+1
raw[columnCounter] = tonumber(value)
end
-- we check that every row contains the same number of data
if rawCounter==1 then
nbFields = columnCounter
elseif columnCounter ~= nbFields then
error("data dimension for " .. rawCounter .. "the sample is not consistent with previous samples'")
end
if comment then labels = raw else table.insert(data,raw) end
end
return torch.Tensor(data), labels
end
---------------------------------------------------------------------------------------
-- Function : getTruth(txt,use_simulate_images)
-- Input (txt) :
-- Input (use_simulate_images) :
-- Input (arrondit) :
-- Output (truth):
---------------------------------------------------------------------------------------
function getTruth(txt)
local truth={}
local head_pan_indice=2
local tensor, label=tensorFromTxt(txt)
for i=1, (#tensor[{}])[1] do
table.insert(truth, tensor[i][head_pan_indice])
end
return truth
end
function getTruth_3D(txt_joint, nb_part, part)
local x=2
local y=3
local z=4
local tensor, label=tensorFromTxt(txt_joint)
numImages = tensor:size(1)
local list_truth={}
for i=1, numImages do--(#tensor[{}])[1] do
local truth=torch.Tensor(3)
truth[1]=tensor[i][x]
truth[2]=tensor[i][y]
truth[3]=tensor[i][z]
table.insert(list_truth,truth)
end
return list_truth
end
---------------------------------------------------------------------------------------
-- Function : arrondit(value)
-- Input (tensor) :
-- Input (head_pan_indice) :
-- Output (tensor):
---------------------------------------------------------------------------------------
function arrondit(value)
floor=math.floor(value*10)/10
ceil=math.ceil(value*10)/10
if math.abs(value-ceil)>math.abs(value-floor) then result=floor
else result=ceil end
return result
end