Stewart平台位置正反解:Matlab GUI实现与Newton迭代避坑指南
简介面向机器人运动学与控制研究的MATLAB程序包实现六自由度Stewart并联机构的位置正解与反解并附带GUI交互界面。程序的正解方法参考了基于代数消元法的学术论文适合相关专业学生、研究人员快速掌握并联机构建模与数值求解流程也可作为工作空间仿真的起点。压缩包仅16KB共6个文件以4个MATLAB脚本为主体分别承担坐标变换、正解、反解及主程序功能另有1个txt数据文件保存构型参数1个md文档说明用法结构紧凑便于阅读与修改。已有6742人学习浏览。通过该资源读者可以在图形界面中直观调整或观察平台位姿对照正反解结果加深对运动学方程的理解同时可复用脚本中的坐标变换与求解模块用于后续工作空间分析、轨迹规划或控制算法验证。1. Stewart平台的硬骨头位置正反解与Matlab GUI实现做并联机器人的人都有个共识反解是送分题正解是拦路虎。Stewart平台的反解一条公式走天下给定动平台位姿就能算出六根腿长正解却要反过来从六根腿长推位姿本质上是在解六个非线性方程初值稍歪迭代就发散甚至收敛到一个完全错误的装配态。这份资源就是把位置正反解和GUI界面打包好的Matlab程序反解做了完整的铰点坐标建模正解用了Newton迭代加初值保护策略界面支持直接输入位姿或腿长、实时刷新3D结构图。适合正在搞并联机器人控制、运动学标定、工作空间分析的人拿来当基座代码换结构参数、改铰点布局都能直接跑。2. 反解实现从坐标系约定到腿长公式落地2.1 动平台与静平台的铰点坐标约定反解的第一步是把平台几何说清楚。常见的设计是上下平台各有六个铰点沿圆周分布但工程上很少六等分往往采用「两两一组、组间隔120度、组内间隔30度」这类布局。代码里我用一个参数数组统一描述铰点角位置而不是写死60度等分。function [A, B] generate_hinge(ra, rb, phi_a, phi_b) % 生成动平台和静平台的铰点坐标 % ra: 动平台铰点分布半径, rb: 静平台铰点分布半径 % phi_a: 动平台相邻铰点夹角(rad), phi_b: 静平台相邻铰点夹角(rad) idx 0:5; % 每两个铰点一组, 组间间隔120度, 组内间隔phi_a theta_a (floor(idx/2) * 2*pi/3 mod(idx,2) * phi_a); theta_b (floor(idx/2) * 2*pi/3 mod(idx,2) * phi_b pi/6); A [ra*cos(theta_a), ra*sin(theta_a), zeros(6,1)]; % 动平台铰点, 6x3 B [rb*cos(theta_b), rb*sin(theta_b), zeros(6,1)]; % 静平台铰点, 6x3 end这段代码的关键在于用floor(idx/2)实现铰点分组每组两个铰点的夹角由phi_a控制组与组之间相隔120度。这里每组内相邻铰点的间隔通常是20度到90度要看具体机械结构。theta_b加了一个pi/6偏置这是为了让静平台铰点与动平台铰点在零位投影时错开避免六个支腿在初始位置发生干涉。2.2 反解公式推导每条腿就是两个点之间的空间矢量反解的几何逻辑很直接每条腿连接一个静平台铰点和一个动平台铰点腿长就是这两个点之间的欧氏距离。动平台铰点在空间中的位置需要经过旋转变换把动坐标系下的坐标映射到静坐标系。function L inv_kinematic(P, euler, A, B) % 反解: 根据动平台位姿求六根腿长 % P: 3x1 位置向量, euler: 1x3 [alpha, beta, gamma] 对应 R Rz*Ry*Rx alpha euler(1); beta euler(2); gamma euler(3); R rotz(gamma) * roty(beta) * rotx(alpha); % ZYX欧拉角旋转矩阵 T A; % 动平台铰点在动坐标系下的坐标, 3x6 % 将动平台铰点变换到静坐标系: P R * A_i A_world P R * T; % 3x6, 每列是一个铰点的世界坐标 delta A_world - B; % 3x6, 每条腿的矢量 L sqrt(sum(delta.^2, 1)); % 逐列求范数, 得到6x1腿长 end注意rotz、roty、rotx是 Matlab Robotics Toolbox 的函数如果没有这个工具箱需要手写旋转矩阵。一个很常见的坑是旋转顺序Z-Y-X欧拉角的矩阵乘法顺序必须是R Rz * Ry * Rx不能反过来。反解公式本身没有难点但坐标变换顺序错了腿长结果会非常离谱。2.3 反解验证零位姿势的几何校验程序写完后第一步先验证零位动平台在原点、姿态角全零时平台处于初始水平状态。拿一个具体结构参数代入把六根腿长打印出来看是否连续、对称。正常布局下零位六根腿长应该两两相等因为铰点分组是两两对称的如果出现三三两两的差异基本可以断定是铰点角度数组出了问题。params.ra 0.5; params.rb 0.6; params.phi_a deg2rad(30); params.phi_b deg2rad(20); [A, B] generate_hinge(params.ra, params.rb, params.phi_a, params.phi_b); L0 inv_kinematic([0;0;1.0], [0 0 0], A, B); disp(零位腿长:); disp(L0);输出结果应该是一个6x1的向量六个数两两接近。零位姿态下动平台高度完全由P(3)决定六根腿长的平均值应该约等于sqrt(1.0^2 分布半径差^2)这可以用勾股定理做手工交叉验证。验证通过后反解这一层就可以放心使用了。3. 正解核心Newton迭代、Jacobian数值差分与初值策略3.1 正解的数学本质为什么不能一步算到位正解和反解不是互逆的数学关系。反解是解析式从位姿到腿长是确定性的正解从腿长到位姿需要求解F(x) [L1(x) - L1_m, L2(x) - L2_m, ..., L6(x) - L6_m]^T 0其中x [px, py, pz, alpha, beta, gamma]是待求位姿L_i(x)是把当前猜测位姿代入反解函数得到的腿长L_i_m是实测腿长。这个六元非线性方程组没有解析解只能迭代逼近而且可能存在多个解——同一组腿长对应不同的装配构型这也是正解最折磨人的地方。3.2 Jacobian矩阵的数值差分实现Newton迭代需要Jacobian矩阵J其中J(i,j) dF_i/dx_j。解析求导的工作量很大角度的三角函数微分非常容易出错工程上更常用的做法是数值差分对每个变量加一个微小扰动重新计算反解用差分近似偏导。function J numerical_jacobian(x, A, B, L_measured) % 数值差分计算Jacobian矩阵 6x6 n length(x); % 6个变量 h 1e-6; % 差分步长, 平移和角度用同一尺度 F0 inv_kinematic(x(1:3), x(4:6), A, B) - L_measured; J zeros(6, n); for j 1:n x_plus x; x_plus(j) x_plus(j) h; F_plus inv_kinematic(x_plus(1:3), x_plus(4:6), A, B) - L_measured; J(:, j) (F_plus - F0) / h; end end差分步长h的选择有讲究。1e-6这个量级适用于位置和角度都按弧度制、量纲在0.1到1之间的场景。如果换成毫米作单位位置变量可能是50到200的量级步长要相应调整。一个快速判断方法是算完Jacobian后检查cond(J)条件数过大说明步长不合适或机构接近奇异位形。3.3 Newton迭代主循环与初值保护迭代公式本身很简单x_{k1} x_k - J \ F(x_k)。关键是不要用inv(J) * F在Matlab里用左除J \ F数值稳定性更好计算速度也快。正解的初值策略才是决定成败的地方常见做法是从零位姿态开始迭代同时给每一步的位移增量加一个上限避免一次跨过奇异区域。function [x_sol, iter, res_norm] fwd_kinematic(L_measured, x0, A, B) % 正解主函数: Newton迭代求解六自由度位姿 % x0: 6x1 初始猜测 [px py pz alpha beta gamma] x x0(:); max_iter 100; tol 1e-8; step_limit [0.05; 0.05; 0.05; 0.1; 0.1; 0.1]; % 位置(m)和角度(rad)的步长上限 for iter 1:max_iter F inv_kinematic(x(1:3), x(4:6), A, B) - L_measured; res_norm norm(F); if res_norm tol break; end J numerical_jacobian(x, A, B, L_measured); dx -J \ F; % 步长限幅保护, 防止迭代跳出有效范围 over_limit abs(dx) step_limit; dx(over_limit) sign(dx(over_limit)) .* step_limit(over_limit); x x dx; end x_sol x; end步长限幅step_limit是我在实际调试中加的保护措施。不加限幅时一次Newton步可能让角度从30度跳到200度Jacobian在那里的表现毫无意义。加上限幅后相当于一种阻尼机制虽然收敛变慢几拍但稳定性大幅提升。注意位置和角度的步长上限是不同量级的位置可以放到厘米级角度要控制在0.1弧度以内。4. GUI界面设计与数据流组织4.1 面板布局参数输入区、输出区与3D视图区GUI部分用Matlab GUIDE拖控件完成整体布局分三块。左侧面板放位姿输入框三个位置量Px Py Pz和三个角度量Rx Ry Rz右侧面板放六根腿长的输入框和输出标签中间一个大axes用于绘制平台三维结构。功能上两个核心按钮一个「反解」把位姿换算成腿长并刷新模型一个「正解」把腿长迭代出位姿并刷新模型。界面控件命名建议统一前缀输入框用edit_开头显示标签用text_开头按钮用btn_开头。这样回调函数里不容易混淆哪个控件是干什么的。4.2 回调函数中的数据处理链按钮回调的逻辑要清晰分层读取界面输入、调用核心算法函数、把结果显示回去、更新3D图。其中最容易出错的是单位转换——界面上角度应该显示为「度」而算法内部用「弧度」这个转换必须在回调层完成。function btn_inverse_Callback(hObject, eventdata, handles) % 反解按钮回调: 读位姿, 算腿长, 刷新图形 P [str2double(handles.edit_px.String); str2double(handles.edit_py.String); str2double(handles.edit_pz.String)]; euler_deg [str2double(handles.edit_rx.String); str2double(handles.edit_ry.String); str2double(handles.edit_rz.String)]; euler deg2rad(euler_deg); % 界面用度, 算法用弧度 L inv_kinematic(P, euler, handles.A, handles.B); handles.L L; set(handles.text_legs, String, num2str(L, %.4f)); % 输出到界面 update_plot(handles, P, euler); % 更新3D视图 guidata(hObject, handles); % 关键: 把handles写回 end这个回调最后一行的guidata(hObject, handles)是新手最容易漏掉的一步。在GUIDE里handles结构体是传给回调的临时副本如果不在末尾写回其他回调函数里就读不到你在本回调中修改的数据。比如正解回调想访问handles.L发现它还是上一次的旧值就会产生「界面数据看起来更新了但程序行为不变」的诡异问题。4.3 3D视图更新函数视图更新函数负责把平台的上下铰点、六根支腿画出来同时显示当前的动平台位姿。这个函数需要从handles中读取结构参数和当前位姿每次重画时先clc清空坐标区再绘制。function update_plot(handles, P, euler) % 绘制Stewart平台当前位姿 axes(handles.axes_platform); % 绑定到GUI的坐标区 cla; hold on; axis equal; grid on; A_world P rotz(euler(3)) * roty(euler(2)) * rotx(euler(1)) * handles.A; % 绘制静平台铰点 (红色圆) plot3(handles.B(:,1), handles.B(:,2), handles.B(:,3), ro, MarkerSize, 6); % 绘制动平台铰点 (蓝色方块) plot3(A_world(1,:), A_world(2,:), A_world(3,:), bs, MarkerSize, 6); % 连接六条腿 for i 1:6 line([handles.B(i,1), A_world(1,i)], ... [handles.B(i,2), A_world(2,i)], ... [handles.B(i,3), A_world(3,i)], Color, k); end view([30, 25]); % 设置观察视角 drawnow; end绘图函数的坐标转换和反解函数里是同一套公式这能保证「显示出来的姿态」和「算法算的位姿」一致。如果绘图时用了不同的旋转顺序会出现图形看起来转过30度但腿长数值对应的是另一个角度的错位。5. 常见问题与避坑记录5.1 旋转矩阵顺序错乱导致零位正确、转动后腿长乱跳现象零位姿态下反解腿长对称合理给一个绕X轴转30度的位姿输出的腿长和手工几何推算完全对不上。原因旋转矩阵用了R Rx * Ry * Rz的「先转Z再转Y再转X」顺序而代码里假设的是Z-Y-X外旋顺序。Matlab的rotx/roty/rotz序列相乘顺序不同结果完全不同。零位时三个角都是0任何顺序结果都一样所以零位能过转起来就翻车。解决在代码里写死一种约定并在注释里写明。我一般固定用R rotz(gamma) * roty(beta) * rotx(alpha)然后在反解和正解里都复用这个函数不重复手写旋转矩阵。5.2 正解迭代发散或收敛到NaN现象给定一组实测腿长Newton迭代残差先下降然后突然跳变到1e10甚至NaN或者残差一直下降但位姿很明显不对。原因初值离真实解太远Newton法局部收敛特性决定了它只在初值附近有效另一个可能是当前位姿接近奇异位形Jacobian矩阵条件数极差一步迭代就把解推到离谱位置。解决把零位姿态作为默认初值加上限幅保护见3.3节的step_limit检查cond(J)如果超过1e8改用Levenberg-Marquardt阻尼迭代。残差下降到1e-4以下但位姿仍不正常时多半是收敛到了另一个装配解需要换初始猜测重试。5.3 界面输入角度单位不一致现象GUI里输入30反解得到的结果和手算差异非常大。原因GUI标签写的是度str2double读进来后直接传给了deg2rad之前的算法函数等价于把30度当成30弧度算。差57.3倍腿长自然全部错误。解决回调函数入口处强制转换界面上所有角度输入框统一用度算法函数内部统一用弧度绝不混用。在代码里加一行注释提醒% angle_deg from GUI, convert once here。5.4 回调函数改了参数但程序没反应现象在GUI里修改了平台半径、铰点间距等参数后点击正解按钮输出结果和改之前一模一样。原因修改参数的回调里没有更新handles结构体或者没有用guidata写回。GUIDE的回调基于handles副本传递忘记写回等于改了白改。解决每次修改参数的回调末尾执行guidata(hObject, handles)。另外建议在参数修改回调里刷新一次3D视图立刻能看到结构变化避免带着旧参数算半天才发现问题。5.5 正解的迭代次数不够现象残差还在1e-5量级循环到100次迭代上限退出位姿精度达不到要求。原因步长限幅把收敛速度拖慢了特别是在接近稳态位置时每次限幅后的迭代步长过小。解决在残差小于1e-3后去掉限幅让最后一公里全速收敛。迭代上限从100改成200也不是不行但更建议动态调整前50次带限幅之后放开精度收敛。6. 进阶利用封装成可复用函数与工作空间快速分析把正反解的核心函数独立出来之后最有价值的应用是快速画工作空间。所谓工作空间就是在腿长极限范围内动平台所有可达位姿的集合。逐点扫描效率太低工程上常用蒙特卡洛方法随机生成大量位姿用反解判断每条腿是否在行程范围内。function points workspace_sampling(params, N) % 随机采样位姿, 用反解判断可达性 % N: 采样点数, 越大工作空间边界越清晰 points []; for k 1:N % 在合理范围内随机生成位置 (假设空间范围: 水平-0.3m, 高度0.6~1.4m) P [randn(1)*0.15, randn(1)*0.15, 0.9 randn(1)*0.2]; % 随机姿态角控制在-15度 euler randn(1,3) * deg2rad(5); L inv_kinematic(P, euler, params.A, params.B); if all(L params.L_min L params.L_max) points [points; P]; % 该位置可达 end end end采样数量建议从5000点起步低于这个数量边界噪声太大。randn生成的是高斯分布中心密集、边缘稀疏如果想均匀覆盖工作空间边界改用rand更好。我一般先用均匀分布粗扫一遍确定大致范围再缩小采样区间做精细扫描两层配合比一次性大样本高效得多。采样完成后用scatter3(points(:,1), points(:,2), points(:,3), 1, b, .)画出来就能看到一个近似工作空间的点云。这个分析的价值在于在机械设计阶段就能判断给定的腿长行程是否满足末端操作空间需求不用等样机装完再测。如果点云在某个方向明显缺失说明那个方向的铰点布置或行程分配有缺陷。还有一个实用技巧把采样得到的可达位姿反算一遍腿长用这些数据反推实际所需的腿长范围下限和上限可以直接用作电缸或液压缸选型的依据。这个过程零成本比凭经验估行程靠谱得多。我从那以后每次拿到新的并联平台结构参数都会强制走一遍「零位反解验证 → 正解对拍 → 工作空间采样」这个流程。正解对拍是指随机生成位姿算腿长再用正解从腿长还原位姿看误差是否在1e-6以内。这个闭环能一次性把坐标变换、旋转顺序、单位转换的坑全部排查干净。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

