lingbot-map实战:机器人导航地图的格式统一与坐标对齐

做机器人导航的人,迟早会被地图这件事折磨一遍。最开始我以为地图就是一张图片,顶多分辨率高点、画得清楚点,后来在实际项目里才发现,地图在导航系统里同时扮演着数据结构、坐标系基准、实时变量和调参噩梦四个角色。lingbot-map就是我在这个背景下反复打磨出来的一个地图模块,它做的事情很具体:把传感器产生的原始数据变成导航可以直接用的地图表示,同时把格式转换、坐标系对齐、在线更新这些杂活封装成统一的接口。

如果你正在做室内巡检机器人、仓储物流小车、或者任何需要自主移动的项目,并且发现每次换地图格式、换建图方式、对接路径规划时都要改一堆代码,那么这篇文章应该能帮你省下不少事。我会从设计思路、核心实现、实测过程和踩坑记录四个角度,把lingbot-map从零到一讲清楚。

1. lingbot-map:一个专门给机器人用的地图模块

1.1 机器人项目里的地图,到底复杂在哪

很多刚接触机器人导航的人会有一个错觉:地图不就是一张照片或者一个CAD图纸吗,直接把图片给导航模块不就行了?

实际上完全不是这么回事。导航用的地图不是给人看的,是给算法做判断用的。它必须能回答几个非常具体的问题:当前位置的前方多远有障碍物?这片区域的通过概率是多少?机器人从A点到B点能不能走直线?

这就意味着地图本质上是一个空间查询数据结构。最常见的存储形式是栅格地图(occupancy grid map),把环境切成一个个小格子,每个格子记录三种状态之一:空闲、占据、未知。栅格地图的好处是直观、实现简单、和激光雷达的扫描数据天然匹配;坏处也很明显,环境一大,格子数量就爆炸,比如一个50m乘50m的区域、分辨率5cm,光是格子就有100万个。

除了存储,还有格式问题。不同建图工具输出的地图格式不一样,有的是图片加配置文件,有的是序列化数据流,有的直接发到中间件话题里。路径规划模块需要的格式又和建图工具输出的格式不一样。中间还有坐标系的坑:地图坐标系、机器人坐标系、传感器坐标系,如果对齐错了,地图再好也白搭。

我在做某个室内巡检项目时,当时的地图处理代码散落在一堆脚本里:L轮到加载,用PIL读图片;需要转换格式,写一个函数,半生不熟的;坐标出问题,打日志一点点定位。后来项目要换一种建图方案,结果光适配格式就花了两天。lingbot-map就是在这种痛感下诞生的。

1.2 lingbot-map的设计定位与模块边界

lingbot-map不是一个SLAM建图算法,也不替代路径规划器。它的定位很朴素:做一个地图数据的中转站和加工厂。

具体来说,它负责三层事情:

第一层是地图导入与格式统一。不管你的原始地图来自哪种建图方案,也不管它是PGM图片、YAML配置文件、还是中间件消息格式,lingbot-map都能把它加载进来,转换成内部统一的栅格地图模型。这样做的好处是上层代码永远只面对一种地图接口,底层怎么变都不影响。

第二层是地图加工与维护。包括坐标变换、子图裁剪、多图拼接、原点重定位、分辨率重采样,以及地图更新。这些操作听起来琐碎,但在实际项目里几乎每天都要用到。比如地图裁掉一块不需要的区域再交给规划器,能明显减少计算耗时。

第三层是地图发布与对接。处理好的地图要输出成导航模块能消费的格式,可能是中间件的话题消息,也可能是文件,甚至直接通过API传给代价地图组件。

这个模块边界很关键。它不做定位(那是AMCL那类模块的事),不做路径规划(那是全局/局部规划器的事),也不做传感器数据融合(那是SLAM的事)。界限划清楚之后,代码职责才清晰,出问题的时候也才知道去哪一层排查。

2. 核心设计拆解:地图数据流转里的三个硬骨头

2.1 多源格式统一:栅格地图、拓扑地图与语义地图

