文章目錄
- 1 Introduction
- 2 代數圖論
- 3 主要結果
- 3.1 UGV 模型
- 假設 1
- 假設 2
- 3.2 分布式編隊控制
- 定理1
- 3.3 分布式最優編隊控制
- 定理2
- 4 Simulations
- 5 結論
- 參考文獻
- 附錄
本文研究了UGV(無人駕駛地面車輛)的多智能體系統的分布式最優編隊控制。從單個麥克納姆輪(Mecanum)輪開始分析了UGV的模型,建立了PWM(脈寬調制)信号和狀态資訊之間的關系。基于一緻性協定,設計了一個多UGV系統的編隊控制協定。結合最優控制理論,研究了一個分布式最優編隊控制協定。與非最優情況相比,最優控制可以有效降低控制成本和時間。最後,設計的協定被應用于一個工程平台,并驗證了工程的價值。
1 Introduction
多智能體系統是指由許多單個智能體組成的系統,它們共同完成一項複雜的任務。多智能體的靈感最初來自于對自然界中集體行為的描述和觀察。對自然行為的研究已經吸引了各領域大量研究人員的注意。
多智能體系統(multi-agent system,MAS)指由許多單個智能體(agent)組成,智能體之間通過互相協調而共同完成一個複雜任務的系統。多智能體協調是一個多學科、多領域融合的新興工程,其概念最初是受到對自然界中集體行為描述和觀察的啟發。在多智能體系統協調控制的應用中,單個智能體設計為具有一定的傳感、計算、存儲與通信能力的個體,其結構較為簡單,所完成的功能比較單一,動态系統的控制輸入僅依賴于自身資訊和其他有限個智能體的狀态資訊。生物界的這些行為在遷徙、躲避捕食者和找尋食物方面可能具有很大的優勢,是以對這些行為的研究吸引了各領域大量研究人員的關注。
對于多智能體系統,大量的文獻中提出了各種控制體系結構。它們中的大多數可以被描述為集中式和分布式方案。在集中式系統中,一個連接配接所有智能體的中央單元擁有全局的團隊知識,并通過管理資訊以保證任務的完成。對于分布式方案,所有的智能體都處于同一級别,擁有相同的裝置。分布式系統中每個智能體的運動隻依賴于鄰居智能體的局部相對資訊,降低了任務的難度。另外,局部智能體的失效不會影響整個系統的性能,是以分散式系統對惡劣環境的容錯性更強。
現有的研究大多假設智能體為質點,這些質點滿足一些控制要求。智能體之間的通信關系和控制協定都是基于質點模型來研究的。在實際生活中,智能體的運動比較複雜,不能直接簡化為質點。這就限制了理論結果在實際工程中的應用。例如,在工程中,UGV(無人駕駛地面車輛)是由PWM(脈沖寬度調制)信号控制的。PWM是由主要制器産生的,這在大多數研究中都沒有涉及。是以,我們通過分析UGV的模型,建立了PWM信号與UGV狀态之間的關系。這些控制資訊可以寫入UGV的主要制器中,這大大提高了工程價值。
多智能體系統的一緻性控制是編隊控制的基礎[1]。編隊控制的問題指的是多個智能體向期望位置移動[2]。與一緻性控制相比,編隊控制下的最終狀态值更加多樣化。在本文中,我們設計了一個基于一緻性控制的分布式編隊控制協定。
由于各種實際問題的要求,我們總是要求系統的控制要受到各種限制[3]。這些限制條件通常被稱為性能函數[4]。性能函數是衡量系統在任何允許的控制動作下的要求,其内容和形式取決于最優控制問題要完成的主要任務。本文結合設計的性能函數和分布式編隊控制,建構了一個分布式最優編隊控制協定。
本文的主要貢獻包括三個方面。1)基于UGV的實際模型,将PWM信号與控制輸入相連。2)基于該連結建立了分布式編隊控制協定。3)根據分布式編隊控制協定,結合最優控制理論,設計了一個分布式最優編隊控制協定。本報告的其餘部分由以下幾節組成。在第2節中,介紹了代數圖理論的一些基礎知識。主要的結果是在第3節。第4節通過數值模拟驗證了這些結果的可行性,并将這些結果應用于工程平台。最後,第5節給出了結論。
2 代數圖論
令 表示一個權重有向圖,節點集 。邊 是 的集合,表示智能體 和 之間有資訊交流,資訊流從 流向 。 是圖 的鄰接矩陣,描述 和 之間資訊交流的權重。為了簡化計算,假定 。鄰居集合 ,表示由 和 組成的節點。表示由所有與智能體 有資訊交流的智能體組成的節點。輸入的度 用于表示度矩陣 。是以,該系統的圖拉普拉斯矩陣被定義為公式1。
其中 是入度矩陣,
根據定義,拉普拉斯矩陣的每一行之和都是零。是以,拉普拉斯矩陣總是有一個零特征值,對應于一個右邊的特征值 。
3 主要結果
3.1 UGV 模型
在分析多智能體系統時,通常會将智能體模型轉換為一階積分器、二階積分器或高階積分器。然而,這并不便于将理論結果轉化為工程。移動機器人的運動學模型決定了車輪速度如何映射到機器人的本體速度,而動力學模型則決定了車輪扭矩如何映射到機器人的加速度。
在工程上,UGV的主要制器産生PWM信号,驅動電機控制車輪的旋轉。主要制器産生的PWM信号與電機速度有如下關系
其中 表示電機速度, 是PWM信号, 是PWM到電機的縮放因子,
假設 1
電機速度不會超過最大值,即 。
本文使用的車輪與電機是Mecanum車輪,如圖1(a)所示。地面坐标系 和車身坐标系 已經建立。Mecanum輪子確定UGV可以在平面内以任何角度移動而不需要車身旋轉。Mecanum輪子有一排轉子,可以以
以一号輪M1為例,如圖2所示。請注意,圖2中繪制的是輪子與地面接觸一側的俯視圖,是以與圖1(a)中觀察到的轉子方向有
當電機驅動麥克納姆輪以角速度 旋轉時,會産生一個正的前進速度 。
其中
速度 被分解為與轉子方向平行的速度 和與轉子方向垂直的速度 。 被轉子的自由旋轉所抵消,隻剩下與轉子方向平行的有效速度 。
通過将有效速度 分别沿車身坐标系的 軸和
在UGV車身坐标系中建立四個車輪的分解,如圖1(b)所示,我們可以得到,四個車輪對UGV的影響滿足以下關系式
關于UGV的旋轉,假設有效速度 垂直于連接配接車身中心和車輪中心的直線,那麼就會有
其中
通過四個輪子的配合,我們可以得到UGV的運動學模型為
令地面坐标系中的位置為 , 速度資訊為 。
假設 2
假設UGV不發生旋轉,即 ,同時地面坐标系與機體坐标系的原點重合。
那麼機體坐标系中的速度 等同于地面坐标系中的速度 。同時,地面坐标系中的位置和速度也有如下關系。
綜上所述,我們可以得到UGV在世界坐标系中的位置與控制信号的關系為
是以,UGV的模型可以描述為一階積分器系統。
3.2 分布式編隊控制
對于一階積分器系統,它有如下表示。
定義期望編隊向量為 。令編隊誤差向量為 。關于編隊控制任務,可以這樣描述。
其中
那麼編隊控制問題就可以轉化為關于編隊誤差向量的一緻性問題。結合之前的工作[1],我們提出了以下編隊控制協定
其中
定理1
假設
證明 請參考文獻[4]。
3.3 分布式最優編隊控制
由于各種工程問題的要求,我們總是要求系統的控制要受到各種限制,這些限制通常被稱為性能函數。根據控制問題的不同,應采取不同形式的性能函數。線性二次性能函數的最優解有一個統一的分析表達式,并生成一個簡單的狀态線性回報控制法,便于閉環回報控制的計算和實施。
本節建構了一個由誤差向量和控制輸入組成的積分型性能函數(14)。
其中 是一個具有适當次元的對稱非負定矩陣, 是一個具有适當次元的對稱正定矩陣。為了便于工程應用,性能名額中的權重矩陣
通過最優控制理論,多UGV系統的最優控制法是
其中
令 ,矩陣 的次元一定是 ,同時它有如下形式
UGV的多智能體系統是同構的,即所有智能體的動态性能是相同的,是以最優控制法可以直接應用于UGV系統。是以,最優編隊控制法得到如下結果
定理2
假設
證明。請參考文獻[4]。
4 Simulations
本節使用三個UGV來驗證協定在理論和工程方面的有效性。系統的通信拓撲結構如圖3所示。關于硬體平台的更多資訊請參考[5]。
初始位置設定為 。編隊任務被設定為三角形編隊。以UGV1為參考,假設其期望的編隊位置 ,則其他期望的編隊位置為 。設定增益參數 。。為了便于觀察,假定三個UGV在
下一步是分析分布式最優編隊控制協定(18)。假設權重矩陣 ,,那麼我們可以求出最優參數 。圖4(b)顯示了基于分布式最優編隊控制協定的位置,它大約在第1秒完成了編隊任務。
圖5顯示了UGV1的PWM信号在非最優情況和最優情況下的比較。很明顯,在最佳情況下,系統控制輸入較低,同時UGV完成任務的時間也較短。
工程實驗場景圖見圖6。工程實驗的結果如圖7所示,顯示了三個UGVs在不同時間段的位置。實驗開始時,三輛UGV排成一條直線(),然後由于控制協定,開始逐漸遠離對方()。之後,編隊任務完成(),運作停止()。
5 結論
參考文獻
- Zhao, J., Dai, F., Song, Y.: Consensus of heterogeneous mixed-order multi-agent systems including UGV and UAV. In: Jia, Y., Zhang, W., Fu, Y., Yu, Z., Zheng,S. (eds.) Proceedings of 2021 Chinese Intelligent Systems Conference. LNEE, vol. 805, pp. 202–210. Springer, Singapore (2022). https://doi.org/10.1007/978-981-166320-8 21
- Liu, Z., Li, Y., Wu, Y., et al.: Formation control of nonholonomic unmanned ground vehicles via unscented Kalman filter-based sensor fusion approach. ISA Trans. 125, 60–71 (2022)
- Zhang, J., Yue, X., Zhang, H., et al.: Optimal unmanned ground vehicle-unmanned aerial vehicle formation-maintenance control for air-ground cooperation. Appl. Sci. 12(7), 3598 (2022)
- Zhao, J., Dai, F., Song, Y.: A distributed optimal formation control for multi-agent system of UAVs. In: 2022 Proceedings of International Conference on Artificial Life and Robotics (ICAROB), pp. 803–807. IEEE (2022)
- Zhao, J., Dai, F.: A design of multi-agent system simulation platform for UGV and research on its formation control protocol. J. Adv. Artif. Life Robot. 3(1), 13–17 (2022)
附錄
% Paper: A Distributed Optimal Formation Control for Multi-UGV System
% Author: Z-JC
% Data: 2022-03-27
clear
clc
%%
L = [1 0 -1
-1 2 -1
0 -1 1];
% UGV system states
UGV1(:,1) = [10 20]';
UGV2(:,1) = [10 30]';
UGV3(:,1) = [10 10]';
p_x = [UGV1(1,1) UGV2(1,1) UGV3(1,1)]';
p_y = [UGV1(2,1) UGV2(2,1) UGV3(2,1)]';
% Control inputs
u_x(:,1) = [0 0 0]';
u_y(:,1) = [0 0 0]';
u_PWM1(:,1) = [0 0 0 0]';
u_PWM2(:,1) = [0 0 0 0]';
u_PWM3(:,1) = [0 0 0 0]';
% Desired formation states
d_px_1 = 00; d_py_1 = 00;
d_px_2 =-10; d_py_2 = 10;
d_px_3 =-10; d_py_3 =-10;
% Positive gain
K_P2M = 2;
r = 0.25;
alpha = 0.4;
% Optimal control
% System matrix
A = zeros(2,2);
B = eye(2);
Q = eye(2) * 3;
R = eye(2) * 1;
P = care(A,B,Q,R);
K = pinv(R)*B'*P;
alpha = K(1,1)
% Time state
t(1,1) = 0;
tBegin = 0;
tFinal = 5;
dT = 0.1;
times = (tFinal-tBegin)/dT;
M_M2P = [1 1
-1 1
1 1
-1 1];
% Iterations
for k=1:times
% Record time
t(:,k+1) = t(:,k) + dT;
% Calculate control input
u_x(1,k+1) = alpha * (-L(1,1)*(p_x(1,k)-d_px_1-p_x(1,k)+d_px_1) - L(1,2)*(p_x(2,k)-d_px_2-p_x(1,k)+d_px_1) - L(1,3)*(p_x(3,k)-d_px_3-p_x(1,k)+d_px_1) );
u_x(2,k+1) = alpha * (-L(2,1)*(p_x(1,k)-d_px_1-p_x(2,k)+d_px_2) - L(2,2)*(p_x(2,k)-d_px_2-p_x(2,k)+d_px_2) - L(2,3)*(p_x(3,k)-d_px_3-p_x(2,k)+d_px_2) );
u_x(3,k+1) = alpha * (-L(3,1)*(p_x(1,k)-d_px_1-p_x(3,k)+d_px_3) - L(3,2)*(p_x(2,k)-d_px_2-p_x(3,k)+d_px_3) - L(3,3)*(p_x(3,k)-d_px_3-p_x(3,k)+d_px_3) );
u_y(1,k+1) = alpha * (-L(1,1)*(p_y(1,k)-d_py_1-p_y(1,k)+d_py_1) - L(1,2)*(p_y(2,k)-d_py_2-p_y(1,k)+d_py_1) - L(1,3)*(p_y(3,k)-d_py_3-p_y(1,k)+d_py_1) );
u_y(2,k+1) = alpha * (-L(2,1)*(p_y(1,k)-d_py_1-p_y(2,k)+d_py_2) - L(2,2)*(p_y(2,k)-d_py_2-p_y(2,k)+d_py_2) - L(2,3)*(p_y(3,k)-d_py_3-p_y(2,k)+d_py_2) );
u_y(3,k+1) = alpha * (-L(3,1)*(p_y(1,k)-d_py_1-p_y(3,k)+d_py_3) - L(3,2)*(p_y(2,k)-d_py_2-p_y(3,k)+d_py_3) - L(3,3)*(p_y(3,k)-d_py_3-p_y(3,k)+d_py_3) );
% Calculate PWM
u_PWM1(:,k+1) = 1/(2*K_P2M*r) * M_M2P * [u_x(1,k+1); u_y(1,k+1)];
u_PWM2(:,k+1) = 1/(2*K_P2M*r) * M_M2P * [u_x(2,k+1); u_y(2,k+1)];
u_PWM3(:,k+1) = 1/(2*K_P2M*r) * M_M2P * [u_x(3,k+1); u_y(3,k+1)];
% Update states
p_x(1,k+1) = p_x(1,k) + dT * u_x(1,k+1) + 0.5;
p_x(2,k+1) = p_x(2,k) + dT * u_x(2,k+1) + 0.5;
p_x(3,k+1) = p_x(3,k) + dT * u_x(3,k+1) + 0.5;
p_y(1,k+1) = p_y(1,k) + dT * u_y(1,k+1);
p_y(2,k+1) = p_y(2,k) + dT * u_y(2,k+1);
p_y(3,k+1) = p_y(3,k) + dT * u_y(3,k+1);
end
%% Plot results
figure(1)
subplot(2,1,1)
plot(t,p_x, 'linewidth',1.5); hold on
grid on
subplot(2,1,2)
plot(t,p_y, 'linewidth',1.5); hold on
grid on
figure(2)
plot(p_x(1,:),p_y(1,:), '--r', 'linewidth',1.5); hold on
plot(p_x(2,:),p_y(2,:), '--g', 'linewidth',1.5); hold on
plot(p_x(3,:),p_y(3,:), '--b', 'linewidth',1.5); hold on
xlabel("x (m)",'Interpreter','latex'); ylabel("y (m)",'Interpreter','latex');
grid on;
xlim([0,50])
ylim([0,50])
tt1 = 1;
scatter(p_x(1,tt1),p_y(1,tt1),'r'); hold on
scatter(p_x(2,tt1),p_y(2,tt1),'g'); hold on
scatter(p_x(3,tt1),p_y(3,tt1),'b'); hold on
line([p_x(1,tt1),p_x(2,tt1)],[p_y(1,tt1),p_y(2,tt1)])
line([p_x(2,tt1),p_x(3,tt1)],[p_y(1,tt1),p_y(3,tt1)])
line([p_x(3,tt1),p_x(1,tt1)],[p_y(3,tt1),p_y(1,tt1)])
text(p_x(3,tt1)-1,p_y(3,tt1)-1,'t = 0s','Interpreter','latex')
tt1 = 1/dT;
scatter(p_x(1,tt1),p_y(1,tt1),'r'); hold on
scatter(p_x(2,tt1),p_y(2,tt1),'g'); hold on
scatter(p_x(3,tt1),p_y(3,tt1),'b'); hold on
line([p_x(1,tt1),p_x(2,tt1)],[p_y(1,tt1),p_y(2,tt1)])
line([p_x(2,tt1),p_x(3,tt1)],[p_y(2,tt1),p_y(3,tt1)])
line([p_x(3,tt1),p_x(1,tt1)],[p_y(3,tt1),p_y(1,tt1)])
text(p_x(3,tt1)-1,p_y(3,tt1)-1,'t = 1s','Interpreter','latex')
tt1 = 3/dT;
scatter(p_x(1,tt1),p_y(1,tt1),'r'); hold on
scatter(p_x(2,tt1),p_y(2,tt1),'g'); hold on
scatter(p_x(3,tt1),p_y(3,tt1),'b'); hold on
line([p_x(1,tt1),p_x(2,tt1)],[p_y(1,tt1),p_y(2,tt1)])
line([p_x(2,tt1),p_x(3,tt1)],[p_y(2,tt1),p_y(3,tt1)])
line([p_x(3,tt1),p_x(1,tt1)],[p_y(3,tt1),p_y(1,tt1)])
text(p_x(3,tt1)-1,p_y(3,tt1)-1,'t = 3s','Interpreter','latex')
tt1 = 5/dT;
scatter(p_x(1,tt1),p_y(1,tt1),'r'); hold on
scatter(p_x(2,tt1),p_y(2,tt1),'g'); hold on
scatter(p_x(3,tt1),p_y(3,tt1),'b'); hold on
line([p_x(1,tt1),p_x(2,tt1)],[p_y(1,tt1),p_y(2,tt1)])
line([p_x(2,tt1),p_x(3,tt1)],[p_y(2,tt1),p_y(3,tt1)])
line([p_x(3,tt1),p_x(1,tt1)],[p_y(3,tt1),p_y(1,tt1)])
text(p_x(3,tt1)-1,p_y(3,tt1)-1,'t = 5s','Interpreter','latex')
grid on
legend("UGV1", "UGV2", "UGV3",'Interpreter','latex');
figure(3)
subplot(3,1,1)
plot(t(1,1:k),u_PWM1(1,2:k+1), t(1,1:k),u_PWM1(2,2:k+1), t(1,1:k),u_PWM1(3,2:k+1), t(1,1:k),u_PWM1(4,2:k+1), 'linewidth',1.5)
legend("$u_{11}$", "$u_{12}$", "$u_{13}$", "$u_{14}$", 'Interpreter','latex'); grid on
xlabel("t (s)",'Interpreter','latex'); ylabel("PWM $u_1$",'Interpreter','latex');
subplot(3,1,2)
plot(t(1,1:k),u_PWM2(1,2:k+1), t(1,1:k),u_PWM2(2,2:k+1), t(1,1:k),u_PWM2(3,2:k+1), t(1,1:k),u_PWM2(4,2:k+1), 'linewidth',1.5)
legend("$u_{21}$", "$u_{22}$", "$u_{23}$", "$u_{24}$", 'Interpreter','latex'); grid on
xlabel("t (s)",'Interpreter','latex'); ylabel("PWM $u_2$",'Interpreter','latex');
subplot(3,1,3)
plot(t(1,1:k),u_PWM3(1,2:k+1), t(1,1:k),u_PWM3(2,2:k+1), t(1,1:k),u_PWM3(3,2:k+1), t(1,1:k),u_PWM3(4,2:k+1), 'linewidth',1.5)
legend("$u_{31}$", "$u_{32}$", "$u_{33}$", "$u_{34}$", 'Interpreter','latex'); grid on
xlabel("t (s)",'Interpreter','latex'); ylabel("PWM $u_3$",'Interpreter','latex');
figure(4)
subplot(2,1,1)
plot(t(1,1:k),u_x(1,2:k+1), t(1,1:k),u_x(2,2:k+1), t(1,1:k),u_x(3,2:k+1), 'linewidth',1.5); hold on; grid on;
xlabel("t (s)",'Interpreter','latex'); ylabel("PWM $u^{x}$",'Interpreter','latex');
subplot(2,1,2)
plot(t(1,1:k),u_y(1,2:k+1), t(1,1:k),u_y(2,2:k+1), t(1,1:k),u_y(3,2:k+1), 'linewidth',1.5); hold on; grid on;
xlabel("t (s)",'Interpreter','latex'); ylabel("PWM $u^{y}$",'Interpreter','latex');