run_test_b03.py 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551
  1. import os
  2. import sys
  3. sys.path.append(os.path.dirname(os.path.abspath(__file__)) +
  4. "/../../onsite_parking/")
  5. import json
  6. import input.make_map as mp
  7. from planner.hybridastar import planner as planner
  8. from input import make_car
  9. from utils import replay
  10. from utils import map_display as mdp
  11. import matplotlib.pyplot as plt
  12. import numpy as np
  13. def main():
  14. # 输入input文件夹下场景文件
  15. map_path = '../input/B03.json'
  16. mdp.map_display(map_path) # 仅绘制地图
  17. ox, oy,sp,gp = mp.make_map(map_path)
  18. sx, sy, syaw0 = sp['x'], sp['y'], sp['yaw']
  19. C = make_car.C
  20. # 获取目标停车位
  21. park = '7'
  22. gx, gy, gyaw0 = gp[park]['x_end'], gp[park]['y_end'], gp[park]['yaw']
  23. print(gx,gy)
  24. if park == '62'or park == '61':
  25. for i in range(sx - 300, sx + 2700, 1):
  26. ox.append(i)
  27. oy.append(5600)
  28. for i in range(sx + 700, sx + 4200, 1):
  29. ox.append(i)
  30. oy.append(6500)
  31. for i in range(6500, 7700, 1):
  32. ox.append(1000)
  33. oy.append(i)
  34. x = np.linspace(3000, 4500, 500)
  35. y = np.linspace(5600, 5000, 500)
  36. for i in range(len(x)):
  37. ox.append(x[i])
  38. oy.append(y[i])
  39. x = np.linspace(6000, 7800, 500)
  40. y = np.linspace(5000, 5300, 500)
  41. for i in range(len(x)):
  42. ox.append(x[i])
  43. oy.append(y[i])
  44. x = np.linspace(8200, 10500, 500)
  45. y = np.linspace(5720, 7700, 500)
  46. for i in range(len(x)):
  47. ox.append(x[i])
  48. oy.append(y[i])
  49. x = np.linspace(6000, 9200, 500)
  50. y = np.linspace(4050, 4400, 500)
  51. for i in range(len(x)):
  52. ox.append(x[i])
  53. oy.append(y[i])
  54. if park == '60' or park == '59' or park == '58' or park == '57'or park == '56'or park == '55':
  55. for i in range(sx - 300, sx + 2700, 1):
  56. ox.append(i)
  57. oy.append(5600)
  58. for i in range(sx + 700, sx + 4200, 1):
  59. ox.append(i)
  60. oy.append(6500)
  61. for i in range(6500, 7700, 1):
  62. ox.append(1000)
  63. oy.append(i)
  64. x = np.linspace(3000, 4500, 500)
  65. y = np.linspace(5600, 5000, 500)
  66. for i in range(len(x)):
  67. ox.append(x[i])
  68. oy.append(y[i])
  69. x = np.linspace(6000, 9200, 500)
  70. y = np.linspace(5000, 4400, 500)
  71. for i in range(len(x)):
  72. ox.append(x[i])
  73. oy.append(y[i])
  74. x = np.linspace(6000, 7000, 500)
  75. y = np.linspace(4000, 3100, 500)
  76. for i in range(len(x)):
  77. ox.append(x[i])
  78. oy.append(y[i])
  79. if park == '54':
  80. for i in range(sx - 300, sx + 2700, 1):
  81. ox.append(i)
  82. oy.append(5600)
  83. for i in range(sx + 700, sx + 4200, 1):
  84. ox.append(i)
  85. oy.append(6500)
  86. for i in range(6500, 7700, 1):
  87. ox.append(1000)
  88. oy.append(i)
  89. x = np.linspace(3000, 4500, 500)
  90. y = np.linspace(5600, 5000, 500)
  91. for i in range(len(x)):
  92. ox.append(x[i])
  93. oy.append(y[i])
  94. x = np.linspace(6000, 9550, 500)
  95. y = np.linspace(5000, 4500, 500)
  96. for i in range(len(x)):
  97. ox.append(x[i])
  98. oy.append(y[i])
  99. x = np.linspace(6000, 7000, 500)
  100. y = np.linspace(4000, 3100, 500)
  101. for i in range(len(x)):
  102. ox.append(x[i])
  103. oy.append(y[i])
  104. if park == '53' or park == '52':
  105. for i in range(sx - 300, sx + 2700, 1):
  106. ox.append(i)
  107. oy.append(5600)
  108. for i in range(sx + 700, sx + 4200, 1):
  109. ox.append(i)
  110. oy.append(6500)
  111. for i in range(6500, 7700, 1):
  112. ox.append(1000)
  113. oy.append(i)
  114. x = np.linspace(3000, 4500, 500)
  115. y = np.linspace(5600, 5000, 500)
  116. for i in range(len(x)):
  117. ox.append(x[i])
  118. oy.append(y[i])
  119. x = np.linspace(6000, 9900, 500)
  120. y = np.linspace(5000, 5200, 500)
  121. for i in range(len(x)):
  122. ox.append(x[i])
  123. oy.append(y[i])
  124. if park == '51' or park == '50' or park == '49':
  125. for i in range(sx - 300, sx + 2700, 1):
  126. ox.append(i)
  127. oy.append(5600)
  128. for i in range(sx + 700, sx + 4200, 1):
  129. ox.append(i)
  130. oy.append(6500)
  131. for i in range(6500, 7700, 1):
  132. ox.append(1000)
  133. oy.append(i)
  134. x = np.linspace(3000, 4500, 500)
  135. y = np.linspace(5600, 5000, 500)
  136. for i in range(len(x)):
  137. ox.append(x[i])
  138. oy.append(y[i])
  139. x = np.linspace(6000, 9100, 500)
  140. y = np.linspace(5000, 5000, 500)
  141. for i in range(len(x)):
  142. ox.append(x[i])
  143. oy.append(y[i])
  144. # x = np.linspace(6000, 10500, 500)
  145. # y = np.linspace(700, 700, 500)
  146. # for i in range(len(x)):
  147. # ox.append(x[i])
  148. # oy.append(y[i])
  149. x = np.linspace(7000, 7000, 500)
  150. y = np.linspace(3100, 5000, 500)
  151. for i in range(len(x)):
  152. ox.append(x[i])
  153. oy.append(y[i])
  154. x = np.linspace(7000, 8000, 500)
  155. y = np.linspace(3100, 3100, 500)
  156. for i in range(len(x)):
  157. ox.append(x[i])
  158. oy.append(y[i])
  159. if park == '48':
  160. for i in range(sx - 300, sx + 2700, 1):
  161. ox.append(i)
  162. oy.append(5600)
  163. for i in range(sx + 700, sx + 4200, 1):
  164. ox.append(i)
  165. oy.append(6500)
  166. for i in range(6500, 7700, 1):
  167. ox.append(1000)
  168. oy.append(i)
  169. x = np.linspace(3000, 4500, 500)
  170. y = np.linspace(5600, 5000, 500)
  171. for i in range(len(x)):
  172. ox.append(x[i])
  173. oy.append(y[i])
  174. x = np.linspace(6000, 9100, 500)
  175. y = np.linspace(5000, 4400, 500)
  176. for i in range(len(x)):
  177. ox.append(x[i])
  178. oy.append(y[i])
  179. # x = np.linspace(6000, 10500, 500)
  180. # y = np.linspace(700, 700, 500)
  181. # for i in range(len(x)):
  182. # ox.append(x[i])
  183. # oy.append(y[i])
  184. # x = np.linspace(7000, 7000, 500)
  185. # y = np.linspace(3100, 5000, 500)
  186. # for i in range(len(x)):
  187. # ox.append(x[i])
  188. # oy.append(y[i])
  189. x = np.linspace(7000, 10500, 500)
  190. y = np.linspace(3100, 3100, 500)
  191. for i in range(len(x)):
  192. ox.append(x[i])
  193. oy.append(y[i])
  194. if park == '47':
  195. for i in range(sx - 300, sx + 2700, 1):
  196. ox.append(i)
  197. oy.append(5600)
  198. for i in range(sx + 700, sx + 4200, 1):
  199. ox.append(i)
  200. oy.append(6500)
  201. for i in range(6500, 7700, 1):
  202. ox.append(1000)
  203. oy.append(i)
  204. x = np.linspace(3000, 4500, 500)
  205. y = np.linspace(5600, 5000, 500)
  206. for i in range(len(x)):
  207. ox.append(x[i])
  208. oy.append(y[i])
  209. x = np.linspace(6000, 9100, 500)
  210. y = np.linspace(5000, 3100, 500)
  211. for i in range(len(x)):
  212. ox.append(x[i])
  213. oy.append(y[i])
  214. # x = np.linspace(6000, 10500, 500)
  215. # y = np.linspace(700, 700, 500)
  216. # for i in range(len(x)):
  217. # ox.append(x[i])
  218. # oy.append(y[i])
  219. x = np.linspace(7000, 7000, 500)
  220. y = np.linspace(3100, 5000, 500)
  221. for i in range(len(x)):
  222. ox.append(x[i])
  223. oy.append(y[i])
  224. x = np.linspace(7000, 10500, 500)
  225. y = np.linspace(3100, 3100, 500)
  226. for i in range(len(x)):
  227. ox.append(x[i])
  228. oy.append(y[i])
  229. if park == '46' or park == '45':
  230. for i in range(sx - 300, sx + 1900, 1):
  231. ox.append(i)
  232. oy.append(5600)
  233. for i in range(sx + 700, sx + 4200, 1):
  234. ox.append(i)
  235. oy.append(6500)
  236. for i in range(6500, 7700, 1):
  237. ox.append(1000)
  238. oy.append(i)
  239. x = np.linspace(2100, 4500, 500)
  240. y = np.linspace(5600, 5000, 500)
  241. for i in range(len(x)):
  242. ox.append(x[i])
  243. oy.append(y[i])
  244. x = np.linspace(6000, 9100, 500)
  245. y = np.linspace(5000, 5000, 500)
  246. for i in range(len(x)):
  247. ox.append(x[i])
  248. oy.append(y[i])
  249. if park == '44' or park == '43'or park == '42'or park == '41'or park == '40':
  250. for i in range(sx - 300, sx + 1900, 1):
  251. ox.append(i)
  252. oy.append(5600)
  253. for i in range(sx + 700, sx + 4200, 1):
  254. ox.append(i)
  255. oy.append(6500)
  256. for i in range(6500, 7700, 1):
  257. ox.append(1000)
  258. oy.append(i)
  259. x = np.linspace(2100, 4500, 500)
  260. y = np.linspace(5600, 5000, 500)
  261. for i in range(len(x)):
  262. ox.append(x[i])
  263. oy.append(y[i])
  264. x = np.linspace(7000, 10500, 500)
  265. y = np.linspace(3100, 3100, 500)
  266. for i in range(len(x)):
  267. ox.append(x[i])
  268. oy.append(y[i])
  269. x = np.linspace(6000, 10500, 500)
  270. y = np.linspace(5000, 5000, 500)
  271. for i in range(len(x)):
  272. ox.append(x[i])
  273. oy.append(y[i])
  274. x = np.linspace(8500, 8500, 500)
  275. y = np.linspace(3100, 6000, 500)
  276. for i in range(len(x)):
  277. ox.append(x[i])
  278. oy.append(y[i])
  279. if park == '39':
  280. for i in range(sx - 300, sx + 1900, 1):
  281. ox.append(i)
  282. oy.append(5600)
  283. for i in range(sx + 700, sx + 4200, 1):
  284. ox.append(i)
  285. oy.append(6500)
  286. for i in range(6500, 7700, 1):
  287. ox.append(1000)
  288. oy.append(i)
  289. x = np.linspace(2100, 4500, 500)
  290. y = np.linspace(5600, 5000, 500)
  291. for i in range(len(x)):
  292. ox.append(x[i])
  293. oy.append(y[i])
  294. x = np.linspace(7000, 10500, 500)
  295. y = np.linspace(3100, 3100, 500)
  296. for i in range(len(x)):
  297. ox.append(x[i])
  298. oy.append(y[i])
  299. x = np.linspace(6000, 8000, 500)
  300. y = np.linspace(5700, 5700, 500)
  301. for i in range(len(x)):
  302. ox.append(x[i])
  303. oy.append(y[i])
  304. x = np.linspace(7500, 7500, 500)
  305. y = np.linspace(3100, 6000, 500)
  306. for i in range(len(x)):
  307. ox.append(x[i])
  308. oy.append(y[i])
  309. x = np.linspace(7000, 8500, 500)
  310. y = np.linspace(1700, 1700, 500)
  311. for i in range(len(x)):
  312. ox.append(x[i])
  313. oy.append(y[i])
  314. if park == '38':
  315. for i in range(sx - 300, sx + 1900, 1):
  316. ox.append(i)
  317. oy.append(5600)
  318. for i in range(sx + 700, sx + 4200, 1):
  319. ox.append(i)
  320. oy.append(6500)
  321. for i in range(6500, 7700, 1):
  322. ox.append(1000)
  323. oy.append(i)
  324. x = np.linspace(2100, 4500, 500)
  325. y = np.linspace(5600, 5000, 500)
  326. for i in range(len(x)):
  327. ox.append(x[i])
  328. oy.append(y[i])
  329. x = np.linspace(7000, 10500, 500)
  330. y = np.linspace(3100, 3100, 500)
  331. for i in range(len(x)):
  332. ox.append(x[i])
  333. oy.append(y[i])
  334. x = np.linspace(6000, 8000, 500)
  335. y = np.linspace(5700, 5700, 500)
  336. for i in range(len(x)):
  337. ox.append(x[i])
  338. oy.append(y[i])
  339. x = np.linspace(8500, 8500, 500)
  340. y = np.linspace(3100, 6000, 500)
  341. for i in range(len(x)):
  342. ox.append(x[i])
  343. oy.append(y[i])
  344. if park == '37'or park == '36' or park == '35' or park == '34':
  345. for i in range(sx - 300, sx + 1900, 1):
  346. ox.append(i)
  347. oy.append(5600)
  348. for i in range(sx + 700, sx + 4200, 1):
  349. ox.append(i)
  350. oy.append(6500)
  351. for i in range(6500, 7700, 1):
  352. ox.append(1000)
  353. oy.append(i)
  354. x = np.linspace(2100, 4500, 500)
  355. y = np.linspace(5600, 5000, 500)
  356. for i in range(len(x)):
  357. ox.append(x[i])
  358. oy.append(y[i])
  359. x = np.linspace(6000, 9200, 500)
  360. y = np.linspace(4000, 4400, 500)
  361. for i in range(len(x)):
  362. ox.append(x[i])
  363. oy.append(y[i])
  364. if park == '33':
  365. for i in range(sx - 300, sx + 1900, 1):
  366. ox.append(i)
  367. oy.append(5600)
  368. for i in range(sx + 700, sx + 4200, 1):
  369. ox.append(i)
  370. oy.append(6500)
  371. for i in range(6500, 7700, 1):
  372. ox.append(1000)
  373. oy.append(i)
  374. x = np.linspace(2100, 4500, 500)
  375. y = np.linspace(5600, 5000, 500)
  376. for i in range(len(x)):
  377. ox.append(x[i])
  378. oy.append(y[i])
  379. x = np.linspace(6000, 9900, 500)
  380. y = np.linspace(4000, 5200, 500)
  381. for i in range(len(x)):
  382. ox.append(x[i])
  383. oy.append(y[i])
  384. x = np.linspace(9000, 9000, 500)
  385. y = np.linspace(6700, 4000, 500)
  386. for i in range(len(x)):
  387. ox.append(x[i])
  388. oy.append(y[i])
  389. if park == '23' or park == '22' or park == '21':
  390. x = np.linspace(4500, 4500, 500)
  391. y = np.linspace(6000, 5000, 500)
  392. for i in range(len(x)):
  393. ox.append(x[i])
  394. oy.append(y[i])
  395. x = np.linspace(0, 2100, 500)
  396. y = np.linspace(5600, 5600, 500)
  397. for i in range(len(x)):
  398. ox.append(x[i])
  399. oy.append(y[i])
  400. x = np.linspace(0, 1000, 500)
  401. y = np.linspace(3000, 3000, 500)
  402. for i in range(len(x)):
  403. ox.append(x[i])
  404. oy.append(y[i])
  405. x = np.linspace(3500, 3500, 500)
  406. y = np.linspace(3100, 7000, 500)
  407. for i in range(len(x)):
  408. ox.append(x[i])
  409. oy.append(y[i])
  410. x = np.linspace(0, 2100, 500)
  411. y = np.linspace(4000, 4000, 500)
  412. for i in range(len(x)):
  413. ox.append(x[i])
  414. oy.append(y[i])
  415. x = np.linspace(2100, 2100, 100)
  416. y = np.linspace(4600, 5100, 100)
  417. for i in range(len(x)):
  418. ox.append(x[i])
  419. oy.append(y[i])
  420. x = np.linspace(1000, 4000, 500)
  421. y = np.linspace(6600, 6600, 500)
  422. for i in range(len(x)):
  423. ox.append(x[i])
  424. oy.append(y[i])
  425. x = np.linspace(1000, 1000, 100)
  426. y = np.linspace(7700, 6600, 100)
  427. for i in range(len(x)):
  428. ox.append(x[i])
  429. oy.append(y[i])
  430. x = np.linspace(3000, 3500, 100)
  431. y = np.linspace(3100, 3100, 100)
  432. for i in range(len(x)):
  433. ox.append(x[i])
  434. oy.append(y[i])
  435. if park == '20' or park == '19' or park == '18' or park == '17':
  436. x = np.linspace(4500, 4500, 500)
  437. y = np.linspace(6000, 5000, 500)
  438. for i in range(len(x)):
  439. ox.append(x[i])
  440. oy.append(y[i])
  441. if park == '15' or park == '14' or park == '13' or park == '12' or park == '11' or park == '10':
  442. x = np.linspace(4500, 4500, 500)
  443. y = np.linspace(6000, 5000, 500)
  444. for i in range(len(x)):
  445. ox.append(x[i])
  446. oy.append(y[i])
  447. x = np.linspace(3500, 3500, 500)
  448. y = np.linspace(3100, 7000, 500)
  449. for i in range(len(x)):
  450. ox.append(x[i])
  451. oy.append(y[i])
  452. x = np.linspace(0, 2100, 500)
  453. y = np.linspace(5600, 5600, 500)
  454. for i in range(len(x)):
  455. ox.append(x[i])
  456. oy.append(y[i])
  457. if park == '10':
  458. x = np.linspace(0, 2100, 500)
  459. y = np.linspace(4100, 4100, 500)
  460. for i in range(len(x)):
  461. ox.append(x[i])
  462. oy.append(y[i])
  463. x = np.linspace(2100, 2100, 500)
  464. y = np.linspace(4500, 5700, 500)
  465. for i in range(len(x)):
  466. ox.append(x[i])
  467. oy.append(y[i])
  468. x = np.linspace(1000, 4000, 500)
  469. y = np.linspace(6600, 6600, 500)
  470. for i in range(len(x)):
  471. ox.append(x[i])
  472. oy.append(y[i])
  473. x = np.linspace(1000, 1000, 100)
  474. y = np.linspace(7700, 6600, 100)
  475. for i in range(len(x)):
  476. ox.append(x[i])
  477. oy.append(y[i])
  478. x = np.linspace(1000, 3500, 100)
  479. y = np.linspace(3100, 3100, 100)
  480. for i in range(len(x)):
  481. ox.append(x[i])
  482. oy.append(y[i])
  483. if park == '9' or park == '8' or park == '7' or park == '6':
  484. x = np.linspace(4500, 4500, 500)
  485. y = np.linspace(6000, 5000, 500)
  486. for i in range(len(x)):
  487. ox.append(x[i])
  488. oy.append(y[i])
  489. x = np.linspace(3500, 3500, 500)
  490. y = np.linspace(3100, 7000, 500)
  491. for i in range(len(x)):
  492. ox.append(x[i])
  493. oy.append(y[i])
  494. x = np.linspace(0, 2100, 500)
  495. y = np.linspace(5600, 5600, 500)
  496. for i in range(len(x)):
  497. ox.append(x[i])
  498. oy.append(y[i])
  499. x = np.linspace(2100, 2100, 500)
  500. y = np.linspace(4500, 5700, 500)
  501. for i in range(len(x)):
  502. ox.append(x[i])
  503. oy.append(y[i])
  504. x = np.linspace(1000, 4000, 500)
  505. y = np.linspace(6600, 6600, 500)
  506. for i in range(len(x)):
  507. ox.append(x[i])
  508. oy.append(y[i])
  509. x = np.linspace(1000, 1000, 100)
  510. y = np.linspace(7700, 6600, 100)
  511. for i in range(len(x)):
  512. ox.append(x[i])
  513. oy.append(y[i])
  514. x = np.linspace(1000, 3500, 100)
  515. y = np.linspace(3100, 3100, 100)
  516. for i in range(len(x)):
  517. ox.append(x[i])
  518. oy.append(y[i])
  519. if park == '5' or park == '4' or park == '3' or park == '2' or park == '1':
  520. pass
  521. plt.plot(ox, oy, ",k")
  522. plt.show()
  523. # 规划算法
  524. path = planner.hybrid_astar_planning(sx, sy, syaw0, gx, gy, gyaw0, ox, oy, C.XY_RESO, C.YAW_RESO)
  525. # 算法测试结果保存
  526. if not path:
  527. print("Searching failed!")
  528. return
  529. output_dit={
  530. "output_x":path.x,
  531. "output_y": path.y,
  532. "output_yaw": path.yaw,
  533. "output_dir": path.direction,
  534. }
  535. with open(f"../output/result_{map_path.split('/')[-1].split('.json')[0]}_{park}.json", "w") as file:
  536. json.dump(output_dit, file)
  537. # 仿真回放
  538. result_path = f"../output/result_{map_path.split('/')[-1].split('.json')[0]}_{park}.json"
  539. replay.replay(map_path, result_path)
  540. if __name__ == '__main__':
  541. main()