lingbot-map内部选择栅格地图作为核心数据结构,这个选择不是随意的。在机器人导航场景里,栅格地图和路径规划算法的匹配度最高——A*、Dijkstra这类经典的全局规划算法都直接操作栅格;局部规划里的代价地图更是以栅格为基本单位。放弃栅格去用拓扑地图或语义地图,会导致和主流导航方案脱节。

但这不代表lingbot-map只认一种格式,内部统一、外部兼容才是关键。加载模块支持三种输入源:

  • 图像文件(PGM/PNG)。读进来的时候需要同时读取一个配置文件,里面包含了分辨率、原点坐标、占据阈值这些关键参数。
  • 中间件消息(OccupancyGrid这类类型)。直接反序列化,保留时间戳和坐标系ID。
  • 外部数据流。比如在线的传感器占用更新,通过接口直接修正内部栅格。

每次导入背后都有一堆细节。拿PGM图片举例,PGM文件本身只是一堆像素值,0表示黑色,255表示白色,但哪个是占据、哪个是空闲,完全由配置文件里的阈值决定。occupied_thresh是0.65,free_thresh是0.25,那像素灰度和阈值一比,才能确定这个格子到底是墙还是路。这些细节如果漏掉,地图加载出来的效果就会完全错乱。

2.2 坐标系对齐:map、odom与base_link的三角关系

这是整个项目里我最想强调的部分,因为90%的地图诡异问题,最后都能追溯到坐标变换。

机器人的导航系统里有三个核心坐标系:map(地图坐标系,全局固定)、odom(里程计坐标系,相对起始位置)、base_link(机器人本体坐标系,随着机器人动)。传感器数据进来的时候,坐标是在传感器坐标系里的;要落到地图上,就必须经过一连串变换。

最典型的错误是:直接把激光雷达的点云当成地图坐标来更新栅格。如果机器人在移动,这样更新出来的障碍物位置就会乱成一团。正确做法是先把点云从传感器坐标系变换到base_link,再变换到odom,最后根据定位结果变换到map坐标系,然后才能去更新地图里的格子。

lingbot-map里做了两层防护。第一层是接口强制传入坐标变换信息,不传就不让更新;第二层是内部有一个轻量级的坐标校验器,发现数据变化后的坐标漂移超过阈值时,会拒绝本次更新并打警告日志。踩过几次坑之后你就会明白,这个校验功能不是在找麻烦,是在救你。

实操时有一个参数要特别注意,就是地图配置文件里的origin,也就是地图原点是哪。假设有一张地图,宽度500个像素,分辨率0.05m,那么它覆盖的实际区域是25m。如果地图的物理原点不在图片左上角,而是在左下角,那么图片坐标和世界坐标之间就差了一个翻转关系。yaml里的origin通常是[-12.5, -12.5, 0]这样三个数字,前两个是原点在世界坐标的位置,第三个是偏航角。偏航角如果不是0,意味着整张地图是旋转过的,这时候如果还按正南正北画,路径规划必翻车。

2.3 实时更新与静态地图的取舍

在真实环境里,"静态地图"其实没那么静态。今天这里多了几个货架,明天那里堆了一堆箱子,一个月后办公室隔断还变了。如果地图永远不更新,机器人迟早会撞上未知障碍物。

很多人一上来就把传感器数据直接改静态地图,这其实是个危险的思路。静态地图是全局规划的基准,如果被临时遮挡物污染,全局路径会变得非常诡异,而且这种污染是累积性的,错了很难恢复。

lingbot-map对更新策略做了分层设计。静态图层保存长期稳定结构,比如墙面、柱子,这些数据来自建图阶段,日常运行时不轻易改动。动态图层保存短期变化,比如行人和搬运车,数据来自传感器实时扫描,这套数据和局部规划的代价地图融合,实现绕障。只有碰到真正的长期变化(比如某个区域被永久占用),才需要人工确认之后把变化合并到静态图层。

这个设计在项目里让我少踩了很多坑。以前的做法是把传感器直接写进一个全局地图,结果地面上一块反光的黑胶带都能被当成障碍物,全局路径每次都要绕开一个不存在的东西。分层之后,短时噪声只影响局部避障,不会污染长期规划,两个问题就解耦了。

