我目前有一个带有一些传感器的机器人,比如 GPS、加速度计和指南针。我想做的是让我的机器人到达我输入的 GPS 坐标。我想知道是否已经存在任何算法来做到这一点。我不想要一个没有任何意义的源代码,只是我的机器人要遵循的程序,以便我能够理解我在做什么......现在,让我们想象一下每次都可以访问 GPS 坐标,因此不需要卡尔曼滤波器。我知道这是不现实的,但我想一步一步地编程,下一步是卡尔曼。
如果有人有想法...
我目前有一个带有一些传感器的机器人,比如 GPS、加速度计和指南针。我想做的是让我的机器人到达我输入的 GPS 坐标。我想知道是否已经存在任何算法来做到这一点。我不想要一个没有任何意义的源代码,只是我的机器人要遵循的程序,以便我能够理解我在做什么......现在,让我们想象一下每次都可以访问 GPS 坐标,因此不需要卡尔曼滤波器。我知道这是不现实的,但我想一步一步地编程,下一步是卡尔曼。
如果有人有想法...
要在两个经纬度点之间获得方位角(北以东的正角),请使用:
bearing=mod(atan2(sin(lon2-lon1)*cos(lat2),(lat1)*sin(lat2)-sin(lat1)*cos(lat2)*cos(lon2-lon1)),2*pi)
注意- 根据您的数学包,角度可能必须以弧度表示。
但是对于小距离,您只需计算您所在位置的经度和经度有多少米,然后将它们视为平面 X,Y 坐标。
对于典型的 45 度纬度,它约为 111.132 公里/度纬度,78.847 公里/度经度。
1) 将您的机器人朝向其目的地。
2) 向前移动,直到您和目的地之间的距离越来越大,您应该回到 1)
3)但是......如果您足够接近(低于阈值),请考虑您已到达目的地。
你可以使用Location
类。它的BearingTo
功能计算您必须遵循的方位才能到达另一个位置。
有一个非常好的页面解释了我一直在使用的基于 GPS 的距离、方位等计算之间的公式:
http://www.movable-type.co.uk/scripts/latlong.html
我目前正在尝试自己进行这些计算,并且刚刚发现在 Martin Becket 的答案中存在错误。如果您比较该网页的信息,您会看到中间的部分:
(lat1)*sin(lat2)
实际上应该是:
cos(lat1)*sin(lat2)
本来会留下评论,但还没有声誉......