← 回作品列表

24GHz 雷達後方感知 Demo

Rear-Awareness Radar Demo

用低成本 24GHz 雷達做室內可展示的「後方接近告警」體驗;以 sensor 可靠範圍為界,靠狀態機與信心值把感測限制轉成穩定、好懂的燈光互動。

radar 雷達24GHzLD2450狀態機Demo 原始碼:私有

問題現場

低成本雷達在 demo 場合最常見的死法,是被講得太滿——好像能高速、精密、逐人追蹤。但把它放到室內現場跑一陣子就會發現:它真正做得的,其實只有一件事——後方某個方向,有沒有東西在靠近。

我要的不是炫技,是一個讓人看了會信、自己講出口也不心虛的後方接近告警。最直覺的做法是把感測器的原始輸出直接接上燈號——我試過,結果畫面一直抖、一直閃,時不時還誤報。看的人要嘛被嚇到,要嘛被那串浮誇的規格帶著誤會。兩種都不是我要的。

最小技術背景

看這頁需要先知道三個詞,其餘用到再說:

  • 24GHz 雷達 / LD2450:用無線電波偵測「附近有沒有目標、在哪個方向、大概多遠」的低成本模組。
  • 狀態機(state machine):把情況分成有限幾種狀態,規定彼此之間怎麼轉換,讓行為穩定可預期。
  • confidence / hold / fade:信心值(這次偵測有多可信)、保持(短暫丟失先別馬上熄)、淡出(漸滅而非瞬滅)——把不穩的原始訊號平滑成順眼的回饋。

系統架構與資料流

所以我在中間多隔了一層。原始偵測不直接點燈,先進一個狀態機,把雜訊和「偵測間歇掉一兩幀」這種事吸收掉,再決定燈要不要亮:

flowchart LR
  RAD["LD2450 雷達"] --> DET["偵測|目標 / 方向 / 距離"]
  DET --> SM["zone state machine|分區 + confidence + hold + fade"]
  SM --> UI["燈效 / UI|穩定的接近告警"]
  SM --> VIZ["PC visualizer|把看不見的狀態可視化"]
  UI --> AUD["觀眾感受到的:穩定告警,而非生硬 raw data"]

關鍵設計決策(含取捨)

決策選了什麼否決的替代為什麼
範圍界定先界定 sensor 可靠範圍,只承諾做得穩的宣稱接近量產等級的全能追蹤否決:建立在不穩的假設上,一到現場就破功給大家看
追蹤精度只做方向分區與接近偵測高速、逐人 identity 追蹤否決:這超出這顆便宜 sensor 撐得住的範圍
訊號處理狀態機 + confidence + hold + fade原始偵測直接驅動燈號否決:會抖、會閃,掉個一兩幀就誤報
設計順序從「想讓觀眾感受到什麼」倒推狀態機從 sensor 規格往前堆功能否決:很容易做出那種炫技、但一跑久就露餡的東西

代表性技術證據

區域狀態機(pseudo-code,示意)

# 不讓「短暫丟失」直接熄燈:用 hold 先撐著,confidence 過門檻才真的算它在(PRESENT)
def step(zone, det):
    if det.confidence >= ENTER_TH:
        zone.state = "PRESENT"; zone.hold = HOLD_FRAMES
    elif zone.hold > 0:
        zone.hold -= 1                 # 才掉一下下,先撐著別熄
    else:
        zone.state = fade(zone.state)  # 撐到真的沒了才慢慢暗,而不是啪一聲消失
    return zone

舉個具體的:假設偵測進來是 [有, 有, 無(掉一幀), 有, 無, 無, 無]。沒有 hold,第三幀就會熄一下、閃給觀眾看;加了 hold/fade 之後,燈號變成 [亮, 亮, 亮, 亮, 亮, 漸滅, 滅]——掉一兩幀撐得住,真的離開了才慢慢暗下去。

踩過的坑

欄位內容
症狀demo 時某方向燈號間歇閃爍、抖動
初判(猜錯)第一個念頭是 sensor 壞了、還是線沒接好
驗證印出原始偵測,發現目標其實還在,只是偵測間歇性掉幀
根因把 raw 偵測直接對應燈號,沒有 hold,掉一幀就熄
修法加入 hold(短暫丟失先維持)與 fade(漸滅),並設 confidence 門檻
預防用「間歇掉幀」的合成序列做回歸,確保燈號不再閃

驗證方式

  • 狀態轉移:用合成事件序列驗證 hold / fade / confidence 門檻的行為。
  • 現場:實際擺最多三個目標同時在場,看方向分區準不準、誤報多不多。
  • 整合:JS 前端與 Python bridge / dashboard / harness 測試。
  • 驗收標準:室內 demo 燈號穩定、不抖、不誤報,且不宣稱高速精密追蹤。

可複製 SOP:做一個誠實又穩的感測 demo

適用情境:用能力有限的感測器,做一個要當眾展示、且要讓人信服的互動 demo。

不適用情境:已是量產級、規格有保證的感測模組,可直接做功能。

前置條件

  • 先實測這顆感測器「穩定做得到什麼、做不到什麼」,寫下來。
  • 一組可重播的合成事件序列(含掉幀、多目標),當回歸基準。

步驟

  1. 界定範圍:先白紙黑字寫下 demo「要證明什麼、不證明什麼」,不證明的就別去碰它。
  2. 倒推體驗:從「想讓觀眾感受到什麼」這個結果,往回設計狀態與回饋。
  3. 加緩衝層:raw 訊號先過一層狀態機(confidence / hold / fade)再說,別讓它直接點燈。
  4. 可視化內部狀態:做一個看得見「機器現在以為發生什麼」的 visualizer,調參跟除錯都方便。
  5. 合成回歸:用掉幀 / 多目標的序列先驗過穩定,再上現場見人。

停損點

  • 想加的功能超出 sensor 可靠範圍 → 停,回到「不證明」清單。
  • 合成序列出現閃爍 / 誤報 → 先調 hold/fade/門檻,不要上現場。

驗收標準

  • demo 燈號穩定、低誤報、室內可重現。
  • 對外敘述不含 sensor 做不到的宣稱。

回滾:參數調壞時,回到最後一次「合成序列全穩」的參數組。

可複製到:任何「感測能力有限、但要做可信展示」的場景。

決策回放(三個月後回讀用)

  • 背景:用低成本雷達做室內後方接近告警 demo,要可信、不誇大。
  • 限制:不宣稱量產 / 高速 / 逐人追蹤;室內;低成本模組。
  • 考慮過但放棄:直接拿 raw 偵測驅動燈號——被它的閃爍 / 誤報否決。
  • 證據:狀態機 hold/fade 邏輯、合成掉幀回歸、PC visualizer。
  • 未解:戶外場景到底穩不穩;要不要再擴充多模組融合。

作者備註: 這案子教我的是「敢講做不到」。一開始我也想讓 demo 看起來什麼都能追,後來發現,把不穩的部分老實圈出去、只在能穩的範圍把體驗做到漂亮,反而更有人信。規格表上少寫一行,現場就少翻一次車——這筆我算得來。