3. 实操记录:把lingbot-map接进机器人导航栈

3.1 环境准备与依赖项

lingbot-map不依赖重型框架,但需要若干基础库支撑矩阵运算和图像处理,典型依赖是NumPy(栅格运算)、图像库(图片解码)、以及中间件客户端库(发布消息)这几个。

安装方式很简单,直接通过包管理器装上即可,然后验证一下导入是否成功:

pip install lingbot-map python -c "from lingbot_map import GridMap; print('ok')"

唯一要注意的是Python版本。某些图像库对最新版Python的预编译包支持滞后,建议用稳定的Python环境跑,省得到时候为个编译器折腾半天。

在机器人项目里,lingbot-map通常和应用进程跑在一起,比如作为一个节点或者服务,对外提供地图加载和查询接口。它不需要单独部署,也不需要独立进程,否则中间通信反而增加延迟。

3.2 地图生成与导入:从SLAM建图到yaml调参

拿到一张可用的地图,第一步是建图。通常做法是:做一个基础版地图生成工具,用激光雷达把环境扫描一遍,中间保持较低速度,特别留意回环位置——就是机器人回到原来走过的区域时,算法能不能把首尾对齐。很多时候建图效果不好,不是算法不行,而是人推着机器走的时候没走回环。

建图完成后,输出通常是PGM图片加YAML配置。以典型配置为例:

image: map.pgm resolution: 0.05 origin: [-10.0, -10.0, 0.0] negate: 0 occupied_thresh: 0.65 free_thresh: 0.25

这里resolution是每个像素对应的物理米数,0.05就代表一格子5厘米,这个值也是走一步遇到门、墙、柱子的最小宽度,生产项目中常用0.05。origin里前两个数字决定了地图原点放在世界坐标什么位置,第三个是偏航角。negate表示是否反转黑白含义,除非特殊需求,保持0。occupied_thresh和free_thresh用来区分占据和空闲。

拿到这份地图文件之后,用lingbot-map加载:

from lingbot_map import MapIO grid = MapIO.load_from_pgm("map.pgm", "map.yaml") print(grid.width, grid.height, grid.resolution) # 输出:例如 984 1024 0.05

这里有个很容易被忽略的点:载入地图后一定要确认宽高和分辨率算出来的物理尺寸,和真实环境尺寸对得上。比如宽高约1000像素、分辨率0.05,那地图覆盖范围就是接近50米,如果实际场地只有30米,说明地图配置有问题,趁早排查。

3.3 让路径规划用上map数据

地图加载完成只是第一步,关键是把它交给路径规划模块。在常见导航架构里,地图数据需要转换成中间件消息发布出来,导航模块订阅这个地图,同时在它之上叠加实时障碍物信息。

lingbot-map提供了一行接口把内部栅格转成消息格式:

from lingbot_map import MapIO import lingbot_map.msg as msg grid = MapIO.load_from_pgm("map.pgm", "map.yaml") map_msg = grid.to_occupancy_grid(frame_id="map") publisher.publish(map_msg)

发布频率不需要太高,静态地图反正常不变,启动时发一帧,后面只在确认地图更新后重新发布即可。如果每秒发几十遍,纯属浪费带宽和下游CPU。

地图发给导航模块之后,路径规划会同时维护静态图层和实时障碍图层。静态图层就来自上面的消息,实时障碍图层则订阅激光雷达数据。两边的数据融合在一起,就构成了规划器眼中的完整世界。

在这一步,我最想给的一个建议是:路径规划前,先把地图做一次裁剪。不需要把整个50mx50m的地图全都塞给高频规划的局部模块,只需把当前机器人和目标点周围的一小块区域切出来传下去就行。lingbot-map里直接有crop接口,剪完再发布,计算量能降一个量级。

4. 踩坑记录:地图模块常见的五个翻车现场

4.1 地图漂移与坐标翻转

症状:机器人明明站在走廊A点,地图上显示的障碍物却偏向右侧半米。后果:路径规划贴墙走、撞门、原地转圈,一连串连锁反应。

