news 2026/9/7 15:47:04

模块化家庭移动服务机器人“小明”的开发实践与硬件架构解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
模块化家庭移动服务机器人“小明”的开发实践与硬件架构解析

1. 项目整体设计与需求拆解

先把这个项目说清楚。我做的“小明”,本质是一台模块化家庭移动服务机器人,核心用途就三条:能在家里自动巡航,给手机、平板、无线耳机这些设备送电;能当一块会跑的屏幕,做追剧、视频通话、背景音乐播放;还能把家里的智能设备统一管起来,做一个移动的智能中枢。听起来像把三个产品揉在一起,但真正动手做之后你会发现,这三个能力在底层其实是共通的,都依赖于同一个移动平台和同一套供电、通信骨架。

这个想法的来源很直接。家里总有那么几个场景:手机没电了但人在沙发上懒得动;厨房做饭想听播客,固定音箱放在客厅够不着;卧室灯关了才发现忘了关客厅空调,还得摸黑走一趟。单独买充电底座、智能音箱、平板支架都能解决一部分问题,但每个方案都固定在一个物理位置,覆盖不了全屋。一台能移动的机器人可以同时解决这些分散的需求,这就是我把三个功能整合到一起的根本原因。

模块化是我在项目启动前就定下的硬约束。原因很简单,家庭服务机器人这种项目,如果一开始就把所有功能焊死在一个整体架构里,后期想加新模块或者单独升级某个部件会非常痛苦。我自己第一版就吃过这个亏,当时为了追求体积小,把所有电路板叠在一起,结果每次调试都得拆开八九颗螺丝。所以“小明”从一开始就按功能拆成五个可插拔的模块:移动底盘模块、充电服务模块、媒体交互模块、智能中枢模块、能源管理模块。每个模块都有标准化的物理接口和通信接口,换模块不需要动其他部分。

模块化还有一个容易忽略的好处是故障隔离。比如充电模块的高压部分出问题,不会影响到底盘控制;媒体模块的屏幕坏了,机器人照样能跑能充电。对家庭用户来说,这意味着坏了不用整机返修,直接换对应模块就能恢复使用。对开发者来说,这意味着可以并行调试多个子系统,开发效率高很多。

1.1 三个核心场景的需求分析

我把“小明”要覆盖的使用场景拆成三个典型的家庭时刻,每个场景对应一组明确的功能需求。

第一个场景是“随处补电”。家里成员躺在沙发、坐在书桌、窝在床上玩手机,电量告急时不想起身找充电器。这就要求机器人能自主导航到用户附近,并在一定距离内提供充电服务。最合理的方案是机器人携带电池模块和无线充电板,到达用户身边后,用户直接把手机放上去就能充电。考虑到有线充电效率更高的场景,我还加了两个USB-C输出口,支持65W PD快充,可以给平板、笔记本临时续命。

第二个场景是“流动媒体”。在厨房做饭时想看菜谱视频,在阳台浇花时想听播客,在客厅锻炼时想跟着屏幕做操。固定电视和音箱都覆盖不了这些角落。机器人带一块10.1寸的触摸屏,通过内置扬声器播放媒体内容,用户走到哪它跟到哪,屏幕始终保持在用户视线范围内。这个场景的关键指标是续航和静音性——屏幕亮着、扬声器响着,机器人如果每隔一小时就要回去充电,体验会很糟糕。

第三个场景是“随身中枢”。家庭智能设备越来越多,开关面板、App、语音助手各自的入口太分散。机器人作为中枢,把灯光、空调、窗帘、扫地机这些设备纳管,用户走到哪个房间,就可以通过机器人上的触屏或语音直接控制当前房间的设备。这个场景对通信稳定性和生态兼容性要求最高,不只要支持主流品牌的云接口,还要能通过红外、蓝牙Mesh这些方式覆盖老设备。

这三个场景不是简单的功能堆叠,它们之间存在协同:充电模块给用户设备送电的同时,机器人自身的能源管理系统也在运作;媒体模块播放内容时,底盘负责跟随和避障;智能中枢模块在待机时可以让机器人自动回到充电桩补充电能。整个系统像是把一个充电宝、一台平板和一个智能音箱装进了同一台移动底盘里,但要让它协同工作,远比三个设备拼在一起复杂得多。

