大家好,我是MPIG2018级研究生刘飞亚,在上一次的讲解中,我们讨论了光线投射栅格地图的相关内容;机器人在认识环境的过程需要地图的构建来感知周围环境。今天再来给大家介绍圆拟合,圆拟合的也是地图构建的一部分,通过圆拟合可以让机器人在环境中标记类圆物体,准确地识别物体能让机器人更好地描述环境,下面来看一下吧。
主要内容:
1、拟合圆的算法
2、Python中的实现
1、拟合圆的算法
大家都知道利用最小二乘法有中学时代学过的线性回归模型:线性回归利用一组散点数据,对整体趋势用一条拟合度很高的直线直观的表示了数据的走势,从而可以很好的认识观测数据。与线性回归模型类似,圆拟合简单来说就是用一组近似圆的观测值,对之进行耦合为圆。讲圆拟合之前,可以先了解这一段历史:
1801年,意大利天文学家朱赛普·皮亚齐发现了第一颗小行星谷神星。经过40天的跟踪观测后,由于谷神星运行至太阳背后,使得皮亚齐失去了谷神星的位置。随后全世界的科学家利用皮亚齐的观测数据开始寻找谷神星,但是根据大多数人计算的结果来寻找谷神星都没有结果。时年24岁的高斯也计算了谷神星的轨道。奥地利天文学家海因里希·奥尔伯斯根据高斯计算出来的轨道重新发现了谷神星。高斯使用的最小二乘法的方法发表于1809年他的著作《天体运动论》中。(来源:百科)
因为研究物体及其运动过程中,记录其所有的信息进行需要大量数据,如果只有部分的观测数据,但想对整体进行描述和预测,这就需要好的算法,本节中就用最小二乘法通过模拟数据集来估计类圆整体。
我们看一下具体算法思想:
我们假设通过传感器测出的类圆的数据,用坐标表示为xi,yi,(i=1,2,...),下图所示的散点:
蓝色圆:假设的实际的圆
红色圆:拟合的圆
怎么样才能找到最适合最符合实际圆的拟合圆呢?直观看肯定③图更合适,其实得到③图就是使这些数据集点与某个圆的边缘距离之和最小:(A,B)为拟合圆圆心,R为半径。
但是这样由于带根号后续不易计算。所以我们用到平方的差的再次平方作为函数求其中的变量A,B,R,使f取得最小。(因为平方的差也有正负,再次平方防止抵消)
具体算法:
化简得:
解出a,b,c即可得到拟合圆的信息:A=,B=,R=
2、python实现圆拟合:
关键代码。T中的元素就是求得的参数a,b,c的值。error:准确误差函数
两个函数:用来取一组圆附近样点。相当于用传感器测一个物体的数据。
main函数用来生成初始圆、模拟的样点数据集和拟合圆。
拟合效果:
蓝色圆:实际圆
红色圆:拟合圆
红色x:模拟样点
想了解更详细内容,来看看我的Presantation吧:
领取专属 10元无门槛券
私享最新 技术干货