CentOS 7 用 yum 安装 Smokeping:网络质量监测与 RRD 曲线搭建实战

CentOS 7 用 yum 安装 Smokeping:网络质量监测与 RRD 曲线搭建实战

简介:一份面向 Linux 运维与网络管理人员的 CentOS 7 安装 Smokeping 简明操作手册。手册将零散的安装步骤整理为可依序执行的完整流程,重点解决 yum 安装时可能缺少 epel 源、配置文件 /etc/smokeping/config 参数含义不清、启动 smokeping 与 httpd 服…

2026/10/16 16:21:10 阅读更多 →
Torque3D脚本实战指南:从启动链到schedule心跳的硬核避坑手册

Torque3D脚本实战指南:从启动链到schedule心跳的硬核避坑手册

简介:本资源是面向游戏开发初学者与中级程序员的Torque3D引擎核心学习文档,聚焦引擎架构理解、脚本开发与框架实践,有效解决入门门槛高、官方文档零散、中文参考资料匮乏等痛点。压缩包为单个442KB的Word文档(.doc)&am…

2026/10/16 16:21:10 阅读更多 →
DPDK性能优化全解析:从轮询机制到NUMA与Cache调优

DPDK性能优化全解析:从轮询机制到NUMA与Cache调优

简介:这份读书笔记基于《深入浅出DPDK》整理而成,面向网络工程师、DPDK入门者以及性能优化人员,系统梳理了高速网络I/O框架的核心原理与实践要点,内容覆盖基础概念、网络编程、虚拟化与NFV等主题。笔记从传统网卡中断驱动方式的开…