1.2 为什么选择移动机器人的形态,而不是固定设备

在设计初期我其实纠结过替代方案。装一个带轮子的智能音箱听起来更简单,但底盘载重和电池容量不够,撑不起充电模块和大尺寸屏幕。做一台固定式智能家居中控台也不是不行,但无法覆盖全屋的随身影音和充电需求。“小明”的移动形态是这三个需求共同推出来的。

移动形态带来的设计挑战也很集中:功耗、重量、噪声和安全。功耗方面,屏幕、扬声器、底盘电机、主控板、传感器同时工作,瞬时电流会比较大,电池管理必须做冗余。重量方面,底盘和电池占了整机重量的大头,如果超过5公斤,日常搬动、越障、跌落风险都会增加。噪声方面,电机和风扇的噪音如果超过40分贝,在安静的客厅里会很明显。安全方面,机器人在家里自主移动,必须有可靠的避障和防跌落能力,否则撞到小孩或从楼梯上摔下去都是事故。

这些问题在后面的章节都会逐一展开,先说结论:移动形态是这三个功能的最优解之一,但它对机械结构、电源设计和软件调度提出了远高于固定设备的要求。如果你也打算做类似方向,前期一定不要把精力全放在酷炫的功能demo上,移动平台的稳定性和安全性才是地基。

2. 模块化硬件架构与关键选型

“小明”的硬件架构我按照功能边界拆成了五个模块,每个模块都有自己的主控或子控制系统,通过一根CAN总线和一根百兆以太网线互连。为什么用CAN而不全用以太网?因为底盘电机控制和传感器数据对实时性要求高,CAN在确定性和抗干扰方面更可靠,而以太网负责屏显、视频流、语音这类大数据量传输。两者结合,各干各擅长的活。

这种异构通信架构在消费级产品里不常见,但在机器人项目里很实用。底盘急停指令走CAN,延迟是毫秒级的;媒体流走以太网,带宽足够。如果所有通信都挤在Wi-Fi上,一旦网络抖动,底盘响应和视频流都会受影响。我的实际测试表明,采用独立总线后,即使在播放1080P视频的同时执行导航任务,两边互不干扰。

2.1 移动底盘模块:差速驱动与避障传感器布局

底盘是整台机器人的基础,我选了双轮差速驱动加两个万向轮的方案,前部两个驱动轮,前后各一个万向轮做支撑。为什么不用全向轮?全向轮在平整地面灵活性确实更强,可以实现平移和原地旋转,但对地面平整度很敏感,家里瓷砖缝隙、地垫边缘都可能造成打滑。差速轮结构简单、控制成熟,转向半径也可以做到很小,在家庭环境下够用且更稳定。

驱动电机选择上,我对比了直流减速电机和步进电机。直流减速电机带编码器反馈,支持闭环速度控制,在负载变化时能自动调整PWM,适合底盘这种需要平稳启停的场景。步进电机虽然定位精度高,但低速时扭矩波动大,在木地板上容易产生噪音,而且堵转时发热明显,最终没选。

底盘上的传感器布局是关键。我在前后各装了三个超声波传感器,覆盖正前方和斜前方120度的范围,用于中距离避障。在底盘正前方底部装了激光雷达,用于建图和定位。在四个角的位置安装了红外接近传感器,紧贴地面,用于检测楼梯和台阶边缘。这套组合里,最容易踩的坑是把所有传感器都放在同一块PCB上,互相干扰严重,后来我改成主控板统一供电、传感器单独滤波,问题才解决。

2.2 充电服务模块:有线与无线的组合方案

充电服务模块分两层。对外服务层,就是给用户设备充电的部分;对内服务层,是机器人自己找充电桩回充的部分。这两个概念非常容易混淆,很多初次设计的人把给用户充电的大电池直接当成机器人的主电源,结果用户充了几次电,机器人自己先趴窝了。

“小明”的做法是主副双电池架构。底盘和主控用的是一块12V/10Ah的磷酸铁锂电池,负责机器人的运动、传感器和核心计算。对外充电的是一块独立的12V/20Ah三元锂电池,通过一个DC-DC升压模块输出可调的5V/9V/12V/20V电压,兼容主流快充协议。两块电池之间加了一个智能切换开关,工况优先级是:用户充电优先 → 机器人自身行动次要 → 回充补电最后。如果用户用电需求大,机器人可以自动降低巡航速度,先保证充电服务的连续性。

