news 2026/10/22 6:26:39

FPGA实战:MIPI CSI-2 2-lane 720p解码方案与避坑指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
FPGA实战:MIPI CSI-2 2-lane 720p解码方案与避坑指南

做 FPGA 的人,十有八九都在某个项目里被 MIPI CSI-2 折磨过。我第一次接这个需求的时候,心里其实挺没底的:一个常见的手机摄像头模组,两对数据线加一对差分时钟线,输出 2 lane 的 MIPI CSI-2 720p 视频流,我要用一块中低端容量的 FPGA 把它直接解出来,再往后面接实时图像算法和显示输出。按理说,市面上桥接芯片一大把,带 MIPI 接口的 SoC 也不难找,为什么非要跟 FPGA 较劲?答案很现实:桥接芯片只能把数据转成并口,可我要的是能直接进自研图像处理流水线的时序和像素格式;SoC 接口数量又不够灵活,而且延迟和集成成本都不好控制。这篇东西我就把整套方案从头到尾捋一遍,从协议机制到模块划分、从带宽计算到跨时钟域设计,再到实际点亮屏幕时踩过的几个深坑,给想用 FPGA 解 MIPI CSI-2 的人一个可以直接抄作业的参考。

1. 为什么要用 FPGA 跟 MIPI CSI-2 死磕:这个需求的来龙去脉

1.1 什么场合真的需要 FPGA 直接解 CSI-2

先别急着写代码,你首先得想清楚一个问题:这个项目是不是非用 FPGA 不可。我见过很多同行一上来就摊开手册说“我要做个 MIPI 解码器”,结果聊了十分钟发现,他其实只是想接个摄像头抓图,那用一颗带 MIPI 接口且能跑 Linux 的 SoC 显然轻松得多。真正需要 FPGA 硬解的,一般是我做过的这类场景:摄像头信号要进到一块没有 MIPI 外设的 FPGA,或者 FPGA 本身就是主处理单元,需要在原始视频流上做实时滤波、缩放、特征提取、多路转发,而这些操作在 Cortex 系处理器上一个周期都嫌慢。

我这个项目更特殊一点,除了解码,还要把 720p 视频先做一次色彩空间转换,再叠加一层简单的目标检测预处理,最后经 HDMI 出给显示面板。如果中间插一颗串行桥接芯片,先是多一层 BOM 成本,再者桥接芯片输出的通常是并行 RGB 或 BT1120 之类的格式,依然要设计一堆时序约束,还不如直接在 FPGA 内部从差分引脚开始吃到像素流,一条流水线走到底。MIPI CSI-2 本身是标准协议,物理层和协议层都有清晰定义,FPGA 只要资源够、时序能收敛,完全可以在 logic 里实现一个接收端 IP,这在很多工控视觉、医疗影像、车载摄像头项目里都是常规操作。

还有一点容易被人忽略:算法迭代。视频预处理这东西,今天算法工程师说要 RGB888,明天可能改成 RAW10 拜耳域处理,后天又要求把两路摄像头拼成一条 1080p 流。SoC 方案换一次需求可能就要换一次外设配置或驱动,而 FPGA 方案只要解码器输出的是统一的 pixel_data / hsync / vsync / pclk 总线,后级改动都在 RTL 里完成,改起来快得多。做硬件久了你会发现,选 FPGA 往往不是因为它在某一指标上最强,而是它在需求不确定性最高的阶段最耐折腾。

1.2 项目规格先定死:2 lane、720p、像素格式一个都不能含糊

需求分析阶段最忌讳“先搭起来再说”。MIPI CSI-2 解码器是个对协议极敏感的模块,像素格式、lane 数量、帧率、PPI 时钟、图像尺寸任何一个参数模糊,后面全得返工。我这个项目的输入规格非常明确:两对数据 lane(2 line),一对时钟 lane,分辨率 1280×720,帧率 30fps,像素格式按 RAW10 和 RGB888 两种都做过验证。注意这里有个关键约束:2 lane 的意思不是两根线,而是两条差分数据通路,每条通路包含正负两根物理线,所以总共能看到的是 2×2 根数据线加 1×2 根时钟线。

