【GNSS】PEA软件-GNSS 服务端整网数据处理的开源软件

PEA软件-GNSS 服务端整网数据处理的开源软件

下载地址

Welcome to the PEA for GNSS processing.

Welcome to the Parameter Estimation Algorithm (PEA)! This is one of two repositories that makes up the GINAN toolkit. If you interested in processing GNSS raw observations then you are in the right place. If you are interested in orbit determination then you will need to look at the POD repository. In the near future, we will be merging the PEA and POD together into one repository.

PEA features

  1. Estimate station positions for a RINEX file (static and kinematic)
  2. Estimate satellite clocks and orbits from a global tracking network
  3. Estimate a regional ionosphere model
  4. Support for processing GPS, Glonass (limited), Galileo and Beidou data

Installation

You can obtain the source code via a git clone for example:

$ git clone https://bitbucket.org/geoscienceaustralia/pea.git

The PEA has a number of dependencies:

  1. BOOST
  2. YAML-CPP
  3. CMAKE
  4. EIGEN-3

Recommended Dependencies:

  1. OpenBlas or
  2. Intel MKL

For a detailed guide on how to compile and install the software see the INSTALL in the root directory of this repository.

Examples

We have a number of examples on how to run the different components of the software, a quick overview is given in the README.md For some example see Examples on how to use the PEA.

Bugs / Issues

If you find a bug or would like to request a feature please lodge it BUGS

Developer Resources

See this page for some [cheat sheets](https://bitbucket.org/geoscienceaustralia/pea/wiki/Developer Resources) and tips for those developing the PEA.

For notes on the [Algorithms](https://bitbucket.org/geoscienceaustralia/pea/wiki/Link URL) and utilities provided by this repository.

Roadmap

See this page for what we are planning to be working on next.

官方文档

Analysis Centre Software - Network Parameter Estimation Algorithm

Overview

The Analysis Centre Software (ACS) is a processing package being developed to processes GNSS observations for geodetic applications.

We currently support the processing of:

  • the American Global Positioning System (GPS); and
  • Galileo
  • GLONASS
  • the Chinese Navigation Satellite System (Beidou)
  • QZSS

We are actively developing the ACS to have the following capabilities and features:

  • Precise Orbit & Clock determination of GNSS satellites (GNSS POD).
  • Precise Point Positioning (PPP) of GNSS stations in network and individual mode.
  • Real-Time corrections for PPP users.
  • Analyse full, single and multi-frequency, multi-GNSS data.
  • Delivering atmospheric products such as ionosphere and troposphere models.
  • Servicing a wide range of users and receiver types.
  • Delivering outputs usable and accessible by non-experts.
  • Providing both a real-time and off-line processing capability.
  • Delivering both position and integrity information.
  • Routinely produce IGS final, rapid, ultra-rapid and real-time (RT) products.

The software is broken into two main components:

  • the Network Parameter Estimation Algorithm (PEA); and
  • the Precise Orbit Determination (POD).

The PEA component is intended to be run with a network of GPS stations distributed over a continental region or over global extents. It will read in RINEX v2 or RINEX v3 observations, or RTCM3 real-time streams, to obtain estimates of the satellite clocks, and zenith troposphere delay estimates. The software package PEA is intended to be run on a large Linux server that has multiple CPUs and sufficient memory to cope a network of 80 - 250 stations.

Contained within the PEA is a User Platform, which can take in orbit and clock products either from a publicly available source such as the IGS, or from those generated by the PEA, to be able to obtain a set of coordinates in real-time or post processed mode. The computational resources to run the User Platform are significantly less, and this can be easily run on a laptop or modest sized PC.

The PEA has been largely based upon the freely available rtklib as a starting point; it is our intention to break away from the rtklib with a complete set of our own geophysical modelling routines as the development of the package progresses further. The routines have been written in C and C++.

PEA

The ACS Version 1.0 beta release supports:

  1. The PEA Network Parameter Estimation Algorithm
  2. The PEA User Platform

Directory Structure

pea
├── INSTALL.md
├── LICENSE.md
├── README.md
├── aws/                - for automated builds in aws
├── config/
│   ├── Ex00-UnitTest.yaml
│   ├── Ex01-PPP.yaml
│   ├── Ex02-Network.yaml
│   ├── Ex03-Network_Orbits.yaml
│   ├── Ex04-Ionosphere.yaml
│   ├── Ex05-Realtime.yaml
│   ├── iontest_20115w.yaml
│   └── PPP-iontest.yaml
├── cpp/
│   ├── CMakeLists.txt
│   ├── cmake           - files to help cmake find dependencies
│   ├── docs            - automatic code documentation configuration
│   └── src/
│       ├── 3rdparty/   - see ACKNOWLEDGEMENTS in README.md
│       ├── common/     - libraries used by the pea
│       ├── iono/       - routines for ionosphere modelling
│       ├── pea/        - main for `pea`
│       └── rtklib/     - subset of modified routines from RTKlib see ACKNOWLEDGEMENTS in README.md
├── java/
└── python
    ├── config
    ├── README.md
    └── source
        ├── download_examples.py
        ├── install_examples.py
        ├── comprun.py
        └── other helper programs

PEA Network Parameter Estimation Algorithm

The PEA Network Parameter Estimation Algorithm supports reading from RINEX v2 or RINEX v3 observation files to obtain estimates of the satellite clocks

Build

To build the PEA Network Parameter Estimation Algorithm follow the directions in INSTALL.md

Examples

In this section we give a brief overview of different examples of how to use the pea to process GNSS data. For more detail and further examples please refer to the overview and the technical manual.

Before running any of the example make sure you have downloaded the example’s input datasets by using one of the helper scripts in pea/exampleData/

$ python3 ../../python/source/download_examples.py -d /data/acs/pea/proc/

All of the configuration files for examples detailed here, and in the manual can be found in the pea/config subdirectory, and are cleary labelled according to the example set out below.

Running

The pea is run by providing a config file as an argument on the command line

$ ./pea --config ../../config/Ex01-IF-PPP.yaml

To overide the configuration file options, you can use the command line arguments:

$ ./pea --config ../../config/Ex01-PPP.yaml --rnx XMIS00AUS_R_20191990000_01D_30S_MO.rnx

A list of available options is provided by entering the following command:

$ ./pea --help

Options:
--help                      Help
--verbose                   More output
--quiet                     Less output
--config arg                Configuration file
--trace_level arg           Trace level
--antenna arg               ANTEX file
--navigation arg            Navigation file
--sinex arg                 SINEX file
--sp3file arg               Orbit (SP3) file
--clkfile arg               Clock (CLK) file
--dcbfile arg               Code Bias (DCB) file
--ionfile arg               Ionosphere (IONEX) file
--podfile arg               Orbits (POD) file
--blqfile arg               BLQ (Ocean loading) file
--erpfile arg               ERP file
--elevation_mask arg        Elevation Mask
--max_epochs arg            Maximum Epochs
--epoch_interval arg        Epoch Interval
--rnx arg                   RINEX station file
--root_input_dir arg        Directory containg the input data
--root_output_directory arg Output directory
--start_epoch arg           Start date/time
--end_epoch arg             Stop date/time
--dump-config-only          Dump the configuration and exit
Example 01 - Use PPP to Process GPS Data

In this example we will process 24 hours of data from a permanent reference frame station. The algorithm that will be use an L1+L2 and L1+L5 ionosphere free combination. The log files and processing results can be found in /data/acs/pea/output/exs/EX01_IF/.

$ ./pea --config ../../config/Ex01-IF-PPP.yaml

$ grep "\$POS" /data/acs/pea/output/exs/EX01_IF/EX01_IF-ALIC.TRACE

And you should see the following: $POS,2062,431940.000,0,-4052052.7956,4212836.0144,-2545104.6423,0.00000043966020,0.00000039738502,0.00000013421476 $POS,2062,431970.000,0,-4052052.7956,4212836.0144,-2545104.6423,0.00000043965772,0.00000039738393,0.00000013421667

For more information on running the pea in ppp mode see docs/PPPExamples.md

Example 02 Processing a Global Network to obtain satellite clock products

In this example 24 hours of data from a small global network of 87 stations is processed to obtain the clock products needed for high precision positioning.

Check that the paths in the configuration file for the products and RINEX files are correct for your system. If you have followed the convention layed out in the INSTALL.md document you should not need to amend anything.

To start the processing use the command:

$ ./pea --config ../../config/Ex02-Network.yaml

The process will take approximatelly 2-3 hours to complete depending on CPU performance. The log files and processing results can be found in /data/acs/pea/output/examples/Ex02, or the alternative directory you have specified in the configuration file.

Change into your output directory. You should find a .TRACE file for each station processed, and a PEA.SUM file.

$ cd /data/acs/pea/output/examples/Ex02

To verify your solution, first grep for the xp values:

$ grep 'network xp' netprocessing.out > xp_test.txt

and then run:

$ python3 /data/acs/pea/python/src/comprun.py --test /data/acs/output/xp_test.txt --standard /data/acs/pea/example/EX02/standard/xp_standard.txt

This will produce the plots Posdiff.png, recclk.png, satclk.png, and zwd.png.

Example 03 Processing a Global Network to obtain the orbit and clock products

In this example 24 hours of data from a small global network of 87 stations is processed to obtain the orbit and clock products needed for high precision positioning.

Check that the paths in the configuration file for the products and RINEX files are correct for your system. If you have followed the convention layed out in the INSTALL.md document you should not need to amend anything.

To start the processing use the command:

$ ./pea --config ../../config/Ex03-Network_Orbits.yaml

The process will take approximatelly 2-3 hours to complete depending on CPU performance. The log files and processing results can be found in /data/acs/pea/output/examples/Ex03, or the alternative directory you have specified in the configuration file.

Change into your output directory. You should find a .TRACE file for each station processed, and a PEA.SUM file.

$ cd /data/acs/pea/output/examples/Ex03

To verify your solution, first grep for the xp values:

$ grep 'network xp' netprocessing.out > xp_test.txt

and then run:

$ python3 /data/acs/pea/python/src/comprun.py --test /data/acs/output/xp_test --standard /data/acs/pea/example/EX03/standard/xp_standard.txt

This will produce the plots Posdiff.png, recclk.png, satclk.png, and zwd.png.

To compare the satellite clocks run:

$ python3 /data/acs/pea/python/src/compareclk.py --standard /data/acs/pea/example/EX03/standard/aus20624.clk  --test ./aus20624.clk

This will produce plots for the differences in satellite clocks G02 through to G32 as well as calculating the RMS and standard deviation with respect to the standard. G01.png does not exists at this has been used as the pivot satellite clock that we use to remove the bias from.

Example 04 Processing a Global Network to obtain Ionospheric Vertical Total Electron Content (VTEC) Maps

In this example 24 hours of data from a small global network of 87 stations is processed to obtain the IONEX formatted Ionosphere VTEC maps and SINEX formatted satellite Diferential Signal Biases (DSB). Ionospheric VTEC maps follows the IONEX 1.1 format, which can be found in: https://gssc.esa.int/wp-content/uploads/2018/07/ionex11.pdf The satellite bias follows the bias-SINEX format, which can be found in: http://ftp.aiub.unibe.ch/bcwg/format/draft/sinex_bias_100_dec07.pdf

Check that the paths in the configuration file for the products and RINEX files are correct for your system. If you have followed the convention layed out in the INSTALL.md document you should not need to amend anything.

To start the processing use the command:

$ ./pea --config <installation directory>/pea/config/Ex04-Ionosphere.yaml

The process will take approximatelly 1-2 hours to complete depending on CPU performance and setting specifications.

The IONEX and bias-SINEX files can then be used to obtain SPP and PPP positioning solutions as specified in PPPExamples.md

A utility to plot the TEC values in an IONEX file have can be found at:

<installation dirctory>/pea/python/source/plotIONEX.py

This utility will ask for the path/filename of the IONEX file and a start and stop time in hhmmss format. The Python code will then generate a figure in IONEX_yyyy-mm-dd_hh:mm:ss.png format for each entry between the start and stop time.

FAQ

I get compilation errors related to the Eigen library?

The software uses features found only in the 3.3.9 version of eigen. Install the library using the procedure outlined in INSTALL.md to get the most up to date version.

Acknowledgements

We have used routines obtained from RTKLIB, released under a BSD-2 license, these routines have been preserved with minor modifications in the folder cpp/src/rtklib The original source code from RTKLib can be obtained from https://github.com/tomojitakasu/RTKLIB

We have used routines obtained from Better Enums, released under the BSD-2 license, these routines have been preserved in the folder cpp/src/3rdparty The original source code from Better Enums can be obtained from http://github.com/aantron/better-enums.

大佬分析

下文节选自[不迷途导航程序员-PEA源码阅读笔记

简单介绍

精确的卫星轨道和钟差是 GNSS 位置服务的必要信息之一。特别是对于不依赖参考站的 PPP ,和长基线 RTK 技术,为了充分利用几个 mm 测量精度的载波相位观测值,对卫星轨道和钟差产品的精度要求达到 cm 级。

国际 GNSS 服务组织(IGS)是提供此类产品的主要机构,自 1994 年成立至今,连续为 GNSS 社区提供最终、快速和超快速,不同延迟和精度级别的精密坐标和钟差,服务于 GNSS 相关的研究与应用,免费向公众开放。IGS 在 2007 年进一步启动了 Real-time Pilot 项目,并于 2013 年 4 月 1 日正式上线了 IGS 实时服务。随着实时 PPP 技术的逐渐成熟,Trimble、GMV、Hexagon 等公司也相继开发了自己的多系统轨道与钟差估计系统,上线了自己的商业 PPP 服务。

国内外著名的轨道/钟差计算软件有 BERNESE、EPOS、PANDA、GINS、MADOCA 等等。这些软件大都不开源,或者像 BERNESE 那样通过商业版提供源代码,但历史悠久的 Fortran 代码阅读、改动起来不太容易。


缺少开源软件的参考,阻碍了不少年轻学子学习精密定轨与算钟的激情和好奇心。这种情况在新冠病毒全球肆虐的 2020 年终于出现了变化。著名的 Geoscience Australia(GA)在 5 月前后在代码托管网站 Bitbucket 上开源了包括 精密轨道计算 POD,GNSS 网解 PEA 在内的多套核心代码。除了支持精密定轨、算钟外,还支持计算全球电离层模型和用户端的 PPP 解。是笔者已知的第一款 GNSS 服务端整网数据处理的开源软件!!

POD 混合使用 Fortran 77,90 和 03 语言开发,无外部依赖项。PEA 使用 C/C++ 语言,依赖 Boost、YAML、Eigen、Better Enums 等少量第三方代码。版权协议为 Apache许可证 2.0。GA 计划将来将两者整合成一个统一的软件。笔者猜测大概率会是将 Fortran 语言的 POD 改为 C/C++ 融合进 PEA 里。

除了源码和简要的介绍文档外,GA 还提供了 10+ 各种功能的配置文件,算例说明和数据下载、分析、绘图的 Python 脚本,帮助使用者快速上手,跑通各类算例。软件代码由 10 余人协作开发,从 commit 历史可以看出软件的更新和改进一直十分活跃。

代码分析

PEA 源代码的一些风格和特性如下:

  • 使用 C++ 17 标准。
  • 大量使用标准模板类库 STL 的 list、vector、array、pair、map、multimap 等数据结构。
  • 使用 template 模板函数以及操作符重载。
  • 主体是面向过程程序设计。程序执行流程、入口、出口比较清晰。
  • 以 struct 代替 class 设计了几个带有成员函数和成员变量的类,没有多态等抽象特性。
  • 用到了 lambda 表达式创建匿名函数。
  • 代码注释丰富。

所以在开始阅读 PEA 代码前,需要适当学习一下 C++ 11、14、17 新标准的一些现代化的特性。

程序使用 YAML 格式的配置文件,利用 Boost 库的 time、logging、regex、asio 等模块实现时间、日志、正则表达式、tcp-ip 等操作,还依赖了 Eigen3、OpenBLAS 库做数值计算,需要事先编译好共程序调用。此外,程序在源码中还集成了 gnuplot、Better Enums、和修改后的 RTKLIB 部分底层源码。


在支持的模型和算法方面,PEA 软件的特点如下:

  • 支持 RINEX v2,3 文件格式,支持 GREC 四大星座
  • 对流层模型支持 VMF1、VMF3 等投影函数,模型比较新
  • 支持 BDS 伪距观测值星端多路径偏差改正,见 wancorr.cpp 文件
  • 支持钟跳修复,见 detectjump 函数
  • 竟然实现了历元差分周跳修复算法!!!且支持双频和三频,单频暂时被屏蔽
  • 支持 Kalman 验前和验后的数据预处理
  • 支持 Kalman 固定点(fixed-point)、固定滞后(fixed-lag)、固定区间(fixed-interval)平滑算法
  • 事后解结果通过 Kalman 固定区间平滑实现,极耗磁盘空间(单 GPS 系统会占用 100G+ 硬盘空间)!

程序编译

PEA 的源码目录结构如下图所示。在开始学习之前,建议首先阅读 README.md 和 INSTALL.md 两个文档。前者介绍了 PEA 软件的基本信息,后者介绍了如何从安装依赖包开始一步步编译 PEA 软件。

 pea
 ├── INSTALL.md
 ├── LICENSE.md
 ├── README.md
 ├── aws/                - for automated builds in aws
 ├── config/
 │   ├── Ex01-PPP.yaml
 │   ├── Ex02-Network.yaml
 │   ├── Ex03-Network_Orbits.yaml
 │   ├── Ex04-Ionosphere.yaml
 ├── cpp/
 │   ├── CMakeLists.txt
 │   ├── cmake           - files to help cmake find dependencies
 │   ├── docs            - automatic code documentation configuration
 │   └── src/
 │       ├── 3rdparty/   - see ACKNOWLEDGEMENTS in README.md
 │       ├── common/     - libraries used by the pea
 │       ├── iono/       - routines for ionosphere modelling
 │       ├── pea/        - main for `pea`
 │       └── rtklib/     - subset of modified routines from RTKlib see ACKNOWLEDGEMENTS in README.md
 └── python
     ├── config
     ├── README.md
     └── source
         ├── download_examples.py
         ├── install_examples.py
         └── other helper programs

官方推荐的软件编译步骤如下——

  1. 首先安装基础工具 gcc, gfortran, git, openssl, blas, lapack, gzip, wget, python3 相关的库 等等。
  2. 源码安装 YAML 库。从 Github 上克隆源码,make 安装。
  3. 编译、安装 boost_1_73_0。
  4. 源码安装 Eigen3 数学库。从 Github 上克隆源码,make 安装。

需要说明的是,PEA 依赖 Gitlab 仓库上最新的 Eigen3。如果安装从 Eigen 官网上下载的 <=3.3.8 版本压缩包,编译过程会报错。

  1. 从 Bitbucket 网站的 PEA 仓库下载源码,使用 cmake 自动寻找依赖项、创建 makefile 文件并构建 PEA 软件。

官方介绍是在 Ubuntu 系统下执行。实际上各个 Linux 发行版底层相差不大,笔者在 CentOS 7 长期稳定版,和滚动更新的 Manjaro 两个发行版都编译通过,可正常运行。

初次使用时可以按照上述步骤一步一步输入命令执行。熟悉流程后,可以将上述命令写在一个 shell 脚本里,一次运行,顺序执行所有命令。

如何使用

PEA是命令行(CUI)程序。命令行中键入 ‘./pea’ ,可以看到指定的参数选项:

 PEA starting...
 Options:
   --help                      Help
   --verbose                   More output
   --quiet                     Less output
   --config arg                Configuration file
   --trace_level arg           Trace level
   --antenna arg               ANTEX file
   --navigation arg            Navigation file
   --sinex arg                 SINEX file
   --sp3file arg               Orbit (SP3) file
   --clkfile arg               Clock (CLK) file
   --dcbfile arg               Code Bias (DCB) file
   --ionfile arg               Ionosphere (IONEX) file
   --podfile arg               Orbits (POD) file
   --blqfile arg               BLQ (Ocean loading) file
   --erpfile arg               ERP file
   --elevation_mask arg        Elevation Mask
   --max_epochs arg            Maximum Epochs
   --epoch_interval arg        Epoch Interval
   --rnx arg                   RINEX station file
   --root_input_dir arg        Directory containg the input data
   --root_output_directory arg Output directory
   --start_epoch arg           Start date/time
   --end_epoch arg             Stop date/time
   --dump-config-only          Dump the configuration and exit
 PEA finished

如果不想每次都键入很长的命令行语句,用户可将大部分的参数设置写在配置文件中,以 pea --config your_config_file_path 的命令运行。

估计测试

测试硬件为 Linux 台式机,主要配置为:Intel i7-8700@3.20GHz + 16G 内存 + 3T 机械硬盘。使用 download_examples.py 的 Python 脚本下载了 2019 年 7 月 18 日 MGEX 网 87 个测站的 RINEX 3 格式观测文件,跑了单 GPS 系统事后和仿实时精密卫星钟差估计两个例子,初步对软件算钟的性能进行测试。


GPS钟差事后解

PEA 提供的 GPS 钟差事后解配置文件是 EX02-Network_Clocks.yaml。修改好里面的文件路径等参数后即可执行算钟任务。

PEA 为实现事后模式的解算,将前向和后向解的大量参数信息(估值、方差协方差)和状态转移信息都写进入了二进制文件中。再读取二进制文件的数据,根据公式做固定区间平滑。而让笔者意想不到的是,前向和后向的二进制文件大小分别达到了惊人的 66G 和 33G!仅仅跑 87 个测站的 GPS 单系统解,加上其他文件就占去了 100G 以上的磁盘空间。如果跑约两倍数量(160)测站,GREC 四系统解,那又会是怎样一副画面?难以想象。普通台式机和笔记本 1T 以内的磁盘,恐怕结果没有跑完,计算机已经罢工发出了警报。

整个任务处理时长达到 142 分钟!可能读写文件就占去了不少时间。

因此,PEA 软件的事后整网解算主要面向的是提供高精度、时间延迟达到天级的服务端产品。一般来说,提供这类服务的分析中心都有足够强大的硬件配置。对于学生的个人研究,可能需要略微升级一下计算机的硬件(磁盘/CPU/内存)配置了。

PEA 软件解中 G25 卫星的 STD 明显大于其他卫星,多数卫星的钟差 STD 略大于 PANDA,少数几颗比 PANDA 略小一些,整体钟差精度略低于 PANDA。PANDA 软件解得的 GPS 钟差整体保持了较好的精度与一致性,各颗卫星的差值 STD 相差不大。考虑到剔除的 5 颗卫星,PANDA 的结果明显好于 PEA,两个软件的精度差异会比图中更大一些。


GPS钟差仿实时解

将配置文件中的 process_modes / rts 参数改为 False,即表示采用前向 Kalman 滤波,仿实时估计 GPS 精密卫星钟差。仿实时模式下生成的最大的 SUM 文件大小只有 1G。整个任务处理时长达到了 73 分钟。无论是磁盘占用和耗时相比较事后解都大大降低。

PEA 软件目前没有固定模糊度,其精度与笔者 GKit/PCE 软件的浮点解精度相当,略优于0.1ns,两组浮点解钟差差值的时间序列均表现出类似的波动。PEA 软件解算得到的钟差序列在 03:00 时刻出现了整体的偏移现象,表明在基准的切换和异常识别中仍具有可改进之处。GKit/PCE 的固定解各颗卫星的差值时间序列稳定度,和收敛速度明显比两组浮点解高出很多,所有卫星差值的平均 STD 约为 0.02 ns,较浮点解提高了大约 75%。因此模糊度仍是钟差实时解算中值得关注的问题。


改进建议

根据笔者个人的编程习惯和喜好,有如下几条进一步改进 PEA 软件的建议——

  1. 减少对 boost 库的依赖

笔者不习惯使用庞大、繁杂的 boost 库。特别是在 Windows 平台下,编译和使用 boost 库比较麻烦。boost 库的大部分功能都有其他优秀的开源替代。

  1. 模块化分离实时与事后处理功能

使用预处理宏定义,或是建不同的工程文件,将实时与事后数据处理功能区分出来。

  1. 事后处理减少硬盘占用

可能需要改为使用 LSQ 估计器做事后估计了。是一个不小的工程。有学生或师弟师妹一起做会快很多。

  1. 多系统支持

支持 B1+B3 频率的 BDS 数据处理,支持 QZSS。目前支持五系统,支持 BDS-3 的仅有 GFZ、WUM 和 ESA 少数几个分析中心。

  1. 加入模糊度固定

写在最后

PEA 软件是第一款全面支持服务端精密轨道确定、精密钟差估计、客户端 PPP 数据处理的开源软件。代码可读性高、模型比较新、非常值得各位 GNSSer 参考和学习。随着 PEA 的开源,越来越多的人参与到精密定轨和算钟的研究中来,笔者相信卫导领域高精度数据处理的水平会更上一个台阶。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值