Skip to content

Latest commit

 

History

History
289 lines (172 loc) · 11.9 KB

Control Algorithm.md

File metadata and controls

289 lines (172 loc) · 11.9 KB

火箭矢量控制算法原理

​ 控制算法类型与论证:主要分为两种控制类型,第一种是将三轴旋转和三轴平动进行解耦,其中推力控制量属于平动范围,旋转扭矩控制仅仅控制矢量摆动机构而不是推力大小。第二种控制类型是六自由度全耦合控制,将所有状态量和控制量进行统一计算,如全状态的LQR MPC NMPC控制,其中LQR MPC在激进飞行姿态下可能存在稳态跟踪误差,NMPC高速求解较慢,所以需要进一步对各种控制方案进行理论验证。

1. 火箭动力学模型

1.1 坐标系与符号

符号 含义
$\mathcal{W}$ 世界坐标系(惯性系),Z 轴向上
$\mathcal{B}$ 机体坐标系,原点在发动机安装点,Z 轴沿箭体向上
$\mathbf{R}_{wb} \in SO(3)$ 机体系→世界系的旋转矩阵
$\mathbf{R}{bw} = \mathbf{R}{wb}^\top$ 世界系→机体系的旋转矩阵
$\mathbf{q} = [w, x, y, z]$ 机体系→世界系的单位四元数
$\boldsymbol{\omega} \in \mathbb{R}^3$ 机体角速度(机体系表示)
$\mathbf{p} \in \mathbb{R}^3$ 世界系位置
$\mathbf{v} \in \mathbb{R}^3$ 世界系速度

1.2 物理参数

参数 符号 值 单位
质量 $m$ 0.5 kg
转动惯量 $\mathbf{J}$ $\mathrm{diag}(0.00891, 0.00891, 0.00016)$ kg·m²
发动机力臂 $L$ 0.229 m
最大推力 $T_{\max}$ 10.0 N
最大摆角 $\delta_{\max}$ 30 deg

1.3 发动机矢量推力模型

发动机位于机体系原点 $\mathbf{r}_e = [0, 0, 0]^\top$,质心位于 $\mathbf{r}_c = [0, 0, L]^\top$。发动机相对质心的矢量:

$$\mathbf{r}_{ec} = \mathbf{r}_e - \mathbf{r}_c = [0, 0, -L]^\top$$

推力 $T$ 经两个万向节角度 $(\alpha_x, \alpha_y)$ 偏转后在机体系产生三轴分力:

$$\mathbf{F}_\mathcal{B} = \begin{bmatrix} F_x \ F_y \ F_z \end{bmatrix} = T \begin{bmatrix} \cos\alpha_x \sin\alpha_y \ \sin\alpha_x \ \cos\alpha_x \cos\alpha_y \end{bmatrix}$$

对于小角度:$F_x \approx T\alpha_y,; F_y \approx T\alpha_x,; F_z \approx T$

该力在质心处产生的力矩:

$$\boldsymbol{\tau} = \mathbf{r}_{ec} \times \mathbf{F}_\mathcal{B} = \begin{bmatrix} L \cdot F_y \ -L \cdot F_x \ 0 \end{bmatrix} \approx \begin{bmatrix} L T \alpha_x \ -L T \alpha_y \ 0 \end{bmatrix}$$

关键结论:单台摆角发动机无法产生滚转力矩($\tau_z = 0$),仅可控俯仰和偏航两个姿态轴。

1.4 六自由度运动方程

平动(世界系):

$$\dot{\mathbf{p}} = \mathbf{v}, \qquad \dot{\mathbf{v}} = \frac{1}{m} \mathbf{R}_{wb} \mathbf{F}_\mathcal{B} + \mathbf{g}$$

其中 $\mathbf{g} = [0, 0, -9.81]^\top ;\mathrm{m/s^2}$。

转动(机体系):