像素格式的选择直接决定带宽需求。有人觉得 720p 就是 720p,像素不高随便跑,这是误解。同样 720p30 下,RAW8 每像素 8bit 和 RGB888 每像素 24bit,对 lane 速率的要求差了三倍。如果传感器输出的是 Bayer RAW 数据,你后续还必须完成 Debayer 才能往显示输出送;如果是 YUV422,解码完还要注意 UV 分量排列顺序。这些格式在 MIPI CSI-2 协议头里是有独立 data type 编号的,解码状态机必须根据这些编号区分长包和短包,所以设计一开始就把格式定死,状态机才写得干净。

最后要把输出约定好,我习惯解码器对外用一套标准的视频总线,包含 pclk、vsync、hsync、de 和 pixel_data,不管内部协议有多复杂,输出一定是这个口径。这样后级模块不用关心输入是 MIPI 还是并行,换个摄像头模组只需要改解码器内部参数,对图像算法模块来说完全是透明的。

2. 解码前必须吃透的协议机制:同步码、包格式与 2 lane 时序

2.1 2 line 的带宽账:HS 时钟到底跑多快才够用

MIPI CSI-2 的物理层叫 D-PHY,核心说法是一对差分时钟 lane 加若干对差分数据 lane。正常传输时分两种模式:LP(低功耗)模式用来传控制信号和进入待机,真正的大数据流走 HS(高速)模式。数据 lane 在 HS 模式下每个时钟边沿都会采样数据,所以数据 rate 是时钟频率的两倍,这也是为什么同样一条 lane,明明时钟写着 80MHz,却能跑出 160Mbps 以上的速率。

具体算账不难。720p30、RGB888 是每像素 24bit,活动像素总带宽 = 1280 × 720 × 30 × 24 = 663.552Mbps。两条 lane 分摊,每条 lane 需要约 331.776Mbps 的吞吐能力。由于是双沿采样,HS 时钟至少要在 165.9MHz 上下。这个数字意味着,传感器模组的 MIPI 时钟在 HS 突发阶段大概率跑到 180MHz 甚至更高,选 FPGA 时必须确认全局时钟 network 和 PLL 能不能在 180MHz 级别把引脚时钟恢复干净。别觉得 180MHz 很低,很多中低端 FPGA 的普通 IO 接口在 200MHz 以下的接收还凑合,但如果在布线阶段不注意 lane 等长和 serdes 资源分配,根本收不稳。

如果你是 RAW8,那每条 lane 的 HS 时钟需求会降到约 55MHz 上下,压力小一大截;换成 YUV422 8bit 则每像素 16bit,单 lane 大约需要 110MHz HS 时钟。做项目前把这张带宽账算清楚,才能正确选 FPGA 的逻辑规模和时钟资源,也不至于出现“代码写完了发现锁相环输出频率不够”这种尴尬事。

2.2 同步与包结构:SoT/包头/载荷/CRC 各自扮演什么角色

CSI-2 视频流不是裸奔的像素流,它上层是一套分帧分包的协议。首先,每一帧图像以帧起始短包开始、帧结束短包结束;每一行则通常封装成一个或多个长包传输。所谓长包,结构依次是 32bit 包头(数据标识 + 16bit 载荷字节数 + 8bit ECC 校验)、像素数据载荷、16bit CRC、包尾。短包和长包前面都有一个同步序列 SoT,包结束有 EoT,接收端靠这些状态跳变来对齐字节边界。

很多人第一次看协议栈会问:像素数据为什么非要包一层?直接按行突发传不行吗?答案是,MIPI CSI-2 要同时支持多种数据类型、要能重传、要能在链路不稳定时尽早发现错误,包头里的 ECC 能纠正单比特错误、检出双比特错误,CRC 则保证载荷数据的完整。这两个东西在写状态机时经常被偷懒省略,但我强烈建议至少把 ECC 做进去,否则一旦出现数据线串扰或时序抖动,你看到的将是完全随机、毫无规律的花屏,排查成本远比做一个小 CRC 状态机高得多。

短包的类型主要包括 Frame Start、Frame End,以及链路控制包。长包类型则由 data type 字段标识,比如常见传感器的 RAW8 和 RAW10 都有各自编号。FPGA 解码模块收到包后,第一件事是根据 data type 决定是继续解析成图像行,还是直接跳过控制信息。我在项目里把长包和短包解析拆到两个状态模块里,互不干扰,整体结构会清爽很多。