排查步骤我从后往前说。第一步检查TF变换(坐标变换树)是否通畅,特别是map到odom到base_link这条链路有没有节点在频繁跳变。如果定位算法发散,map到odom的变换会飘,这时候地图本身没问题,是定位问题。第二步检查地图配置里的origin,如果yaw不为0,但代码里没做旋转处理,地图整体就会偏一个角度。第三步检查像素坐标系和世界坐标系的y轴方向,图片的像素行号往下是增加,世界坐标系的y轴通常往上是增加,翻转关系错了,地图就是镜像的。

我遇到过最隐蔽的一次:建图时雷达安装偏了一个小角度,导致生成的PGM地图整体旋转,yaml里origin的yaw正好补偿了旋转。后来有人用另一个工具重新生成地图,yaw变成0,但雷达安装已经移位,结果对不上了。复盘之后得出的教训是:坐标系问题永远先排查TF,再排查配置,最后才该怀疑代码。

4.2 障碍物"穿墙"和地图残留

症状:局部规划明明看到前方有墙,但路径还是会穿过去,或者机器人走过去之后,地图上把刚才路过的地方标成了障碍物。

穿墙问题主要出在地图分辨率不够或者膨胀设置过大上。膨胀是给障碍物加安全层,如果膨胀半径超过走廊宽度的一半,算法会认为这条路完全堵死。但没有膨胀也不行,因为机器人有本体尺寸,紧贴障碍物规划很容易擦墙。

地图残留问题则是另一种情况:障碍物出现之后就不消失,地图上积累了越来越多的"幽灵墙"。原因多半是直接把传感器数据写进了静态地图,或者动态图层没有正确的清空机制。在lingbot-map里,动态图层有一个占有率衰减逻辑:一个栅格如果长时间没有新的传感器数据确认它被占据,占据概率会逐步回落。这个机制要靠正确的传感器扫描范围和遮挡计算来维护,不是简单设个定时器就行的。

4.3 多楼层与多地图切换

做巡检机器人、仓储机器人,最常遇到的是楼层或大区域切换。跑在一层好好的,切换到二层之后机器人直接"迷路"。

原因还是坐标系。每层楼应该有自己的地图坐标系ID,比如map_1f、map_2f,切换楼层时,导航模块要重新初始化代价地图,清空所有图层缓存,重新加载对应楼层的地图。如果代码里用的还是同一个坐标ID,两层楼的数据就会纠缠在一起,机器人以为自己在二层,地图却在用一层的墙。

lingbot-map的多地图管理接口里有一个switch_map方法,它会做三件事:重置内部地图指针、清空动态图层、刷新坐标变换关系。这个流程看起来简单,但是在实际现场部署时特别值钱,能省下不少调试时间。

4.4 内存与性能问题

地图大了之后,性能瓶颈不在地图存储本身,而在高频的代价地图更新和路径搜索。

1000x1000的栅格,每格一个字节,其实就1MB,不大。但如果你同时维护了静态、障碍、膨胀三个代价图层,每个图层还要在局部规划范围内做高频更新,开销立刻上来。再加上如果用Python写循环,一帧一帧地更新每一个栅格,CPU就热闹了。

lingbot-map的做法是只更新脏区域。栅格被改动时,把它的坐标记录到改区块里,更新完地图后,只把改区块涉及的图层重新计算,而不是全图遍历。举个例子:激光雷达一帧扫描可能只影响几千个栅格,如果只更新这几千个栅格和周边膨胀范围,计算量比全图更新小了不是一点半点。

另外,如果只是全局规划用地图,可以考虑降采样。分辨率从0.05降到0.1,栅格数量缩到四分之一,路径搜索结果差别不大,但速度明显更快。局部避障才需要高频、高分辨率的地图。

4.5 地图数据更新的正确姿势

很多团队最后都会遇到的问题:新地图生成之后,旧地图怎么办?要不要覆盖?什么时候覆盖?

我的建议是建立版本管理。每次建图导出的地图都带时间戳或版本号,命名类似main_20250112.pgm。lingbot-map加载新地图后,旧地图不急着删,保留备份,方便以后做回归对比。现场如果需要回滚,直接改一个配置路径就能切回旧地图,不用重新生成。

