最小二乘法在飞思卡尔智能车路径搜索中的应用

1、什么是最小二乘法

最小二乘法就是要使得观测点和估计点的距离的平方达到最小,我们可以使用一些已知的离散的点,拟合出一条与这些离散点最为接近的曲线,从而可以分析出这些离散点的走向趋势。


如图所示是一个线性拟合,红色的线代表观测点与估计点的距离,使得这些距离的平方和最小这样就是最小二乘法。


2、最小二乘法的推导过程(学霸请忽略,学渣直接看推导结果)



3、如何将最小二乘法应用到飞思卡尔智能车的路径搜索上

在智能车比赛中对时间的实时性要求比较高,如果对摄像头采集到的一整幅图像进行完整的扫描需要耗费非常大的时间和资源,因此对于图像的识别算法至关重要,如何用尽可能少的时间和资源从图像中提取出有效的路径信息成为一个难点。我路径搜索算法如下:

1、图像底部开始,前面十行采用从中间往两边查找左右边线,找不到的用图像的左右边缘点代替

2、使用左右边线之和除以二作为路径中线

3、超过十行的,先使用搜索出的前十行的左右边线进行最小二乘法拟合出曲线的轨迹方程算出接下来的点可能出现的位置

4、在拟合出来的位置的左右 n 个点的范围内寻找目标点,找不到的使用出来的点代替

5、使用左右中线之和除以二作为路径中线

具体代码如下(无删减,自行理解这看):

/* image_control.c */

#include "image_control.h"
#include "main.h"

#define	IMG_BLACK		0
#define	IMG_WHITE		255
#define FIND_CENTER		0
#define FIND_LEFT		1
#define FIND_RIGHT		2
#define CENTER_POINT	IMAGE_W/2

int16 centerLine[IMAGE_H+1] = {0};			// 最后一个元素用来记录转向点对应的行数
int16 leftLine[IMAGE_H] = {0};
int16 rightLine[IMAGE_H] = {0};

static uint8 leftFindFlag;				// 用来标记左黑线是否找到
static uint8 rightFindFlag;				// 用来标记右黑线是否找到

static int16 leftCount;
static int16 rightCount;
static int16 findLine;
  • 39
    点赞
  • 277
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值