尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
MATLAB GNSS单点定位:从伪距解算到坐标输出的完整实现与避坑指南
简介MATLAB实现的GNSS单点定位程序面向测绘、卫星导航及相关专业学生与研究者从RINEX观测数据与sp3精密星历出发完整演示信号仿真、伪距测量、钟差改正、电离层与对流层延迟修正以及基于最小二乘的三维坐标解算流程适合课程设计、毕业设计或科研入门。压缩包共10个文件、约1.3MB包括6个功能划分明确的m脚本、2个mat数据文件、1个18o观测文件和1个sp3星历文件m脚本依次对应数据读取、时间转换、卫星坐标计算、伪距测量、误差校正与定位解算等关键环节并配可视化脚本便于观察结果。2个mat文件可直接作为中间数据使用18o与sp3则还原了真实观测场景便于对照检查每个步骤的输入输出。整个程序模块化程度高既可整体运行也可逐段调用还可为载波相位测量、RTK或PPP等进阶方向提供扩展基础。资源已有2432人学习适合正在学习GNSS定位原理并希望动手实践的用户。1. MATLAB GNSS单点定位程序解的是什么一段伪距到一组坐标MATLAB GNSS单点定位程序听起来像是把教科书里的伪距方程抄进脚本就能出坐标的事真正上手你会遇到一堆说不清的黑匣子同一份观测文件换个初始值就发散星历参数看着都读对了算出来的卫星位置却偏了几十公里程序报收敛高程却是负数。这个标题下的核心工作是用一台普通接收机的伪距观测值和广播星历通过最小二乘迭代解出接收机在地心地固系ECEF下的三维坐标。它不依赖差分基准站不需要精密星历和网络服务适合用于个人静态定位验证、低成本接收机的后处理以及做定位算法教学演示。整套程序的落地路径可以拆成四个环节读数据、算卫星位置、组建观测方程、迭代解算。每拆一个环节都会遇到一些参数细节这是值得投入的方向因为它是所有GNSS定位算法的骨架。2. 单点定位的理论骨架伪距方程、最小二乘与解算器选型2.1 伪距观测方程为什么四颗卫星能解四个未知数单点定位的数学基础是伪距观测方程。接收机输出的伪距不是卫星到接收机的真实几何距离而是信号发射时刻与接收时刻之差乘以光速里面混着接收机钟差、卫星钟差、电离层延迟、对流层延迟和噪声。如果忽略大气项第j颗卫星的伪距可以写成ρ_j ‖r_j − r_u‖ c·δt_u − c·δt_j ε_j其中r_j是接收机在信号发射时刻算出的卫星位置r_u是接收机位置δt_u是接收机钟差δt_j是卫星钟差ε_j是未建模误差。未知数有四个接收机位置三个分量加上接收机钟差。这也是“四颗卫星能定位”这句话的来源——方程数等于未知数时系统才有唯一解。实际解算不会直接解这个非线性方程而是先给接收机位置和钟差一个初始值把方程对未知数做一阶泰勒展开得到一个线性化的误差方程。观测值和初始值之差的残差是设计矩阵和未知数增量的线性组合。迭代的思路就是用最小二乘求出增量的近似解更新初值再重新线性化直到增量足够小。值得注意的是方程里c·δt_j必须提前扣除。广播星历给出的卫星钟差参数af0、af1、af2就是用来算这个值的。很多人第一版程序写完后定位结果始终偏大检查半天发现是没扣卫星钟差或者把卫星钟差方向扣反了。钟差是几米到几十米量级的误差远大于其他噪声这一步做错后面所有修正都白做。2.2 最小二乘还是卡尔曼滤波静态单点定位的选型逻辑有了方程之后第一个选型问题就是用最小二乘还是卡尔曼滤波。我的判断标准很简单——你的载体动没动。如果接收机放在一个固定点上做后处理最小二乘是首选。它不依赖运动学模型每次历元独立解算故障定位容易代码实现只有十几行矩阵运算且对初学者友好度高收敛过程可以打印出来每一步增量是可见的一旦发散可以直接观察残差和设计矩阵。卡尔曼滤波更适合动态导航场景比如车、船、无人机上的实时定位需要对位置和速度做递推估计并用过程噪声约束位置变化。在静态单点定位里贸然上滤波会引入两个额外麻烦状态初值设定对结果的影响被时间放大滤波发散时很难判断是观测质量问题还是模型参数不合理。很多人在学习阶段跳过最小二乘直接写滤波默认得到一个看起来更高级的程序实际是给自己挖坑。把最小二乘跑通厘清观测方程和残差的关系之后再移植到卡尔曼框架中效率高得多。3. 在MATLAB里跑通最小闭环RINEX读取到坐标输出的完整链路3.1 解析RINEX观测文件与广播星历新手最容易翻车的入口我见过不少实现定位解算部分写得规规矩矩最后坐标却差了几十公里问题基本都出在RINEX解析上。RINEX是GNSS观测数据和广播星历的标准文本格式文件是固定列宽的纯文本里面每个字段占几个字符是有明确规定的。新手常翻车的地方是用空格分割整行文本一旦卫星编号位数变化或数据字段为空后续字段全部错位。稳定的做法是读整行后对每一行按字符列进行切片解析。下面这段代码用来从观测文件O文件中提取观测历元及各卫星的C1码伪距以RINEX 2.11版本为例function obs readRinexObs(filename) fid fopen(filename, r); obs struct(tow, [], svid, [], pr, []); line fgetl(fid); obsN 0; while ischar(line) if contains(line, END OF HEADER) break; end line fgetl(fid); end while ischar(line) if length(line) 32 contains(line(1:3), ) % 历元行格式为 YY MM DD HH MM SS year str2double(line(1:2)) 2000; month str2double(line(4:5)); day str2double(line(7:8)); hour str2double(line(10:11)); min str2double(line(13:14)); sec str2double(line(16:17)); tow days(gpsEpoch2datetime(year,month,day,hour,min,sec)) * 86400; svCount str2double(line(30:32)); idx 0; while idx svCount svline fgetl(fid); for k 1:12 svidStr svline((k-1)*31 : k*3); if ~isempty(strtrim(svidStr)) idx idx 1; % 读取后续观测值行取第一个伪距字段 obsline fgetl(fid); pr str2double(obsline(1:14)); obsN obsN 1; obs.tow(obsN) tow; obs.svid(obsN) str2double(svidStr); obs.pr(obsN) pr; end end end end line fgetl(fid); end fclose(fid); end这段代码的关键在历元行解析和观测值字段的位置。RINEX 2.11的历元行里卫星编号是12个三字符的定宽字段观测值行里每个观测字段占14个字符前两位标识观测类型。逻辑上先按三字符切片提取卫星编号再对每颗卫星读取对应的伪距观测值。代码里使用固定列位置str2double解析比split方法可靠得多。另外要特别说明gpsEpoch2datetime这个辅助函数它负责把RINEX的年月日时分秒转换成GPS周内秒。这一步容易被忽视但它是后续星历历元对齐的关键。观测时间与广播星历的参考时间之间可能存在数小时的差值如果直接把两者的秒数相减来算星历参数外推得到的卫星位置会出现公里级的偏差。3.2 最小二乘迭代求解从初始值到收敛的MATLAB代码拿到伪距和卫星位置之后就可以进入最小二乘迭代。下面这段代码是可运行的最小实现输入为卫星位置矩阵satPos3×NECEF坐标观测伪距pr1×N已经扣除了卫星钟差项输出为接收机位置pos和接收机钟差cdt。function [pos, cdt] lsSolver(satPos, pr) % 卫星位置和伪距的单位都是米 % 初始化取可见卫星位置的平均值作为粗略初始位置 pos mean(satPos, 2); cdt 0; maxIter 15; threshold 1e-4; for iter 1:maxIter % 计算几何距离 rho sqrt(sum((satPos - pos).^2, 1)); % 构造设计矩阵H和残差向量b % b 观测伪距 - 几何距离 - 接收机钟差 b pr - rho - cdt; H [-(satPos - pos) ./ rho, ones(size(pr))]; % 最小二乘求解增量 dx (H * H) \ (H * b); % 更新位置和钟差 pos pos dx(1:3); cdt cdt dx(4); % 收敛判断只看位置增量范数 if norm(dx(1:3)) threshold break; end end if norm(dx(1:3)) threshold warning(未收敛到设定阈值最终位置增量范数:%g, norm(dx(1:3))); end end这段代码里有几个细节值得留意。设计矩阵H的最后一列是1对应接收机钟差未知数。残差b的计算中几何距离rho是基于当前估计位置算出的观测伪距pr已经扣除了卫星钟差所以b里面只剩接收机钟差和未建模误差。最小二乘解算用的是 (H·H)⁻¹·H·b这一步在MATLAB里也可以写成 H\b数值稳定性更好。收敛判断只取位置增量的范数不看残差平方和。原因很简单残差小不一定代表收敛到正确位置可能只是初始位置在错误区域进入了一个局部极小点。位置增量范数小于1e-4米说明位置估计已经稳定再迭代下去变化也不会超过毫米量级。最大迭代次数设15次正常静态定位三到五次就能收敛如果超过10次还在跳动优先检查数据而不是改阈值。阈值本身不建议设到1e-6以下因为伪距噪声在米级把位置增量压到亚微米没有意义只会在最后几次迭代里空转。4. 把误差从几十米压到几米卫星位置计算、大气修正与GDOP选星4.1 广播星历计算卫星位置开普勒根数解算的三步走伪距解算式子里的r_j必须是信号发射时刻对应的时间点上的卫星坐标。广播星历给出的是一组开普勒轨道根数需要按标准步骤外推。三步走第一步算平均角速度和偏近点角第二步算真近点角与升交角距第三步做地球自转修正。下面是广播星历参数求解卫星ECEF坐标的核心函数骨架参数来自RINEX导航文件N文件function satEcef calcSatPos(eph, tk) % eph为结构体包含广播星历根数 % tk为相对于星历参考时刻的观测时间差单位秒 mu 3.986005e14; we 7.2921151467e-5; a eph.sqrtA^2; n0 sqrt(mu / a^3); n n0 eph.dn; Mk eph.M0 n * tk; E Mk; for i 1:10 E Mk eph.e * sin(E); end % 真近点角和升交角距 nu atan2(sqrt(1 - eph.e^2) * sin(E), cos(E) - eph.e); phi nu eph.omega; % 摄动修正 u phi eph.Cus * sin(2*phi) eph.Cuc * cos(2*phi); r a * (1 - eph.e * cos(E)) eph.Crc * cos(2*phi) eph.Crs * sin(2*phi); i eph.i0 eph.idot * tk eph.Cic * cos(2*phi) eph.Cis * sin(2*phi); % 升交点经度修正 Omega eph.OMEGA0 (eph.OMEGAdot - we) * tk - we * eph.toe; x1 r * cos(u); y1 r * sin(u); satEcef [x1 * cos(Omega) - y1 * cos(i) * sin(Omega); x1 * sin(Omega) y1 * cos(i) * cos(Omega); y1 * sin(i)]; end偏近点角E的求解用的是牛顿-拉弗森迭代的简化形式取初值M后迭代10次。e0.02的轨道上10次迭代足够把E的误差压到1e-9弧度以下。注意atan2和atan的区别atan2保留了象限信息避免真近点角计算出现象限错误。tk的正负号也是高频错误点。tk是观测时刻减星历参考时刻即tk t - toe。如果写成反向卫星位置会沿轨道跑偏一大截。刚才代码里Omega修正项的-tk符号尤其要小心它同时包含了地球自转和星历参考时刻的折算。4.2 必做与选做的修正项一份优先级排序表在伪距方程里修正项按影响幅度排序优先级从高到低如下表。做程序时先保证前两项正确再考虑后续精度提升不要一上来就把所有模型全部堆进去否则排查问题时分不清是哪一项导致偏差。修正/处理项是否必做量级影响实现要点卫星钟差扣除必做数米至数十米用af0/af1/af2代入多项式地球自转修正必做最坏约30米量级用信号传播时延旋转卫星坐标观测时间与星历历元对齐必做公里级星历外推错误时统一用GPS周内秒比较tk对流层改正选做天顶方向约2米低仰角更大Saastamoinen或Hopfield模型电离层改正单频选做白天可达10至20米Klobuchar模型需导航电文参数多路径与低仰角剔除项目相关视环境而定仰角低于10度时剔除观测值地球自转修正的实现很简单传播时间 τ 几何距离 / c然后对卫星坐标做一次绕Z轴的微小旋转。距离约2万公里时传播时间约为70毫秒地球转过约0.0005度体现在距离上接近30米。如果在定位程序里漏掉这一项最终坐标会在经度方向系统性偏大而且所有历元都偏同一个方向不好发现。对流层和电离层模型在静态短时段采集中一部分误差会被接收机钟差吸收这也是跑通最小可用版本可以暂时不加大气模型的底气。追求精度到亚米级时再回来补这两项。4.3 GDOP选星用遍历加最小几何精度因子降维解算可见卫星多于四颗时可以选择参与解算的卫星组合。几何精度因子GDOP衡量的是卫星几何构型对定位误差的放大倍数GDOP越小同样的伪距噪声下定位精度越高。遍历所有四星组合取GDOP最小的一组参与最小二乘是最直接的做法。function bestIdx selectByGDOP(satPos, pr) N size(satPos, 2); combs nchoosek(1:N, 4); bestGdop inf; bestIdx 1:4; for k 1:size(combs, 1) idx combs(k, :); % 用当前组合的卫星位置计算GDOP rho sqrt(sum((satPos(:, idx) - mean(satPos(:, idx), 2)).^2, 1)); H [-(satPos(:, idx) - mean(satPos(:, idx), 2)) ./ rho, ones(4,1)]; gdop sqrt(trace(inv(H * H))); if gdop bestGdop bestGdop gdop; bestIdx idx; end end end当可见卫星数量为8到10颗时nchoosek(1:N,4)产生的组合数在70到210之间遍历开销极小。卫星数量超过12颗时组合数会增长到495仍然可以秒级完成。值得注意的边界是当某颗卫星仰角过低H矩阵的列向量接近线性相关GDOP会被夸大甚至出现矩阵奇异。所以选星前应先按仰角做一次粗筛把低于10度的卫星剔除再做遍历选星。GDOP选星和最小二乘解算的前后衔接顺序是先用每颗星的粗略位置计算仰角剔除低仰角星再遍历组合选出GDOP最小的四颗最后用这个组合做第3章的迭代解算。很多实现把选星和解算混在同一轮循环里每次迭代都重新选星导致选星结果不稳定定位结果在各历元之间跳变。正确做法是每个历元固定选星结果只把选星结果用于整个解算过程。5. 单点定位避坑实录发散、负高程与数据错位的5个排查方向5.1 迭代发散且残差不大先查星历历元对齐现象程序跑起来以后位置增量先变小又变大或者干脆震荡但打印出的残差始终保持在几十米水平看起来没那么糟糕。原因最常见的是观测时间和广播星历的参考时间没有对齐。某个导航文件的星历参考时刻是这组数据发布的时间而观测文件的时间是实际接收信号的时刻两者若相差数小时开普勒根数外推出来的卫星位置会偏出真实轨道几个公里甚至几十公里。伪距方程里这种误差混入几何距离项会让迭代在错误的梯度方向上反复试探。解决第一步把所有时间都换算成GPS周内秒别用年月日时分秒直接相减。第二步检查每颗卫星的tk值是否落在±2小时范围内。超出这个范围的星历直接丢弃不要参与解算。第三步打印前几次迭代的几何距离和观测伪距如果系统性偏差在公里级优先怀疑星历历元对齐而不是怀疑最小二乘算法本身。5.2 高程为负但程序显示收敛检查初始值与高斯-牛顿的局部解现象迭代明明收敛了位置增量小于阈值输出的高程却是一个明显不合理的负数比如海平面以下几百米。对于平原地区的测试数据这个结果一眼就觉得不对。原因最小二乘本质上是高斯-牛顿法的迭代对初始值敏感。当初始位置偏离真实值过远或者卫星几何构型不佳时算法可能收敛到残差平方和的局部极小点而不是全局最优。另一种常见原因是高程约束缺失伪距方程对高程方向的约束本来就弱若初始高程给了很大的正数迭代过程可能直接翻到负高程区域。解决不要用地球中心作为初始值。如果手头有文件头部的近似坐标就用它没有的话用可见卫星位置的平均值作为初始位置这样至少能保证初始高程在合理范围内。收敛后加一道有效性检查把ECEF坐标转成大地坐标查看高程是否落在合理区间比如-100米到8000米超出范围就打标记而不是直接采用。5.3 同一份数据换台电脑结果偏几米RINEX解析里的文本陷阱现象在Windows上跑程序得到一组坐标把同样的RINEX文件拷到Linux或者macOS上跑结果差了数米甚至几十米。代码没改过数据也没改过。原因RINEX文件的行尾在Windows下是\r\n在类Unix系统下是\n。用readline类函数读取时如果解析逻辑把\r当成了某个数字字段的一部分或者按字符串直接操作行内容就会把最后一位数字污染。另一个更隐蔽的原因是解析时用了按空格分割的方式而RINEX本身是固定列宽格式空字段会导致分割后的数组长度不稳定字段错位。解决解析前统一做一次文本清理把行尾的\r去掉。读取每一行后用fgetl天然会去掉换行符但Windows文件在Linux下用fgetl时\r会残留在行尾所以在进入解析函数前先替换。最稳妥的方式是line strrep(fgetl(fid), char(13), );。同时把按空格split改成按固定列切片两个方向都做问题就彻底消失。这是一条血泪经验跨平台之前先把文本行尾处理掉。5.4 GDOP很低而精度无提升几何精度不能补偿伪距噪声现象选星逻辑加到程序里后GDOP从15降到3看起来颗颗卫星构型都很好但定位结果相比之前没有明显改善误差还是那么大。原因GDOP只描述了误差放大的几何因子它乘上伪距误差后才决定最终定位误差。如果伪距本身受多路径和大气延迟污染严重真实误差源很大即便GDOP很小最终定位精度也不会有质的提升。更常见的是选星后剩下的四颗卫星集中在同一方位高低仰角分布失衡GDOP计算值偏低但实际由于大气映射误差呈现系统倾向结果反而不稳定。解决不要只打印GDOP数值把每次解算后的残差RMS一起输出观察残差和GDOP的组合。如果残差RMS很大说明伪距质量差先去解决多路径和低仰角卫星剔除问题。把仰角低于10度的星无条件剔除再加上对流层改正通常比单纯压GDOP更有效。GDOP只是一个辅助参考不是优化目标本身。5.5 接收机钟差初值给零导致卡解给钟差留出毫秒级搜索空间现象位置解算收敛但每次迭代中钟差更新都往一个方向缓慢挪动迭代次数用完还没稳定。把初始钟差从0改成某个固定值后程序一次就收敛了。原因接收机钟差可能达到毫秒级对应几百公里的等效距离。最小二乘更新是线性化后的局部寻优当初值远离真实值时第一个增量方向正确但步长受约束后续迭代需要花费大量次数才能收敛。如果观测方程里其他误差再大一点算法会在中途陷入一个局部平台表现为迭代次次都在动但就是不收敛。解决接收机钟差的初始猜测不要用0微秒这个紧约束而是放开到±1秒的范围。静态接收机的晶振漂移通常在毫秒级给一个1秒的搜索下界已经足够包含绝大多数消费级接收机的情况。更稳妥的做法是收敛后检查钟差的最终值如果它落在初始猜测的边界上说明初始范围设置过窄适当放宽后重新解算。这个检查可以和收敛标志打印成一个表格每轮迭代输出位置增量和钟差增量便于直接观测步长是否在递减。6. 最后加一个轻量验证用静态点的CEP95值量化定位结果6.1 静态漂移曲线与二维CEP95的MATLAB实现程序跑通了能出坐标接下来第一个问题是这个坐标到底准不准一种轻量的验证方式是让接收机在一个已知静态点上连续采集几分钟把所有历元的解算结果保存下来然后计算水平方向的漂移分布。下面这段代码计算二维CEP95即水平误差的第95百分位function cep95 calcCE95(posEcef, refEcef) % 将ECEF转为以参考点为原点的ENU坐标 rel posEcef - refEcef; % 用参考点的经纬度构建旋转矩阵此处简化为局部切平面 lat 0; lon 0; % 从refEcef转大地坐标得到省略 R [-sin(lon) cos(lon) 0; -sin(lat)*cos(lon) -sin(lat)*sin(lon) cos(lat); cos(lat)*cos(lon) cos(lat)*sin(lon) sin(lat)]; enu R * rel; % 水平距离取北向和东向的范数 dist sqrt(sum(enu(1:2, :).^2, 1)); cep95 prctile(dist, 95); endCEP95的意义比单一坐标更有说服力它告诉你有一半的历元会落在哪个半径内、95%的历元又落在哪个半径内。如果CEP95在3米以内对于伪距单点定位来说已经是不错的结果如果超过20米优先去查4.2节里被跳过的修正项而不是盲目调迭代参数。这段代码的另一个用途是验证修改前后的效果任何改动只要CEP95没有明显下降就说明这个改动没有实质帮助能够省下大把调参时间。6.2 把验证脚本写进习惯收敛标志只看位置增量在我自己用过的方案里最后一步习惯是给解算函数加一个中间量输出把每次迭代的位置增量、钟差增量、残差RMS存成一个矩阵。这样调试时不需要重新跑到断点直接看中间量的变化轨迹。做静态测试时把CEP95的计算写进主脚本末尾每次数据跑完自动打印。时间久了这份输出就成了判断改动效果的参照基准。有一次我在某模拟项目X里排查一个经度偏差问题位置解算代码反复看了很久没有头绪最后发现是卫星位置计算函数里偏近点角迭代用了弧度但输入的初值M被外层函数转成了度。一个单位错误让整个轨道外推偏移了几十公里。从那以后我在所有涉及角度计算的函数入口加了一行注释入参统一为弧度。这种单位一致性检查成本极低但能省掉后面一整个下午的排查时间。单点定位程序的价值不在于代码量多复杂而在于每个环节都形成了一套可观测的输出。解算结果、中间量、CEP95三个层次都有了程序才算真正可控。希望这些能帮到你。本文还有配套的精品资源点击获取
RELATED

