导航小白条····

  • 完成汽车之家·知道升级任务,解答问答,并被提问者采纳为满意回答,可得解答达人一级勋章

    完成汽车之家·知道解答问答任务,并被提问者采纳为满意回答。并符合升级规则,即可得解答达人二级勋章

    完成汽车之家·知道升级任务,解答问答,并被提问者采纳为满意回答,可得解答达人三级勋章。

    记录車辆真实油耗信息特授予【油耗达人】专属勋章。

    使用手机发表口碑分享真实用车感受,为广大用户提供购车参考特授予【掌上评車】专属勋章。

  • 发表追加口碑评价500字以上,通过编辑审核为优质追加口碑特此奖励优秀追加口碑勋章,以示鼓励

??15改款手动?驱尊贵,请问导航?卡还?什么导航?华阳?,原厂?导航不怎么好用想改……


如果有满意的回答请记得采纳答案以便有同样问题嘚车友更快看到答案。

引用 运动四驱尊贵 14:03:53 发表于 主楼 的内容:

1.学习IDA的使用结合四个例题学习IDA嘚静态分析和动态调试。
2.掌握base64编解码原理使用python编写自定义表的base64编解码脚本
3.阅读书籍《程序员的自我修养》

1.计算机主要分为硬件和软件,計算机中最核心的三个硬件是CPU内存,I/O控制芯片这三个部件的速度不同,计算机的发展一方面为了提升三者各自的速度同时又更好的加强三者之间协助。发展历程大致分为早期 – 北桥 – 南桥 – 多核
2.软件分为应用软件和系统软件,系统软件分为平台性的和用于程序开发嘚计算机软件体系结构采用一种层的结构,每个层次之间都需要相互通信则要有协议,这个协议就是接口下图为计算机软件体系结構:
3.中间层的存在使应用程序和硬件之间保持相对的独立。
4.系统软件一般指的是的一些开发工具它们都是调用的操作系统应用程序编程接口(API),API的提供者是运行库(简单理解就是一些大佬写好的代码给我等小白使用)什么样的运行库提供什么样的API,比如Linux下的Glibc库提供POSIX的API运行库使用操作系统提供的系统调用接口(SCI)。
5.操作系统内核层对于硬件层来说是硬件接口的使用者而硬件是接口的定义者,硬件接ロ驱动程序如何操作硬件等等这种接口叫做硬件规格。

一、学习IDA的使用结合四个例题学习IDA的静态分析和动态调试。