2026/10/16 16:21:10 阅读更多 →

最新新闻

自动复制拷贝文件小工具:基于Python的定时增量同步实践

自动复制拷贝文件小工具:基于Python的定时增量同步实践

简介:这款自动复制拷贝文件小工具面向需要定期同步、备份或更新目录内容的普通用户与开发者,采用C#编写,可监控源目录并按设定逻辑自动复制、替换目标位置文件,同时处理多个文件,节省大量手动操作时间。压缩包共29个文…

2026/10/16 16:56:51 阅读更多 →
数据中心能耗优化:基于DQN深度强化学习的电力-热力-算力协同调度

数据中心能耗优化:基于DQN深度强化学习的电力-热力-算力协同调度

数据中心最让人头疼的,不是服务器吞吐量,而是电费账单和散热压力。IT设备要用电,制冷系统更要用电,而算力任务怎么分配,又会反过来决定两部分能耗和发热量——这一个循环里同时牵涉电力、热力、算力三个维度&#xff0…

2026/10/16 16:56:51 阅读更多 →
自部署轻量运维工具XinServer:定时任务、探活与告警一体化实践

自部署轻量运维工具XinServer:定时任务、探活与告警一体化实践

最近大半年,我工作的状态终于不像前两年那么狼狈了。以前每天早上第一件事是打开十来个后台地址,挨个看接口通不通、任务跑没跑、报警有没有漏,一早上就这么没了。后面我把手头最耗时、最重复的那批服务器操作全部收拢到一个叫 XinServer 的自…

