在上机实验中,我们通过程序耗时分析发现:数据解析所花的时间几乎占到软件处理时长的60%左右,即对于一个1Hz 的绘图频率来说,解析数据花了0.6s 左右,这其中主要包括数据转换、通道定位两个方面。因此,我们需要对这两个模块的软件编码进行优化,优化方法如下:
(1)数据转换模块软件编码优化
由于串口通信读取到的数据都是十进制的数字格式的数据串,为了实现按通道号解析这些数据,我们需要将数据转换为16 进制数据格式,即以出现FA、FC、C 等字符形式;然后将这些数据格式转换为字符串数据格式,再调用strcat 函数来实现用字符串匹配定位开始、结束和各个通道,并读取对应字符串;最后,将字符串再转换为十进制数据格式的测距时间数据格式。整个过程中需要进行40 次左右(以激光发射频率20Hz 为例)数字格式与字符串格式之间的转换运算。在程序优化时,我们还考虑到了测距数据不存在正负之分,即把测距时间都视为正。所以,我们将常规的str2num 函数修改为str2double 函数。这样一来,一次数据格式转换可以减少0.01s 时间。如果三维可视化绘图程序运行一次需要转换40 次左右的数据信息的话,优化后的模块软件可以节约0.4s 的时间。
(2)通道定位模块软件编码优化
由于在通道定位时,软件需要对16 进制的通道标识符C 进行识别,并以此判断后续数据是数据位还是通道号,所以现有的软件模块做了大量的if-else 逻辑嵌套运算。因此,我们对程序进行了优化处理,优化时采用switch-case 或for 循环替换。在图9-21(a)中,我们将图9-21(a)中数据通道判断模块的if-else 逻辑嵌套语句修改为图9-22 中的switchcase 处理语句。由于if-else 每次都要遍历整个嵌套程序,所以耗时比较久,而switch-case直接跳转到相应的模块速度较快。根据我们的测试,每处理一次数据耗时能节省0.001秒。如果按照一帧三维可视化绘图要处理500 个数据来计算,优化后的软件可以提速0.05 秒左右。
图9-21 数据通道判断模块的if-else 逻辑嵌套语句
经过以上两个软件模块优化处理,三维可视化绘图程序速度有大幅度提升,已达到0.45~0.55s 完成一次绘图,满足当前1Hz 绘图速度的要求。
图9-22 switch-case 处理模块(www.xing528.com)
面阵激光测距三维绘图软件目前已经编译、封装为软件安装包,可在任何Windows XP 及以上系统的计算机上安装运行(参见图9-23)。该软件安装包的属性如下:
①名称:25 路激光雷达三维绘图程序V2.1;
②版本号:V2.1;
③文件大小:12.2M。
图9-23 25 路激光雷达三维可视化绘图软件安装文件
该软件安装文件非常简单,只要双击安装文件时,计算机就会出现如图9-24 所示的安装向导,最终会在计算机程序菜单和当前用户桌面生成一个程序快捷方式。
图9-24 25 路面阵激光雷达三维可视化绘图程序安装向导
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。