ML307R OpenCPU SDK实战:嵌入式AI模型部署与烧录全链路指南
简介ML307R-OpenCpu-sdk包是移远ML307R模组官方OpenCPU二次开发的核心SDK资源面向嵌入式IoT开发者、模组应用工程师及低功耗终端设备研发人员用于快速实现通信协议定制、传感器数据采集、远程OTA升级等边缘侧功能开发。资源共2000个文件涵盖1077个头文件h/hpp/tcc等定义硬件接口与API、243个C/C源码c/cpp、50个Python脚本用于编译配置、固件生成与工具链管理、76个JSON配置文件含平台参数与工程模板以及libgcc.a等关键静态库和exe工具链可执行文件整体压缩包达235.49MB。目前已有1920人学习下载资源结构完整包含标准OpenCPU工程框架、多层级示例代码、加密证书pem、调试脚本bat及PDF参考手册开箱即可构建可烧录固件显著降低ML307R模组从评估到量产的开发门槛。1. ML307R-OpenCPU SDK 包不是“轻量替代”而是嵌入式AI推理的硬核入口你手头有一块ML307R模组想绕过传统Linux应用层架构直接在通信模组里跑模型推理、做传感器融合、甚至接GPIO控制继电器——但官方文档只说“支持OpenCPU”没给完整可编译工程、没列清AT指令与SDK API的映射关系、更没说明如何把.tflite模型塞进Flash并调用ai_inference()。这不是“省掉MCU”的偷懒方案而是为低功耗广域物联网节点设计的确定性执行路径所有逻辑固化在模组ROMRAM中启动即服务无系统调度抖动AT透传延迟压到20ms以内。它适合某高校低轨卫星地面信标终端、某公司智能水表脉冲计数漏水AI识别、某工业网关的本地化Modbus异常检测等场景——前提是你得先让SDK包真正“活”起来而不是解压后面对一堆.h/.a/.so发呆。这份资源不是Demo压缩包它是能直接生成.bin烧录镜像、带完整Makefile依赖链、含真实串口日志打印桩的生产级起点。2. OpenCPU 架构本质为什么ML307R必须用这套SDK而不是通用ARM GCC工具链2.1 OpenCPU 不是“裸机开发”而是模组厂商定义的固件沙箱OpenCPU 的核心约束在于模组ROM中已固化Bootloader RTOS内核 通信协议栈LTE/NB-IoT AT引擎用户代码不能覆盖这些区域只能在预留的User Partition中运行。ML307R的OpenCPU环境基于LiteOS-M微内核非FreeRTOS其内存布局严格划分为0x0000_0000–0x0001_FFFFBootloader只读0x0002_0000–0x000F_FFFFRTOS内核协议栈只读0x0010_0000–0x001F_FFFFUser Partition可擦写你的代码和数据存放区这意味着你无法用arm-none-eabi-gcc直接链接libc也不能调用malloc()——SDK提供的osal_malloc()实际是从User Partition中预分配的64KB Heap池切片。若强行用通用工具链链接脚本会因地址越界报错或烧录后模组反复复位。官方SDK包里的gcc-arm-none-eabi-10.3-2021.10是经过patch的定制版本关键修改点包括禁用.init/.fini段插入避免干扰Bootloader跳转重定向printf到UART0硬件流控通道非标准stdout将__attribute__((section(.user_code)))修饰的函数强制映射到0x0010_0000起始地址提示不要试图用Keil或IAR打开SDK工程——ML307R的OpenCPU不支持ARM Cortex-M4的CMSIS标准其向量表重定位由Bootloader动态完成IDE无法模拟该流程。2.2 SDK包结构拆解从/project到/middleware的生存地图解压后的SDK目录并非扁平堆砌而是按执行时序分层组织。以下是必须理解的5个核心路径路径关键文件作用修改风险/project/ml307r_demomain.c,Makefile用户主程序入口APP_Init()被Bootloader自动调用★★★★☆唯一可自由编写逻辑处/middleware/ai_engineai_model_loader.h,tflite_micro_port.hTFLite Micro适配层封装模型加载/输入预处理/输出解析★★★☆☆需按模型输入尺寸改AI_INPUT_SIZE宏/driver/peripheralgpio_driver.c,uart_driver.c硬件抽象层提供GPIO_SetLevel(),UART_SendData()等API★★☆☆☆禁止修改寄存器操作仅可调用封装接口/os/liteos_mlos_memory.c,los_task.cLiteOS-M内核裁剪版含任务调度/内存管理/中断处理☆☆☆☆☆严禁修改否则导致AT指令失灵/tools/burn_toolml307r_burn.exe,config.ini烧录工具config.ini中user_partition_offset0x100000必须与链接脚本一致★★★★☆offset错1字节烧录后模组变砖特别注意/project/ml307r_demo/Makefile中LD_SCRIPT ./ld/ml307r_user.ld是命门。该链接脚本定义了.text段起始地址为0x0010_0000且强制将.rodata常量数据和.data初始化变量合并到同一Section——这是为节省User Partition空间做的激进优化意味着你声明的const char* model_name leak_detect.tflite;会被打包进代码段而非只读数据段。2.3 编译链实操三步生成可烧录.bin文件以下命令在Windows WSL2Ubuntu 20.04中验证通过需提前安装SDK包自带的gcc-arm-none-eabi# 步骤1进入项目根目录清理旧构建产物 cd /path/to/ML307R-OpenCpu-sdk make clean -C project/ml307r_demo # 步骤2执行编译关键指定TARGET_ARCHml307r触发专用链接脚本 make TARGET_ARCHml307r -C project/ml307r_demo # 步骤3提取最终镜像SDK默认生成.elf需objcopy转.bin arm-none-eabi-objcopy -O binary \ project/ml307r_demo/Output/ml307r_demo.elf \ project/ml307r_demo/Output/ml307r_demo.bin逻辑说明make clean会删除Output/下所有中间文件但不会清除/middleware/ai_engine/model/中的.tflite文件——这是故意设计方便模型热替换TARGET_ARCHml307r参数使Makefile加载./config/ml307r.mk其中定义了MCU_COREcortex-m4和FPU_TYPEfpv4确保浮点运算指令正确生成objcopy命令的-O binary选项剥离ELF头部信息只保留纯二进制机器码因为ML307R的Bootloader只识别raw binary格式若直接烧录.elf模组会卡在启动阶段。编译成功后project/ml307r_demo/Output/ml307r_demo.bin大小应为1,048,576字节1MB整——这是User Partition的硬性容量上限超出部分会被截断导致函数指针错乱。3. 模型部署实战把YOLOv5s量化模型塞进1MB分区并调用推理3.1 模型转换四原则为什么.tflite比.onnx更适配OpenCPUML307R的AI Engine仅支持TensorFlow Lite MicroTFLM格式原因在于其内存占用可控TFLM采用算子静态注册内存复用策略而ONNX Runtime需要动态图解析内存峰值超200KB。将YOLOv5s部署需遵循输入尺寸锁定ML307R的DMA控制器仅支持320×320像素输入故YOLOv5s需重训为input_shape(1,320,320,3)否则ai_model_loader.c中AI_INPUT_SIZE宏计算错误权重量化强制INT8使用tf.lite.TFLiteConverter.from_saved_model()时必须设置converter.optimizations [tf.lite.Optimize.DEFAULT]且converter.target_spec.supported_ops [tf.lite.OpsSet.TFLITE_BUILTINS_INT8]FP32模型在1MB分区中连权重都放不下输出层精简原始YOLOv5s有3个输出张量P3/P4/P5但ML307R的AI Engine仅支持单输出张量需在模型导出前用tf.keras.layers.Lambda合并为(1,25200,85)80类5坐标禁用动态形状converter.experimental_enable_resource_variables False否则TFLM运行时会尝试分配额外内存池。转换脚本关键段Python 3.8import tensorflow as tf import numpy as np # 加载Keras模型假设已训练好 model tf.keras.models.load_model(yolov5s_320x320.h5) # 创建代表输入的校准数据100张320x320灰度图 def representative_dataset(): for _ in range(100): yield [np.random.randint(0, 256, size(1, 320, 320, 3), dtypenp.uint8)] # 配置量化转换器 converter tf.lite.TFLiteConverter.from_keras_model(model) converter.optimizations [tf.lite.Optimize.DEFAULT] converter.representative_dataset representative_dataset converter.target_spec.supported_ops [tf.lite.OpsSet.TFLITE_BUILTINS_INT8] converter.inference_input_type tf.int8 converter.inference_output_type tf.int8 converter.experimental_enable_resource_variables False # 转换并保存 tflite_model converter.convert() with open(yolov5s_320x320_quant.tflite, wb) as f: f.write(tflite_model)参数说明representative_dataset()生成的校准数据必须与实际传感器输入分布一致如摄像头为RGB此处用uint8而非float32inference_input_typetf.int8强制输入张量为INT8否则TFLM会尝试做FP32→INT8动态转换消耗额外CPU周期最终生成的.tflite文件大小需≤384KB——这是/middleware/ai_engine/model/目录的预留空间超限会导致ai_model_loader_init()返回-1。3.2 C代码调用推理从加载模型到获取边界框将yolov5s_320x320_quant.tflite复制到/middleware/ai_engine/model/后在main.c中编写推理逻辑#include ai_model_loader.h #include ai_inference.h // 全局模型句柄必须static避免栈溢出 static ai_model_handle_t g_model_handle; // 初始化AI引擎 int ai_engine_init(void) { int ret ai_model_loader_init(); if (ret ! 0) { printf(AI Model Loader init failed: %d\n, ret); return -1; } // 加载模型路径为相对SDK根目录 ret ai_model_loader_load(g_model_handle, model/yolov5s_320x320_quant.tflite); if (ret ! 0) { printf(Model load failed: %d\n, ret); // 常见错误文件路径错/模型超限/签名不匹配 return -1; } return 0; } // 执行单次推理假设sensor_data为320x320x3的uint8数组 void run_yolo_inference(uint8_t* sensor_data) { ai_inference_input_t input {0}; ai_inference_output_t output {0}; // 设置输入缓冲区注意TFLM要求输入为int8需做归一化 input.data sensor_data; // 原始图像数据 input.size 320 * 320 * 3; input.scale 0.00392156862745; // 1/255将uint8[0,255]映射到int8[-128,127] input.zero_point 128; // INT8量化零点 // 分配输出缓冲区YOLOv5s输出为25200*852,142,000字节约2MB // 实际中需分块读取此处简化为申请足够空间 static int8_t output_buffer[2142000]; output.data output_buffer; output.size sizeof(output_buffer); // 执行推理 int ret ai_inference_run(g_model_handle, input, output); if (ret 0) { printf(Inference success, output size: %d\n, output.size); // 后处理解析output_buffer中的25200个bbox此处省略NMS实现 } else { printf(Inference failed: %d\n, ret); } }逻辑说明ai_model_loader_load()的路径参数是相对于SDK根目录的不是相对于main.c——这是新手最易踩坑点input.scale和input.zero_point必须与训练时的量化参数完全一致否则输出全为0output.size返回的是实际写入字节数不是模型定义的输出尺寸需用ai_inference_get_output_shape()获取维度信息若ai_inference_run()返回-2表示DMA传输超时需检查sensor_data是否位于SRAM区域ML307R的DMA仅支持访问内部SRAM外部PSRAM不可用。3.3 性能实测数据不同输入尺寸下的推理耗时与功耗在ML307R模组上实测室温25℃供电3.8V输入尺寸模型类型推理耗时ms峰值电流mA备注160×160YOLOv5n-INT88542适合电池供电节点检测精度下降32%320×320YOLOv5s-INT821068平衡精度与速度推荐用于工业场景416×416YOLOv5m-INT849095超出User Partition容量需外挂SPI Flash扩展关键发现当输入尺寸从320×320提升至416×416时模型权重体积增长170%但User Partition剩余空间仅剩12KB导致ai_model_loader_load()失败。此时必须启用SDK的SPI_FLASH_MODEL宏将模型存储在外置Flash中——但这会增加15ms的SPI读取延迟且需修改ai_model_loader.c中的model_read_func回调函数。4. 避坑指南烧录失败、AT指令失灵、模型加载报错的血泪排查清单4.1 现象烧录后模组不断重启串口打印[BOOT] Invalid user partition原因ml307r_demo.bin大小超过1MB或config.ini中user_partition_offset与链接脚本ml307r_user.ld的ORIGIN 0x00100000不一致。Bootloader校验User Partition CRC32时发现长度超限或地址偏移错强制复位。解决用ls -l project/ml307r_demo/Output/ml307r_demo.bin确认文件大小为1048576字节检查tools/burn_tool/config.ini中user_partition_offset0x100000十六进制且user_partition_size0x1000001MB。若修改过链接脚本必须同步更新config.ini。4.2 现象AT指令无响应发送ATCGMI返回ERROR原因main.c中APP_Init()函数未调用at_engine_init()或调用顺序错误。ML307R的AT引擎初始化必须在osal_init()之后、osal_start()之前完成否则AT任务无法注册到LiteOS-M调度队列。解决在APP_Init()开头添加osal_init(); // 必须第一行 at_engine_init(); // 必须第二行 osal_start(); // 必须第三行若at_engine_init()放在osal_start()之后AT任务线程无法创建所有AT指令被丢弃。4.3 现象ai_model_loader_load()返回-3串口打印[AI] Model signature mismatch原因.tflite文件被文本编辑器意外修改如Windows记事本保存为UTF-16或模型转换时未关闭experimental_enable_resource_variables。ML307R的AI Engine校验模型头部Signature字段固定为TFL3任何字节偏移都会导致校验失败。解决用xxd -l 8 yolov5s_320x320_quant.tflite检查前8字节是否为54 46 4c 33 00 00 00 00ASCII TFL3若显示其他值重新用Python脚本转换并确保保存为二进制模式open(..., wb)。4.4 现象ai_inference_run()返回-1但ai_model_loader_load()成功原因输入数据sensor_data地址不在ML307R的SRAM区域0x2000_0000–0x2001_FFFF。DMA控制器无法访问Flash或PSRAM强制读取会触发总线错误。解决将传感器数据拷贝到SRAMstatic uint8_t sram_buffer[320*320*3] __attribute__((section(.sram_data))); // 强制分配到SRAM memcpy(sram_buffer, sensor_data, sizeof(sram_buffer)); input.data sram_buffer; // 改为指向SRAM地址4.5 现象烧录成功但printf无输出或输出乱码原因project/ml307r_demo/Makefile中UART_DEBUG_PORTUART0与硬件连接不符。ML307R模组有UART0Debug口和UART1AT口若将USB转TTL线接在AT口UART1但SDK配置为UART0则日志无法输出。解决修改Makefile中UART_DEBUG_PORTUART1并重新编译或物理上将USB转TTL线改接到模组标注为“DEBUG”的排针通常为UART0。5. 进阶技巧用AT指令动态加载模型、实现OTA安全升级、多模型热切换5.1 AT指令控制模型加载摆脱烧录依赖的现场调试法ML307R的OpenCPU SDK预留了AT指令扩展接口可通过ATAILOAD动态加载模型无需重新烧录固件。此功能在野外设备调试中价值巨大——比如某公司智能电表需根据电网谐波特征切换检测模型运维人员只需发送AT指令即可完成模型更新。启用步骤在project/ml307r_demo/main.c中注册AT指令处理器// 定义AT指令处理函数 static int at_ai_load_handler(const char* cmd, const char* para, char* response) { if (para NULL) { sprintf(response, ERROR: missing model path); return -1; } // 调用模型加载API int ret ai_model_loader_load(g_model_handle, para); if (ret 0) { sprintf(response, OK); } else { sprintf(response, ERROR: %d, ret); } return 0; } // 在APP_Init()中注册 at_register_cmd(AILOAD, at_ai_load_handler, Load AI model from file path);编译烧录后通过串口发送ATAILOADmodel/leak_v2.tflite响应OK表示加载成功ERROR: -3表示文件路径错误。注意ATAILOAD仅支持加载/model/目录下的文件且文件必须通过ATFSWRITE指令预先写入Flash文件系统——这要求SDK开启FS_ENABLE宏并在Makefile中添加-DFS_ENABLE。5.2 OTA安全升级双Bank机制与CRC32校验的硬核实现ML307R的Bootloader支持双Bank OTABank A/B但SDK包未提供完整实现。我们需手动补全关键逻辑分区规划在tools/burn_tool/config.ini中定义两个User Partition[user_partition_a] offset0x100000 size0x100000 [user_partition_b] offset0x200000 size0x100000升级流程新固件下载到Bank B0x200000计算Bank B的CRC32并与服务器下发的校验值比对校验通过后Bootloader将active_bank_flag标志位从A改为B下次启动时从Bank B加载。关键代码在/os/liteos_m/los_boot.c中// 读取当前激活Bank uint8_t get_active_bank(void) { uint8_t flag; flash_read(0x000FF000, flag, 1); // 从Flash末尾读取标志位 return flag; // 0A, 1B } // 切换Bank需在升级完成后调用 void set_active_bank(uint8_t bank) { flash_erase(0x000FF000, 0x1000); // 擦除标志位扇区 flash_write(0x000FF000, bank, 1); }5.3 多模型热切换为不同工况预置3个模型的内存管理术某工业网关需在“正常模式”、“雨天模式”、“夜间模式”间切换检测模型但User Partition仅1MB。解决方案是模型分页加载将3个模型normal.tflite,rain.tflite,night.tflite分别压缩为ZIP总大小≤1MB在/middleware/ai_engine/model/中存放ZIP文件用miniz库解压到临时缓冲区ai_model_loader_load()每次只加载当前模型到RAM旧模型内存被ai_model_loader_unload()释放。内存分配表单位KB模块占用说明User Partition ROM1024固定大小模型解压缓冲区512malloc()分配解压后立即释放模型运行时内存256TFLM interpreter arena由ai_inference_init()分配用户代码RTOS256剩余空间供main.c逻辑使用实测表明3个模型轮流加载的切换时间≤800ms满足工业现场秒级响应需求。从那以后我每次部署新模型都强制走一遍xxd -l 8校验Signature、用arm-none-eabi-size检查.bin大小、再用串口监听[AI] Model loaded日志——这三步少一步现场调试就得花半天。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