(1)cfg目录:包含各種配置文件,包括基本IDA配置文件ida.cfg、GUI配置文件idagui.cfg、文本模式用户界面配置文件idatui.cfg
(2)Idc目录:包含IDA的内置脚本语言IDC所需的核心文件。
(3)Ids目录:包含一些符号文件(IDA语法中的IDS文件),这些文件用于描述可被加载到IDA的二进制文件引用的共享库的内容
(4)loaders目录:用于包含在文件加载过程Φ用于识别和解析PE或ELF等已知文件格式的IDA扩展。
(5)plugins目录:包含专门为IDA提供附加功能的IDA模块也就是我们所说的插件。
(6)procs目录:包含已安裝的IDA版本所支持的处理器模块处理器模块为IDA提供机器语言-汇编语言的转换功能,并负责生成在IDA用户界面中显示的汇编语言
(7)sig目录:包含IDA在各种模式匹配操作中利用的现有代码的签名。通过模式匹配IDA能够将代码序列确定为已知的库代码,从而节省大量的分析时间
(8)til目录:包含一些类型库信息,IDA通过这些信息记录特定于各种编译器库的数据结构的布局
IDA主界面中存在一项颜色各异的导航条。通过导航条可了解分析可执行文件各部分数据分布情况
IDA提供函数窗口供用户查找函数信息,在窗口按下“CTRL + F”快捷键便可根据需求搜索函数名赽速定位函数名方式可提供逆向分析效率。
当 IDA 对 Mach-O 解析完成后会默认出现 6 个选项卡视图,分别是汇编视图二进制查看视图,结构体视图枚举类型视图,导入的函数视图导出的函数视图。
反汇编窗口属于逆向分析过程中关注频率最高的窗口通过此窗口可以逆向分析反彙编代码,移动端中分析频率最高的属于Arm指令集反汇编窗口属于“IDA View-A”标签项内容。反汇编窗口可分为两种模式分别为:默认模式和图形模式。
Ⅰ.默认模式:反汇编窗口默认模式属于使用频率很高的常规模式
标号1:此处对应名称为sub_属于IDA使用默认方式标识函数名,默认命洺规则为:sub_+函数内存相对偏移可执行程序部分由大量的函数代码组成,属于代码片段基本组成单位
标号2:表示反汇编代码对应内存的楿对偏移及所属的节段名称,此处需区分内存偏移和文件偏移IDA以内存偏移的方式加载可执行文件各节段内容。
标号3:表示函数内部的局蔀代码块通常以跳转目的地址为规则定义代码块,属于IDA使用默认方式标识函数名该部分命名规则为:loc _+函数内存相对偏移,通常与跳转操作密切相关
标号4:表示反汇编文本内容,通过反汇编内容可进行逆向分析
标号5:对应内容为“; CODE XREF: sub_+BE↓p”,表示当前代码的交叉引用对應标号的文本含义为:“sub_”上层调用由“sub_”函数内部偏移0xBE↓p出调用
Ⅱ.图形模式:反汇编窗口默认模式中按下键盘的“空格”键便转入图形模式,也可通过图形模式界面如下图所示:
图形界面以单个函数为单位通过图形界面能够快速的掌握函数内部程序执行过程(对于分析C++嘚IF跳转语句、循环语句的反汇编代码结构所提供的帮助尤为明显)
A.浅绿色方向线,表示C、C++等编程语言的判断语句为YES所跳转执行流程
B.红色方向线,表示C、C++等编程语言的判断语句为NO所跳转执行流程
C.蓝色方向线,表示程序顺序执行过程
二进制窗口可支持用户查看可执行文件對应相对偏移的二进制机器码数据,二进制查看窗口对应“Hex View-1”选项内容
二进制查看窗口总共分为三部分,含义分别为:
左边数据:表示②进制数据对应的内存相对偏移
中间数据:表示内存中数据的具体内容。
右边数据:表示内存数据的字符串显示该功能可辅助读者快速识别字符串内容。
用户可在二进制查看窗口中编辑二进制数据从而满足篡改数据的测试需求
结构窗口提供用户查询已定义的结构体,哃时IDA可识别出可执行文件包含的部分结构体数据结构窗口可通过快捷键“+”、“-”展开和收缩结构体,IDA结构窗口支持用户自定义结构体
IDA提供导入函数窗口,用于可在导入函数窗口中查看当前可执行文件导入哪些外部函数库及函数通过导入函数窗口可获取到函数内存相對偏移地址、函数名、导入函数所属的库文件。
IDA的导出函数窗口提供可执行文件导出函数信息通过导出函数窗口可获取到导出的函数名、函数对应的内存相对偏移地址。
3.IDA分析可执行文件
判断IDA分析完毕的方法:
2)导航条的进度条处橘黄色向上箭头消失时则表明IDA分析完毕。
3)IDA界面左下角AU处于”idle”状态时也表明IDA分析完毕。
4.静态分析:还原源代码
使用 IDA 反汇编二进制文件的目的是利用工具得到反汇编之后的伪玳码,还原出真正的程序源码
双击左边Function name 到达这个函数在二进制文件中的内存地址,按 F5 可以就查看这个反编译的伪代码
双击main进入,按esc可鉯返回上一层然后F5便可以显示c代码
但是有时候函数多的时候找不到main函数,re的题目通常都没加密字符串
所以用另一种可行办法:alt+T搜索可用嘚字符串字符串可以运行程序获得

二、掌握base64编解码原理,使用python编写自定义表的base64编解码脚本

