国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

(2-3-3)位置控制算法:無人機運動控制系統(tǒng)——基于自適應(yīng)反演滑模控制器的仿真測試

這篇具有很好參考價值的文章主要介紹了(2-3-3)位置控制算法:無人機運動控制系統(tǒng)——基于自適應(yīng)反演滑??刂破鞯姆抡鏈y試。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

2.3.5 ?基于自適應(yīng)反演滑??刂破鞯姆抡鏈y試

文件test/fault_AISMC.py實現(xiàn)了一個基于非線性動力學(xué)模型的無人機飛行控制仿真環(huán)境,通過使用自適應(yīng)反演滑??刂破鳎ˋdaptive Inverse Sliding Mode Control,AdaptiveISMC_nonlinear)對無人機進行控制,并引入了執(zhí)行器故障模型以模擬實際飛行中可能發(fā)生的故障情況。最后可視化仿真結(jié)果,展示了無人機在控制算法下的軌跡、執(zhí)行器狀態(tài)、故障檢測與隔離等信息,用于分析控制器對飛行器動態(tài)響應(yīng)及故障情況的影響。

文件test/fault_AISMC.py的具體實現(xiàn)流程如下所示。

(1)函數(shù)Env.init()用于初始化仿真環(huán)境,包括定義執(zhí)行器故障(actuator_faults)、初始條件(ic)、參考軌跡(ref0)以及創(chuàng)建無人機模型(Copter_nonlinear)、執(zhí)行器故障檢測與隔離模塊(FDI)和自適應(yīng)反演滑??刂破鳎ˋdaptiveISMC_nonlinear)。

class Env(BaseEnv):
    def __init__(self):
        super().__init__(solver="odeint", max_t=20, dt=10, ode_step_len=100)
        # Define faults
        self.actuator_faults = [
            LoE(time=5, index=0, level=0.0),
            # LoE(time=10, index=3, level=0.3)
        ]
        # Define initial condition and reference at t=0
        ic = np.vstack((0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0))
        ref0 = np.vstack((1, -1, -2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0))
        # Define agents
        self.plant = Copter_nonlinear()
        self.n = self.plant.mixer.B.shape[1]
        self.fdi = FDI(numact=self.n)
        self.controller = AdaptiveISMC_nonlinear(self.plant.J,
                                                 self.plant.m,
                                                 self.plant.g,
                                                 self.plant.d,
                                                 ic,
                                                 ref0)

(2)函數(shù)Env.get_ref(t, x)的功能是根據(jù)當前時間 t 和狀態(tài) x 計算參考軌跡 ref,包括期望位置、速度、姿態(tài)和角速度。

    def get_ref(self, t, x):
        pos_des = np.vstack((1, -1, -2))
        vel_des = np.vstack((0, 0, 0))
        quat_des = np.vstack((1, 0, 0, 0))
        omega_des = np.zeros((3, 1))
        ref = np.vstack((pos_des, vel_des, quat_des, omega_des))
        return ref

(3)函數(shù)Env._get_derivs(t, x, p, gamma, effectiveness)的功能根據(jù)當前時間 t、狀態(tài) x、控制參數(shù) p、滑模變量 gamma 和執(zhí)行器效應(yīng)性 effectiveness 計算執(zhí)行器指令、執(zhí)行器輸出、作用在飛行器上的力和滑模變量。

    def _get_derivs(self, t, x, p, gamma, effectiveness):
        ref = self.get_ref(t, x)
        forces, sliding = self.controller.get_FM(x, ref, p, gamma, t)
        # Controller
        Bf = self.plant.mixer.B * effectiveness
        L = np.diag(effectiveness)
        rotors_cmd = np.linalg.pinv(Bf.dot(L)).dot(forces)
        rotors = np.clip(rotors_cmd, 0, self.plant.rotor_max)
        return rotors_cmd, rotors, forces, ref, sliding