无线充电板我选了Qi标准15W的方案,兼容市面主流手机。为什么不用更高功率的私有协议?因为私有协议适配成本高,而且线圈对准要求非常严格,机器人停靠位置稍微偏一点,充电效率就大打折扣。15W的Qi在容错性和通用性之间是个比较稳的平衡点。

2.3 媒体交互模块与智能中枢模块的硬件选型

媒体交互模块的核心是一块10.1寸的IPS触摸屏,分辨率1280x800,支持五点触控。我选它而不是更高分辨率的屏,原因是这块屏有一个关键的工业级特性——支持宽温工作,长时间运行不会因发热出现亮点或色偏。消费级平板屏幕在机器人这种密闭腔体里容易过热,这点很多DIY项目不会注意到。

屏幕背后挂了一个微型工控板,用四核ARM处理器,运行定制化的安卓系统,负责媒体播放、触控交互、视频通话和投屏接收。这块板接口齐全,有HDMI输入、USB-C、3.5mm音频输出,方便后期扩展摄像头和麦克风阵列。扬声器选的是两只3W全频单元加一个被动辐射器,低音比同体积的笔记本音箱好不少,放在厨房等嘈杂环境下音量也够。

智能中枢模块选用的是一块单独的Linux主控板,主要跑通信网关和自动化逻辑。它同时负责三件事:通过Wi-Fi接入家庭局域网,通过USB红外发射器控制老式空调、电视等红外设备,通过蓝牙Mesh网关接入智能灯泡、传感器等低功耗设备。所有设备状态汇总后通过MQTT协议统一上报,供App或语音助手调用。把中枢单独分离出来而不是塞进媒体模块,是为了保证网络通信故障时不影响媒体播放,反之亦然。

3. 三个核心能力的落地实现

硬件只是骨架,真正让“小明”好用的是软件和算法的协同。这一章按三个核心能力分别讲实现方案,会涉及一些具体参数和踩坑记录。

3.1 移动充电:自主导航到人的位置,再把电送过去

自主导航的流程可以分成三步:建图、定位、路径规划。

建图我用的是激光雷达加Gmapping算法,先在家庭环境里手动推着机器人走一圈,生成二维栅格地图。家里面积大概90平米,跑完一圈约需15分钟,生成的地图精度在5厘米以内,对于充电对接这类任务足够了。激光雷达选的是360度单线雷达,测距半径12米,在家庭环境里可以覆盖最大的客厅对角线。

定位用的是自适应蒙特卡洛定位,本质是通过粒子滤波估算机器人在已知地图中的位置和朝向。通俗讲,就是机器人在脑子里撒了几千个“假设自己在这里”的虚拟粒子,每走一步就用激光数据跟地图匹配一次,不对的粒子淘汰,剩下的粒子逐渐收敛到真实位置。这个过程对计算量要求不高,ARM主控板就能实时跑。

路径规划分两层:全局规划用A*算法,算出从当前位置到目标房间的路径;局部规划用动态窗口法,边走边避让突然出现的障碍物,比如地上的玩具、拖鞋、猫。我把机器人的最大移动速度限制在0.5米/秒,加速度平缓,这样既能保证效率,又不会在有人靠近时显得突兀。

到了用户身边后的对接过程,我踩了不少坑。最开始想得很简单,机器人停在用户沙发旁,用户把手机放到机器人顶部的无线充电板上就行。但实际使用时发现,沙发旁的空间往往局促,机器人很难正着停到用户伸手可及的位置。后来我加了一个“侧身”策略:机器人先以任意角度靠近,到达设定距离后原地旋转,把充电板朝向用户。这个策略在用户坐着的时候特别好用。

有线充电口的方案也有讲究。如果USB-C口在机器人侧面,用户找接口要低头弯腰;如果设计在顶部斜面,用户坐着就能看到并插拔。我最后把两个USB-C口放在屏幕上方的斜面处,旁边加了一个小的LED指示灯,充电状态一目了然。

