3D People 浠g爜鍦板浘
IWR6843 3D people tracking 鐨勫畬鏁存暟鎹祦銆佺‖浠舵灦鏋勫拰婧愮爜瀵艰埅锛屼粠闆跺紑濮嬩篃鑳借鎳?
3D People 浠g爜鍦板浘
杩欓〉瑙e喅涓€涓棶棰橈細**鏁版嵁浠庡摢鏉ワ紝鎬庝箞娴侊紝鏈€鍚庡幓鍝?*銆?
涓€銆佸厛鐪嬬‖浠讹細IWR6843 鏈変袱棰楀鐞嗗櫒
IWR6843 鏄竴棰楀崟鑺墖姣背娉㈤浄杈?SoC銆傝姱鐗囧唴閮ㄦ湁涓ら瀹屽叏涓嶅悓鐨勫鐞嗗櫒锛岃窇鍚勮嚜鐨勪唬鐮侊紝閫氳繃鍏变韩鍐呭瓨 + DPM 娑堟伅妗嗘灦浜掗€氥€?
鈹屸攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?
鈹? IWR6843 SoC 鈹?
鈹? 鈹?
鈹? 鈹屸攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹? 鈹屸攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?鈹?
鈹? 鈹? MSS (R4F ARM) 鈹? 鈹? DSS (C674x DSP) 鈹?鈹?
鈹? 鈹? 鈹? 鈹? 鈹?鈹?
鈹? 鈹? 绯荤粺鎺у埗銆丆LI 瑙f瀽 鈹? 鈹? 淇″彿澶勭悊涓诲姏 鈹?鈹?
鈹? 鈹? Tracker (GTRACK) 鈹? 鈹? Range FFT (via HWA) 鈹?鈹?
鈹? 鈹? UART 杈撳嚭 鈹? 鈹? Capon 娉㈡潫褰㈡垚 鈹?鈹?
鈹? 鈹? 鈹? 鈹? CFAR 妫€娴? 鈹?鈹?
鈹? 鈹? mss_main.c 鈹? 鈹? dss_main.c 鈹?鈹?
鈹? 鈹? trackerproc_3d.c 鈹? 鈹? objectdetection.c 鈹?鈹?
鈹? 鈹? pcount3D_cli.c 鈹? 鈹? radarProcess.c 鈹?鈹?
鈹? 鈹斺攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹? 鈹斺攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?鈹?
鈹? 鈹? 鈹? 鈹?
鈹? 鈹斺攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹? 鈹?
鈹? 鈹?DPM (鍒嗗竷寮忓鐞嗙鐞嗗櫒) 鈹?
鈹? 鈹?鍏变韩 L3 RAM 鈹?
鈹? 鈹?
鈹? 鈹屸攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹? 鈹?
鈹? 鈹? RF 鍓嶇 鈫?ADCBuf 鈫?HWA (纭欢鍔犻€熷櫒) 鈹? 鈹?
鈹? 鈹斺攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹? 鈹?
鈹斺攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?MSS = Master SubSystem锛岃窇 TI-RTOS (SYS/BIOS)锛岃礋璐o細鎺у埗娴併€丆LI銆乀racker銆乁ART 杈撳嚭 DSS = Digital Signal SubSystem锛岃窇 TI-RTOS锛岃礋璐o細鎵€鏈夐噸璁$畻锛團FT銆佹尝鏉熷舰鎴愩€丆FAR锛? HWA = Hardware Accelerator锛屼笓鐢ㄧ‖浠跺仛 Range FFT锛岄€熷害鏋佸揩锛岀敱 MSS 渚?DPC 椹卞姩 DPM = Data Processing Manager锛孴I SDK 鎻愪緵鐨勮法 CPU 娑堟伅妗嗘灦
浜屻€佸畬鏁存暟鎹祦锛堜竴甯х殑鐢熷懡鍛ㄦ湡锛?
RF 澶╃嚎鎺ユ敹鍥炴尝
鈹?
鈻?
ADC 閲囨牱 鈫?ADCBuf (鐗囦笂纭欢缂撳啿)
鈹?
鈻?
HWA 纭欢鍔犻€熷櫒
Range FFT (rangeHWA DPU锛岀敱 MSS DPC 瑙﹀彂)
鈹? 杈撳嚭: radar_cube
鈹? shape: [numChirps 脳 numRxAnt 脳 numRangeBins]
鈹? 瀛樻斁鍦? L3 鍏变韩 RAM
鈻?
鈹屸攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?
鈹? DSS: DPC_ObjectDetection_execute() 鈹? 鈫?objectdetection.c:518
鈹? 璋冪敤: DPU_radarProcess_process() 鈹?
鈹? 鈹?
鈹? Step 1: 闈欐€佹潅娉㈡秷闄?(鍧囧€肩浉鍑? 鈹?
鈹? Step 2: Capon 娉㈡潫褰㈡垚 鈹?
鈹? 鈫?range-azimuth 鐑姏鍥? 鈹?
鈹? Step 3: 2D CFAR 妫€娴? 鈹?
鈹? 鏂逛綅瑙掓柟鍚?+ 璺濈鏂瑰悜 鈹?
鈹? 鈫?妫€娴嬪埌鐨勫嘲鍊煎潗鏍? 鈹?
鈹? Step 4: 澶氭櫘鍕掍及璁? 鈹?
鈹? 鈫?姣忎釜鐐圭殑閫熷害 鈹?
鈹? 鈹?
鈹? 杈撳嚭: radarProcessOutput 鈹?
鈹? .pointCloudOut (鐞冨潗鏍囩偣浜? 鈹?
鈹? .heatMapOut (鐑姏鍥? 鈹?
鈹斺攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?
鈹?
鈹?DPM_Report_NOTIFY_DPC_RESULT
鈹?(璺?CPU锛屼粠 DSS 鈫?MSS)
鈻?
鈹屸攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?
鈹? MSS: Pcount3DDemo_handleObjectDetResult鈹? 鈫?mss_main.c:1688
鈹? 鈹?
鈹? 1. SOC_translateAddress() 鏄犲皠 DSS 鍦板潃鈹?
鈹? 2. 鎷疯礉鐐逛簯鍒?MSS 鏈湴 鈹?
鈹? gMmwMssMCB.pointCloudFromDSP[] 鈹?
鈹? 3. 鍘嬬缉缂栫爜 鈫?pointCloudToUart 鈹?
鈹? 4. Semaphore_post(trackerDPUSemHandle) 鈹?
鈹? 5. Semaphore_post(uartTxSemHandle) 鈹?
鈹斺攢鈹€鈹€鈹€鈹€鈹€鈹攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?
鈹? 鈹?
鈻? 鈻?
鈹屸攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹? 鈹屸攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?
鈹?Tracker 浠诲姟鈹? 鈹? UART 鍙戦€佷换鍔? 鈹?
鈹? 鈹? 鈹? 鈹?
鈹?DPU_Tracker 鈹? 鈹?MmwDemo_uartTxTask() 鈹?鈫?mss_main.c:575
鈹?Proc_process鈹? 鈹? 鈹?
鈹? 鈹? 鈹?灏佽 TLV 鏁版嵁鍖? 鈹?
鈹?gtrack_step 鈹? 鈹? [Header] 鈹?
鈹?鈫?鐩爣鍒楄〃 鈹? 鈹? [鐐逛簯 TLV] 鈹?
鈹?鈫?鐩爣绱㈠紩 鈹? 鈹? [鐩爣鍒楄〃 TLV] 鈹?
鈹?鈫?鍦ㄥ満鏍囧織 鈹? 鈹? [鐩爣绱㈠紩 TLV] 鈹?
鈹斺攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹? 鈹斺攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?
鈹?UART
鈻?
Host PC / 涓婁綅鏈?涓夈€佸叧閿暟鎹粨鏋勯€熸煡
姣忎釜绠ご浼犻€掔殑鍒板簳鏄粈涔堢被鍨嬶紵
| 闃舵 | 鏁版嵁缁撴瀯 | 瀛楁 | 璇存槑 |
|---|---|---|---|
| ADC 鍘熷 | uint16_t[] | 鈥? | IQ 浜ら敊锛?6-bit |
| Range FFT 鍚? | radar_cube | [chirp][rx][range] | 澶嶆暟锛屽瓨 L3 |
| DSS 杈撳嚭鐐逛簯 | DPIF_PointCloudSpherical | range, azimuthAngle, elevAngle, velocity | 鐞冨潗鏍囷紝姣忎釜妫€娴嬬偣 |
| 鐐逛簯闄勫姞淇℃伅 | DPIF_PointCloudSideInfo | snr | 淇″櫔姣? |
| DSS鈫扢SS 缁撴灉 | DPC_ObjectDetection_ExecuteResult | .objOut (radarProcessOutput) | DPC 灏佽 |
| Tracker 杈撳叆 | GTRACK_measurementPoint | range, azimuth, elevation, doppler, snr | 鐢辩偣浜戠洿鎺ヨ浆 |
| Tracker 鐩爣 | trackerProc_Target | tid, S[] (鐘舵€佸悜閲? | 鐩爣浣嶇疆+閫熷害 |
| UART TLV | MmwDemo_output_message_header | magicWord, numTLVs, frameNumber | 0x0102...0708 |
鍥涖€佽法 CPU 閫氫俊鏈哄埗锛圖PM锛?
杩欐槸鏈€瀹规槗娣锋穯鐨勫湴鏂广€?
DSS 瀹屾垚涓€甯у鐞?
鈹?
鈹?DPC_ObjectDetection_execute() 杩斿洖
鈹?ptrResult 鎸囧悜 DSS 鍐呭瓨涓殑缁撴灉
鈹?
鈻?DPM 妗嗘灦鑷姩璺ㄦ牳鍙戦€氱煡
鈹?
MSS: Pcount3DDemo_DPC_ObjectDetection_reportFxn()
鈹?case DPM_Report_NOTIFY_DPC_RESULT:
鈹? Pcount3DDemo_handleObjectDetResult(ptrResult)
鈹?
鈻?SOC_translateAddress() 鎶?DSS 鍦板潃杞垚 MSS 鍙闂殑鍦板潃
鈹?
鎷疯礉鏁版嵁鍒?MSS 鏈湴 gMmwMssMCB 缁撴瀯浣?
鈹?
鈻?閫氱煡 DSS 缁撴灉宸叉秷璐癸紝閲婃斁鍐呭瓨
DPM_ioctl(DPC_OBJDET_IOCTL__DYNAMIC_EXECUTE_RESULT_EXPORTED)鍏抽敭鐞嗚В锛欴SS 鍜?MSS 閮藉湪鍚屼竴涓墿鐞嗗湴鍧€绌洪棿鐨勪笉鍚屽垎鍖猴紝浣?CPU 鍚勮嚜鐪嬪埌鐨勮櫄鎷熷湴鍧€涓嶅悓銆俙SOC_translateAddress()` 璐熻矗缈昏瘧銆?
浜斻€乀racker锛圙TRACK锛夊湪鍝噷璺戯紵
Tracker 璺戝湪 MSS锛圧4F锛変笂锛屼笉鍦?DSS銆?
MSS 浠诲姟璋冨害:
MmwDemo_trackerDPUTask() 鈫?mss_main.c:1874
绛?Semaphore(trackerDPUSemHandle)
DPU_TrackerProc_process() 鈫?trackerproc_3d.c:521
鏍煎紡杞崲: DPIF_PointCloudSpherical 鈫?GTRACK_measurementPoint
gtrack_step() 鈫?TI GTRACK 搴擄紙闂簮锛?
杈撳嚭鍐欏叆 gMmwMssMCB.trackerOutput*涓轰粈涔堝湪 MSS 鑰屼笉鏄?DSS锛? DSS 鐨?C674x 鎿呴暱鍚戦噺杩愮畻锛團FT銆佺煩闃碉級銆俆racker 鏄姸鎬佹満 + Kalman 婊ゆ尝锛岄€昏緫鎺у埗澶氾紝鏇撮€傚悎閫氱敤 ARM銆?
鍏€丱penRadar Python 瀹屾暣瀵圭収
Python demo 鏄浉鍚岀畻娉曠殑**绂荤嚎鍙傝€冨疄鐜?*锛屾暟鎹笉鏉ヨ嚜纭欢鑰屾潵鑷綍鍒剁殑 .bin 鏂囦欢銆?
# people_tracking.py 鍚勬楠?鈫?鍥轰欢瀵圭収
# [1] 璇诲彇 ADC 鏁版嵁 + reshape
adc_data = np.fromfile('./data/circle.bin', dtype=np.uint16)
all_data = DCA1000.organize(...) # 鈫?ADCBuf 纭欢缂撳啿
# [2] Range FFT
radar_cube = dsp.range_processing(frame) # 鈫?rangeHWA DPU (HWA 纭欢)
# [3] 闈欐€佹潅娉㈡秷闄?
radar_cube = radar_cube - radar_cube.mean(0) # 鈫?DSS radarProcess 鍐呴儴
# [4] Capon 娉㈡潫褰㈡垚 鈫?鐑姏鍥?
range_azimuth[:,i], beamWeights[:,i] = dsp.aoa_capon(...) # 鈫?RADARDEMO_aoaEst2DCaponBF
# [5] 2D CFAR 妫€娴?
first_pass = dsp.ca_(heatmap_log, axis=0) # 鏂逛綅瑙掓柟鍚?
second_pass = dsp.ca_(heatmap_log.T, axis=0) # 璺濈鏂瑰悜
peaks = first_pass & second_pass # 鈫?RADARDEMO_detectionCFAR
# [6] 澶氭櫘鍕掍及璁?
dopplerEst = np.fft.fft(dopplerFFTInput) # 鈫?DSS DopplerEst 妯″潡
# [7] EKF Tracker
tracker.update_point_cloud(ranges, azimuths, dopplers, snrs)
targetDescr, tNum = tracker.step() # 鈫?gtrack_step() + trackerproc_3d.c
# [8] 鍙鍖?
gtrack_visualize.update_frame(...) # 鈫?UART 鈫?涓婁綅鏈?娉ㄦ剰锛歅ython 涓病鏈?MSS/DSS 鐨勫垎鐣岋紝鎵€鏈変唬鐮佸湪涓€涓繘绋嬮噷椤哄簭鎵ц銆傚浐浠朵腑杩欎釜鍒嗙晫鏄湡瀹炵殑纭欢杈圭晫銆?
涓冦€佹帹鑽愰槄璇昏矾寰勶紙鎸夐毦搴﹂€掑锛?
绗?1 姝ワ細鍏堣窇 Python
鍏堟妸 people_tracking.py 璺戦€氾紝鐞嗚В绠楁硶娴佺▼锛屼笉鐢ㄧ湅浠讳綍 C 浠g爜銆?
绗?2 姝ワ細鐪?DSS 妫€娴嬮摼
璇?objectdetection.c锛岄噸鐐圭湅 DPC_ObjectDetection_execute()锛岀悊瑙?DSP 渚у仛浜嗕粈涔堛€?
绗?3 姝ワ細鐪嬭法鏍告暟鎹祦
璇?mss_main.c 涓殑 handleObjectDetResult()锛岀悊瑙?DPM 濡備綍鎶婄粨鏋滀粠 DSS 浼犲埌 MSS銆?
绗?4 姝ワ細鐪?Tracker
璇?trackerproc_3d.c 鐨?DPU_TrackerProc_process()锛岀悊瑙g偣浜戝浣曞彉鎴愮洰鏍囧垪琛ㄣ€?
鍏€佸叧閿叆鍙f枃浠?
| 鏂囦欢 | 澶勭悊鍣? | 鑱岃矗 |
|---|---|---|
mss_main.c | MSS R4F | 绯荤粺涓绘帶銆佷换鍔¤皟搴︺€佺粨鏋滄帴鏀躲€乁ART 杈撳嚭 |
dss_main.c | DSS C674x | DSP 渚т富鎺с€丏PM 浠诲姟 |
objectdetection.c | DSS C674x | 妫€娴嬮摼 DPC锛氳皟搴︿俊鍙峰鐞? |
radarProcess.c | DSS C674x | Capon 娉㈡潫褰㈡垚 + CFAR 鏍稿績 |
trackerproc_3d.c | MSS R4F | Tracker DPU 灏佽锛岃皟鐢?GTRACK |
people_tracking.py | 鈥? | Python 绔埌绔弬鑰冨疄鐜? |
ekf.py | 鈥? | Python EKF tracker |
涔濄€佸父瑙侀棶棰橀€熺瓟
Q: 鐐逛簯鍦ㄥ摢閲屽舰鎴愶紵
A: DSS 鐨?radarProcess.c 鍐呴儴锛孋apon 娉㈡潫褰㈡垚 + CFAR 涔嬪悗杈撳嚭鐞冨潗鏍囩偣浜戙€傚浐浠跺嚱鏁版槸 DPU_radarProcess_process()锛孭ython 瀵瑰簲 dsp.aoa_capon() + dsp.ca_() 缁勫悎銆?
Q: MSS 鍜?DSS 鎬庝箞浼犳暟鎹紵
A: 閫氳繃 DPM 妗嗘灦 + 鍏变韩 L3 RAM銆侱SS 澶勭悊瀹屾妸缁撴灉鎸囬拡鍐欏叆 DPM buffer锛孌PM 鍙?NOTIFY_DPC_RESULT 娑堟伅缁?MSS锛孧SS 鐢?SOC_translateAddress() 鎶?DSS 鎸囬拡杞垚 MSS 鍙鍦板潃鍚庢嫹璐濇暟鎹€?
Q: Tracker 鐢ㄧ殑鏄粈涔堢畻娉曪紵
A: TI GTRACK锛屾湰璐ㄦ槸 Group Tracking锛屽熀浜庢墿灞曞崱灏旀浖婊ゆ尝锛圗KF锛夈€傛牳蹇冨疄鐜板湪 TI SDK 鐨?gtrack 搴撲腑锛堥棴婧愪簩杩涘埗锛夈€侾ython 鐨?ekf.py 鏄紑婧愮殑姒傚康瀵圭収銆?
Q: UART 杈撳嚭鏍煎紡鏄粈涔堬紵
A: TLV锛圱ype-Length-Value锛夋牸寮忥紝榄旀湳瀛?0x0102 0x0304 0x0506 0x0708 寮€澶淬€傛瘡甯у寘鍚細鐐逛簯 TLV + 鐩爣鍒楄〃 TLV + 鐩爣绱㈠紩 TLV銆?
鍑芥暟绾х簿纭储寮曡锛歔3D People 绮剧‘鐗堝嚱鏁版祦](/docs/learn/3d-people-function-flow)