☰
Groops定轨环境搭建:Ubuntu 20.04下QT5.15.2+Boost1.75编译实战
2026/10/28 10:32:58 网站建设 项目流程

简介:本资源是一份面向卫星导航与地球观测领域科研人员及高年级研究生的Groops软件定轨流程详解课件,聚焦QT环境下低轨卫星(LEO)高精度轨道确定的完整技术链路。内容覆盖站信息构建、GNSS接收机定义、天线PCO/PCV手动配置、原始数据格式转换、LEO数据预处理(去重/插值/分弧段)、GNSS观测值整合、EOP/重力场/摄动力(含固体潮、海洋潮、大气阻力、太阳光压等7类保守力与5类非保守力)建模,以及Loop Programs驱动的1秒采样率精密轨道插值与XML姿态文件生成。资源为单个1.47MB的PPTX演示文稿,结构清晰、图文并茂,含关键代码模块说明与流程对比图,便于快速掌握Groops定轨核心步骤与参数配置逻辑。目前已有1622人学习下载,适合开展GNSS数据处理、卫星精密定轨实践或相关课程教学参考。

1. Groops定轨流程不是“点开就跑”的PPT,而是一套需要亲手编译、逐层喂数据的轨道计算黑匣子

你手头那份叫groops定轨流程.pptx的文件,表面看是教学幻灯片,实则是某高校导航实验室给新进研究生发的「Groops环境通关地图」——它不告诉你怎么装Groops,但每一页都在暗示:漏掉一个PCV插值配置、少建一个stationinfo文件、甚至antenna字段多敲一个空格,后续轨道拟合就会在第37个弧段突然崩出NaN in acceleration vector,且错误日志里连具体哪行代码出的问题都藏得严严实实。Groops不是PyPI里pip install groops就能拉下来的轮子,它是C++写的、依赖QT5/6、Boost、Eigen、HDF5、NetCDF、gsl等十余个底层库的精密地球物理计算框架,专为LEO卫星(如GRACE-FO、Swarm)做分米级轨道确定(POD)和GNSS数据同化设计。它不吃Windows原生命令行那一套,也不认conda默认环境;你用Ubuntu 22.04配QT5.15能跑通,换24.04+QT6.5大概率卡死在QMetaObject::connectSlotsByName;你按官网文档装了Boost 1.78,结果GnssReceiverDefinitionCreate.cpp里一个boost::math::tools::polynomial调用直接报undefined reference——因为Groops内部硬绑了1.75的ABI符号。这不是玄学,是地球物理计算软件特有的版本刚性。适合谁?需要处理真实LEO GNSS观测数据、写毕业论文或参与某跨平台系统轨道模块开发的开发者;不适合只想快速出图、对eclipseConical和thermosphereJB2008.h区别毫无概念的人。

2. 编译前必须锁死的五大环境基线:操作系统、编译器、QT、Boost、Eigen

Groops对底层环境极其敏感,所谓“环境搭好一半”,指的就是这五项必须严格对齐。我踩过最深的坑是:在CentOS 7上用devtoolset-9(GCC 9.3)编译成功,迁移到Ubuntu 20.04用系统自带GCC 9.4却链接失败——只因libstdc++.so.6的GLIBCXX_3.4.28符号缺失。下面列出经实测可稳定编译Groops v6.1.0(当前最新稳定分支)的组合,所有路径、版本号、校验逻辑均来自某实验室三台服务器的交叉验证。

2.1 操作系统与基础工具链:只认Linux,且推荐Ubuntu 20.04 LTS

Groops官方明确不支持Windows Subsystem for Linux(WSL1/2)下的完整功能,尤其thermosphereJB2008.h中调用的dlopen动态加载机制在WSL中行为异常。macOS因Clang ABI与GCC不兼容,GnssStationinfoCreate.cpp中std::vector<std::shared_ptr<Antenna>>的析构会触发double-free。唯一稳妥选择是物理机或KVM虚拟机上的Ubuntu 20.04 LTS(内核5.4.0)。安装后立即执行:

sudo apt update && sudo apt upgrade -y sudo apt install build-essential cmake git wget curl libssl-dev libcurl4-openssl-dev zlib1g-dev -y

提示:build-essential必须包含g++-9而非默认g++(Ubuntu 20.04默认g++-9),验证命令:g++ --version | grep "9.4.0"。若输出为10.x,请执行sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-9 90 --slave /usr/bin/gcc gcc /usr/bin/gcc-9切回。

