1717R  =  np .diag ([1.0 , np .deg2rad (20.0 )]) **  2 
1818
1919#  Simulation parameter 
20- Q_sim  =  np .diag ([0.3 , np .deg2rad (2.0 )]) **  2 
21- R_sim  =  np .diag ([0.5 , np .deg2rad (10.0 )]) **  2 
20+ Q_SIM  =  np .diag ([0.3 , np .deg2rad (2.0 )]) **  2 
21+ R_SIM  =  np .diag ([0.5 , np .deg2rad (10.0 )]) **  2 
2222OFFSET_YAW_RATE_NOISE  =  0.01 
2323
2424DT  =  0.1   # time tick [s] 
@@ -72,19 +72,18 @@ def normalize_weight(particles):
7272
7373
7474def  calc_final_state (particles ):
75-     xEst  =  np .zeros ((STATE_SIZE , 1 ))
75+     x_est  =  np .zeros ((STATE_SIZE , 1 ))
7676
7777    particles  =  normalize_weight (particles )
7878
7979    for  i  in  range (N_PARTICLE ):
80-         xEst [0 , 0 ] +=  particles [i ].w  *  particles [i ].x 
81-         xEst [1 , 0 ] +=  particles [i ].w  *  particles [i ].y 
82-         xEst [2 , 0 ] +=  particles [i ].w  *  particles [i ].yaw 
80+         x_est [0 , 0 ] +=  particles [i ].w  *  particles [i ].x 
81+         x_est [1 , 0 ] +=  particles [i ].w  *  particles [i ].y 
82+         x_est [2 , 0 ] +=  particles [i ].w  *  particles [i ].yaw 
8383
84-     xEst [2 , 0 ] =  pi_2_pi (xEst [2 , 0 ])
85-     #  print(xEst) 
84+     x_est [2 , 0 ] =  pi_2_pi (x_est [2 , 0 ])
8685
87-     return  xEst 
86+     return  x_est 
8887
8988
9089def  predict_particles (particles , u ):
@@ -235,28 +234,27 @@ def resampling(particles):
235234    pw  =  np .array (pw )
236235
237236    n_eff  =  1.0  /  (pw  @ pw .T )  # Effective particle number 
238-     # print(n_eff) 
239237
240238    if  n_eff  <  NTH :  # resampling 
241239        w_cum  =  np .cumsum (pw )
242240        base  =  np .cumsum (pw  *  0.0  +  1  /  N_PARTICLE ) -  1  /  N_PARTICLE 
243241        resample_id  =  base  +  np .random .rand (base .shape [0 ]) /  N_PARTICLE 
244242
245-         inds  =  []
246-         ind  =  0 
243+         indexes  =  []
244+         index  =  0 
247245        for  ip  in  range (N_PARTICLE ):
248-             while  (ind  <  w_cum .shape [0 ] -  1 ) \
249-                     and  (resample_id [ip ] >  w_cum [ind ]):
250-                 ind  +=  1 
251-             inds .append (ind )
246+             while  (index  <  w_cum .shape [0 ] -  1 ) \
247+                     and  (resample_id [ip ] >  w_cum [index ]):
248+                 index  +=  1 
249+             indexes .append (index )
252250
253251        tmp_particles  =  particles [:]
254-         for  i  in  range (len (inds )):
255-             particles [i ].x  =  tmp_particles [inds [i ]].x 
256-             particles [i ].y  =  tmp_particles [inds [i ]].y 
257-             particles [i ].yaw  =  tmp_particles [inds [i ]].yaw 
258-             particles [i ].lm  =  tmp_particles [inds [i ]].lm [:, :]
259-             particles [i ].lmP  =  tmp_particles [inds [i ]].lmP [:, :]
252+         for  i  in  range (len (indexes )):
253+             particles [i ].x  =  tmp_particles [indexes [i ]].x 
254+             particles [i ].y  =  tmp_particles [indexes [i ]].y 
255+             particles [i ].yaw  =  tmp_particles [indexes [i ]].yaw 
256+             particles [i ].lm  =  tmp_particles [indexes [i ]].lm [:, :]
257+             particles [i ].lmP  =  tmp_particles [indexes [i ]].lmP [:, :]
260258            particles [i ].w  =  1.0  /  N_PARTICLE 
261259
262260    return  particles 
@@ -275,34 +273,34 @@ def calc_input(time):
275273    return  u 
276274
277275
278- def  observation (xTrue , xd , u , rfid ):
276+ def  observation (x_true , xd , u , rfid ):
279277    # calc true state 
280-     xTrue  =  motion_model (xTrue , u )
278+     x_true  =  motion_model (x_true , u )
281279
282280    # add noise to range observation 
283281    z  =  np .zeros ((3 , 0 ))
284282    for  i  in  range (len (rfid [:, 0 ])):
285283
286-         dx  =  rfid [i , 0 ] -  xTrue [0 , 0 ]
287-         dy  =  rfid [i , 1 ] -  xTrue [1 , 0 ]
284+         dx  =  rfid [i , 0 ] -  x_true [0 , 0 ]
285+         dy  =  rfid [i , 1 ] -  x_true [1 , 0 ]
288286        d  =  math .hypot (dx , dy )
289-         angle  =  pi_2_pi (math .atan2 (dy , dx ) -  xTrue [2 , 0 ])
287+         angle  =  pi_2_pi (math .atan2 (dy , dx ) -  x_true [2 , 0 ])
290288        if  d  <=  MAX_RANGE :
291-             dn  =  d  +  np .random .randn () *  Q_sim [0 , 0 ] **  0.5   # add noise 
292-             angle_with_noize  =  angle  +  np .random .randn () *  Q_sim [
289+             dn  =  d  +  np .random .randn () *  Q_SIM [0 , 0 ] **  0.5   # add noise 
290+             angle_with_noize  =  angle  +  np .random .randn () *  Q_SIM [
293291                1 , 1 ] **  0.5   # add noise 
294292            zi  =  np .array ([dn , pi_2_pi (angle_with_noize ), i ]).reshape (3 , 1 )
295293            z  =  np .hstack ((z , zi ))
296294
297295    # add noise to input 
298-     ud1  =  u [0 , 0 ] +  np .random .randn () *  R_sim [0 , 0 ] **  0.5 
299-     ud2  =  u [1 , 0 ] +  np .random .randn () *  R_sim [
296+     ud1  =  u [0 , 0 ] +  np .random .randn () *  R_SIM [0 , 0 ] **  0.5 
297+     ud2  =  u [1 , 0 ] +  np .random .randn () *  R_SIM [
300298        1 , 1 ] **  0.5  +  OFFSET_YAW_RATE_NOISE 
301299    ud  =  np .array ([ud1 , ud2 ]).reshape (2 , 1 )
302300
303301    xd  =  motion_model (xd , ud )
304302
305-     return  xTrue , z , xd , ud 
303+     return  x_true , z , xd , ud 
306304
307305
308306def  motion_model (x , u ):
@@ -331,7 +329,7 @@ def main():
331329    time  =  0.0 
332330
333331    # RFID positions [x, y] 
334-     RFID  =  np .array ([[10.0 , - 2.0 ],
332+     rfid  =  np .array ([[10.0 , - 2.0 ],
335333                     [15.0 , 10.0 ],
336334                     [15.0 , 15.0 ],
337335                     [10.0 , 20.0 ],
@@ -340,53 +338,53 @@ def main():
340338                     [- 5.0 , 5.0 ],
341339                     [- 10.0 , 15.0 ]
342340                     ])
343-     n_landmark  =  RFID .shape [0 ]
341+     n_landmark  =  rfid .shape [0 ]
344342
345343    # State Vector [x y yaw v]' 
346-     xEst  =  np .zeros ((STATE_SIZE , 1 ))  # SLAM estimation 
347-     xTrue  =  np .zeros ((STATE_SIZE , 1 ))  # True state 
348-     xDR  =  np .zeros ((STATE_SIZE , 1 ))  # Dead reckoning 
344+     x_est  =  np .zeros ((STATE_SIZE , 1 ))  # SLAM estimation 
345+     x_true  =  np .zeros ((STATE_SIZE , 1 ))  # True state 
346+     x_dr  =  np .zeros ((STATE_SIZE , 1 ))  # Dead reckoning 
349347
350348    # history 
351-     hxEst  =  xEst 
352-     hxTrue  =  xTrue 
353-     hxDR  =  xTrue 
349+     hist_x_est  =  x_est 
350+     hist_x_true  =  x_true 
351+     hist_x_dr  =  x_dr 
354352
355353    particles  =  [Particle (n_landmark ) for  _  in  range (N_PARTICLE )]
356354
357355    while  SIM_TIME  >=  time :
358356        time  +=  DT 
359357        u  =  calc_input (time )
360358
361-         xTrue , z , xDR , ud  =  observation (xTrue ,  xDR , u , RFID )
359+         x_true , z , x_dr , ud  =  observation (x_true ,  x_dr , u , rfid )
362360
363361        particles  =  fast_slam1 (particles , ud , z )
364362
365-         xEst  =  calc_final_state (particles )
363+         x_est  =  calc_final_state (particles )
366364
367-         x_state  =  xEst [0 : STATE_SIZE ]
365+         x_state  =  x_est [0 : STATE_SIZE ]
368366
369367        # store data history 
370-         hxEst  =  np .hstack ((hxEst , x_state ))
371-         hxDR  =  np .hstack ((hxDR ,  xDR ))
372-         hxTrue  =  np .hstack ((hxTrue ,  xTrue ))
368+         hist_x_est  =  np .hstack ((hist_x_est , x_state ))
369+         hist_x_dr  =  np .hstack ((hist_x_dr ,  x_dr ))
370+         hist_x_true  =  np .hstack ((hist_x_true ,  x_true ))
373371
374372        if  show_animation :  # pragma: no cover 
375373            plt .cla ()
376374            # for stopping simulation with the esc key. 
377375            plt .gcf ().canvas .mpl_connect (
378376                'key_release_event' , lambda  event :
379377                [exit (0 ) if  event .key  ==  'escape'  else  None ])
380-             plt .plot (RFID [:, 0 ], RFID [:, 1 ], "*k" )
378+             plt .plot (rfid [:, 0 ], rfid [:, 1 ], "*k" )
381379
382380            for  i  in  range (N_PARTICLE ):
383381                plt .plot (particles [i ].x , particles [i ].y , ".r" )
384382                plt .plot (particles [i ].lm [:, 0 ], particles [i ].lm [:, 1 ], "xb" )
385383
386-             plt .plot (hxTrue [0 , :], hxTrue [1 , :], "-b" )
387-             plt .plot (hxDR [0 , :], hxDR [1 , :], "-k" )
388-             plt .plot (hxEst [0 , :], hxEst [1 , :], "-r" )
389-             plt .plot (xEst [0 ], xEst [1 ], "xk" )
384+             plt .plot (hist_x_true [0 , :], hist_x_true [1 , :], "-b" )
385+             plt .plot (hist_x_dr [0 , :], hist_x_dr [1 , :], "-k" )
386+             plt .plot (hist_x_est [0 , :], hist_x_est [1 , :], "-r" )
387+             plt .plot (x_est [0 ], x_est [1 ], "xk" )
390388            plt .axis ("equal" )
391389            plt .grid (True )
392390            plt .pause (0.001 )
0 commit comments