当前位置:  开发笔记 > 人工智能 > 正文

如何使用微控制器芯片计算GPS坐标之间的距离

如何解决《如何使用微控制器芯片计算GPS坐标之间的距离》经验,为你挑选了1个好方法。

我需要计算GPS co-ordinates计算行进距离之间的距离.我都试过了HaversineVincenty算法,做工精细我的台式电脑上,但是当我使用相同的代码MSP430 chip使用CCS IDE,IDE会抛出错误,指出" 计划将不适合可用内存 ".

是否有其他替代方法或代码可以找到两个GPS坐标之间的距离?哪个适合MSP430微控制器的可用内存?



1> sifferman..:

因为你使用的微控制器德州仪器MSP430F2274只有32kB的闪存和1kB的RAM,所以你的内存不足也就不足为奇了.

有几种方法可以解决您的问题,每种方法都有不同的权衡.这是三个:

使用另一个具有更多内存的微控制器(MSP430系列中有许多内存).

优化代码以适应可用空间.

使用比VincentyHaversine更简单的公式.

我将在下面讨论后两种方法.

优化您的代码

根据应用程序的准确性要求,优化现有代码可能比使用比VincentyHaversine更简单的公式更好.

一种简单的优化方法

也许只是将编译器设置为针对大小进行优化将解决您的问题.在MSP430工具集中,使用--opt_for_speed=0开关.根据MSP430优化C/C++编译器用户指南(v15.9.0.STS)(第62页),此开关:

实现针对改进代码大小的优化,具有恶化或影响性能的高风险.

所以你可以很容易地通过使用这个开关让事情变得有效,代价是以记忆空间的速度换取速度.

更多涉及的优化方法

假设您正在使用随编译器提供的浮点数学库,如果您使用更节省空间的版本替换数学库,则可能仍然可以使用VincentyHaversine.在CORDIC定点算法提供迭代方法来计算所述三角函数,即交易走速度为空间效率.如果您使用自己的数学库,则可以在空间,速度和准确性之间取得良好的平衡.对于CORDIC方法的16位版本sine()cosine()用于MSP430是这里 ; 您需要确定它是否提供您所需的准确度和精确度.

使用不同的公式

通常,计算地球上两点之间的距离的各种算法表示精度和复杂度之间的折衷.您引用的Vincenty算法比Haversine准确得多,因为它更准确地将地球表示为扁球体而不是半径球体R; 因此数学更复杂.

作为参考,这里显示了Haversine方法(假设地球是一个完美的球体):

dlon = lon2 - lon1
dlat = lat2 - lat1
a = sin^2(dlat/2) + cos(lat1) * cos(lat2) * sin^2(dlon/2)
c = 2 * arcsin(min(1,sqrt(a)))
d = R * c

中间结果c是以弧度表示的距离.距离dR(地球半径)的单位相同.

如您所见,Haversinearcsin()在计算中使用了一个.

您可以使用Polar Coordinate Flat-Earth方法进一步简化数学运算:

a = pi/2 - lat1
b = pi/2 - lat2
c = sqrt(a^2 + b^2 - 2 * a * b * cos(lon2 - lon1)
d = R * c

请注意,arcsin()此计算中没有,但有一个sqrt().

关于HaversinePolar Coordinate Flat-Earth方法之间的准确性权衡的讨论在这里,问题Q5.1.

也可以看看

如何计算浮点支持较差的处理器上GPS坐标之间的距离?

http://www.faqs.org/faqs/geography/infosystems-faq/问题Q5.1

地理距离(维基百科)

推荐阅读
手机用户2402851155
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有