$$\dot{\mathbf{q}} = \frac{1}{2} \mathbf{q} \otimes \begin{bmatrix} 0 \ \boldsymbol{\omega} \end{bmatrix}, \qquad \dot{\boldsymbol{\omega}} = \mathbf{J}^{-1}\big(\boldsymbol{\tau} - \boldsymbol{\omega} \times \mathbf{J}\boldsymbol{\omega}\big)$$


2. 控制架构

两种算法共用相同的串级架构:

位置误差 → 外环 PD(位置/速度)→ 期望推力方向 + 推力大小
                                    ↓
                              姿态误差计算
                                    ↓
          ┌─────────────────────────┴─────────────────────────┐
          ↓                                                     ↓
    INDI 内环                                           LADRC 内环
    ω̇_now 滤波 → Δτ = J(ω̇_des - ω̇_now)              ESO 估计 f̂
          ↓                                                     ↓
          └─────────────────────────┬─────────────────────────┘
                                    ↓
                      力矩 → 摆角映射 → 三轴分力

外环(位置控制)在两种算法中完全相同,区别仅在内环(姿态控制)。

2.1 外环:位置 PD 控制

位置和速度误差:

$$\mathbf{e}_p = \mathbf{p}_{ref} - \mathbf{p}, \qquad \mathbf{e}_v = \mathbf{v}_{ref} - \mathbf{v}$$

期望加速度(PD + 前馈):

$$\mathbf{a}_{des} = \mathbf{K}_p \odot \mathbf{e}_p + \mathbf{K}_d \odot \mathbf{e}_v + \mathbf{a}_{ref}$$

期望世界系推力:

$$\mathbf{F}_{\mathcal{W}} = m(\mathbf{a}_{des} - \mathbf{g})$$

推力大小(经饱和处理):

$$T_{cmd} = \mathrm{clamp}\big(|\mathbf{F}_{\mathcal{W}}|,; 0.2 T_{hover},; T_{\max}\big)$$

其中悬停推力 $T_{hover} = mg \approx 4.9\mathrm{N}$。

期望推力方向(世界系单位矢量):

$$\mathbf{d}_{\mathcal{W}} = \frac{\mathbf{F}_{\mathcal{W}}}{|\mathbf{F}_{\mathcal{W}}|}$$

2.2 姿态误差(缩减姿态)

仅控制箭体 Z 轴与期望推力方向对齐(滚转自由):

$$\mathbf{e}_{att}^{\mathcal{W}} = (\mathbf{R}_{wb}\mathbf{e}_z) \times \mathbf{d}_{\mathcal{W}}$$

转换到机体系:

$$\mathbf{e}_{att}^{\mathcal{B}} = \mathbf{R}_{bw} , \mathbf{e}_{att}^{\mathcal{W}}$$

期望机体角速度(比例控制):

$$\boldsymbol{\omega}_{des} = K_{att} \cdot \mathbf{e}_{att}^{\mathcal{B}}$$


3. INDI(增量非线性动态逆)

3.1 核心思想

INDI 的核心假设:在高控制频率下,状态变化远慢于控制输入变化。因此增量形式的动力学方程中,与当前状态相关的非线性项相互抵消,仅需考虑控制输入的增量效果。

3.2 数学推导

角加速度动力学:

$$\dot{\boldsymbol{\omega}} = \mathbf{J}^{-1}\big(\boldsymbol{\tau}(\mathbf{u}) - \boldsymbol{\omega} \times \mathbf{J}\boldsymbol{\omega}\big)$$

在上一时刻 $t_0$ 对当前时刻 $t$ 做增量展开:

$$\dot{\boldsymbol{\omega}} \approx \dot{\boldsymbol{\omega}}_0 + \mathbf{J}^{-1} \frac{\partial \boldsymbol{\tau}}{\partial \mathbf{u}}\bigg|_0 \Delta\mathbf{u}$$

