聚豐項(xiàng)目 > 基于RSSI的室內(nèi)AGV定位系統(tǒng)開發(fā)
項(xiàng)目目的:通過測(cè)量接收信號(hào)強(qiáng)度(RSSI)來實(shí)現(xiàn)AGV在室內(nèi)的定位。 主要技術(shù):接收信號(hào)強(qiáng)度(RSSI)與距離的精確轉(zhuǎn)化、三點(diǎn)定位算法、多元方程組的無解、唯一解、多解判定、誤差處理等; 進(jìn)度介紹:當(dāng)前已經(jīng)實(shí)現(xiàn)RSSI與距離的精確轉(zhuǎn)換,在不同使用環(huán)境下需要對(duì)相關(guān)參數(shù)進(jìn)行現(xiàn)場(chǎng)調(diào)整,以提高精確度。三點(diǎn)定位算法,多遠(yuǎn)方程組的求解找到相對(duì)簡(jiǎn)單解法,目前還未實(shí)現(xiàn)(精確定位).
274632473
274632473
團(tuán)隊(duì)成員
蒙萌 測(cè)試
STM32 NucleoF401RE開發(fā)板
讓用戶可以從各種性能、功耗和功能組合中進(jìn)行選擇,為用戶實(shí)現(xiàn)新創(chuàng)意、用任何STM32微控器產(chǎn)品建立產(chǎn)品原型提供了一種成本低廉且靈活便捷的途徑。
Arduino? 連接支持和ST Morpho排針提供廣泛的專用屏蔽罩選件,便于擴(kuò)展STM32 Nucleo開放式開發(fā)平臺(tái)的功能。STM32 Nucleo板無需單獨(dú)的探測(cè)器,因其已集成了ST-LINK/V2-1調(diào)試器/編程器。
STM32 Nucleo板自帶STM32全面的軟件 HAL 庫(kù)以及各種打包的軟件示例,并能直接訪問mbed在線資源。
產(chǎn)品特色STM32微控制器,采用LQFP64封裝兩類擴(kuò)展資源Arduino Uno R3連接STMicroelectronics Morpho擴(kuò)展排針,用于全面訪問所有STM32 I/O板載ST-LINK/V2-1調(diào)試器/編程器,采用SWD連接器選擇模式開關(guān),可使用套件作為獨(dú)立ST-LINK/V2-1靈活的板電源USB VBUS或外接電源(3.3V、5V、7 - 12V)電源管理接入點(diǎn)可使用mbed (mbed.org)三個(gè)LEDUSB通信(LD1)、用戶LED(LD2)、電源LED(LD3)兩個(gè)按鈕:USER和RESETUSB重新列舉功能:USB 支持三個(gè)不同的接口虛擬COM端口大容量存儲(chǔ)調(diào)試端口全面的免費(fèi)軟件HAL庫(kù),包括各種軟件示例受各種集成開發(fā)環(huán)境(IDE)支持,如IAR、Keil、基于GCC的IDE等.
ESP8266 貼片式 Wi-Fi 模組
基于 ESP8266EX 芯片設(shè)計(jì)開發(fā)的物聯(lián)網(wǎng)無線模組。它集成了 TCP/IP 網(wǎng)絡(luò)協(xié)議棧,32 位低功耗 MCU,10 比特精度 ADC,并帶有 HSPI、UART、PWM、I2C 和 I2S 等接口。ESP-WROOM-S2 模組 2 MB SPI Flash,接在 HSPI 上。作為 SDIO 中的 SPI 從機(jī)模式工作時(shí),傳輸速率可達(dá) 8 Mbps。
EMW3080是單3.3V供電的、集成Wi-Fi和Cortex-M4F MCU的嵌入式Wi-Fi模塊,最高支持133M主頻和256K RAM,強(qiáng)大的浮點(diǎn)運(yùn)算,分為A(硬件加密版)/B(標(biāo)準(zhǔn)版)2個(gè)版本。
EMW3080(A):內(nèi)部集成加密芯片,為客戶固件的完整性、合法性,以及與云端通信的安全性提供硬件加密保障。
EMW3080(B):無內(nèi)部加密芯片,Memory、外設(shè)接口資源豐富,能滿足大部分應(yīng)用需求和多云的要求。
科慶EMW3080
加密芯片特性:
(1)對(duì)客戶固件加密,防止被破解;
(2)對(duì)客戶固件進(jìn)行數(shù)字簽名,保證其完整性和合法性,防止被篡改或OTA過程中被替換;
(3)自動(dòng)產(chǎn)生私鑰,保存從云端簽發(fā)的設(shè)備證書,云端可以識(shí)別設(shè)備的合法性,防止非法、仿冒、非安全的設(shè)備接入云端。
WiFi相關(guān)特性
支持802.11b/g/n標(biāo)準(zhǔn)HT-40
支持Station, SoftAP, SoftAP+Station 模式
支持EasyLink,Alink,Joinlink等多種配網(wǎng),加密安全的OTA升級(jí)
工作電壓:3.0V-3.6V
主接口:UART,I2C,PWM,GPIO
尺寸:18.0*33mm
工作溫度:-20℃ to +85℃
天線:PCB天線,或外接天線連接器
軟件平臺(tái):win10 64位操作系統(tǒng)
開發(fā)工具:Keil MDK5.17 友善串口調(diào)試助手
原理介紹:
1.RSSI與距離的轉(zhuǎn)換
由于無線信號(hào)的傳輸具有環(huán)境損耗、多徑效應(yīng)等特點(diǎn),采用以下近似計(jì)算公式。
RSSI與距離轉(zhuǎn)換的計(jì)算公式:
d = 10^((abs(RSSI) - A) / (10 * n))
其中:
d - 計(jì)算所得距離
RSSI - 接收信號(hào)強(qiáng)度(負(fù)值)
A - 發(fā)射端和接收端相隔1米時(shí)的信號(hào)強(qiáng)度
n - 環(huán)境衰減因子
傳入RSSI值,返回距離(單位:米)通過實(shí)驗(yàn),A值的最佳范圍為45—49,n值最佳范圍為3.25—4.5。
由于所處環(huán)境不同,每臺(tái)發(fā)射源(無線設(shè)備)對(duì)應(yīng)參數(shù)值都不一樣。按道理,公式里的每項(xiàng)參數(shù)都應(yīng)該做實(shí)驗(yàn)(校準(zhǔn))獲得。
當(dāng)你不知道周圍的無線設(shè)備準(zhǔn)確位置時(shí),只能給A和n賦經(jīng)驗(yàn)值。
如果對(duì)于靜止或者低速的運(yùn)動(dòng)物理的時(shí),可用平均值濾波來提高測(cè)量精度或者IIR濾波執(zhí)行利遞歸解得平均值處理的,典型的α取0.75--0.95 :
如果對(duì)于高速運(yùn)動(dòng)的物體可用卡爾曼濾波。
2.三角定位的原理
條件:已知三個(gè)點(diǎn)的坐標(biāo)A(x1 ,y1),B( x2 ,y2 ),C( x3 ,y3) ,以及未知點(diǎn)Q( x ,y)到三個(gè)點(diǎn)的距離RA ,RB ,RC
那么就有方程組:
(x1 – x)^2 + (y1-y)^2 =RA^2
(x2 – x)^2 + (y2-y)^2= RB^2
(x3 – x)^2 + (y3-y)^2= RC^2
無解:
唯一解:
多解:
實(shí)際使用中主要解決有多解的情況,需要采取相應(yīng)的容差,誤差處理才能得到一個(gè)比較好的定位精準(zhǔn)度。目前對(duì)容差以及誤差處理部分還沒有一個(gè)良好的解決辦法,希望在后續(xù)時(shí)間能夠得到相應(yīng)的處理。
3.部分代碼展示
1. static float RssiToDista(int rssi)
2. {
3. uint8 A = 59;
4. float n = 3.0;
5.
6. int iRssi = abs(rssi);
7. float power = (iRssi-A)/(10*n);
8 。 return pow(10, power);
9. }
1. void uart_init(u32 bound)
2. {
3. GPIO_InitTypeDef GPIO_InitStructure;
4. USART_InitTypeDef USART_InitStructure;
5. NVIC_InitTypeDef NVIC_InitStructure;
6.
7. RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE);
8. //USART1_TX GPIOA.9
9. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
10. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
11. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
12. GPIO_Init(GPIOA, &GPIO_InitStructure);
13. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//PA10
14. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
15. GPIO_Init(GPIOA, &GPIO_InitStructure);
16. NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
17. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3
18. NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
19. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
20. NVIC_Init(&NVIC_InitStructure);
21. USART_InitStructure.USART_BaudRate = bound;
22. USART_InitStructure.USART_WordLength = USART_WordLength_8b;
23. USART_InitStructure.USART_StopBits = USART_StopBits_1;
24. USART_InitStructure.USART_Parity = USART_Parity_No;
25. USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
26. USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
27.
28. USART_Init(USART1, &USART_InitStructure); //
29. USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
30. USART_Cmd(USART1, ENABLE);
31.
32. }
33. void USART1_IRQHandler(void)
34. {
35. u8 Res;
36. if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
37. {
38. Res =USART_ReceiveData(USART1);
39.
40. if((USART_RX_STA&0x8000)==0)
41. {
42. if(USART_RX_STA&0x4000)
43. {
44. if(Res!=0x0a)USART_RX_STA=0;
45. else USART_RX_STA|=0x8000;
46. }
47. else
48. {
49. if(Res==0x0d)USART_RX_STA|=0x4000;
50. else
51. {
52. USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;
53. USART_RX_STA++;
54. if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;
55. }
56. }
57. }
58. }
59. }
60. #endif
ieeesss001: 請(qǐng)問stm作用是啥?
回復(fù)
ieeesss001: 能不能不用STM?我不太懂
回復(fù)
h1654155745.6760: 你好。我們公司需要這個(gè)技術(shù),可以花錢購(gòu)買,我的微信18301926265,您也可以留下您的聯(lián)系方式。
回復(fù)