3.2 媒体交互:跟随播放与语音控制

媒体模块的核心体验是“屏幕始终在用户旁边”。实现逻辑不复杂:机器人通过激光雷达和深度相机感知人的位置,然后保持一个理想的观看距离跟随。理想距离我设了1.2米,太近屏幕会显得压迫,太远看不清内容。跟随模式只在用户主动开启时才激活,避免一直粘着人造成困扰。

跟随的实现难点在运动平滑性。如果用最简单的“人动我动、人停我停”,机器人会像抽风一样一顿一顿地跟,体验很差。我加了一个一阶低通滤波器,对人的移动轨迹做平滑处理,再通过PID控制器控制底盘速度。经过调参后,机器人可以流畅地跟着人从客厅走到厨房,中间不会剧烈晃动屏幕。

媒体内容的接入方面,安卓子系统原生支持主流的投屏协议,手机视频App可以直接投屏到机器人的屏幕上,这在家庭场景中非常实用。我还预留了HDMI输入接口,可以接电视盒子或者游戏机,把机器人当成移动显示器用。声音输出上做了个小优化:检测到机器人在移动时,音量自动调低,防止电机噪声和媒体声音混在一起影响体验。这个细节花了一天时间调试,但用户反馈提升明显。

语音控制走的是远场麦克风阵列方案,四个麦克风成十字排列,配合波束成形算法,能在3米内识别语音指令。实际操作中发现,家庭环境的回声和背景噪音比实验室严重得多,需要做回声消除和噪音抑制。我调了两版才达到可用水平,第一版只做基础的信号处理,在厨房炒菜时唤醒率不到60%,第二版加了针对电机噪声的主动降噪模型,唤醒率提升到90%以上。

3.3 智能中枢:设备纳管与场景联动

智能中枢的软件架构选择用Home Assistant作为底层平台。它的生态兼容性极强,主流品牌的灯、空调、传感器都有现成组件。机器人的Linux主控板上跑Home Assistant,通过MQTT与媒体模块通信,通过红外和蓝牙Mesh覆盖非智能设备。

设备纳管的策略是“先红外后网络”。家里比较老的空调、电视、风扇没有网络接口,统一通过红外码库控制。我把常用设备的红外码录入系统,做好品牌匹配,使用时只需要在触屏上选择设备类型和品牌,系统自动发送对应码。这个过程比较耗时,但一次性做完后,日常使用很方便。

场景联动是中枢的高级功能。我设置了一个“回家模式”:通过人体传感器检测到有人进门后,机器人自动从充电桩驶向门口,屏幕上显示欢迎信息,同时通过红外打开客厅灯和空调。还有一个“追剧模式”:用户说“我要看电影”,机器人自动关闭主灯、调暗氛围灯、把屏幕切换到视频App。

因为机器人是移动的,它还能实现一个固定中枢做不到的功能——跟随用户跨房间联动。当用户从客厅走进卧室时,机器人检测到人员位置变化,自动把客厅的空调设为节能模式,打开卧室的灯,并在卧室门口待命。这个跨房间接力效果是我做这个项目时最想看到的结果,实际跑通的那一刻,确实觉得所有加班都值了。

4. 能源管理与软件调度

能源管理是整个系统最容易被低估的部分。一台移动机器人,如果自己都没电了,剩下的功能都是空谈。我单独把这一块拿出来讲,因为它决定了整机能不能稳定运行。

4.1 电池选型与功耗预算

整机电源系统采用双电池方案,前文提过主副电池的分工。这里给一个完整的功耗预算表,方便你对照自己的项目做估算:

模块典型功耗峰值功耗工作电压
底盘电机(双)8W24W12V
主控板(Linux)5W8W5V
媒体板(安卓)7W12W12V
屏幕背光4W6W12V
传感器组2.5W3W5V
语音阵列1W1.5W5V
对外充电模块(待机)0.5W30W+12V

常态巡航时,整机功耗稳定在约28W,两块电池合计可用容量约为360Wh,算下来理论续航在12小时左右。但实际使用中,屏幕亮度、电机启停、对外充电都会拉高功耗,我的实测续航约9-10小时。这个续航对家庭日常使用是够的,机器人可以在用户睡觉时自动回到充电桩补电,白天再出来工作。

