11(3)-AirSim+四旋翼仿真-AirSim中人工势场法方法改进
在11(2)中已經將人工勢場法避障代碼遷移至AirSim中,但是有一些待解決問題,這里一并說明后續的解決方案。
1.障礙物檢驗
之前使用了AirSim中提供的目標識別接口,主要問題在于
在拿到了障礙物檢測接口后,對相關部分進行替換,以上問題得到較好的解決。這部分內容不是本人負責,相關代碼可參考:https://github.com/Kun-k/airsim_python/tree/main/ObstacleDetection。該接口可實時檢測障礙物,并返回box3D類型的障礙物信息,如下所示:
'box3D': <Box3D> { 'max': <Vector3r> { 'x_val': 4.900000095367432, 'y_val': 0.7999999523162842, 'z_val': 0.5199999809265137}, 'min': <Vector3r> { 'x_val': 3.8999998569488525, 'y_val': -0.19999998807907104, 'z_val': 1.5199999809265137}},box3D類型提供了8個頂點信息,8個頂點可組成一個立方體,進而得到想要的障礙物信息。
這里取用了x?yx-yx?y平面內的4個頂點計算斥力。需注意以下兩點:
2.無人機速率和偏航控制
在之前使用LQR方法進行控制,能夠較好地控制無人機跟蹤目標狀態,實現無人機機頭朝向與飛行方向的一致。但為了進行速度、加速度限幅,目標狀態的速度和加速度并不匹配,控制誤差也較大,對無人機的速度限制效果一般。
參考三維航路點跟蹤時使用的控制器限幅方法,通過當前速度對控制器輸出進行限制,進行如下調整:
# 無障礙物時,三維航路點跟蹤的控制器輸出 U1 = np.array((K0 * Pt_matrix + K1 * A.dot(Pt_matrix)).T)[0] if np.linalg.norm(U1, ord=np.inf) > Ul_track:U1 = U1 * Ul_track / np.linalg.norm(U1, ord=np.inf) U = -(U1 + V_curr) / K2 # 有障礙物時的控制器輸出 U = Fatt + Frep if np.linalg.norm(U, ord=np.inf) > Ul_avoid:U = Ul_avoid * U / np.linalg.norm(U, ord=np.inf) U = (U - V_curr) / K2 # 改進部分3.改進局部極小值判斷方法
考慮下圖所示的情況,無人機由軌跡1-2切換至軌跡2-3時,在航路點2處先減速再加速。
此時速度較小,如加速過程中檢測到障礙物,會認為滿足航路點檢測條件,產生不必要的避障動作。
解決方法為,只在加速運動的過程中進行局部極小值檢驗。
4.實現效果
改進APF方法與RRT方法結合進行避障飛行
RRT+APF無人機避障飛行
總結
以上是生活随笔為你收集整理的11(3)-AirSim+四旋翼仿真-AirSim中人工势场法方法改进的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VC-MFC程序设计精讲
- 下一篇: 用python输出杨辉三角形,pytho