聚丰项目 > 基于RSSI的室内AGV定位系统开发

基于RSSI的室内AGV定位系统开发

项目目的:通过测量接收信号强度(RSSI)来实现AGV在室内的定位。 主要技术:接收信号强度(RSSI)与距离的精确转化、三点定位算法、多元方程组的无解、唯一解、多解判定、误差处理等; 进度介绍:当前已经实现RSSI与距离的精确转换,在不同使用环境下需要对相关参数进行现场调整,以提高精确度。三点定位算法,多远方程组的求解找到相对简单解法,目前还未实现(精确定位).

274632473 274632473

分享
1 喜欢这个项目
团队介绍

274632473 274632473

团队成员

蒙萌 测试

分享
项目简介
项目目的:通过测量接收信号强度(RSSI)来实现AGV在室内的定位。 主要技术:接收信号强度(RSSI)与距离的精确转化、三点定位算法、多元方程组的无解、唯一解、多解判定、误差处理等; 进度介绍:当前已经实现RSSI与距离的精确转换,在不同使用环境下需要对相关参数进行现场调整,以提高精确度。三点定位算法,多远方程组的求解找到相对简单解法,目前还未实现(精确定位).
硬件说明


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 :

                     blob.png


blob.png

如果对于高速运动的物体可用卡尔曼滤波。

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

无解:



唯一解:

img_20171128163049.png

多解:

93a5510bea24b61de87f356ee5907b7.png

实际使用中主要解决有多解的情况,需要采取相应的容差,误差处理才能得到一个比较好的定位精准度。目前对容差以及误差处理部分还没有一个良好的解决办法,希望在后续时间能够得到相应的处理。

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   





演示效果

81c98ad87c4fc1008cecc153af1412b.png228716363723887536.jpg


评论区(3 )
  • ieeesss001: 请问stm作用是啥?

    回复

    • ieeesss001: 能不能不用STM?我不太懂

      回复

  • h1654155745.6760: 你好。我们公司需要这个技术,可以花钱购买,我的微信18301926265,您也可以留下您的联系方式。

    回复