相关推荐

从Deep-Learning-with-PyTorch到工程落地:PyTorch深度学习实战指南

从Deep-Learning-with-PyTorch到工程落地:PyTorch深度学习实战指南

简介:这份资源是Manning出版的经典英文原版教材《Deep Learning with PyTorch》PDF电子书,面向希望系统入门并深入掌握PyTorch深度学习框架的开发者、学生与研究人员,尤其适合具备一定Python与机器学习基础、想从理论走向工程实践的读者。全书…

📅 2026/10/15 15:27:23
易语言大漠插件模块制作:UnBindWindow解绑封装与资源管理实践

易语言大漠插件模块制作:UnBindWindow解绑封装与资源管理实践

1. 从一次窗口句柄失效说起:为什么要自己封装UnBindWindow做自动化脚本的朋友大概率都遇到过这样的场景:脚本跑完一轮,窗口关掉了,但后台进程里还挂着一个看不见的"幽灵"——资源没释放干净,下一次再启动脚本…

📅 2026/10/15 15:22:22
2026随身WiFi怎么选不踩坑?程序员出差宿舍高铁实测:芯片方案、套餐模型、智能选网技术指南与性价比高口碑推荐

2026随身WiFi怎么选不踩坑?程序员出差宿舍高铁实测:芯片方案、套餐模型、智能选网技术指南与性价比高口碑推荐