其中 $\dot{\boldsymbol{\omega}}_0$ 为当前测量的角加速度(由陀螺仪数值微分获得),非线性项 $\boldsymbol{\omega} \times \mathbf{J}\boldsymbol{\omega}$ 因在短时间内近似不变而消去。

令 $\Delta\dot{\boldsymbol{\omega}} = \dot{\boldsymbol{\omega}}_{des} - \dot{\boldsymbol{\omega}}_0$,得:

$$\Delta\boldsymbol{\tau} = \mathbf{J} \cdot \Delta\dot{\boldsymbol{\omega}}$$

3.3 控制分配

期望角加速度(角速度误差的比例控制):

$$\dot{\boldsymbol{\omega}}_{des} = K_{rate} \cdot (\boldsymbol{\omega}_{des} - \boldsymbol{\omega})$$

INDI 总力矩指令:

$$\boldsymbol{\tau}_{total} = \mathbf{J}\big(\dot{\boldsymbol{\omega}}_{des} - \dot{\boldsymbol{\omega}}_{now}\big)$$

其中 $\dot{\boldsymbol{\omega}}_{now}$ 由低通滤波微分器从 $\boldsymbol{\omega}$ 估计:

$$\dot{\boldsymbol{\omega}}_{now}[k] = \alpha \cdot \frac{\boldsymbol{\omega}[k] - \boldsymbol{\omega}[k-1]}{\Delta t} + (1-\alpha) \cdot \dot{\boldsymbol{\omega}}_{now}[k-1]$$

$$\alpha = \min(2\pi f_c \Delta t,; 1.0)$$

力矩→摆角映射(利用 $\tau_x = L T \alpha_x,; \tau_y = -L T \alpha_y$):

$$\alpha_x = \mathrm{clip}\left(\frac{\tau_x}{L \cdot T_{eff}},; -\delta_{\max},; \delta_{\max}\right)$$

$$\alpha_y = \mathrm{clip}\left(-\frac{\tau_y}{L \cdot T_{eff}},; -\delta_{\max},; \delta_{\max}\right)$$

最终三轴分力由 $\alpha_x, \alpha_y, T_{cmd}$ 通过 $\mathrm{gimbalToForce}()$ 计算。

3.4 关键参数

参数 物理意义 典型值
$f_c$ ω̇ 低通滤波截止频率 25 Hz
$K_{att}$ 姿态误差→角速度增益 16.0
$K_{rate}$ 角速度误差→角加速度增益 50.0

3.5 优缺点

优点:响应快,不依赖精确动力学模型,对气动参数误差鲁棒,计算量小。

缺点:依赖角加速度测量(陀螺仪数值微分),对传感器噪声敏感。


4. LADRC(线性自抗扰控制)

4.1 核心思想

LADRC 将系统建模为积分器串连标准型,把所有与标准型不符的部分(外部扰动 + 未建模动态 + 参数摄动 + 耦合项)统一视为"总扰动" $f$,由线性扩张状态观测器(LESO) 实时估计并在控制律中直接抵消。

4.2 数学推导

对每个旋转轴建立一阶动力学模型:

$$\dot{\omega}_i = b_{0,i} \cdot u_i + f_i$$

其中 $u = [\alpha_x, \alpha_y]^\top$ 为摆角输入,$b_0$ 为名义控制增益,$f$ 为总扰动(包含 $\boldsymbol{\omega}\times\mathbf{J}\boldsymbol{\omega}$ 耦合、外部风扰力矩、模型误差等)。

名义控制增益(在悬停推力处评估,偏差由 ESO 吸收):

$$b_{0,x} = \frac{L T_{hover}}{J_{xx}} \approx 126.2, \qquad b_{0,y} = -\frac{L T_{hover}}{J_{yy}} \approx -126.2$$

4.3 线性扩张状态观测器(LESO)

将总扰动 $f$ 视为扩展状态,对一阶系统设计二阶 LESO:

$$\begin{cases} \dot{z}_1 = z_2 + \beta_1(y - z_1) + b_0 u \\ \dot{z}_2 = \beta_2(y - z_1) \end{cases}$$

其中 $y = \omega_i$ 为测量值,$z_1$ 估计 $\omega_i$,$z_2$ 估计 $f_i$。

带宽参数化(将观测器极点配置在 $-\omega_o$):

$$\beta_1 = 2\omega_o, \qquad \beta_2 = \omega_o^2$$

离散化更新(欧拉法):

$$\begin{aligned} e[k] &= y[k] - z_1[k] \\ z_1[k+1] &= z_1[k] + \Delta t \big(z_2[k] + \beta_1 e[k] + b_0 u[k]\big) \\ z_2[k+1] &= z_2[k] + \Delta t \big(\beta_2 e[k]\big) \end{aligned}$$

4.4 控制律

期望角加速度(同 INDI 外环):

$$\dot{\omega}_{i,des} = K_{rate} \cdot (\omega_{i,des} - \omega_i)$$

LADRC 扰动补偿控制律:

$$u_i = \frac{\dot{\omega}_{i,des} - \hat{f}_i}{b_{0,i}}$$

摆角限幅后通过 $\mathrm{gimbalToForce}()$ 输出三轴分力。

4.5 关键参数

参数 物理意义 典型值
$\omega_o$ ESO 观测器带宽 200 rad/s
$K_{att}$ 姿态误差→角速度增益 16.0
$K_{rate}$ 角速度误差→角加速度增益 50.0

调参准则:$\omega_o$ 应为 $K_{rate}$ 的 3~5 倍,保证 ESO 估计速度远快于控制器响应速度。

4.6 优缺点

优点:不依赖角加速度测量(仅需陀螺仪角速度),抗传感器噪声能力强;不需精确模型,参数摄动自动归入总扰动被补偿。

缺点:ESO 收敛需要时间(相比 INDI 有一阶滞后),大扰动下 ESO 估计可能出现短暂误差。


5. 两种算法对比

维度 INDI LADRC
扰动处理方式 角加速度滤波微分 $\dot{\omega}_{now}$ 直接抵消 ESO 在线估计 $\hat{f}$ 后前馈补偿
传感器需求 陀螺仪(需数值微分) 陀螺仪(仅需角速度)
噪声敏感度 较高(微分放大噪声) 较低(ESO 天然滤波)
响应速度 极快(一步到位) 较快(ESO 带宽决定)
计算复杂度 $O(1)$,仅滤波+矩阵乘法 $O(1)$,ESO 递推+矩阵乘法
调参难度 2 个核心参数 3 个核心参数(多一个 $\omega_o$)
理论保证 增量形式,时标分离假设 收敛性由 $\omega_o$ 保证

5.1 数学本质

两者在数学形式上高度相似。将 INDI 的控制律展开:

$$\alpha_x^{INDI} = \frac{J_{xx}}{L T}\big(K_{rate}(\omega_x^{des} - \omega_x) - \dot{\omega}_x^{now}\big)$$

将 LADRC 的控制律展开:

$$\alpha_x^{LADRC} = \frac{J_{xx}}{L T}\big(K_{rate}(\omega_x^{des} - \omega_x) - \hat{f}_x\big)$$

区别仅在于:INDI 用 $\dot{\omega}_x^{now}$ 估计扰动,LADRC 用 ESO 的 $\hat{f}_x$ 估计扰动。INDI 可以视为一种特殊的 LADRC,其 ESO 退化为简单的滤波微分器。

5.2 选择建议

场景 推荐
陀螺仪噪声低、需要极快响应 INDI
传感器噪声较大、需要平滑控制 LADRC
气动参数高度不确定 两者均可(均不依赖气动模型)
快速原型/调试 LADRC(仅有角速度即可工作)