2026/10/16 16:56:51 阅读更多 →
工业AI质检方案全拆解:云边端架构与零样本冷启动实战

工业AI质检方案全拆解:云边端架构与零样本冷启动实战

简介:这份PDF资料聚焦百度智能云联合英特尔打造的工业智能质检方案,面向制造业数字化转型从业者、工业视觉算法工程师及关注AI落地场景的技术管理者。内容围绕工业质检中标准严苛碎片化、边缘部署受限、未知缺陷识别难、少样本冷启动及高精度语义分割不足…

2026/10/16 16:56:51 阅读更多 →
博图V15.1单步六层电梯PLC程序框架与调试详解

博图V15.1单步六层电梯PLC程序框架与调试详解

简介:基于博图V15.1开发的单步六层电梯控制程序,面向PLC自动化学习者与现场调试人员,覆盖复位、启动、多层顺次响应、反向呼叫无效、每层4秒运行与4秒停留等控制逻辑,层次完整,适合作为中高级编程练习或教学案例。资源…

2026/10/16 16:56:51 阅读更多 →
Flink集群启动流程全解析:从脚本到进程的排查指南

Flink集群启动流程全解析:从脚本到进程的排查指南

在分布式计算里,Flink 的集群启动流程一直是很多入门者绕不过去的坎。每次写完 WordCount 想丢到集群上跑,第一反应就是执行 start-cluster.sh,然后 Web UI 起不来,或者 TaskManager 老是连不上 JobManager,日志刷得密…

2026/10/16 16:55:50 阅读更多 →

日新闻

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

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

2026/10/16 0:00:05 阅读更多 →
信号与系统频域分析作业解题指南

信号与系统频域分析作业解题指南

1. 作业背景与核心要求解析信号与系统作为电子信息类专业的核心基础课,其作业设计往往直接关联课程的核心知识框架。2026年春季第六次作业的布置,通常对应着课程进展到频域分析的关键阶段。根据常规教学进度推测,本次作业可能涉及以下核心内容…

2026/10/16 0:00:05 阅读更多 →
Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

1. 从一个"四不像"的练手项目说起如果你已经看完了Django的官方教程前几章,跟着敲完了投票应用,大概会有一种"我好像会了,又好像什么都不会"的割裂感。教程里每个知识点都是拆开的——这一章讲模型,下一章讲视…

2026/10/16 0:00:05 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/15 16:18:54 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/15 19:41:51 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 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/15 0:14:36 阅读更多 →
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/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练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/16 14:23:36 阅读更多 →