完成“LPS node 与Crazyflie在TWR协议下的成功双向测距”实现心路历程总结
- 1.初识TWR协议
- 2. TWR进阶1.0
- 3.TWR协议进阶2.0
- 4.TWR协议进阶3.0
- 5.TWR协议进阶4.0
- 6.总结
说来惭愧,这一点点东西做了快3个月[手动狗头.jpg]
但是这个协议的深入学习让我真正认识到研究生该怎样从零开始独自深入学习从未接触过的知识。一个人做科研确实很难。
1.初识TWR协议
暑假到9月中旬,在导师一点点引导下,我学习Crazyflie、TWR协议的一些基础知识。9月中下旬导师布置下来,希望我能实现lps node在TWR协议下同时作为anchor和tag通信,这个其实是已经实现的东西。在那之前我对TWR协议的了解只不过是lps固件中接收到report包的处理代码:
具体的测距计算公式代码:
于是,我的初步理解是,只要在接收和发送的两个回调函数里都写上四种数据包,不就能够实现lps node既能够作为tag发起测距,同时保持其作为anchor时的测距功能了?结果是,当然不可以!!![苦笑.jpg]
2. TWR进阶1.0
盯紧这个文件下的代码,我看了很久,发现实在是独自解决不了这个问题了,只能腾讯会议求助远在另一校区的师兄。其实都没和师兄见过面,很怕师兄不耐烦给我解答。还好师兄不仅给我解答了,还帮我拓宽了思路——我之前只局限于一个文件就是不对的,应该要从uwb这个模块出发,一点一点发掘。我这才发现我以前是多么傻,都读研究生了,还是会偷懒,自己觉得没有用的代码就没有看!
于是就从main开始,将整个uwb模块的逻辑梳理了一遍,终于理清了lps node中各个协议的调用逻辑!这对我了解整个模块的代码有很大的帮助。
当时画的结构图,现在看来好粗糙,并且没重点!!!
3.TWR协议进阶2.0
到这里,其实整体框架已经能够出来了。但是还有一些细节,并且lps node串口输出我一直都还没实现(现在想想好傻!应该第一步就去实现这个的!!!)代码烧录进去后,我无法调试这个模块,导致我做了很多无用功。
这期间,我又去问了两次实验室跟我同级的同门,他也给了我很多帮助,帮我拓宽了我的思路,使得我可以从无人机那一端通过console调试。但是依旧没实现!!!于是老师让我实先两个无人机之间同时作为anchor和tag。其实这个比较好实现,因为这个只要无人机那一端的代码就好了,并且在此之前老师把他之前改过的无人机 通信代码发给了我。我照着写了一下,实现了两个无人机之间的通信。
但是 lps node和无人机之间的通信依旧没有实现!
4.TWR协议进阶3.0
于是我跟老师说,我想先实现lps node的串口输出(这个任务本来应该在完成TWR协议改写之后再做的)。因为我发现我如果不实现串口输出,根本无法知道我在lps node那一端修改的代码起了什么作用!
于是首先从翻看STM32开发手册开始,这里不得不说,开发手册是个多重要的东西呀!期间也向同门求助啦,最后算是自己独立解决了串口输出这个问题。从这里开始写blog了,这样每周周报就不用自己特地整理了,平时整理好发到blog上就好了。
现在终于可以调试lps node端的代码啦~~~
5.TWR协议进阶4.0
有了串口输出,就可以通过printf来调试啦,这是个笨但是非常有用的方法,安利给大家。但是在这期间,期末考试接踵而至,导致没有一个可以安安生生做科研的时间,进度被拉慢了许多,然后又赶上放假回家,又耽误了两三天。
前两天调试一直找不到出错的原因,就在每周周报中表示,希望能跟老师沟通下,拓宽下思路,老师安排了周二交流。于是我就想着今天再梳理下我的思路,好明天跟老师交流的时候思路清晰一点。
但是!没想到,这一梳理就把问题给解决了!!!hhhhhhh
竟然是因为我没有把lps node端的协议选择写死…
6.总结
这算是科研小白一学期以来的科研历程总结啦。
一个任务一学期才完成,期间好怕导师因为我太菜而不要我。不过不可否认,我真的花了很久的时间才进入到:我是一个CS专业的研究生的状态。期间也因为没有做什么东西被导师敲打了(是我的问题,导师真的很好,室友很羡慕我有这么好的导师)。
总的来说,不要担心成果,只要你继续走在科研的路上就OK啦!老师不会因为你不会而怪你,但是会因为你不做东西而怪你。
不写了不写了,中间有很多细节,以后慢慢补充。