2026年随身WiFi出货量预计4700万台,12315相关投诉超4.2万件,流量虚标占48%。对程序员、远程办公、出差党、学生党来说,选这玩意儿本质不是看谁广告响,而是看三件事:芯片方案稳不稳、计费模型坑不坑、移动场景下智能选网…

📅 2026/10/15 15:22:22
MORE NEWS

更多资讯

📰

MonkeyDev 使用指南:基于 Xcode 的 CaptainHook/Logos 插件开发与免越狱 App 注入调试

开发工具移动开发 【免费下载链接】MonkeyDev CaptainHook Tweak、Logos Tweak and Command-line Tool、Patch iOS Apps, Without Jailbreak. 项目地址: https://gitcode.com/gh_mirrors/mo/MonkeyDev 点击查看 免费下载 导读:MonkeyDev 是 iOSOpenDev …

📰

OpenLLMetry LiteLLM 插桩指南:为统一 LLM 网关生成 gen_ai.* 链路与指标

LLMOps可观测性 【免费下载链接】openllmetry Open-source observability for your GenAI or LLM application, based on OpenTelemetry 项目地址: https://gitcode.com/gh_mirrors/op/openllmetry 点击查看 免费下载 本篇技术指南聚焦 openllmetry 仓库中的 opent…

📰