另外一个高频坑:建图时把临时堆放的杂物也扫进地图了。在正式交付前,最好人工检一遍地图,把明显的临时障碍物清理掉。这个工作可以在图像编辑器里直接擦除对应像素,再重新设置阈值,也可以调用lingbot-map的像素级修改接口,把特定区域标成空闲。

5. 实测心得与后续可以扩展的方向

5.1 两个实测中比较值钱的细节

第一,地图发布时机要克制。之前我把地图发布写在一个循环里,频率和传感器数据一样,导致下游模块CPU占用直接翻倍。后来改成只在启动和地图变更时发一帧,整体运行稳了很多。这种问题不实际跑起来很难有感触。

第二,膨胀参数一定要结合机器人尺寸调。我见过某团队用直径60cm的机器人,膨胀半径却设了0.8m,结果机器人过宽的地方全被判定不可达,绕路绕得怀疑人生。膨胀半径的合理起步值是机器人半径加5~10cm安全余量,然后根据现场测试微调。穿墙问题也是这里优先排查。

5.2 后续可以扩展:语义地图、动态图层与云端同步

lingbot-map目前还是以栅格地图为核心,但实际项目里已经有需求往语义方向走。比如给地图里的区域打上标签:会议室、走廊、工位、充电桩,这样导航和调度模块就能知道"去充电桩"对应哪个坐标,而不只是拿一个裸坐标点。

动态图层方面,我们已经验证了短期障碍物分层更新的有效性,下一步想让动态图层具备简单的轨迹预测能力。看到一个移动障碍物时,不只把它当前所在栅格标为占据,还能标一下它可能移动的方向,给局部规划多一点提前量。

云端同步也提上了日程。多台机器人共享一张地图的场景,目前是靠U盘或者手动拷贝地图文件。以后想做成地图增量上传下载、多机同时维护地图的模式。这些方向都还在验证阶段,但底层的量还算扎实,等真的跑通了再分享后续细节。

lingbot-map这个模块走到现在,最让我满意的不是功能有多全,而是把那些以前零散的地图处理逻辑收拢成了一层清晰接口。现在换传感器、换建图方式、换导航方案,地图这块基本不用大改。如果你也在做机器人项目,地图模块最好从第一天就独立出来,别和业务代码纠缠在一起,不然后面每一轮迭代都会在这里还债。

相关新闻

端侧AI推理实战:边缘计算与硬件落地的关键路径

端侧AI推理实战:边缘计算与硬件落地的关键路径

在端侧设备上跑AI推理,这件事放在三年前还得靠云端API撑场面,如今已经成了很多项目的默认选项。边缘计算与AI这组搭配,不是什么远景概念,而是新硬件时代里正在发生的现实转移。我最近把一个视觉识别项目从云服务器搬到了本地边缘设…

2026/10/21 4:55:58 阅读更多 →
MATLAB穷举搜索法:可调试的数值优化基准实现

MATLAB穷举搜索法:可调试的数值优化基准实现

简介:本资源是面向MATLAB初学者与优化算法学习者的穷举搜索法(Exhaustive Search)实践代码包,聚焦小规模确定性优化问题的求解原理与工程实现。资源包含1个核心MATLAB函数文件(Exhaustive.m)和1个开源许可说…

2026/10/21 4:55:58 阅读更多 →
ModbusTCP协议从入门到实战:报文解析与调试要点

ModbusTCP协议从入门到实战:报文解析与调试要点

1. 先搞清楚ModbusTCP到底是什么,别再和RTU混为一谈工控圈子里聊起Modbus,很多人第一反应是RS485那种两线制的串口总线,脑子里浮现的是那根黄色的屏蔽双绞线、两颗120欧姆的终端电阻,以及一长串用示波器才能看清的波形。但实际上&…

2026/10/21 4:55:58 阅读更多 →

最新新闻

代码托管平台访问慢?从DNS到资源加载的全链路优化指南

代码托管平台访问慢?从DNS到资源加载的全链路优化指南