(一)base64编解码原理
1.Base64的由来:传输8Bit字节代码的编碼方式之一在参数传输的过程中经常遇到的一种情况:使用全英文的没问题,但一旦涉及到中文就会出现乱码情况与此类似,网络上傳输的字符并不全是可打印的字符比如二进制文件、图片等。Base64的出现就是为了解决此问题它是基于64个可打印的字符来表示二进制的数據的一种方法。
2.Base64的编码原理:每当使用Base64时都会先定义一个类似这样的数组:
[‘A’, ‘B’, ‘C’, … ‘a’, ‘b’, ‘c’, … ‘0’, ‘1’, … ‘+’, ‘/’]这个就是Base64嘚索引表字符选用了"A-Z、a-z、0-9、+、/" 64个可打印字符,这是标准的Base64协议规定在日常使用中还会看到“=”或“==”号出现在Base64的编码结果中,“=”在此是作为填充字符出现
第一步,将待转换的字符串每三个字节分为一组每个字节占8bit,那么共有24个二进制位
第二步,将上面的24个二进淛位每6个一组共分为4组。
第三步在每组前面添加两个0,每组由6个变为8个二进制位总共32个二进制位,即四个字节
第四步,根据Base64编码對照表(见下图)获得对应的值
从上面的步骤我们发现:
Base64字符表中的字符原本用6个bit就可以表示,现在前面添加2个0变为8个bit,会造成一定嘚浪费因此,Base64编码之后的文本要比原文多大约三分之一。
为什么使用3个字节一组呢因为6和8的最小公倍数为24,三个字节正好24个二进制位每6个bit位一组,恰好能够分为4组
但是如若遇到位数不足的情况:
若需要但没有则用0补充,若是不需要的完全没有数据的则用“=”补上
? 大多数编码都是由字符串转化成二进制的过程,而Base64的编码则是从二进制转换为字符串与常规恰恰相反,
? Base64编码主要用在传输、存储、表示二进制领域不能算得上加密,只是无法直接看到明文也可以通过打乱Base64编码来进行加密。
? 中文有多种编码(比如:utf-8、gb2312、gbk等)鈈同编码对应Base64编码结果都不一样。
6.延伸:上面Base64是用6位(2的6次幂就是64)表示字符因此成为Base64。同理Base32就是用5位,Base16就是用4位
(二)使用python编写洎定义表的base64编解码脚本
引:假如在Unicode中汉字“你”的编码为“u4F60”,把它转换为二进制为000然后按照UTF-8的方法进行转换。可以将Unicode二进制从地位往高位取出二进制数字每次取6位,如上述的二进制就可以分别取出为如下所示的格式前面按格式填补,不足8位用0填补
从上面就可以很矗观的看出Unicode到UTF-8之间的转换,当然知道了UTF-8的格式后就可以进行逆运算,就是按照格式把它在二进制中的相应位置上取出然后在转换就是所得到的Unicode字符了(这个运算可以通过“位移”来完成)。如上述的“你”的转换由于其值大于0x800小于0x10000,因此可以判断为三字节存储则最高位需要向右移“12”位再根据三字节格式的最高位为(0xE0)求或(|)就可以得到最高位的值了。同理第二位则是右移“6”位则还剩下最高位和第二位的二进制值,可以通过与111111(0x3F)求按位于(&)操作再和(0x80)求或(|)。第三位就不用移位了只要直接取最后六位(与111111(ox3F)取&),在与x80)求或(|)

  我的红外遥控双轮平衡小车程序初步完整STM32F103ZET6主控,整个LCD显示MPU6050数据读取,角度计算卡尔曼滤波,PID算法PWM输出,红外遥控都已完成,还剩下最后PID的几个具体参数的调试叻这个需要等我的硬件部分完成之后开始,下面附上我初步的工程程序的链接已经编译OK了的。

后面会继续更新包括硬件部分。

最近茬硬件调试时电路哥哥模块都链接好之后,接上12V驱动电机的电源之后把我的STM32的板子给烧了,具体原因还在找估计得加上光耦隔离。需要做好足够的保护措施才是确实我的STM32在连接那个L298N的驱动时候就遇到了显示的问题,开始没太在意最后给L298N接上12V的时候,整个就烧了雖然没有和STM32直接相连。最开始接上6V(给L298N芯片供电的理论上应该是5V)时,TFT显示等等都是没有问题的然后给编码器接上电池(3.7V的,3V到5V的都可鉯)接着给L298N接上12V的,然后TFT屏就白了不能显示东西了,但这个时候烧录程序什么的都是可以进行的而且,烧录我原来的程序也就是沒有驱动电机的,而只是单纯地显示MPU6050参数的程序是可以正常运行的而且TFT是可以正常显示的,烧录进后面完整的通过定时中断方式输出PWM的程序时屏幕就无法显示了,我后来认为是那个编码器的电源没有与单片机共地然后我引了一条线与单片机共地,再接上12V电源再给单爿机供电时,发现板子上没有任何反应了并且发现UART模块发热很严重,一插上板子那上面的灯就不亮了,板子上的灯根本没有反应了通过其他端口供电也米有反应,果然是电源端与地段短路了通过万用表也测出来了,但无法找出是哪里发生短路了估计是哪里被击穿叻吧。后来我看了下这个板子的系统电路图他们的电源端和地端之间都是接有电容的,我想很可能是某个电容被击穿了导致短路。电機启动瞬间会产生尖峰脉冲会对控制器产生影响

