陀螺仪FIFO机制详解:从中断风暴到批量读取的工程实践
1. 为什么把陀螺仪读取从“轮询”改成“FIFO块读”先用一次真实测试说明问题。我在测试陀螺仪LSM6DSV80X时把输出数据率ODR提到1.66kHz主循环里每来一次数据就进中断读一次三轴原始值。刚开始看着串口打印还很正常但一旦同时做姿态解算、串口打印、LED刷新数据就开始“断层”明明设定了1.66kHz实际收包率却只有1.2kHz左右Yaw角积分偏差肉眼可见。原因不复杂中断频率太高了。1.66kHz意味着每0.6ms就要中断一次MCU在中断里要完成I2C/SPI读6个字节还要拼装、符号扩展、存数组稍不注意就超过下个采样周期。如果ODR再往上拉到3.33kHz甚至6.66kHz中断风暴几乎是必然的。这时候FIFO的价值就体现出来了它把“来一个样本读一次”变成“攒一批样本读一次”中断频率大幅下降数据完整性反而更好。这里先给一张直观对比表方便理解三种读取方式的差异方式数据完整性CPU占用中断频率代码复杂度轮询读状态很差容易丢高一直等无低每个样本触发中断一般高ODR下丢帧较高1.6k~6.6kHz中FIFO按水印批量读较好完整批次低可配置如每10ms一次中高我个人的结论是只要陀螺仪ODR超过1kHz就应该考虑FIFO如果ODR只有104Hz或208Hz模拟量不大轮询也能用但项目后续要加功能不如早点把FIFO打通。1.1 中断风暴是如何让数据“看起来还在转其实已经不对”的很多人只看串口波形觉得陀螺仪数值一直在变就没问题。实际上当中断里读数据耗时太长硬件FIFO溢出后老数据被新数据覆盖中断读到的其实是“最新值”不是“等间隔采样值”。姿态解算是靠等间隔采样做积分的一旦时间间隔不一致零漂和积分误差都会被放大。我在调试时把每个采样点的时间戳打出来发现间隔从0.6ms跳变到2.3ms才意识到问题不是传感器坏了而是读取机制根本没跟上。FIFO解决的核心问题就是让数据在传感器内部按固定节奏积累MCU只需要定期去“取货”取到的货仍然是等间隔的原始数据。1.2 FIFO的“批量取货”思路LSM6DSV80X内置了数据FIFO可以理解为一个环形缓冲陀螺仪每采完一个样本按设定好的ODR自动存入FIFO当FIFO中积累到设定的水印阈值Watermark时硬件中断引脚触发一次通知MCU再一次性把这一批数据读走。这样带来的好处有三个中断频率降低本来每0.6ms一次现在如果水印设为16个样本大约每9.6ms才中断一次。连续数据不丢只要FIFO没有溢出所有样本都在里面MCU晚一点读也没关系。CPU可以用整块时间处理数据读一批样本再解析比频繁进出中断更高效。所以把陀螺仪读取改成FIFO本质上是把“实时单点读取”改成“定时批量块读”。下面开始配置。2. 先把 I2C 地址和寄存器映射理顺不管配置什么功能第一步都是确认通信接口正常。LSM6DSV80X支持I2C和SPI我这里用的是I2C因为引脚少、调试方便。开发板上SDO/SA0引脚接地I2C从机地址就是0x6B如果SDO接高电平地址变成0x6A。这个地址一位之差很容易搞错我见过不止一个人因为地址没对上读写寄存器全失败还以为是传感器坏了。新芯片拿到手我习惯先读WHO_AM_I寄存器0x0F验证通信。LSM6DSV80X的WHO_AM_I返回值一般是固定值不同批次可能略有差异但通信不通时读回0xFF或0x00这就说明要么地址错要么接线错不用继续往下配置。2.1 板级接线与地址选择I2C模式需要4根线VDD、GND、SCL、SDA。如果有VDD_IO记得和MCU的IO电压保持一致不然可能出现寄存器能写但数据读不对的怪问题。SCL和SDA上拉电阻一般是4.7kΩ到10kΩ开发板上通常已经集成自己搭板子时不能省。SPI模式则要额外接CS、SCLK、MOSI、MISO比较适合数据量大的场景。但我个人建议先用I2C把FIFO逻辑调通再考虑切换SPI因为I2C下看波形、查地址都更方便。2.2 FIFO相关寄存器地址对照表很多资料把寄存器地址写得很散我整理了一份自己在调试时常用的对照表寄存器地址主要作用FIFO_CTRL10x08FIFO水印低8位FIFO_CTRL20x09FIFO水印高4位等FIFO_CTRL40x0BFIFO模式选择FIFO_CTRL50x0CFIFO使能、FIFO ODR设置CTRL1_XL0x10加速度计ODR和量程CTRL2_G0x11陀螺仪ODR和量程CTRL3_C0x12BDU、自动地址递增等INT1_CTRL0x0D中断1功能映射提示不同批次、不同固件版本寄存器位定义可能有细微差异。下面的配置示例给出的是我手头这颗芯片的实测值建议你拿到芯片后对照官方数据手册的寄存器表核对一遍再量产。尤其要注意CTRL3_C里的BDU位Block Data Update。BDU1时传感器输出寄存器和FIFO数据在更新期间不会“撕裂”也就是不会出现高字节是新数据、低字节是旧数据的情况。这个位不置位读出来的数值在高速率下偶尔会出现异常跳变排查起来非常头疼。3. FIFO 控制寄存器一讲模式、水印、ODR怎么配合FIFO不是一个“开了就完事”的功能它有三个参数必须一起配合配置顺序、FIFO模式、水印值。顺序错了会导致FIFO存进一堆无效数据模式选错会导致满FIFO覆盖策略不符合预期水印设错则会导致中断过于频繁或者数据积压太久。3.1 配置顺序为什么重要我推荐的初始化顺序是软复位传感器等待10ms。设置CTRL3_C打开BDU和自动地址递增。先配置陀螺仪ODR和量程CTRL2_G再配置加速度计ODRCTRL1_XL。配置FIFO_CTRL1/2的水印值。配置FIFO_CTRL4的模式。最后配置FIFO_CTRL5使能FIFO。为什么必须先配传感器ODR再使能FIFO因为FIFO在使能后会按ODR自动写入如果传感器ODR还没配好FIFO可能按默认值或者错误频率写入导致第一批数据全是无效的。我最初就是先开了FIFO再配ODR结果读出前几十个样本全是0浪费了不少时间。一个参考代码片段如下// 软复位 write_reg(0x12, 0x01); delay_ms(10); // BDU1, IF_INC1 write_reg(0x12, 0x44); // 陀螺仪ODR1.66kHz量程250dps write_reg(0x11, 0x80); // FIFO水印设置为16个样本 write_reg(0x08, 16 0xFF); write_reg(0x09, (16 8) 0x0F); // FIFO模式流模式满时覆盖最旧数据 write_reg(0x0B, 0x80); // 使能FIFOFIFO_ODR按传感器最高ODR write_reg(0x0C, 0x80);注意CTRL2_G的0x80表示1.66kHz、250dps是我手头固件版本的值不同版本可能有差异务必对照手册。ODR和量程的选择要根据项目实际需求来不要照抄。3.2 水印值手把手计算水印Watermark是指FIFO中积累到多少个样本时触发中断。水印值设置需要结合两个因素期望的中断频率和FIFO容量。假设陀螺仪ODR是1.66kHz希望MCU每10ms处理一次数据那么水印值大约为样本数 1.66kHz × 0.01s ≈ 16.6所以水印设为16比较合适。如果设得太大比如200MCU中断间隔变成120ms数据实时性变差设得太小比如2中断频率又回到833Hz失去FIFO的意义。更合理的做法是先明确系统的实时性需求比如姿态解算要求数据延迟不超过5ms那就用ODR乘以延迟时间来估算水印。FIFO容量大概在3KB级别一个三轴样本占6字节那么最多能存约500个样本。水印不要设超过FIFO容量的一半尤其是流模式下如果MCU处理不过来水印过高反而会导致溢出标记反复触发分不清是“正常批次”还是“丢数据”。这里给出几组常用参考ODR10ms水印20ms水印104Hz1~22~4208Hz2~34~61.66kHz16~1733~343.33kHz33~3466~67实际项目里我会先把水印设小一点确认中断和数据读取都正常再逐步调大直到CPU占用和数据延迟都满足要求。4. FIFO 数据格式读出来的是哪几个字节FIFO里存的是原始数据不是经过处理的工程值。这一点必须搞清楚否则读回来的数据无法使用。当一个FIFO样本是“陀螺仪三轴数据”时它由6个字节组成X轴低字节、X轴高字节、Y轴低字节、Y轴高字节、Z轴低字节、Z轴高字节。这些数据默认是小端格式也就是低字节在前组合时需要把高字节左移8位再和低字节按位或。4.1 一个FIFO样本实际占几个字节如果你只启用了陀螺仪没有让加速度计进FIFO那么一个样本就是6字节。常见做法是读取FIFO_DATA_OUT_X_L地址0x3E开始的连续6个字节分别对应X、Y、Z轴。如果同时启用加速度计和陀螺仪FIFO中会出现带标签的数据项。标签寄存器FIFO_DATA_OUT_TAG地址0x37会告诉你后面跟的是加速度数据还是陀螺仪数据。这种情况下每个数据项可能是6字节也可能是8字节需要根据标签判断。如果项目里只用陀螺仪我建议在初始化时把加速度计的ODR设为0让FIFO里只存陀螺仪样本这样解析最简单也不会被标签干扰。4.2 字节序和符号扩展陀螺仪输出是有符号16位整数组合方法如下int16_t gyro_x (int16_t)((buf[1] 8) | buf[0]); int16_t gyro_y (int16_t)((buf[3] 8) | buf[2]); int16_t gyro_z (int16_t)((buf[5] 8) | buf[4]);有人直接把这16位当成无符号数结果负角速度全变成65535附近的巨大值画出来的波形完全没法看。必须用int16_t做类型转换C语言会按有符号数处理高位的符号位。举个例子假设原始buf[0]0xF6, buf[1]0xFF组合后得到0xFFF6也就是-10。这个值代表的是原始LSB要转成角速度需要用量程换算。250dps量程下满量程对应的16位数值是-32768到32767所以换算公式为角速度(度/秒) 原始LSB × 250 / 32768换算结果大约每LSB对应0.0076dps。如果你只需要原始数据做姿态融合很多算法库可以直接吃LSB不一定非得转成float还可以省掉浮点运算时间。5. 直接可跑的读取流程轮询式和中断式两版原理讲清楚了接下来是代码部分。这里我给出两个版本一个是主循环轮询FIFO状态适合没有外部中断引脚的场景另一个是基于水印中断的版本适合实时性要求较高的场景。两个版本都需要你自己封装底层的write_reg和read_burst函数我这里只写核心逻辑。5.1 初始化示例void lsm6dsv_fifo_gyro_init(void) { // 软复位并等待 write_reg(0x12, 0x01); delay_ms(10); // BDU1, IF_INC1 write_reg(0x12, 0x44); // 陀螺仪ODR1.66kHz, 量程250dps write_reg(0x11, 0x80); // 加速度计ODR0避免数据混入FIFO write_reg(0x10, 0x00); // FIFO水印 16个样本 write_reg(0x08, 0x10); write_reg(0x09, 0x00); // FIFO模式流模式 write_reg(0x0B, 0x80); // 使能FIFO write_reg(0x0C, 0x80); }初始化完成后FIFO会以1.66kHz的频率自动写入陀螺仪样本。我不建议频繁去读FIFO状态来判断数据是否更新因为那样又会把读取频率拉高。更好的方式是等水印中断或者用定时器节拍去读。5.2 轮询读FIFO核心函数#define GYRO_SAMPLE_SIZE 6 int lsm6dsv_fifo_read_gyro(int16_t *gx, int16_t *gy, int16_t *gz) { uint8_t status[2]; uint8_t buf[GYRO_SAMPLE_SIZE]; uint16_t fifo_samples 0; // 读FIFO_STATUS1和FIFO_STATUS2 read_burst(0x3A, status, 2); // 低11位表示FIFO中未读条目具体含义以手册为准 fifo_samples (status[0] 0x07) 8 | status[1]; if (fifo_samples 1) { return 0; } // 读取一个样本的6字节 read_burst(0x3E, buf, GYRO_SAMPLE_SIZE); *gx (int16_t)((buf[1] 8) | buf[0]); *gy (int16_t)((buf[3] 8) | buf[2]); *gz (int16_t)((buf[5] 8) | buf[4]); return 1; }提示上面的代码一次只读一个样本。实际项目中建议一次把水印对应的所有样本读完存放在环形数组里避免反复发起I2C读取。如果是SPI连续读6个字节几乎是一瞬间的事但I2C每发起一次传输都有地址和应答开销批量读能明显降低总线负载。批量读取示例#define BATCH_SIZE 16 void lsm6dsv_fifo_read_batch(int16_t data[][3], int *count) { uint8_t status[2]; uint8_t buf[GYRO_SAMPLE_SIZE]; uint16_t unread_entries 0; int num 0; read_burst(0x3A, status, 2); unread_entries ((status[0] 0x07) 8) | status[1]; while (num BATCH_SIZE num unread_entries) { read_burst(0x3E, buf, GYRO_SAMPLE_SIZE); data[num][0] (int16_t)((buf[1] 8) | buf[0]); data[num][1] (int16_t)((buf[3] 8) | buf[2]); data[num][2] (int16_t)((buf[5] 8) | buf[4]); num; } *count num; }这里有个容易糊涂的点有些手册把FIFO状态里的值定义为“未读字数”有些定义为“未读样本数”。定义不同计算最终样本数的方式就不同。我的建议是先读出来观察如果第一次读FIFO状态后能读取的样本数和值的比例对不上就检查一下手册到底说的是“多少字节”还是“多少条目”。实测几轮就能确定不用死记。5.3 中断版要点中断版本的流程是配置INT1_CTRL把FIFO水印中断映射到INT1引脚。MCU检测到INT1下降沿或低电平后进入外部中断处理函数。在中断处理函数里调用FIFO读取函数尽量只做读取和暂存不做复杂计算。中断标志在读回数据后一般会自动清除如果不清除需要确认是否要读取某个状态寄存器。中断配置代码示例// INT1_CTRL使能FIFO水印中断 write_reg(0x0D, 0x10);外部中断处理函数里我一般只做两件事void EXTI_IRQHandler(void) { int16_t sample[3]; int count 0; lsm6dsv_fifo_read_batch(gyro_ring_buffer[ring_index], count); ring_index (ring_index 1) % RING_SIZE; // 清除中断标志 clear_imu_int1_flag(); }中断里不要做浮点换算也不要printf。我只是把原始LSB暂存到环形缓冲区主循环再统一换算和处理。这样能保证中断服务函数足够短不会影响其他实时任务。6. 实测中最容易踩中的四个坑FIFO看似简单实际上手后能遇到各种奇怪问题。下面这四条是我实测过程中真实踩过的单独列出来希望能帮大家省点排查时间。6.1 读回来的数据全是0这个现象最常见。排查思路是先确认传感器是不是真的在跑。很多人配置了FIFO却没确认CTRL2_G里的ODR位有没有写进去。可以用调试器读回CTRL2_G看值是不是预期值然后再读FIFO状态看FIFO中是否有数据积累。另一个原因是加速度计ODR为0导致FIFO不写入。有些传感器要求FIFO写入至少跟随一个已使能传感器的ODR如果陀螺仪和加速度计都没有正确使能FIFO就一直空着。我建议初始化后先读FIFO状态如果一段时间内一直为0优先查传感器ODR配置。6.2 FIFO水满还清不掉中断反复触发流模式下FIFO满了之后会覆盖最旧数据这本身不是问题。但如果中断反复触发而且每次进中断后读完数据状态里还是有大量未读条目说明读取速度跟不上写入速度。一种可能是水印设得太低中断频率过高另一种可能是读取函数一次只读了一个样本但水印是16个样本导致FIFO永远在积累数据。解决方法很简单中断里一次性把当前FIFO里的所有未读样本读完或者至少读够一个完整批次。我后来改成批量读函数中断频率明显稳定下来了。6.3 数据读出来像“乱跳”甚至出现整轴互换这类问题多半不是FIFO的问题而是字节序或读取寄存器顺序错了。如果你用了自动地址递增读顺序是X低字节、X高字节、Y低字节、Y高字节、Z低字节、Z高字节如果地址递增没有生效每次读回来的都是同一个地址三轴数据自然就乱了。我遇到过一种情况IF_INC位没置位但代码里用了连续读6字节的函数结果I2C在每次寄存器地址后都重复读同一个地址导致三轴数据重复出现。把CTRL3_C里的IF_INC位置1后问题立即消失。所以IF_INC和BDU两个位建议初始化时一起配好。6.4 FIFO状态值看起来“减半”或“翻倍”前面说过FIFO状态的低11位在不同手册里的定义有差异。我在调试时发现某款芯片的FIFO状态返回的其实是未读字数而每字在FIFO里对应的是6字节样本但另一个版本又直接返回样本数。这个差异会让读取循环要么读不完要么读到空数据。这点没有捷径只能靠实测验证。我的验证方法很简单把FIFO水印设为1让传感器只转一小段时间然后在调试器里看FIFO状态值和实际读出的样本数对比几次就知道定义是哪种了。确认后把换算逻辑写进代码不要凭记忆猜。最后分享一个我后来一直在用的小方法先用低ODR加FIFO模式调试比如104Hz中断频率低出问题容易从串口波形看出来确认无误后再把ODR提到1.66kHz甚至更高。直接一步调到高速率一旦数据异常你根本分不清是FIFO配置问题还是通信时序问题。FIFO这套逻辑调通之后后续不管加姿态解算、加低功耗还是加数据记录都会顺手很多。