1. 为什么打开代码托管平台会慢:先搞懂瓶颈在哪很多人一遇到页面转圈,第一反应就是“网不行”,然后开始重启路由器、切换网络,折腾半天发现该慢还是慢。我刚开始也这样,后来才意识到,打开这类海外代码托管平…

2026/10/21 5:28:10 阅读更多 →
PHP性能调优实战:Xdebug与QCacheGrind定位慢接口分析

PHP性能调优实战:Xdebug与QCacheGrind定位慢接口分析

做PHP开发这几年,我最大的体会是:性能问题不是靠猜,而是要靠数据说话。一个接口从20ms变成200ms,一行SQL的事;一个页面响应慢到让人抓狂,可能只是循环里不小心嵌套了一次查询。但难的不是修,而是…

2026/10/21 5:28:10 阅读更多 →
Agent零基础实操指南:用低代码搭一个能干的数字分身

Agent零基础实操指南:用低代码搭一个能干的数字分身

1. 为什么现在都在聊Agent?先搞清楚它到底解决了什么问题我接触过不少刚工作一两年的职场新人,也包括还在上学但已经开始实习的同学,大家挂在嘴边的一句话是:“事情太多太杂,精力不够用。”写周报、整理会议纪要、找文…

2026/10/21 5:28:10 阅读更多 →
ARM Linux嵌入式libiconv构建与字符集转换实战指南

ARM Linux嵌入式libiconv构建与字符集转换实战指南

简介:本资源是专为ARM架构Linux嵌入式系统定制的libiconv字符编码转换库,面向嵌入式开发工程师、交叉编译实践者及需在树莓派、ARM网关等设备上处理多语言文本(如UTF-8/GB2312/ASCII互转)的技术人员。资源通过arm-none-linux-gnue…

2026/10/21 5:28:10 阅读更多 →
降AI率有套路!3步把论文AIGC检测率从80%降到5%

降AI率有套路!3步把论文AIGC检测率从80%降到5%

又到交论文的季节了,后台收到好多私信,问的最多的就是“AI率太高怎么办”。说实话,我看到不少同学用AI辅助写完后,一检测,AI率直奔80%。这个数字确实吓人,但别慌,这题我能解。这篇就把我自己实操…

2026/10/21 5:28:10 阅读更多 →
在线字典学习MATLAB实现:稀疏编码与字典更新实战指南

在线字典学习MATLAB实现:稀疏编码与字典更新实战指南

简介:在线字典学习代码是一套基于MATLAB的机器学习实现资源,面向处理文本、音频等序列数据的开发者与研究者。代码演示了在线学习与字典学习的结合:通过逐样本或小批量方式更新模型参数,在节省内存的同时适应数据流场景&#xff0…

2026/10/21 5:27:10 阅读更多 →

日新闻

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

这段时间硬件圈和AI圈都在传一个事:AMD锐龙AI Max PRO 400系列把最高192GB统一内存搬进了PC形态的产品里,按宣传口径,本地跑320B参数的大家伙不再是纸面概念。我第一反应倒不是“内存真大”,而是这话背后的含金量——它把过去只能…

2026/10/21 0:00:11 阅读更多 →
AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

1. 从“封号重开”这个行为说起:用户到底在追求什么“封号重开”这四个字,放在任何产品语境里都带着一股决绝的味道。一个账号从零开始积累使用记录、调教偏好、沉淀工作流,背后是大量的时间和精力成本。正常情况下,没有人愿意主动…

2026/10/21 0:00:11 阅读更多 →
ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

1. 为什么在ROS里硬刚YOLOv3不是“炫技”,而是工程落地的必经之路我第一次在某高校机器人实验室看到那台搭载Jetson TX2的移动底盘原地打转、反复识别错垃圾桶时,就意识到:单纯跑通darknet_ros demo和真正让YOLOv3在ROS里“干活”&#xff0c…

2026/10/21 0:00:11 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/21 4:27:17 阅读更多 →

月新闻

我发现了一个新思路:用 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/20 10:02:08 阅读更多 →
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/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练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/20 9:50:45 阅读更多 →