3. 顶层到底怎么拆:物理层对齐、字节对齐、包状态机三件事分开做

3.1 物理层最容易翻车:差分输入、端接电阻与时钟恢复

解码的底层,是让 FPGA 的引脚“看懂”差分信号。MIPI D-PHY 的 HS 模式是一对差分线上的低压电流信号,典型摆幅只有 200mV 左右,FPGA 输入引脚必须配成差分接收模式,硬件上还得做好 100Ω 差分端接电阻。别小看这枚电阻,我第一次做实验时就是漏掉端接,信号幅值始终不够,逻辑分析仪抓到的包有一半是坏的,黑屏成了家常便饭。更隐蔽的问题在共模电压——不同模组共模范围有差异,选 FPGA 时必须注意 bank 电压和输入共模范围是否匹配,功耗大、调试慢,容易毁在电平上。

信号进来之后,data lane 需要的就是时钟恢复。CSI-2 的 HS 时钟只在突发阶段出现,数据 lane 本身没有独立采样时钟,所以要用差分时钟 lane 输入到 PLL,再由 PLL 输出两个相位相差 90 度的采样时钟,分别采数据。这个 90 度相位对齐可以手动微调,也可以靠高速收发器自带的 bitslip 功能自动对齐,取决于你用的器件。不过要注意:HS 时钟不是连续存在的,链路空闲时时钟会消失。PLL 一旦失锁再重锁需要时间,这中间流过去的包全部作废,设计上最好在协议层容忍一小段重新锁定时间,而不是假设时钟永久稳定。

3.2 字节对齐:乱码画面八成是这里出的问题

物理层之后,数据是串行 bit 流,而协议是字节级的。FPGA 内部拿到的是一串比特,得在一个 bit 流的什么位置切开,才能切出 0xB8 这种同步码来?这就是字节对齐要做的事。常见的做法是滑动搜索:每收到一个 bit 就拼一次字节,在新字节序列里找 SoT 的同步码型,一旦搜到,就认为这个 bit 边界是对的,后面的包都按这个边界切字节。

这个逻辑本身不复杂,坑在于多 lane 场景。2 lane 时每一条 lane 是独立物理通道,两条 lane 的字节边界可能不同步,甚至存在 lane 间偏差。你在一号 lane 找到了对齐点,二号 lane 可能还差几个 bit。所以必须每条 lane 各自做对齐,然后在包头校验阶段统一比对,以 ECC 正确的那一次对齐为准。这个思路说破不值钱,但很多野路子代码是把两条 lane 的 bit 流直接拼接后再对齐,结果某些摄像头能出图、某些怎样都是花屏,根源就是它。

字节对齐完成后,输出的是以 8bit 为单位的并行数据。这里强烈建议先做一个短暂的状态锁定:连续若干个包都能通过包头校验后再把对齐结果固定下来,避免单次噪声导致对齐点漂移。等到链路稳定后再允许跟踪微调,比每次都用滑动搜索重对齐要稳得多。

3.3 包解析状态机:一个骨架级的 Verilog 设计思路

包解析是解码器的核心状态机,职责是从字节流中还原出 frame_start、line_start、像素数据、line_end、frame_end 这些信号。我的做法是维护几个状态:空闲等待 SoT、解析包头、校验 ECC、接收载荷、校验 CRC、等待 EoT。逻辑上如图:

state_idle : 在数据流中搜索 SoT 同步码, 搜到则进入 state_sot state_sot : 判断包类型, 读取 32bit 包头 state_header : 校验 ECC, 非法包头则回 idle state_payload : 按包头长度计数接收载荷数据 state_crc : 比对 CRC, 记录错误计数 state_eot : 等待包尾, 回到 state_idle

这段只是刻画思路,不是完整工程代码,但足够指导实际编写。重点在三个地方:一是短包和长包要分开处理,短包没有载荷,直接根据 data type 输出 frame start/end;二是载荷阶段的字节数计数必须由包头里的长度字段控制,不能自己臆测行长度;三是所有状态跳转都要有兜底超时,防止链路异常导致状态机卡死在某个状态。

我在实际代码里还会把 packet 头和载荷分成两个 always 块处理,头路径是低延迟控制面,载荷路径是数据面,这样后级异步 FIFO 写操作不占用状态机的状态转移周期,吞吐能提高不少。这个拆分对 720p30 可能看不出明显差别,但你要是后续升到 1080p60,就知道数据面和状态机分离多重要了。

