0。對港科大Fast-Planner專案的復現:

1。硬體:

淘寶買的四旋翼以及Pixhawk飛控板,自己訂做了碳板用來安裝Upboard和Realsense:

15-無人機視覺自主飛行:VINS+Fast-Planner

與飛機一起購買的這種老款的Pixhawk質量差,並且沒有電源保護功能:

15-無人機視覺自主飛行:VINS+Fast-Planner

後來買的新版本Pixhawk更好一些,但是仍不理想。

飛機的震動導致Realsense的內建IMU資料存在嚴重噪聲。但是在相同的減震措施下,飛控的IMU卻能正常工作,這說明Realsense這一類相機產品並不是為了飛機這種高頻震動平臺製造的。另外手裡有小覓雙目相機,但是它的資料線實在是愚蠢而笨重,就直接放棄了。

2。Palnner指令的執行:

Fast-Planner給出的航跡指令包含位置、速度、加速度以及Yaw,港科大用的飛控是大疆的,但是我在大疆Onboard SDK的網站上只找到了位置控制指令。所以很想知道Boyu Zhou大佬是怎麼實現的……

遂改用親切的MavROS+Offboard模式,在模擬環境下試了下“/mavros/setpoint_accel/accel”以及“mavros/setpoint_raw/local”中的加速度項,效果很差。無奈只能用位置(“mavros/setpoint_raw/local”)和速度(“/mavros/setpoint_velocity/cmd_vel_unstamped”)控制了,這就導致忽略了Fast-Planner給出的加速度指令,理論上飛行效果肯定無法達到標準水平。

大佬在模擬程式裡開源的控制邏輯是:無人機實際位置、速度、加速度值與Planner理論位置、速度、加速度值之差,分別乘以各項的修正係數,然後求和並且記入重力,作為無人機推力指令輸出給飛控。

我的控制邏輯是:無人機實際位置、速度與Planner理論位置、速度之差,分別乘以各項的修正係數,然後求和作為無人機速度指令輸出給飛控。

另外大佬有這麼一段程式碼,經過驗證其作用是確保飛行指令方向與豎直方向不超過45度。我很想知道這段程式碼所依據的理論出自何處……

// Limit control angle to 45 degree

double theta = M_PI / 2;

double c = cos(theta);

Eigen::Vector3d f;

f。noalias() = kx。asDiagonal() * (des_pos - pos_) + kv。asDiagonal() * (des_vel - vel_) + //

mass_ * des_acc + mass_ * ka。asDiagonal() * (des_acc - acc_);

if (Eigen::Vector3d(0, 0, 1)。dot(force_ / force_。norm()) < c)

{

double nf = f。norm();

double A = c * c * nf * nf - f(2) * f(2);

double B = 2 * (c * c - 1) * f(2) * mass_ * g_;

double C = (c * c - 1) * mass_ * mass_ * g_ * g_;

double s = (-B + sqrt(B * B - 4 * A * C)) / (2 * A);

force_。noalias() = s * f + mass_ * g_ * Eigen::Vector3d(0, 0, 1);

}

3。座標系:

PX4飛控預設的慣性座標系方向是“北東下”,Offboard指令中的local座標系方向是“東北上”,Offboard指令中的setpoint_velocity指令是相對於機體座標系的。

在視覺慣性導航座標系下:使用Realsense時,VINS初始化以後預設相機前方是朝向Y軸的;Fast-Planner輸出的航跡指令在初始時刻總是朝向X軸的。我簡單粗暴地把後者的初始角度加了90度,這樣飛機每次初始時刻都會直接向前飛。

4。gazebo模擬:

模擬設定有時間可以單獨寫一篇,此處略過。

5。四旋翼飛行試驗::

四旋翼軸距是550,槳是14寸,障礙物是足球訓練用的繞樁標誌杆,高度2。4m,直徑2。5cm。地圖膨脹值設為0。6m,Planner最大速度0。5m/s。試驗場地為室外,1-2級風。

6。存在問題:

飛控存在偶爾不能解鎖的狀況(MavROS與遙控器均不能),原因未知。

Offborad位置控制模式下,單純依靠飛控加速度計進行積分得到的位置準確性差、很不穩定。

realsense偶爾存在不能檢測到障礙物深度的情況,導致飛機撞杆。