尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Python+PyCINRAD处理气象雷达基数据并绘制PPI图实战指南
气象雷达基数据这种二进制文件乍看特别劝退——文件名是一长串编码内容没法双击打开想画一张反射率PPI图中间隔着格式解析、坐标转换、色标映射、地图叠加好几道坎。我自己刚开始跑这套流程时也踩了不少坑后来用Python生态里的PyCINRAD库才把从基数据读取到数据处理再到PPI图输出的链路彻底固化下来。这篇文章就当作一份实战记录把代码、参数和注意事项整理出来给要自己啃雷达数据的同行省点时间也写给那些想在Python里把气象数据处理练熟的初学者。文章围绕四个东西展开基数据怎么读、产品数据怎么取、PPI图怎么画、常见问题怎么查。读完你至少能拿到一套可以直接运行的流程把单个雷达体扫文件变成一张能进论文、能进报告、能直接发到工作群里的成品图。1. 为什么选择自己处理雷达基数据1.1 基数据、雷达产品与PPI图的关系先理清概念。雷达基数据base data是雷达直接输出的原始观测数据本质上就是三个基本物理量反射率因子、平均径向速度和速度谱宽。反射率因子用dBZ表示反映降水粒子的强弱径向速度用m/s表示反映粒子相对雷达的径向运动速度谱宽用m/s表示反映湍流和速度离散程度。这三个量是雷达最底层的观测结果后续所有产品都从这里算出来。PPI全称Plan Position Indicator又叫平面位置显示是雷达数据处理里最常用的可视化手段。雷达在固定仰角上转一圈把每个方位、每个距离库的观测值投到一张平面图上就得到一张PPI图。对业务和科研来说PPI图是最直观的“雷达回波快照”用来判断降水强度、回波走向、大风区位置都靠它。刚开始接触雷达的人容易把基数据和产品搞混。业务网站上下载的组合反射率、回波顶高、垂直液态水含量这类都是基于数据算出来的二次产品而基数据文件本身只有原始观测值。PyCINRAD的价值在于它既能直接读取基数据也能在读取之后进一步计算生成产品等于把“原料加工”和“看图”两步都做了省掉很多中间转换环节。1.2 几条技术路线的横向对比我在动手之前比较过多条技术路线。最省事的是用商业软件或者台站自带的雷达显示终端比如SWAN客户端打开文件就能看图但问题也很明显色标不够灵活叠加要素受限批量出图基本别想论文插图还要再去美工。另一个路线是用MeteoInfo、GrADS这类老牌气象软件功能很强但脚本写起来并不是每个人都能接受调试也不是特别方便。后来我转向Python因为整个数据处理的生态实在太完整PyCINRAD负责雷达数据格式解析和产品计算numpy处理数值matplotlib和PyCINRAD自带的可视化模块出图cartopy负责地理底图。一条链路下来全是熟悉的工具出了问题网上也能搜到大量资料。PyCINRAD最吸引我的一点是它对国产SA、SB、CB等型号的雷达基数据支持得比较成熟这正是国内很多气象从业人员和高校研究生的真实需求。几条路线放在一起比较大概是这样方案优点缺点适合场景SWAN等业务软件打开即看操作门槛低定制性差难以批量出图日常快速查看MeteoInfo/GrADS功能完善支持数据格式广脚本语法杂调试体验一般有一定基础的气象计算Python PyCINRAD生态好灵活度高易批量需要自己写代码环境配置有门槛科研分析、定制出版、教学实训我最终选了最后一条。原因是我的需求很明确要批量处理连续时次的基数据要自动叠加站点信息和地理范围还要能在论文里复现每一张图。这些需求用PyCINRAD都能干净利落地解决。2. 环境准备与基数据结构2.1 安装PyCINRAD及依赖库PyCINRAD的安装不算复杂但依赖库比较多尤其是cartopy容易在Windows机器上出问题。有conda环境的时候我建议先用conda把cartopy这类带地理库的包装好再装PyCINRAD顺序反了容易碰到依赖冲突。# 优先推荐用conda创建环境 conda create -n radar python3.10 conda activate radar conda install -c conda-forge cartopy matplotlib numpy # 最后安装PyCINRAD pip install cinrad如果网络环境一般pip安装时可以把镜像源换成国内的速度会明显提升pip install cinrad -i https://pypi.tuna.tsinghua.edu.cn/simplePyCINRAD的核心依赖大致包括numpy、pandas、matplotlib、cartopy等另外读写部分后台可能还会用到PyQt5相关的可选模块不影响基本绘图。装完后建议跑一下版本验证确认能正常importimport cinrad print(cinrad.__version__)如果看到版本号输出说明最基础的安装已经通过了。这里多说一句Python版本别用太老3.8以上一般都没问题新版本对类型标注和异步等特性的支持更好。2.2 认识基数据文件到底存了什么拿到一个基数据文件第一件事是看文件名因为文件名里已经写清楚了大部分来源信息。比如常见的标准归档文件名Z_RADR_I_Z9898_20240812120000_O_DOR_SA_CAP.bin拆解一下含义Z_RADR_I_是固定前缀Z9898是雷达站编号20240812120000是体扫开始时间O_DOR_表示观测类型为多普勒雷达观测SA表示雷达型号CAP是文件封装格式标识。还有一类文件名长这样RADA_CHN_SA_20240812120000_00001.bin同样能看出站点、时间、型号信息。再说文件内容。基数据文件不是一张表而是一条一条“径向”记录的集合。雷达在某个固定仰角上按方位角顺序发射电磁波每发射一次相当于沿径向采集一串距离库数据所以数据在磁盘上的存储顺序是“仰角层→方位角→距离库”。读取时首先要能还原这个三维结构第一层是仰角第二层是方位角第三层是距离。不同雷达型号的参数略有差异但大框架一致。常见SA雷达在VCP21体积扫描模式下会做9到14个仰角的体扫最低仰角通常0.5度最高到19.5度左右距离库长一般0.5公里最大探测距离可以到230公里甚至更远。反射率数据、速度数据和谱宽数据虽然都在同一个文件里但存储时是分开的扇区或字段读取的时候需要按产品类型分别提取。理解这个存储逻辑很重要因为后续用get_data提取数据时本质就是在做“按仰角层按产品类型”的切片操作。3. 读取基数据与提取产品数据3.1 用StandardData打开基数据文件PyCINRAD读取基数据的主入口是cinrad.io.StandardData。这个类能自动识别大部分国产常规雷达的基数据文件格式并把头部信息解析出来使用起来非常省心。from cinrad.io import StandardData file_path Z_RADR_I_Z9898_20240812120000_O_DOR_SA_CAP.bin radar StandardData(file_path) # 查看基础信息 print(radar.radar_type) # 雷达型号比如 SA print(radar.scan_time) # 体扫时间 print(radar.site_code) # 站点编号读取之后radar对象里已经存好了体扫时间、站点位置、雷达型号、仰角列表、方位角列表这些元数据。做数据分析前先把这些信息打出来确认一遍防止文件张冠李戴。有两点容易踩坑。第一文件路径里不要有中文和空格某些版本在底层调用文件定位时对中文路径支持不友好建议统一用纯英文路径。第二如果是老式格式的基数据比如某些早期型号输出的.bin文件StandardData可能识别不了这时候可以尝试CinradReader它是针对旧格式的读取类。from cinrad.io import CinradReader # 旧格式基数据可以试试这个 reader CinradReader(file_path)不过大多数情况下StandardData足够应对日常需求了。3.2 get_data参数详解与返回结构读取文件只是第一步真正干活的是get_data方法。它负责把指定时间、指定产品、指定仰角的数据从体扫文件里提取出来返回一个包含数值数据和坐标信息的对象。data radar.get_data( scan_timeradar.scan_time, productREF, tilt1, rge230 )几个参数的作用分别是scan_time要提取哪个体扫时间一般直接用radar.scan_time取整个文件对应的观测时间。product产品类型字符串。REF是基本反射率VEL是平均径向速度SW是速度谱宽。tilt仰角层数从1开始。体积扫描通常有多层仰角tilt1对应最低仰角也是日常画PPI用得最多的一层。rge最大探测距离单位是公里。设成230就表示只取230公里以内的数据超出部分会被截掉。返回值data里几个核心属性的含义也要弄清data.data # 二维数组形状(方位角数, 距离库数)存储产品数值 data.azimuth # 一维数组每个径向的方位角单位度 data.distance # 一维数组每个距离库对应的距离单位公里 data.elevation # 当前数据对应的仰角值单位度这些属性后面画PPI时都会用到。理解data.data的维度特别关键它第一维是径向上的方位角数量第二维是距离库数量整体是极坐标网格不是标准的经纬度网格。PPI绘图的过程本质上就是把极坐标网格映射到平面直角坐标上。3.3 反射率、速度、谱宽都怎么读同一份基数据文件里可以分别提取不同产品。反射率用来看回波强度速度用来看径向风场谱宽用来看湍流程度。实际业务里经常二选一或两两对比代码逻辑完全一致只是product参数不同。# 读取基本反射率 ref_data radar.get_data(radar.scan_time, REF, tilt1) # 读取平均径向速度 vel_data radar.get_data(radar.scan_time, VEL, tilt1) # 读取速度谱宽 sw_data radar.get_data(radar.scan_time, SW, tilt1)读取后可以先做一个简单的统计检查import numpy as np print(REF 数据范围: %.2f 到 %.2f % (np.nanmin(ref_data.data), np.nanmax(ref_data.data)))正常情况下反射率的范围应该在-30dBZ到70dBZ左右。如果统计出来全是nan或者全是同一个数大概率是雷达标校异常或者文件本身数据质量有问题。速度数据同理一般范围在±30m/s左右超出这个区间的极端值说明存在速度模糊需要考虑退模糊处理。4. 绘制PPI图的完整实现4.1 核心绘制代码数据取到手绘图就快多了。PyCINRAD内置了一个可视化模块PPI专门用于画平面位置显示图。先看一段最小可用代码from cinrad.visualize import PPI # 用上一节读到的反射率数据 fig PPI(ref_data, label示例雷达站) # 保存图片 fig(ppi_ref.png, dpi200)就这么几行一张带雷达回波填色、色标、站点标签和地理范围的基础PPI图就出来了。PPI类会自动处理极坐标到平面坐标的转换内部也会用cartopy绘制海岸线和行政边界比自己手动铺matplotlib省太多事。如果只想快速在屏幕上查看可以把保存语句换成展示fig.show()这里提醒一点不同版本的PyCINRAD在可视化接口上略有差异。旧版本里PPI对象可能没有直接可调用的保存方法需要先fig.plot()再plt.savefig()。装好库之后先跑一遍示例看看是哪种风格再写正式脚本。我最初用老版本时习惯写成fig(out.png)升级版本后发现需要调整这个坑花了我小半个晚上。4.2 色标、标签、地图要素的调整PPI绘图不只有默认设置很多时候要按论文或报告的需求定制。最常用的定制项是色标。PyCINRAD内置了多套色标反射率常用ref_2速度常用vel_2。调用时直接传cmap参数fig PPI(ref_data, label示例站, cmapref_2)速度图的用法类似但要注意正负方向颜色速度大于0表示远离雷达小于0表示朝向雷达所以速度色标一般会带上红绿或蓝红区分千万不要用成反射率的渐变色。如果内置色标不能满足需求也可以用matplotlib自定义色标再传给PPIimport matplotlib.pyplot as plt from matplotlib.colors import BoundaryNorm import numpy as np levels np.arange(-20, 70, 5) norm BoundaryNorm(levels, cmap.N) custom_cmap plt.cm.get_cmap(jet, len(levels) - 1) fig PPI(ref_data, label自定义色标, cmapcustom_cmap)除了色标标签和范围也经常调整。站点名用label参数绘图范围直接改get_data的rge即可。如果想在图上叠加更多要素比如某个城市的位置标记可以在保存前用matplotlib往当前坐标轴上添加import matplotlib.pyplot as plt # 先绘制 fig PPI(ref_data, label示例站) # 在图上叠加散点比如某城市经纬度 plt.scatter(116.4, 39.9, s80, cblack, marker^, zorder5) plt.text(116.4, 39.9, 北京, fontsize12, colorblack) # 保存 fig(ppi_with_marker.png, dpi200)地图底图是整个流程里最容易卡住的地方。PyCINRAD依赖cartopy绘制海岸线和国界cartopy首次使用时需要下载Natural Earth地理数据集网络不好会一直卡着。解决办法是手动去Natural Earth官网下载对应分辨率的shapefile放到cartopy的缓存目录之后就能顺利出图了。4.3 批量处理连续时次的基数据单个文件处理好之后批量处理几乎顺理成章。雷达体扫通常几分钟一次一次强对流天气过程会产生几百个基数据文件人工一张张画根本不现实。用glob把文件列表扫出来循环读取、提取、绘图就行。import glob from cinrad.io import StandardData from cinrad.visualize import PPI file_list sorted(glob.glob(radar_files/*.bin)) for i, file_path in enumerate(file_list): radar StandardData(file_path) ref radar.get_data(radar.scan_time, REF, tilt1) fig PPI(ref, label示例站, cmapref_2) output_name output/ppi_%04d.png % i fig(output_name, dpi150)这里有个内存管理的小技巧。批量循环时每次生成的fig对象如果不释放内存占用会不断上涨。处理几百个文件时特别明显跑到一半可能直接内存溢出。建议在循环末尾加上del fig或者用import gc; gc.collect()手动触发回收保持内存稳定。批量生成的时间序列图还有一个好处就是可以合成动图import imageio.v2 as imageio import glob images [imageio.imread(f) for f in sorted(glob.glob(output/*.png))] imageio.mimsave(reflectivity_animation.gif, images, fps8)动图对展示强对流演变过程非常直观发给同事看也比一张张翻图效率高得多。4.4 从数据传输角度理解绘图范围画PPI时设置rge参数本质上是控制极坐标下的最大显示半径。雷达在固定仰角下发射电磁波由于地球曲率和大气折射的影响远距离处波束中心高度会抬升所以PPI图上远距离的回波并不等于地面附近实况距离越远高度越高。这也是为什么日常看反射率PPI时很多人习惯只看150公里以内或者直接看低仰角层的原因之一。如果你拿到的是230公里探测范围的基数据而业务上只需要关注100公里以内的对流天气把rge设为100会让图像清晰很多也能避免远处低质量数据污染视觉判断。我通常先看全貌再出近距离局部图两张图配合着用。5. 常见问题与排查经验5.1 读取失败与数据异常我自己用PyCINRAD这两年最常遇到的读取问题基本都集中在这几个场景上。第一类是文件格式不支持。不同厂家、不同年代的雷达基数据格式有差异PyCINRAD虽然支持多种型号但总有边缘格式识别不了。遇到这种情况先确认文件名里的雷达型号再去PyCINRAD官方GitHub的README看看有没有对应支持。如果确实不支持只能先转换格式或者换其他工具。第二类是文件损坏或下载不完整。气象数据传输过程偶发丢包看起来后缀正常但StandardData读取时直接报错或返回空数据。我的排查习惯是先看文件大小是否明显小于同类文件再用radar.scan_time能否正常输出来判断头部信息是否完整。第三类是数据全部为nan。这种情况通常不是读取问题而是雷达本身体扫时该层仰角没有回波或者数据质量控制把弱回波全部滤掉了。可以先换另一个tilt层看看如果所有层都是全nan再怀疑文件本身。下面把几个高频问题整理成速查表现象可能原因解决办法StandardData读取报错文件格式不支持或路径有中文换成英文路径确认雷达型号是否受支持返回数据全为nan该仰角无有效回波或质控过滤换tilt层检查源文件完整性只有部分地区有数据rge设置过小调大rge或用默认值重试期望反射率却返回速度值product参数写错检查product是否传成VEL/SW批量处理到一半内存暴涨fig对象未释放循环末尾del fig并gc.collect()5.2 绘图环节的常见坑绘图环节的坑比读取还要多尤其是新手问题常常集中在中文字体、地图数据和出图效果上。中文字体乱码是第一个麻烦。matplotlib默认字体不支持中文PPI图上的标签是中文的话输出图片里会出现一排小方框。解决方法是给matplotlib设置中文字体import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False第二个麻烦是cartopy底图下载失败。前面提到过首次绘图会尝试下载Natural Earth数据如果网络受限可以在环境变量里配置代理或者手动把数据文件放到cartopy缓存目录。第三个麻烦是出图模糊。dpi设置太低会导致图片放大后全是锯齿期刊插图建议dpi至少300普通演示用150也够了。还有一个比较隐蔽的问题是计算距离与坐标不匹配。rge参数设置后坐标轴上的范围会跟着变但如果你后续手动添加某些标注比如画一个固定半径的范围圈需要注意保持单位一致。我用公里单位做半径计算时经常被km和m的换算坑到写代码时统一以km为准就好。5.3 关于坐标转换的一个提醒PyCINRAD的PPI模块已经把极坐标到平面的转换封装好了但如果自己研究算法或者想画自定义图形就必须知道坐标转换背后的逻辑。简单说每个距离库的平面位置由方位角、距离和仰角共同决定先用斜距算出水平距离再按方位角分解到X轴和Y轴。由于雷达波束随距离抬升严格来说还要考虑地球曲率修正只看近距离回波时可以忽略超过100公里误差就比较明显了。这个转换规则我在处理叠加GIS数据时反复用到。比如要把某个自动气象站的经纬度转成相对雷达的方位和距离再放到PPI图上手动算一遍能加深理解。公式不复杂角度要转成弧度计算时注意正弦余弦的象限判断就行。6. 扩展玩法与高阶应用6.1 从基数据生成更多雷达产品PPI图只是雷达数据处理的冰山一角。利用PyCINRAD的calc模块可以从基数据直接计算垂直液态水含量VIL、回波顶高ET等产品得到比单层反射率更多维度的信息。from cinrad.calc import echo_top, vil # 需要读取所有仰角层的数据再传入计算函数 et_data echo_top(ref_data_list) vil_data vil(ref_data_list)VIL对判断强对流天气的潜在严重程度很有参考价值雷暴单体越深厚液态水含量累计值通常越大。ET则直接反映回波顶部的伸展高度是判别对流是否强烈的常用指标。用PyCINRAD跑这些产品比从业务系统下载成品图再导出数据灵活得多。如果只想快速浏览多个产品组合也可以用多个子图排版的方式在一张画布上并排放反射率、速度和谱宽import matplotlib.pyplot as plt fig, axes plt.subplots(1, 3, figsize(15, 5)) # ref、vel、sw 分别绘制到三个子图再用 plt.savefig 统一保存这种组合图在天气过程复盘时特别好用一张图就能同时对比回波强度和风场结构。6.2 数据质控与产品后处理雷达基数据拿到手时常混有地物杂波、超折射回波和生物回波直接画PPI图会在某些方向出现假回波尤其是静稳天气下城市区域周围的杂波非常明显。PyCINRAD本身侧重数据解析和可视化更深层的数据质量控制通常需要结合其他算法库处理比如针对地物杂波抑制的滤波算法、针对速度模糊的退模糊算法。对业务分析而言如果只是为了输出一张能看的图先检查最低仰角层的杂波情况必要时换到更高的仰角层是成本最低的规避方法。如果要做严谨的定量分析则必须对基数据做质控后再计算产品。这个方向投入的精力会比较大但对研究级应用来说值得好好补课。还有一个常见的后处理需求是将数据导出成其他格式便于在GIS或数值模式里进一步使用。基数据是极坐标网格导到外部系统前一般先插值成经纬度网格。numpy和scipy的插值工具可以胜任不过插值方法、网格分辨率的选择都会影响输出效果需要根据自己的精度需求试验。6.3 把流程封装成自己的工具脚本当整套流程稳定之后强烈建议封装成自己的小工具库。不必写得多复杂就是把文件扫描、数据读取、产品计算、批量出图几个步骤包成几个函数免去每次重复复制粘贴。# radar_tools.py def process_single_file(file_path, productREF, tilt1, rge230, outputppi.png): from cinrad.io import StandardData from cinrad.visualize import PPI radar StandardData(file_path) data radar.get_data(radar.scan_time, product, tilt, rge) fig PPI(data, cmapref_2 if product REF else vel_2) fig(output, dpi200) return data封装的收益是后续再加新需求比如增加一两个新产品或者改变出图样式只需要在函数参数上做文章核心代码不用动。这也是我从手动处理到半自动化的关键一步。最后聊两句实操感受整套流程跑顺之后我最大的体会是PyCINRAD把最麻烦的格式解析和坐标转换都兜住了真正决定出图质量的反而是对数据本身的理解。你要知道自己读的是第几层仰角知道这个距离范围内的有效数据有多少知道反射率极值是不是杂波假象知道色标选得对不对。工具只是把数据处理的速度提上来判断还是得靠人来做。如果你刚开始接触这块我建议不要急着追求批量出图和动画先把单张PPI图跑通再反复对照雷达原始数据和业务系统实况图把色标、范围、仰角这些都摸熟。在这个基础上再去尝试产品计算、质控和批量流程会顺畅很多。还有一个小技巧值得分享写处理脚本时每个文件处理完都用日志把文件名、读取时间、数据范围输出出来这样批量跑完后能快速检查哪些文件有问题。我的习惯是记录到CSV里几千个文件跑下来扫一眼就知道哪些时次需要人工复查。数据量越大这个习惯越值钱。
RELATED