4. 跨时钟域与 720p30 的时序预算:别让 FIFO 深度拖后腿

4.1 跨时钟域的隐藏成本

解码模块内部至少存在三个时钟域:MIPI 的物理接收时钟、字节处理逻辑的工作时钟、后端图像模块的像素时钟。前两个可以靠 PLL 关联,但像素时钟通常和传感器输出的行场同步频率绑在一起,一般是单独一个频率。比如这个项目里,MIPI HS 突发时钟跑到 166MHz 以上,字节逻辑跑在某个中间频率,而输出端 pclk 只有 27.6MHz 左右,这之间必须跨时钟域。

跨时钟域并不能靠一句“打两拍”解决。数据的粒度是 8bit、16bit 甚至 24bit 像素,打两拍只适合单 bit 控制信号。正确做法是异步 FIFO,写入侧用字节逻辑时钟,读出侧用后端像素时钟,FIFO 空满信号处理好即可。对 720p30 这种中低分辨率,FIFO 深度需求不是天文数字,但对 1080p60、24bit 像素,一个行缓冲的存储量就相当可观,资源占用会直接起飞,所以选型阶段就要把存储资源算进去。

还要注意一点,FIFO 的写使能必须和行有效信号严格同步。MIPI 一个长包就是一行数据,长包可能不完整,所以 FIFO 写侧最好在整行接收完成后一次写入,或者至少做到行内无空洞拼接。如果像素数据是规则连续写入,后端时序会好做很多;如果一会儿写一会儿停,后级跨时钟域还可能出现半行错位,画面上看就是整条横向断层。

4.2 FIFO 深度怎么估:突发长度是核心参数

估算 FIFO 深度不能只看平均带宽,要看最大突发字节数。MIPI 的 HS 传输是突发性的,一个长包可能一次性送来整行数据,行与行之间又有消隐间隙。平均带宽虽然是 663Mbps,但某些瞬间峰值远超平均值。

基本公式是:FIFO 深度 ≥ 后端在最长突发期间内消费不掉的数据字节数。假设一行数据是 1280 × 24bit = 3840B,后端在行消隐期间不读 FIFO,那一行的时间里 FIFO 至少要容下 3840B。如果用 32bit 宽 FIFO,那深度就是 960 个字。我在 2 lane 720p 设计里直接用 1024×32 的异步 FIFO,留了一点余量。如果后端需要在整帧期间持续输出而传感器又是逐行突发,那就得考虑双缓冲甚至三缓冲,这时候存储开销就会明显增加。

如果 FPGA 资源紧张,有两个妥协思路:一个是在输出端把像素格式压缩,比如 RGB888 先转 YUV422 再进 FIFO,数据量直接减三分之一;另一个是把后级处理算法改成流水线直通模式,让 FIFO 的读侧没有空闲周期。实际做下来,后者效果最好,因为避免了压缩解压的额外延迟,代价是算法设计时要更注意处理延迟必须控制在行消隐以内。

5. 点亮过程中的三个深坑:从黑屏到出图的排障实记

5.1 第一个坑:差分端接缺失,信号眼看像但包就是错

完整代码跑起来后,第一版输出自然是黑屏,这我早有心理准备。但比预期麻烦的是:用示波器探 HS 时钟和数据线,波形看起来还像模像样,可解码出来的包头偶尔对、偶尔全错。怀疑 PLL 配置、怀疑状态机逻辑、怀疑电源纹波,折腾了一晚上,最后搬来一块同样规格但画了端接电阻的转接板,直接好了。

问题就是物理层端接。PCB 上如果漏了 100Ω 差分电阻或画得太远,反射会严重劣化信号眼图。而示波器上看波形“像样”是因为探头阻抗改变了反射条件,一旦接真实负载就原形毕露。后来我学乖了,凡是 MIPI 走线,先检查端接位置是不是尽量靠近 FPGA 引脚,端接电阻误差不要超过 1%,并且端接网络尽量做成差分形式而不是两个对地电阻。

