2_競(jìng)賽無人機(jī)基礎(chǔ)飛行控制函數(shù)——零基礎(chǔ)學(xué)習(xí)競(jìng)賽無人機(jī)搭積木式編程
競(jìng)賽無人機(jī)基礎(chǔ)飛行控制函數(shù)
????????無人機(jī)的在空中的基本飛行包括姿態(tài)控制(角度、角速度)與高度控制(位置、速度、加速度)兩個(gè)部分。
????????姿態(tài)控制是無人機(jī)按照飛行控制指令姿態(tài)保持水平或者以某一傾斜角度飛行,同時(shí)結(jié)合偏航方向旋轉(zhuǎn)控制可以實(shí)現(xiàn)自轉(zhuǎn)、刷鍋等飛行動(dòng)作。需要注意的是姿態(tài)自穩(wěn)只是對(duì)無人機(jī)的姿態(tài)角度進(jìn)行了控制,并不能使無人機(jī)水平位置不發(fā)生偏移,水平位置依賴于定點(diǎn)控制(如SLAM定位、GPS定位、光流定位等)。
????????高度控制是控制無人機(jī)在某一高度位置上懸停或者以一定速度控制無人機(jī)上升和下降。
姿態(tài)控制函數(shù)
????????void Angle_Control_Target(Controller_Output *_flight_output)
????????輸入?yún)?shù)Controller_Output結(jié)構(gòu)體定義如下

????????其中用戶只需要關(guān)注圈紅處的變量,在姿態(tài)自穩(wěn)控制中,以下三組期望輸入來源于遙控器輸入信號(hào)解析后的直接給定,偏航角控制模式為ROTATE表示偏航手動(dòng)控制模式,此手動(dòng)模式也是飛控初始化后默認(rèn)偏航控制模式。
Flight.roll_outer_control_output =RC_Data.rc_rpyt[RC_ROLL];
Flight.pitch_outer_control_output=RC_Data.rc_rpyt[RC_PITCH];
Flight.yaw_outer_control_output? =RC_Data.rc_rpyt[RC_YAW];
Flight.yaw_ctrl_mode=ROTATE;

????????除了ROTATE偏航控制模式,在用戶二次開發(fā)無人機(jī)自主飛行控制中,主要有使用的還有如下幾種:
AZIMUTH? 絕對(duì)偏航角度控制模式
????????其中偏航模式參數(shù)AZIMUTH 表示直接對(duì)偏航角度進(jìn)行控制,此時(shí)yaw_outer_control_output給定的是期望偏航角度。
CLOCKWISE? ? 相對(duì)偏航角度順時(shí)針控制模式
????????其中偏航模式參數(shù)CLOCKWISE表示直接對(duì)偏航角度進(jìn)行控制,此時(shí)yaw_outer_control_output給定的是以當(dāng)前偏航角度為基準(zhǔn),需要順時(shí)針旋轉(zhuǎn)的偏航角度。
ANTI_CLOCKWISE 相對(duì)偏航角度逆時(shí)針控制模式
????????其中偏航模式參數(shù)ANTI_CLOCKWISE表示直接對(duì)偏航角度進(jìn)行控制,此時(shí)yaw_outer_control_output給定的是以當(dāng)前偏航角度為基準(zhǔn),需要逆時(shí)針旋轉(zhuǎn)的偏航角度。
????????②③兩種相對(duì)運(yùn)動(dòng)方式,在給定期望時(shí)同時(shí)需要設(shè)置yaw_ctrl_start參數(shù),姿態(tài)控制函數(shù)在執(zhí)行過程中會(huì)實(shí)時(shí)對(duì)角度偏差進(jìn)行判斷,看是否到達(dá)對(duì)應(yīng)偏航角度,完成后會(huì)將yaw_ctrl_end標(biāo)志位置1,用戶可以判斷yaw_ctrl_end的數(shù)據(jù)來確定偏航控制是否完成,進(jìn)而處理下一階段子任務(wù)。初次接觸的用戶可以結(jié)合Subtask_Demo.c提供的flight_subtask_1、flight_subtask_2來練習(xí)掌握用法。


?
CLOCKWISE_TURN? 角速度控制順時(shí)針模式
????????其中偏航模式參數(shù)CLOCKWISE_TURN表示直接對(duì)偏航角速度進(jìn)行控制,此時(shí)yaw_ctrl_mode給定的是順時(shí)針旋轉(zhuǎn)的期望偏航運(yùn)動(dòng)的角速度。
ANTI_CLOCKWISE_TURN 角速度控制逆時(shí)針模式
????????其中偏航模式參數(shù)CLOCKWISE_TURN表示直接對(duì)偏航角速度進(jìn)行控制,此時(shí)yaw_ctrl_mode給定的是順時(shí)針旋轉(zhuǎn)的期望偏航運(yùn)動(dòng)的角速度。
????????④⑤兩種相對(duì)運(yùn)動(dòng)方式,在給定期望時(shí)同時(shí)需要設(shè)置yaw_ctrl_start參數(shù),以及需要執(zhí)行的時(shí)間參數(shù)execution_time_ms,姿態(tài)控制函數(shù)在執(zhí)行過程中會(huì)實(shí)時(shí)對(duì)已執(zhí)行的時(shí)間進(jìn)行判斷是否完成,完成后會(huì)將yaw_ctrl_end標(biāo)志位置1,用戶可以判斷yaw_ctrl_end的數(shù)據(jù)來確定偏航控制是否完成,進(jìn)而處理下一階段子任務(wù)。初次接觸的用戶可以結(jié)合Subtask_Demo.c提供的flight_subtask_3、flight_subtask_4來練習(xí)掌握用法。


高度控制函數(shù)
????????void Flight_Alt_Hold_Control(uint8_t mode,float target_alt,float target_vel)
????????輸入?yún)?shù)uint8_t mode可選參數(shù)如下:

ALTHOLD_MANUAL_CTRL、ALTHOLD_AUTO_POS_CTRL、???????????? ALTHOLD_AUTO_VEL_CTRL分別表示高度手動(dòng)控制、高度直接位置控制、高度直接速度控制,在ALTHOLD_MANUAL_CTRL模式中,高度可以通過遙控器油門桿來控制,油門桿偏離中位死區(qū)向上、向下分別表示給定無人機(jī)期望向上爬升速度和下降速度,油門回中后飛機(jī)會(huì)鎖定當(dāng)前高度作為懸停保持高度;ALTHOLD_AUTO_POS_CTRL模式中,期望高度直接來源于target_alt,無人機(jī)將高度位置控制到target_alt所在高度進(jìn)行懸停;????????? ALTHOLD_AUTO_VEL_CTRL模式中,無人機(jī)不在對(duì)高度位置進(jìn)行控制,高度方向上期望速度直接來源于target_vel給定,arget_vel>0表示期望速度向上,反之表示期望速度向下,相關(guān)用法例子如下:
