Compare commits
3 Commits
feikong-77
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 6aa72faf84 | |||
| d5cc6507cb | |||
| 5aefd7c0a7 |
141
docs/feikong_std77.md
Normal file
141
docs/feikong_std77.md
Normal file
@@ -0,0 +1,141 @@
|
||||
# 飞控 / Flight-Controller Projects (std)
|
||||
|
||||
_主题定向索引:oshwhub `origin=std` 且 `name` 或 `introduction` 含「飞控」字样_
|
||||
|
||||
**当前**:79 个项目 · 75 个有可编辑器源 · 4 个仅附件(upstream 没编辑器 session)
|
||||
|
||||
> 数据来源:`data/state/oshwhub_listing_full.jsonl` + 每项 `data/raw/oshwhub/<uuid>/metadata.json`
|
||||
> 排序:likes 倒序
|
||||
|
||||
| # | Title | Author | License | Source | Editor | ❤️ Likes | ⭐ Stars | 🍴 Forks | 👁 Views | Grade |
|
||||
|---|-------|--------|---------|--------|--------|--------:|--------:|--------:|--------:|------:|
|
||||
| 1 | [SuperUAV](https://oshwhub.com/aeromodeller/superuav)<br>[`b3884754…`](../data/raw/oshwhub/b38847543af34f64bd034e24c94c130e/) | [Aeromodeller](https://oshwhub.com/aeromodeller) | GPL 3.0 | ✅ 2 docs | 6.5.15 | 481 | 1,117 | 198 | 57,303 | 4 |
|
||||
| 2 | [STM F405飞控 bf inav 穿越机 固定翼飞控](https://oshwhub.com/zl4430/mpu-6500-280)<br>[`d53cd4f3…`](../data/raw/oshwhub/d53cd4f3355c45319a36b19cc9ff252e/) | [左手DIY](https://oshwhub.com/zl4430) | Public Domain | ✅ 1 docs | 6.5.22 | 373 | 799 | 281 | 103,656 | 4 |
|
||||
| 3 | [#第八届立创电赛#四轴飞行器Liguanxi-UAV(空心杯无人机飞控)](https://oshwhub.com/liguanxi/si-zhou-fei-xing-qi-ESP-Liguanxi)<br>[`eb1e9ddf…`](../data/raw/oshwhub/eb1e9ddf771f47d1b898e4157f3f35f9/) | [liguanxi](https://oshwhub.com/liguanxi) | GPL 3.0 | ✅ 2 docs | 6.5.34 | 277 | 741 | 278 | 74,635 | 1 |
|
||||
| 4 | [NAZE32飞控](https://oshwhub.com/caisheng/naze32-fei-kong)<br>[`3019f17a…`](../data/raw/oshwhub/3019f17a449249a18390c46594f03cfb/) | [蔡子](https://oshwhub.com/caisheng) | MIT | ✅ 6 docs | 6.4.25 | 261 | 552 | 292 | 56,827 | 4 |
|
||||
| 5 | [空心杯四轴穿越机](https://oshwhub.com/death/naze32-kong-xin-bei-si-zhou)<br>[`b8ade899…`](../data/raw/oshwhub/b8ade899f37149e1b562c8f38369fb5a/) | [SaekiSayaka](https://oshwhub.com/death) | Public Domain | ✅ 2 docs | 6.5.23 | 186 | 474 | 216 | 53,256 | 3 |
|
||||
| 6 | [AT32F437飞控](https://oshwhub.com/pdwdw/at32f437)<br>[`bd3d092f…`](../data/raw/oshwhub/bd3d092f63dd4b6f88eba099ef0e3c81/) | [辉光管](https://oshwhub.com/pdwdw) | GPL 3.0 | ✅ 2 docs | 6.5.34 | 180 | 401 | 273 | 53,725 | 3 |
|
||||
| 7 | [AT32国产飞控(30.5*30.5)](https://oshwhub.com/sheep_finder/guo-chan-fei-kong)<br>[`b5c6a75f…`](../data/raw/oshwhub/b5c6a75f91804bd1b4992b07c7e77b78/) | [sheep_finder](https://oshwhub.com/sheep_finder) | GPL 3.0 | ✅ 3 docs | 6.5.39 | 176 | 366 | 392 | 28,549 | 2 |
|
||||
| 8 | [GLDrone_PX4](https://oshwhub.com/guanglun/gldrone_px4)<br>[`6625cbb0…`](../data/raw/oshwhub/6625cbb0a1fe46dda75500fd781193e0/) | [guanglun](https://oshwhub.com/guanglun) | MIT | ✅ 6 docs | 6.4.31 | 139 | 347 | 155 | 36,790 | 4 |
|
||||
| 9 | [elrs-rx-2.4g-pwm](https://oshwhub.com/vinvaa/elrs-rx-2-4g-pwm)<br>[`d72f8b54…`](../data/raw/oshwhub/d72f8b540e8946d3bf2a1de764b7fc63/) | [vinvaa & xi0n9Fpv](https://oshwhub.com/vinvaa) | GPL 3.0 | ✅ 6 docs | 6.5.23 | 128 | 247 | 124 | 31,997 | 3 |
|
||||
| 10 | [2021年G题-植保飞行器+380844A](https://oshwhub.com/ni-kan-wo-shuo-di-dui-fou-dui/2021-niang-ti-zhi-bao-fei-xing-qi)<br>[`5089e537…`](../data/raw/oshwhub/5089e537f97d4be1a13252fb120f9962/) | [你看我说的对不队](https://oshwhub.com/ni-kan-wo-shuo-di-dui-fou-dui) | CC-BY-NC-SA 3.0 | ✅ 3 docs | 6.4.25 | 89 | 127 | 26 | 18,447 | 4 |
|
||||
| 11 | [2021年 G题 植保飞行器 639423A队](https://oshwhub.com/dahjdksakdlshjkads/g-zhi-bao-fei-xing-qi)<br>[`8394447d…`](../data/raw/oshwhub/8394447d1bf7406daf1e58458bfd5262/) | [dahjdksakdlshjkads](https://oshwhub.com/dahjdksakdlshjkads) | CC-BY-NC-SA 3.0 | ✅ 6 docs | 6.4.30 | 74 | 140 | 17 | 21,796 | 3 |
|
||||
| 12 | [ESP32四轴飞行器(飞控)](https://oshwhub.com/liguanxi/esp32-fei-kong_copy_copy)<br>[`5cd6d5e7…`](../data/raw/oshwhub/5cd6d5e7f3d44e79a072b90b12324b08/) | [liguanxi](https://oshwhub.com/liguanxi) | GPL 3.0 | ✅ 2 docs | 6.5.29 | 70 | 197 | 56 | 25,542 | 3 |
|
||||
| 13 | [STM32F722飞控](https://oshwhub.com/cgncm/STM32F722flightcontrol)<br>[`fac8abdb…`](../data/raw/oshwhub/fac8abdbdb364d01882656f1b0c623e1/) | [CGNCM](https://oshwhub.com/cgncm) | GPL 3.0 | ✅ 5 docs | 6.5.23 | 59 | 128 | 85 | 19,512 | 1 |
|
||||
| 14 | [FLYWOOF411V2+ELRS 2.4G集成飞控](https://oshwhub.com/yd-ai/flywoof411v2-2-4)<br>[`36b532a2…`](../data/raw/oshwhub/36b532a2150a4252920b60c765e5e614/) | [yd-AI](https://oshwhub.com/yd-ai) | Public Domain | ✅ 2 docs | 6.5.15 | 58 | 138 | 73 | 13,601 | 3 |
|
||||
| 15 | [F405穿越机飞控](https://oshwhub.com/czf0823/pcb_2020-07-30_01-02-38_2020-11-29_00-04-17)<br>[`0d78cbbf…`](../data/raw/oshwhub/0d78cbbf29b24363a639b0848aa68b01/) | [陈晓芳](https://oshwhub.com/czf0823) | GPL 3.0 | ✅ 3 docs | 6.4.7 | 57 | 148 | 69 | 23,199 | 2 |
|
||||
| 16 | [15元飞控,带详细教程](https://oshwhub.com/fgdfhdr/kai-yuan-fei-kong)<br>[`d698304c…`](../data/raw/oshwhub/d698304c0e8e4d86a0d23045b1e3d5f2/) | [荣妹儿科技](https://oshwhub.com/fgdfhdr) | LGPL 3.0 | ✅ 2 docs | 6.5.46 | 57 | 174 | 107 | 17,833 | 1 |
|
||||
| 17 | [AT32AIO 20孔飞控板](https://oshwhub.com/cai20070410/at32-20-kong-aio-fei-kong-ban)<br>[`48919432…`](../data/raw/oshwhub/48919432e4dc44d3b59ccc4a3ed4367a/) | [cai](https://oshwhub.com/cai20070410) | CC BY-NC-SA 4.0 | ✅ 6 docs | 6.5.40 | 52 | 130 | 108 | 10,420 | 1 |
|
||||
| 18 | [NAZE32飞控的3寸穿越机](https://oshwhub.com/kaguyamokou/naze32-fei-kong-re_copy)<br>[`c132a9a4…`](../data/raw/oshwhub/c132a9a400ea4ddbbae8fd499a587b10/) | [蓬莱的树海](https://oshwhub.com/kaguyamokou) | GPL 3.0 | ✅ 3 docs | 6.5.29 | 51 | 147 | 31 | 18,828 | 3 |
|
||||
| 19 | [【2023电赛】G题-消防无人机](https://oshwhub.com/fjbf/wu-ren-ji-di-ban)<br>[`405e72f7…`](../data/raw/oshwhub/405e72f7ef4d449ca781a8de06df9fec/) | [飞机不废](https://oshwhub.com/fjbf) | CC BY-NC 3.0 | ✅ 2 docs | 6.5.34 | 44 | 148 | 38 | 21,765 | 1 |
|
||||
| 20 | [MWC空心杯飞控+萝莉控4通接收(已修复小问题)](https://oshwhub.com/HatsuneMikuHD/mwc-kong-xin-bei-fei-kong)<br>[`9bf5f7dd…`](../data/raw/oshwhub/9bf5f7dd40c346d58b2d056b6ea32133/) | [HatsuneMikuHD](https://oshwhub.com/HatsuneMikuHD) | GPL 3.0 | ✅ 2 docs | 6.4.7 | 43 | 122 | 24 | 16,419 | 2 |
|
||||
| 21 | [F411飞控](https://oshwhub.com/yang_xw0011/F411fei-kong)<br>[`a77dbfeb…`](../data/raw/oshwhub/a77dbfeb1a894aa5979946b008bdc142/) | [自动挖掘机](https://oshwhub.com/yang_xw0011) | MIT | 📎 attachments-only | — | 40 | 83 | 35 | 15,127 | 2 |
|
||||
| 22 | [NAZE32飞控板](https://oshwhub.com/caisheng/naze32-fei-kong-ban)<br>[`8f828882…`](../data/raw/oshwhub/8f828882c3344e10b37bf0a63cbc4351/) | [蔡子](https://oshwhub.com/caisheng) | GPL 3.0 | ✅ 2 docs | 6.3.35 | 39 | 98 | 34 | 14,381 | 2 |
|
||||
| 23 | [MATEK F411固定翼飞控](https://oshwhub.com/zl4430/matek-f411-gu-ding-yi-fei-kong)<br>[`24adb01d…`](../data/raw/oshwhub/24adb01d49b04090b3a7e2ad549f3db0/) | [左手DIY](https://oshwhub.com/zl4430) | Public Domain | ✅ 1 docs | 6.4.31 | 37 | 95 | 21 | 17,285 | 3 |
|
||||
| 24 | [AT32F437固定翼飞控](https://oshwhub.com/pdwdw/at32f437_copy)<br>[`5a7cfbca…`](../data/raw/oshwhub/5a7cfbca532548e2be9bc8bf78118e9d/) | [辉光管](https://oshwhub.com/pdwdw) | GPL 3.0 | ✅ 2 docs | 6.5.34 | 35 | 101 | 67 | 15,533 | 3 |
|
||||
| 25 | [小四轴飞控(简化版)](https://oshwhub.com/nevet/fly_main_board)<br>[`ebcaa9ec…`](../data/raw/oshwhub/ebcaa9ec6f0044548d8b85adb58876b3/) | [Nevet](https://oshwhub.com/nevet) | GPL 3.0 | ✅ 2 docs | 6.5.8 | 34 | 97 | 29 | 16,088 | 3 |
|
||||
| 26 | [STM32F103C8T6核心板](https://oshwhub.com/TWENTYY/c8t6-littleboard)<br>[`a4635267…`](../data/raw/oshwhub/a4635267bd234524a2a8656d0b185f25/) | [TWENTYY](https://oshwhub.com/TWENTYY) | GPL 3.0 | ✅ 2 docs | 6.3.53 | 32 | 93 | 101 | 14,150 | 2 |
|
||||
| 27 | [F4飞控-适配DOBBY四轴无刷机架](https://oshwhub.com/xiao5333/F4fei-kong-shi-pei-DOBBYsi-zhou-)<br>[`855bf2c3…`](../data/raw/oshwhub/855bf2c36ffb4d4da4e4552b909937a0/) | [xiao5333](https://oshwhub.com/xiao5333) | GPL 3.0 | 📎 attachments-only | — | 30 | 63 | 16 | 7,418 | 3 |
|
||||
| 28 | [STM32H743飞控](https://oshwhub.com/yang_xw0011/STM32H743fei-kong)<br>[`511e178a…`](../data/raw/oshwhub/511e178ad2e04bc7a70b588429530901/) | [自动挖掘机](https://oshwhub.com/yang_xw0011) | MIT | 📎 attachments-only | — | 30 | 55 | 11 | 14,136 | 1 |
|
||||
| 29 | [AT32F435mini飞控](https://oshwhub.com/pdwdw/at32f435mini)<br>[`2393aa2d…`](../data/raw/oshwhub/2393aa2df637442c88c9a1db9283bacb/) | [辉光管](https://oshwhub.com/pdwdw) | LGPL 3.0 | ✅ 2 docs | 6.5.22 | 29 | 68 | 58 | 10,081 | 1 |
|
||||
| 30 | [M8N GPS北斗集成5883罗盘](https://oshwhub.com/humphreylin/m8n-gps)<br>[`771611ba…`](../data/raw/oshwhub/771611ba49464cddaf455d4180f6dcef/) | [HumphreyLin](https://oshwhub.com/humphreylin) | GPL 3.0 | ✅ 2 docs | 6.5.23 | 28 | 67 | 54 | 11,057 | 2 |
|
||||
| 31 | [P900数传电台](https://oshwhub.com/yang_xw0011/P900shuo-zhuan-dian-tai)<br>[`78dd4bf7…`](../data/raw/oshwhub/78dd4bf7e1c94c1e82b34c5509874cc6/) | [自动挖掘机](https://oshwhub.com/yang_xw0011) | MIT | 📎 attachments-only | — | 28 | 48 | 20 | 7,483 | 2 |
|
||||
| 32 | [MWC飞控 (arduino)](https://oshwhub.com/lantianyu/mwc-fei-kong_copy)<br>[`d98362d9…`](../data/raw/oshwhub/d98362d96dec4952877c780682480425/) | [繁星*兮雨](https://oshwhub.com/lantianyu) | unknown | ✅ 3 docs | 6.4.2 | 26 | 75 | 42 | 10,087 | 1 |
|
||||
| 33 | [F411固定翼小飞控](https://oshwhub.com/ss2s/f411-gu-ding-yi-xiao-fei-kong)<br>[`22667286…`](../data/raw/oshwhub/22667286817e4541bad270659d826c23/) | [ss2s](https://oshwhub.com/ss2s) | GPL 3.0 | ✅ 6 docs | 6.5.25 | 25 | 78 | 84 | 7,249 | 1 |
|
||||
| 34 | [菜鸟F405飞控](https://oshwhub.com/vyvb/cai-niao-405-fei-kong)<br>[`88504826…`](../data/raw/oshwhub/8850482672624280a15fe8e504c2fe5e/) | [一只只吃不睡的猫](https://oshwhub.com/vyvb) | Public Domain | ✅ 11 docs | 6.5.22 | 23 | 57 | 75 | 5,958 | 1 |
|
||||
| 35 | [【2023电赛】电赛 · Drone-duino基于ESP32的无人机](https://oshwhub.com/balala-the-first/NUEDC-Drone)<br>[`967b8688…`](../data/raw/oshwhub/967b8688006d4add9cbe1ded0c078744/) | [巴啦啦一号](https://oshwhub.com/balala-the-first) | GPL 3.0 | ✅ 2 docs | 6.5.29 | 23 | 53 | 7 | 9,431 | 1 |
|
||||
| 36 | [M8030_GPS模块30孔](https://oshwhub.com/humphreylin/gps-mu-kuai-30-kong)<br>[`7c227fd5…`](../data/raw/oshwhub/7c227fd50bcd410fbfec06823bc17bd7/) | [HumphreyLin](https://oshwhub.com/humphreylin) | GPL 3.0 | ✅ 2 docs | 6.5.27 | 22 | 67 | 31 | 10,395 | 4 |
|
||||
| 37 | [GLDrone_PX4_R329](https://oshwhub.com/guanglun/gldrone_px4_r329)<br>[`1e07c432…`](../data/raw/oshwhub/1e07c432fe174955bc2a015bc96fae8a/) | [guanglun](https://oshwhub.com/guanglun) | MIT | ✅ 8 docs | 6.4.31 | 22 | 47 | 42 | 7,383 | 3 |
|
||||
| 38 | [17元固定翼飞控,双层板、单面布局](https://oshwhub.com/fgdfhdr/kai-yuan-15-yuan-gu-ding-yi-fei-kong)<br>[`41dbabaa…`](../data/raw/oshwhub/41dbabaaf5f04a8385d5eb701246bbb3/) | [荣妹儿科技](https://oshwhub.com/fgdfhdr) | GPL 3.0 | ✅ 1 docs | 6.5.39 | 22 | 39 | 31 | 3,134 | 1 |
|
||||
| 39 | [Maruko小四轴飞控](https://oshwhub.com/chocolatem/maruko)<br>[`1f574fed…`](../data/raw/oshwhub/1f574fed507041ab99b08ecce0c187db/) | [大丸子](https://oshwhub.com/chocolatem) | BSD | ✅ 2 docs | 6.5.27 | 21 | 58 | 19 | 14,202 | 2 |
|
||||
| 40 | [2023年G题【空地协同智能消防系统】打飞控的](https://oshwhub.com/px4yyds/flight)<br>[`6aa77666…`](../data/raw/oshwhub/6aa77666cf3344fcb549249b24cf81e8/) | [打飞控的](https://oshwhub.com/px4yyds) | GPL 3.0 | ✅ 2 docs | 6.5.34 | 21 | 61 | 6 | 9,034 | 1 |
|
||||
| 41 | [Flying-RC_F405-SE-v2.0 F405飞控](https://oshwhub.com/hljjmsr/flying-rc_f405-se-v2-0)<br>[`db13a559…`](../data/raw/oshwhub/db13a559a8ff42d2a5ebe462a8d42cd8/) | [hljjmsr](https://oshwhub.com/hljjmsr) | GPL 3.0 | ✅ 4 docs | 6.4.25 | 21 | 46 | 30 | 12,651 | 1 |
|
||||
| 42 | [萝丽三代遥控万用改装板](https://oshwhub.com/onlylgb/loli-zui-xiao-ban)<br>[`44b3175b…`](../data/raw/oshwhub/44b3175b9aae45acb274d626c1c44d0c/) | [onlylgb](https://oshwhub.com/onlylgb) | LGPL | ✅ 4 docs | 6.5.27 | 20 | 48 | 39 | 5,226 | 2 |
|
||||
| 43 | [SA380开源无人机](https://oshwhub.com/sora380/fei-kong-2024)<br>[`feaac332…`](../data/raw/oshwhub/feaac33200624098bd924a0e381c9314/) | [Sora380](https://oshwhub.com/sora380) | GPL 3.0 | ✅ 5 docs | 6.5.43 | 19 | 36 | 17 | 4,319 | 1 |
|
||||
| 44 | [FlyingRC-F4Wing-MK2](https://oshwhub.com/hljjmsr/flyingrc-f4wing-mk2)<br>[`59710834…`](../data/raw/oshwhub/597108341aa64e6e8ec6979fd3842403/) | [hljjmsr](https://oshwhub.com/hljjmsr) | GPL 3.0 | ✅ 10 docs | 6.5.9 | 19 | 28 | 23 | 5,651 | 1 |
|
||||
| 45 | [f103飞控](https://oshwhub.com/heiyoo/f103-fei-kong)<br>[`0a2640a3…`](../data/raw/oshwhub/0a2640a3779b4ca29c9e247acecc7e4d/) | [heiyoo](https://oshwhub.com/heiyoo) | Public Domain | ✅ 6 docs | 6.4.25 | 19 | 47 | 12 | 8,329 | 0 |
|
||||
| 46 | [控制类+飞控类+电源类+openmv一体化双核主控板](https://oshwhub.com/666666666666/kong-zhi-lei-fei-kong-lei-dian-yuan-lei-openmv-yi-ti-hua-shuang-hu-zhu-kong-ban)<br>[`6bb663af…`](../data/raw/oshwhub/6bb663af9d8b4ebe8ff124827eef99c3/) | [666666666666](https://oshwhub.com/666666666666) | unknown | ✅ 2 docs | 6.2.31 | 18 | 63 | 16 | 9,435 | 2 |
|
||||
| 47 | [esp8266陀螺仪飞控](https://oshwhub.com/tgjohn/esp8266-tuo-luo-yi-fei-kong_copy)<br>[`65335d91…`](../data/raw/oshwhub/65335d9112d54952974fa1118adb91d8/) | [tgjohn](https://oshwhub.com/tgjohn) | Public Domain | ✅ 4 docs | 6.5.23 | 18 | 32 | 9 | 5,670 | 1 |
|
||||
| 48 | [航模遥控器用单通道实现用按键控制选择飞控的8种模式电路](https://oshwhub.com/baihe6600/dan-tong-dao-shi-xian-yong-an-jian-kong-zhi-xuan-zhai-8-zhong-mu-shi-dian-lu)<br>[`aae761ed…`](../data/raw/oshwhub/aae761ed020849a39161569468190dd8/) | [荒野老白](https://oshwhub.com/baihe6600) | Public Domain | ✅ 2 docs | 6.5.3 | 17 | 37 | 10 | 7,258 | 3 |
|
||||
| 49 | [AT32国产飞控 两层单面便于手搓版](https://oshwhub.com/cai20070410/at32f437-fei-kong)<br>[`5525d220…`](../data/raw/oshwhub/5525d220614d4bc391d7ec21f7b47dca/) | [cai](https://oshwhub.com/cai20070410) | GPL 3.0 | ✅ 7 docs | 6.5.28 | 17 | 31 | 21 | 8,330 | 1 |
|
||||
| 50 | [FlyingRC-F405-SLEEK-V1.0](https://oshwhub.com/hljjmsr/flyingrc-f405-sleek-v1-0)<br>[`12df52a6…`](../data/raw/oshwhub/12df52a6905f47cba2585d0c5145ab93/) | [hljjmsr](https://oshwhub.com/hljjmsr) | GPL 3.0 | ✅ 9 docs | 6.5.5 | 16 | 37 | 43 | 7,966 | 3 |
|
||||
| 51 | [飞控隔板30x30](https://oshwhub.com/vinvaa/fei-kong-ge-ban-30x30)<br>[`4579b351…`](../data/raw/oshwhub/4579b351047f4acfb9bbc67e0204fc4e/) | [vinvaa & xi0n9Fpv](https://oshwhub.com/vinvaa) | GPL 3.0 | ✅ 1 docs | 6.5.23 | 15 | 25 | 11 | 2,253 | 1 |
|
||||
| 52 | [100A电流检测模块](https://oshwhub.com/HumphreyLin/100a-dian-liu-ji)<br>[`0e155b75…`](../data/raw/oshwhub/0e155b75aeec408e9341221affd9f174/) | [HumphreyLin](https://oshwhub.com/HumphreyLin) | GPL 3.0 | ✅ 2 docs | 6.5.5 | 14 | 38 | 16 | 6,384 | 3 |
|
||||
| 53 | [LED航灯WS2812](https://oshwhub.com/caisheng/chuan-yue-jiled-hang-dengws2812)<br>[`abc4175d…`](../data/raw/oshwhub/abc4175dee5f4d1b9755ac10185cc1be/) | [蔡子](https://oshwhub.com/caisheng) | MIT | ✅ 5 docs | 6.4.25 | 14 | 37 | 12 | 4,593 | 0 |
|
||||
| 54 | [FlyingRC_AT32_FC-V0.1](https://oshwhub.com/hljjmsr/flyingrc_at32_fc-v0-1)<br>[`ed9da861…`](../data/raw/oshwhub/ed9da86147f842b6b3d1971efedb6b63/) | [hljjmsr](https://oshwhub.com/hljjmsr) | GPL 3.0 | ✅ 9 docs | 6.5.22 | 12 | 24 | 24 | 3,514 | 1 |
|
||||
| 55 | [F405-Wing 0603 mk4飞控](https://oshwhub.com/yuanfpv/f405-wing)<br>[`44d54988…`](../data/raw/oshwhub/44d54988eb9b4728baa5425d1f8d4909/) | [YuanCoding](https://oshwhub.com/yuanfpv) | GPL 3.0 | ✅ 15 docs | 6.5.23 | 9 | 32 | 34 | 4,933 | 1 |
|
||||
| 56 | [空心杯AIO飞控(stm32f103c8t6主控)](https://oshwhub.com/hechuzhiyou/kong-xin-bei-AIOfei-kong-stm32f1)<br>[`6d3086f1…`](../data/raw/oshwhub/6d3086f16a3d4f01a45f227b562c7395/) | [hechuzhiyou](https://oshwhub.com/hechuzhiyou) | GPL 3.0 | ✅ 3 docs | 6.5.23 | 9 | 40 | 33 | 8,179 | 0 |
|
||||
| 57 | [acododaF7mini固定翼适用分电板V1.1](https://oshwhub.com/InFinityGamer/acododaf7mini-gu-ding-yi-shi-yong-fen-dian-ban_copy)<br>[`34ff342c…`](../data/raw/oshwhub/34ff342c4f4945489f5e82f560ffbe35/) | [InFinityGamer](https://oshwhub.com/InFinityGamer) | GPL 3.0 | ✅ 2 docs | 6.4.32 | 8 | 21 | 18 | 3,041 | 3 |
|
||||
| 58 | [AT32固定翼飞控配套2~12s 3A BEC 电流计小板](https://oshwhub.com/pdwdw/3A-bec)<br>[`3c08c82c…`](../data/raw/oshwhub/3c08c82cf217422281865d44586aaad5/) | [辉光管](https://oshwhub.com/pdwdw) | GPL 3.0 | ✅ 2 docs | 6.5.22 | 8 | 21 | 16 | 3,705 | 1 |
|
||||
| 59 | [FlyingRC-F4swamp-V1.0](https://oshwhub.com/hljjmsr/flyingrc-f4swamp-v1-0)<br>[`a2096bc0…`](../data/raw/oshwhub/a2096bc0c616444d9d386eb89862611e/) | [hljjmsr](https://oshwhub.com/hljjmsr) | GPL 3.0 | ✅ 10 docs | 6.5.1 | 8 | 9 | 9 | 1,777 | 0 |
|
||||
| 60 | [MPU6050姿态传感模块](https://oshwhub.com/ld_xk/mpu6050-zi-tai-chuan-gan-mu-kuai)<br>[`19dc7dd5…`](../data/raw/oshwhub/19dc7dd513c5477c93b33f41993003e3/) | [ld_xk](https://oshwhub.com/ld_xk) | GPL 3.0 | ✅ 2 docs | 6.4.7 | 7 | 24 | 14 | 7,133 | 2 |
|
||||
| 61 | [管爷f437mini(未验证)](https://oshwhub.com/wszq/guan-ye-f437mini_copy)<br>[`5ca34de0…`](../data/raw/oshwhub/5ca34de062904302a4209193309792b8/) | [本堂町小春](https://oshwhub.com/wszq) | GPL 3.0 | ✅ 2 docs | 6.5.29 | 7 | 7 | 0 | 1,870 | 1 |
|
||||
| 62 | [F4v3ProMini](https://oshwhub.com/wl177/f4v3promini)<br>[`429c8455…`](../data/raw/oshwhub/429c8455a41d40ca941841983e8cacd9/) | [wl177](https://oshwhub.com/wl177) | GPL 3.0 | ✅ 2 docs | 6.5.28 | 7 | 15 | 11 | 2,103 | 1 |
|
||||
| 63 | [(新)AT32AIO 20孔飞控板V2](https://oshwhub.com/cai20070410/at32-20-kong-aio-fei-kong-ban_copy)<br>[`4b1becb0…`](../data/raw/oshwhub/4b1becb00f4d4c65832451d2e7f49d5f/) | [cai](https://oshwhub.com/cai20070410) | CC BY-NC-SA 4.0 | ✅ 2 docs | 6.5.51 | 6 | 11 | 16 | 796 | 1 |
|
||||
| 64 | [F405火箭飞控板载ELRS数传](https://oshwhub.com/cai20070410/f405-huo-jian-fei-kong-50-63)<br>[`246a02b1…`](../data/raw/oshwhub/246a02b1831c454a9d7ad54e148d7986/) | [cai](https://oshwhub.com/cai20070410) | GPL 3.0 | ✅ 6 docs | 6.5.40 | 6 | 33 | 28 | 3,376 | 1 |
|
||||
| 65 | [穿越机飞控飞固定翼 分电板带电流计](https://oshwhub.com/zl4430/fei-kong-dian-liu-ji)<br>[`c5b584cc…`](../data/raw/oshwhub/c5b584cc76684301b11c91798db939d2/) | [左手DIY](https://oshwhub.com/zl4430) | Public Domain | ✅ 2 docs | 6.5.37 | 6 | 18 | 11 | 3,310 | 1 |
|
||||
| 66 | [GLDRONE_ESP32_PX4_PICO](https://oshwhub.com/guanglun/gldrone_esp32_px4_pico)<br>[`80917167…`](../data/raw/oshwhub/80917167bd054411912962e3e4252bad/) | [guanglun](https://oshwhub.com/guanglun) | MIT | ✅ 7 docs | 6.5.15 | 5 | 8 | 6 | 2,135 | 1 |
|
||||
| 67 | [HyFlightctrl](https://oshwhub.com/Hyacincher/HyFlightctrl)<br>[`61f8b9f8…`](../data/raw/oshwhub/61f8b9f8c1f14471933abfa307bf2d90/) | [Hyacincher](https://oshwhub.com/Hyacincher) | GPL 3.0 | ✅ 3 docs | 6.4.25 | 4 | 12 | 10 | 1,757 | 3 |
|
||||
| 68 | [Swift F405 固定翼飞控 V1.0](https://oshwhub.com/airbus15/matek-f405-wse-hua-xiang-ji-fei-kong-v1-0)<br>[`dce335ad…`](../data/raw/oshwhub/dce335ad0d0c43cfba93bf8d2a142acc/) | [AIRBUS15](https://oshwhub.com/airbus15) | GPL 3.0 | ✅ 6 docs | 6.5.46 | 4 | 15 | 18 | 1,355 | 1 |
|
||||
| 69 | [电动涵道飞控公开](https://oshwhub.com/littlesunny2001/flycontrol_copy)<br>[`b5c7cd3c…`](../data/raw/oshwhub/b5c7cd3c3758432f909a8eb2f829358f/) | [littlesunny2001](https://oshwhub.com/littlesunny2001) | GPL 3.0 | ✅ 2 docs | 6.5.5 | 4 | 10 | 2 | 1,852 | 0 |
|
||||
| 70 | [V3s_FlyController](https://oshwhub.com/Nccer/my_v3s_copy)<br>[`6e222e8c…`](../data/raw/oshwhub/6e222e8ca40549009c60f5892f4e37fd/) | [Nccer](https://oshwhub.com/Nccer) | GPL 3.0 | ✅ 3 docs | 6.5.1 | 4 | 7 | 2 | 2,288 | 0 |
|
||||
| 71 | [MATEK F405 WSE 滑翔机飞控主控板部分](https://oshwhub.com/airbus15/matek-f405-wse-fc)<br>[`7ced1bbf…`](../data/raw/oshwhub/7ced1bbf350443938663c53151583a93/) | [AIRBUS15](https://oshwhub.com/airbus15) | GPL 3.0 | ✅ 4 docs | 6.5.46 | 3 | 5 | 5 | 570 | 1 |
|
||||
| 72 | [F405-Wing-usb](https://oshwhub.com/yuanfpv/f405-wing-usb)<br>[`03983a6a…`](../data/raw/oshwhub/03983a6a52df4d9d8115a4a0fe8ca830/) | [YuanCoding](https://oshwhub.com/yuanfpv) | GPL 3.0 | ✅ 2 docs | 6.5.23 | 3 | 2 | 12 | 1,780 | 1 |
|
||||
| 73 | [MWC_AIRPLANE_V2](https://oshwhub.com/thecrazyboy/mwc_airplane_copy)<br>[`2e6315ee…`](../data/raw/oshwhub/2e6315eee4944072a6e408b0951c74f2/) | [thecrazyboy](https://oshwhub.com/thecrazyboy) | GPL 3.0 | ✅ 6 docs | 6.4.7 | 2 | 4 | 6 | 1,312 | 1 |
|
||||
| 74 | [MWC_AIRPLANE_V3](https://oshwhub.com/thecrazyboy/mwc_airplane_copy_copy)<br>[`792d7ef0…`](../data/raw/oshwhub/792d7ef0379641f3b853b6c2143b4235/) | [thecrazyboy](https://oshwhub.com/thecrazyboy) | GPL 3.0 | ✅ 7 docs | 6.4.17 | 1 | 7 | 5 | 1,930 | 2 |
|
||||
| 75 | [IST8310外置罗盘](https://oshwhub.com/airbus15/ist8310-luo-pan)<br>[`91a69b9f…`](../data/raw/oshwhub/91a69b9fbe8841cdb8d73c5bea93158d/) | [AIRBUS15](https://oshwhub.com/airbus15) | GPL 3.0 | ✅ 3 docs | 6.5.34 | 1 | 6 | 6 | 495 | 1 |
|
||||
| 76 | [Lora1280_Radio](https://oshwhub.com/qjay/lora1280radio)<br>[`99618f1e…`](../data/raw/oshwhub/99618f1edce54a258388688ae1c2c15d/) | [qjay](https://oshwhub.com/qjay) | Public Domain | ✅ 5 docs | 6.5.28 | 1 | 3 | 0 | 1,083 | 1 |
|
||||
| 77 | [MATEK F405 WSE 滑翔机飞控电源板部分](https://oshwhub.com/airbus15/matek-f405-wse-hua-xiang-ji-fei-kong-dian-yuan-ban-bu-fen)<br>[`025eab68…`](../data/raw/oshwhub/025eab68656a4f80992a8349ffc3ecb4/) | [AIRBUS15](https://oshwhub.com/airbus15) | GPL 3.0 | ✅ 3 docs | 6.5.46 | 0 | 3 | 1 | 397 | 1 |
|
||||
| 78 | [MATEK F405 WSE 飞控USB板部分](https://oshwhub.com/airbus15/matek-f405-wse-fei-kong-usb-ban-bu-fen)<br>[`8ee22e5a…`](../data/raw/oshwhub/8ee22e5a5bf9430ab1b87d738eca794c/) | [AIRBUS15](https://oshwhub.com/airbus15) | GPL 3.0 | ✅ 2 docs | 6.5.46 | 0 | 2 | 0 | 320 | 1 |
|
||||
| 79 | [m1_mh743_ada_v4](https://oshwhub.com/JumperShao/m1_mh743_ada_v4)<br>[`21817f8f…`](../data/raw/oshwhub/21817f8fcf2d4e36b96f8e00c33a5c93/) | [JumperShao](https://oshwhub.com/JumperShao) | GPL 3.0 | ✅ 1 docs | 6.4.31 | 0 | 1 | 2 | 1,074 | 0 |
|
||||
|
||||
## License 分布
|
||||
|
||||
- `GPL 3.0` — 50
|
||||
- `Public Domain` — 10
|
||||
- `MIT` — 8
|
||||
- `CC-BY-NC-SA 3.0` — 2
|
||||
- `LGPL 3.0` — 2
|
||||
- `CC BY-NC-SA 4.0` — 2
|
||||
- `unknown` — 2
|
||||
- `CC BY-NC 3.0` — 1
|
||||
- `BSD` — 1
|
||||
- `LGPL` — 1
|
||||
|
||||
## Editor 版本分布(有源工程的项目)
|
||||
|
||||
- `6.5.23` — 9
|
||||
- `6.4.25` — 6
|
||||
- `6.5.34` — 6
|
||||
- `6.5.22` — 5
|
||||
- `6.5.46` — 5
|
||||
- `6.4.31` — 4
|
||||
- `6.4.7` — 4
|
||||
- `6.5.29` — 4
|
||||
- `6.5.15` — 3
|
||||
- `6.5.27` — 3
|
||||
- `6.5.28` — 3
|
||||
- `6.5.5` — 3
|
||||
- `6.5.1` — 2
|
||||
- `6.5.39` — 2
|
||||
- `6.5.40` — 2
|
||||
- `6.2.31` — 1
|
||||
- `6.3.35` — 1
|
||||
- `6.3.53` — 1
|
||||
- `6.4.17` — 1
|
||||
- `6.4.2` — 1
|
||||
- `6.4.30` — 1
|
||||
- `6.4.32` — 1
|
||||
- `6.5.25` — 1
|
||||
- `6.5.3` — 1
|
||||
- `6.5.37` — 1
|
||||
- `6.5.43` — 1
|
||||
- `6.5.51` — 1
|
||||
- `6.5.8` — 1
|
||||
- `6.5.9` — 1
|
||||
|
||||
## 重新生成
|
||||
|
||||
```bash
|
||||
uv run python scripts/build_feikong_index.py
|
||||
```
|
||||
144
docs/std_corpus_2026-05.md
Normal file
144
docs/std_corpus_2026-05.md
Normal file
@@ -0,0 +1,144 @@
|
||||
# oshwhub Std corpus 交付(2026-05 快照)
|
||||
|
||||
**快照时间**:2026-05-03
|
||||
**数据源**:oshwhub.com(origin=std)
|
||||
**用途**:研究用,不再分发;下游同学批量接入 EPRO2/Std → KiCad / Wokwi pipeline
|
||||
|
||||
---
|
||||
|
||||
## 总览
|
||||
|
||||
| 项 | 值 |
|
||||
|---|---:|
|
||||
| oshwhub Std 项目总数(origin=std) | **12,493** |
|
||||
| 含完整可编辑器源工程 | **12,166(97.4%)** |
|
||||
| 仅 metadata + 附件(upstream 没编辑器 session) | 327(2.6%) |
|
||||
| sch + pcb doc 总数(多页累加) | **30,488** |
|
||||
| 源工程文件体积(`.json` 解码后) | 11.79 GB |
|
||||
| 上游 listing pool 覆盖率 | 12,493 / 12,493 = **100%** |
|
||||
|
||||
---
|
||||
|
||||
## 按批次
|
||||
|
||||
| 批次 | 项目数 | 有源 | attach_only | docs | 选取规则 |
|
||||
|---|---:|---:|---:|---:|---|
|
||||
| `batch_early_std` | 112 | 108 | 4 | 427 | 早期混抓(Pro 同期顺手抓的 std)|
|
||||
| `batch1000_std` | 1,000 | 963 | 37 | 2,853 | A 档头部,like p50=43 |
|
||||
| `batch4000_std` | 4,000 | 3,884 | 116 | 10,100 | A 档剩余 + B + C 头 |
|
||||
| `batch_remaining_a_std` | 3,691 | 3,641 | 50 | 8,877 | rank 中段 |
|
||||
| `batch_remaining_b_std` | 3,690 | 3,570 | 120 | 8,231 | 长尾(grade 0/1)|
|
||||
| **合计** | **12,493** | **12,166** | **327** | **30,488** | |
|
||||
|
||||
---
|
||||
|
||||
## License 分布(top 12)
|
||||
|
||||
| 数 | 占比 | License |
|
||||
|---:|---:|---|
|
||||
| 7,050 | 56.4% | GPL 3.0 |
|
||||
| 2,384 | 19.1% | Public Domain |
|
||||
| 543 | 4.3% | CC-BY-NC-SA 3.0 |
|
||||
| 507 | 4.1% | unknown |
|
||||
| 377 | 3.0% | MIT |
|
||||
| 156 | 1.2% | MIT License(同 MIT,立创平台没归一)|
|
||||
| 147 | 1.2% | CC BY-NC-SA 4.0 |
|
||||
| 147 | 1.2% | BSD |
|
||||
| 144 | 1.2% | CERN Open Hardware License |
|
||||
| 140 | 1.1% | LGPL 3.0 |
|
||||
| 136 | 1.1% | CC-BY-NC 3.0 |
|
||||
| 132 | 1.1% | CC BY-NC-SA 3.0 |
|
||||
| 630 | 5.0% | 其它 21 种(含 TAPR / CC BY / CC0 / null …)|
|
||||
|
||||
> 下游做 license 归一化白名单时,正向许可可见 6 类:MIT / BSD / Apache / CC0 / CC-BY / Public Domain。注意 license 字段保留原始字符串,未做归一化("MIT" 与 "MIT License" 视为不同 key)。
|
||||
|
||||
---
|
||||
|
||||
## EasyEDA Std editor 版本(top 10,含源工程的 12,166 项里统计)
|
||||
|
||||
| 数 | 占比 | 版本 |
|
||||
|---:|---:|---|
|
||||
| 1,192 | 9.8% | 6.4.25 |
|
||||
| 906 | 7.4% | 6.4.7 |
|
||||
| 678 | 5.6% | 6.5.5 |
|
||||
| 564 | 4.6% | 6.5.15 |
|
||||
| 535 | 4.4% | 6.5.22 |
|
||||
| 447 | 3.7% | 6.4.20.6 |
|
||||
| 403 | 3.3% | 6.5.1 |
|
||||
| 355 | 2.9% | 6.5.23 |
|
||||
| 350 | 2.9% | 6.5.34 |
|
||||
| 327 | 2.7% | 6.5.28 |
|
||||
|
||||
剩余分布在 6.3.x ~ 6.5.4x 全谱系。下游 parser 按 6.4.x / 6.5.x 主版本分支处理即可。
|
||||
|
||||
---
|
||||
|
||||
## 数据交付
|
||||
|
||||
### 双桶副本(腾讯云 COS)
|
||||
|
||||
| Region | Bucket |
|
||||
|---|---|
|
||||
| ap-guangzhou | `facere-gz-1321068335` |
|
||||
| ap-singapore | `facere-1321068335` |
|
||||
|
||||
### Singapore 区直链下载(30 天有效,2026-06-02 过期)
|
||||
|
||||
| 对象 key | 大小 | 项目数 | 直链 |
|
||||
|---|---:|---:|---|
|
||||
| `batch_early_std.zip` | 93 MB | 112 | [download](https://facere-1321068335.cos.ap-singapore.myqcloud.com/batch_early_std.zip?q-sign-algorithm=sha1&q-ak=AKID6HF1bx6A3jCSXP3UjneIjwwj7JJ8kANN&q-sign-time=1777776835%3B1780368895&q-key-time=1777776835%3B1780368895&q-header-list=host&q-url-param-list=&q-signature=09bf61ec57fbe8d758397c73d981faff47e1086e) |
|
||||
| `batch1000_std.zip` | 471 MB | 1,000 | [download](https://facere-1321068335.cos.ap-singapore.myqcloud.com/batch1000_std.zip?q-sign-algorithm=sha1&q-ak=AKID6HF1bx6A3jCSXP3UjneIjwwj7JJ8kANN&q-sign-time=1777776835%3B1780368895&q-key-time=1777776835%3B1780368895&q-header-list=host&q-url-param-list=&q-signature=fd003a27c831c0c0337615b36e7f697159f4f83e) |
|
||||
| `batch4000_std.zip` | 1,378 MB | 4,000 | [download](https://facere-1321068335.cos.ap-singapore.myqcloud.com/batch4000_std.zip?q-sign-algorithm=sha1&q-ak=AKID6HF1bx6A3jCSXP3UjneIjwwj7JJ8kANN&q-sign-time=1777776835%3B1780368895&q-key-time=1777776835%3B1780368895&q-header-list=host&q-url-param-list=&q-signature=427b5f15f2888f630c91b5ca5e0107b2d6b15c4c) |
|
||||
| `batch_remaining_a.zip` | 1,065 MB | 3,691 | [download](https://facere-1321068335.cos.ap-singapore.myqcloud.com/batch_remaining_a.zip?q-sign-algorithm=sha1&q-ak=AKID6HF1bx6A3jCSXP3UjneIjwwj7JJ8kANN&q-sign-time=1777776835%3B1780368895&q-key-time=1777776835%3B1780368895&q-header-list=host&q-url-param-list=&q-signature=9fa2744d879bd17842129396b2656cb1f56ae81b) |
|
||||
| `batch_remaining_b.zip` | 891 MB | 3,690 | [download](https://facere-1321068335.cos.ap-singapore.myqcloud.com/batch_remaining_b.zip?q-sign-algorithm=sha1&q-ak=AKID6HF1bx6A3jCSXP3UjneIjwwj7JJ8kANN&q-sign-time=1777776835%3B1780368895&q-key-time=1777776835%3B1780368895&q-header-list=host&q-url-param-list=&q-signature=f5cfa3b6010ac2fd81df36c61e64e9da2d68d8fa) |
|
||||
| **合计** | **3,898 MB** | **12,493** | |
|
||||
|
||||
直链特性:
|
||||
- presigned URL,30 天有效(到 **2026-06-02 ~17:14 UTC** 失效)
|
||||
- URL 内嵌 `q-ak`(COS access key id,公开标识,不是密钥),不含 SecretKey
|
||||
- 任何能访问公网的机器 `wget` / `curl -O` 即可
|
||||
- 失效后联系我重新签发;URL 本身不可续期
|
||||
|
||||
下载示例:
|
||||
```bash
|
||||
wget -O batch1000_std.zip 'https://facere-1321068335.cos.ap-singapore.myqcloud.com/batch1000_std.zip?...'
|
||||
```
|
||||
|
||||
或用 coscmd(需要凭据):
|
||||
```bash
|
||||
coscmd download batch1000_std.zip ./batch1000_std.zip
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 解压后单项目目录结构
|
||||
|
||||
每个 zip 解开后落到 `data/raw/oshwhub/<project_uuid>/`:
|
||||
|
||||
```
|
||||
data/raw/oshwhub/<uuid>/
|
||||
├── metadata.json # 统一 schema,见 schemas/project.schema.json
|
||||
├── description.md # 标题 + 简介 + license
|
||||
├── cover.{jpg,png} # 封面图(如果上游有)
|
||||
├── _urls.json # 原始 URL 集合
|
||||
└── source/ # EasyEDA Std 源工程(含完整源的项目才有)
|
||||
├── <doc_uuid_1>.json
|
||||
├── <doc_uuid_2>.json
|
||||
└── ...
|
||||
```
|
||||
|
||||
`source/*.json` 是 EasyEDA Std API 返回的 dataStr:
|
||||
- `result.docType` = 1(schematic)/ 3(PCB)/ 2(symbol library)
|
||||
- `result.dataStr.shape[]` = `VERB~field1~field2~...` 串数组(LIB / W / N / TRACK / VIA / COPPERAREA …)
|
||||
- `result.dataStr.canvas` / `layers` / `head`(含 editorVersion)
|
||||
|
||||
下游 EPRO2/Std → KiCad / Wokwi 适配代码已经在 `tools/epro2/std/` 走通,参考 `docs/sources/epro2_to_std_mapping.md` 看字段映射。
|
||||
|
||||
---
|
||||
|
||||
## 注意事项
|
||||
|
||||
- **327 项 attach_only**:upstream API 返空 `documents`,多为早期纯 PCB 上传 / 项目废弃;保留了 metadata + 附件 URL,没有可编辑器源
|
||||
- **license 未归一化**:保留 oshwhub 原始字段值;下游做白名单过滤时注意大小写 / 空格 / 同义词(如 "MIT" vs "MIT License" vs "mit")
|
||||
- **小批次(< 100 项)抽样验证**:建议下游先抽 `batch1000_std.zip` 跑通解析 pipeline,确认无误再吃全量
|
||||
- **重新签发 URL**:临时脚本 `/tmp/gen_urls.py`(dev1 + SG box 都有),改 `TTL` 后重跑
|
||||
210
log.md
210
log.md
@@ -4,6 +4,216 @@
|
||||
|
||||
---
|
||||
|
||||
## 2026-05-03 07:17 batch-remaining-std:扫完所有未抓 std 项目(7,381),双桶副本
|
||||
|
||||
**Claude 会话**
|
||||
|
||||
收尾批:把 unfetched std 池子(7,381 项)一次扫完。拆 A/B 两批 ~3690 each,按 rank 50/50 切(A 头部、B 长尾),**取消单作者上限 2**(这是 sweep 全量,不需要再做多样性约束)。两批走完整 1-4 步 + zip + 双桶推送。
|
||||
|
||||
### 候选筛选
|
||||
- A:top 3691 by rank(grade 0-4 都有,likes p50=8 / p90=29 / max=275)
|
||||
- B:bottom 3690(几乎全 grade 0/1,likes p50=1 / p90=4 / max=21)
|
||||
- 候选 jsonl:`data/state/oshwhub_remaining_{a,b}_std_candidates.jsonl`
|
||||
|
||||
### 第一轮 driver bug 全军覆没(必读)
|
||||
**症状**:driver 跑了 26 min "顺利完成",但所有 7,381 项 source 都 0——`source_documents=[]` 全空。两个 zip 才 7 MB / 6.8 MB(只 metadata + description,没 source)。
|
||||
|
||||
**根因**:driver 里 Step 4 用 `python3 - <<PYEOF` 而不是 `uv run python -u -`。
|
||||
- Step 1(`uv run -m crawlers.oshwhub`)走的是项目 venv,httpx 在
|
||||
- Step 4 用 system python3,**`crawlers.oshwhub.crawler` 第一行 `import httpx` 直接 ImportError**
|
||||
- `set -uo pipefail` 没设 `-e`,每个 Step 的 stderr 写到日志后继续走,外面看 zip 也成功 / COS 也成功
|
||||
- driver 不会 fail,但源工程 0 拿到
|
||||
|
||||
**教训**:bash heredoc + 多 venv 项目里,**所有依赖项目代码的 Python 调用必须 `uv run`**,仅 stdlib + 系统 pip 包(`qcloud_cos`、`zipfile`)的可以 system python3。下次写 driver 检查时把每个 PYEOF 块对应的 import 列出来对照。
|
||||
|
||||
### Recovery driver
|
||||
重写 `/tmp/recover_driver.sh`:所有 Python 调用改成 `cat > /tmp/step_X.py <<PYEOF ... && uv run python -u /tmp/step_X.py`(避免 heredoc-stdin 路径,文件式更稳)。Step 1/Step 2 已经成功就跳过,只做 Step 4 + retry + zip + COS。
|
||||
|
||||
| 阶段 | 时间 |
|
||||
|---|---:|
|
||||
| RECOVERY START | 06:18:44 |
|
||||
| batch_remaining_a 收工 | 06:48:55(30 min) |
|
||||
| batch_remaining_b 收工 | 07:17:11(28 min) |
|
||||
| **整 recovery 走时** | **58 min** |
|
||||
|
||||
### 完成度
|
||||
| batch | meta | with_source | attach_only | docs | src bytes |
|
||||
|---|---:|---:|---:|---:|---:|
|
||||
| remaining_a | 3,691 | 3,641 (98.6%) | 50 | 8,877 | 3,317 MB |
|
||||
| remaining_b | 3,690 | 3,570 (96.7%) | 120 | 8,231 | 2,783 MB |
|
||||
|
||||
attach_only 比例(A 1.4% / B 3.3%)比 batch-1000 (3.7%)、batch-4000 (0.05%) 没明显异常,D/E tier 项目被废弃 / upstream 删的比例本来就偏高,正常。
|
||||
|
||||
### 双桶最终状态
|
||||
两个桶现在内容完全一致:
|
||||
|
||||
| 对象 | 大小 |
|
||||
|---|---:|
|
||||
| `batch1000_std.zip` | 471 MB |
|
||||
| `batch4000_std.zip` | 1.38 GB |
|
||||
| `batch_remaining_a.zip` | 1.06 GB |
|
||||
| `batch_remaining_b.zip` | 891 MB |
|
||||
| **每桶合计** | **~3.78 GB** |
|
||||
|
||||
走 GZ→SG 服务端 cross-region copy 链路,完全不碰 dev1↔SG 公网丢包链路。100 GB 套餐占 ~7.6 GB(双桶)。
|
||||
|
||||
### 整体 corpus 落幕
|
||||
- listing 里 origin=std 总数:**12,493**
|
||||
- corpus 里 std 项目:12,493(5,112 旧 + 7,381 本批)—— **100% 覆盖**
|
||||
- corpus 总目录数(含 Pro / 早期混抓):12,523
|
||||
- dev1 占盘:13 GB(40 GB 总,余 13 GB / 33% free)
|
||||
- license 主流:约 60% GPL 3.0 + 18% Public Domain + 5% MIT + 5% NC variants(混合 batch-1-4 趋势一致)
|
||||
|
||||
### 决策(Why)
|
||||
- **不设作者上限**:sweep 全量批次,多样性已在 batch-1000 / batch-4000 阶段保证;这里要的是 "全部",不能掉作者。
|
||||
- **batch-A vs batch-B 按 rank 切而不是随机**:万一空间不够,优先保 A(更高质量);实际两批都顺利完成,但万一中断 A 是先做的更稳。
|
||||
- **不删 GZ 桶副本**:用户有 100 GB 套餐,~3.78 GB 双桶舒适;多副本对未来跨区拉取友好。
|
||||
|
||||
### 下一步建议
|
||||
- crawler 加 `--backfill-uuids-file <path>` 选项替代 `--uuids` 字符串,下次大批量不用绕路写 driver 内嵌 Python(参考 `/tmp/backfill_4000.py` 模式可以直接搬进 crawler)
|
||||
- driver 模板加 sanity check:跑完每个 batch 用 `du -sh /tmp/${SHORT}.zip` 与 raw bytes 比,如果压缩比 < 5% 报警(这次的 7 MB zip 用这个能立即抓到)
|
||||
- 全 std corpus 已落地,下次扩量目标应该是 Pro 项目(93 项飞控 Pro 候选还没动)或扩到 oshwhub 之外站点
|
||||
|
||||
---
|
||||
|
||||
## 2026-05-03 03:58 batch-4000-std:Step 1-4 + zip + COS 链路落地 SG box
|
||||
|
||||
**Claude 会话**
|
||||
|
||||
接 batch-1000-std。再扩 4000 项 std → corpus 142 → 1142 → 5142。本批走完整 1-4 步,zip 后通过 COS 跨区链路拉到 SG box 本地(绕开 dev1↔SG 公网丢包链路)。
|
||||
|
||||
### 候选筛选
|
||||
- 数据源同上
|
||||
- A 档(grade≥3 & like≥10)剩 396 项不够 4000,下沉到 unfetched 全池 11,381 按 rank score 倒排,单作者 ≤ 2,取前 4000
|
||||
- 候选 jsonl 落 dev1 `data/state/oshwhub_batch4000_std_candidates.jsonl`
|
||||
- 质量分布:grade 4: 16 / 3: 448 / 2: 1798 / 1: 1319 / 0: 419;likes p50=10 / p90=42(A 档第三梯队 + B + C 头部)
|
||||
|
||||
### 抓取(dev1,concurrency=5)
|
||||
- **Step 1** 详情扫 license:~24 min,3989/4000 OK + 11 fail(全 "Server disconnected"),重抓 concurrency=2 全过 → 4000/4000 metadata
|
||||
- **Step 2** license 盘点:56% GPL 3.0、20% PD、4.8% MIT、4.8% NC-SA、4.3% unknown(unknown 比例比 batch-1000 高,B/C tier 项目 license 标注更随便)
|
||||
- **Step 4** std-source backfill:~31 min,3983 OK + 17 fail
|
||||
- 15 项 "Server disconnected" 瞬态,重抓全过
|
||||
- 2 项 upstream 真实问题:1× `404 文档未找到`(doc 被删),1× `code 104001`(项目封)。这 2 项保留 metadata-only
|
||||
- 最终:4000/4000 metadata · **3998 含完整 sch/pcb 源工程** · 2 metadata-only
|
||||
|
||||
### 关键修:`--uuids` 撞 ARG_MAX
|
||||
- backfill 路径用 `--uuids "$(jq ... | paste -sd,)"`,4000 UUID × 33B ≈ 132 KB > ARG_MAX (128 KiB)
|
||||
- 现象:`bash: /usr/bin/nohup: Argument list too long`,进程没启动,但 pgrep 误匹配 stale shell
|
||||
- 修:临时脚本 `/tmp/backfill_4000.py`,直接 import `crawlers.oshwhub.crawler` 内部函数(`_run_backfill_concurrent` / `fetch_std_source`),UUID 集从 candidates jsonl 读,绕开命令行
|
||||
- 长期:crawler 应加 `--backfill-uuids-file <path>` 选项,下次扩量再改
|
||||
|
||||
### ZIP 打包(dev1)
|
||||
- 4000 dirs,26,098 文件,4,489 MB raw → **1,445 MB zip**,压缩比 32.2%,99 秒完成
|
||||
- 用 Python `zipfile` + `compresslevel=1`(dev1 没装 `zip` 二进制)
|
||||
|
||||
### 传输链路(COS 三段,0 字节走公网丢包链路)
|
||||
| 段 | 时长 | 速度 | 路径 |
|
||||
|---|---:|---:|---|
|
||||
| dev1 → `facere-gz-1321068335` (ap-guangzhou) | 17s | 166 MB/s | 同区内网 |
|
||||
| GZ 桶 → `facere-1321068335` (ap-singapore) | 23s | — | COS 服务端 copy(VM 不参与) |
|
||||
| SG 桶 → SG box | 8.5s | 201 MB/s | 同区内网 |
|
||||
| **整 1.4 GB 跨地域 ~50 秒** | | | |
|
||||
|
||||
哈希校验穿三段:`a79a87e4a3f5dfbad80d9ba94f557b09010e104f6e0c968ea87eba2267b262b3`。
|
||||
|
||||
### 决策(Why)
|
||||
- **rank-score top-4000 不设硬阈值**:硬过滤太挑会漏,rank score 已综合 like\*3 + grade\*50 + views/100 + comments\*2 + fork\*2 + star,自动平衡。最低 like=0 也进了几百项(多数是 grade≥1 但社区互动少的),可接受。
|
||||
- **不传统 scp,走 COS 三段**:之前飞控-77 33 MB scp 走 dev1↔SG 6.5%-loss 链路要 3 min;这次 1.4 GB 走 COS 50 s 完事,提速 ~150×。COS 跨区复制流量计费 ~¥0.5/GB × 1.4 GB ≈ ¥0.7,零头。
|
||||
- **zip vs tar.gz**:zip 选 level=1,速度 vs 体积平衡;tar.gz 单线程 deflate 跟 zip-l1 体积相近但慢 2-3×。
|
||||
|
||||
### 完成度
|
||||
- corpus 由 1142 项扩到 **5142 项**(+4000)
|
||||
- License: 56% GPL 3.0 主流不变,unknown 比例从 0.4% (batch-1000) 涨到 4.3% (batch-4000),与 B/C tier 项目低标注度一致
|
||||
- editor 版本从 6.3 全谱系到 6.5.42 都覆盖到了
|
||||
- 源文件体积:dev1 上 `data/raw/oshwhub/` 占 ~10 GB(含全部历史 + 本批)
|
||||
|
||||
### 下一步建议
|
||||
- corpus 已经达 5142 项,足够下游 EPRO2/Std → KiCad 训练数据规模
|
||||
- 真要继续扩,A+B+C 档已基本吃完头部,下沉 D 档(grade=0 或 like=0)质量回报递减,可暂缓
|
||||
- crawler 加 `--backfill-uuids-file` 选项,避免下次 ARG_MAX 撞墙
|
||||
- COS GZ 桶里的 `batch1000_std.zip` + `batch4000_std.zip` 用完可以删(SG 桶副本足够),节省 ~¥0.2/月 存储费
|
||||
|
||||
---
|
||||
|
||||
## 2026-05-03 batch-1000-std:Step 1-4,1000 块标准板源工程入库(dev1)
|
||||
|
||||
**Claude 会话**
|
||||
|
||||
走 batch-200 脚手架抓 1000 项 std A 档剩量。**用户指令"只走 1-4 步"**:不抓附件、不传 SG、不 push gitea,数据留 dev1。
|
||||
|
||||
### 候选筛选
|
||||
- 数据源:`data/state/oshwhub_listing_full.jsonl`(33,695 项)
|
||||
- 过滤:`origin=std AND grade≥3 AND like≥10`(A 档),减去已抓 142 项 → 池子 1,396 项
|
||||
- 排序:rank score 倒序;单作者 ≤ 2 → 取前 1000(791 唯一作者)
|
||||
- 候选 jsonl 落 dev1 `data/state/oshwhub_batch1000_std_candidates.jsonl`(不入 git,可重算)
|
||||
- like p50=43 / p90=170 / max=420(A 档第三梯队,吃掉 1,396 池子的 ~72%)
|
||||
|
||||
### 抓取(dev1 Guangzhou,concurrency=5)
|
||||
- **Step 1** 详情扫 license:~80s,996/1000 OK + 4 "Server disconnected" 瞬态 fail
|
||||
- 4 项重抓 (concurrency=2) 全 OK → 1000/1000 metadata
|
||||
- **Step 2** license 盘点:57% GPL 3.0、19% PD、8.6% CC-BY-NC-SA、5.4% MIT、其它 < 2%。形态与 batch-50 / batch-200 一致。
|
||||
- **Step 3** SKIP:本批 std-only,没有 Pro 候选
|
||||
- **Step 4** std-source backfill:~6 分钟,1000/1000 OK,0 fail
|
||||
|
||||
### 完成度
|
||||
- 1000/1000 metadata
|
||||
- 963 项有完整 std 源工程(2,853 个 sch+pcb doc,平均 2.96 docs/proj)
|
||||
- 37 项 upstream attachments-only(`source_documents=[]` 真实状态,跟飞控-77 4/77 同形态)
|
||||
- 源文件体积:1.47 GB on dev1(按 batch-50 估算 12 MB/项 偏高,实测 1.5 MB/项——A 档第三梯队项目体量比头部小)
|
||||
- editor 版本:194 项 6.4.25 / 91 项 6.5.5 / 77 项 6.5.1,6.4-6.5 全谱系覆盖
|
||||
- corpus 由 142 项扩到 1,142 项(+1000)
|
||||
|
||||
### 决策(Why)
|
||||
- **不传 SG / 不 push gitea**:用户指明只走 1-4 步。数据 1.47 GB 走 dev1↔SG 6.5%-loss link 估 ~3 hr 单 scp,没必要现在花。要传时再走 COS 跨区或 split-parallel-scp。
|
||||
- **concurrency=5 全程**:飞控-77 验证过 std doc endpoint 这个并发安全;实测 Step 1 ~12s/100项、Step 4 ~36s/100项,零限流告警。
|
||||
- **Step 3 跳过**:候选池纯 std-origin,Pro backfill 没数据可处理。
|
||||
|
||||
### 下一步建议
|
||||
- 真要消费这批数据:(a) 在 dev1 直接 push gitea(SSH transport,~10 min @ 1.5 GB),或 (b) 走 COS 跨区同步到 SG。
|
||||
- 该批的 metadata-only 部分(37 项 attachments-only)若想补 sch/pcb,需要回头单独扫 attachment ZIP 看里面是否 bundled 了 EasyEDA 工程,那得改 crawler。
|
||||
- A 档剩余只有 396 项了;下次再扩可以下沉到 B 档(grade≥2 & like≥5,3,884 项 unfetched)。
|
||||
|
||||
---
|
||||
|
||||
## 2026-04-30 19:10 飞控-77:主题定向抓 77 块标准飞控板
|
||||
|
||||
**Claude 会话**
|
||||
|
||||
走完整 pipeline:本地索引筛 → dev1 抓 → tar+scp 回 SG → push gitea。
|
||||
|
||||
### 候选筛选
|
||||
- 数据源:`data/state/oshwhub_listing_full.jsonl`(33,695 项)
|
||||
- 过滤:`origin=std AND ('飞控' in name OR '飞控' in introduction)` → 79 hits
|
||||
- 减去已抓的 2 项 → 77 个新候选
|
||||
- 工具:临时脚本,候选 jsonl 落 dev1 `data/state/oshwhub_feikong_candidates.jsonl`(不入 git,可重算)
|
||||
|
||||
### 抓取(dev1 Guangzhou,concurrency=5)
|
||||
- Step 1 详情扫 license: ~12s, 74/77 OK + 3 fail
|
||||
- 3 fail 都是同一个 bug:listing entry 的 `count` dict 缺 `like` 字段,crawler 直接 `count["like"]` 抛 KeyError
|
||||
- 修:`rank_score` / `pick_top` / metadata builder 全改 `count.get("like", 0)` 形式(commit `29530e0`)
|
||||
- 重抓 3 项 → 全 OK
|
||||
- Step 4 std-source backfill: ~80s, 73/77 拉到源工程文档(4 项 upstream 就是 attachments-only,没编辑器 session,`source_documents=[]` 是真实状态)
|
||||
|
||||
### 传输:tar+scp 而非 dev1 push gitea
|
||||
- dev1 → SG 同样吃 6.5% 丢包 link,单 TCP cwnd 压扁
|
||||
- 33 MB tarball 走 scp ~3 min(与之前 dev1 push gitea 同量级)
|
||||
- 落 SG 后从 SG 直推 gitea(同区低延迟),秒级完成
|
||||
- rebase:dev1 端有人手动推了 74-项 commit (`c199840`),本地 77-项 superset rebase 上去,conflicts 仅 projects.md(regen 一遍即解)
|
||||
|
||||
### 完成度
|
||||
- 79/79 飞控 std 项目都有 metadata
|
||||
- 73 项有完整 std 源工程
|
||||
- 4 项是真实 attachments-only(upstream API 返空)
|
||||
- License 分布:65% GPL 3.0,11% PD,11% MIT,~6% CC variants(与 batch-50 同形态)
|
||||
- corpus 由 65 项扩到 142 项(+77)
|
||||
|
||||
### 下一步建议
|
||||
- 跨区传输优化:tencent-cloud COS 同 cloud 跨区复制走骨干网,比 scp 快几倍;下次大批量再装。或者 split + 并行 scp 也能拉 3-5x。
|
||||
- 清理 stash 里那两份 .decrypted.txt(pre-existing 调试残留)
|
||||
- 可以再试一波 Pro 飞控(93 hits,origin=pro)
|
||||
|
||||
---
|
||||
|
||||
## 2026-04-29 04:30 std/ writer 翻 Option 2:raw objects dump + mapping doc
|
||||
|
||||
**Claude 会话**
|
||||
|
||||
144
scripts/build_feikong_index.py
Normal file
144
scripts/build_feikong_index.py
Normal file
@@ -0,0 +1,144 @@
|
||||
"""Build docs/feikong_std77.md — topical index of std 飞控 projects.
|
||||
|
||||
Selection: origin=std AND ('飞控' in name OR '飞控' in introduction)
|
||||
Source: data/state/oshwhub_listing_full.jsonl (full-corpus listing snapshot)
|
||||
Augmented from each project's data/raw/oshwhub/<uuid>/metadata.json:
|
||||
- license
|
||||
- source completeness (editor docs vs attachments-only)
|
||||
- editor_version
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
from pathlib import Path
|
||||
|
||||
REPO = Path(__file__).resolve().parent.parent
|
||||
LISTING = REPO / "data" / "state" / "oshwhub_listing_full.jsonl"
|
||||
RAW_ROOT = REPO / "data" / "raw" / "oshwhub"
|
||||
OUT = REPO / "docs" / "feikong_std77.md"
|
||||
|
||||
|
||||
def collect() -> list[dict]:
|
||||
rows: list[dict] = []
|
||||
for ln in LISTING.read_text(encoding="utf-8").splitlines():
|
||||
if not ln.strip():
|
||||
continue
|
||||
it = json.loads(ln)
|
||||
if it.get("origin") != "std":
|
||||
continue
|
||||
name = it.get("name") or ""
|
||||
intro = it.get("introduction") or ""
|
||||
if "飞控" not in name and "飞控" not in intro:
|
||||
continue
|
||||
uuid = it["uuid"]
|
||||
meta_p = RAW_ROOT / uuid / "metadata.json"
|
||||
meta: dict = {}
|
||||
if meta_p.is_file():
|
||||
meta = json.loads(meta_p.read_text(encoding="utf-8"))
|
||||
rows.append({"listing": it, "meta": meta})
|
||||
return rows
|
||||
|
||||
|
||||
def render(rows: list[dict]) -> str:
|
||||
out: list[str] = []
|
||||
w = out.append
|
||||
|
||||
n_total = len(rows)
|
||||
n_have_meta = sum(1 for r in rows if r["meta"])
|
||||
n_with_source = sum(1 for r in rows if (r["meta"].get("source_documents") or []))
|
||||
n_attachments_only = n_have_meta - n_with_source
|
||||
|
||||
w("# 飞控 / Flight-Controller Projects (std)")
|
||||
w("")
|
||||
w(f"_主题定向索引:oshwhub `origin=std` 且 `name` 或 `introduction` 含「飞控」字样_")
|
||||
w("")
|
||||
w(
|
||||
f"**当前**:{n_total} 个项目 · {n_with_source} 个有可编辑器源 · "
|
||||
f"{n_attachments_only} 个仅附件(upstream 没编辑器 session)"
|
||||
)
|
||||
w("")
|
||||
w(
|
||||
"> 数据来源:`data/state/oshwhub_listing_full.jsonl` + 每项 `data/raw/oshwhub/<uuid>/metadata.json`"
|
||||
)
|
||||
w("> 排序:likes 倒序")
|
||||
w("")
|
||||
rows.sort(
|
||||
key=lambda r: -((r["listing"].get("count") or {}).get("like", 0))
|
||||
)
|
||||
w(
|
||||
"| # | Title | Author | License | Source | Editor | "
|
||||
"❤️ Likes | ⭐ Stars | 🍴 Forks | 👁 Views | Grade |"
|
||||
)
|
||||
w(
|
||||
"|---|-------|--------|---------|--------|--------|"
|
||||
"--------:|--------:|--------:|--------:|------:|"
|
||||
)
|
||||
for i, r in enumerate(rows, 1):
|
||||
it = r["listing"]
|
||||
m = r["meta"]
|
||||
c = it.get("count") or {}
|
||||
uuid = it["uuid"]
|
||||
title = it.get("name") or "?"
|
||||
url = f"https://oshwhub.com/{it['path']}"
|
||||
author_user = (it.get("owner") or {}).get("username") or "?"
|
||||
author_disp = (it.get("owner") or {}).get("nickname") or author_user
|
||||
title_link = f"[{title}]({url})"
|
||||
dir_link = f"[`{uuid[:8]}…`](../data/raw/oshwhub/{uuid}/)"
|
||||
author_link = f"[{author_disp}](https://oshwhub.com/{author_user})"
|
||||
license_str = m.get("license") or "—"
|
||||
# source completeness label
|
||||
if not m:
|
||||
source_label = "❌ 未抓"
|
||||
elif m.get("source_documents"):
|
||||
n_docs = len(m["source_documents"])
|
||||
source_label = f"✅ {n_docs} docs"
|
||||
else:
|
||||
source_label = "📎 attachments-only"
|
||||
editor = m.get("editor_version") or "—"
|
||||
w(
|
||||
f"| {i} | {title_link}<br>{dir_link} | {author_link} | {license_str} | "
|
||||
f"{source_label} | {editor} | "
|
||||
f"{c.get('like', 0):,} | {c.get('star', 0):,} | {c.get('fork', 0):,} | "
|
||||
f"{c.get('views', 0):,} | {it.get('grade') or 0} |"
|
||||
)
|
||||
w("")
|
||||
w("## License 分布")
|
||||
w("")
|
||||
lic_count: dict[str, int] = {}
|
||||
for r in rows:
|
||||
lic = r["meta"].get("license") or "(未抓)"
|
||||
lic_count[lic] = lic_count.get(lic, 0) + 1
|
||||
for lic, n in sorted(lic_count.items(), key=lambda x: -x[1]):
|
||||
w(f"- `{lic}` — {n}")
|
||||
w("")
|
||||
w("## Editor 版本分布(有源工程的项目)")
|
||||
w("")
|
||||
ed_count: dict[str, int] = {}
|
||||
for r in rows:
|
||||
if r["meta"].get("source_documents"):
|
||||
ed = r["meta"].get("editor_version") or "(unknown)"
|
||||
ed_count[ed] = ed_count.get(ed, 0) + 1
|
||||
for ed, n in sorted(ed_count.items(), key=lambda x: (-x[1], x[0])):
|
||||
w(f"- `{ed}` — {n}")
|
||||
w("")
|
||||
w("## 重新生成")
|
||||
w("")
|
||||
w("```bash")
|
||||
w("uv run python scripts/build_feikong_index.py")
|
||||
w("```")
|
||||
w("")
|
||||
return "\n".join(out)
|
||||
|
||||
|
||||
def main() -> int:
|
||||
rows = collect()
|
||||
md = render(rows)
|
||||
OUT.parent.mkdir(parents=True, exist_ok=True)
|
||||
OUT.write_text(md, encoding="utf-8")
|
||||
print(f"wrote {OUT} ({len(rows)} projects)")
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
raise SystemExit(main())
|
||||
Reference in New Issue
Block a user