
Lokho Okwenziwa Yile Projekthi
self-driving-car iyisifaniso esincane sokushayela ngokuzenzakalelayo, esibhalwe nge-JavaScript evamile. Inethiwekhi encane ye-neural ifunda ngokuziphendukela kwemvelo ukushayela emgwaqeni omkhulu ogobile onemizila emithathu, igcine umzila wayo, ibhuleke uma kunethrafikhi, isebenzise amasignali, idlule izimoto ezihamba kancane, bese ibuyela kwesokudla lapho kufanele.
Akekho umshayeli oyisibonelo obonisa ukuziphatha okulungile. Kunalokho, isizukulwane ngasinye sithumela inani lama-neural network emgwaqeni ofanayo. Ama-network ahamba ibanga elide kakhulu athola amaphuzu aphezulu okusebenza futhi abe ngabazali besizukulwane esilandelayo.
Le projekthi inemigqa ecishe ibe ngu-1,300 yamamojula e-ES ahlanganisa umgwaqo, i-vehicle physics, ukubona, ithrafikhi, i-neural network, i-genetic algorithm, umhleli, ukudweba, kanye nesixhumi esibonakalayo somsebenzisi. Ayikho im依encazelo yesikhathi sokusebenza, futhi amamojula afanayo esifaniso asebenza esipheqululini naku-Node.js.
Ungavula i-demo esebenzayo ukuze ubuke umshayeli oqeqeshwe kusengaphambili, uguqule inani lama-network esipheqululini, noma uzishayele imoto ngokwakho.
Indlela Uhlelo Lokushayela Olusebenza Ngayo
Isifaniso siqhubekela ngesivinini esinqunyiwe sezinyathelo ezingu-60 ngomzuzwana. Esinyathelweni ngasinye, imoto ihlola imizila eseduze, iguqule okuphawuliwe kube okokufaka okungu-19 kwe-neural network, bese ikhiqiza imiphumela emibili: umyalo we-pedal kanye nomzila oceliwe.
Ukubona Ne-Neural Network
I-network ayicubunguli amaphikseli ekhamera noma imisebe eluhlaza yamabanga. Ithola ulwazi oluhlelekile olufana nalokho i-perception stack engakunikeza umhleli wokushayela:
- Ukuthi imizila yesokunxele, owamanje, nowesokudla ikhona yini.
- Imoto eseduze kakhulu ngaphambili nangemuva kumzila ngamunye ofanele.
- Ukuthi igebe ngalinye livaleka ngokushesha kangakanani.
- Ijubane lamanje lemoto efundayo.
- Ijika elibukhali kakhulu kumamitha angu-100 alandelayo.
- Isimo samanje somhleli wokushintsha umzila.
Isakhiwo ngu-19 · 12 · 8 · 2, sisebenzisa ama-activation e-tanh, futhi sinezisindo ezingu-362. Omunye umphumela ulawula i-pedal. Omunye ukhetha umzila: inani elingaphezu kuka-+0.5 licela umzila ongakwesokunxele, kanti inani elingaphansi kuka--0.5 licela umzila ongakwesokudla.
Umhleli Nemodeli Yemoto
I-neural network inquma ukuthi nini futhi kuphi ukuhamba, kodwa ayiqondisi ngokuqondile. Umhleli obhalwe ngesandla uguqula isicelo somzila sibe yisenzo esiphephile nesibushelelezi. Ikhombisa isignali imizuzwana engu-0.7, ihlole umzila okuqondiswe kuwo, ilandele i-quintic S-curve imizuzwana engu-2.6, bese isebenzisa ukuqondisa kwe-pure-pursuit ukulandela indlela ehleliwe.
Uma enye imoto ilingana nemoto noma isizongena endaweni yayo engabonakali, umhleli uyaqhubeka nokukhanyisa isignali futhi ulinde ukuthi igebe livuleke. Ukudedela isicelo ngesikhathi sesignali kukhansela leso senzo.
Imoto ngokwayo isebenzisa i-kinematic bicycle model ngamayunithi e-SI. Amapharamitha ayo afana nemoto yomndeni i-hatchback: ubude obungu-4.4 wamamitha, 0 kuya ku-100 km/h ngemizuzwana engu-9.8, isivinini esiphezulu esingu-115 km/h, kanye nokubhuleka okufika ku-8 m/s². Ukubambelela okutholakalayo emakhoneni kunquma ukuthi ingathatha ijika ngokushesha kangakanani.
Ithrafikhi, Ukusebenza, Nokuziphendukela Kwemvelo
Ithrafikhi yangemuva ilandela i-Intelligent Driver Model. Izimoto zinezivinini ezifunwayo eziphakathi kuka-61 no-94 km/h, zidlula kwesokunxele, zibuyele kwesokudla ngemva kokudlula, zisebenzise isignali ngaphambi kokushintsha umzila, futhi zisabele emotweni efundayo.
Amaphuzu okusebenza ngokuyinhloko ayinani lamamitha ahanjiwe. Imoto ilahlekelwa amaphuzu angu-300 uma iphahlazeka noma ibanjwa ulayini ohamba kancane oshanela umgwaqo. Iphinde ilahlekelwe amamitha amane ngomzuzwana ngamunye ewuchitha emzileni wesokunxele lapho umzila ongakwesokudla ukhululekile ngokusobala. Awukho umvuzo oqondile wokudlula; ukudlula kuba wusizo ngoba kwenza imoto ihambe ibanga elide.
Ukuziphendukela kwemvelo kusebenzisa amasu amane amakhulu:
- Elitism: ama-network amane ahamba phambili adluliselwa engashintshiwe ekuqeqeshweni komugqa womyalo.
- Tournament selection: ama-network anamandla anethuba elikhulu lokuba ngabazali.
- BLX-0.25 crossover: izisindo zabazali zixutshwa ukuze kwakhiwe inzalo.
- Gaussian mutation: izinga nobukhulu bokuguquka kuyehla ngesigamu sokuphila sezizukulwane ezingu-40.
Ukufaka Nokulungisa Endaweni
Yenza i-clone ye-repository bese uqala i-static server yayo yasendaweni:
git clone https://github.com/Stxqq/self-driving-car.git
cd self-driving-car
npm run serve
Umyalo we-serve uqala i-Python HTTP server ku-port 5101. Vula i-http://localhost:5101 esipheqululini sakho.
Azikho izipakheji ezidinga ukufakwa. Noma iyiphi i-static web server ingasingatha le projekthi, kodwa ukuvula ikhasi ngokuqondile nge-file:// ngeke kusebenze ngoba iziphequluli zikhawulela amamojula e-ES kulowo mongo.
Kudingeka i-Node.js 22 noma entsha ukuze kusetshenziswe izikripthi zokuhlola nezomugqa womyalo. Qalisa iqoqo lokuhlola ngalo:
npm test
Ukusebenzisa Isixhumi Esibonakalayo Sesiphequluli
Buka Umshayeli Oqeqeshwe Kusengaphambili
Sebenzisa ukubuka ukuze ubuke i-network ethunyelwe ishayela phakathi kwethrafikhi. Ikhasi libonisa okokufaka kwayo, imiphumela, umzila ohleliwe, isimo sokushintsha umzila, kanye nezibalo zemoto. Iribhoni eliluhlaza limele indlela ekhiqizwe umhleli.
Shayela Ngesandla
Kumodi ye-Drive, uthatha indawo ye-neural network kodwa ugcine umhleli ofanayo. Imoto iqala i-cruise control isethwe ku-70 km/h.
- Bamba u-
↑ukuze ukhuphule isivinini esibekiwe. - Cindezela u-
↓ukuze ubhuleke futhi wehlise isivinini esibekiwe. - Cindezela u-
←ukuze ucele ukushintshela emzileni wesokunxele. - Cindezela u-
→ukuze ucele ukushintshela emzileni wesokudla.
Ikhadi le-network liyaqhubeka libonisa lokho ubuchopho obuqeqeshwe kusengaphambili obebuzokwenza, okwenza le modi ibe wusizo ekuqhathaniseni izinqumo zakho nezinqumo zabo.
Qeqesha Esipheqululini
Imodi yokuqeqesha iqala ngezimoto ezingu-60 ezinesisindo senethiwekhi esikhethwe ngokungahleliwe. Zonke izimoto zabelana ngomgwaqo owodwa phakathi nesizukulwane, futhi ithrafikhi ingena kancane phakathi kwezizukulwane zokuqala ezingu-15. Imijikelezo yokuqala iqala ngemizuzwana engu-45. Uma imoto isinda kuze kube sekupheleni, imijikelezo elandelayo ikhula ngengxenye kuze kufinyelele ubude obukhulu bemizuzu emihlanu.
Ukuqeqesha esipheqululini kuthola ngokushesha ukuzigcina emzileni nokulandela, kodwa ukudlula kunzima kakhulu. Ukuhlolwa okuchazwe yiphrojekthi kwathola ukuthi izizukulwane ezakhiwe ngesisindo esingahleliwe ngokuvamile zazenza izinguquko zomzila ezingu-0.1 kuya ku-0.5 ngekhilomitha kuze kufike esizukulwaneni se-15. Umshayeli wokuqala oqeqeshwe kusengaphambili wayedinga cishe izizukulwane ezingu-170, enabantu abangu-200, ngaphambi kokuba izinguquko zomzila zibe wusizo.
Khetha From pretrained uma ufuna ukuguqula kancane ubuchopho obufakiwe kunokuba uqale ngezisindo ezingahleliwe. Ubuchopho obuqeqeshwe ekhasini bungathunyelwa ngaphandle njenge-JSON bese bulayishwa kamuva kusetshenziswa isilawuli se-Import.
Ukuqeqesha Ngomugqa Womyalo
Ukuqeqesha ngomugqa womyalo kwenzeka ngaphandle kwesibonisi kusetshenziswa imicu yabasebenzi. Isibonelo esilandelayo siqeqesha inani lamanethiwekhi angu-120 ngezizukulwane ezingu-10, sihlola inethiwekhi ngayinye emigwaqweni emithathu enembewu ebekiwe, ngeziqephu zemizuzwana engu-60:
node scripts/train.mjs --generations 10 --population 120 --seeds 3 --seconds 60
Ngokuzenzakalelayo, ubuchopho obumphumela bubhalwa ku-runs/brain.json. Lokhu kugcina izivivinyo zihlukene nenethiwekhi efakiwe ku-src/brains/pretrained.json.
Umqeqeshi ubika izibalo ezifana nebanga elihamba phambili nelimaphakathi, inani lezimoto ezisindile, izinga lokuguqulwa, nesikhathi esidlulile. Isizukulwane esingu-zero singase sibe nezimoto ezisinda sonke isiqephu esifushane ngoba umhleli uzigcina zigxile emizileni yazo. Ngakho-ke inqubekelaphambili ivame ukubonakala kalula ekukhuleni kwesilinganiso sabantu kunomphumela owodwa ohamba phambili.
Izinketho Zokuqeqesha Ezilusizo
--densityishintsha ubuningi bethrafikhi.--resumeiqala ngobuchopho obusendleleni ecaciswe ngu---outfuthi isebenzisa ukuguqulwa okuthambile.--generationsilawula inani lemijikelezo yokuziphendukela kwemvelo.--populationilawula ukuthi zingaki izingqondo ezihlolwayo esizukulwaneni ngasinye.--seedsilawula ukuthi kusetshenziswa izimbewu zomgwaqo ezingaki.--secondsibeka ubude besiqephu ngasinye.
Inqubo yokuqeqesha esetshenziselwa ubuchopho obufakiwe ibhalwe ku-scripts/curriculum.sh. Iqala ngeziqephu zemizuzu emibili kuthrafikhi ephelele, iye eziqephuni zemizuzu emihlanu emigwaqweni eminingi, bese iqeda ngesigaba sokulungisa kahle sokugcina kwesokudla. Ngokwamadokhumenti ephrojekthi, lolu hlelo lwathatha cishe ihora kukhompuyutha ephathekayo enama-core angu-14.
Ukuhlola Ubuchopho Obuqeqeshiwe
Ukuhlola kukala ubuchopho emigwaqweni enqunywe kusengaphambili obungazange buyibone ngesikhathi sokuqeqeshwa. Qalisa umhloli ngohlu lwezimbewu zomgwaqo:
node scripts/evaluate.mjs --seeds 9001,9002,9003,9004,9005
Umphumela ubika ibanga, isikhathi esidlulile, isivinini esimaphakathi, izinguquko zomzila, nokuthi uhambo ngalunye lwaphela yini ngoba isikhathi saphela noma imoto yashayisana. Uphinde ubale amanani ahlanganisiwe afana nebanga elisho okumaphakathi kanye nebanga eliphakathi nendawo.
Ukuze uhlole inethiwekhi ethunyelwe ngaphandle noma esanda kuqeqeshwa esikhundleni sobuchopho obufakiwe, dlulisa ifayela layo le-JSON usebenzisa i---brain:
node scripts/evaluate.mjs --brain runs/brain.json --seeds 9001,9002,9003
Imiphumela esemthethweni ingakhiqizwa kabusha kanje:
npm run evaluate -- --write
Lo myalo ubhala scripts/results.json, nayo efundwa yisixhumi esibonakalayo sesiphequluli.
Ukuqonda Imiphumela Eshicilelwe
Inethiwekhi efakiwe enezisindo ezingu-362 yahlolwa imizuzu emihlanu ezimbewini ezingu-30 ezazingasetshenziswanga ekuqeqesheni, kuthrafikhi ephelele. Yathola ibanga elisho okumaphakathi elingu-6.90 km, eliphakathi nendawo elingu-7.23 km, nesivinini esimaphakathi esingu-87 km/h. Uhambo olungu-28 kwezingu-30 lwalusasebenza ngemva kwemizuzu emihlanu, futhi imoto yayenza izinguquko zomzila ezingu-5.1 ngekhilomitha ngokwesilinganiso.
Iphrojekthi iqhathanisa lolu hlelo nenguqulo yangaphambilini eyayiqondisa ngokuqondile isebenzisa izinzwa zemisebe ezingu-14. Leyo nethiwekhi endala yenza isilinganiso sebanga esingu-4.05 km nesivinini esingu-56 km/h, kanti uhambo olungu-20 kwezingu-30 lwalusasebenza ngemva kwemizuzu emihlanu. Ukuqhathanisa akusona isilinganiso esilawulwayo ngoba imodeli yethrafikhi nayo yashintsha, kodwa kukhombisa ukuthi kungani ukuhlukanisa izinqumo ezifundiwe nokuqondisa okuhleliwe kwenza ukudlula kube lula ukukuthola.
Inethiwekhi ikhetha iphedali nomzila okuqondiswe kuwo; umhleli uphatha ukusayina, ukuhlola izikhala, nokuqondisa okushelelayo.
Izeluleko Ezithuthukile
Sebenzisa Izimbewu Eziningi Ukuze Unciphise Ukufunda Ngokweqile
Ubuchopho obusebenza kahle emgwaqweni owodwa bungahluleka komunye. Khulisa inani lezimbewu zokuqeqesha, bese ugcina izimbewu ezihlukene zokuqinisekisa nezokuhlola kokugcina. Umqeqeshi osebenza ngaphandle kwesibonisi uhlola bonke ubuchopho bodwa emgwaqweni wabo ngoba ithrafikhi isabela emotweni efundayo; lokhu kuvimbela ukuziphatha kwalowo ozobhida ukuthi kushintshe amaphuzu alowo omunye.
Qalisa Kabusha Ngaphambi Kokuqala Phansi
Uma ubuchopho obuqeqeshiwe sebugcina imizila futhi bugwema ithrafikhi, sebenzisa i---resume noma inketho yesiphequluli yokuqeqeshwa kusengaphambili. Ukuqala ngezisindo ezingahleliwe kulungele ukubona ukuziphendukela kwemvelo kusukela ekuqaleni, kodwa ukuziphatha okuyinkimbinkimbi kokudlula kungadinga izizukulwane eziningi kakhulu nabantu abaningi.
Khulisa Ubunzima Kancane Kancane
Landela indlela yohlelo lokuqeqesha lwendawo yokugcina ikhodi: qala ngobude beziqephu obulawulekayo, bese ukhulisa ubude, ukuhlukahluka kwemigwaqo, nokujula kokuhlola. Iziqephu ezinde zinikeza ubufakazi obungcono bokushayela okuqinile, kodwa zenza isizukulwane ngasinye sibize kakhulu.
Gcina Ukuphindaphindeka Okufanayo
Isifaniso sinokuphindaphindeka okufanayo kuze kufike ezinyathelweni zesikhathi ezimisiwe: izimbewu nobuchopho obufanayo kukhiqiza izindlela zokuhamba ezifanayo. Izilawuli zesivinini zisebenzisa izinyathelo eziningi zesifaniso zemizuzwana engu-1/60 kuhlaka ngalunye olubonisiwe, kunokuba zishintshe isinyathelo se-physics. Lokhu kuvumela ukuqeqesha okusheshisiwe ngaphandle kokushintsha umphumela.
Yazi Lapho Ungashintsha Khona Iphrojekthi
src/sim/iqukethe ikhodi yomgwaqo, yemoto, yokubona, yomhleli, yezimoto, yomhlaba, yobuchopho, neyokuziphendukela kwemvelo ngaphandle kokuncika ku-DOM.src/render/iqukethe isigaba se-canvas, ukuboniswa kwenethiwekhi, ukuboniswa kokwakheka komzimba, kanye negrafu.src/ui/iqukethe izikhathi zokubuka, zokuqeqesha, nezokushayela, ukugcinwa kwedatha, kanye nokuphathwa kwekhibhodi.src/brains/iqukethe inethiwekhi eqeqeshwe kusengaphambili.scripts/iqukethe amafayela okuqeqesha, ekharikhulamu, okuhlola, kanye emiphumela.test/iqukethe izivivinyo ze-Node.js, okuhlanganisa nokuhlolwa kokudlalwa kabusha kwedatha engazange isetshenziswe ekuqeqesheni.
Isiphetho
Le phrojekthi ikhombisa ukuthi inethiwekhi encane kakhulu yezinzwa ingafunda kanjani izinqumo zokushayela ezisezingeni eliphezulu lapho umhleli ojwayelekile ephethe ukuqondisa okunembile nokwenza izinguquko zemizila. Qala ngokusebenzisa idemo yesiphequluli, qhathanisa izinqumo ezenziwa umuntu nezale nethiwekhi yezinzwa, bese usebenzisa izikripthi ze-Node.js ukuqeqesha nokuhlola obakho ubuchopho. Ukuqaliswa kwayo okungancikile kwezinye izinhlelo kanye nokulingisa kwayo okunquny deterministically kuyenza ibe isisekelo esisebenzisekayo sokufunda ngokuziphendukela kwemvelo, amamodeli ezimoto, ukuziphatha kwezimoto, nokuhlela.