复制他人(如图为L298组成的电机控制,MCU是STM32F103RBT6电源12V,经过LM2676转换5V供给板上5V的芯片5V经过LM1117输出3.3V给STM32,电机运行的情况下将产生50V的反向电动势这个电动势将在续流二极管SK24的作用下回馈到电源VIN消耗掉,也就是这样会抬高输入的12V电压假使這个50V的反压会通过LM2676到达+5V电压,在L298的+5V端通过L298的IO作用到STM32的IO

第一个问题,看到STM32的IO说明图里面有保护二极管这个保护二极管是内部带的吗?这個二极管吧高压回馈到STM32的电源会不会烧芯片,手册上的“VDD_FT 对5 伏兼容I/O 脚是特殊的”VDD_FT是如何连接的,什么原理能使他兼容5V输入。是不是兼容5V就去掉了内部的上拉保护二极管它与VDD ?同手册所说的ESD保护2000V是否能保护我现在这种情况的发生。第二个问题我现在L298用的5V逻辑电压,STM32鼡的3.3V这种情况下STM32做输出会产生什么不好的因素,如何避免设置为OD吗?经过试验现在很快烧毁了两片103RBT6,实在是无法也不太敢在原来电蕗基础上做实验望各位多多指教,)

解决任何问题必须下定决心一定要一定要!!!不然拖拖拉拉!

我认为编码器与单片机是需要共哋的,需要参考定位点宽且编码器的电源并不是导致TM32烧掉的原因,罪魁祸首应当还是那个12V电源!

不然你编码器返回的脉冲和你单片机参栲电平不一致
这样单片机就不能得到有效的电平信息
所有的类似的需要两个系统之间通讯的在使用一套电源的前提下都是需要共地

STM32的IO口昰要先进行时钟定义然后初始化的。

在我对IO口初始化后再在main函数中写入PWM_INT()之后,我的车子受PWM轮子可以转了


终于进入最后的PID参数的调节。
此时的小车程序代码如下当然我还没有接上红外遥控模块,但PWM可以正常输出控制电机了

平衡小车matlab建模:


建模、控制算法及PD调节的取值參考:

matlab(matlab需要2008版,旧的6.5版打不开)里打开NXT.mdl输入NXT.m.txt内容回车,K_f的四个值就是所需的PD调节比例;详细参考NXT的文档;

 1:新布置的因为修改了一些不合理的地方,和我使用的不一样主控制板上RS232硬件部分还未调试过,所以使用时需要注意;
 2:可调电位器用来调试修改PD参数;
 3:另外幾个接口可以用来改成遥控输入比例遥控可以用AD采样口实现,但需要增加滤波;
 4:车轮速度我进行了低通滤波否则可能会发抖;

 1:同樣重新修订,PCB最好自己优化并检查;
 2:马达控制板最好是使用IR2184因为直接兼容5V电平,IR2111需要使用12V输入我直接在单片机输出口接12V上拉电阻,吔可以使用但不推荐;
上位机只是简单的查看滤波效果和车速是否正确取得,VB编写的大家可做完善;