相关新闻

孤子视角:AVO离非线性自洽描述还有多远

孤子视角:AVO离非线性自洽描述还有多远

先给常年在非线性问题里摸爬滚打的同行们说个事儿:这个标题我盯了很久。“孤能子视角:AVO,离N(EIN(EI))还有多远”——光看字面,三分之一的人会以为是病句,三分之一的人觉得是某个没听过的学科黑话,剩下的人大概能嗅到…

2026/10/18 8:31:15 阅读更多 →
OA审批系统源码实战:流程引擎、表单绑定与二次开发避坑指南

OA审批系统源码实战:流程引擎、表单绑定与二次开发避坑指南

简介:这是一套可直接二次开发的OA办公自动化系统源码,面向需要搭建或改造企业内部审批流程的开发者与团队。资源以C#与ASP.NET技术栈实现,涵盖Web端与移动端两套界面,核心模块包括业务逻辑层、数据库工具类库与公共组件&#xff0…

2026/10/18 8:31:15 阅读更多 →
C语言数据结构与算法:从内存布局到工程决策

C语言数据结构与算法:从内存布局到工程决策

简介:本资源是面向C语言初学者与算法进阶学习者的数据结构与算法实践合集,聚焦线性表、栈、队列、树、图、查找、排序等核心模块的C语言原生实现,覆盖高校课程教学与工程实践双重需求。压缩包共558个文件,以80个.c源码文件为主体&…

