一天,BH4ERB 给我发来消息他说:“你敢不敢和我接收 GK2A 气象卫星”,我豪爽的答应了:“我当然敢”,周日下午在 xx 路 xx 大厦举行,谁不来谁就是怂货。
我原本以为我恐吓了 BH4ERB,BH4ERB 应该躲在家,不敢找我,可正当这时,我听见了音乐声,原来是我手机响了,一看,竟然是 BH4ERB 发来的消息,他还真有勇气,我接通了电话,听道电话那头骂道:“
小废物,你怎么还不来,再不来你妈的泌尿系统就被我搞坏了。”我听到他对我的毒骂之后,我回骂道:“我要把你挂到同性恋网站上,帮你炒作一番,你说好不好啊。”
他吓得没再回应我,可是到了周日,BH4ERB 竟然又给我发消息了,他还真要和我举行接收大战,于是我按照约定,到达了 xx 大厦,可他已经等我很久了。
……
GK2A 是韩国的气象卫星,由韩国气象厅开发,KARI 制造。于 2018 年 12 月 4 日由欧洲航天局的阿丽亚娜 5 号将其送上轨道,属于地球同步卫星。
最近 HAM 大佬 BH4ERB 对这颗卫星感上了兴趣,决定尝试接收并解码 GK2A 下传的数据。
接收数据需要使用到一个名为 Goestools 的工具,钦定在 Linux 下运行。由于 BH4ERB 对 Linux 并不熟悉,在多次尝试编译安装,却报错无法启动之后,找到了博主帮忙,希望跟博主一起合作填完这个巨坑。
准备设备
- 树莓派或 x86 主机(钦定 Linux 系统)
- RTL-SDR 或 Airspy(钦定接收设备)
- LNA 放大器
- 强烈安利 2.4G 栅格天线(大锅盖+螺旋天线亦可)
BH4ERB 选用的是一台 x86 主机,在博主的安利下装了 Debian Buster 服务器版,SDR 选用的是 Airspy R2,搭配 2.4G 栅格天线,方位角对准 160 度。
值得注意的是,栅格天线前端需要反方向安装。
由于篇幅所限,安装天线、Linux 系统等过程和安装完成后的更换软件源等操作不再赘述(其实是懒得写)。
安装软件
首先 SSH 连上主机,更新一波软件源。
1 | BH4ERB@pc:~$ sudo apt update |
由于是采用编译安装,所以要准备编译的环境。
一次性安装所有需要的包。
1 | BH4ERB@pc:~$ sudo apt install wget build-essential cmake zlib1g-dev git python3 python3-pip unzip libusb-1.0-0-dev pkg-config libairspy-dev rtl-sdr librtlsdr-dev libopencv-dev |
编译安装 Goestools
此外,Goestools 还需要依赖于 Airspy、RTL-SDR 的驱动才能正常工作,所以在编译安装 Goestools 之前还需要手动编译安装 Airspy、RTL-SDR 的相关驱动及支持库。
编译 Airspy 的驱动及支持库。
1 | BH4ERB@pc:~$ git clone https://github.com/airspy/airspyone_host |
接着编译安装 RTL-SDR 的驱动。
1 | BH4ERB@pc:~$ git clone https://github.com/osmocom/rtl-sdr.git |
接下来才是编译 Goestools。
1 | BH4ERB@pc:~$ git clone --recursive https://github.com/sam210723/goestools |
由于 BH4ERB 没有意识到需要先安装驱动和支持库的这个问题,于是毫不犹豫地跳进了这个坑…(反面教材
所以在启动 Goestools 时,他得到了类似于这样的报错。
1 | terminate called after throwing an instance of 'std::runtime_error' |
要解决这个问题,只有安装了 Airspy 和 RTL-SDR 的驱动和支持库后,重新编译一次 Goestools。
Goestools 的配置文件位于 ~/goestools/etc/
目录下,如果使用 RTL-SDR,需要对 goesrecv.conf
做一番修改,将第六行的 source = "airspy"
改为 source = "rtlsdr"
,并注释掉 16~27 行的内容,在 29~34 行做相应调整,此外,配置文件中接收的频率保持默认就好。
编译安装 xrit-rx
什么鬼
这是专门用于接收 · 解码 GK2A 下行数据的一个工具,解码的数据以 .lrit
或是 .jpg
、.png
、.gif
的形式输出。xrit-rx 需要搭配 Goestools 食用。
编译安装 + 踩坑
xrit-rx 用 Python 3 编写,开箱即用,灰常方便。
博主先把仓库 Clone 到了本地,启动。
1 | BH4ERB@pc:~$ git clone https://github.com/sam210723/xrit-rx |
然后… 报错了。
1 | Traceback (most recent call last): |
原来是缺失模块,安装就好了。
1 | BH4ERB@pc:~/xrit-rx/src$ pip3 install -r ~/xrit-rx/requirements.txt |
安装好缺失模块后再试一次… 成功了。
1 | BH4ERB@pc:~/xrit-rx/src$ python3 xrit-rx.py |
导入密钥
解码 GK2A 的数据需要用到一个密钥,直至目前,该密钥适用于 GK2A 卫星所有的下传数据。
1 | BH4ERB@pc:~/xrit-rx/src$ wget --no-check-certificate https://c.ibcl.us/GK2A-Decode_20190811/EncryptionKeyMessage_001F2904C905.bin |
然而这个密钥本身也是加密的,所以在食用前,还需要对密钥解密一次。
好在 xrit-rx 已经预置了解密的工具。
1 | BH4ERB@pc:~/xrit-rx/src$ python3 tools/keymsg-decrypt.py EncryptionKeyMessage_001F2904C905.bin 001F2904C905 |
解密后生成的密钥名为 EncryptionKeyMessage.bin.dec
,位于 xrit-rx 的 src 目录下。
万事俱备
运行软件
已经安装好了解码必须的软件,只需要运行对应的软件就可以了。
打开一个终端,先运行 Goesrecv,正常的话应该得到类似下面的回显。
1 | BH4ERB@pc:~$ goesrecv -i 1 -c ~/goestools/etc/goesrecv.conf |
然后另开一个终端,运行 xrit-rx,xrit-rx 随即会与 Goesrecv 模块建立连接,这时便开始解码了。
如果一切顺利,回显应该像下面这样。
1 | BH4ERB@pc:~$ cd xrit-rx/src |
得到图像
一段时间后,xrit-rx 会自动将接收到的图片存为 .jpg 和 .gif 图像,生成的图像位于 /home/BH4ERB/xrit-rx/src/received,接收到的图片会自动根据时间来排序。
Docker 大法
为(作)了(为)方(Docker)便(的)起(信)见(徒),博主特地制作了一个用接收 GK2A 卫星的 Docker 镜像,以简化部署过程。
Dockerfile 位于 bclswl0827/GK2A-Docker,总的来说,部署只需要三步。
1 | BH4ERB@pc:~$ docker volume create xrit-rx |
需要注意的是,如果使用的是 RTL-SDR,则需要将部署命令中 airspy
字段替换为 rtlsdr
。
此后,得到的图片便可在 Docker 持久卷路径 /var/lib/docker/volumes/xrit-rx/_data/src/received
下找到。
附上 BH4ERB 使用体验:
香疯了!!!
成果展示
写在最后
续写接收大战
第一回合,我占上风,他比不过我,到了第六回合,他就主动认输了。
第二局,他开始占上风,我也不甘势弱,我们僵持了一百多个回合,我因为轻敌,被他击败了。
从那时开始,我就不轻敌了,我认真研究他的套路,于是我总结出了一种方案。
第二天,我们举行第三局,他使用祖传方案,对我发动猛烈的攻击,我们势均力敌,平分秋色,我们比了 3 个多小时,也没分出胜负。
后来,他不知不觉的睡着了,我趁着这个好机会,一记rm -rf /*
,打的他不敢还手,对他的打击比砸了他的天线和 SDR 还大。
改编自 《别样的碰碰车大战》。《别样的碰碰车大战》是我国作家张祥如创作的短篇小说,也是其代表作。作品讲述主人公凭着聪明才智,在强大敌人仵沉蛋的挑衅下,不畏强暴,敢于反抗,最后在碰碰车大战中取得胜利的故事。小说发表后,当时的社会流传“不读《碰碰车》,就无法在文坛混”的谚语。《别样的碰碰车大战》在叙事深度的挖掘上远远超出了同时代作家所能及的层次。它开创了后世“意识流小说”、“叙事小说”的先河。《别样的碰碰车大战》发表以来,被译成多种文字广为流传,Esu.wiki 收录了其原版作品。
关于 BH4ERB 大佬
希望大佬别找我麻烦…
BH4ERB 大佬现居上海,折腾 GK2A 卫星时正值台风利奇马过境。
是大佬果然不一样,说出来的话都辣么有气势…
我要看着台风从我头顶上过去。
博主还能说什么呢,希望天线不要被吹倒吧…
溜了溜了~~