@@ -64,7 +64,7 @@ def cal_observation_sigma(d):
64
64
65
65
def calc_rotational_matrix (angle ):
66
66
67
- Rt = np .matrix ([[math .cos (angle ), - math .sin (angle ), 0 ],
67
+ Rt = np .array ([[math .cos (angle ), - math .sin (angle ), 0 ],
68
68
[math .sin (angle ), math .cos (angle ), 0 ],
69
69
[0 , 0 , 1.0 ]])
70
70
return Rt
@@ -92,7 +92,7 @@ def calc_edge(x1, y1, yaw1, x2, y2, yaw2, d1,
92
92
sig1 = cal_observation_sigma (d1 )
93
93
sig2 = cal_observation_sigma (d2 )
94
94
95
- edge .omega = np .linalg .inv (Rt1 * sig1 * Rt1 .T + Rt2 * sig2 * Rt2 .T )
95
+ edge .omega = np .linalg .inv (Rt1 @ sig1 @ Rt1 .T + Rt2 @ sig2 @ Rt2 .T )
96
96
97
97
edge .d1 , edge .d2 = d1 , d2
98
98
edge .yaw1 , edge .yaw2 = yaw1 , yaw2
@@ -127,20 +127,20 @@ def calc_edges(xlist, zlist):
127
127
angle1 , phi1 , d2 , angle2 , phi2 , t1 , t2 )
128
128
129
129
edges .append (edge )
130
- cost += (edge .e .T * edge .omega * edge .e )[0 , 0 ]
130
+ cost += (edge .e .T @ ( edge .omega ) @ edge .e )[0 , 0 ]
131
131
132
132
print ("cost:" , cost , ",nedge:" , len (edges ))
133
133
return edges
134
134
135
135
136
136
def calc_jacobian (edge ):
137
137
t1 = edge .yaw1 + edge .angle1
138
- A = np .matrix ([[- 1.0 , 0 , edge .d1 * math .sin (t1 )],
138
+ A = np .array ([[- 1.0 , 0 , edge .d1 * math .sin (t1 )],
139
139
[0 , - 1.0 , - edge .d1 * math .cos (t1 )],
140
140
[0 , 0 , - 1.0 ]])
141
141
142
142
t2 = edge .yaw2 + edge .angle2
143
- B = np .matrix ([[1.0 , 0 , - edge .d2 * math .sin (t2 )],
143
+ B = np .array ([[1.0 , 0 , - edge .d2 * math .sin (t2 )],
144
144
[0 , 1.0 , edge .d2 * math .cos (t2 )],
145
145
[0 , 0 , 1.0 ]])
146
146
@@ -154,13 +154,13 @@ def fill_H_and_b(H, b, edge):
154
154
id1 = edge .id1 * STATE_SIZE
155
155
id2 = edge .id2 * STATE_SIZE
156
156
157
- H [id1 :id1 + STATE_SIZE , id1 :id1 + STATE_SIZE ] += A .T * edge .omega * A
158
- H [id1 :id1 + STATE_SIZE , id2 :id2 + STATE_SIZE ] += A .T * edge .omega * B
159
- H [id2 :id2 + STATE_SIZE , id1 :id1 + STATE_SIZE ] += B .T * edge .omega * A
160
- H [id2 :id2 + STATE_SIZE , id2 :id2 + STATE_SIZE ] += B .T * edge .omega * B
157
+ H [id1 :id1 + STATE_SIZE , id1 :id1 + STATE_SIZE ] += A .T @ edge .omega @ A
158
+ H [id1 :id1 + STATE_SIZE , id2 :id2 + STATE_SIZE ] += A .T @ edge .omega @ B
159
+ H [id2 :id2 + STATE_SIZE , id1 :id1 + STATE_SIZE ] += B .T @ edge .omega @ A
160
+ H [id2 :id2 + STATE_SIZE , id2 :id2 + STATE_SIZE ] += B .T @ edge .omega @ B
161
161
162
- b [id1 :id1 + STATE_SIZE , 0 ] += (A .T * edge .omega * edge .e )
163
- b [id2 :id2 + STATE_SIZE , 0 ] += (B .T * edge .omega * edge .e )
162
+ b [id1 :id1 + STATE_SIZE ] += (A .T @ edge .omega @ edge .e )
163
+ b [id2 :id2 + STATE_SIZE ] += (B .T @ edge .omega @ edge .e )
164
164
165
165
return H , b
166
166
@@ -178,21 +178,21 @@ def graph_based_slam(x_init, hz):
178
178
for itr in range (MAX_ITR ):
179
179
edges = calc_edges (x_opt , zlist )
180
180
181
- H = np .matrix ( np . zeros ((n , n ) ))
182
- b = np .matrix ( np . zeros ((n , 1 ) ))
181
+ H = np .zeros ((n , n ))
182
+ b = np .zeros ((n , 1 ))
183
183
184
184
for edge in edges :
185
185
H , b = fill_H_and_b (H , b , edge )
186
186
187
187
# to fix origin
188
188
H [0 :STATE_SIZE , 0 :STATE_SIZE ] += np .identity (STATE_SIZE )
189
189
190
- dx = - np .linalg .inv (H ). dot ( b )
190
+ dx = - np .linalg .inv (H ) @ b
191
191
192
192
for i in range (nt ):
193
- x_opt [0 :3 , i ] += dx [i * 3 :i * 3 + 3 , 0 ]
193
+ x_opt [0 :3 , i ] += dx [i * 3 :i * 3 + 3 ,0 ]
194
194
195
- diff = dx .T . dot ( dx )
195
+ diff = dx .T @ dx
196
196
print ("iteration: %d, diff: %f" % (itr + 1 , diff ))
197
197
if diff < 1.0e-5 :
198
198
break
@@ -203,7 +203,7 @@ def graph_based_slam(x_init, hz):
203
203
def calc_input ():
204
204
v = 1.0 # [m/s]
205
205
yawrate = 0.1 # [rad/s]
206
- u = np .matrix ([ v , yawrate ]).T
206
+ u = np .array ([[ v , yawrate ] ]).T
207
207
return u
208
208
209
209
@@ -212,7 +212,7 @@ def observation(xTrue, xd, u, RFID):
212
212
xTrue = motion_model (xTrue , u )
213
213
214
214
# add noise to gps x-y
215
- z = np .matrix ( np . zeros ((0 , 4 ) ))
215
+ z = np .zeros ((0 , 4 ))
216
216
217
217
for i in range (len (RFID [:, 0 ])):
218
218
@@ -224,13 +224,13 @@ def observation(xTrue, xd, u, RFID):
224
224
if d <= MAX_RANGE :
225
225
dn = d + np .random .randn () * Qsim [0 , 0 ] # add noise
226
226
anglen = angle + np .random .randn () * Qsim [1 , 1 ] # add noise
227
- zi = np .matrix ([dn , anglen , phi , i ])
227
+ zi = np .array ([dn , anglen , phi , i ])
228
228
z = np .vstack ((z , zi ))
229
229
230
230
# add noise to input
231
231
ud1 = u [0 , 0 ] + np .random .randn () * Rsim [0 , 0 ]
232
232
ud2 = u [1 , 0 ] + np .random .randn () * Rsim [1 , 1 ]
233
- ud = np .matrix ([ ud1 , ud2 ]).T
233
+ ud = np .array ([[ ud1 , ud2 ] ]).T
234
234
235
235
xd = motion_model (xd , ud )
236
236
@@ -239,15 +239,15 @@ def observation(xTrue, xd, u, RFID):
239
239
240
240
def motion_model (x , u ):
241
241
242
- F = np .matrix ([[1.0 , 0 , 0 ],
242
+ F = np .array ([[1.0 , 0 , 0 ],
243
243
[0 , 1.0 , 0 ],
244
244
[0 , 0 , 1.0 ]])
245
245
246
- B = np .matrix ([[DT * math .cos (x [2 , 0 ]), 0 ],
246
+ B = np .array ([[DT * math .cos (x [2 , 0 ]), 0 ],
247
247
[DT * math .sin (x [2 , 0 ]), 0 ],
248
248
[0.0 , DT ]])
249
249
250
- x = F * x + B * u
250
+ x = F @ x + B @ u
251
251
252
252
return x
253
253
@@ -270,8 +270,8 @@ def main():
270
270
])
271
271
272
272
# State Vector [x y yaw v]'
273
- xTrue = np .matrix ( np . zeros ((STATE_SIZE , 1 ) ))
274
- xDR = np .matrix ( np . zeros ((STATE_SIZE , 1 ))) # Dead reckoning
273
+ xTrue = np .zeros ((STATE_SIZE , 1 ))
274
+ xDR = np .zeros ((STATE_SIZE , 1 )) # Dead reckoning
275
275
276
276
# history
277
277
hxTrue = xTrue
@@ -299,17 +299,17 @@ def main():
299
299
300
300
plt .plot (RFID [:, 0 ], RFID [:, 1 ], "*k" )
301
301
302
- plt .plot (np . array ( hxTrue [0 , :]) .flatten (),
303
- np . array ( hxTrue [1 , :]) .flatten (), "-b" )
304
- plt .plot (np . array ( hxDR [0 , :]) .flatten (),
305
- np . array ( hxDR [1 , :]) .flatten (), "-k" )
306
- plt .plot (np . array ( x_opt [0 , :]) .flatten (),
307
- np . array ( x_opt [1 , :]) .flatten (), "-r" )
302
+ plt .plot (hxTrue [0 , :].flatten (),
303
+ hxTrue [1 , :].flatten (), "-b" )
304
+ plt .plot (hxDR [0 , :].flatten (),
305
+ hxDR [1 , :].flatten (), "-k" )
306
+ plt .plot (x_opt [0 , :].flatten (),
307
+ x_opt [1 , :].flatten (), "-r" )
308
308
plt .axis ("equal" )
309
309
plt .grid (True )
310
310
plt .title ("Time" + str (time )[0 :5 ])
311
311
plt .pause (1.0 )
312
312
313
313
314
314
if __name__ == '__main__' :
315
- main ()
315
+ main ()
0 commit comments