2026/10/18 8:31:15 阅读更多 →

最新新闻

基于React全家桶的轻量级知识管理工具rea:从零搭建到性能优化实践

基于React全家桶的轻量级知识管理工具rea:从零搭建到性能优化实践

最近抽空把一个拖了很久的练手项目重新收拾了一遍,代号就叫 rea。起初只是随手起的三个字母,后来整理项目文档时才发现,把它解释成 React Ecosystem Application 倒也挺贴切:这是一个基于 React 全家桶搭建的轻量级内容管理与检索…

2026/10/18 15:36:07 阅读更多 →
AI深度融合落地实战:从场景选型到数据工程的完整指南

AI深度融合落地实战:从场景选型到数据工程的完整指南

人工智能的深度融合与产业化落地,这话题近两年被反复提起,听得耳朵都快起茧了。但说句实在话,真正把“融合”做到位、把“落地”跑通赚到钱的项目,我见过的不超过三分之一。多数情况是,花了几百万采购算力、招了算法团…

2026/10/18 15:36:07 阅读更多 →
初识Llama-3.2-3B-Instruct_rai_1.8.0_medusa_1.0_npu:AMD NPU本地大模型到底是什么?一文看懂核心定位

初识Llama-3.2-3B-Instruct_rai_1.8.0_medusa_1.0_npu:AMD NPU本地大模型到底是什么?一文看懂核心定位