相关推荐

IFRS 9与CECL双轨减值模型全解析:从预期信用损失到落地实践

IFRS 9与CECL双轨减值模型全解析:从预期信用损失到落地实践

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

📅 2026/10/2 1:20:05
BK3296蓝牙音频SoC评测:低功耗TWS耳机设计开发实战

BK3296蓝牙音频SoC评测:低功耗TWS耳机设计开发实战

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

📅 2026/10/2 1:15:05
PSNR与SSIM详解:图像质量评估指标的核心原理与工程实践

PSNR与SSIM详解:图像质量评估指标的核心原理与工程实践

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

📅 2026/10/2 1:15:05
MORE NEWS

更多资讯

📰

华为OD机试真题 新系统 2026-09-16 C++【统计特殊数字】

目录 题目 思路 Code 题目 题目内容: 所有大于 1 的整数都可以唯一分解为质数的乘积,这些质数称为该整数的质因子。例如,12 = 2 2 3,12 的质因子为 2 和 3;7 的质因子为 7。 现给定一个正整数 n 和一个严格递增的质数列表 nums,请统计 1 到 n 中有多少个正整数的…

📰

Java Word转PDF性能实测:纯代码vs原生引擎

Java实现Word转PDF的两种常见方案和性能实测更新时间是2026年01月13日, 具体时刻为09:03:36, 作者是。这篇文章对比了Java后端开发中Word转PDF的两种常见方案, 也就是纯Java实现和调用原生引擎这两种方式, 下面小编会和大家详细地介绍具体的实现方法都有哪些内容。这篇文章拿Ja…

