㈠ airsim詳細教程(四) - 控制四旋翼起飛和降落(airsim api)
AirSim APIs 提供了一系列介面,用於程序與模擬環境進行交互,包括獲取圖像、無人機狀態、控制無人機運動等。AirSim API 包括 Python 和 C++ 兩種使用方式,本文主要使用 Python 示例講解控制無人機的起飛和降落方法,涉及與 AirSim 通信、獲取控制權、解鎖和上鎖無人機等步驟。
在搭建 Python 環境時,推薦使用 Anaconda 管理器,它能創建獨立的虛擬環境,避免環境間的相互影響。安裝 Anaconda 後,新建一個環境專門用於 AirSim 模擬,通過在環境中安裝 numpy、airsim 等需要的第三方包和庫。同時,安裝 Pycharm 編輯器,配置 Anaconda 環境,確保 Python 代碼能夠正確運行。
控制無人機的起飛和降落涉及以下關鍵步驟:與 AirSim 進行通信,獲取控制許可權,解鎖無人機,執行起飛和降落操作。通過 Python 代碼實現這一系列操作,首先在 AirSim 中選擇多旋翼模式運行,然後在 Pycharm 中運行代碼,無人機將從空中起飛至一定高度後降落。
在代碼中,導入 AirSim 包並建立連接,使用句柄執行相關操作。重要的是獲取控制權和釋放控制權,確保安全地控制無人機。使用特定函數控制無人機的旋翼啟動和停止,以及進行起飛和降落操作。為提高代碼執行效率,可以使用非同步函數,使程序在等待任務執行期間繼續運行。通過網路通信機制,利用 msgpack-rpc 協議,實現 AirSim 和 Python 代碼之間的無縫交互,即使在不同計算機上運行,也能實現有效的通信。
為了確保 AirSim 與 Python 代碼的穩定交互,配置埠監聽和選擇合適的序列化格式是關鍵步驟。在 AirSim 的設置文件中可以調整埠號,確保無沖突。使用網路通信協議可以將 AirSim 和 Python 程序隔離,實現互不影響的協同工作。即使 Python 代碼中斷,AirSim 的模擬仍可繼續進行,展現出強大的靈活性和穩定性。
㈡ 自己寫四軸飛控難度有多大
MATLAB2014a以上的版本在Simulink裡面會有一個叫model based design的feature。有了它,你大概只要C或者C++寫一點讀感測器、讀遙控器接收端以及控制電機的庫,放進s-function builder,再用Simulink自帶的blocks就可以搞一個具有相當復雜度的控製程序了。四旋翼根本不在話下,當然前提是你得知道四旋翼的控制演算法。飛控是否包括寫代碼?還是paper即可?相信每個想要嘗試編寫飛控的人都希望自己的飛控真的運行起來。有paper更好。寫出的代碼是否包括編譯通過?編譯通過肯定是很基本的了,事實上飛控的難度並不在於編譯通過,而是代碼的正確性,好在已經有很多優秀的開源飛控值得學習了。
㈢ 我用MATLAB寫的四旋翼飛行器姿態控製程序無法運行
首先,你的文件名不能是pid.m,路徑也不能含有pid這種matlab內置的關鍵字。
其次,有兩行錯誤,建議注釋掉,對你的結果沒影響,因為你沒有使用這個數據。
具體正確的代碼如下:
clc;
clear;
kp1=0.6;
kp2=0.6;
kp3=1.0;
ki1=0.8;
ki2=0.8;
ki3=0.8;
kd1=0.2;
kd2=0.2;
kd3=0.4;
e1(1)=0;
e2(1)=0;
e3(1)=0;
u_1=[0 0 0]';
xeta=[1 0 1 0 1 0]';
ts=0.01;
for i=2:1000
yd(i)=2*sin(i*ts);
time(i)=i*ts;
tspan=[0 ts];
para=u_1;
[tt,xx]=ode45('pid_modle',tspan,xeta,[],para);
xeta=xx(length(xx),:);
fai(i)=xeta(1);
theta(i)=xeta(3);
pai(i)=xeta(5);
e1(i)=fai(i)-yd(i);
e2(i)=theta(i)-yd(i);
e3(i)=pai(i)-yd(i);
u1(i)=kp1*e1(i)+ki1*(e1(i)+e1(i-1)*ts)+kd1*(e1(i)-e1(i-1))/ts;
u2(i)=kp2*e2(i)+ki2*(e2(i)+e2(i-1)*ts)+kd2*(e2(i)-e2(i-1))/ts;
u3(i)=kp3*e3(i)+ki3*(e3(i)+e3(i-1)*ts)+kd3*(e3(i)-e3(i-1))/ts;
% u(i)=[u1(i) u2(i) u3(i)]';
% u_1=u(i);
end
% figure 1
plot(time,fai,'-',time,theta,'-.',time,pai,'.',time,yd)
那個函數文件不變,沒有錯誤。
運行結果如下:
希望採納,設置為滿意答案,謝謝。