1. 基准站选址与架设基础
任务说明
本次实战完成RTK基准站的选址评估与标准架设流程。你将学习选址的量化判断方法,并完成从部件组装到参数配置的完整架设闭环。最终通过接收机状态灯与手簿软件连接结果验证架设是否成功。
选址原则与量化判断
基准站选址直接影响差分数据质量,需同时满足以下条件:
- 天空视野:周围障碍物仰角不超过15°,保证卫星信号接收
- 电磁环境:远离大功率发射塔、雷达站至少500m,避开高压线正下方
- 多路径抑制:远离大面积平整反射面(水面、金属幕墙、停车场)
- 稳定性:架设点无震动、无沉降,地质坚实
- 已知点优先:若后续需要厘米级坐标,应架设在已知控制点上
快速判断方法:使用手簿软件查看卫星信噪比(SNR),若视野内卫星SNR均大于35dBHz且无频繁跳变,则选址合格。
设备清单
本次架设所需设备:RTK基准站接收机、电台天线(或4G/5G模块)、三脚架、基座与连接杆、量高尺、手簿(已安装配套软件)、电池与充电器。
标准架设流程
按以下顺序完成架设:
- 架设三脚架:展开至合适高度,踩实脚钉,通过圆水准器粗平
- 安装基座与连接杆:将基座固定在三脚架头上,旋紧连接杆
- 安装接收机:将基准站接收机旋入连接杆顶部,用手旋紧即可,不要使用扳手
- 连接天线:将电台天线(或4G天线)接入接收机对应接口,确保拧紧
- 精确整平:通过基座上的水准管微调,使气泡居中
- 量取天线高:用卷尺从测量标志中心量至接收机天线相位中心标记线,记录斜高或垂直高
- 开机与参数配置:开启接收机电源,使用手簿蓝牙连接,配置基准站坐标与数据链参数
关键完整代码:基准站参数配置与状态验证
以下Python脚本模拟基准站开机后的参数配置流程,并验证配置正确性。实际设备操作通过手簿完成,本代码用于理解配置逻辑与自动校验:
import json
import math
from dataclasses import dataclass
@dataclass
class BaseStationConfig:
"""基准站配置参数"""
lat_deg: float # 纬度(度)
lon_deg: float # 经度(度)
height_m: float # 椭球高(米)
antenna_height_m: float # 天线斜高(米)
data_link: str # 数据链类型: "radio" / "4g"
radio_channel: int # 电台频道(radio模式有效)
baud_rate: int # 串口波特率
broadcast_interval_s: int # 差分数据播发间隔(秒)
def validate_position(lat_deg: float, lon_deg: float) -> bool:
"""验证坐标是否在中国大陆范围内(简单校验)"""
return 18.0 <= lat_deg <= 54.0 and 73.0 <= lon_deg <= 135.0
def validate_antenna_height(measured_slope_m: float, pole_tilt_deg: float = 0.0) -> float:
"""
将斜高转换为垂直高。
当测量方式为斜高且天线杆有倾斜时,需进行余弦修正。
若为垂直测量,tilt_deg传0即可。
"""
if pole_tilt_deg == 0.0:
return measured_slope_m
return measured_slope_m * math.cos(math.radians(pole_tilt_deg))
def build_config(raw: dict) -> BaseStationConfig:
"""从手簿输入构建配置对象,并执行合法性校验"""
cfg = BaseStationConfig(
lat_deg=float(raw["lat"]),
lon_deg=float(raw["lon"]),
height_m=float(raw["height"]),
antenna_height_m=float(raw["antenna_slope"]),
data_link=raw["link"],
radio_channel=int(raw.get("channel", 0)),
baud_rate=int(raw.get("baud", 115200)),
broadcast_interval_s=int(raw.get("interval", 1)),
)
# 坐标范围校验
if not validate_position(cfg.lat_deg, cfg.lon_deg):
raise ValueError("坐标超出中国大陆范围,请检查输入")
# 天线高合理性校验(通常0.5m~3m)
if not (0.3 <= cfg.antenna_height_m <= 3.0):
raise ValueError("天线高超出合理范围(0.3m~3.0m)")
# 数据链参数校验
if cfg.data_link == "radio" and not (1 <= cfg.radio_channel <= 32):
raise ValueError("电台频道需在1~32之间")
if cfg.data_link not in ("radio", "4g"):
raise ValueError("数据链类型仅支持radio或4g")
return cfg
def generate_rtcm_config(cfg: BaseStationConfig) -> dict:
"""生成接收机内部配置指令(模拟)"""
return {
"cmd": "SET_BASE_POSITION",
"lat_deg": round(cfg.lat_deg, 9),
"lon_deg": round(cfg.lon_deg, 9),
"height_m": round(cfg.height_m, 4),
"antenna_height_m": round(cfg.antenna_height_m, 4),
"data_link": cfg.data_link,
"radio_channel": cfg.radio_channel if cfg.data_link == "radio" else None,
"baud_rate": cfg.baud_rate,
"broadcast_interval_s": cfg.broadcast_interval_s,
}
def verify_config(cfg: BaseStationConfig, actual_rtcm: dict) -> bool:
"""验证实际生成的RTCM配置与预期一致"""
expected = generate_rtcm_config(cfg)
# 浮点比较使用近似判断
for key in ["lat_deg", "lon_deg", "height_m", "antenna_height_m"]:
if abs(expected[key] - actual_rtcm[key]) > 1e-6:
return False
return (expected["data_link"] == actual_rtcm["data_link"] and
expected["radio_channel"] == actual_rtcm["radio_channel"] and
expected["baud_rate"] == actual_rtcm["baud_rate"] and
expected["broadcast_interval_s"] == actual_rtcm["broadcast_interval_s"])
# ===== 最小调用入口 =====
if __name__ == "__main__":
# 模拟手簿输入(实际由用户在软件中填写)
user_input = {
"lat": "39.904200", # 北京某已知点纬度
"lon": "116.407400", # 经度
"height": "45.600", # 椭球高(米)
"antenna_slope": "1.850", # 实测斜高(米)
"link": "radio",
"channel": "8",
"baud": "115200",
"interval": "1",
}
# 执行配置构建与校验
config = build_config(user_input)
print(f"配置校验通过:坐标({config.lat_deg:.6f}, {config.lon_deg:.6f}),天线高{config.antenna_height_m:.3f}m")
# 生成RTCM配置指令
rtcm_cmd = generate_rtcm_config(config)
print("RTCM配置指令生成:")
print(json.dumps(rtcm_cmd, indent=2, ensure_ascii=False))
# 模拟接收机返回的确认配置(实际由设备回传)
device_ack = rtcm_cmd.copy() # 实际场景中此数据来自接收机回读
ok = verify_config(config, device_ack)
print(f"配置一致性验证:{'通过' if ok else '失败'}")
运行与验证方法
运行方式:将上述代码保存为 base_station_config.py,在Python 3.8+环境执行 python base_station_config.py。
预期输出(由代码逻辑直接推出):
配置校验通过:坐标(39.904200, 116.407400),天线高1.850m
RTCM配置指令生成:
{
"cmd": "SET_BASE_POSITION",
"lat_deg": 39.9042,
"lon_deg": 116.4074,
"height_m": 45.6,
"antenna_height_m": 1.85,
"data_link": "radio",
"radio_channel": 8,
"baud_rate": 115200,
"broadcast_interval_s": 1
}
配置一致性验证:通过
判定标准:程序正常结束且输出“配置一致性验证:通过”,说明参数配置逻辑正确。若修改输入为非法坐标(如纬度95),程序应抛出ValueError并提示原因。
实机架设验证
完成上述模拟验证后,在真实设备上按以下步骤确认架设成功:
- 状态灯检查:接收机电源灯常亮,卫星灯开始闪烁(搜索卫星),1~3分钟后转为常亮(已锁定卫星)
- 数据链指示:电台模式时TX灯随差分数据播发同步闪烁;4G模式时网络灯常亮
- 手簿连接测试:手簿软件中显示基准站坐标与设置一致,且能看到差分信号强度指示
- 流动站验证:开启流动站接收机,若手簿显示“固定解”(Fixed)且平面精度因子(PDOP)小于3,则基准站架设成功
常见问题与处理
- 卫星灯不转常亮:检查周围是否有遮挡,等待2~3分钟;若仍无法锁定,考虑更换架设点
- 电台TX灯不闪:确认频道与流动站一致,检查天线连接是否牢固
- 手簿无法连接:确认蓝牙已配对,接收机编号输入正确
- 固定解长时间无法获得:检查基准站坐标是否准确(已知点架设时),或流动站距离是否超过数据链覆盖范围