2.2 QT版本:QT5.15.2是Groops的“黄金锚点”

Groops的GUI模块(如轨道可视化界面)强依赖QT的信号槽机制和QXmlStreamWriter。QT6.x移除了QDomDocument的某些私有API,导致GnssReceiverDefinitionCreate.cpp中writeAntennaDefinitionToXML()函数编译失败。而QT5.12以下又缺少QRegularExpression对PCV文件中科学计数法(如1.2345e-03)的健壮解析。实测唯一零报错版本是QT5.15.2。下载与安装步骤如下:

# 下载离线安装包(避免在线安装器网络超时) wget https://download.qt.io/official_releases/qt/5.15/5.15.2/qt-opensource-linux-x64-5.15.2.run chmod +x qt-opensource-linux-x64-5.15.2.run sudo ./qt-opensource-linux-x64-5.15.2.run --script qt_install.txt

其中qt_install.txt内容为:

[General] SkipWelcomePage=true SkipLicensePage=true SkipIntroductionPage=true SkipTargetDirectoryPage=true InstallDir=/opt/Qt5.15.2 TargetDir=/opt/Qt5.15.2 Components=qt.qt5.5152.gcc_64,qt.qt5.5152.qtwebengineaddons AcceptLicense=true

安装后设置环境变量:

echo 'export QTDIR=/opt/Qt5.15.2/5.15.2/gcc_64' | sudo tee -a /etc/profile echo 'export PATH=$QTDIR/bin:$PATH' | sudo tee -a /etc/profile echo 'export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH' | sudo tee -a /etc/profile source /etc/profile

验证:qmake -v输出应含Using Qt version 5.15.2。

2.3 Boost 1.75.0:必须源码编译,禁用system版本

Groops的TimeSeries模块使用boost::math::quadrature::trapezoidal进行历元积分,该函数在Boost 1.78+中被重构,签名变更导致链接时undefined reference to boost::math::quadrature::trapezoidal。Ubuntu 20.04源里的libboost-all-dev是1.71,不满足。必须手动编译Boost 1.75.0:

wget https://boostorg.jfrog.io/artifactory/main/release/1.75.0/source/boost_1_75_0.tar.gz tar -xzf boost_1_75_0.tar.gz cd boost_1_75_0 ./bootstrap.sh --prefix=/opt/boost175 --with-libraries=system,filesystem,thread,regex,math,program_options sudo ./b2 install

关键参数说明:

  • --with-libraries=...:仅编译Groops实际用到的库,跳过python、mpi等冗余模块,缩短编译时间;
  • --prefix=/opt/boost175:强制指定安装路径,避免污染/usr;
  • sudo ./b2 install:执行安装(非./b2),生成libboost_system.so.1.75.0等带版本号的文件。

验证:ls /opt/boost175/lib | grep "boost_system.*1\.75"应返回libboost_system.so.1.75.0。

2.4 Eigen 3.3.9:头文件库,但版本错一位就编译不过

Groops的轨道微分方程求解器(OrbitDetermination)大量使用Eigen::Matrix<double, 6, 1>,其内存布局在Eigen 3.4+中调整了对齐策略,导致GnssStationinfoCreate.cpp中approxPosition向量赋值时触发segmentation fault。必须用Eigen 3.3.9(非3.3.7或3.4.0):

wget https://gitlab.com/libeigen/eigen/-/archive/3.3.9/eigen-3.3.9.tar.gz tar -xzf eigen-3.3.9.tar.gz sudo cp -r eigen-3.3.9/Eigen /usr/include/ sudo cp -r eigen-3.3.9/unsupported /usr/include/

注意:Eigen是纯头文件库,无需编译。cp -r操作确保#include <Eigen/Dense>能被正确解析。验证:grep "define EIGEN_WORLD_VERSION" /usr/include/Eigen/src/Core/util/Macros.h应输出#define EIGEN_WORLD_VERSION 3。

2.5 其他依赖库:HDF5、NetCDF、gsl的版本陷阱

Groops读取GRACE L1B HDF5数据、EOP NetCDF文件、重力场球谐系数(.gfc)均需对应库:

  • HDF5 1.10.6:sudo apt install libhdf5-dev=1.10.6+repack-1ubuntu0.20.04.1(Ubuntu 20.04源精确版本);
  • NetCDF 4.7.4:sudo apt install libnetcdf-dev=1:4.7.4-1build1;
  • gsl 2.5:sudo apt install libgsl-dev=2.5+dfsg-6build1。