大模型人工智能基础模型 【免费下载链接】Llama-3.2-3B-Instruct_rai_1.8.0_medusa_1.0_npu 项目地址: https://ai.gitcode.com/hf_mirrors/amd/Llama-3.2-3B-Instruct_rai_1.8.0_medusa_1.0_npu 点击查看 免费下载 本文带你用大白话读懂 Llama-3.2-3B-Instruct NP…

2026/10/18 15:36:07 阅读更多 →
Unity项目接入ILRuntime热更新:从选型到上线的完整实践指南

Unity项目接入ILRuntime热更新:从选型到上线的完整实践指南

你们项目提审后第三天,运营抛过来一个改动需求:某个活动入口的显示逻辑要换,还附了一句"这个版本必须热更"。如果走应用市场审核,等一圈下来至少两周,黄花菜都凉了。这时候你才会真正意识到,Unit…

2026/10/18 15:36:07 阅读更多 →
Gemma-4 E2B 决策模型基准测试全解读:400 用例 2000 决策下的 Accuracy、KL 与 Brier 指标

Gemma-4 E2B 决策模型基准测试全解读:400 用例 2000 决策下的 Accuracy、KL 与 Brier 指标

【免费下载链接】gemma-4-e2b-it-OptiQ-4bit-decision 项目地址: https://ai.gitcode.com/hf_mirrors/mlx-community/gemma-4-e2b-it-OptiQ-4bit-decision 点击查看 免费下载 Gemma-4 E2B 决策模型(gemma-4-e2b-it-OptiQ-4bit-decision)是一…

2026/10/18 15:36:07 阅读更多 →
Vue 3.0 全家桶实践:组合式API、Vite、Pinia、Router与TypeScript落地指南

Vue 3.0 全家桶实践:组合式API、Vite、Pinia、Router与TypeScript落地指南

刚开始把项目从 Vue 2 往 Vue 3.0 迁移时,我犯过一个特别典型的错误:把原本 Options API 那套写法原封不动塞进 setup 里。结果组件膨胀得比以前还快,一个 setup 里塞了两百行逻辑,同事看我的眼神都不太对劲了。后来我把 Vue 3.0 …

2026/10/18 15:35:07 阅读更多 →

日新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 0:55:02 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →