卡的無(wú)線感知數(shù)據(jù)采集)
1. 項(xiàng)目概述為什么我們需要CSI Tool如果你在無(wú)線通信、室內(nèi)定位或者感知領(lǐng)域摸爬滾打過(guò)一段時(shí)間大概率會(huì)聽(tīng)說(shuō)過(guò)“信道狀態(tài)信息”這個(gè)詞。CSI Tool簡(jiǎn)單來(lái)說(shuō)就是一套能讓你從特定型號(hào)的英特爾無(wú)線網(wǎng)卡里把這種底層、精細(xì)的信道信息給“掏”出來(lái)的工具集。這玩意兒不是給普通用戶測(cè)個(gè)網(wǎng)速用的它的價(jià)值在于為研究和開(kāi)發(fā)打開(kāi)了新世界的大門。想象一下普通的Wi-Fi信號(hào)強(qiáng)度就像是告訴你“房間里有人”而CSI提供的信息則像是給你一副“透視眼鏡”不僅能知道有人還能大致判斷這個(gè)人的位置、姿勢(shì)甚至是通過(guò)微小的動(dòng)作比如呼吸、手勢(shì)引起的信號(hào)細(xì)微變化。這就是為什么基于CSI的無(wú)線感知研究比如手勢(shì)識(shí)別、入侵檢測(cè)、生命體征監(jiān)測(cè)在過(guò)去幾年成了學(xué)術(shù)界和工業(yè)界的熱點(diǎn)。然而獲取CSI數(shù)據(jù)的門檻不低它依賴于特定的硬件和一套復(fù)雜的軟件棧CSI Tool就是其中最關(guān)鍵的一環(huán)。我這次記錄CSI Tool的安裝與配置源于一個(gè)室內(nèi)定位項(xiàng)目的預(yù)研。市面上商業(yè)方案要么太貴要么精度不夠我們打算自己基于廉價(jià)Wi-Fi設(shè)備搭建原型。整個(gè)過(guò)程堪稱一場(chǎng)與驅(qū)動(dòng)、內(nèi)核和編譯器的“肉搏戰(zhàn)”網(wǎng)上的教程要么年代久遠(yuǎn)要么步驟缺失我踩遍了能想到的幾乎所有坑。這篇記錄的目的就是把我從系統(tǒng)準(zhǔn)備、環(huán)境搭建、到驅(qū)動(dòng)編譯、工具測(cè)試的完整流程和血淚教訓(xùn)固化下來(lái)希望能幫你把原本可能需要一周的折騰時(shí)間壓縮到一兩天內(nèi)搞定。2. 核心硬件與軟件環(huán)境準(zhǔn)備工欲善其事必先利其器。CSI Tool對(duì)硬件和操作系統(tǒng)有非常嚴(yán)格的要求這一步選錯(cuò)了后面所有努力都可能白費(fèi)。2.1 硬件選擇網(wǎng)卡是成敗的關(guān)鍵CSI Tool主要支持特定型號(hào)的英特爾無(wú)線網(wǎng)卡因?yàn)樗鼈兲峁┝嗽L問(wèn)底層CSI數(shù)據(jù)的接口。不是所有英特爾網(wǎng)卡都支持經(jīng)過(guò)社區(qū)驗(yàn)證最常用且兼容性最好的型號(hào)是Intel 5300和Intel 6300。我強(qiáng)烈建議你直接尋找這兩款之一的Mini PCIe或PCIe接口網(wǎng)卡。注意很多筆記本電腦內(nèi)置的無(wú)線網(wǎng)卡雖然是英特爾品牌但型號(hào)可能不符且難以拆卸更換。因此最穩(wěn)妥的方案是使用一臺(tái)臺(tái)式機(jī)或者購(gòu)買一個(gè)PCIe轉(zhuǎn)Mini PCIe的轉(zhuǎn)接卡將網(wǎng)卡安裝在臺(tái)式機(jī)上。我這次使用的是Intel 5300 AGN半高M(jìn)ini PCIe網(wǎng)卡搭配一個(gè)PCIe轉(zhuǎn)接卡在臺(tái)式機(jī)上操作。除了網(wǎng)卡你還需要至少三根天線。CSI Tool利用多輸入多輸出技術(shù)天線數(shù)量直接影響你能獲取的數(shù)據(jù)維度和質(zhì)量。Intel 5300支持3x3 MIMO所以接上三根天線是必須的。2.2 操作系統(tǒng)選擇舊版Linux是唯一出路這是第一個(gè)大坑。CSI Tool依賴的Linux內(nèi)核驅(qū)動(dòng)和補(bǔ)丁主要針對(duì)的是2015年左右的內(nèi)核版本。在新版內(nèi)核上編譯幾乎一定會(huì)失敗。經(jīng)過(guò)多次嘗試最穩(wěn)定的選擇是Ubuntu 14.04 LTS (Trusty Tahr)及其對(duì)應(yīng)的Linux內(nèi)核版本 3.13.0。為什么必須是這個(gè)“古董”系統(tǒng)因?yàn)橛⑻貭柟俜胶髞?lái)修改了無(wú)線驅(qū)動(dòng)架構(gòu)新版內(nèi)核不再包含我們需要的、可修改的舊版驅(qū)動(dòng)源代碼。Ubuntu 14.04是最后一個(gè)能完美兼容CSI Tool所需驅(qū)動(dòng)環(huán)境的長(zhǎng)期支持版。實(shí)操步驟準(zhǔn)備一臺(tái)專用機(jī)器強(qiáng)烈建議使用一臺(tái)獨(dú)立的臺(tái)式機(jī)或一臺(tái)舊筆記本來(lái)安裝Ubuntu 14.04。不要在你的主力開(kāi)發(fā)機(jī)上嘗試雙系統(tǒng)因?yàn)閮?nèi)核降級(jí)和驅(qū)動(dòng)修改可能會(huì)影響現(xiàn)有系統(tǒng)的穩(wěn)定性。下載系統(tǒng)鏡像從Ubuntu官方舊發(fā)布站點(diǎn)下載ubuntu-14.04.6-desktop-amd64.iso。制作啟動(dòng)U盤并安裝使用Rufus或Etcher工具將ISO寫入U(xiǎn)盤然后像安裝任何Linux系統(tǒng)一樣進(jìn)行安裝。安裝時(shí)建議選擇“最小化安裝”以減少不必要的軟件包更新干擾。2.3 基礎(chǔ)開(kāi)發(fā)環(huán)境搭建系統(tǒng)安裝好后第一件事是更新軟件源并安裝必要的編譯工具和依賴庫(kù)。由于Ubuntu 14.04的官方源已經(jīng)歸檔我們需要修改源列表。# 備份原有源列表 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak # 編輯源列表替換為舊版本歸檔源 sudo sed -i s/archive.ubuntu.com/old-releases.ubuntu.com/g /etc/apt/sources.list sudo sed -i s/security.ubuntu.com/old-releases.ubuntu.com/g /etc/apt/sources.list # 更新軟件列表 sudo apt-get update接下來(lái)安裝編譯CSI Tool及其驅(qū)動(dòng)所必需的工具鏈和庫(kù)文件。這是一份比較全面的清單sudo apt-get install -y git build-essential linux-headers-$(uname -r) \ libncurses5-dev autoconf automake libtool pkg-config \ subversion unzip python2.7 python2.7-dev \ libssl-dev libnl-3-dev libnl-genl-3-dev libnl-route-3-dev實(shí)操心得linux-headers-$(uname -r)必須安裝且版本一定要與你當(dāng)前運(yùn)行的內(nèi)核完全一致否則后續(xù)編譯內(nèi)核模塊時(shí)會(huì)報(bào)錯(cuò)。安裝完成后可以通過(guò)uname -r和dpkg -l | grep linux-headers來(lái)核對(duì)。3. 內(nèi)核驅(qū)動(dòng)補(bǔ)丁與編譯這是整個(gè)安裝過(guò)程中最復(fù)雜、最容易出錯(cuò)的一環(huán)。我們需要修改Linux內(nèi)核的無(wú)線驅(qū)動(dòng)為其打上支持CSI數(shù)據(jù)提取的補(bǔ)丁。3.1 獲取并打補(bǔ)丁CSI Tool的核心是一個(gè)針對(duì)Linux無(wú)線子系統(tǒng)mac80211和英特爾iwlwifi驅(qū)動(dòng)的補(bǔ)丁。我們需要先獲取內(nèi)核源代碼然后應(yīng)用補(bǔ)丁。# 1. 進(jìn)入工作目錄比如/home/yourname/csi cd ~ mkdir csi cd csi # 2. 下載對(duì)應(yīng)版本的內(nèi)核源碼以3.13.0為例 # 你可以從 kernel.org 或 Ubuntu 源碼庫(kù)獲取。這里以Ubuntu源碼為例 apt-get source linux-image-$(uname -r) # 如果上述方法失敗可以直接下載特定版本 wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.13.tar.xz tar -xvf linux-3.13.tar.xz cd linux-3.13接下來(lái)需要找到并應(yīng)用補(bǔ)丁文件。補(bǔ)丁通常來(lái)自CSI Tool的研究項(xiàng)目頁(yè)面如linux-80211n-csitool。# 3. 假設(shè)你已經(jīng)將補(bǔ)丁文件如mac80211.compat08082009.wl_fragack_v1.patch下載到當(dāng)前目錄 # 應(yīng)用補(bǔ)丁到內(nèi)核源碼樹(shù) patch -p1 ../mac80211.compat08082009.wl_fragack_v1.patch踩坑記錄打補(bǔ)丁時(shí)最常見(jiàn)的錯(cuò)誤是“Hunk FAILED”。這通常是因?yàn)槟愕膬?nèi)核源碼版本與補(bǔ)丁所基于的版本有細(xì)微差異。解決方法有兩種一是尋找與你的內(nèi)核版本號(hào)完全匹配的補(bǔ)丁二是手動(dòng)編輯補(bǔ)丁文件或源碼根據(jù)錯(cuò)誤提示進(jìn)行合并。這個(gè)過(guò)程可能需要一些耐心和調(diào)試。3.2 配置與編譯內(nèi)核模塊打補(bǔ)丁成功后需要配置內(nèi)核重點(diǎn)開(kāi)啟我們需要編譯的模塊。# 1. 復(fù)制當(dāng)前系統(tǒng)的內(nèi)核配置作為基礎(chǔ) cp /boot/config-$(uname -r) .config # 2. 運(yùn)行菜單配置界面 make menuconfig在menuconfig界面中你需要確保以下選項(xiàng)被編譯成模塊MDevice Drivers - Network device support - Wireless LAN - Intel Wireless WiFi Next Gen AGN - Wireless-N/Advanced-N/Ultimate-N (iwlwifi)Networking support - Wireless - cfg80211 - wireless configuration API以及相關(guān)的mac80211驅(qū)動(dòng)。保存配置后開(kāi)始編譯特定的模塊# 3. 準(zhǔn)備編譯環(huán)境 make prepare make scripts # 4. 只編譯我們需要的模塊節(jié)省時(shí)間 make Mdrivers/net/wireless/iwlwifi modules make Mnet/wireless modules make Mnet/mac80211 modules編譯過(guò)程可能需要十幾分鐘。如果遇到錯(cuò)誤通常是缺少頭文件或依賴根據(jù)錯(cuò)誤信息安裝對(duì)應(yīng)的開(kāi)發(fā)包即可。3.3 安裝并替換原有驅(qū)動(dòng)編譯成功后會(huì)生成.ko文件。我們需要用它們替換系統(tǒng)現(xiàn)有的驅(qū)動(dòng)模塊。# 1. 備份原有驅(qū)動(dòng)非常重要 sudo cp /lib/modules/$(uname -r)/kernel/drivers/net/wireless/iwlwifi/iwlwifi.ko /lib/modules/$(uname -r)/kernel/drivers/net/wireless/iwlwifi/iwlwifi.ko.backup sudo cp /lib/modules/$(uname -r)/kernel/net/wireless/cfg80211.ko /lib/modules/$(uname -r)/kernel/net/wireless/cfg80211.ko.backup sudo cp /lib/modules/$(uname -r)/kernel/net/mac80211/mac80211.ko /lib/modules/$(uname -r)/kernel/net/mac80211/mac80211.ko.backup # 2. 安裝新編譯的驅(qū)動(dòng) sudo cp drivers/net/wireless/iwlwifi/iwlwifi.ko /lib/modules/$(uname -r)/kernel/drivers/net/wireless/iwlwifi/ sudo cp net/wireless/cfg80211.ko /lib/modules/$(uname -r)/kernel/net/wireless/ sudo cp net/mac80211/mac80211.ko /lib/modules/$(uname -r)/kernel/net/mac80211/ # 3. 更新模塊依賴關(guān)系 sudo depmod -a # 4. 卸載舊模塊如果已加載然后加載新模塊 sudo rmmod iwldvm iwlwifi mac80211 cfg80211 sudo modprobe iwlwifi致命注意事項(xiàng)在執(zhí)行rmmod和modprobe前請(qǐng)確保你通過(guò)有線網(wǎng)絡(luò)連接到這臺(tái)機(jī)器或者你有物理控制臺(tái)訪問(wèn)權(quán)限。因?yàn)樾遁d無(wú)線驅(qū)動(dòng)會(huì)立即斷開(kāi)所有Wi-Fi連接如果你是通過(guò)SSH無(wú)線連接的操作到這一步就會(huì)失聯(lián)只能去接鍵盤顯示器了。這是我的血淚教訓(xùn)。4. 用戶態(tài)工具鏈安裝與配置驅(qū)動(dòng)搞定后我們還需要用戶態(tài)的軟件來(lái)配置網(wǎng)卡、發(fā)送接收數(shù)據(jù)包并記錄CSI。這套工具通常被稱為linux-80211n-csitool-supplementary。4.1 獲取與編譯工具cd ~/csi git clone https://github.com/dhalperi/linux-80211n-csitool-supplementary.git cd linux-80211n-csitool-supplementary這個(gè)倉(cāng)庫(kù)里包含多個(gè)工具我們最關(guān)心的是nexutil和log_to_file。nexutil用于配置網(wǎng)卡進(jìn)入監(jiān)聽(tīng)模式并設(shè)置CSI收集參數(shù)。log_to_file一個(gè)將CSI數(shù)據(jù)從內(nèi)核環(huán)緩沖區(qū)讀取并寫入文件的高效工具。# 編譯 nexutil cd nexutil make sudo make install # 編譯 log_to_file cd ../injection make sudo make install編譯通常很順利。安裝后nexutil和log_to_file應(yīng)該可以直接在終端調(diào)用。4.2 配置網(wǎng)卡進(jìn)入CSI收集模式現(xiàn)在讓你的Intel 5300網(wǎng)卡開(kāi)始工作。首先需要將網(wǎng)卡切換到監(jiān)聽(tīng)模式。# 1. 查看網(wǎng)卡接口名通常是wlan0或wlp2s0 ifconfig -a # 2. 關(guān)閉網(wǎng)絡(luò)管理器對(duì)該接口的管控防止它自動(dòng)連接干擾 sudo service network-manager stop # 或者更精準(zhǔn)地禁用特定接口 sudo nmcli dev set wlan0 managed no # 3. 關(guān)閉接口 sudo ifconfig wlan0 down # 4. 設(shè)置接口模式為監(jiān)聽(tīng)模式 sudo iwconfig wlan0 mode monitor # 5. 使用nexutil配置CSI收集參數(shù) sudo nexutil -Iwlan0 -s500 -b -l34 -v這里nexutil的參數(shù)解釋一下-s500: 設(shè)置傳輸速率500對(duì)應(yīng)MCS索引代表一種特定的調(diào)制編碼方案。不同的值會(huì)影響數(shù)據(jù)包結(jié)構(gòu)和CSI數(shù)據(jù)。-b: 帶寬模式20MHz。-l34: 設(shè)置數(shù)據(jù)包長(zhǎng)度。-v: 詳細(xì)輸出。4.3 啟動(dòng)數(shù)據(jù)記錄配置好網(wǎng)卡后就可以啟動(dòng)log_to_file來(lái)記錄數(shù)據(jù)了。# 啟動(dòng)記錄將CSI數(shù)據(jù)寫入文件 csi.dat sudo ./log_to_file wlan0 csi.dat此時(shí)如果環(huán)境中有Wi-Fi信號(hào)比如用另一臺(tái)設(shè)備持續(xù)ping或者有一個(gè)持續(xù)發(fā)送數(shù)據(jù)包的發(fā)射器csi.dat文件就會(huì)開(kāi)始增長(zhǎng)。你可以用ls -lh csi.dat觀察文件大小變化。5. 數(shù)據(jù)解析與初步驗(yàn)證生成了.dat文件只是第一步里面的數(shù)據(jù)是二進(jìn)制的需要解析才能變成有意義的CSI矩陣。通常我們會(huì)使用配套的MATLAB或Python腳本來(lái)解析。5.1 安裝解析依賴以Python為例我們需要numpy等庫(kù)。sudo apt-get install -y python-numpy python-matplotlib5.2 使用Python腳本解析數(shù)據(jù)在linux-80211n-csitool-supplementary倉(cāng)庫(kù)里通常有一個(gè)matlab或python目錄里面包含了讀取數(shù)據(jù)的腳本。我們需要將其適配到Python環(huán)境。#!/usr/bin/env python # read_bf_file.py 示例簡(jiǎn)化版 import numpy as np def read_bf_file(filename): with open(filename, rb) as f: buffer f.read() # 解析文件頭、長(zhǎng)度、CSI數(shù)據(jù)等 # ... 這里是一個(gè)復(fù)雜的解析過(guò)程需要嚴(yán)格按照數(shù)據(jù)格式定義 # 通常返回一個(gè)列表每個(gè)元素是一個(gè)包含CSI矩陣、時(shí)間戳等信息的字典 return csi_data解析腳本比較復(fù)雜因?yàn)樗枰斫鈨?nèi)核模塊寫入的二進(jìn)制格式。最好的方法是直接使用項(xiàng)目作者或社區(qū)維護(hù)的成熟腳本。你可以從相關(guān)論文的配套代碼或GitHub倉(cāng)庫(kù)中尋找。5.3 初步驗(yàn)證CSI數(shù)據(jù)解析出數(shù)據(jù)后可以進(jìn)行最簡(jiǎn)單的可視化來(lái)驗(yàn)證安裝是否成功。import matplotlib.pyplot as plt csi_data read_bf_file(csi.dat) # 取第一條記錄 first_entry csi_data[0] # csi矩陣的維度通常是 [子載波數(shù), 發(fā)射天線, 接收天線] csi_matrix first_entry[csi] # 繪制第一個(gè)發(fā)射-接收天線對(duì)的所有子載波幅度 plt.plot(np.abs(csi_matrix[:, 0, 0])) plt.xlabel(Subcarrier Index) plt.ylabel(CSI Amplitude) plt.title(CSI Amplitude on Antenna Pair (Tx0, Rx0)) plt.show()如果你能看到一條非零的、有起伏的曲線而不是全零或雜亂無(wú)章的噪聲那么恭喜你CSI Tool安裝成功了你已經(jīng)成功捕獲到了物理層的信道信息。6. 常見(jiàn)問(wèn)題與深度排錯(cuò)指南在這一部分我匯總了安裝過(guò)程中最可能遇到的“攔路虎”及其解決方案。很多錯(cuò)誤信息網(wǎng)上都搜不到直接答案需要根據(jù)經(jīng)驗(yàn)推斷。6.1 驅(qū)動(dòng)編譯與加載問(wèn)題問(wèn)題1make menuconfig時(shí)找不到無(wú)線驅(qū)動(dòng)配置選項(xiàng)。原因可能內(nèi)核源碼配置與當(dāng)前運(yùn)行內(nèi)核差異太大或者無(wú)線驅(qū)動(dòng)被整體禁用。解決在.config文件中直接搜索CONFIG_WLAN、CONFIG_IWLWIFI、CONFIG_CFG80211、CONFIG_MAC80211確保它們都等于m或y。然后直接運(yùn)行make oldconfig和make prepare。問(wèn)題2執(zhí)行sudo modprobe iwlwifi時(shí)報(bào)錯(cuò)Required key not available。原因Ubuntu系統(tǒng)啟用了安全啟動(dòng)阻止加載未簽名的內(nèi)核模塊。解決進(jìn)入BIOS/UEFI設(shè)置徹底關(guān)閉Secure Boot。這是必須的一步?jīng)]有妥協(xié)余地。問(wèn)題3加載驅(qū)動(dòng)后ifconfig看不到wlan0接口。原因驅(qū)動(dòng)加載失敗或硬件未識(shí)別。解決使用dmesg | tail -30查看內(nèi)核日志尋找iwlwifi相關(guān)的錯(cuò)誤信息。檢查網(wǎng)卡是否插牢PCIe設(shè)備是否被系統(tǒng)識(shí)別lspci | grep -i network。嘗試強(qiáng)制加載特定固件sudo modprobe iwlwifi后再sudo dmesg | grep iwl查看固件加載狀態(tài)。6.2 工具使用與數(shù)據(jù)收集問(wèn)題問(wèn)題4nexutil命令執(zhí)行失敗提示Operation not supported或Invalid argument。原因網(wǎng)卡驅(qū)動(dòng)不支持該命令或者接口未處于正確狀態(tài)。解決確保你安裝的是打過(guò)補(bǔ)丁的驅(qū)動(dòng)并且已成功加載。確保網(wǎng)卡已關(guān)閉 (ifconfig wlan0 down) 且處于監(jiān)聽(tīng)模式 (iwconfig wlan0 mode monitor)。嘗試不同的nexutil參數(shù)有些參數(shù)組合可能不被特定網(wǎng)卡固件支持。問(wèn)題5運(yùn)行l(wèi)og_to_file后數(shù)據(jù)文件csi.dat大小始終為0。原因沒(méi)有數(shù)據(jù)源或者網(wǎng)卡未正確接收到包含CSI的數(shù)據(jù)包。解決創(chuàng)造數(shù)據(jù)源這是最關(guān)鍵的一步。你需要另一臺(tái)設(shè)備手機(jī)、筆記本持續(xù)發(fā)送UDP或ICMP包到廣播地址或一個(gè)不存在的IP觸發(fā)路由器/AP發(fā)送響應(yīng)。例如在另一臺(tái)機(jī)器上持續(xù)ping你的網(wǎng)關(guān)ping -t。檢查天線是否連接牢固。使用sudo iwconfig wlan0確認(rèn)接口處于Monitor模式并且能監(jiān)聽(tīng)到信道上的信號(hào)強(qiáng)度Signal level不是0。問(wèn)題6解析出的CSI數(shù)據(jù)全是NaN或零。原因數(shù)據(jù)包格式不匹配或者解析腳本與驅(qū)動(dòng)版本不兼容。解決確認(rèn)發(fā)射端使用的帶寬20MHz、MCS索引等參數(shù)與nexutil設(shè)置一致。嘗試使用項(xiàng)目作者提供的、與驅(qū)動(dòng)版本匹配的官方解析腳本。檢查二進(jìn)制文件頭看其魔數(shù)或版本號(hào)是否與解析腳本期望的一致。6.3 系統(tǒng)與性能問(wèn)題問(wèn)題7系統(tǒng)運(yùn)行一段時(shí)間后卡死或崩潰。原因修改過(guò)的內(nèi)核驅(qū)動(dòng)可能不穩(wěn)定或者持續(xù)記錄CSI數(shù)據(jù)消耗大量資源。解決限制log_to_file的記錄速率或文件大小??紤]將數(shù)據(jù)記錄到RAM磁盤/dev/shm以減少I/O壓力。如果只是為了測(cè)試可以縮短數(shù)據(jù)收集時(shí)間。問(wèn)題8想升級(jí)系統(tǒng)或安裝其他軟件但Ubuntu 14.04的源太舊。原因官方源已停止維護(hù)。解決對(duì)于基礎(chǔ)軟件使用前面提到的old-releases.ubuntu.com源。對(duì)于較新的軟件如高版本Python考慮使用pyenv、conda或從源碼編譯安裝。記住這臺(tái)機(jī)器的首要任務(wù)是穩(wěn)定運(yùn)行CSI Tool不要把它當(dāng)作通用開(kāi)發(fā)機(jī)。整個(gè)安裝配置過(guò)程是對(duì)你Linux系統(tǒng)調(diào)試能力和耐心的一次考驗(yàn)。最有效的策略是嚴(yán)格遵循硬件和系統(tǒng)版本要求每一步操作后都通過(guò)dmesg和命令輸出來(lái)驗(yàn)證是否成功遇到錯(cuò)誤先搜索錯(cuò)誤關(guān)鍵詞并結(jié)合內(nèi)核日志分析。當(dāng)你第一次看到那條代表成功的CSI幅度曲線時(shí)所有的折騰都是值得的。這套環(huán)境搭建好后你就可以在此基礎(chǔ)上開(kāi)展無(wú)線感知、定位等更有趣的研究和開(kāi)發(fā)了。