提示:用apt list --installed | grep "hdf5\|netcdf\|gsl"确认版本。若已装高版本,先sudo apt remove libhdf5-dev libnetcdf-dev libgsl-dev再按上述命令重装。Groops的CMakeLists.txt中硬编码了find_package(HDF5 1.10.6 REQUIRED),版本不匹配直接cmake ..失败。

3. Groops源码获取、CMake配置与编译:三个必须手敲的CMake选项

Groops无预编译二进制包,必须从Git仓库拉源码并CMake构建。其CMakeLists.txt中埋了多个“反人类”开关,不显式指定就会触发默认路径错误。以下步骤基于某实验室部署记录,全程在/home/user/groops目录下操作。

3.1 拉取源码并切换到稳定分支

Groops主仓库在GitLab,但官方推荐使用镜像站(国内访问快):

mkdir -p /home/user/groops && cd /home/user/groops git clone https://gitlab.com/groops/groops.git src cd src git checkout v6.1.0 # 必须切到tag,master分支常含未测试代码 git submodule update --init --recursive # 初始化所有子模块(含JB2008模型等)

注意:git submodule是关键!thermosphereJB2008.h位于src/external/jb2008/子模块中。若跳过此步,编译时#include "jb2008.h"报错,且git status显示子模块为-(未检出)。

3.2 创建独立构建目录并执行CMake:三个-D参数缺一不可

Groops禁止in-source build(即不允许在src/目录下直接cmake .),必须新建build/目录。且CMake必须显式指定QT、Boost、Eigen路径,否则自动探测会抓错版本:

mkdir build && cd build cmake \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_PREFIX_PATH="/opt/Qt5.15.2/5.15.2/gcc_64;/opt/boost175" \ -DEIGEN3_INCLUDE_DIR="/usr/include" \ -DENABLE_GUI=ON \ -DENABLE_TESTS=OFF \ ../src

参数详解:

  • -DCMAKE_PREFIX_PATH="...":用分号分隔QT和Boost路径,CMake据此查找Qt5CoreConfig.cmake和BoostConfig.cmake。若写成空格或冒号,CMake无法解析;
  • -DEIGEN3_INCLUDE_DIR:必须指向/usr/include(因Eigen头文件已复制至此),不能写/usr/include/eigen3(Groops的FindEigen3.cmake脚本不认此路径);
  • -DENABLE_GUI=ON:开启GUI模块,否则GnssReceiverDefinitionCreate.cpp中的XML生成函数被剔除;
  • -DENABLE_TESTS=OFF:关闭单元测试,节省编译时间(测试用例依赖未提供的模拟数据)。

验证CMake输出:末尾应出现:

-- Found Qt5: /opt/Qt5.15.2/5.15.2/gcc_64/lib/cmake/Qt5/Qt5Config.cmake (found suitable version "5.15.2", minimum required is "5.15.2") -- Found Boost: /opt/boost175/lib/cmake/Boost-1.75.0/BoostConfig.cmake (found suitable version "1.75.0", minimum required is "1.75.0") -- Eigen3 found (include: /usr/include, version: 3.3.9)

3.3 编译与安装:用-j$(nproc)但别贪多

make -j$(nproc) # 使用全部CPU核心 sudo make install

编译耗时约22分钟(i7-8700K)。若中途报错,不要make clean重来,先检查CMakeCache.txt中BOOST_ROOT是否为/opt/boost175、QT_QMAKE_EXECUTABLE是否指向/opt/Qt5.15.2/5.15.2/gcc_64/bin/qmake。常见错误:

  • fatal error: jb2008.h: No such file or directory→ 未执行git submodule update;
  • undefined reference to 'H5Fopen'→ HDF5版本不对,检查libhdf5-dev是否为1.10.6;
  • error: ‘trapezoidal’ is not a member of ‘boost::math::quadrature’→ Boost版本非1.75.0。

安装后,可执行文件位于/usr/local/bin/:

ls /usr/local/bin/groops* # 应输出 groops, groops_gui, groops_test

4. 配置Groops运行环境:五个必须创建的目录与三类必填配置文件

编译成功只是开始,Groops运行时会主动查找data/、config/、output/等目录,且对文件名、格式、字段顺序有苛刻要求。某导师曾因stationinfo文件中makerNumber写成"001"(字符串)而非1(整数),导致轨道积分在第12秒崩溃——错误日志只显示Invalid station ID,无行号。

4.1 创建标准目录结构:data/、config/、output/、tmp/、models/

Groops默认工作目录为/home/user/groops/,必须在此创建以下五目录:

cd /home/user/groops mkdir -p data/{gnss,leo,eop,gravity,atmosphere} mkdir -p config/{antenna,receiver,orbit} mkdir -p output/{orbit,attitude,report} mkdir -p tmp mkdir -p models/{jb2008,ecmwf}

提示:data/gnss/存GNSS观测RINEX文件(如LEO00100.23o),data/leo/存LEO轨道SP3文件(如grace_fo_2023001.sp3),data/eop/存IERS EOP C04文件(finals2000A.all)。Groops不自动创建这些目录,若缺失,运行时抛std::filesystem::create_directories: Permission denied(即使有权限,因父目录不存在)。

4.2stationinfo文件:低轨卫星站信息的JSON格式规范

GnssStationinfoCreate.cpp生成的stationinfo是Groops识别LEO卫星的“身份证”。必须存于config/目录下,命名规则:<satellite_name>_stationinfo.json(如grace_fo_stationinfo.json)。内容为严格JSON,无注释、无尾逗号、字段顺序固定:

{ "makerName": "JPL", "makerNumber": 1, "approxPosition": [6378137.0, 0.0, 0.0], "antenna": { "type": "BLOCK IIIF", "pco": [0.0, 0.0, 0.0], "pcvFile": "antenna/grace_fo_pcv.txt" }, "receive": { "gnssTypes": ["GPS", "GLONASS"], "frequency": "L1+L2" } }

字段说明:

  • makerNumber:必须为整数,非字符串;
  • approxPosition:WGS84地心坐标系(m),长度必须为3的数组;
  • antenna.pcvFile:路径相对于config/目录,即config/antenna/grace_fo_pcv.txt必须存在;
  • receive.gnssTypes:数组,值必须为["GPS","GLONASS","GALILEO","BEIDOU"]子集。

注意:pcvFile中PCV数据格式为5列:elevation azimuth L1_L2_ratio L1_delay L2_delay,每行用空格分隔,首行必须为# PCV for GRACE-FO(Groops校验注释行)。

4.3receiver_definition.xml:接收机天线PCO/PCV的XML定义

GnssReceiverDefinitionCreate.cpp输出的XML文件用于定义GNSS接收机能力。必须存于config/receiver/,命名<receiver_id>_definition.xml(如jpl_grace_fo_definition.xml)。模板如下:

<?xml version="1.0" encoding="UTF-8"?> <receiverDefinition> <antennaDefinition> <name>GRACE-FO</name> <pcoX unit="m">0.0</pcoX> <pcoY unit="m">0.0</pcoY> <pcoZ unit="m">0.0</pcoZ> <pcvFile>antenna/grace_fo_pcv.txt</pcvFile> </antennaDefinition> <signalDefinition> <gnssType>GPS</gnssType> <frequency>L1</frequency> <codeType>C/A</codeType> </signalDefinition> <signalDefinition> <gnssType>GPS</gnssType> <frequency>L2</frequency> <codeType>P</codeType> </signalDefinition> </receiverDefinition>

关键约束:

  • <pcvFile>路径同stationinfo,相对config/目录;
  • <gnssType>值必须大写,且与stationinfo中receive.gnssTypes一致;
  • <frequency>只能是L1、L2、L5、E1、E5a等标准频点。

4.4orbit_sampling.conf:轨道插值采样率的INI配置

Groops轨道计算前需插值至1Hz,此配置存于config/orbit/,文件名orbit_sampling.conf,内容为INI格式:

[Sampling] # 插值方法:polynomial(多项式)或 lsq(最小二乘拟合) method = polynomial # 多项式阶数(仅method=polynomial时有效) polynomialOrder = 5 # 采样间隔(秒) samplingInterval = 1.0 # 是否启用历元外推(谨慎开启) enableExtrapolation = false

提示:polynomialOrder=5是某实验室实测最优值——阶数<4则轨道高频噪声抑制不足,>6则在弧段边界产生吉布斯振荡。enableExtrapolation=false是血泪经验:开启后resample orbit在弧段首尾会生成虚假加速度。

5. 常见问题排查:五个让开发者凌晨三点还在查日志的致命坑