📰

零基础学网安:从CTF到SRC挖洞再到护网实战的完整路线

先坦白讲,我每年都能收到很多类似的提问:"零基础学网安,多久能挖洞?"、"CTF是不是必须刷?"、"护网怎么才能参加?"。说实话,大多数问这些问题的人不缺热情&#x…

📰

网安应届生就业真相:岗位分层、技能树与大学四年学习路线

先说实话,网安这几年确实是被推到了风口浪尖。专业名称从"信息安全"变成"网络空间安全",高校大规模扩招,各类培训机构的宣传里永远写着"人才缺口巨大""平均薪资最高"。但我带过不少校招进来的新人&a…

📰

智能车竞赛疯狂电路组开源项目深度导读:从电源到抗干扰的硬件设计全解析

21届智能车竞赛结束到现在,我整理开源仓库的时候翻完整个工程,还是想说一句话:疯狂电路组真正检验人的地方,不在赛道上,而在你焊的每一块板子、调的每一路电源、写的每一行注释里。我们Soberup战队在21届把整套电路方案…

📰

PX4 倾转旋翼控制消息 TiltrotorExtraControls 深度解析:倾转角与集合推力指令的发布与消费链路

嵌入式物联网机器人自动驾驶智能硬件 【免费下载链接】PX4-Autopilot PX4 Autopilot Software 项目地址: https://gitcode.com/gh_mirrors/px/PX4-Autopilot 点击查看 免费下载 导读 本文围绕 PX4 开源飞控中的 uORB 消息 tiltrotor_extra_controls(对…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

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

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

📞 💬