智能车改舵机中值步骤_飞思卡尔智能车摄像头组新手指南(10)--控制算法进阶篇之舵机3...
曲率
彭岸輝
從理論上講,相對于偏差量,曲率是智能車更好的一個(gè)控制變量。但由于路徑檢測單元的局限性,很難計(jì)算出非常精確的曲率。
注意:計(jì)算曲率的方法如果要提高精度,最好是能夠?qū)⒉傻降幕螆D像做一下校正,以反映實(shí)際坐標(biāo)。
曲率問題可以歸結(jié)為已知三角形的三點(diǎn)坐標(biāo)?A(?x1,?y1?)、B(?x2?,?y2?)、C?(?x3?,?y3?),求解三角形外接圓曲率。
學(xué)過高數(shù)的都應(yīng)該知道向量的叉乘,定義為:兩個(gè)向量進(jìn)行叉乘得到的是一個(gè)向量,方向垂直于這兩個(gè)向量構(gòu)成的平面(三個(gè)向量符合右手坐標(biāo)系),大小等于這兩個(gè)向量組成的平行四邊形的面積。
設(shè)兩個(gè)向量為?a
=?(?xa?,?ya?,?za?)?、?b
=?(?xb?,?yb?,?zb?)則
由叉乘的定義可知,求?ΔABC的面積,可以通過求解來獲得,將上述叉乘公式應(yīng)用于二維情
況,即取?z?=?0,可得
所以
上式中,如果?ABC三點(diǎn)是順時(shí)針方向分布,則三角形面積為負(fù)值,逆時(shí)針分布為正值(如果不需要符號,取下絕對值即可)。
圖示為:
面積的符號對于智能車其實(shí)還是挺有用的。如上圖,如果曲線向右拐,算出的面積是負(fù)的,如果曲線向左拐,算出的面積是正的,上述面積的正負(fù)反映了曲線的方向。相比于海倫公式,用上述公式計(jì)算面積既可以減輕計(jì)算量,又可以反映曲線的方向,一舉兩得。有了上述公式,曲率可以表現(xiàn)為三角形外接圓半徑的倒數(shù),從而可得曲率計(jì)算公式:
上式中要求出三邊長,會用到求根公式,在單片機(jī)中開根號,那是很要命的。如果精度要求不高,可以自已寫一個(gè)簡單的求根函數(shù),東北大學(xué)的技術(shù)報(bào)告給出的求根函數(shù)是
unsigned?int?m_sqrt(unsigned?int?x)
{
uchar?ans=0,p=0x80;
while(p!=0)
{
ans+=p;
if(ans*ans>x)
ans-=p;
p=(uchar)(p/2);
}
return(ans);
}
曲率計(jì)算的參考代碼:
void?qulv()
{
int?x1,x2,x3,y1,y2,y3;
unsigned?int?length1,length2,length3;
int?S;
y1=5;
y2=10;
y3=15;
x1=mid_line[2];
x2=mid_line[1];
x3=mid_line[0];
S=abs((y2-y1)*(x3-x1)-(y3-y1)*(x2-x1));
length1=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
length2=sqrt((x3-x1)*(x3-x1)+(y3-y1)*(y3-y1));
length3=sqrt((x2-x3)*(x2-x3)+(y2-y3)*(y2-y3));
if(S<1)
S=1;
K=abs((length1*length2*length3)/S);//曲率的倒數(shù),即曲率半徑
Center_Average=mid(Center[0],Center[1],Center[2]);
大家具體可以看下往屆的技術(shù)報(bào)告。這里只是講解下這三種常用的方法,其他的方法就不再訴說了。
PS:限于作者的水平,對于文檔中存在的不嚴(yán)謹(jǐn)甚至錯(cuò)誤,希望各位能夠予以指教,
本人聯(lián)系郵箱:860038779@qq.com。
總結(jié)
以上是生活随笔為你收集整理的智能车改舵机中值步骤_飞思卡尔智能车摄像头组新手指南(10)--控制算法进阶篇之舵机3...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: layui 下拉框空选项不显示_layu
- 下一篇: inception v4 官方实现_经典