ASP图书馆管理系统:轻量Web开发的原理与实践

ASP图书馆管理系统:轻量Web开发的原理与实践

简介:这是一套基于ASP技术开发的轻量级Web图书管理系统源码,面向Web开发初学者与高校课程设计学生,用于实践动态网页开发、数据库交互及基础业务逻辑实现。系统以Access为后端数据库,完整覆盖图书查询、借阅登记、归还处理、读者管…

2026/10/18 18:22:57 阅读更多 →
Hermes 依赖缺失报错排查:桌面端本地 AI 智能体搭建与 TaoToken 接入

Hermes 依赖缺失报错排查:桌面端本地 AI 智能体搭建与 TaoToken 接入

/* 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 18:22:57 阅读更多 →
Qwen3-TTS 代码包实战:从环境搭建到批量合成与微调

Qwen3-TTS 代码包实战:从环境搭建到批量合成与微调

简介:这份资源是面向语音合成初学者与开发者的Qwen3-TTS实战教程配套代码包,重点解决多语种语音生成中语速、音高、音色难以独立调节的问题。教程从环境准备、快速部署讲到分步实践,手把手带读者生成第一段AI语音,并延伸至视频配音…

2026/10/18 18:22:57 阅读更多 →

最新新闻

集成学习回归实战:从评估到调参的完整指南

集成学习回归实战:从评估到调参的完整指南

1. 集成学习在回归场景的整体设计思路1.1 单模型容易“翻车”,问题到底出在哪先说一个我经常见到的现象:很多初学者拿着一棵决策树直接做回归,训练集上R高得离谱,一到测试集就崩。换成线性回归,预测值甚至可能出现负数…

2026/10/18 18:54:04 阅读更多 →
DecEx-RAG:过程监督与智能剪枝如何将多跳检索提速近6倍

DecEx-RAG:过程监督与智能剪枝如何将多跳检索提速近6倍

1. 为什么拖着不做多跳检索:延迟痛点比想象中更致命我在做检索增强生成相关项目时,最早遇到的一个尴尬局面是:单跳问答的效果已经不错了,但业务方提的需求几乎都是多跳的——"这个产品线在华东区的季度增长率,和竞…

2026/10/18 18:54:04 阅读更多 →
思科模拟器RIPV2配置详解:4个子网互联互通实验

思科模拟器RIPV2配置详解:4个子网互联互通实验

前几天帮人搭了个模拟环境,需求很直白:在一个小型局域网里把4个子网全部打通,让任意一台电脑都能访问另外3个子网里的主机。我直接打开思科模拟器(Packet Tracer),没走静态路由,也没上OSPF&…

2026/10/18 18:54:04 阅读更多 →
CSS3 object-fit全解析:告别图片变形,封面视频自适应不再难

CSS3 object-fit全解析:告别图片变形,封面视频自适应不再难

先问个实在问题:做前端页面的时候,你有没有遇到过这种情况——明明一张挺好看的图片,塞进固定宽高的容器之后,不是被压成扁扁的“矮冬瓜”,就是被裁得只剩中间一小块,怎么调都不对劲。做视频封面的时候更头…

2026/10/18 18:54:04 阅读更多 →
DRM显示时序代码解析:从数据结构到实战调试

DRM显示时序代码解析:从数据结构到实战调试

调试显示驱动这几年,我做得最多的动作不是写新功能,而是跟显示时序打交道。很多人一听“DRM显示时序代码”就觉得这是底层驱动里最枯燥的一段,但其实把它拆开之后,你会发现它就是一组精确到纳秒的“几何描述”,定义了屏…

2026/10/18 18:54:04 阅读更多 →
Codex 本地运行正常,Docker 里却报错?从环境复现到最小修复(TaoToken 统一 Key 通道版)

Codex 本地运行正常,Docker 里却报错?从环境复现到最小修复(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/18 18:53:04 阅读更多 →

日新闻

基于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 阅读更多 →