聚豐項目 > 基于RSSI的室內AGV定位系統開發
項目目的:通過測量接收信號強度(RSSI)來實現AGV在室內的定位。 主要技術:接收信號強度(RSSI)與距離的精確轉化、三點定位算法、多元方程組的無解、唯一解、多解判定、誤差處理等; 進度介紹:當前已經實現RSSI與距離的精確轉換,在不同使用環境下需要對相關參數進行現場調整,以提高精確度。三點定位算法,多遠方程組的求解找到相對簡單解法,目前還未實現(精確定位).
274632473
分享274632473
團隊成員
蒙萌 測試
STM32 NucleoF401RE開發板
讓用戶可以從各種性能、功耗和功能組合中進行選擇,為用戶實現新創意、用任何STM32微控器產品建立產品原型提供了一種成本低廉且靈活便捷的途徑。
Arduino? 連接支持和ST Morpho排針提供廣泛的專用屏蔽罩選件,便于擴展STM32 Nucleo開放式開發平臺的功能。STM32 Nucleo板無需單獨的探測器,因其已集成了ST-LINK/V2-1調試器/編程器。
STM32 Nucleo板自帶STM32全面的軟件 HAL 庫以及各種打包的軟件示例,并能直接訪問mbed在線資源。
產品特色STM32微控制器,采用LQFP64封裝兩類擴展資源Arduino Uno R3連接STMicroelectronics Morpho擴展排針,用于全面訪問所有STM32 I/O板載ST-LINK/V2-1調試器/編程器,采用SWD連接器選擇模式開關,可使用套件作為獨立ST-LINK/V2-1靈活的板電源USB VBUS或外接電源(3.3V、5V、7 - 12V)電源管理接入點可使用mbed (mbed.org)三個LEDUSB通信(LD1)、用戶LED(LD2)、電源LED(LD3)兩個按鈕:USER和RESETUSB重新列舉功能:USB 支持三個不同的接口虛擬COM端口大容量存儲調試端口全面的免費軟件HAL庫,包括各種軟件示例受各種集成開發環境(IDE)支持,如IAR、Keil、基于GCC的IDE等.
ESP8266 貼片式 Wi-Fi 模組
基于 ESP8266EX 芯片設計開發的物聯網無線模組。它集成了 TCP/IP 網絡協議棧,32 位低功耗 MCU,10 比特精度 ADC,并帶有 HSPI、UART、PWM、I2C 和 I2S 等接口。ESP-WROOM-S2 模組 2 MB SPI Flash,接在 HSPI 上。作為 SDIO 中的 SPI 從機模式工作時,傳輸速率可達 8 Mbps。
EMW3080是單3.3V供電的、集成Wi-Fi和Cortex-M4F MCU的嵌入式Wi-Fi模塊,最高支持133M主頻和256K RAM,強大的浮點運算,分為A(硬件加密版)/B(標準版)2個版本。
EMW3080(A):內部集成加密芯片,為客戶固件的完整性、合法性,以及與云端通信的安全性提供硬件加密保障。
EMW3080(B):無內部加密芯片,Memory、外設接口資源豐富,能滿足大部分應用需求和多云的要求。
科慶EMW3080
加密芯片特性:
(1)對客戶固件加密,防止被破解;
(2)對客戶固件進行數字簽名,保證其完整性和合法性,防止被篡改或OTA過程中被替換;
(3)自動產生私鑰,保存從云端簽發的設備證書,云端可以識別設備的合法性,防止非法、仿冒、非安全的設備接入云端。
WiFi相關特性
支持802.11b/g/n標準HT-40
支持Station, SoftAP, SoftAP+Station 模式
支持EasyLink,Alink,Joinlink等多種配網,加密安全的OTA升級
工作電壓:3.0V-3.6V
主接口:UART,I2C,PWM,GPIO
尺寸:18.0*33mm
工作溫度:-20℃ to +85℃
天線:PCB天線,或外接天線連接器
軟件平臺:win10 64位操作系統
開發工具:Keil MDK5.17 友善串口調試助手
原理介紹:
1.RSSI與距離的轉換
由于無線信號的傳輸具有環境損耗、多徑效應等特點,采用以下近似計算公式。
RSSI與距離轉換的計算公式:
d = 10^((abs(RSSI) - A) / (10 * n))
其中:
d - 計算所得距離
RSSI - 接收信號強度(負值)
A - 發射端和接收端相隔1米時的信號強度
n - 環境衰減因子
傳入RSSI值,返回距離(單位:米)通過實驗,A值的最佳范圍為45—49,n值最佳范圍為3.25—4.5。
由于所處環境不同,每臺發射源(無線設備)對應參數值都不一樣。按道理,公式里的每項參數都應該做實驗(校準)獲得。
當你不知道周圍的無線設備準確位置時,只能給A和n賦經驗值。
如果對于靜止或者低速的運動物理的時,可用平均值濾波來提高測量精度或者IIR濾波執行利遞歸解得平均值處理的,典型的α取0.75--0.95 :
如果對于高速運動的物體可用卡爾曼濾波。
2.三角定位的原理
條件:已知三個點的坐標A(x1 ,y1),B( x2 ,y2 ),C( x3 ,y3) ,以及未知點Q( x ,y)到三個點的距離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
無解:
唯一解:
多解:
實際使用中主要解決有多解的情況,需要采取相應的容差,誤差處理才能得到一個比較好的定位精準度。目前對容差以及誤差處理部分還沒有一個良好的解決辦法,希望在后續時間能夠得到相應的處理。
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: 請問stm作用是啥?
回復
ieeesss001: 能不能不用STM?我不太懂
回復
h1654155745.6760: 你好。我們公司需要這個技術,可以花錢購買,我的微信18301926265,您也可以留下您的聯系方式。
回復