这个坑的教训不是“记得焊电阻”这么简单,而是调试时必须区分信号完整性问题和逻辑问题。我的经验是:先把物理层验证独立出来,用固定测试码流测链路,先不接摄像头。如果固定码都收不对,大概率是物理层问题;固定码正常但摄像头乱码,再去查协议层状态机和对齐逻辑。

5.2 第二个坑:同步字对齐偏差,画面整行颜色错乱

物理层稳定后,终于出了画面,但颜色错乱得离谱:同一行内红蓝分量反复跳动,像是被隔几个像素抽掉后重排,画面带有明显马赛克味。最初怀疑 Debayer 顺序错了,可改拜耳相位毫无好转。后来抓内部字节流才发现,字节对齐滑动窗口差了一个 bit 位置,导致每个字节都整体右移或左移一位。

左侧一位的后果是同步字、包头甚至像素数据全部错位。理论上 ECC 应该能拦住这种错误,但某些传感器输出的短包没有严格载荷校验,或者 ECC 恰巧因为数据偏移仍能碰巧通过,状态机就在错误边界上稳定运行了。你以为对齐成功了,实际只是撞到了一个能走通的状态,出来的像素当然乱七八糟。

这类问题的排查方法很笨但很有效:抓取一段包含色条测试图的数据流,对照数据里每个像素的期望数值逐字验证。如果是 8bit 偏一位,所有像素值都接近期望值的两倍或一半;如果是字节错位,数据里会出现大量奇怪的 0xB0、0x87 这类不应出现的字节。只要把对齐搜索窗口扩大,并强制多包校验,基本都能揪出来。后来我把字节对齐初始化的成功条件设为“连续三帧有效帧开始包都对”,误锁概率一下子降到可以忽略。

5.3 第三个坑:ECC 校验失败把整帧丢掉

另一个折磨人的现象是:室内灯光下偶尔整帧黑屏一下,又突然恢复,完全没有规律。看统计计数,CRC 错误很少,但 ECC 错误计数不少。我一开始图省事,包头 ECC 出错直接丢弃整帧,结果画面会出现周期性闪断。后来加入单比特纠正逻辑,大部分 ECC 问题就消失了,这是因为 MIPI 高速传输的瞬时噪声往往只影响一个 bit,ECC 本来就是设计用来纠正这种错误的。

但还有零星地闪。进一步排查发现,链路刚启动或摄像头动态切换分辨率时,PLL 重锁期间收到的包本来就是无效的,这时候任何 ECC 纠正都没法解决,需要在协议层做一次软复位:检测到连续 N 个包校验失败,就主动让解码状态机复位并等待帧起始包,而不是硬着头皮继续解。我把这个逻辑命名为“链路健康状态机”,它配合帧级别的错误计数,让画面的稳定性上了一整个台阶。

如果你做多路摄像头,这个问题会更突出:sensor 上电时序不同步,各路 MIPI 时钟出现时间不一,如果不做各路独立的重同步,一路异常可能拖累整个系统的锁定状态。

6. 怎么证明解码真的正确:测试图、波形核对与长稳统计

6.1 用测试图案替代真实场景,只看像素值说话

调试到后面,最担心的不是不出图,而是出来的图是不是“真”的。怎么看?我建议别依赖人眼,先让 sensor 输出标准的彩条测试图。彩条的好处是每行长度的期望像素值完全已知,你只要把 FPGA 输出的一组像素地址和期望值做比较,立刻能判断解码是否正确、行对齐是否无误、字节序有没有翻转。

我写了一个小的比较模块,接收解码器输出,按行列坐标查表期望值,连续统计像素错误个数。第一次跑通彩条并且错误计数为零,那个瞬间比看到显示屏上有漂亮画面还开心。人眼看漂亮画面很容易被骗,但像素级比对骗不了人。这个比较逻辑即使在后级删了,调试阶段留着也绝对不亏。

6.2 链路质量统计:CRC 错误率与帧完整性

项目验收前,我把误码统计做成一个内部的寄存器组:总帧数、ECC 纠正次数、ECC 不可纠正次数、CRC 错误次数、帧丢失次数,全部实时可读。连续跑 24 小时看统计结果,CRC 错误率和帧丢失率都收敛在很低的水平,才敢把方案交给产线。