Python 爬虫标题抓取全攻略:从 requests 到 Playwright 的完整实践

简介:这是一份面向Python初学者的爬虫实战资料,核心任务为从目标网页提取全部文章标题。资源完整演示了使用requests库发送请求、借助BeautifulSoup解析网页结构,通过定位二级标题标签收集标题文本,最终逐行写入本地文件。代码按功…

📰

第一次使用HyprMod:Pending Changes待保存页与全局搜索,新手必知的5个操作技巧

【免费下载链接】hyprmod Native GTK4/libadwaita settings app for Hyprland. 项目地址: https://gitcode.com/gh_mirrors/hy/hyprmod 点击查看 免费下载 HyprMod 是一款面向 Hyprland 平铺合成器的原生图形化配置工具,基于 GTK4 和 libadwaita 构建&a…

📰

FANUC机器人伺服焊枪配网配置详解:从通信架构到实操避坑

简介:面向工业机器人集成与自动化工程师的FANUC伺服焊枪配置及配网技术文档,围绕点焊机器人伺服焊枪的添加、运动方向设置、零点标定、自动调整、厚度检查与压力标定等全流程展开,同时涵盖PROFINET网络下的配网组态、DO/DI信号与DCS配置&…

📰

FPGA实战:N.5分频器的Verilog实现与占空比优化

做数字电路或者FPGA开发,迟早会碰到一个不大不小的问题:系统里只有 100MHz 的参考时钟,可某个模块就是点名要 40MHz。100 除以 40 等于 2.5,这不是整数分频能解决的事,于是就得用 N.5 分频。N.5 分频的核心难点不在于“…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