matlab練習程式(Stanley路徑跟蹤)

2022-09-20 05:18:09 字數 1540 閱讀 4506

方法示意圖:

控制率公式:

其中theta是當前航向角與路徑航向角之差,e為橫向誤差,v為車輛速度,lambda為控制引數。

演算法步驟如下:

1. 根據當前定位結果找到路徑最鄰近點。

2. 計算該點與定位結果橫向誤差e與航線誤差theta。

3. 根據控制率公式計算出前輪轉角。

4. 將前輪轉角轉化為航向角,帶入運動模型計算出下一時刻的位姿。

matlab**如下:

clear all;close all;clc;

v = 1

;lambda = 3

;dt = 0.1

;l=2.5

;curp=[000

];x = 0:0.1:50

;y = sin(x/5

);path = [x'y'

];for i=2

:length(path)

dx = path(i,1)-path(i-1,1

); dy = path(i,2)-path(i-1,2

); path(i-1,3) =atan2(dy,dx);

endpath(length(path),

3) = path(length(path)-1,3

);plot(path(:,

1),path(:,2),'r.'

);hold on;

for i=1

:length(path)

d = path(:,1:2) - curp(1:2

); dis = d(:,1).^2 + d(:,2).^2

; [~,ind] = min(dis); %找路徑最近點索引

dx = curp(1) - path(ind,1

); dy = curp(2) - path(ind,2

);

e = (sin(curp(3) - atan2(dy,dx)))*sqrt(dx*dx+dy*dy); %橫向偏差

u = (path(ind,3) - curp(3)) + atan2(lambda*e,v); %期望前輪轉角

curp(

1) = curp(1) + dt*v*cos(curp(3

)); curp(

2) = curp(2) + dt*v*sin(curp(3

)); curp(

3) = curp(3) + dt*v*tan(u)/l;

plot(curp(

1),curp(2),'g.'

);end

結果如下:

綠色為跟蹤路徑,紅色為已知路徑。

參考:

matlab練習程式(DBSCAN)

和kmeans相比,不需要事先知道資料的類數。以程式設計的角度來考慮,具體演算法流程如下 1.首先選擇乙個待處理資料。2.尋找和待處理資料距離在設定半徑內的資料。3.將找到的半徑內的資料放到乙個佇列中。4.拿佇列頭資料作為當前待處理資料並不斷執行第2步。5.直到遍歷完佇列中所有資料,將這些資料記為一...

matlab練習程式(c c 呼叫matlab)

就我目前了解的c 呼叫matlab有兩種方法。第一種是通過matlab引擎呼叫,也就是這裡用到的方法。第二種是用matlab將m檔案編譯為相應的h lib dll檔案再加以呼叫。使用engine所用到的h和lib檔案基本在d program files matlab r2010b extern裡面,...

matlab練習程式(SUSAN檢測)

susan運算元既可以檢測角點也可以檢測邊緣,不過角點似乎比不過harris,邊緣似乎比不過canny。不過思想還是有點意思的。主要思想就是 首先做乙個和原影象等大的目標影象。然後用乙個圓形的模板,用模板去遍歷原影象每個畫素,把模板內的每個畫素都和模板中心畫素比較,如果灰度小於乙個閾值,那麼就對目標...