辛苦了大概两个多月,之前一直嘟调不好中间也遇到了很多的问题,但当问题解决后每次都是重大的突破现在就介绍一下,制作过程中遇到的问题                1、关于加速度计嘚转换系数  把从加速度计读出来的数据转换成角度,要乘以一个比例系数在转换成角度角度的过程中,可以完全不用三角函数(因为车嘚倾角其实不会超过正负10度后面会提到),直接把(最大值-最小值)/90(/2如果有正负的话)作为比例系数就可以了(这样可以和真实角度仳较)其实理论上这个比例系数是什么都可以,因为后面陀螺仪转换系数是根据加速度计的转换比例系数跳出来的所以加速度计的比唎系数无论是什么值都没有影响。             陀螺仪的转换系数需要根据滤波的波形来调(我是在飞思卡尔公布的官方方案中看到的经实践千真万確),陀螺仪的转换系数不用去算只需要通过看波形去调就可以了,直到不超调也不滞后就可以了具体的可以看附件官网方案中的93页(第二版)。  互补滤波:这是很简单也很实用的方法其实和官网的方案有一点类似的地方,在网上有一个很著名的20页的PPT文件The Balance Filter介绍的是互补滤波,相信大家看了之后都会明白的在文件中,作者把高通滤波系数a和时间常数T(涛不知道怎么打出来)及采样周期dt用一个公式建立了联系,而我的经验是我们不要用这个公式去计算。高通滤波系数取0.98(不能比0.98再小了会不平滑),采样周期根据你程序的需要是哆少就多少(5ms的效果会比10ms好很多越小越好),滤波可以通过调陀螺仪的转换系数达到很好的效果也就是说,用互补滤波的关键调试参數是陀螺仪转换系数把加速度计转换系数、高通滤波系数和采样周期定好之后,只需要调试陀螺仪转换系数就可以达到满意的效果了  官網滤波方案:我总觉得官网的和互补滤波有些相似经实验,效果也是很好的具体的公式在参考方案里面也有。调试的关键就是陀螺仪轉换系数                卡尔曼滤波:一直没用过,也不会用主要是没弄懂。我不喜欢用一知半解的东西因为出现问题的时候排查不出来或者不知噵怎么解决问题。网上也有很多卡尔曼滤波的程序因为一直看不懂,就连试也没试如果会用的话,效果应该是好的但我不会用。如果有谁用兴趣的话还请多多指教互相交流一下。        这样的话就要把P调的很大具体是多大呢,至少是电机满值的十分之一(五分之一甚至彡分之一都是没问题的)例如电机最大输出是1的话,P取0.1、0.2、0.3都是没问题的(官网的方案好像是取的0.3)如果点击最大输出是5000的话,那么P取500、1000、1500都是可以的(当然前提是加速度计转换系数转换出来的角度值和真实值相当,否则另当别论)所以车模的角度应该不会超过正負十度,因为当P=0.3的时候车模有三度多的偏差时电机就满电压输出了。我之前就是一直用一个很小的P去调原来所有的问题就在于把P调大僦可以了。  至于D的话大概在P的七十分之一或八十分之一之间都是可以有很好的效果的。这个关系就和加速度转换系数没有关系了比如官网中P=0.3则D=0.3*1/75=0.004,在我这里P=1000则D==13.3,效果都是很好的PS:这个关系只是在车模静止平衡时的关系,行进中的关系我还没有实验过    

总结得也是相当箌位的,现在才渐渐看懂

现在才渐渐意识到核心不是PID的调节了,是滤波还有转换系数等等

下面一张截图是我目前小车调到最好时的滤波,可以明显感受到滤波前和滤波后的不一样也深深地感受到滤波信号处理的厉害与重要。

这个波形的显示的扯个串口调试助手还是用屾外的好那个SSCOM32以后建议不用了,直接用这个功能非常强大,支持自动搜索串口等等包括发送字符也支持16进制的显示。完爆SSCOM32,也谢谢学長的推荐我也附上合格山外串口调试助手的下载链接,里面有使用说明文档


经过串口调试显示波形再调试参数等等,现在车子可以达箌稳定十几秒最高纪录42秒了(连续几十个小时彻夜的参数调试),下面附上目前调的最好的一组参数的程序至少可以让小车保持基本(十几秒几十秒)的平衡,当然我最终目标是永久的平衡下面是程序链接:

附上我小车的图片吧(硬件上已经完成的)


本来是想自己把串口引出来,后来才发现那个手机数据线插口下载程序的就是串口可以共用哈哈。


我觉得我之后要好好研究下滤波了对于这个小车,還远没有结束只是开始,我要它像那天晚上我见到的四轴飞行器一样平稳!我觉得滤波是关键中的关键!

我要回帖

更多关于 导航小白条 的文章

 

随机推荐