统计寄存器看着土,但它是唯一能在长期运行中暴露偶发问题的出口。有时候你会碰到一种诡异现象:看起来每帧都正常,画面也很流畅,但某个计数器的数值在缓慢增长,每周涨一两次。这种偶发问题在单次调试中根本看不出来,只有长期的统计曲线能暴露。我在这个项目里就是靠这类统计,发现某条数据 lane 偶尔会在高温下延迟变大,进而定位到传感器配置里预加重参数没设置到位。

6.3 Lane 顺序可配置:为实物调试留后手

最后提一个看似小事却省了无数返工的设计:把 lane 顺序和极性做成可配置参数。物理连接上,PCB 布线为了等长、换层方便,常常会把两条 lane 的物理顺序和 sensor 输出顺序调换,或者数据 P/N 极性互换。如果代码里写死 lane order,遇到这种情况要么飞线硬改,要么改 RTL,都是灾难。

我在解码模块里加了两个寄存器,一个配置 lane 映射(lane0 接物理 lane1,或反过来),一个配置位反相开关,硬件连错了只需改寄存器就能调回来。调试时这个缓冲带价值巨大,因为你永远没法确定某块画了 MIPI 输入的板子在量产时会不会为了让线走得顺而偷偷调整顺序。

做完整套方案,我最大的体会是:MIPI CSI-2 解码本身协议并不复杂,难的是把物理层、字节层、包层、跨时钟域这些环节的边界切清楚。每个环节都独立可验证,整体调试才会变成确定性的流水线过程。如果让我重新做一次,我会在画板阶段就把端接电阻、lane 顺序可配置、测试点都留好,然后在协议层一开始就把 ECC 和 CRC 做全,不要在“先用最简单代码跑通”的诱惑下砍掉校验逻辑——因为省下的那半天,后面往往会用十倍时间还回去。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/22 6:25:56

降AIGC工具深度实测:千笔与知文AI如何破解论文AI率难题

1. 从被导师说"AI味太重"说起:为什么本科生开始需要降AIGC工具先说个身边真实的场景。我们课题组开组会的时候,导师指着一篇初稿跟我说:"这段论述一看就不是你写的,句子整齐得像机器压出来的,你得自己消…

作者头像 李华
网站建设 2026/10/22 6:25:55

机器人调试进阶:从知识体系到实操排查的完整路径

机器人调试,往大了说是一门交叉学科,往小了说是把一台“会动但不听话”的设备调成“指哪打哪”的手艺活。我见过不少人在学习机器人时把精力全花在写代码和调算法上,结果一到真机就卡壳——电机不转、传感器读数乱跳、通信断断续续&#xff0…

作者头像 李华
网站建设 2026/10/22 6:25:54

全自动智能采血系统:硬件算法与临床落地的完整解析

简介:一份聚焦“迈纳士全自动智能采血机器人MagicNurse”的行业文献PDF,面向医疗信息化、智慧医疗及AI医疗领域的产品研发者、临床工作者与研究者。资源系统梳理该机器人从临床痛点识别、核心技术攻关到产品落地验证的全过程,重点介绍红外/超…

作者头像 李华
网站建设 2026/10/22 6:25:43

具身智能中的符号推理与神经符号AI:原理与工程实战

具身智能、符号推理、神经符号AI,这三个词放一起,已经足够劝退一部分做应用的人。但我在机器人系统上折腾这几年,恰恰发现这个组合是让机器人在真实环境里“真正干活”的必经之路。做研究Demo时,端到端模型确实够炫酷,…

作者头像 李华
网站建设 2026/10/22 6:25:39

GPU云仿真新范式:多路径干扰建模与QoS保障

1. 这不是CloudSim的简单插件,而是一次对GPU资源建模逻辑的重新思考“GpuCloudSim初探:示例一(一个基于CloudSim关于Gpu和干扰的仿真器)”——这个标题里藏着三个容易被忽略但极其关键的信号:“初探”不是客套话&#…

作者头像 李华
网站建设 2026/10/22 6:24:52

动态反演与ESO融合的无人机鲁棒自适应姿态控制器复现解析

最近我把这套基于动态反演和扩展状态观测器(ESO)的无人机鲁棒反馈线性化自适应姿态控制器从头到尾复现了一遍。拿到这个项目标题的时候,我的第一反应是:又是一个把几个控制名词叠在一起的“缝合怪”。但等我把公式推完、把Simulin…

作者头像 李华