Skip to content

Commit 3ac9000

Browse files
committed
works well but it should be clean up
1 parent ea8f35a commit 3ac9000

File tree

1 file changed

+30
-4
lines changed

1 file changed

+30
-4
lines changed

SLAM/iterative_closest_point/iterative_closest_point.py

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -84,10 +84,30 @@
8484
# R = (U*V')';%回転行列の計算
8585
# t = mm - R*ms;%並進ベクトルの計算
8686

87+
def update_homogenerous_matrix(Hin, R, T):
88+
print(R)
89+
90+
H = np.matrix(np.zeros((3, 3))) # translation vector
91+
92+
H[0, 0] = R[0, 0]
93+
H[1, 0] = R[1, 0]
94+
H[0, 1] = R[0, 1]
95+
H[1, 1] = R[1, 1]
96+
H[2, 2] = 1.0
97+
98+
H[0, 2] = T[0, 0]
99+
H[1, 2] = T[1, 0]
100+
101+
if Hin is None:
102+
return H
103+
else:
104+
return Hin * H
105+
87106

88107
def ICP_matching(pdata, data):
89108
R = np.eye(2) # rotation matrix
90109
T = np.zeros((2, 1)) # translation vector
110+
H = None # translation vector
91111

92112
# ICP
93113
EPS = 0.0001
@@ -102,11 +122,10 @@ def ICP_matching(pdata, data):
102122

103123
error = nearest_neighbor_assosiation(pdata, data)
104124
Rt, Tt = SVD_motion_estimation(pdata, data)
105-
print(error)
106125

107126
data = (Rt * data) + Tt
108-
R = R * Rt
109-
T = R * T + Tt
127+
128+
H = update_homogenerous_matrix(H, Rt, Tt)
110129

111130
dError = abs(preError - error)
112131
preError = error
@@ -118,6 +137,12 @@ def ICP_matching(pdata, data):
118137
elif maxIter <= count:
119138
break
120139

140+
R = np.matrix(H[0:2, 0:2])
141+
T = np.matrix(H[0:2, 2])
142+
print(H)
143+
print(R)
144+
print(T)
145+
121146
return R, T
122147

123148

@@ -173,10 +198,11 @@ def main():
173198
# print(pdata)
174199
data = np.matrix(np.vstack((cx, cy)))
175200
# print(data)
201+
odata = data[:, :]
176202

177203
R, T = ICP_matching(pdata, data)
178204

179-
fdata = (R * data) + T
205+
fdata = (R * odata) + T
180206

181207
plt.plot(px, py, ".b")
182208
plt.plot(cx, cy, ".r")

0 commit comments

Comments
 (0)