对外充电模块的功耗弹性很大,给手机快充时峰值能吃到30W以上。这会影响整机续航,所以我在调度策略里做了限制:当机器人当前电量低于40%时,对外充电功率自动降到10W,优先保证机器人自身的返航能力。这个策略在UI里以“省电模式”的名称露出,用户可以手动关闭。

4.2 自动回充机制

自动回充是机器人的“保命技能”。当电量低于20%时,系统会取消所有非必要任务,启动返航流程。返航依赖充电桩上的红外信标,机器人通过传感器感知信标位置,从任意角度接近,最后以低速对接到充电触点上。

这个对接过程我调试了很久。最开始用的是纯视觉方案,通过充电桩上的二维码定位,但光照变化时识别不稳定。后来改成“红外广角引导+近距机械对准”的双段式:远距离靠红外信标指向,距离30厘米内切换为低速机械对准,利用充电桩上的V型导向槽让机器人自动滑入正确位置。这套方案在90%的情况下都能一次对准,失败时机器人会后退20厘米重试,最多重试3次。

4.3 任务调度与优先级

软件层面的调度策略直接决定了机器人的“情商”。我设计了一套简单的优先级调度器:安全类任务(避障、防跌落)始终最高优先级;其次是自身电量维护(回充);再往下是用户主动指令(导航、充电、播放);最后是自动化场景触发。

这种调度听上去简单,但在实际场景中需要处理很多边界情况。比如机器人在给用户手机充电的过程中,电量降到了回充阈值,这时候是中断充电回去回充,还是继续坚持到把用户手机充满?我的策略是:如果用户设备的电量低于30%,对外充电任务优先级临时提升,机器人会坚持到用户设备充到50%以上才启动回充。这个体验细节在用户调研时被多次提到,算是投入产出比很高的一项设计。

5. 常见问题与排查技巧实录

做这个项目的过程中,我记录了一批高频问题,很多问题在普通文档里根本查不到。整理成速查表,希望能帮你少走弯路。

5.1 导航与对接类问题

激光雷达建图出现重影或地图断裂,怎么解决?

这几乎是每个做机器人导航的人都会遇到的第一个问题。重影通常是因为机器人在建图过程中被推了一下,或者有移动物体(比如人、宠物)挡在激光路径上。解决办法:建图时清场,关闭扫地机等移动设备,家里有宠物的话先把宠物关在另一个房间。地图断裂一般出现在门槛或台阶处,激光雷达的扫描平面如果被台阶切断,地图会分成两段。解决办法是在建图时用遥控器低速通过门槛,或者手动编辑地图补上缺口。

无线充电板对不准,充电效率低怎么办?

Qi无线充电的线圈对准容差大概在正负5毫米以内,机器人停靠时稍微偏一点就会导致效率骤降。我在充电板周围加了一圈磁吸定位结构,手机放上去会被磁性引导到正确位置,一次放准的成功率从70%提升到接近100%。这个方法成本很低,效果明显,强烈推荐。

机器人回充对接总是失败,反复后退重试?

先检查充电桩的红外信标是否被遮挡,再检查充电触点有没有氧化。我遇到过多次对接失败后发现是充电桩位置被家里的扫地机挪动了,信标角度偏了几度。把充电桩固定好之后,问题就不再出现。如果触点上出现黑色氧化层,用橡皮擦擦拭即可修复。

5.2 系统与通信类问题

Wi-Fi信号不稳定导致中枢设备经常掉线?

家庭环境里2.4GHz频段干扰很严重,微波炉、蓝牙设备都会影响。我的做法是给中枢模块增加外置天线,并把机器人主控板优先连接5GHz频段的路由器。对于智能家居设备,很多老设备只支持2.4GHz,所以中枢模块上准备了两张网卡,一张连5GHz负责和App通信,一张连2.4GHz负责纳管老设备。

电机噪声干扰语音识别,唤醒率低?

这个问题的根源是电机PWM驱动产生的高频谐波通过电源线传导到麦克风电路。排查时用示波器看了麦克风供电引脚,发现上面叠加了一串12kHz的毛刺。解决办法:给麦克风供电加LC滤波器,同时在电机驱动端增加续流二极管和磁珠。处理后唤醒率有明显提升。

