51uwb.cn
标题: 【开源项目】纯Python TWR算法UWB上位机 [打印本页]
作者: 蓝点无限 时间: 2021-8-15 21:16
标题: 【开源项目】纯Python TWR算法UWB上位机
初衷:
进一步降低学习门槛,使用纯Python 编写GUI 上位机,Python 易于编程,算法资料算法丰富。
TWR 算法上位机一般使用Deca官方提供的GUI上位机,使用QT C++编写,代码臃肿,不适合学习,同时三边定位算法部分晦涩难懂。
之前在论坛开源了底层固件,再次补充一个开源版本上位机,实现了全流程的开源。
界面预览:
(, 下载次数: 7918)
源码文件:
1.twr_51uwb_v2.py 主函数入口,同时处理TCP连接和界面显示
2.twr_main.py 主要负责数据结构解析,并实现定位计算,这个文件有三边定位算法,大家可以替换尝试其他算法
3.Coordinate_process.py 基站坐标处理,匹配预设基站地址,确定基站坐标
4. globalvar.py 共享全局变量,主要多文件共享基站地址和坐标信息
5.mainwindow.py 界面文件,使用qtdesign 绘制,并使用pyuic 自动生成的文件
主要功能:
1 通过TCP 获取信息,串口转TCP参见视频
2 解析收到的数据并完成解算
3 在界面显示基站和标签相对位置
4 统计框中显示标签坐标
5 上位机支持多基站,并且可以根据checkbox 确认是否使能基站
6 支持调试接口,可以将想要的数据打印到调试界面
7 支持标签history 定位点数量设定,默认5,最大20
8 支持标签根据历史信息显示不同透明度
开发环境:
Python 3.6(64bit),推荐集成开发环境PyCharm 社区版
主要库:pyqt5,numpy
其他:
目前找的三边算法,只支持2D 定位,并且需要4个基站。大家可以根据需要替换定位算法。
- tril2d = Trilateration()
- tril2d.setDistances(Info['distance'])
- tril2d.setAnthorCoor(Info['anthor'])
- result_x, result_y = tril2d.trilaterate2D()
复制代码 上述为实际定位过程,分别为1. 实例化一个类,2. 传入距离信息,3.传入对应基站坐标信息,4启动定位并获取定位结果
数据格式说明:
&&&:20$0005:AD$0001:0080:11#0002:0080:22#0003:0081:33#0004:0079:44$AA##
TODO
源码:
(, 下载次数: 329)
改上位机可以匹配我们全新开源固件,可以应用与隧道等复杂定位场景。目前可以使用已有代码简单修改为4基站,若干标签定位。 多基站+若干标签定位全新固件已经开发完成,链接 http://51uwb.cn/forum.php?mod=viewthread&tid=402&extra=page%3D1
同时该上位机支持现有BP30/BP400固件,只需要定位固件代码修改3个地方:
1 修改最大基站数目
2 修改tx_main.c 数据格式
- static void Send_Dis_To_Anthor0(void)
- {
- // printf("Debug here");
- static int framenum = 0 ;
- char crc_byte = 0;
- //only send this message to anthor0:short address equal 0x0001
- msg_f_send.destAddr[0] =(0x0001) &0xFF;
- msg_f_send.destAddr[1] = ((0x0001)>>8) &0xFF;
- msg_f_send.seqNum = distance_seqnum;
- msg_f_send.messageData[0]='M';
- uint8 *pAnthor_Str = &msg_f_send.messageData[1];
- int str_len = 0x20;
- sprintf(pAnthor_Str, "&&&:%02X$%04X:%02X[ DISCUZ_CODE_1 ]quot;,str_len,SHORT_ADDR,msg_f_send.seqNum);//AA55 ANTHORID
- pAnthor_Str = pAnthor_Str + 15;
- //printf(pAnthor_Str);
- //0001:A1B1:11#
- uint16 shortaddress = 0x0001;
- uint8 rssi = 0x11;
- sprintf(pAnthor_Str, "%04X:%04X:%02X#",shortaddress,Final_Distance[0],rssi);
- pAnthor_Str = pAnthor_Str + 13;
- shortaddress = 0x0002;
- rssi = 0x22;
- sprintf(pAnthor_Str, "%04X:%04X:%02X#",shortaddress,Final_Distance[1],rssi);
- pAnthor_Str = pAnthor_Str + 13;
- shortaddress = 0x0003;
- rssi = 0x33;
- sprintf(pAnthor_Str, "%04X:%04X:%02X#",shortaddress,Final_Distance[2],rssi);
- pAnthor_Str = pAnthor_Str + 13;
- shortaddress = 0x0004;
- rssi = 0x44;
- sprintf(pAnthor_Str, "%04X:%04X:%02X$AA##",shortaddress,Final_Distance[3],rssi);
- pAnthor_Str = pAnthor_Str + 17;
- sprintf(pAnthor_Str, "\r\n");
-
- while(msg_f_send.messageData[str_len] != '\n')
- {
- crc_byte =crc_byte^msg_f_send.messageData[str_len];
- str_len++;
- }
- HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, !GPIO_PIN_RESET);//PA node ,enable pa
- dwt_writetxdata(11 + str_len,(uint8 *)&msg_f_send, 0) ; // write the frame data
- dwt_writetxfctrl(11 + str_len, 0);
- dwt_starttx(DWT_START_TX_IMMEDIATE);
- while (!(dwt_read32bitreg(SYS_STATUS_ID) & SYS_STATUS_TXFRS))
- { };
- dwt_write32bitreg(SYS_STATUS_ID, SYS_STATUS_TXFRS);
- framenum++;
- LCD_Display_Distance();
- }
复制代码 3 修改rx_main.c 上传数据量
- case 'M':
- USART_puts(&msg_f->messageData[1],72);
- break;
复制代码 说明:
按照如上修改固件,分别编译标签和4个基站,将定位距离数据通过地址为0x0001 的基站串口输出,并通过串口转WIFI模块传入到上位机。
整体TODO
上位机: 上位机动态选取最优4个基站定位(RSSI最大)
固件增强: 固件目前没有提取RSSI,固定使用4基站,后期可以改成动态,通过动态发现周围基站并测距,然后汇总。
作者: 805091316 时间: 2021-9-14 10:23
第二部分 “2 修改tx_main.c 数据格式” 的15行 sprintf(pAnthor_Str, "&&&:%02X$%04X:%02X[ DISCUZ_CODE_1 ]quot;,str_len,SHORT_ADDR,msg_f_send.seqNum);//AA55 ANTHORID
这里&&&前面的引号我放进keil里出错了,需要把这一句注释掉吗?求大佬回复
作者: 蓝点无限 时间: 2021-9-14 21:37
你直接用git 下载源码吧,代码拷贝到帖子里,格式有点问题,没有[ DISCUZ_CODE_1 ]quot;,,应该是个“,具体以代码为准
作者: 805091316 时间: 2021-9-15 10:52
谢谢大佬,可以给个GIT的链接吗,忘记去哪找你了
作者: 蓝点无限 时间: 2021-9-15 21:53
看这个帖子
http://51uwb.cn/forum.php?mod=vi ... &extra=page%3D1
作者: szmcumcu 时间: 2021-9-29 08:56
好资料,很想学习,谢谢楼主无私分享,赞
作者: vacabun 时间: 2021-9-29 19:25
感谢分享!!!!!
作者: SimonQ 时间: 2021-10-14 17:08
真大佬,感谢分享!!
作者: renchao 时间: 2021-10-14 22:41
好任好人啊
作者: renchao 时间: 2021-10-14 22:42
太强了,python代码太实用
作者: renchao 时间: 2021-10-14 22:43
真大佬,感谢分享!!
作者: renchao 时间: 2021-10-14 22:43
好资料,很想学习,谢谢楼主无私分享,赞
作者: renchao 时间: 2021-10-14 22:43
谢谢大佬,可以给个GIT的链接吗,忘记去哪找你了
作者: renchao 时间: 2021-10-14 22:44
好资料,很想学习,谢谢楼主无私分享,赞
作者: renchao 时间: 2021-10-14 22:44
方法对付
作者: renchao 时间: 2021-10-14 22:45
大佬解了燃眉之急
作者: 760371303 时间: 2021-10-15 01:25
感谢大佬分享
作者: gaojie_123123 时间: 2021-10-15 08:53
不错,太强了,python代码太实用,顶!!!!!!!!!!!!!!!!!!!!!
作者: gaojie_123123 时间: 2021-10-15 09:01
太强了,python代码太实用,顶!!!!!!!!!!!!
作者: gaojie_123123 时间: 2021-10-15 09:01
太强了,python代码太实用,顶!!!!!!!!!!!!
作者: Aran 时间: 2021-10-21 13:42
好资料,很想学习,谢谢楼主无私分享,赞
作者: Aimmie 时间: 2021-11-8 14:59
感谢楼主分享!!!
作者: yj775132158 时间: 2021-11-15 15:02
开源yyds开源yyds开源yyds开源yyds
作者: yj775132158 时间: 2021-11-15 15:02
开源yyds开源yyds开源yyds开源yyds
作者: yj775132158 时间: 2021-11-15 15:22
pyuic 这个不该源文件吗
作者: chen1443683598 时间: 2021-11-15 19:30
这个太有用了 我找了好久 试一试
作者: adviil 时间: 2021-11-16 11:49
太需要了,谢谢谢谢!
作者: 16609519121 时间: 2021-11-16 21:43
谢谢分享,十分感谢
作者: 16609519121 时间: 2021-11-16 21:43
谢谢分享,十分感谢
作者: 16609519121 时间: 2021-11-16 22:47
支持开源支持开源
作者: adviil 时间: 2021-11-17 10:04
谢谢楼主分享!!正好需要!!
作者: DW1000 时间: 2021-11-19 15:33
感谢分享!!!
作者: ysu_yyz 时间: 2021-11-26 09:04
感谢作者提供
作者: 老北京鸡肉卷 时间: 2021-11-26 10:00
感谢!!!!!!很实用
作者: 诺曼无线 时间: 2021-12-14 23:19
来学习,谢谢教导
作者: aistm32 时间: 2021-12-15 15:22
谢谢,学习学习
作者: nghai 时间: 2022-1-13 22:46
感谢分享!
作者: sage 时间: 2022-2-9 11:47
感谢大佬无私分享
作者: yoyo 时间: 2022-2-15 11:12
没想到python还可以顺滑的快速做界面
作者: yoyo 时间: 2022-2-15 11:13
赞啊,瞬间就有继续下去的心了
作者: yoyo 时间: 2022-2-15 11:38
请问已经用金钱购买了资料,为什么还是不能下载哇
作者: yoyo 时间: 2022-2-16 14:25
哪位小伙伴附件下载成功的,我用金币买了也下载不成功,求发邮箱1974251144@qq.com
作者: wjt00 时间: 2022-2-23 20:24
十个金币,怎么搞
作者: wjt00 时间: 2022-2-23 20:38
这个上位机和自带的功能一样吗?
作者: wjt00 时间: 2022-2-23 20:39
我感觉c++功能挺全的,就是没法改
作者: spike 时间: 2022-3-8 23:36
感谢楼主分享
作者: wjt00 时间: 2022-3-9 10:41
[attach]614[/attach]
这是我用一个串口转TCP的软件,在原有的固件上进行修改,基站0串口输出到电脑,但是上位机没有显示
(, 下载次数: 902)
(, 下载次数: 3470)
(, 下载次数: 3477)
(, 下载次数: 3617)
这是我按照论坛修改的固件代码,请问是哪里出问题了?一定要串口转WIFI吗?
作者: wjt00 时间: 2022-3-9 10:43
作者: wjt00 时间: 2022-3-9 10:44
下面好像显示数据无法识别
作者: wjt00 时间: 2022-3-9 11:19
本帖最后由 wjt00 于 2022-3-9 11:20 编辑
还有就是怎么样可以使基站和标签输出高电平呀?就是固件上这个串口,我要怎么控制,我希望达到一定条件,可以输出高电平,触发警报器
(, 下载次数: 3755)
可能这个问题太小白,能告诉我去哪里学习吗?或者去看什么东西?
作者: wjt00 时间: 2022-3-9 18:04
我的设想,实现区域报警,在已经得到标签坐标的情况下,通过划定警戒区域,给予标签不同的权限,实现报警,基础界面如下:
新增权限窗口,主要目的是,划定警戒区域,点1为矩形左上角点,点2为矩形右下角点,可以像基站一样,勾选权限按钮,则点被引用,当两个点都被引用时,在下方坐标系内画出相应区域
接着是标签权限的划分,这个权限分为1、2、3三个级别(可以由)
self.spinBox.setMinimum(0)#
self.spinBox.setMaximum(2)#
使用spinBox.划定级别
第一级别,无视警戒区域,可以在任何区域内移动
第二级别,只允许在警戒区域内移动
第三级别,只允许在警戒区域外移动
在警戒区域划定前,标签权限划分无效
接下来是,警戒的判定,以进入警戒区域报警为例,
使用标签的坐标和警戒区域的坐标进行比较,点1(a,b),点2(c,d),标签坐标(x,y)
a<x<c且b>y>d;则在警戒区域内,发出警报
接下来是,警报的实现
首先是上位机上实现,上位机上出现一个提示串口,显示某标签违反权限规则,
接着上位机通过串口向基站或标签传输一个信号,基站和标签间互相通信,所有的标签和基站都获取这个信号,然后向各自的串口输出一个持续的高电平,
我在串口处外接了一个警报器,当串口输出高电平,警报器就会发出警报
当标签回到正确的区域,或者标签直接断电失联的话,回复到原来的状态,警报解除
大佬指点一下,要是成功了,我就把代码共享
作者: 蓝点无限 时间: 2022-3-9 20:37
串口转tcp数据被截断了,每个数据包被分成了 两个tcp包发给上位机,上位机每次都不能收到完整数据包,所以会无法解析。
作者: 蓝点无限 时间: 2022-3-9 20:38
因为你要用串口输出数据
建议你用LCD接口部分的IO 输出电平
对LCD接口的IO去掉液晶部分代码,将对应IO做普通IO初始化
作者: wjt00 时间: 2022-3-10 08:24
串口输出数据不是基站0吗?我用的标签串口输出警报,应该不影响吧?我就是四基站,多标签
作者: wjt00 时间: 2022-3-10 08:26
我怎么调用标签的串口呀?
作者: sunmessi 时间: 2022-3-15 20:30
厉害!!!!!1
作者: sunmessi 时间: 2022-3-15 20:30
作者: sunmessi 时间: 2022-3-17 18:52
pythonyyds
作者: 暮雨 时间: 2022-4-8 21:42
想要源码学习一下
作者: 暮雨 时间: 2022-4-8 21:43
重新学QT太麻烦了
作者: List 时间: 2022-4-18 16:35
指令AT+CWJAP="SSID","PWD"中得网络和密码有什么要求吗?WiFi模块和电脑必须连接这个相同的网络吗?
作者: carpe.tan 时间: 2022-4-21 09:13
下载看看
,
作者: entropyyyy 时间: 2022-4-27 12:09
回复,支持作者的开发工作
作者: allenxu 时间: 2022-5-2 12:31
支持楼主,但是为什么2D定位也需要4个基站呢?
作者: 蓝点无限 时间: 2022-5-3 22:08
因为找了个定位解算算法,这个准确度挺好
还有,虽然三边定位三个基站可以,但是三个布设起来,总是一个三角形,没有4个布设区域覆盖性好
作者: duanzw 时间: 2022-5-18 14:27
好资料,很想学习,谢谢楼主无私分享
作者: sd196821 时间: 2022-6-7 07:20
好东西,感谢分享
作者: iampest 时间: 2022-6-10 17:55
想学习python定位
作者: iampest 时间: 2022-6-10 17:57
python代码太实用
作者: chenjinping 时间: 2022-7-3 21:22
下载了,谢谢分享发11
作者: 13033100737 时间: 2022-7-5 13:22
支持支持支持支持
作者: 13033100737 时间: 2022-7-5 15:22
学习学习学习
作者: nzshuai 时间: 2022-7-10 21:20
感谢大佬分享
作者: nzshuai 时间: 2022-7-10 22:45
请问下载成功了吗
作者: liyc 时间: 2022-7-14 13:18
感谢分享!!
作者: Ma1011_11 时间: 2022-7-19 20:06
谢谢楼主分享,太好用了这个上位机
作者: Ma1011_11 时间: 2022-7-19 20:06
还好有蓝点无限,不然我的项目都不知道怎么办
作者: Dragon 时间: 2022-7-19 20:43
谢谢分享,谢谢楼主
作者: Dragon 时间: 2022-7-20 17:13
太强了,python代码太实用
作者: Felicia 时间: 2022-8-4 14:02
感谢分享,很棒!!!
作者: chenx0422 时间: 2022-8-25 22:10
感谢分享!!!!!
作者: spike 时间: 2022-8-31 20:18
回帖子,攒积分
作者: spike 时间: 2022-8-31 20:18
回帖子,攒积分
作者: spike 时间: 2022-8-31 20:18
回帖子,攒积分
作者: zzz11 时间: 2022-9-1 15:52
本帖最后由 zzz11 于 2022-9-1 16:11 编辑
请问
这个下载后打开运行界面是上面的界面预览吗?
我看到还有下面这种的
C:\Users\Administrator\Desktop\word\日报\研二\第六周20220829-\1.png
作者: uwb158 时间: 2022-9-13 14:41
感谢分享!
作者: qingchen621 时间: 2022-9-16 08:53
多谢分享多谢分享Python+qt
作者: AAAaaa123456 时间: 2022-9-27 08:18
这积分搞的我好心酸
作者: mosquito 时间: 2022-11-20 11:31
感谢分享!
作者: Aimmie 时间: 2022-12-1 17:08
请问:支持标签history 定位点数量设定 这个功能怎么理解呀?感觉改动率之后没有什么区别呢
作者: jcuwbsuidao 时间: 2023-1-27 11:39
很有用,谢谢楼主
作者: jcuwbsuidao 时间: 2023-1-27 12:16
想把基站的编号显示在液晶屏上,怎么改代码
作者: admin 时间: 2023-1-28 21:04
这个需要固件修改,上位机实现不了这个功能
作者: sscy 时间: 2023-2-2 18:13
谢谢大佬的分享
作者: Ialab2023 时间: 2023-3-9 16:27
真的超級感謝阿!!!!
作者: 可乐不是狗 时间: 2023-3-22 11:39
真大佬,感谢分享!!
作者: z936931869 时间: 2023-4-6 09:52
感谢,感谢
作者: 吉拉宇 时间: 2023-4-9 20:40
请问,BP30固件源码rx-main.c USART_puts(&msg_f->messageData[1],72);这一处更改。可以直接改为
HAL_UART_Transmit(&UWB_USART, (uint8_t *)&msg_f->messageData[1], 72, 0xFFFF);吗?
作者: uuker 时间: 2023-4-10 14:43
太强了!对我帮助很大。
作者: citlcol 时间: 2023-4-14 09:00
python代码是4基站的吗?还是3基站的
欢迎光临 51uwb.cn (http://51uwb.cn/) |
Powered by Discuz! X3.3 |