(4)函數(shù)Env.set_dot(t的功能根據(jù)當前時間 t 更新仿真狀態(tài)的導(dǎo)數(shù),包括計算執(zhí)行器指令、執(zhí)行器輸出和作用在飛行器上的力,并更新控制器和飛行器的狀態(tài)。

    def set_dot(self, t):
        x = self.plant.state
        p, gamma = self.controller.observe_list()
        effectiveness = np.array([1.] * self.n)
        for act_fault in self.actuator_faults:
            effectiveness = act_fault.get_effectiveness(t, effectiveness)
        rotors_cmd, rotors, forces, ref, sliding = \
            self._get_derivs(t, x, p, gamma, effectiveness)

        self.plant.set_dot(t, rotors)
        self.controller.set_dot(x, ref, sliding)

(5)函數(shù)Env.logger_callback(i, t, y, *args)是仿真過程中的日志記錄回調(diào)函數(shù),用于提取并返回包括時間 t、飛行器狀態(tài) x、執(zhí)行器指令、執(zhí)行器輸出、參考軌跡、滑模變量和作用在飛行器上的力等信息的字典。

    def logger_callback(self, i, t, y, *args):
        states = self.observe_dict(y)
        x_flat = self.plant.observe_vec(y[self.plant.flat_index])
        ctrl_flat = self.controller.observe_list(y[self.controller.flat_index])
        x = states["plant"]
        effectiveness = np.array([1.] * self.n)
        for act_fault in self.actuator_faults:
            effectiveness = act_fault.get_effectiveness(t, effectiveness)
        rotors_cmd, rotors, forces, ref, sliding = \
            self._get_derivs(t, x_flat, ctrl_flat[0], ctrl_flat[1], effectiveness)

        return dict(t=t, x=x, rotors=rotors, rotors_cmd=rotors_cmd,
                    ref=ref, gamma=ctrl_flat[1], forces=forces)

(6)函數(shù)exp1_plot()用于繪制仿真結(jié)果的多個子圖,包括飛行器執(zhí)行器指令與實際輸出的對比、期望軌跡與實際軌跡的對比、執(zhí)行器故障檢測與隔離滑模變量的演變,以及在執(zhí)行器故障發(fā)生時的標注。通過可視化展示飛行器的動態(tài)響應(yīng)和控制性能,有助于分析控制系統(tǒng)的穩(wěn)定性和魯棒性。

def exp1_plot():
    data = fym.logging.load("case3_A.h5")
    print(data.keys())
    # Rotor
    plt.figure()
    ax = plt.subplot(411)
    plt.plot(data["t"], data["rotors"][:, 0], "k-", label="Response")
    plt.plot(data["t"], data["rotors_cmd"][:, 0], "r--", label="Command")
    plt.ylim([-5.1, 45])
    plt.legend()

    plt.subplot(412, sharex=ax)
    plt.plot(data["t"], data["rotors"][:, 1], "k-")
    plt.plot(data["t"], data["rotors_cmd"][:, 1], "r--")
    plt.ylim([-5.1, 45])

    plt.subplot(413, sharex=ax)
    plt.plot(data["t"], data["rotors"][:, 2], "k-")
    plt.plot(data["t"], data["rotors_cmd"][:, 2], "r--")
    plt.ylim([-5.1, 45])

    plt.subplot(414, sharex=ax)
    plt.plot(data["t"], data["rotors"][:, 3], "k-")
    plt.plot(data["t"], data["rotors_cmd"][:, 3], "r--")
    plt.ylim([-5.1, 45])

    plt.gcf().supxlabel("Time, sec")
    plt.gcf().supylabel("Rotor force")
    plt.tight_layout()

    plt.figure()

    ax = plt.subplot(411)
    plt.plot(data["t"], data["ref"][:, 0, 0], "r-", label="x (cmd)")
    plt.plot(data["t"], data["x"]["pos"][:, 0, 0], label="x")

    plt.plot(data["t"], data["ref"][:, 1, 0], "r--", label="y (cmd)")
    plt.plot(data["t"], data["x"]["pos"][:, 1, 0], label="y")

    plt.plot(data["t"], data["ref"][:, 2, 0], "r-.", label="z (cmd)")
    plt.plot(data["t"], data["x"]["pos"][:, 2, 0], label="z")
    plt.legend(loc='center left', bbox_to_anchor=(1, 0.5))

    plt.axvspan(5, 5.042, alpha=0.2, color="b")
    plt.axvline(5.042, alpha=0.8, color="b", linewidth=0.5)
    plt.annotate("Rotor 0 fails", xy=(5, 0), xytext=(5.5, 0.5),
                 arrowprops=dict(arrowstyle='->', lw=1.5))

    plt.subplot(412, sharex=ax)
    plt.plot(data["t"], data["x"]["vel"].squeeze())
    plt.legend([r'$u$', r'$v$', r'$w$'], loc='center left', bbox_to_anchor=(1, 0.5))

    plt.axvspan(5, 5.042, alpha=0.2, color="b")
    plt.axvline(5.042, alpha=0.8, color="b", linewidth=0.5)
    plt.annotate("Rotor 0 fails", xy=(5, 0), xytext=(5.5, 0.5),
                 arrowprops=dict(arrowstyle='->', lw=1.5))

    plt.subplot(413, sharex=ax)
    plt.plot(data["t"], data["x"]["quat"].squeeze())
    plt.legend([r'$q0$', r'$q1$', r'$q2$', r'$q3$'])
    # plt.plot(data["t"], np.transpose(quat2angle(np.transpose(data["x"]["quat"].squeeze()))))
    # plt.legend([r'$psi$', r'$theta$', r'$phi$'], loc='center left', bbox_to_anchor=(1, 0.5))
    plt.axvspan(5, 5.042, alpha=0.2, color="b")
    plt.axvline(5.042, alpha=0.8, color="b", linewidth=0.5)
    plt.annotate("Rotor 0 fails", xy=(5, 0), xytext=(5.5, 0.5),
                 arrowprops=dict(arrowstyle='->', lw=1.5))

    plt.subplot(414, sharex=ax)
    plt.plot(data["t"], data["x"]["omega"].squeeze())
    plt.legend([r'$p$', r'$q$', r'$r$'], loc='center left', bbox_to_anchor=(1, 0.5))
    plt.axvspan(5, 5.042, alpha=0.2, color="b")
    plt.axvline(5.042, alpha=0.8, color="b", linewidth=0.5)
    plt.annotate("Rotor 0 fails", xy=(5, 0), xytext=(5.5, 0.5),
                 arrowprops=dict(arrowstyle='->', lw=1.5))

    # plt.xlabel("Time, sec")
    # plt.ylabel("Position")
    # plt.legend(loc="right")
    plt.tight_layout()

    plt.figure()

    ax = plt.subplot(411)
    plt.plot(data['t'], data['gamma'].squeeze()[:, 0])
    plt.ylabel(r'$-\hat{h_{1}}$')
    plt.grid(True)
    plt.axvspan(5, 5.042, alpha=0.2, color="b")
    plt.axvline(5.042, alpha=0.8, color="b", linewidth=0.5)
    plt.annotate("Rotor 0 fails", xy=(5, 0), xytext=(5.5, 0.5),
                 arrowprops=dict(arrowstyle='->', lw=1.5))

    plt.subplot(412, sharex=ax)
    plt.plot(data['t'], data['gamma'].squeeze()[:, 1])
    plt.ylabel(r'$\hat{h_{2}}$')
    plt.grid(True)
    plt.axvspan(5, 5.042, alpha=0.2, color="b")
    plt.axvline(5.042, alpha=0.8, color="b", linewidth=0.5)
    plt.annotate("Rotor 0 fails", xy=(5, 0), xytext=(5.5, 0.5),
                 arrowprops=dict(arrowstyle='->', lw=1.5))

    plt.subplot(413, sharex=ax)
    plt.plot(data['t'], data['gamma'].squeeze()[:, 2])
    plt.ylabel(r'$\hat{h_{3}}$')
    plt.grid(True)
    plt.axvspan(5, 5.042, alpha=0.2, color="b")
    plt.axvline(5.042, alpha=0.8, color="b", linewidth=0.5)
    plt.annotate("Rotor 0 fails", xy=(5, 0), xytext=(5.5, 0.5),
                 arrowprops=dict(arrowstyle='->', lw=1.5))

    plt.subplot(414, sharex=ax)
    plt.plot(data['t'], data['gamma'].squeeze()[:, 3])
    plt.ylabel(r'$\hat{h_{4}}$')
    plt.grid(True)
    plt.axvspan(5, 5.042, alpha=0.2, color="b")
    plt.axvline(5.042, alpha=0.8, color="b", linewidth=0.5)
    plt.annotate("Rotor 0 fails", xy=(5, 0), xytext=(5.5, 0.5),
                 arrowprops=dict(arrowstyle='->', lw=1.5))
    plt.xlabel("Time [sec]")

    plt.tight_layout()

    # fig4 = plt.figure()
    # ax1 = fig4.add_subplot(4, 1, 1)
    # ax2 = fig4.add_subplot(4, 1, 2, sharex=ax1)
    # ax3 = fig4.add_subplot(4, 1, 3, sharex=ax1)
    # ax4 = fig4.add_subplot(4, 1, 4, sharex=ax1)

    # ax1.plot(data['t'], data['forces'].squeeze()[:, 0])
    # ax2.plot(data['t'], data['forces'].squeeze()[:, 1])
    # ax3.plot(data['t'], data['forces'].squeeze()[:, 2])
    # ax4.plot(data['t'], data['forces'].squeeze()[:, 3])

    # ax1.set_ylabel('F')
    # ax1.grid(True)
    # ax2.set_ylabel('M1')
    # ax2.grid(True)
    # ax3.set_ylabel('M2')
    # ax3.grid(True)
    # ax4.set_ylabel('M3')
    # ax4.grid(True)
    # ax4.set_xlabel('Time [sec]')
    # plt.tight_layout()
    plt.show()

執(zhí)行后將回執(zhí)多個子圖,如圖2-8所示。

  1. 執(zhí)行器輸出與指令對比圖:包含四個子圖,每個子圖對應(yīng)飛行器的一個執(zhí)行器,展示了執(zhí)行器的實際輸出與控制器指令之間的對比,以評估執(zhí)行器的性能。
  2. 控制系統(tǒng)狀態(tài)與期望軌跡對比圖:包含四個子圖,分別展示了飛行器的位置、速度、姿態(tài)以及角速度的實際狀態(tài)與期望軌跡之間的對比,以評估控制系統(tǒng)的跟蹤性能。
  3. 執(zhí)行器故障檢測與隔離滑模變量演變圖: 展示了執(zhí)行器故障檢測與隔離系統(tǒng)的滑模變量在時間上的演變,以分析故障檢測與隔離性能。

(2-3-3)位置控制算法:無人機運動控制系統(tǒng)——基于自適應(yīng)反演滑??刂破鞯姆抡鏈y試,《運動控制算法--Python篇》,無人機,python,機器人,運動控制,算法

(2-3-3)位置控制算法:無人機運動控制系統(tǒng)——基于自適應(yīng)反演滑模控制器的仿真測試,《運動控制算法--Python篇》,無人機,python,機器人,運動控制,算法

(2-3-3)位置控制算法:無人機運動控制系統(tǒng)——基于自適應(yīng)反演滑??刂破鞯姆抡鏈y試,《運動控制算法--Python篇》,無人機,python,機器人,運動控制,算法

圖2-9??繪制的子圖文章來源地址http://www.zghlxwxcb.cn/news/detail-853341.html

未完待續(xù)

到了這里,關(guān)于(2-3-3)位置控制算法:無人機運動控制系統(tǒng)——基于自適應(yīng)反演滑??刂破鞯姆抡鏈y試的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 無人機原理::(一)模型框架與控制系統(tǒng)框架詳解

    無人機原理::(一)模型框架與控制系統(tǒng)框架詳解

    上圖為PX4固件框架總覽,藍色方塊是指飛控系統(tǒng)中的各個模塊。 下面分別介紹各個模塊的作用: Mavlink模塊最為常用,可以調(diào)整為off_board模式以配合機載電腦,機載電腦可以將控制信息與飛控的姿態(tài)信息打包成MAVLink消息傳給飛控 對于圖中的位置控制與姿態(tài)控制模塊,主要關(guān)

    2024年02月10日
    瀏覽(35)
  • 基于PID控制器的四旋翼無人機控制系統(tǒng)的simulink建模與仿真,并輸出虛擬現(xiàn)實動畫

    基于PID控制器的四旋翼無人機控制系統(tǒng)的simulink建模與仿真,并輸出虛擬現(xiàn)實動畫

    目錄 1.課題概述 2.系統(tǒng)仿真結(jié)果 3.核心程序與模型 4.系統(tǒng)原理簡介 4.1四旋翼無人機的動力學(xué)模型 4.2 PID控制器設(shè)計 4.3 姿態(tài)控制實現(xiàn) 4.4 VR虛擬現(xiàn)實動畫展示 5.完整工程文件 ? ? ? ?基于PID控制器的四旋翼無人機控制系統(tǒng)的simulink建模與仿真,并輸出vr虛擬現(xiàn)實動畫,輸出PID控制器

    2024年04月09日
    瀏覽(105)
  • 一種基于位置預(yù)測的無人機輔助海面自組網(wǎng)地理路由算法

    【摘? 要】 為解決傳統(tǒng)海上通信方式中衛(wèi)星通信傳輸時延較長,岸基通信覆蓋范圍有限的問題,提出一種基于位置預(yù)測的無人機輔助海面自組網(wǎng)地理路由算法。所提算法采用高斯馬爾科夫模型獲取節(jié)點的預(yù)測位置。若遇到路由空洞,轉(zhuǎn)發(fā)節(jié)點發(fā)起兩跳轉(zhuǎn)發(fā)過程。多因素決策考

    2024年02月03日
    瀏覽(22)
  • 超維空間S2無人機使用說明書——55、代碼詳解:基礎(chǔ)PID算法控制無人機的跟隨代碼詳解

    超維空間S2無人機使用說明書——55、代碼詳解:基礎(chǔ)PID算法控制無人機的跟隨代碼詳解

    PID,即比例 Proportion、積分 Integral 和微分 Derivative 三個單詞的縮寫;比例積分微分控制,簡稱PID控制。 簡單講,根據(jù)給定值和實際輸出值構(gòu)成控制偏差,將偏差按比例、積分和微分通過線性組合構(gòu)成控制量,對被控對象進行控制。 常規(guī) PID 控制器作為一種線性控制器。 步驟

    2024年01月21日
    瀏覽(105)
  • 無人機飛行控制、導(dǎo)航和路徑規(guī)劃的原理、技術(shù)和相關(guān)算法

    無人機飛行控制、導(dǎo)航和路徑規(guī)劃是無人機技術(shù)的核心組成部分,其原理和技術(shù)涉及多個學(xué)科領(lǐng)域。這些技術(shù)和算法的不斷發(fā)展和優(yōu)化,為無人機的應(yīng)用和發(fā)展提供更強有力的支持。下面解釋它們的原理、技術(shù)和相關(guān)算法。 飛行控制: 無人機飛行控制的基本原理是通過傳感

    2024年04月12日
    瀏覽(27)
  • m基于PID控制算法的四旋翼無人機飛行控制simulink仿真

    m基于PID控制算法的四旋翼無人機飛行控制simulink仿真

    目錄 1.算法描述 2.仿真效果預(yù)覽 3.MATLAB核心程序 4.完整MATLAB ? 無人機采用常見的四旋翼無人飛行器,如圖1所示。 ? ? ? PID 控制器,即控制器的控制方式為 P 比例調(diào)整, I 積分調(diào)整以及 D 微分調(diào)整三個部分構(gòu)成, PID 控制器是目前為止應(yīng)用最為廣泛的控制方式。 PID 控制器具

    2023年04月22日
    瀏覽(98)
  • ICM-42670-P六軸MEMS運動傳感器無人機智能手表運動設(shè)備IMU

    ICM-42670-P六軸MEMS運動傳感器無人機智能手表運動設(shè)備IMU

    TDK InvenSense品牌各類產(chǎn)品,可支持算法定制與開發(fā) TDK InvenSense公司的ICM-42670-P六軸MEMS運動跟蹤裝置結(jié)合了一個三軸陀螺儀和一個三軸加速度計。該設(shè)備針對的是需要超低功耗以驅(qū)動更長的電池壽命的消費者和物聯(lián)網(wǎng)應(yīng)用。該傳感器提供低功耗的六軸和加速度計的工作模式。它

    2024年02月12日
    瀏覽(28)
  • 【無人機控制】基于模型預(yù)測控制MPC無人機實現(xiàn)軌跡跟蹤附Matlab代碼

    【無人機控制】基于模型預(yù)測控制MPC無人機實現(xiàn)軌跡跟蹤附Matlab代碼

    ??作者簡介:熱愛科研的Matlab仿真開發(fā)者,修心和技術(shù)同步精進,代碼獲取、論文復(fù)現(xiàn)及科研仿真合作可私信。 ??個人主頁:Matlab科研工作室 ??個人信條:格物致知。 更多Matlab完整代碼及仿真定制內(nèi)容點擊?? 智能優(yōu)化算法 ? ? ? 神經(jīng)網(wǎng)絡(luò)預(yù)測 ? ? ? 雷達通信? ? ? ?無

    2024年04月28日
    瀏覽(44)
  • (無人機方向)ros小白之鍵盤控制無人機(終端方式)

    (無人機方向)ros小白之鍵盤控制無人機(終端方式)

    提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 ubuntu 18.04 pycharm ros melodic 做一個在終端中鍵盤輸入指令,控制飛機起飛以及進入offbaord File-Settings-Project Interpreter-右邊小齒輪Show All-選中正在使用的python 點擊右邊最下面的圖標,打開Interpreter Path 添加/

    2024年02月15日
    瀏覽(24)
  • 無人機基礎(chǔ)知識:多旋翼無人機各模式控制框圖

    無人機基礎(chǔ)知識:多旋翼無人機各模式控制框圖

    無人機(Unmanned Aerial Vehicle),指的是一種由動力驅(qū)動的、無線遙控或自主飛行、機上無人駕駛并可重復(fù)使用的飛行器,飛機通過機載的計算機系統(tǒng)自動對飛行的平衡進行有效的控制,并通過預(yù)先設(shè)定或飛機自動生成的復(fù)雜航線進行飛行,并在飛行過程中自動執(zhí)行相關(guān)任務(wù)和

    2023年04月09日
    瀏覽(721)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包