屏幕长时间运行出现亮点或闪屏?

这里有两条经验。第一,屏幕亮度不要长期设在100%,建议默认80%亮度,既省电又减少发热;第二,在媒体模块的散热设计上,我加了一个温和的机箱风扇,温度控制在45度以下后,屏幕点亮问题基本消失。如果你用的是工控板加普通消费屏,散热是必须考虑的。

5.3 安全与体验类问题

家里有小孩或宠物,机器人移动时有哪些风险?

机械伤害主要来自夹手和碰撞。我在机器人外侧贴了一圈硅胶防撞条,底盘的急停灵敏度调高,检测到5N以上的阻力就会立即停止。针对宠物,机器人顶部尽量不放置容易掉落的小物件,防止运行中坠落砸到宠物。另外,我把激光雷达的扫描频率从10Hz提到15Hz,对快速移动的小孩和宠物也能及时感知。

机器人在木地板上运行噪声大,怎么降噪?

噪声主要来自驱动轮的胎噪和电机齿轮的共振。我换了软性PU轮皮,同时在电机和底盘之间加了一层2毫米厚的橡胶减震垫,噪声从原来的45分贝降到35分贝左右。在夜深人静时,35分贝的噪声基本不会影响睡眠。

写在最后的一点经验

“小明”这个项目从概念到稳定运行,前后经历了三次比较大的迭代。第一次是底盘结构推倒重来,第二次是通信架构从单总线改成CAN加以太网混合,第三次是回充对接方案从视觉换成红外加机械导向。每次推翻重构都伴随着时间和成本的损失,但也让我对“模块化”这个概念有了更深刻的理解——真正的模块化不是硬件的可插拔这么简单,而是每个模块都能独立演进、独立测试、独立替换,在系统层面仍然保持稳定。

如果你也想做类似的家庭移动机器人项目,我的建议是先做减法,选择一个最核心的场景做到极致,再逐步叠加其他功能。“小明”之所以能同时承载充电、媒体和中枢三个功能,是因为移动平台这个基础足够稳。基础不牢,功能堆得再多也只是demo,不是产品。

最后分享一个小技巧:家庭机器人的测试阶段,不要只在理想环境下跑。把家里的椅子搬乱、在过道放个垃圾桶、把地面洒点水,模拟真实家庭成员的生活状态。很多问题只有在“乱”的环境里才会暴露出来。我实测下来,这比任何实验室测试都更有价值。

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

LeetCode 693:交替位二进制数的位运算判断技巧

1. 题目到底在问什么:交替位二进制数的本质刚看到“交替位二进制数”这个题名,很多朋友第一反应是“又要写一个判断函数”,但真正动手之后才发现,这题考的是对二进制位模式的理解和位运算的基本功。LeetCode 693 的要求很简单&…

作者头像 李华
网站建设 2026/9/7 15:44:42

OpenHarmony上Flutter跨端电子合同签署App的API集成实践

1. 项目概述与环境准备 搞电子合同签署App,选型时很多人第一反应是原生开发。但如果你接触过OpenHarmony的生态现状,就会明白Flutter跨端方案在这里的价值有多直接。过去半年我一直在折腾Flutter for OpenHarmony的落地项目,从环境搭建到API联…

作者头像 李华
网站建设 2026/9/7 15:44:33

【单片机毕设案例分享】基于 STM32 或 51 单片机的容量检测智能分类垃圾桶开发 基于 STM32 或 51 单片机的红外感应语音识别垃圾桶设计(025106)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于单片机,STM32单片机,51单片机,J…

作者头像 李华
网站建设 2026/9/7 15:43:12

港口淡水罐远程监控物联网系统方案:从硬件选型到平台搭建

港口淡水罐,听起来是个再传统不过的设施,但当我把它和物联网、远程监控这几个词放在一起时,事情就开始变得有意思了。港口每天要为靠泊船舶供应淡水,还要维持港区生活用水,水罐往往分布在码头前沿、堆场边缘甚至离岸引…

作者头像 李华
网站建设 2026/9/7 15:42:48

AI上下文测量:用问卷验证效度,恢复个体与群体效应

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

作者头像 李华