Groops的错误提示以“优雅”著称:报错信息常为Error in OrbitIntegration,却不告诉你错在哪一行、哪个变量。以下是某跨平台系统开发中,A同学和我共同整理的TOP5翻车现场,每条均附可复现场景和急救命令。

5.1 现象:groops_gui启动后空白窗口,终端输出QMetaObject::connectSlotsByName: No matching signal for on_actionOpen_triggered()

原因:QT5.15.2安装时未勾选qtwebengineaddons组件,导致GUI的XML解析模块缺失。on_actionOpen_triggered()是QAction的槽函数,其信号连接依赖QtWebEngineWidgets的元对象系统。
解决:重装QT5.15.2,在安装脚本qt_install.txt中将Components行改为:
Components=qt.qt5.5152.gcc_64,qt.qt5.5152.qtwebengine,qt.qt5.5152.qtwebengineaddons
然后sudo /opt/Qt5.15.2/Tools/QtInstallerFramework/3.1/installerbase --uninstall卸载,再重装。

5.2 现象:运行groops -c config/orbit_sampling.conf -i data/leo/grace_fo_2023001.sp3报错terminate called after throwing an instance of 'std::runtime_error' what(): Cannot open file: data/eop/finals2000A.all

原因:data/eop/目录存在,但finals2000A.all文件为空或权限为-rw-------(仅root可读)。Groops以当前用户身份运行,无权读取。
解决:

wget -O data/eop/finals2000A.all https://data.iers.org/products/eop/rapid/finals2000A.all chmod 644 data/eop/finals2000A.all

提示:IERS官网URL可能变更,若wget失败,用浏览器打开https://www.iers.org/IERS-Data/Earth-Orientation-Parameters/手动下载,保存为finals2000A.all。

5.3 现象:GnssStationinfoCreate程序编译通过,但运行时报Segmentation fault (core dumped),gdb调试显示崩溃在std::vector::push_back

原因:approxPosition数组在stationinfo.json中写成[6378137, 0, 0](整数),而Groops内部期望double类型。JSON解析器将整数转为int64_t,push_back时发生类型截断。
解决:强制写为浮点数:[6378137.0, 0.0, 0.0]。用jq校验:

jq '.approxPosition | map(type=="number")' config/grace_fo_stationinfo.json # 正确输出:[true, true, true]

5.4 现象:groops计算轨道时在第3个弧段停止,日志末尾为Error: NaN in acceleration vector at epoch 2023-01-01T00:00:03.000

原因:models/jb2008/目录下缺少jb2008_coeffs.dat(JB2008大气模型系数文件),导致thermosphereJB2008.h中getDensity()返回NaN,进而加速度计算失效。
解决:进入src/external/jb2008/目录,运行其自带的generate_coeffs.py(需Python 3.8+):

cd /home/user/groops/src/external/jb2008 python3 generate_coeffs.py --output /home/user/groops/models/jb2008/jb2008_coeffs.dat

注意:generate_coeffs.py需numpy和scipy,pip3 install numpy scipy。

5.5 现象:groops_gui中点击“Run Orbit Determination”后无响应,htop显示CPU占用100%,strace -p $(pgrep groops_gui)显示反复openat(AT_FDCWD, "/proc/self/status", ...)

原因:/proc/self/status中CapEff:字段值过大(如0000003fffffffff),触发Groops GUI的权限检测死循环。这是Linux内核5.4.0-150+的安全补丁引入的副作用。
解决:临时降级内核(安全起见,仅测试环境):

sudo apt install linux-image-5.4.0-144-generic linux-headers-5.4.0-144-generic sudo reboot # 启动时在GRUB选5.4.0-144

6. 验证Groops定轨流程跑通:用GRACE-FO真实数据走完“输入→预处理→轨道输出”全链路

装完不验证等于没装。这里用GRACE-FO卫星2023年1月1日的真实数据,走一遍从原始观测到1Hz精密轨道的完整流程。所有数据均可公开获取,无需特殊权限。验证目标:生成output/orbit/grace_fo_2023001_orbit.res,且文件头含# Resampled orbit at 1.0 s interval,末尾时间戳为2023-01-01T23:59:59.000。

6.1 准备最小可行数据集:3个文件+2个配置

在/home/user/groops/下创建验证专用目录:

mkdir -p verify/{data,config,output} # 下载GRACE-FO RINEX观测(简化版,仅1小时) wget -O verify/data/grace_fo_2023001.23o https://cddis.nasa.gov/archive/gnss/data/daily/2023/001/23o/grace_fo_2023001.23o.Z gunzip verify/data/grace_fo_2023001.23o.Z # 下载GRACE-FO SP3精密轨道(1天) wget -O verify/data/grace_fo_2023001.sp3 https://cddis.nasa.gov/archive/gnss/products/orbit/2023/001/grace_fo_2023001.sp3.Z gunzip verify/data/grace_fo_2023001.sp3.Z # 下载EOP文件(已放data/eop/,软链复用) ln -sf /home/user/groops/data/eop/finals2000A.all verify/data/

配置文件verify/config/verify.conf(Groops主配置):

<?xml version="1.0" encoding="UTF-8"?> <groopsConfig> <input> <observationFile>data/grace_fo_2023001.23o</observationFile> <orbitFile>data/grace_fo_2023001.sp3</orbitFile> <eopFile>data/finals2000A.all</eopFile> </input> <output> <orbitFile>output/grace_fo_2023001_orbit.res</orbitFile> </output> <processing> <stationInfo>config/grace_fo_stationinfo.json</stationInfo> <receiverDef>config/jpl_grace_fo_definition.xml</receiverDef> <orbitSampling>config/orbit_sampling.conf</orbitSampling> </processing> </groopsConfig>

6.2 执行四步命令链:预处理→LEO插值→GNSS观测提取→轨道积分

Groops无单命令端到端流程,必须按pptx中流程图顺序执行四个程序。每个命令后检查output/目录是否生成预期文件:

# 步骤1:LEO数据预处理(去重、分弧段) groops -p LEO_Preprocessing -c verify/config/verify.conf # 预期:verify/output/ 中生成 grace_fo_2023001_arc1.leo, grace_fo_2023001_arc2.leo... # 步骤2:LEO轨道/姿态插值(匹配观测历元) groops -p LEO_Interpolation -c verify/config/verify.conf # 预期:verify/output/ 中生成 grace_fo_2023001_interp.orbit, grace_fo_2023001_interp.attitude # 步骤3:GNSS观测值提取(Timeseries模块) groops -p GNSS_Observation -c verify/config/verify.conf # 预期:verify/output/ 中生成 grace_fo_2023001_gnss.obs # 步骤4:高精度轨道积分(核心Loop Programs) groops -p Orbit_Determination -c verify/config/verify.conf # 预期:verify/output/ 中生成 grace_fo_2023001_orbit.res

提示:-p参数指定处理模块名,必须与Groops源码中src/applications/下的目录名完全一致(大小写敏感)。若报Unknown processing module,检查src/applications/Orbit_Determination/是否存在。

6.3 验证输出文件:用head/tail/grep三连击确认关键指标

最终文件verify/output/grace_fo_2023001_orbit.res是Groops定轨成功的铁证。用以下命令验证:

# 1. 检查文件头是否含1Hz标识 head -n 5 verify/output/grace_fo_2023001_orbit.res | grep "1.0 s" # 应输出:# Resampled orbit at 1.0 s interval # 2. 检查总行数(24小时×3600秒=86400行,允许±10行误差) wc -l verify/output/grace_fo_2023001_orbit.res | awk '{print $1}' # 应输出:86390~86410 # 3. 检查末尾时间戳是否为当天最后一秒 tail -n 1 verify/output/grace_fo_2023001_orbit.res | cut -d' ' -f1 # 应输出:2023-01-01T23:59:59.000 # 4. 检查位置坐标是否为合理范围(WGS84地心坐标,单位m) tail -n 1 verify/output/grace_fo_2023001_orbit.res | awk '{print $2,$3,$4}' | \ awk '{x=$1; y=$2; z=$3; r=sqrt(x*x+y*y+z*z); print "Radius:", r, "m"}' # 应输出:Radius: 6700000~7200000 m(LEO典型轨道半径)

若以上四条全通过,则Groops定轨流程真正跑通。此时你可以把verify/目录打包,作为“环境已验证”的交付物给协作方——他们只需解压、source /etc/profile,就能复现你的结果。

从那以后我每次部署Groops,都强制走一遍这个GRACE-FO验证链:不看日志是否绿色,只认wc -l的数字和tail -n1的时间戳。因为Groops的“成功”不是编译通过,而是output/里那个.res文件,安静躺在那里,带着精确到毫秒的历元和分米级的位置。希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询