-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsearch.xml
558 lines (304 loc) · 406 KB
/
search.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
<?xml version="1.0" encoding="utf-8"?>
<search>
<entry>
<title>Bernese 5.2 在 Ubuntu 16.04.6 编译安装</title>
<link href="/2019/06/25/Bernese52_install/"/>
<url>/2019/06/25/Bernese52_install/</url>
<content type="html"><![CDATA[<p><a href="http://www.bernese.unibe.ch/" target="_blank" rel="noopener">Bernese</a> 是三大著名的高精度 GNSS 数据处理软件之一。由瑞士伯尔尼大学天文学院( Astronomical Institute of the University of Bern,<a href="http://www.aiub.unibe.ch/" target="_blank" rel="noopener">AIUB</a>)开发,能够处理包括 GPS、GLONASS 和卫星激光测距(SLR)等多种观测数据。该程序支持 Windows 和 UNIX/Linux 操作系统,具有图形界面(使用 <a href="https://www.qt.io/" target="_blank" rel="noopener">Qt</a> 实现),操作友好,模型准确,解算精度高,并且具有强大的数据批处理能力。</p><p>当前 Bernese 软件可以购买的最新版本为 5.2,获得 Linux 版本源码后,可使用本文介绍的方法将其安装到运行 Ubuntu 16.04 操作系统的计算机上。<a id="more"></a>本文主要有三部分内容,前两部分都是关于 Linxu 系统的(由于很久不用 Linux 了,所以想趁此机会留下笔记,方便以后拾遗),熟悉 Linux 的童鞋可以忽略,直奔第三部分。</p><h2 id="1-Ubuntu-16-04-安装与优化"><a href="#1-Ubuntu-16-04-安装与优化" class="headerlink" title="1. Ubuntu 16.04 安装与优化"></a>1. Ubuntu 16.04 安装与优化</h2><p>Ubuntu16.04 是 Canonical 公司于 2016 年发布的长期支持版本(<strong>L</strong>ong <strong>T</strong>ime <strong>S</strong>upport, <strong>LTS</strong>),目前版本号已升至 <strong>16.04.6</strong>,本文系统环境使用该版本,下载地址:<a href="http://releases.ubuntu.com/xenial/" target="_blank" rel="noopener">http://releases.ubuntu.com/xenial/</a>。</p><p>根据需求选择 32 位 <a href="http://releases.ubuntu.com/xenial/ubuntu-16.04.6-desktop-i386.iso" target="_blank" rel="noopener">ubuntu-16.04.6-desktop-i386.iso</a> 或 64 位 <a href="http://releases.ubuntu.com/xenial/ubuntu-16.04.6-desktop-amd64.iso" target="_blank" rel="noopener">ubuntu-16.04.6-desktop-amd64.iso</a>,安装步骤就不叙述了,网上很多教程,如果不想使用真机环境,可在虚拟机下安装。这里重点讲下安装后要做的一些优化,其中标题后面带有 <strong>(Optional)</strong> 的指可选优化项目。</p><h3 id="1-1-更新软件源"><a href="#1-1-更新软件源" class="headerlink" title="1.1 更新软件源"></a>1.1 更新软件源</h3><p>安装好 Ubuntu 后,第一件事就是更新软件源,因为这会节约很多时间。阿里云源在国内应该最快(网易 163 源速度也还不错),此处使用阿里云源。<strong><code>Ctr+Alt+T</code></strong> 打开终端,执行命令:</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak #备份</span><br><span class="line">sudo gedit /etc/apt/sources.list #修改软件源地址</span><br><span class="line">sudo apt-get update #更新列表</span><br></pre></td></tr></table></figure><p>第二行命令后需添加的阿里云源地址如下:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line">deb-src http://archive.ubuntu.com/ubuntu xenial main restricted #Added by software-properties</span><br><span class="line">deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted</span><br><span class="line">deb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted multiverse universe #Added by software-properties</span><br><span class="line">deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted</span><br><span class="line">deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted multiverse universe #Added by software-properties</span><br><span class="line">deb http://mirrors.aliyun.com/ubuntu/ xenial universe</span><br><span class="line">deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe</span><br><span class="line">deb http://mirrors.aliyun.com/ubuntu/ xenial multiverse</span><br><span class="line">deb http://mirrors.aliyun.com/ubuntu/ xenial-updates multiverse</span><br><span class="line">deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse</span><br><span class="line">deb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse #Added by software-properties</span><br><span class="line">deb http://archive.canonical.com/ubuntu xenial partner</span><br><span class="line">deb-src http://archive.canonical.com/ubuntu xenial partner</span><br><span class="line">deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted</span><br><span class="line">deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted multiverse universe #Added by software-properties</span><br><span class="line">deb http://mirrors.aliyun.com/ubuntu/ xenial-security universe</span><br><span class="line">deb http://mirrors.aliyun.com/ubuntu/ xenial-security multiverse</span><br></pre></td></tr></table></figure><p>当然,也可以使用 <strong><code>software & update</code></strong> 即 <strong><code>软件和更新</code></strong> 更新,图形化的界面可能更加直观。</p><p>设置完软件源后,更新软件源并升级系统:</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">sudo apt-get update && sudo apt-get upgrade </span><br><span class="line"><span class="meta">#</span> 或分步执行</span><br><span class="line"><span class="meta">#</span> sudo apt-get update</span><br><span class="line"><span class="meta">#</span> sudo apt-get upgrade</span><br></pre></td></tr></table></figure><h3 id="1-2-Unity-桌面环境调整(Optional)"><a href="#1-2-Unity-桌面环境调整(Optional)" class="headerlink" title="1.2 Unity 桌面环境调整(Optional)"></a>1.2 Unity 桌面环境调整(Optional)</h3><p>Unity 是 Ubuntu 自己打造的桌面环境,有人认为 Unity 桌面环境糟糕的设计使很多 Ubuntu 用户不满,使其转向 Linux Mint 等非 Unity 桌面系列系统。</p><p>Unity 优化工具 <strong><code>Unity Tweak Tool</code></strong>,可用来调整外观设置、鼠标、Unity 启动器、窗口行为等选项,可直接在 <strong><code>Ubuntu软件中心</code></strong> 搜索安装或使用命令: </p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo apt-get install unity-tweak-tool</span><br></pre></td></tr></table></figure><h3 id="1-3-安装Linux显卡驱动"><a href="#1-3-安装Linux显卡驱动" class="headerlink" title="1.3 安装Linux显卡驱动"></a>1.3 安装Linux显卡驱动</h3><p>Ubuntu 16.04 支持大多数 Nvidia 和 Intel 显示硬件,安装适配的显卡驱动之后 Ubuntu 可以获得非常流畅的统一桌面体验。 在 <strong><code>软件和更新</code></strong> -> <strong><code>附加驱动</code></strong> 选项卡中进行选择。对于使用 Nvidia 的用户,可以通过 PPA 为 Ubuntu 安装 Nvidia 驱动。</p><p><img src="/images/GNSS/Bernese/Ubuntu_drive.jpg" alt="Ubuntu 驱动安装界面"></p><blockquote><p><strong>注意</strong>:在虚拟中使用 Ubuntu,无需安装显卡驱动。</p></blockquote><h3 id="1-4-搜狗输入法Linux版本"><a href="#1-4-搜狗输入法Linux版本" class="headerlink" title="1.4 搜狗输入法Linux版本"></a>1.4 搜狗输入法Linux版本</h3><p>UbuntuKylin 团队与搜狗输入法合作开发的搜狗输入法Linux版本已经推出多年,下载地址: <a href="http://pinyin.sogou.com/linux/,下载后直接点击安装即可。" target="_blank" rel="noopener">http://pinyin.sogou.com/linux/,下载后直接点击安装即可。</a></p><h3 id="1-5-安装-Ubuntu-受限的额外的解码器"><a href="#1-5-安装-Ubuntu-受限的额外的解码器" class="headerlink" title="1.5 安装 Ubuntu 受限的额外的解码器"></a>1.5 安装 Ubuntu 受限的额外的解码器</h3><p><strong><code>Ubnutu 额外受限</code></strong> 指的是这些解码器的包没有默认安装在 Ubuntu 系统里面,这些解码器没有默认安装在系统里面的原因是受到很多国家的法律的约束。在这些解码器安装完以后可正常播放很多格式的音视频文件,如 MP3,MP4,AVI 和以及其他的一些格式。使用下面的命令进行安装:</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo apt-get install ubuntu-restricted-extras</span><br></pre></td></tr></table></figure><blockquote><p> <strong>注意</strong>:对于初学者,如果屏幕上出现那些协议和条款,按 <strong><code>Tab</code></strong> 键在选项之间切换,使用 <strong><code>Enter</code></strong> 确认选择。</p></blockquote><h3 id="1-6-安装-adobe-flash-播放器(Optional)"><a href="#1-6-安装-adobe-flash-播放器(Optional)" class="headerlink" title="1.6 安装 adobe-flash 播放器(Optional)"></a>1.6 安装 adobe-flash 播放器(Optional)</h3><p>通常在安装完 Ubuntu 的受限额外的解码器后,你应该想通过 <strong><code>flash 播放器</code></strong> 看视频。可能因为一个问题或者其他的原因在安装 <strong><code>flash播放器</code></strong> 上遇见的问题。使用下面的命令:</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo apt-get install flashplugin-installer</span><br></pre></td></tr></table></figure><h3 id="1-7-安装-Typora-编辑器(Optional)"><a href="#1-7-安装-Typora-编辑器(Optional)" class="headerlink" title="1.7 安装 Typora 编辑器(Optional)"></a>1.7 安装 Typora 编辑器(Optional)</h3><p>Typora 是优秀的 Markdown 编辑器,便于日常笔记写作。Typora 不在 Ubuntu 默认软件仓库中,需要先添加仓库,再行安装。</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#</span> 若报错,执行注释行</span><br><span class="line"><span class="meta">#</span> sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys BA300B7755AFCFAE</span><br><span class="line">wget -qO - https://typora.io/linux/public-key.asc | sudo apt-key add -</span><br><span class="line"></span><br><span class="line"><span class="meta">#</span> 添加 Typora 软件仓库</span><br><span class="line">sudo add-apt-repository 'deb https://typora.io/linux ./'</span><br><span class="line">sudo apt-get update</span><br><span class="line"></span><br><span class="line"><span class="meta">#</span> 安装 Typora</span><br><span class="line">sudo apt-get install typora</span><br></pre></td></tr></table></figure><blockquote><p><strong>注意</strong>:Typroa 在 Ubuntu 下可能一不小心就进入全局菜单下的全屏模式了,通过快捷键 <strong><code>F11</code></strong> 切换即可。</p></blockquote><h3 id="1-8-安装-Oracle-Java(Optional)"><a href="#1-8-安装-Oracle-Java(Optional)" class="headerlink" title="1.8 安装 Oracle Java(Optional)"></a>1.8 安装 Oracle Java(Optional)</h3><p>由于系统自带的是 OpenJDK,卸载 OpenJDK 之后会带有残留,导致运行 <code>$ java -version</code> 时第一行不是 java 的版本号,会是 <code>Picked up JAVA_TOOL_OPTIONS: -javaagent:/usr/share/java/jayatanaag.jar</code> 这个提示,导致很多检测 java 版本号的脚本会运行出错,因此需要手动清除残留。</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo rm /usr/share/upstart/sessions/jayatana.conf</span><br></pre></td></tr></table></figure><p>删除 <code>/usr/share/upstart/sessions/jayatana.conf</code> 文件,重启之后再运行 <code>$ java -version</code> 就不会再有 <code>Picked up JAVA_TOOL_OPTIONS: -javaagent:/usr/share/java/jayatanaag.jar</code> 提示了。然后用如下命令安装 Oracle Java:</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#</span> 添加 Oracle Java 8 软件仓库</span><br><span class="line">sudo add-apt-repository ppa:webupd8team/java </span><br><span class="line"></span><br><span class="line"><span class="meta">#</span> 更新软件源</span><br><span class="line">sudo apt-get update </span><br><span class="line"></span><br><span class="line"><span class="meta">#</span> 安装 Oracle Java 8</span><br><span class="line">sudo apt-get install oracle-java8-installer</span><br></pre></td></tr></table></figure><h3 id="1-9-其他微调整(Optional)"><a href="#1-9-其他微调整(Optional)" class="headerlink" title="1.9 其他微调整(Optional)"></a>1.9 其他微调整(Optional)</h3><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#</span> 删除卡顿的 Libreoffice</span><br><span class="line">sudo apt-get remove libreoffice-common </span><br><span class="line"></span><br><span class="line"><span class="meta">#</span> 删除 Amazon 链接</span><br><span class="line">sudo apt-get remove unity-webapps-common </span><br><span class="line"></span><br><span class="line"><span class="meta">#</span> 删掉基本不用的自带软件,用的时候再安装</span><br><span class="line">sudo apt-get remove thunderbird totem rhythmbox empathy brasero simple-scan gnome-mahjongg aisleriot gnome-mines cheese transmission-common gnome-orca webbrowser-app gnome-sudoku landscape-client-ui-install onboard deja-dup</span><br><span class="line"></span><br><span class="line"><span class="meta">#</span> 安装上古神器 Vim</span><br><span class="line">sudo apt-get install vim</span><br><span class="line"></span><br><span class="line"><span class="meta">#</span> 安装新立得软件包管理器,也可在软件中心搜索安装</span><br><span class="line">sudo apt-get install synaptic</span><br><span class="line"></span><br><span class="line"><span class="meta">#</span> 系统默认不带解压缩 .rar 文件的功能,手动安装 unrar 程序</span><br><span class="line">sudo apt-get install unrar</span><br><span class="line"></span><br><span class="line"><span class="meta">#</span> 装上之后就可以用命令解压缩 .rar 文件了,使用如下命令解压缩文件到当前目录</span><br><span class="line">unrar x test.rar</span><br></pre></td></tr></table></figure><h2 id="2-Linux-基础命令与用户权限"><a href="#2-Linux-基础命令与用户权限" class="headerlink" title="2. Linux 基础命令与用户权限"></a>2. Linux 基础命令与用户权限</h2><p>Linux 系统的一大特色就是使用命令进行日常操作和系统管理,新手可能会感觉不太适应,但熟悉以后会发现命令其实是非常高效的执行方式。该部分内容介绍 Linxu 下的基础命令、用户权限以及用户和密码管理等基本概念。</p><h3 id="2-1-卸载软件(以-Gnome-的卸载为例)"><a href="#2-1-卸载软件(以-Gnome-的卸载为例)" class="headerlink" title="2.1 卸载软件(以 Gnome 的卸载为例)"></a>2.1 卸载软件(以 Gnome 的卸载为例)</h3><p>Ubuntu 18.04 之前的发型版本都对 <strong>Gnome</strong> 桌面环境不友好,若是体验后想卸载,可按照以下命令进行,卸载流程可借鉴至其他软件。</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#</span> 卸载掉 gnome-shell 主程序</span><br><span class="line">sudo apt-get remove gnome-shell</span><br><span class="line"></span><br><span class="line"><span class="meta">#</span> 卸载掉 gnome,并删除其配置文件</span><br><span class="line">sudo apt-get --purge remove</span><br><span class="line"><span class="meta">#</span> 或分步执行</span><br><span class="line"><span class="meta">#</span> sudo apt-get remove gnome</span><br><span class="line"><span class="meta">#</span> sudo apt-get purge gnome</span><br><span class="line"></span><br><span class="line"><span class="meta">#</span> 1)卸载不需要的依赖关系</span><br><span class="line">sudo apt-get autoremove</span><br><span class="line"></span><br><span class="line"><span class="meta">#</span> 2)清理安装 gnome 时候留下的缓存程序软件包</span><br><span class="line">sudo apt-get autoclean</span><br><span class="line"></span><br><span class="line"><span class="meta">#</span> 3)清理系统所有的缓存程序软件包</span><br><span class="line">sudo apt-get clean</span><br></pre></td></tr></table></figure><blockquote><p><strong>注意</strong>:若是在图形界面卡死,可快捷键 <strong><code>Ctrl+Alt+F1~F6</code></strong> 调出终端,抑或进入恢复模式(黑屏情况下显卡出现问题只能在无图形化界面下进行操作)。</p></blockquote><h3 id="2-2-文件-文件夹的复制、移动和删除"><a href="#2-2-文件-文件夹的复制、移动和删除" class="headerlink" title="2.2 文件/文件夹的复制、移动和删除"></a>2.2 文件/文件夹的复制、移动和删除</h3><p>Linux 下文件的复制、移动与删除命令为:<code>cp</code>,<code>mv</code>,<code>rm</code>,若遇权限问题需在前面加:<code>sudo</code>。</p><h4 id="2-2-1-文件复制命令:cp"><a href="#2-2-1-文件复制命令:cp" class="headerlink" title="2.2.1 文件复制命令:cp"></a>2.2.1 文件复制命令:<code>cp</code></h4><ul><li><p>命令格式</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">cp [-adfilprsu] source destination</span><br></pre></td></tr></table></figure></li></ul><ul><li><p>参数说明</p><ul><li><code>-a</code>: 是指 archive 的意思,指复制所有的目录</li><li><code>-d</code>: 若源文件为连接文件(link file),则复制连接文件属性而非文件本身</li><li><code>-f</code>: 强制(force),若有重复或其它疑问时,不会询问用户,而强制复制</li><li><code>-i</code>: 若目标文件(destination)已存在,在覆盖时会先询问是否真的操作</li><li><code>-l</code>: 建立硬连接(hard link)的连接文件,而非复制文件本身</li><li><code>-p</code>: 与文件的属性一起复制,而非使用默认属性</li><li><code>-r</code>: 递归复制,用于目录的复制操作</li><li><code>-s</code>: 复制成符号连接文件(symbolic link),即“快捷方式”文件</li><li><code>-u</code>: 若目标文件比源文件旧,更新目标文件</li></ul></li><li><p>操作示例</p><p>如将 <code>/test1</code> 目录下的 <code>file1</code> 文件复制到 <code>/test3</code> 目录,并将文件名改为 <code>file2</code>,可输入以下命令:</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">cp /test1/file1 /test3/file2</span><br></pre></td></tr></table></figure></li></ul><h4 id="2-2-2-文件移动命令:mv"><a href="#2-2-2-文件移动命令:mv" class="headerlink" title="2.2.2 文件移动命令:mv"></a>2.2.2 文件移动命令:<code>mv</code></h4><ul><li><p>命令格式</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">mv [-fiv] source destination</span><br></pre></td></tr></table></figure></li></ul><ul><li><p>参数说明</p><ul><li><code>-f</code>: force,强制直接移动而不询问</li><li><code>-i</code>: 若目标文件(destination)已经存在,就会询问是否覆盖</li><li><code>-u</code>: 若目标文件已经存在,且源文件比较新,才会更新</li></ul></li><li><p>操作示例</p><p>如将 <code>/test1</code> 目录下的 <code>file1</code> 移动到 <code>/test3</code> 目录,并将文件名改为 <code>file2</code>,可输入以下命令:</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">mv /test1/file1 /test3/file2</span><br></pre></td></tr></table></figure><p>移动当前目录所有文件到上一级目录</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">mv * ../ # .. 表示回到上一级目录</span><br></pre></td></tr></table></figure></li></ul><h4 id="2-2-3-文件删除命令-rm"><a href="#2-2-3-文件删除命令-rm" class="headerlink" title="2.2.3 文件删除命令: rm"></a>2.2.3 文件删除命令: <code>rm</code></h4><ul><li><p>命令格式</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">rm [-fir] 文件或目录</span><br></pre></td></tr></table></figure></li><li><p>参数说明:</p><ul><li><code>-f</code>: 强制删除</li><li><code>-i</code>: 交互模式,在删除前询问用户是否操作</li><li><code>-r</code>: 递归删除,常用在目录的删除</li></ul></li><li><p>操作示例</p><p>如删除 <code>/test</code> 目录下的 <code>file1</code> 文件,可以输入以下命令:</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">rm -i /test/file1</span><br></pre></td></tr></table></figure></li></ul><h3 id="2-3-文件-文件夹权限管理"><a href="#2-3-文件-文件夹权限管理" class="headerlink" title="2.3 文件/文件夹权限管理"></a>2.3 文件/文件夹权限管理</h3><h4 id="2-3-1-Linux-用户权限简介"><a href="#2-3-1-Linux-用户权限简介" class="headerlink" title="2.3.1 Linux 用户权限简介"></a>2.3.1 Linux 用户权限简介</h4><p>Linux 内的一切皆文件,所以对于 Linux 下文件的管理就十分的重要了。Linux 下的文件权限分为三种:<code>r</code>(读),<code>w</code>(写),<code>x</code>(执行)。Ubuntu 下查看权限的命令为:</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">ls -l filename # 文件权限查询,filename 用于指定具体文件</span><br><span class="line">ls -ld folder # 文件夹权限查询,folder 用于指定具体文件夹</span><br><span class="line">ll # 查看目录下所有内容权限情况,也可在后面指定目录</span><br></pre></td></tr></table></figure><p>如列出用户根目录下文件的权限情况,结果如下:</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br></pre></td><td class="code"><pre><span class="line">spacefan@U1604:~$ ll</span><br><span class="line">总用量 152</span><br><span class="line">drwxr-xr-x 18 spacefan spacefan 4096 6月 23 18:58 ./</span><br><span class="line">drwxr-xr-x 3 root root 4096 6月 12 05:51 ../</span><br><span class="line">-rw------- 1 spacefan spacefan 1490 6月 23 18:57 .bash_history</span><br><span class="line">-rw-r--r-- 1 spacefan spacefan 220 6月 12 05:51 .bash_logout</span><br><span class="line">-rw-r--r-- 1 spacefan spacefan 3771 6月 12 05:51 .bashrc</span><br><span class="line">drwxrwxrwx 4 spacefan spacefan 4096 6月 10 23:05 Bernesev5.2/</span><br><span class="line">drwx------ 14 spacefan spacefan 4096 6月 23 18:54 .cache/</span><br><span class="line">drwx------ 3 spacefan spacefan 4096 6月 23 11:22 .compiz/</span><br><span class="line">drwx------ 19 spacefan spacefan 4096 6月 23 14:32 .config/</span><br><span class="line">drwx------ 3 spacefan spacefan 4096 6月 12 05:56 .dbus/</span><br><span class="line">drwxr-xr-x 2 spacefan spacefan 4096 6月 12 05:56 Desktop/</span><br><span class="line">-rw-r--r-- 1 spacefan spacefan 25 6月 23 12:09 .dmrc</span><br><span class="line">drwxr-xr-x 2 spacefan spacefan 4096 6月 12 05:56 Doc/</span><br><span class="line">drwxr-xr-x 2 spacefan spacefan 4096 6月 12 05:56 Download/</span><br><span class="line">drwx------ 2 spacefan spacefan 4096 6月 23 16:22 .gconf/</span><br><span class="line">drwx------ 3 spacefan spacefan 4096 6月 23 16:21 .gnupg/</span><br><span class="line">-rw------- 1 spacefan spacefan 3140 6月 23 16:22 .ICEauthority</span><br><span class="line">drwxr-xr-x 2 spacefan spacefan 4096 6月 12 05:56 Image/</span><br><span class="line">drwx------ 3 spacefan spacefan 4096 6月 12 05:56 .local/</span><br><span class="line">drwx------ 5 spacefan spacefan 4096 6月 12 06:01 .mozilla/</span><br><span class="line">drwxr-xr-x 2 spacefan spacefan 4096 6月 12 05:56 Music/</span><br><span class="line">drwx------ 2 spacefan spacefan 4096 6月 12 05:56 .presage/</span><br><span class="line">-rw-r--r-- 1 spacefan spacefan 655 6月 12 05:51 .profile</span><br><span class="line">-rw-r--r-- 1 spacefan spacefan 0 6月 12 06:00 .sudo_as_admin_successful</span><br><span class="line">drwxr-xr-x 2 spacefan spacefan 4096 6月 12 05:56 Video/</span><br><span class="line">-rw------- 1 spacefan spacefan 1503 6月 23 18:24 .viminfo</span><br><span class="line">-rw------- 1 spacefan spacefan 150 6月 23 16:21 .Xauthority</span><br><span class="line">-rw------- 1 spacefan spacefan 84 6月 23 16:21 .xsession-errors</span><br><span class="line">-rw------- 1 spacefan spacefan 1172 6月 23 14:34 .xsession-errors.old</span><br><span class="line">-rw-rw-r-- 1 spacefan spacefan 39425 6月 22 23:35 .zcompdump</span><br></pre></td></tr></table></figure><p>可见权限表示一共有 10 位字符,其中:</p><ul><li><p>第 1 位字符代表档案类型</p><ul><li><code>-</code> 代表文件</li><li><code>d</code> 代表是目录</li><li><code>l</code> 代表链接</li></ul></li><li><p>第 2~4 位字符表示拥有者(user)权限</p><ul><li>第 2 位字符代表拥有者是否有 <strong>读</strong> 权限</li><li>第 3 位字符代表拥有者是否有 <strong>写</strong> 权限</li><li>第 4 位字符代表拥有者是否有 <strong>执行</strong> 权限</li></ul></li><li><p>第 5~7 位字符表示同组者(group)权限</p><ul><li>第 5 位字符代表同组者(group)是否有 <strong>读</strong> 权限</li><li>第 6 位字符代表同组者(group)是否有 <strong>写</strong> 权限</li><li>第 7 位字符代表同组者(group)是否有 <strong>执行</strong> 权限</li></ul></li><li><p>第 8~10 位字符表示其他用户(other)权限</p><ul><li>第 8 位字符代表其他用户(other)是否有 <strong>读</strong> 权限</li><li>第 9 位字符代表其他用户(other)是否有 <strong>写</strong> 权限</li><li>第 10 位字符代表其他用户(other)是否有 <strong>执行</strong> 权限</li></ul></li></ul><p>其中,<code>r</code> 表示文件可以被读(read),<code>w</code> 表示文件可以被写(write),<code>x</code> 表示文件可以被执行(如果它是可执行程序的话),<code>-</code> 表示未被授予权限。</p><h4 id="2-3-2-权限修改方法"><a href="#2-3-2-权限修改方法" class="headerlink" title="2.3.2 权限修改方法"></a>2.3.2 权限修改方法</h4><p>Linux 用 <code>chmod</code> 命令修改用户权限,其用法大致分为两种,1)指定某类用户的权限;2)同时指定三类用户的权限,语法为:</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">chmod [-可选参数][<权限范围>+/-/=<权限设置>] 文件/目录</span><br></pre></td></tr></table></figure><ul><li><p>可选参数列表</p><ul><li><code>-c</code>:当发生改变时报告处理信息</li><li><code>-f</code>:错误信息不输出</li><li><code>-R</code>:处理指定目录及子目录下的所有文件</li><li><code>-v</code>:运行时显示详细处理信息</li></ul></li><li><p>指定某类用户的权限</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">chmod [u/g/o/a] [+/-/=] [r/w/x] file</span><br></pre></td></tr></table></figure><ul><li><p>[u / g / o / a] 为权限范围,其中:</p><ul><li><code>u</code>:User,即文件或目录的拥有者 </li><li><code>g</code>:Group,即文件或目录的所属群组</li><li><code>o</code>:Other,除了文件或目录拥有者和所属群组外,其他用户都属于这个范围 </li><li><code>a</code>:All,即全部用户</li></ul></li><li><p>权限操作 </p><ul><li><code>+</code>:表示增加权限 </li><li><code>-</code>:表示取消权限</li><li><code>=</code>:表示取消之前的权限,并给予唯一的权限</li></ul></li><li><p>权限代号 </p><ul><li><code>r</code>:读取权限,数字代号为 “4” </li><li><code>w</code>:写入权限,数字代号为 “2” </li><li><code>x</code>:执行权限,数字代号为 “1” </li><li><code>-</code>:不具备任何权限,数字代号为 “0”</li></ul></li><li><p>file:文件名(路径)</p></li></ul><p>例如给 User 用户增加了对 <code>code</code> 目录下 <code>/readme.txt</code> 文件 <code>w</code> 和 <code>x</code> 的权限:</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo chmod u+rw code/readme.txt</span><br></pre></td></tr></table></figure></li><li><p>同时指定三类用户的权限</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">chmod [xyz] file</span><br></pre></td></tr></table></figure></li></ul><p> 其中 <code>x</code>,<code>y</code>,<code>z</code> 分别指定 <code>User</code>、<code>Group</code>、<code>Other</code> 的权限;用三位二进制数表示 <code>r</code> , <code>w</code> , <code>x</code> 三种权限(注意顺序),其中 <code>0</code> 代表没有该权限,<code>1</code> 代表有该权限,如 <code>100</code> 则表示,有 <code>r</code> 权限,无 <code>wx</code> 权限;再将这个三位的二进制数转为十进制,则是 <code>x</code>(或<code>yz</code>)的值。</p><ul><li><code>User</code>: 7 = 111,表示具有 <code>rwx</code> 权限 </li><li><code>Group</code>: 7 = 111,表示具有 <code>rwx</code> 权限 </li><li><p><code>Other</code>: 4 = 100,表示只具有 <code>r</code> 权限,而没有 <code>wx</code> 权限</p><p>例如给 <code>User</code> 和 <code>Group</code> ”读+写+执行“ 的权限(即 <code>rwx</code> ),并给 <code>Other</code> 只 ”读“(即 <code>r</code>)的权限:</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo chmod 774 code/readme.txt</span><br></pre></td></tr></table></figure><p>对当前所在目录下的所有非隐藏内容(Linux 下以 <code>.</code> 开头的为隐藏内容)做权限修改操作:</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo chmod 774 * # “*” 为通配符,代表当前目录下所有非隐藏内容</span><br></pre></td></tr></table></figure><p>对当前所在目录下的所有内容(包括以 <code>.</code> 开头的隐藏内容)做权限修改操作:</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo chmod 774 . # “.” 代表当前所在目录</span><br></pre></td></tr></table></figure><p>修改指定目录下所有内容(包括以 <code>.</code> 开头的隐藏内容)的权限:</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo chmod -R 774 code/</span><br></pre></td></tr></table></figure></li></ul><h3 id="2-4-用户和密码管理"><a href="#2-4-用户和密码管理" class="headerlink" title="2.4 用户和密码管理"></a>2.4 用户和密码管理</h3><h4 id="2-4-1-root-密码设置"><a href="#2-4-1-root-密码设置" class="headerlink" title="2.4.1 root 密码设置"></a>2.4.1 root 密码设置</h4><p>Ubuntu 普通用户第一次使用 <code>root</code> 需要设置 <code>root</code> 密码:</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo passwd root</span><br></pre></td></tr></table></figure><p>两次输入相同密码后设置成功,然后执行:</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">su root</span><br></pre></td></tr></table></figure><p>输入密码后即切换到了 <code>root</code> 用户。</p><h4 id="2-4-2-root-amp-guest-登陆设置"><a href="#2-4-2-root-amp-guest-登陆设置" class="headerlink" title="2.4.2 root & guest 登陆设置"></a>2.4.2 root & guest 登陆设置</h4><p>Ubuntu 默认的登陆界面不能采用 <code>root</code> 账号登陆,但可使用 <code>guest</code> 访客登陆。将其改为可输入用户名的形式登陆,并删除访客登陆。</p><ul><li><p><strong>第一步</strong>:给 <code>root</code> 用户设置密码</p><p> 见 <code>2.4.1</code> 小节。</p></li><li><p><strong>第二步</strong>:修改登陆界面的配置文件</p> <figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">sudo gedit /usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf</span><br><span class="line"></span><br><span class="line"><span class="meta">#</span> 若不具有修改权限,修改之</span><br><span class="line">sudo chmod 777 /usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf</span><br></pre></td></tr></table></figure><p> 在末尾增加两行后保存退出,如下所示:</p> <figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">[Seat:*]</span><br><span class="line">user-session=ubuntu</span><br><span class="line">greeter-show-manual-login=true</span><br><span class="line">allow-guest=false</span><br></pre></td></tr></table></figure><p> 如果现在用 <code>root</code> 用户在图形界面登录会有错误:<code>读取 /root/.profile 时发生错误:mesg:tty n 还需要做修改</code>。继续下一步。</p></li><li><p><strong>第三步</strong>:编辑 <code>root</code> 配置文件</p><p> 编辑 <code>/root/.profile</code> 文件:</p> <figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo gedit /root/.profile</span><br></pre></td></tr></table></figure><p> 在末尾增加:tty -s && mesg n || true,保存后退出:</p> <figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"># ~/.profile: executed by Bourne-compatible login shells.</span><br><span class="line"></span><br><span class="line">if [ "$BASH" ]; then</span><br><span class="line"> if [ -f ~/.bashrc ]; then</span><br><span class="line"> . ~/.bashrc</span><br><span class="line"> fi</span><br><span class="line">fi</span><br><span class="line"></span><br><span class="line">tty -s && mesg n || true</span><br></pre></td></tr></table></figure></li><li><p><strong>第四步</strong>:重启系统</p><p>重启系统后,上述修改生效,选择 <code>登陆</code> 按钮,输入 <code>root</code> 为登录用户,再输入密码。</p></li></ul><h3 id="2-4-3-用户密码修改"><a href="#2-4-3-用户密码修改" class="headerlink" title="2.4.3 用户密码修改"></a>2.4.3 用户密码修改</h3><p>普通用户密码修改只能由 <code>root</code> 完成,操作过程及结果如下:</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">spacefan@U1604:~$ su root</span><br><span class="line">密码: </span><br><span class="line">root@U1604:/home/spacefan# passwd spacefan</span><br><span class="line">输入新的 UNIX 密码: </span><br><span class="line">重新输入新的 UNIX 密码: </span><br><span class="line">passwd:已成功更新密码</span><br></pre></td></tr></table></figure><h2 id="3-Bernese-5-2-编译安装"><a href="#3-Bernese-5-2-编译安装" class="headerlink" title="3. Bernese 5.2 编译安装"></a>3. Bernese 5.2 编译安装</h2><h3 id="3-1-确认软件包内容"><a href="#3-1-确认软件包内容" class="headerlink" title="3.1 确认软件包内容"></a>3.1 确认软件包内容</h3><p>经过前面的大量铺垫,终于进入安装 Bernese 软件编译安装环节。首先检查安装文件是否齐全,一份完整的软件包至少包含以下文件:</p><ul><li>BERN52.tgz:主程序包;</li><li>CAMPAIGN52.tgz:示例工程;</li><li>DATAPOOL.tgz:输入数据;</li><li>ICONS.tgz:程序图标;</li><li>README:程序说明文档;</li><li>SAVEDISK.tgz:输出数据;</li><li>setup.sh:程序安装脚本。</li></ul><h3 id="3-2-安装依赖程序"><a href="#3-2-安装依赖程序" class="headerlink" title="3.2 安装依赖程序"></a>3.2 安装依赖程序</h3><p>Bernese 软件代码量庞大,计算部分主要采用 Fortran 语言编写,界面部分使用基于 <a href="https://www.qt.io/" target="_blank" rel="noopener">Qt</a> 的 C++ GUI 库实现,但也有一些 Perl 或 Shell 语言实现的脚本。在编译安装 Bernese 之前,你需要安装以下程序:</p><ul><li>依赖库文件;</li><li>C++ 编译器;</li><li>Fortran 编译器;</li><li>Perl 5;</li><li>Qt 4。</li></ul><p>目前,绝大部分的 Linux 发行版都已经自带了 Perl 5 解释器和 GNU C++(g++)编译器,当然也包括 Ubuntu。因此实际上只安装所需依赖库、Fortran 编译器和 Qt 4 即可。</p><h4 id="3-2-1-安装依赖库"><a href="#3-2-1-安装依赖库" class="headerlink" title="3.2.1 安装依赖库"></a>3.2.1 安装依赖库</h4><p>Bernese 软件依赖于 X11 和 zlib,编译软件之前需要首先安装这些依赖。使用如下命令安装 X11 和 zlib:</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">sudo apt-get install libx11-dev</span><br><span class="line">sudo apt-get install libxext-dev</span><br><span class="line">sudo apt-get install libxtst-dev</span><br><span class="line">sudo apt-get install zlib1g-dev</span><br></pre></td></tr></table></figure><h4 id="3-2-2-安装-GNU-Fortran"><a href="#3-2-2-安装-GNU-Fortran" class="headerlink" title="3.2.2 安装 GNU Fortran"></a>3.2.2 安装 GNU Fortran</h4><p>Fortran 编译器用于编译 Bernese 软件中使用 Fortran 语言编写的计算程序,在终端中使用如下命令安装 GNU Fortran(gfortran)编译器:</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo apt-get install gfortran</span><br></pre></td></tr></table></figure><h4 id="3-2-3-安装-Qt-4"><a href="#3-2-3-安装-Qt-4" class="headerlink" title="3.2.3 安装 Qt 4"></a>3.2.3 安装 Qt 4</h4><p>Bernese 的图形操作界面部分基于 Qt 开发,编译程序菜单时需要引用 Qt 4。从 Qt 4 的下载页面,下载 <a href="http://download.qt.io/archive/qt/4.8/4.8.7/qt-everywhere-opensource-src-4.8.7.tar.gz" target="_blank" rel="noopener">Qt 4.8.7 的 Linux 源代码</a> 进行编译。首先解压源代码文件:</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">tar -zxvf qt-everywhere-opensource-src-4.8.7.tar.gz</span><br></pre></td></tr></table></figure><p>使用 <code>cd</code> 命令进入解压得到的文件夹,执行如下命令将 Qt 4 安装到 /usr/local/qt4 目录内:</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">sudo ./configure -release -opensource -static -prefix /usr/local/qt4</span><br><span class="line">sudo make </span><br><span class="line">sudo make install</span><br></pre></td></tr></table></figure><p>Qt 4 的编译安装过程需要耗费较长的时间,具体时长取决于你的计算机硬件配置,耐心等待其编译完成。然后设置环境变量 <code>QTDIR</code>,将其指向 Qt 4 的安装目录。切换至 <code>root</code> ,打开 bash 环境配置文件:</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">su root</span><br><span class="line">gedit ~/.bashrc</span><br></pre></td></tr></table></figure><p>在文件末尾添加一下内容:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"># PATH for QT4.8</span><br><span class="line">export QTDIR=/usr/local/qt4</span><br><span class="line">export PARH=PATH:QTDIR/bin</span><br><span class="line">export MANPATH=$QTDIR/doc/man</span><br><span class="line">export LD_LIBRARY_PATH=$QTDIR/lib</span><br></pre></td></tr></table></figure><p>也可以直接在终端设置环境变量:</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">export QTDIR="/usr/local/qt4"</span><br></pre></td></tr></table></figure><p>至此,依赖环境已经配置完毕,可以开始安装 Bernese 了。</p><h3 id="3-3-安装-Bernese"><a href="#3-3-安装-Bernese" class="headerlink" title="3.3 安装 Bernese"></a>3.3 安装 Bernese</h3><p>Bernese 程序为用户提供了安装引导脚本 <code>setup.sh</code>,执行该脚本并根据提示操作即可完成安装过程。Bernese 默认安装到当前用户的 Home 文件夹,但也可以安装到其他文件夹,完整安装需要约 500 MB 的磁盘空间。为了供多个用户使用,需要共享 BERN52 和 MENU.INP 的执行和修改权限。本示例将 Bernese 安装至 /opt 目录下。</p><h4 id="3-3-1-格式转换"><a href="#3-3-1-格式转换" class="headerlink" title="3.3.1 格式转换"></a>3.3.1 格式转换</h4><p>进入安装文件目录,此处为 <code>~/Bernesev5.2/Bernese_v5.2_linux</code>,命令操作如下所示:</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">spacefan@U1604:~$ cd Bernesev5.2/Bernese_v5.2_linux/</span><br><span class="line">spacefan@U1604:~/Bernesev5.2/Bernese_v5.2_linux$ pwd</span><br><span class="line">/home/spacefan/Bernesev5.2/Bernese_v5.2_linux</span><br></pre></td></tr></table></figure><p>为了防止出现乱码,将 sh 转为 unix 格式,再运行。终端输入:</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">sudo apt-get install dos2unix</span><br><span class="line">dos2unix setup.sh</span><br></pre></td></tr></table></figure><h4 id="3-3-2-安装-Bernese"><a href="#3-3-2-安装-Bernese" class="headerlink" title="3.3.2 安装 Bernese"></a>3.3.2 安装 Bernese</h4><p>通过 <code>root</code> 用户执行 Bernese 的安装引导脚本:</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">su root</span><br><span class="line">sh setup.sh</span><br></pre></td></tr></table></figure><p>之后程序提示输入 Bernese 软件的安装目录,这里的 <code>/root</code> 表示默认安装路径。我们将其安装到 <code>/opt/BERN52</code> 文件夹,因此输入:<code>/opt</code>。</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line">spacefan@U1604:~/Bernesev5.2/Bernese_v5.2_linux$ su root</span><br><span class="line">密码: </span><br><span class="line">root@U1604:/home/spacefan/Bernesev5.2/Bernese_v5.2_linux# sh setup.sh </span><br><span class="line"></span><br><span class="line">***************************************</span><br><span class="line">* Bernese GNSS Software *</span><br><span class="line">* Installation *</span><br><span class="line">* (UNIX/Linux or Mac OS X platform) *</span><br><span class="line">***************************************</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">Full path where the BERN52 software tree will be installed</span><br><span class="line">[ /root ]:</span><br><span class="line">/opt</span><br><span class="line"></span><br><span class="line">The software will be installed in /opt/BERN52</span><br></pre></td></tr></table></figure><p>程序提示找到的 Perl 语言解释器位置:</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Perl program to be used [ /usr/bin/perl ]:</span><br></pre></td></tr></table></figure><p>一般使用系统自带的 Perl 语言解释器就可以了,此处直接按 <strong><code>Enter</code></strong> 键回车。之后,配置文件 <code>configure.pm</code> 被启动,并在屏幕打印以下提示:</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line">==========================================</span><br><span class="line">CONFIGURATION OF THE BERNESE GNSS SOFTWARE</span><br><span class="line">==========================================</span><br><span class="line"> 0 ... Complete installation (Steps 1 to 5)</span><br><span class="line"> 1 ... Update LOADGPS.setvar</span><br><span class="line"> 2 ... Install online updates (only after Step 1)</span><br><span class="line"> 3 ... Add a new user environment (only after Step 1)</span><br><span class="line"> 4 ... Compile the menu (only after Step 1)</span><br><span class="line"> 5 ... Compile the programs (only after Step 1)</span><br><span class="line"> 6 ... Install the example campaign (only after Step 1)</span><br><span class="line"> 7 ... ---</span><br><span class="line"></span><br><span class="line"> x ... Exit</span><br><span class="line"></span><br><span class="line">Enter option:</span><br></pre></td></tr></table></figure><p>解释一下此处的各个选项:</p><ul><li>键入 <strong><code>0</code></strong>:执行从第 1 项至第 5 项的全部过程</li><li>键入 <strong><code>1</code></strong>:更新环境变量设置</li><li>键入 <strong><code>2</code></strong>:安装在线更新包</li><li>键入 <strong><code>3</code></strong>:添加新用户环境</li><li>键入 <strong><code>4</code></strong>:编译图形界面菜单</li><li>键入 <strong><code>5</code></strong>:编辑程序</li><li>键入 <strong><code>6</code></strong>:安装解算工程示例</li><li>键入 <strong><code>x</code></strong>: 退出安装程序</li></ul><p>由于存在一些坑,我们老老实实一步一步进行。键入 <strong><code>1</code></strong>,安装程序打印出支持的编译器,其中 GNU 指示到 gfortran 的路径,表明安装程序找到的了该编译器:</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line">Enter option: 1</span><br><span class="line"></span><br><span class="line">Information about compiler tests for OS LINUX:</span><br><span class="line"> 1: g95 tested at AIUB</span><br><span class="line"> 2: gfortran tested at AIUB</span><br><span class="line"> 3: ifort tested at AIUB (version 10 and 12)</span><br><span class="line"> 4: pgf90 tested at AIUB</span><br><span class="line"> 5: f90 tested at AIUB</span><br><span class="line"> 6: Use "OTHER" compiler from /opt/BERN52/GPS/EXE/Makefile.template</span><br><span class="line"></span><br><span class="line">Select Compiler for OS LINUX:</span><br><span class="line"> 1: G95</span><br><span class="line"> 2: GNU -> /usr/bin/gfortran</span><br><span class="line"> 3: IFC</span><br><span class="line"> 4: PG_F90</span><br><span class="line"> 5: SUNF90</span><br><span class="line"> 6: OTHER</span><br><span class="line"></span><br><span class="line">Select [2]:</span><br></pre></td></tr></table></figure><p>这里系统已经检测到了 gfortran,键入 <strong><code>2</code></strong> 选择 gfortran 编译器(也可以直接按 <strong><code>Enter</code></strong> 键回车,因为默认就是 2)。然后安装程序继续打印出当前应用的环境变量:</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line">Current Values:</span><br><span class="line">--------------</span><br><span class="line"> VARIABLE DESCRIPTION VARIABLE NAME VARIABLE VALUE</span><br><span class="line"> 1: Path to software C => /opt/BERN52</span><br><span class="line"> 2: Path to Qt libraries QTBERN => /usr/local/qt4</span><br><span class="line"> 3: Operating system group OS => UNIX</span><br><span class="line"> 4: Operating system name OS_NAME => LINUX</span><br><span class="line"> 5: Fortran compiler name F_VERS => GNU</span><br><span class="line"> 6: List of additional compilers F_VERS_LIST => </span><br><span class="line"> 7: Host of the BPE server BPE_SERVER_HOST => U1604</span><br><span class="line"> 8: Path to user environment U => ${HOME}/GPSUSER52</span><br><span class="line"> 9: Path to temp. user environment T => ${HOME}/GPSTEMP</span><br><span class="line">10: Path to campaign area P => ${HOME}/GPSDATA/CAMPAIGN52</span><br><span class="line">11: Path to datapool area D => ${HOME}/GPSDATA/DATAPOOL</span><br><span class="line">12: Path to savedisk area S => ${HOME}/GPSDATA/SAVEDISK</span><br></pre></td></tr></table></figure><p>解释一下此处的默认环境变量:</p><ul><li>第 1 项:Bernese 软件的安装目录</li><li>第 2 项:所使用的 Qt 4 所在目录</li><li>第 3 项:操作系统类型</li><li>第 4 项:操作系统名称</li><li>第 5 项:使用的 Fortran 编译器</li><li>第 6 项:其他可用的编译器</li><li>第 7 项: BPE 服务器</li><li>第 8 项:用户环境目录</li><li>第 9 项:用户临时文件缓存目录</li><li>第 10 项:用户解算工程文件夹</li><li>第 11 项:用户数据文件夹目录</li><li>第 12 项:解算成果目录</li></ul><p>若接受其默认的变量设置,输入 <strong><code>y</code></strong>。要修改其中的配置,输入 <strong><code>n</code></strong>,然后根据其提示,输入变量编号来配置变量。这里使用默认设置,输入 <strong><code>y</code></strong>。随后安装程序将检测是否存在所需的文件夹,当提示某个文件夹不存在时,程序提示是否创建,键入 <strong><code>y</code></strong> 创建即可。</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br></pre></td><td class="code"><pre><span class="line">Accept the values (y/n): y</span><br><span class="line">Use of uninitialized value $hlp in substitution (s///) at /opt/BERN52/GPS/EXE/configure.pm line 927, <STDIN> line 3.</span><br><span class="line"></span><br><span class="line">**********************************************************************</span><br><span class="line">* /opt/BERN52/GPS/EXE/LOADGPS.setvar</span><br><span class="line">* has been updated.</span><br><span class="line">**********************************************************************</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">Your campaign area ${P} does not exist:</span><br><span class="line">/root/GPSDATA/CAMPAIGN52</span><br><span class="line">Create it now (y/n): </span><br><span class="line"></span><br><span class="line">Your campaign area ${P} does not exist:</span><br><span class="line">/root/GPSDATA/CAMPAIGN52</span><br><span class="line">Create it now (y/n): </span><br><span class="line"></span><br><span class="line">Your campaign area ${P} does not exist:</span><br><span class="line">/root/GPSDATA/CAMPAIGN52</span><br><span class="line">Create it now (y/n): y</span><br><span class="line"></span><br><span class="line">Your datapool area ${D} does not exist:</span><br><span class="line">/root/GPSDATA/DATAPOOL</span><br><span class="line">Create it now (y/n): y</span><br><span class="line"></span><br><span class="line">Your savedisk area ${S} does not exist:</span><br><span class="line">/root/GPSDATA/SAVEDISK</span><br><span class="line">Create it now (y/n): y</span><br><span class="line"></span><br><span class="line">Press Enter to continue</span><br></pre></td></tr></table></figure><p>之后按 <strong><code>Enter</code></strong> 键继续,再按 <strong><code>2</code></strong> 下载更新文件。由于下载更新文件的过程可能会很慢,若已经有更新文件(本文为 <code>update_2013-07-18.tar.gz</code>),<strong><code>Ctrl+C</code></strong> 取消更新文件下载,另开终端并将更新文件复制到 <code>/opt/BERN52</code> 目录下,然后回到原终端中输入 <strong><code>y</code></strong>。</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">spacefan@U1604:~/Bernesev5.2/Bernese_v5.2_linux$ sudo mv update_2013-07-18.tar.gz /opt/BERN52/</span><br><span class="line">[sudo] spacefan 的密码: </span><br><span class="line">spacefan@U1604:~/Bernesev5.2/Bernese_v5.2_linux$ cd /opt/BERN52/</span><br><span class="line">spacefan@U1604:/opt/BERN52$ ls -l</span><br><span class="line">总用量 3740</span><br><span class="line">drwxrwsr-x 2 978 1070 4096 6月 23 22:34 BPE</span><br><span class="line">drwxrwsr-x 12 978 1070 4096 7月 18 2013 GPS</span><br><span class="line">drwxrwsr-x 3 978 1070 4096 7月 18 2013 INC</span><br><span class="line">drwxrwsr-x 3 978 1070 4096 7月 18 2013 LIB</span><br><span class="line">drwxrwsr-x 2 978 1070 4096 7月 18 2013 MENU</span><br><span class="line">drwxrwsr-x 3 978 1070 4096 7月 18 2013 PGM</span><br><span class="line">-rwxrw-rw- 1 spacefan spacefan 3803626 6月 23 23:04 update_2013-07-18.tar.gz</span><br></pre></td></tr></table></figure><p><strong>好,重点来了:继续之前,先来填坑</strong>。首先对 <code>BERN52</code> 目录赋予执行权限,另开终端进入 <code>/opt</code> 进行权限设置:</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">cd /opt/BERN</span><br><span class="line">sudo chmod -R 777 . # or $ sudo chmod -R 777 *</span><br></pre></td></tr></table></figure><p>然后,查询 <code>ld</code> 的版本:</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">$</span> ld -v</span><br><span class="line">GNU ld (GNU Binutils for Ubuntu) 2.26.1</span><br></pre></td></tr></table></figure><p>版本大于 <code>2.22</code>,需要修改 <code>BERN52/MENU/memu.pro</code> 中的内容。打开该文件:</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">gedit /opt/BERN52/MENU/menu.pro</span><br></pre></td></tr></table></figure><p>找到:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">##QMAKE_LIBS += -lz</span><br></pre></td></tr></table></figure><p>去除前面的注释 <code>#</code>,保存后退出。然后,回到原终端,按 <strong><code>3</code></strong> 添加新用户环境。</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br></pre></td><td class="code"><pre><span class="line">==========================================</span><br><span class="line">CONFIGURATION OF THE BERNESE GNSS SOFTWARE</span><br><span class="line">==========================================</span><br><span class="line"> 1 ... Update LOADGPS.setvar</span><br><span class="line"> 2 ... Install online updates</span><br><span class="line"> 3 ... Add a new user environment</span><br><span class="line"> 4 ... Compile the menu</span><br><span class="line"> 5 ... Compile the programs</span><br><span class="line"> 6 ... Install the example campaign</span><br><span class="line"> 7 ... ---</span><br><span class="line"></span><br><span class="line"> x ... Exit</span><br><span class="line"></span><br><span class="line">Enter option: 3</span><br><span class="line"></span><br><span class="line">User environment /root/GPSUSER52 already exists.</span><br><span class="line">Update files (y/n): y</span><br><span class="line"></span><br><span class="line">Copying menu and program input files...</span><br><span class="line">Copying BPE user scripts...</span><br><span class="line">Copying examples for process control files...</span><br><span class="line">Copying BPE options for processing examples...</span><br><span class="line">Copying ICONS ...</span><br><span class="line">Extracting ICONS ...</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">**********************************************************************</span><br><span class="line">* User area /root/GPSUSER52</span><br><span class="line">* has been added/updated.</span><br><span class="line">**********************************************************************</span><br></pre></td></tr></table></figure><p>完成后,继续按 <strong><code>4</code></strong> 编译图形界面菜单。</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br></pre></td><td class="code"><pre><span class="line">==========================================</span><br><span class="line">CONFIGURATION OF THE BERNESE GNSS SOFTWARE</span><br><span class="line">==========================================</span><br><span class="line"> 0 ... Complete installation (Steps 1 to 5)</span><br><span class="line"> 1 ... Update LOADGPS.setvar</span><br><span class="line"> 2 ... Install online updates</span><br><span class="line"> 3 ... Add a new user environment</span><br><span class="line"> 4 ... Compile the menu</span><br><span class="line"> 5 ... Compile the programs</span><br><span class="line"> 6 ... Install the example campaign</span><br><span class="line"> 7 ... ---</span><br><span class="line"></span><br><span class="line"> x ... Exit</span><br><span class="line"></span><br><span class="line">Enter option: 4</span><br><span class="line"></span><br><span class="line">Running the compilation of the menu.</span><br><span class="line">This can take a while...</span><br><span class="line">It depends on the computer performance.</span><br><span class="line"></span><br><span class="line">All compilation output is redirected into file</span><br><span class="line">/opt/BERN52/MENU/MENUCOMP.log</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">*******************************************</span><br><span class="line">* Bernese menu compiled successfully.</span><br><span class="line">*******************************************</span><br></pre></td></tr></table></figure><p>菜单编译成功后按 <strong><code>5</code></strong> 继续编译程序,如果看到下面的提示,那么恭喜你,Bernese 软件已经编译安装成功了!</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">*******************************************</span><br><span class="line">* Fortran programs compiled successfully.</span><br><span class="line">*******************************************</span><br></pre></td></tr></table></figure><blockquote><p><strong>注意</strong>:若提示 Fortran 程序编译至 100/100 时出错,返回安装程序引导,按 <strong><code>0</code></strong> 重新执行 1~5 步,根据经验,应该会成功编译了。</p></blockquote><h4 id="3-3-3-安装示例"><a href="#3-3-3-安装示例" class="headerlink" title="3.3.3 安装示例"></a>3.3.3 安装示例</h4><p>Bernese 编译安装成功后,需要跑一下示例文件 <code>PPP_DEMO.PCF</code> 来验证软件是否可以正常工作,在跑 <code>PPP_DEMO.PCF</code> 之前,最好先完成这几件事情:</p><ul><li><p>更新 <code>CAMPAIGN52.tgz</code>、<code>DATAPOOL.tgz</code>、<code>SAVEDISK.tgz</code></p><p>最新的 <code>CAMPAIGN52.tgz</code>、<code>DATAPOOL.tgz</code>、<code>SAVEDISK.tgz</code> 文件需要在 Bernese FTP 下载:<a href="ftp.aiub.unibe.ch/BERN52/">ftp.aiub.unibe.ch/BERN52/</a>,下载后替换掉自带的文件,否则跑 <code>PPP_DEMO.PCF</code> 时会报错。</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">spacefan@U1604:~$ cd Bernesev5.2/Bernese_v5.2_FTP_20170915/</span><br><span class="line">spacefan@U1604:~/Bernesev5.2/Bernese_v5.2_FTP_20170915$ cp * /opt/BERN52/GPS/DOC/</span><br><span class="line">spacefan@U1604:~/Bernesev5.2/Bernese_v5.2_FTP_20170915$ ls</span><br><span class="line">CAMPAIGN52.tgz DATAPOOL.tgz SAVEDISK.tgz</span><br></pre></td></tr></table></figure></li><li><p>更新 <code>/BERN/GPS/GEN</code> 目录</p><p>最好也更新 <code>/BERN/GPS/GEN</code>,否则可能会提示:<code>缺少 SINEX. SINEX.PPP IONEX. IONEX.PPP 等文件</code>,下载地址:<a href="ftp.aiub.unibe.ch/BSWUSER52/">ftp.aiub.unibe.ch/BSWUSER52/</a>。由于文件较多,建议用 FTP 软件下载。下载后,不要删除自带的 <code>/BERN/GPS/GEN</code> 目录,做好备份。</p></li><li><p>添加星历文件 </p><p>Bernese 5.2 使用 JPL/NAIF 发布的 <code>DE405.EPH</code> 星历,下载地址:<a href="https://github.com/SGL-UT/GPSTk/blob/master/examples/DE405.EPH,下载后放入" target="_blank" rel="noopener">https://github.com/SGL-UT/GPSTk/blob/master/examples/DE405.EPH,下载后放入</a> <code>/BERN52/GPS/GEN</code>目录下。</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">cp DE405.EPH /opt/BERN52/GPS/GEN/</span><br></pre></td></tr></table></figure></li></ul><ul><li><p>添加 RINEX 转换程序</p><p>将 Linux 版本的 RINEX 转换程序放入 <code>usr/bin</code> 目录下,否则第安装示例文件时会出现 <code>识别不了 RRX2RNX 文件</code> 的提示。下载地址:<a href="http://terras.gsi.go.jp/ja/crx2rnx.html" target="_blank" rel="noopener">Download page for the RNXCMP software</a>,32位为 <a href="http://terras.gsi.go.jp/ja/crx2rnx/RNXCMP_4.0.7_Linux_x86_32bit.tar.gz" target="_blank" rel="noopener">RNXCMP_4.0.7_Linux_x86_32bit.tar.gz</a>,64位为:<a href="http://terras.gsi.go.jp/ja/crx2rnx/RNXCMP_4.0.7_Linux_x86_64bit.tar.gz" target="_blank" rel="noopener">RNXCMP_4.0.7_Linux_x86_64bit.tar.gz</a>。下载后解压,进入目录。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">cd RNXCMP_4.0.7_Linux_x86_64bit/bin/</span><br><span class="line">sudo cp * /usr/bin</span><br></pre></td></tr></table></figure></li></ul><blockquote><p><strong>注意</strong>:这几件事除了星历文件,其余三件都可以在安装开始之前进行,其中第一件和第二件可以直接在安装包文件中进行替换。但为了保险起见,最好先按照本文步骤操作。</p></blockquote><p>然后,继续在上小节的安装提示中,按 <strong><code>6</code></strong> 安装示例,如果看到下面的提示,说明示例安装成功。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Installation of the example campaign has been finished</span><br></pre></td></tr></table></figure><h4 id="3-3-3-添加普通用户"><a href="#3-3-3-添加普通用户" class="headerlink" title="3.3.3 添加普通用户"></a>3.3.3 添加普通用户</h4><p>使用 <code>root</code> 用户进行数据解算操作既不方便也不安全。为了让非 <code>root</code> 用户也能使用 Bernese,需要使用新用户加载环境变量设置文件,并启动配置程序。按 <strong><code>3</code></strong> 继续,若不慎将终端关闭,新开终端中执行如下命令:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">source /opt/BERN52/GPS/EXE/LOADGPS.setvar</span><br><span class="line">perl /opt/BERN52/GPS/EXE/configure.pm</span><br></pre></td></tr></table></figure><p>程序再次打印出安装提示,此时键入 <strong><code>3</code></strong>,根据程序提示添加新用户的环境变量即可。</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br></pre></td><td class="code"><pre><span class="line">==========================================</span><br><span class="line">CONFIGURATION OF THE BERNESE GNSS SOFTWARE</span><br><span class="line">==========================================</span><br><span class="line"> 1 ... Update LOADGPS.setvar</span><br><span class="line"> 2 ... Install online updates</span><br><span class="line"> 3 ... Add a new user environment</span><br><span class="line"> 4 ... Compile the menu</span><br><span class="line"> 5 ... Compile the programs</span><br><span class="line"> 6 ... Install the example campaign</span><br><span class="line"> 7 ... ---</span><br><span class="line"></span><br><span class="line"> x ... Exit</span><br><span class="line"></span><br><span class="line">Enter option: 3</span><br><span class="line"></span><br><span class="line">Create user environment /home/spacefan/GPSUSER52 (y/n): y</span><br><span class="line"></span><br><span class="line">Copying menu and program input files...</span><br><span class="line">Copying BPE user scripts...</span><br><span class="line">Copying examples for process control files...</span><br><span class="line">Copying BPE options for processing examples...</span><br><span class="line">Copying ICONS ...</span><br><span class="line">Extracting ICONS ...</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">**********************************************************************</span><br><span class="line">* User area /home/spacefan/GPSUSER52</span><br><span class="line">* has been added/updated.</span><br><span class="line">**********************************************************************</span><br></pre></td></tr></table></figure><blockquote><p> <strong>注意</strong>:此步是在普通用户模式下进行的操作,而非 <code>root</code> 用户。</p></blockquote><h4 id="3-3-4-配置环境变量"><a href="#3-3-4-配置环境变量" class="headerlink" title="3.3.4 配置环境变量"></a>3.3.4 配置环境变量</h4><p>为了在每次开机后都能直接使用 Bernese 软件,需要配置在系统启动时自动加载环境变量。编辑用户主文件夹内的配置文件(<code>root</code> 下的配置文件也可以一并添加了):</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">gedit ~/.bashrc</span><br></pre></td></tr></table></figure><p>在文件末尾为 Bernese 加载环境变量:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"># Load environment variables for Bernese GNSS Software</span><br><span class="line">source /opt/BERN52/GPS/EXE/LOADGPS.setvar</span><br></pre></td></tr></table></figure><p>之后在终端中键入 <strong><code>G</code></strong> 就可以启动 Bernese 了,如下图所示。</p><p><img src="/images/GNSS/Bernese/Bernese52_GUI.png" width="100%" height="100%"></p><p>如果 <code>3.3.3</code> 小节在添加普通用户时 <code>GPSDATA</code> 移动不成功,可能会在启动时报错:</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">Cannot open INP file /home/spacefan/GPSDATA/CAMPAIGN52/EXAMPLE/STA/SESSIONS.SES</span><br><span class="line">Using standard session definition</span><br></pre></td></tr></table></figure><p>从 <code>/root</code> 目录将 <code>GPSDATA</code> 拷贝到普通用户目录 <code>/home/spacefan</code>,再为其添加普通用户权限即可。</p><h2 id="4-结束语"><a href="#4-结束语" class="headerlink" title="4 结束语"></a>4 结束语</h2><p>至此,Bernese 5.2 软件在 Ubuntu 16.04.6 下编译安装成功。简单总结一下:</p><ul><li>安装依赖:libx11-dev、libxext-dev、libxtst-dev、zlib1g-dev、gfortran & Qt-4.8.7(网上有些教程说要装 ncompress,本文没装并未出错,若出错无法解决可以安装)。</li><li>手动下载更新文件,复制到 <code>BERN52</code> 目录下。</li><li>运行 <code>setup.sh</code> 前,为防止乱码,先在终端运行:<code>$ dos2unix setuo.sh</code> 。</li><li>第二步过后要修改权限并检查 <code>ld</code> 版本号,并做相应填坑工作。</li><li>安装示例之前,处理好示例文件更新、<code>DE405.PHE</code> 星历和 RENX 转换工具的添加。</li><li>最后重新运行安装配置文件 <code>configure.pm</code>,配置好普通用户的环境变量。</li></ul><p>后续,将写一些在 Bernese 5.2 下的 GNSS 数据处理和精密定轨教程,敬请期待!</p><h2 id="5-参考资料"><a href="#5-参考资料" class="headerlink" title="5 参考资料"></a>5 参考资料</h2><p>【1】<a href="ftp://ftp.aiub.unibe.ch/BERN52/DOCU/" target="_blank" rel="noopener">Bernese GNSS Software Version 5.2,DOCU52.pdf</a></p><p>【2】<a href="https://blog.csdn.net/qq_36498339/article/details/78642033" target="_blank" rel="noopener">安装Ubuntu 16.04后要做的事</a></p><p>【3】<a href="https://blog.csdn.net/shitsnail/article/details/78841919" target="_blank" rel="noopener">Linux(Ubuntu)系统下安装Qt library和Qt Creator全过程记录</a></p><p>【4】<a href="http://gnss.help/2018/07/02/ubuntu-install-bernese/index.html" target="_blank" rel="noopener">Ubuntu 操作系统安装 Bernese</a></p><p>【5】<a href="http://blog.sciencenet.cn/blog-3379275-1183495.html" target="_blank" rel="noopener">Windows安装虚拟机-Centos7;fortran及Qt4.8.4, BERNESE5.2 linux下安装步骤</a></p><p>【6】<a href="http://blog.sciencenet.cn/blog-1094854-863531.html" target="_blank" rel="noopener">BERNESE5.2 linux 安装</a></p><p>【7】<a href="http://blog.sciencenet.cn/blog-1393544-1086616.html" target="_blank" rel="noopener">Bernese安装后要做的几件小事</a></p><p>【8】<a href="http://blog.sina.com.cn/s/blog_61ada2850102x23q.html" target="_blank" rel="noopener">Linux Mint 18.2安装Bernese 5.2的注意事项</a></p>]]></content>
<categories>
<category> 专业技能 </category>
</categories>
<tags>
<tag> GNSS </tag>
<tag> Bernese </tag>
<tag> Ubuntu </tag>
</tags>
</entry>
<entry>
<title>卫星轨道之从开普勒到近代航天</title>
<link href="/2019/04/06/SatelliteDesign-Orbits/"/>
<url>/2019/04/06/SatelliteDesign-Orbits/</url>
<content type="html"><![CDATA[<p>轨道是卫星在太空中运行所形成的固定轨迹,类似于高铁奔跑在铁轨上一样。沿着这条轨迹,卫星围绕在地球或者其他天体飞行,就像月亮绕着地球、地球绕着太阳飞行一样。与地面交通工具不同的是,卫星以数公里每秒的速度(比如 <strong>7.6km/s</strong>)飞速疾驰在太空中的超级跑道上,而地面交通工具则以龟速蠕动在地球表面。</p><p>那么,问题来了,卫星为什么能在太空中持久飞行?卫星的超级跑道如何描述?航天工程师们都设计了哪些实用的卫星轨道来完成太空任务?且听轨道君细细道来。</p><a id="more"></a><p><img src="/images/SatelliteDesign/NO1OrbitIntro/Orbit01.png" alt="卫星超级跑道"></p><center> 图 1: 卫星运行在太空中的超级跑道上 </center><hr><h2 id="1-开普勒的彩蛋"><a href="#1-开普勒的彩蛋" class="headerlink" title="1 开普勒的彩蛋"></a>1 开普勒的彩蛋</h2><hr><p>全世界的 People 都知道砸大牛的苹果,却鲜为人知开普勒的彩蛋。我相信很多同学都知道开普勒,但卫星在太空飞行与开普勒有啥关系呢?</p><p><img src="/images/SatelliteDesign/NO1OrbitIntro/Orbit02.jpg" alt="开普勒"></p><center> 图 2: 约翰尼斯·开普勒(Johannes Kepler,1571-1630),德国天文学家 </center><p>1609 年,开普勒出版《星际使者》一书,书中包含了他所提出的行星运动三大定律的前两个定律。十年后的 1619 年,他发表了第三个定律。开普勒定律定性地揭示了行星围绕太阳的运行规律,使人们明晰了对行星运动的认识。更为重要的是,开普勒定律这一大大的三色彩蛋为大牛的苹果提供了先验基础,因此开普勒被誉为航天动力学这门天文学分支学科的鼻祖。</p><p><img src="/images/SatelliteDesign/NO1OrbitIntro/Orbit04.jpg" alt="彩蛋哥"></p><p>为纪念鼻祖,美国宇航局将一个太空望远镜命名为开普勒号,并给这一寻找系外类地行星的任务取名为开普勒计划,被寻得的位于宜居带的系外行星都以开普勒开头。美国佬搞出这么大的动静,咋们也不能示弱,为了纪念鼻祖,咱们来温习一下开普勒三大定律。</p><p><img src="/images/SatelliteDesign/NO1OrbitIntro/Orbit05.jpg" alt="彩蛋哥"></p><ul><li><strong>椭圆定律</strong>:所有行星绕太阳的轨道都是椭圆,太阳在椭圆的一个焦点上。</li><li><strong>面积定律</strong>:行星和太阳的连线在相等的时间间隔内扫过相等的面积。</li><li><strong>调和定律</strong>:所有行星绕太阳一周的恒星时间(<script type="math/tex">T</script>)的平方与它们轨道长半轴(<script type="math/tex">a</script>)的立方成比例,即</li></ul><blockquote><p>公式 <script type="math/tex">1</script>. 开普勒三大定律之调和定律</p><script type="math/tex; mode=display">\frac{T^{2}_{1}}{T^{2}_{2}} = \frac{a^{3}_{1}}{a^{3}_{2}}</script><ul><li><script type="math/tex">T</script>:恒星绕太阳一圈的恒星时间,即轨道周期;</li><li><script type="math/tex">a</script>:恒星绕太阳运行轨道的半长轴,与椭圆中的定义一致。</li></ul></blockquote><p>1,2,3,重点来了。开普勒同学发现了行星运动三定律,大牛站在他的肩膀上发现了万有引力定律,进一步定量地揭示了万物运动的普世规律。</p><p><img src="/images/SatelliteDesign/NO1OrbitIntro/Orbit06.png" alt="万有引力定律"></p><center> 图 3: 万有引力示意图 </center><p>全世界的 People 都知道的万有引力定律就是两个东东相互吸引,然后其中一个东东吨位不够,只能寄人篱下,围绕大哥转啊!转啊!转。我们的卫星就是小吨位的东东,地球就是大哥。</p><p><img src="/images/SatelliteDesign/NO1OrbitIntro/Orbit07.jpg" alt="地球是太阳的小弟"></p><p>3,2,1,重点又来了。根据牛顿的万有定律可知,在忽略空气阻力的情况下,水平扔出去的物体将沿抛物线运动。</p><p><img src="/images/SatelliteDesign/NO1OrbitIntro/Orbit08.png" alt="抛物线运动"></p><center> 图 4: 水平扔出去的物体将沿抛物线运动 </center><p>由于地球总体上呈球形,于是有意思的事情发生了。地球表面每 8km 水平距离存在 5m 的垂直高度差,也就是说,如果扔物体的水平速度达到每秒 8km/s,那么抛出去的物体将不会落到地表,而是一直飞下去。</p><p><img src="/images/SatelliteDesign/NO1OrbitIntro/Orbit09.png" alt="抛物线运动"></p><center> 图 5: 地球曲率 </center><p>当然,空气阻力一直被忽略。如果在距地表不高的地方扔物体,空气阻力会逐渐使其减速,那么如果在太空中扔呢?Bingo,太空中没有大气阻力(严格来说是大气阻力微小),所以扔出去的物体将一直绕着地球飞行。把我们在太空中扔一个速度高达 8km/s 的物体,换成用运载火箭将卫星加速至 8km/s,那么卫星就能在太空中持久飞行。</p><p><img src="/images/SatelliteDesign/NO1OrbitIntro/Orbit10.png" alt="抛物线运动"></p><center> 图 6: 太空加农炮 </center><hr><h2 id="2-如何描述卫星轨道"><a href="#2-如何描述卫星轨道" class="headerlink" title="2 如何描述卫星轨道"></a>2 如何描述卫星轨道</h2><hr><p>第一个问题顺利 XO,下面进入第二个:<strong>卫星的超级跑道如何描述?</strong></p><p><img src="/images/SatelliteDesign/NO1OrbitIntro/Orbit11.png" alt="离胜利又进了一步"></p><p>航天动力学中用轨道根数(<strong>Orbital Elements</strong>)描述卫星轨道,仅用特定的六个根数就定义卫星轨道的几何形状和大小以及卫星飞行方向和所处位置,以唯一确定卫星轨道。我们来数一数这六根数,一根…两根…三根……</p><h3 id="轨道第一个根数"><a href="#轨道第一个根数" class="headerlink" title="轨道第一个根数"></a>轨道第一个根数</h3><hr><p>轨道的第一个根数是半长轴 <script type="math/tex">a</script> 这个根数决定了卫星轨道形成的椭圆长半轴的长度,及轨道的大小。同时,这个根数也决定了发射卫星到这个轨道需要多少能量,因为根据活力公式,一个确定轨道的机械能是固定的。</p><p><img src="/images/SatelliteDesign/NO1OrbitIntro/Orbit13.jpg" alt="轨道的第一个根数"></p><center> 图 7: 轨道的第一个根数 </center><p>不同任务类型的卫星,或者运载约束,工作在不同的轨道高度上。发射到不同轨道所需要的能量都需要依靠半长轴来计算。如下图所示,飞得越高的卫星速度越慢,也是依据半长轴计算而来的。</p><p><img src="/images/SatelliteDesign/NO1OrbitIntro/Orbit14.jpg" alt="轨道的第一个根数"></p><center> 图 8: 轨道高度 vs. 轨道速度曲线 </center><h3 id="轨道第二个根数"><a href="#轨道第二个根数" class="headerlink" title="轨道第二个根数"></a>轨道第二个根数</h3><hr><p>轨道的第二个根数为偏心率 <script type="math/tex">e</script> ,跟椭圆的扁率是一个意思,代表轨道偏心的程度。偏心率近似等于 0 的轨道一般称为近圆轨道,此时地球的质心几乎与轨道几何中心重合。偏心大于 0 小于 1,轨道就呈椭圆状,偏心率越大轨道越扁。</p><p><img src="/images/SatelliteDesign/NO1OrbitIntro/Orbit15.jpg" alt="轨道的第二个根数"></p><center> 图 7: 轨道的第二个根数 </center><h3 id="轨道第三个根数"><a href="#轨道第三个根数" class="headerlink" title="轨道第三个根数"></a>轨道第三个根数</h3><hr><p>轨道的第三个根数是轨道倾角 <script type="math/tex">i</script>,即轨道平面与赤道平面之间的夹角,用于描述轨道的倾斜程度,简单地说就是轨道平面相对于地球赤道平面是躺着的还是立着的或者是斜着的。卫星轨道的倾角决定了卫星星下点所能覆盖的地理高度,并对发射场和运载火箭的运力形成硬性约束。具体而言,若想卫星行下点轨迹覆盖高纬度地区,则卫星轨道倾角不能小于该纬度;发射场的纬度不能高于卫星轨道倾角;在半长轴和发射场相同的情况下,运载火箭发射倾角更高的卫星需要提供更多的能量。</p><p><img src="/images/SatelliteDesign/NO1OrbitIntro/Orbit16.jpg" alt="轨道的第三个根数"></p><center> 图 8: 轨道的第三个根数 </center><h3 id="轨道第四个根数"><a href="#轨道第四个根数" class="headerlink" title="轨道第四个根数"></a>轨道第四个根数</h3><hr><p>轨道的第四个根数是升交点赤经 <script type="math/tex">Ω</script>,理解这个轨道根数需要在称为惯性系的三维空间中进行。航天动力学中常常将 <strong>J2000</strong> 坐标系作为惯性系使用,<strong>J2000</strong> 坐标系它的原点在地球质心,参考平面是 <strong>J2000</strong> 平赤道面,Z 轴向北指向平赤道面北极,X 轴指向 <strong>J2000</strong> 平春分点,Y 轴与 X 和 Z 轴组成直角右手系。那么卫星在轨道上运动从南半球向北半球运动的过程中经过赤道平面所处的天球赤经和春分点之间的角度就称之为升交点赤经。</p><p><img src="/images/SatelliteDesign/NO1OrbitIntro/Orbit17.jpg" alt="轨道的第四个根数"></p><center> 图 9: 轨道的第四个根数 </center><h3 id="轨道第五个根数"><a href="#轨道第五个根数" class="headerlink" title="轨道第五个根数"></a>轨道第五个根数</h3><hr><p>轨道的第五个根数是近地点幅角 <script type="math/tex">υ</script>,卫星从升交点开始到达近地点在轨道平面内所飞过的角度,代表了轨道朝向。</p><p><img src="/images/SatelliteDesign/NO1OrbitIntro/Orbit18.jpg" alt="轨道的第五个根数"></p><center> 图 10: 轨道的第五个根数 </center><h3 id="轨道第六个根数"><a href="#轨道第六个根数" class="headerlink" title="轨道第六个根数"></a>轨道第六个根数</h3><hr><p>轨道的第六个根数为真近角 <script type="math/tex">θ</script>,这是一个时变根数,用来描述某一个确定时刻卫星在轨道中所处的位置,是地心指向卫星和指向近地点矢量之间的夹角。</p><p><img src="/images/SatelliteDesign/NO1OrbitIntro/Orbit19.jpg" alt="轨道的第六个根数"></p><center> 图 11: 轨道的第六个根数 </center><hr><h2 id="3-实(花)用(式)卫星轨道锦集"><a href="#3-实(花)用(式)卫星轨道锦集" class="headerlink" title="3 实(花)用(式)卫星轨道锦集"></a>3 实(花)用(式)卫星轨道锦集</h2><hr><p>第二个问题也顺利 XO,下面实战阶段:航天工程师们都设计了哪些卫星轨道来完成太空任务?前方高能,先送一点福利自行补脑。</p><p><img src="/images/SatelliteDesign/NO1OrbitIntro/Orbit20.png" alt="核桃补脑"></p><p>现代航天对卫星轨道做了全方位、无死角分类,按轨道高度可分为<strong>低轨</strong>(Low Earth Orbit,200~2000km),<strong>中轨</strong>(Medium Earth Orbit,2000~36000km),<strong>高轨</strong>(High Earth Orbit,36000km 及以上)等;按轨道偏心率可分为<strong>近圆轨道</strong>(<script type="math/tex">e</script>≈0),<strong>椭圆轨道</strong>(<script type="math/tex">e</script>≥0.001)等;按轨道倾角可分为<strong>赤道轨道</strong>(<script type="math/tex">i</script>≈0),<strong>极轨道</strong>(<script type="math/tex">i</script>≈90°)等;未完待续…<span class="github-emoji" style="display:inline;vertical-align:middle" data-src="https://github.githubassets.com/images/icons/emoji/unicode/1f602.png?v8">😂</span> <span class="github-emoji" style="display:inline;vertical-align:middle" data-src="https://github.githubassets.com/images/icons/emoji/unicode/1f602.png?v8">😂</span> <span class="github-emoji" style="display:inline;vertical-align:middle" data-src="https://github.githubassets.com/images/icons/emoji/unicode/1f602.png?v8">😂</span></p><p><img src="/images/SatelliteDesign/NO1OrbitIntro/Orbit21.png" alt="按高度分类的轨道图谱"></p><center> 图 12: 按高度分类的轨道图谱 </center><p>但实际上,近地卫星(绕地球飞行的卫星)常用的轨道就那么几种:1)<strong>地球静止轨道</strong>;2)<strong>太阳近同步轨道</strong>;3)<strong>回归轨道</strong>。不常用也有几种:1)<strong>冻结轨道</strong>;2)<strong>大椭圆轨道</strong>;3)<strong>驻留轨道</strong>;4)<strong>巡游轨道</strong>。其中,大椭圆轨道还可以细分为<strong>闪电轨道</strong>、<strong>眼镜蛇轨道</strong>和<strong>魔法轨道</strong>,虽然名字取得贼好听,但是除了老(俄)毛(罗)子(斯)和北(加)极(拿)熊(大)的部分卫星,极少有其他国家的卫星使用。下面就简单介绍一下常(实)用的和名字贼(花)好(式)听的几种轨道。</p><h3 id="地球静止轨道"><a href="#地球静止轨道" class="headerlink" title="地球静止轨道"></a>地球静止轨道</h3><hr><p><strong>地球静止轨道</strong>(Geostationary Earth Orbit, <strong>GEO</strong>)相信大家一定不陌生,尤其是喜欢看科幻小说的童鞋。因为这条轨道最先由科幻大师<strong>亚瑟·查尔斯·克拉克</strong>(Arthur C. Clarke)详细阐述并发表在无线世界,题为 “<strong>Extra-Terrestrial Relays – Can Rocket Stations Give Worldwide Radio Coverage?</strong>”。文章详细阐述了地球静止轨道在通信领域的巨大应用潜力,值得拍手叫绝的是,那时(<strong>1945</strong> 年)地球人还未曾向太空扔过卫星。</p><p><img src="/images/SatelliteDesign/NO1OrbitIntro/Arthur_C._Clarke_1965.jpg" alt="Arthur C. Clarke"></p><center> 图 13: 科幻大师亚瑟·查尔斯·克拉克(Arthur C. Clarke)</center><p>地球静止轨道最大的特征就是轨道倾角为零且轨道周期与地球自转周期相同,即 23 小时 56 分 4 秒。如今,这条独一无二的轨道已经被人类塞满了各式各样的卫星,拥挤不堪,人们形象地称之为地球静止轨道带(Geostationary Earth Orbit Belt)。</p><p><img src="/images/SatelliteDesign/NO1OrbitIntro/Orbit22.png" alt="拥挤的地球静止轨道带"></p><center> 图 13: 拥挤的地球静止轨道带 </center><h3 id="太阳同步轨道"><a href="#太阳同步轨道" class="headerlink" title="太阳同步轨道"></a>太阳同步轨道</h3><hr><p><strong>太阳同步轨道</strong>(Sun-Synchronous Orbits, <strong>SSO</strong>)相信大家有点陌生,类似于地球静止轨道(倾角不为零时称为地球同步轨道)每天绕地球转一圈,太阳同步轨道每年升交点赤经绕地球转一圈。由于地球每年绕太阳转一圈(即地球绕太阳运动的轨道每年升交点赤经绕太阳转一圈)…好像有点晕…所以太阳同步轨道每天升交点赤经与地球每天绕太阳转过的角度相同,约为 0.9863°/天。</p><blockquote><p>公式 <script type="math/tex">2</script>. 太阳同步轨道升交点进动速率</p><script type="math/tex; mode=display">\Delta \Omega = -2 \pi \frac{J_2 R^2_E}{p^2} \cdot \frac{3}{2} cos(i) = \frac{2\pi}{365} \approx 0.9863 ^{\circ}</script><ul><li><script type="math/tex">J_2</script> 为地球非球形引力带谐项二阶系数,约为 <script type="math/tex">1.08263 \times 10^{−3}</script>);</li><li><script type="math/tex">R_E</script> 为地球平均半径,约为 <script type="math/tex">6378.1363 km</script>;</li><li><script type="math/tex">p</script> 为轨道半通径,<script type="math/tex">p = a(1-e^2)</script>。</li></ul></blockquote><p>太阳同步轨道的这一特性使得其广泛被低轨卫星用于实际任务,尤其是遥感卫星。因为太阳同步轨道平面始终与太阳矢量保持相对固定的夹角,所以轨道光照条件好且升交点地方时基本不变,有利于遥感卫星正常开展观测任务。</p><p><img src="/images/SatelliteDesign/NO1OrbitIntro/Orbit23.png" alt="太阳同步轨道示意图"></p><center> 图 14: 太阳同步轨道周年运动示意图 </center><p>需要专门指出的是,太阳同步轨道并非只有一条,而是一类轨道,因而轨位资源较为宽松。此外,太阳同步轨道倾角一般在 97° 左右,所以运行在该类轨道上的卫星基本上可以覆盖全球。</p><h3 id="回归轨道"><a href="#回归轨道" class="headerlink" title="回归轨道"></a>回归轨道</h3><hr><p><strong>回归轨道</strong>(Repeat-ground track orbit, <strong>RGTO</strong>)指星下点轨迹(卫星轨道在地球上的投影)周期性出现重合的一类轨道,即经过一定时间后,回归轨道星下点轨迹又重新回到原来通过的路线,期间流逝的时间称为回归周期。回归轨道可用下式加以数学描述。</p><blockquote><p>公式 <script type="math/tex">3</script>. 回归轨道数学描述</p><script type="math/tex; mode=display">\frac{\frac{N}{K}}{\omega_e - \dot{\Omega}} - \frac{1}{\dot{\omega_e} + \dot{M}} = 0</script><ul><li><script type="math/tex">N</script> 回归轨道的回归轨数,必须为整数;</li><li><script type="math/tex">K</script> 回归轨道的回归天数,必须为整数;</li><li><script type="math/tex">\omega_e</script> 地球自转速率;</li><li><script type="math/tex">\dot{M}</script> 升交点赤经进动速率;</li><li><script type="math/tex">\dot{\omega_e}</script> 近地点幅角进动速率;</li><li><script type="math/tex">\dot{M}</script> 平近角进动速率。</li></ul></blockquote><p>回归轨道通常用用于那些对目标重访性有严格要求的一类卫星,如返回式卫星、立体测绘卫星、干涉 SAR 卫星等。我国神舟系列飞船即采用了回归轨道,以便规划返回点。</p><p><img src="/images/SatelliteDesign/NO1OrbitIntro/sz4repea.gif" alt="神舟四号卫飞船星下点回归轨迹"></p><center> 图 15: 神舟四号飞船星下点回归轨迹 </center><h3 id="大椭圆轨道"><a href="#大椭圆轨道" class="headerlink" title="大椭圆轨道"></a>大椭圆轨道</h3><hr><p><strong>大椭圆轨道</strong>(High Elliptical Orbit, <strong>HEO</strong>),顾名思义,就是指轨道偏心率较大的轨道。有多大呢?先看看前苏联专门为其闪电通信卫星设计的一类大椭圆轨道 — <strong>闪电轨道</strong>(Molniya Orbits)。</p><p><img src="/images/SatelliteDesign/NO1OrbitIntro/Orbit24.png" alt="闪电轨道三维示意图"></p><center> 图 16: 闪电轨道三维示意图 </center><p>闪电轨道远地点约 46000km,近地点约 800km,偏心率约高达 0.72,轨道周期 12h,每天运行两圈。为保持近地点长期不旋转,轨道倾角被冻结在 63.4° 附近,近地点幅角被冻结在 270° 附近。从上图可见,闪电轨道绝大多数时间运行在中高纬度地区,因而适合中高纬度通信,三颗卫星组网即可实现中高纬度地区不间断覆盖,这也是前苏联设计闪电轨道的初衷。</p><p><img src="/images/SatelliteDesign/NO1OrbitIntro/Molniya.jpg" alt="闪电轨道星下点二维轨迹图"></p><center> 图 17: 闪电轨道星下点二维轨迹图 </center><p>由于闪电轨道在闪电卫星的成功应用,后续轨道工程师们又设计了眼镜蛇轨道和魔法轨道。</p><p><img src="/images/SatelliteDesign/NO1OrbitIntro/Orbit25.jpg" alt="眼镜蛇和魔法"></p><p><strong>眼镜蛇轨道</strong>(Cobra Orbits),是闪电轨道的缩小版,远地点轨道高度只有 27000km,轨道周期 8h,每天运行三圈。该轨道在远地点附近对 3 个经度相互间隔 120° 的中高纬度区域提供大约 4h 的连续覆盖。因此,6 颗卫星组网颗实现中高纬度地区不间断覆盖。</p><p><img src="/images/SatelliteDesign/NO1OrbitIntro/Orbit26.png" alt="眼镜蛇轨道星下点三维轨迹图"></p><center> 图 17: 眼镜蛇轨道星下点三维轨迹图 </center><p><strong>魔法蛇轨道</strong>(Magic Orbits) ,是闪电轨道的微缩版,远地点轨道高度只有 7800km,轨道周期 3h,每天运行八圈。该轨道在远地点附近对 8 个经度相互间隔 45° 的中高纬度区域提供大约 1h 的连续覆盖。因此,24 颗卫星组网颗实现中高纬度地区不间断覆盖。</p><p><img src="/images/SatelliteDesign/NO1OrbitIntro/Orbit27.png" alt="魔法轨道星下点三维轨迹图"></p><center> 图 18: 魔法轨道星下点三维轨迹图 </center><hr><h2 id="结束语"><a href="#结束语" class="headerlink" title="结束语"></a>结束语</h2><hr><p>好了,轨道君已经带大家从开普勒超级快地跑到了现代航天,打完收工,让喵星人跟大家拜了个拜!</p><p><img src="/images/SatelliteDesign/NO1OrbitIntro/Orbit28.gif" alt="喵星人"></p>]]></content>
<categories>
<category> 航天任务 </category>
</categories>
<tags>
<tag> 卫星轨道 </tag>
<tag> 开普勒 </tag>
<tag> 轨道根数 </tag>
<tag> 地球静止轨道 </tag>
<tag> 太阳同步轨道 </tag>
<tag> 回归轨道 </tag>
<tag> 闪电轨道 </tag>
<tag> 眼镜蛇轨道 </tag>
<tag> 魔法轨道 </tag>
</tags>
</entry>
<entry>
<title>一种实用的开普勒方程求解方法及其 C 语言实现</title>
<link href="/2019/02/20/KeplerianSolver/"/>
<url>/2019/02/20/KeplerianSolver/</url>
<content type="html"><![CDATA[<p>开普勒方程是航天动力学基础方程,是开普勒定律的数学描述。由于开普勒方程属于超越方程,因而无法通过解析法精确求解,这一问题在历史上困扰全世界数学家们达 200 年之久,直至牛顿迭代方法的出现。</p><p>本文将介绍一种实用的开普勒方程求解方法,并采用 C 语言实现其算法。该方法出自美国海军天文台 <code>Marc A. Murison</code> 名为 <a href="https://www.researchgate.net/publication/271214938_A_Practical_Method_for_Solving_the_Kepler_Equation" target="_blank" rel="noopener">A Practical Method for Solving the Kepler Equation</a> 的文章,由于其算法简单、高效且利于编码实现,因而具有较好的实用性。</p><a id="more"></a><h3 id="1-开普勒方程描述"><a href="#1-开普勒方程描述" class="headerlink" title="1. 开普勒方程描述"></a>1. 开普勒方程描述</h3><hr><p>开普勒方程可表达为:</p><script type="math/tex; mode=display">f(E(t))=E(t)-esinE(t)-M(t)=0</script><p>它描述了线性时间 <script type="math/tex">t</script> 下偏近角 <script type="math/tex">E(t)</script> 和平近角 <script type="math/tex">M(t)</script> 之间的非线性转换关系。式中,<script type="math/tex">e</script> 为轨道偏心率,<script type="math/tex">M(t) = n(t-\tau)</script> 为平近角。其中,<script type="math/tex">n = \sqrt{\mu / a^3}</script> 表示二体模型中的平运动,<script type="math/tex">\tau</script> 为天体(或卫星)飞越近地点后累积的时长,<script type="math/tex">a</script> 为轨道半长轴。</p><p>实际计算中,有两种情况需要求解开普勒方程,一是已知真近角 <script type="math/tex">\theta</script>,求平近角 <script type="math/tex">M</script>;另外则是已知平近角 <script type="math/tex">M</script>,求真近角 <script type="math/tex">\theta</script>。可见偏近角 <script type="math/tex">E</script> 只是过程量,真近角 <script type="math/tex">\theta</script> 和 <script type="math/tex">M</script> 才是最终想要的结果量。在航天动力学中偏近角 <script type="math/tex">E</script> 本就是不真实的虚拟量,但它与真近角 <script type="math/tex">\theta</script> 存在直观的几何关系,如图 1 所示。当然平近角 <script type="math/tex">M</script> 也是不真实的虚拟量,它必须通过偏近角和开普勒方程与真近角实现数值上的转换。</p><p><img src="/images/AstroDyn/keplerian1.png" alt="真近角和偏近角之间的几何关系"></p><center> 图 1: 真近角和偏近角之间的几何关系 </center><p>由图 1 内部椭圆(真实运动轨迹)几何关系可得:</p><script type="math/tex; mode=display">r = a(1 - EcosE)</script><p>由图 1 外部圆(假想的平运动)几何关系可得:</p><script type="math/tex; mode=display">acosE = rcos \theta + ae</script><p>于是可得真近角和偏近角之间的相互转换关系为:</p><script type="math/tex; mode=display">tan \theta = \frac{sin \theta}{cos \theta} = \frac{\sqrt{1-e^2} sinE}{cosE-e} \\tanE = \frac{sinE}{cosE} = \frac{\sqrt{1-e^2} sin \theta}{e+cos \theta}</script><p>开普勒方程属于超越方程,故需采用数值法才能求得精确值。理想情况下,一个数值方法是否实用,应该看它是否同时具备以下两点:</p><ul><li>计算 <script type="math/tex">E</script> 的 <strong>CPU</strong> 耗时是否最小化;</li><li>程序的复杂度是否最小化。</li></ul><p>这两个需求往往是互相制约的,但幸运的是通过分析研究可以找到一个折中的方法来解决这个矛盾。开普勒方程只能通过迭代法求解,任何一个迭代过程的设计都有两个任务:</p><ul><li>第一个任务是设计迭代循环中的逼近算法。这个逼近算法需要重复执行直到结果达到令人满意的精度,一般说来迭代公式所用的阶数越高,迭代所需的次数就越少。然而,更高阶的迭代公式将使得公式的表达式变得十分复杂,这将极大地耗费 <strong>CPU</strong> 的运行时间。因此,无论我们选择何种算法,一个恰当(通常是比较低)的阶数会使得 <strong>CPU</strong> 的耗时最短;</li><li>第二个任务是选择一个迭代循环的初始值。初始值选的越精确,循环收敛的越快。选择初始值的方法不需要和迭代方法一样,哪怕两者极其相近。类似于迭代逼近算法,对于一个初值确定的算法,将有一个理想的阶数能够最大限度地减少 <strong>CPU</strong> 的耗时。</li></ul><p>接下来将给出一个非常简单的初值确定方法,紧接着是一个快速迭代算法。最后,直接给出算法性能分析结果及其伪代码,并用 C 语言加以实现之。</p><h3 id="2-初值确定方法"><a href="#2-初值确定方法" class="headerlink" title="2. 初值确定方法"></a>2. 初值确定方法</h3><hr><p>由于必须用迭代法求解开普勒方程,因而循环迭代的初始值越精确,迭代效果就越好,至少在迭代表达式复杂得令人反感之前应该是如此。将开普勒方程写成:</p><script type="math/tex; mode=display">E = M + esinE</script><p>在 <script type="math/tex">e=0</script> 的极限情况下,有 <script type="math/tex">E=M</script>,这是最简单的初始值近似。因此上面的方程可改写成如下简单的迭代近似公式:</p><script type="math/tex; mode=display">E_k = M + esinE_{k-1}</script><p>其中初始条件 <script type="math/tex">E_0 = M</script>。我们可以对上述递归表达式进行反复迭代,直至得到足够高的偏心率阶数。例如,三阶近似公式为:</p><script type="math/tex; mode=display">E = M + esinM + e^2sinMcosM + \frac{1}{2}\ e^3sinM(3cos^2M-1)</script><p>程序化后的三阶伪代码如下:<br><figure class="highlight matlab"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">KeplerStart3 := proc(e,M)</span><br><span class="line"> local t33, t35, t34;</span><br><span class="line"> t34 := eˆ<span class="number">2</span>;</span><br><span class="line"> t35 := e*t34;</span><br><span class="line"> t33 := <span class="built_in">cos</span>(M);</span><br><span class="line"> <span class="keyword">return</span> M+(<span class="number">-1</span>/<span class="number">2</span>*t35+e+(t34+<span class="number">3</span>/<span class="number">2</span>*t33*t35)*t33)*<span class="built_in">sin</span>(M);</span><br><span class="line"><span class="keyword">end</span> proc;</span><br></pre></td></tr></table></figure></p><h3 id="3-循环迭代方法"><a href="#3-循环迭代方法" class="headerlink" title="3. 循环迭代方法"></a>3. 循环迭代方法</h3><hr><p>循环迭代的最终目的是要得到收敛的结果。具体到开普勒方程,当给定一个带有误差的 <script type="math/tex">E</script> 时,必须找到一个迭代公式,使其每次返回一个误差更小的近似值,同时它也必须收敛。基于此,按如下方式改写开普勒方程:</p><script type="math/tex; mode=display">f(x) = x - esinx - M</script><p>式中,<script type="math/tex">f(x)=0</script> 的解是 <script type="math/tex">x=E</script>。令 <script type="math/tex">\epsilon \equiv x-E</script> 为 <script type="math/tex">x</script> 逼近 <script type="math/tex">E</script> 时存在的误差,将 <script type="math/tex">f(x)</script> 在 <script type="math/tex">x=E</script> 处进行泰勒展开,于是得到:</p><script type="math/tex; mode=display">f(E) = f(x-\epsilon) = x-esinx-M-(1-ecosx) \epsilon + \frac{1}{2}\ \epsilon ^2 esinx - \frac{1}{6}\ \epsilon ^3 ecosx + ...</script><p>式中,假设 <script type="math/tex">\epsilon</script> 充分小。若只考虑一阶展开,可得:</p><script type="math/tex; mode=display">\epsilon = \frac{x-esinx-M}{1-ecosx}</script><p>上式可作为一阶迭代方案的的核心算法。假设一开始猜测 <script type="math/tex">x = x_0</script>,那么 <script type="math/tex">x_1 = x_0 + \epsilon</script> 比 <script type="math/tex">x_0</script> 更接近于 <script type="math/tex">E</script>。于是得到一阶迭代方程:</p><script type="math/tex; mode=display">\epsilon_{n+1} = \frac{x_n-esinx_n-M}{1-ecosx_n}</script><p>其中初始值 <script type="math/tex">x_0</script> 的取值将在后面讨论。由上式可以得到单步一阶迭代法来估计 <script type="math/tex">E_{n+1} = E_n - \epsilon_n</script>,对应的伪代码如下:<br><figure class="highlight matlab"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">eps1 := proc(e,M,x)</span><br><span class="line"> <span class="keyword">return</span> (x-e*<span class="built_in">sin</span>(x)-M)/(<span class="number">1</span>-e*<span class="built_in">cos</span>(x));</span><br><span class="line"><span class="keyword">end</span> proc;</span><br></pre></td></tr></table></figure></p><p>现在把二阶项考虑进去,方程展开后写成 <code>Horner</code> 形式:</p><script type="math/tex; mode=display">f(x-\epsilon) = x-esinx-M- \left( 1 - ecosx - \frac{1}{2}\ esinx \cdot \epsilon \right) \epsilon</script><p>同理,令 <script type="math/tex">f(x-\epsilon)=0</script>,整理得到如下形式:</p><script type="math/tex; mode=display">\epsilon = \frac{x-esinx-M}{1-ecosx-\frac{1}{2}\ \epsilon esinx}</script><p>类比单步一阶形式,创建单步二阶迭代方程:</p><script type="math/tex; mode=display">\epsilon_{n+1} = \frac{x_n-esinx_n-M}{1-ecosx_n-\frac{1}{2}\ \epsilon_n esinx_n}</script><p>重点来了,此处可以将 <script type="math/tex">\epsilon_n</script> 用一阶迭代公式替换,创建一个两步迭代过程,于是得到新的迭代方程:</p><script type="math/tex; mode=display">\epsilon_{n+1} = \frac{x_n-esinx_n-M}{1-ecosx_n-\frac{1}{2}\ esinx_n \frac{x_n-esinx_n-M}{1-ecosx_n}}</script><p>上述方程经优化后的伪代码为:<br><figure class="highlight matlab"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">eps2 := proc(e,M,x)</span><br><span class="line"> localt1,t2,t3;</span><br><span class="line"> t1 := <span class="number">-1</span>+e*<span class="built_in">cos</span>(x);</span><br><span class="line"> t2 := e*<span class="built_in">sin</span>(x);</span><br><span class="line"> t3 := -x+t2+M;</span><br><span class="line"> <span class="keyword">return</span> t3/(<span class="number">1</span>/<span class="number">2</span>*t3*t2/t1+t1);</span><br><span class="line"><span class="keyword">end</span> proc;</span><br></pre></td></tr></table></figure></p><p>更进一步,<script type="math/tex">f(E)=f(x-\epsilon)</script> 三阶展开方程的 <code>Horner</code> 形式为:</p><script type="math/tex; mode=display">f(x-\epsilon) = x-esinx-M- \left( 1 - ecosx - \left( \frac{1}{2}\ esinx - \frac{1}{6}\ ecosx \cdot \epsilon \right) \epsilon \right) \epsilon</script><p>同理,令 <script type="math/tex">f(x-\epsilon)=0</script>,整理得到如下形式:</p><script type="math/tex; mode=display">\epsilon_{n+1} = \frac{x_n-esinx_n-M}{1-ecosx_n-\frac{1}{2}\ \left( esinx_n - \frac{1}{3}\ ecosx \cdot \epsilon_n \right) \epsilon_n}</script><p>重点又来了,此处可以先将 <script type="math/tex">\epsilon_n</script> 用二阶迭代公式替换,再将 <script type="math/tex">\epsilon_n</script> 用一阶迭代公式替换,创建一个三步迭代过程,于是得到新的迭代方程,由于方程过于复杂,直接给出优化后的伪代码:<br><figure class="highlight matlab"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">eps3 := proc(e,M,x)</span><br><span class="line"> local t1, t2, t3, t4, t5, t6;</span><br><span class="line"> t1 := <span class="built_in">cos</span>(x);</span><br><span class="line"> t2 := <span class="number">-1</span>+e*t1;</span><br><span class="line"> t3 := <span class="built_in">sin</span>(x);</span><br><span class="line"> t4 := e*t3;</span><br><span class="line"> t5 := -x+t4+M;</span><br><span class="line"> t6 := t5/(<span class="number">1</span>/<span class="number">2</span>*t5*t4/t2+t2);</span><br><span class="line"> <span class="keyword">return</span> t5/((<span class="number">1</span>/<span class="number">2</span>*t3 - <span class="number">1</span>/<span class="number">6</span>*t1*t6)*e*t6+t2);</span><br><span class="line"><span class="keyword">end</span> proc;</span><br></pre></td></tr></table></figure></p><p>可以继续利用这种方式到更高阶的形式,本文的推导止于此,后文我们会看到三阶迭代已经处于 <strong>CPU</strong> 时耗最优区间。</p><h3 id="4-实用的开普勒方程求解方法"><a href="#4-实用的开普勒方程求解方法" class="headerlink" title="4. 实用的开普勒方程求解方法"></a>4. 实用的开普勒方程求解方法</h3><hr><p>数值测试,令算法执行的 <strong>CPU</strong> 耗时为迭代阶数 (Niter) 和 初始值逼近阶数 (Nstart) 的二元函数,绘制求解 16000 个开普勒方程的 <strong>CPU</strong> 耗时等高线,其中 <script type="math/tex">e</script> 和 <script type="math/tex">M</script> 在 <script type="math/tex">\{ \mathbb{R} \times \mathbb{R}: e \in [0,1), M \in [0, \pi] \}</script> 等间隔 <script type="math/tex">400 \times 400</script> 网格域中选取。结果表明,不论是对于初值算法,还是迭代算法,三阶形式都接近最优,如图 2 所示。</p><p><img src="/images/AstroDyn/keplerian2.png" alt="真近角和偏近角之间的几何关系"></p><center> 图 2: 真近角和偏近角之间的几何关系 </center><p>由此,给出优化后的三阶迭代和初始值方法求解开普勒方程的伪代码:<br><figure class="highlight matlab"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line">KeplerSolve := proc( e, M, tol:=<span class="number">1.0e-14</span> )</span><br><span class="line"> local dE, E, E0, Mnorm, count;</span><br><span class="line"> <span class="keyword">global</span> Estart3, eps3;</span><br><span class="line"> Mnorm := fmod(M,<span class="number">2</span>*Pi);</span><br><span class="line"> E0 := KeplerStart3(e,Mnorm);</span><br><span class="line"> dE := tol + <span class="number">1</span>;</span><br><span class="line"> count := <span class="number">0</span>;</span><br><span class="line"> <span class="keyword">while</span> dE > tol do</span><br><span class="line"> E := E0 - eps3(e,Mnorm,E0);</span><br><span class="line"> dE := <span class="built_in">abs</span>(E-E0);</span><br><span class="line"> E0 := E;</span><br><span class="line"> count := count + <span class="number">1</span>;</span><br><span class="line"> <span class="keyword">if</span> count=<span class="number">100</span> then</span><br><span class="line"> print “太令人惊讶了,KeplerSolve 竟然不收敛!”;</span><br><span class="line"> <span class="keyword">break</span>;</span><br><span class="line"> <span class="keyword">end</span> <span class="keyword">if</span>;</span><br><span class="line"> <span class="keyword">end</span> do;</span><br><span class="line"> <span class="keyword">return</span> E;</span><br><span class="line"><span class="keyword">end</span> proc;</span><br></pre></td></tr></table></figure></p><h3 id="5-C-语言实现"><a href="#5-C-语言实现" class="headerlink" title="5. C 语言实现"></a>5. C 语言实现</h3><hr><p>根据优化后的实用开普勒方程求解伪代码,可编写其计算机语言实现代码。下面给出三个主要函数的 C 语言实现,这些代码已经过充分测试,可放心使用。函数中的 <code>fmod</code> 函数为取模函数,用于处理平近角周期问题,请读者自行补脑。至此,码完收工,拜了个拜!<br><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">/* ---------------------------------------------------------------------</span></span><br><span class="line"><span class="comment">**</span></span><br><span class="line"><span class="comment">** 函数名称: KeplerStart3</span></span><br><span class="line"><span class="comment">** 函数功能: 开普勒方程三阶初值估计</span></span><br><span class="line"><span class="comment">** 输入参数: ecc -> 偏心率 [N/A]</span></span><br><span class="line"><span class="comment">** M -> 平近角 [rad]</span></span><br><span class="line"><span class="comment">** 输出参数: 无</span></span><br><span class="line"><span class="comment">** 返回值 : E -> 偏近角 [rad]</span></span><br><span class="line"><span class="comment">**</span></span><br><span class="line"><span class="comment">** ---------------------------------------------------------------------*/</span></span><br><span class="line"><span class="function"><span class="keyword">double</span> <span class="title">KeplerStart3</span><span class="params">(<span class="keyword">double</span> ecc, <span class="keyword">double</span> M)</span></span>{</span><br><span class="line"></span><br><span class="line"> <span class="keyword">double</span> t34, t35, t33, E;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">if</span>(ecc < <span class="number">0</span> || ecc >= <span class="number">1</span>){</span><br><span class="line"> <span class="built_in">printf</span>(<span class="string">"!!!错误的偏心率,该程序只适合椭圆轨道(0 =< ecc < 1)!!!\n"</span>);</span><br><span class="line"> <span class="keyword">return</span> <span class="number">-1</span>;</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> <span class="keyword">if</span>(M >= D2PI || M < <span class="number">0</span>){</span><br><span class="line"> M = <span class="built_in">fmod</span>(M, <span class="number">0</span>, D2PI);</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> t34 = ecc * ecc;</span><br><span class="line"> t35 = ecc * t34;</span><br><span class="line"> t33 = <span class="built_in">cos</span>(M);</span><br><span class="line"></span><br><span class="line"> E = M + (<span class="number">-0.5</span>*t35 + ecc + (t34 + <span class="number">3.0</span>/<span class="number">2.0</span>*t33*t35) * t33) * <span class="built_in">sin</span>(M);</span><br><span class="line"></span><br><span class="line"> <span class="keyword">return</span> E;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="comment">/* ---------------------------------------------------------------------</span></span><br><span class="line"><span class="comment">**</span></span><br><span class="line"><span class="comment">** 函数名称: eps3</span></span><br><span class="line"><span class="comment">** 函数功能: 开普勒方程三阶误差估计</span></span><br><span class="line"><span class="comment">** 输入参数: ecc -> 偏心率 [N/A]</span></span><br><span class="line"><span class="comment">** M -> 平近角 [rad]</span></span><br><span class="line"><span class="comment">** x -> 偏近角过程值 [rad]</span></span><br><span class="line"><span class="comment">** 输出参数: 无</span></span><br><span class="line"><span class="comment">** 返回值 : E_error -> 偏近角估计误差 [rad]</span></span><br><span class="line"><span class="comment">**</span></span><br><span class="line"><span class="comment">** ---------------------------------------------------------------------*/</span></span><br><span class="line"><span class="function"><span class="keyword">double</span> <span class="title">eps3</span><span class="params">(<span class="keyword">double</span> ecc, <span class="keyword">double</span> M, <span class="keyword">double</span> x)</span></span>{</span><br><span class="line"></span><br><span class="line"> <span class="keyword">double</span> t1, t2, t3, t4, t5, t6, E_error;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">if</span>(ecc < <span class="number">0</span> || ecc >= <span class="number">1</span>){</span><br><span class="line"> <span class="built_in">printf</span>(<span class="string">"!!!错误的偏心率,该程序只适合椭圆轨道(0 =< ecc < 1)!!!\n"</span>);</span><br><span class="line"> <span class="keyword">return</span> <span class="number">-1</span>;</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> <span class="keyword">if</span>(M >= D2PI || M < <span class="number">0</span>){</span><br><span class="line"> M = <span class="built_in">fmod</span>(M, <span class="number">0</span>, D2PI);</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> t1 = <span class="built_in">cos</span>(x);</span><br><span class="line"> t2 = <span class="number">-1</span> + ecc * t1;</span><br><span class="line"> t3 = <span class="built_in">sin</span>(x);</span><br><span class="line"> t4 = ecc * t3;</span><br><span class="line"> t5 = -x + t4 + M;</span><br><span class="line"> t6 = t5 / (<span class="number">0.5</span> * t5 * t4 / t2 + t2);</span><br><span class="line"></span><br><span class="line"> E_error = t5 / ((<span class="number">0.5</span>*t3 - <span class="number">1.0</span>/<span class="number">6.0</span>*t1*t6) * ecc * t6 + t2);</span><br><span class="line"></span><br><span class="line"> <span class="keyword">return</span> E_error;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="comment">/* ---------------------------------------------------------------------</span></span><br><span class="line"><span class="comment">**</span></span><br><span class="line"><span class="comment">** 函数名称: KeplerSolve</span></span><br><span class="line"><span class="comment">** 函数功能: 求解开普勒方程</span></span><br><span class="line"><span class="comment">** 输入参数: ecc -> 偏心率 [N/A]</span></span><br><span class="line"><span class="comment">** M -> 平近角 [rad]</span></span><br><span class="line"><span class="comment">** 输出参数: 无</span></span><br><span class="line"><span class="comment">** 返回值 : E -> 偏近角 [rad]</span></span><br><span class="line"><span class="comment">**</span></span><br><span class="line"><span class="comment">** ---------------------------------------------------------------------*/</span></span><br><span class="line"><span class="function"><span class="keyword">double</span> <span class="title">KeplerSolve</span><span class="params">(<span class="keyword">double</span> ecc, <span class="keyword">double</span> M)</span></span>{</span><br><span class="line"></span><br><span class="line"> <span class="keyword">double</span> E0, dE, E, Mnorm;</span><br><span class="line"> <span class="keyword">double</span> tol = <span class="number">1.0e-20</span>;</span><br><span class="line"> <span class="keyword">int</span> iter_count = <span class="number">0</span>;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">if</span>(ecc < <span class="number">0</span> || ecc >= <span class="number">1</span>){</span><br><span class="line"> <span class="built_in">printf</span>(<span class="string">"!!!错误的偏心率,该程序只适合椭圆轨道(0 =< ecc < 1)!!!\n"</span>);</span><br><span class="line"> <span class="keyword">return</span> <span class="number">-1</span>;</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> <span class="keyword">if</span>(M >= D2PI || M < <span class="number">0</span>){</span><br><span class="line"> M = <span class="built_in">fmod</span>(M, <span class="number">0</span>, D2PI);</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> Mnorm = <span class="built_in">fmod</span>(M, <span class="number">0</span>, D2PI);</span><br><span class="line"></span><br><span class="line"> E0 = KeplerStart3(ecc, Mnorm);</span><br><span class="line"> dE = tol + <span class="number">1</span>;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">while</span>(dE > tol){</span><br><span class="line"> E = E0 - eps3(ecc, Mnorm, E0);</span><br><span class="line"> dE = <span class="built_in">fabs</span>(E - E0);</span><br><span class="line"> E0 = E;</span><br><span class="line"></span><br><span class="line"> iter_count = iter_count + <span class="number">1</span>;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">if</span>(iter_count > <span class="number">10</span>){</span><br><span class="line"> <span class="built_in">printf</span>(<span class="string">"太令人惊讶了,KeplerSolve 竟然不收敛!\n"</span>);</span><br><span class="line"> <span class="keyword">return</span> <span class="number">-1</span>;</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> <span class="comment">// printf("迭代次数:iter_count = %d\n", iter_count);</span></span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> <span class="keyword">return</span> E;</span><br><span class="line">}</span><br></pre></td></tr></table></figure></p>]]></content>
<categories>
<category> 专业技能 </category>
</categories>
<tags>
<tag> 航天动力学 </tag>
<tag> 开普勒方程 </tag>
<tag> C </tag>
<tag> 平近角 </tag>
<tag> 偏近角 </tag>
<tag> 真近角 </tag>
</tags>
</entry>
<entry>
<title>低轨卫星通信系统发展综述</title>
<link href="/2019/02/12/LEOComm/"/>
<url>/2019/02/12/LEOComm/</url>
<content type="html"><![CDATA[<p>通信、导航和遥感是卫星应用领域的三驾马车,简称 <strong>通导遥</strong>。鉴于任务特性,通信卫星和导航卫星通常运行在中高轨道,遥感卫星一般则运行在低地球轨道。自 20 世纪 90 年代以来,微小卫星技术迅猛发展,性价比逐年攀升,通信与导航卫星在低地球轨道(Low Earth Orbits, <strong>LEO</strong>)上的应用潜力渐渐被人们挖掘,尤其是通信卫星,已有成功商业案例。</p><p>本文将阐述笔者对国内外低轨卫星通信系统的过去和发展现状的一些看法,以及产业展望。</p><a id="more"></a><p><img src="/images/LEOComm/LEOCommImaging.jpg" alt="低轨通信星座艺术想象图"></p><center> 图 1: 低轨通信星座艺术想象图 </center><hr><h2 id="1-低轨卫星通信系统的过去"><a href="#1-低轨卫星通信系统的过去" class="headerlink" title="1 低轨卫星通信系统的过去"></a>1 低轨卫星通信系统的过去</h2><hr><p>20 世纪 80 年代开始掀起的小卫星技术热潮对星座的发展起了巨大的推动作用。早期卫星质量大,研制周期长,要完成一个星座的部署很困难。在卫星运行寿 命短和可靠性差的情况下,没有等到星座部署完成,早期发射的卫星就已经不能工作了。在当时的技术和经济条件下,小卫星提供了一个较好的解决思路,与此同时世界通信市场不断扩大,这两方面因素促进了低轨通信星座发展。</p><p>20 世纪 90 年代初期,低轨通信星座开始盛行,最多时有十几个卫星通信星座 计划。这些星座通常被分为三类:</p><ul><li><strong>大型 LEO 卫星移动电话系统</strong>;</li><li><strong>中小型 LEO 卫星移动数据传输系统</strong>;</li><li><strong>宽带多媒体通信系统(Ka 波段)</strong>。</li></ul><p>根据美国联邦通信委员会的决定,小 <strong>LEO</strong> 系统是非话音非静止轨道卫星,在轨道高度较宽的范围内提供低速业务;而大 <strong>LEO</strong> 系统要提供话音、传真、数据和 寻呼业务,寻呼包括在低速业务内。</p><p>然而低轨通信星座发展并不顺利,主要原因在市场竞争和经济因素。由于目前通信密集地区是城市,而城市地面蜂窝通信费用很低,卫星通信费用高,因而竞争不过现有的通信手段。当时名震一时的“铱星系统”(<strong>Iridium</strong>)运营商最终应入不敷出宣布破产。目前 <strong>ORBCOMM</strong> 和“全球星”系统(<strong>GlobalStar</strong>)运营正常,<strong>ORBCOMM</strong> 是低成本的数据通信和定位系统,而“全球星”主要是满足国防、边远、沙漠地区通信的需要,填补了地面通信网的空白。</p><h3 id="1-1-ORBCOMM"><a href="#1-1-ORBCOMM" class="headerlink" title="1.1 ORBCOMM"></a>1.1 ORBCOMM</h3><hr><p><strong>ORBCOMM</strong> 是一个在全球范围内提供双向、窄带的数据传送、数据通信以及定位业务的卫星通信系统。<strong>ORBCOMM</strong> 设计为 47 颗卫星(包括 6 颗备用卫星)分布在 7 个轨道面的全球覆盖的星座系统,这 7 个轨道面命名为 A、B、C、D、E、F、G。其中, A~D 轨道倾角为 45°,高度 800km;E 为赤道轨道,高度 975km;F、G 轨道倾角分别为 70° 及 108°,高度 820km。<strong>ORBCOMM</strong> 从 1995 年开始发射试验卫星,1998 年底开始提供全球服务。目前在轨服务的卫星共有 29 颗,A、B 平面各有 8 颗卫星,C、D 轨道各有 6 颗卫星,G 轨道 1 颗卫星。<strong>ORBCOMM</strong> 的每颗卫星不足 50kg,是典型的低成本微小卫星。目前该系统已经在交通运输、油气田、水利、环保、渔船以及消防报警等方面发挥重要作用。</p><p><img src="/images/LEOComm/Orbcomm_OG2_Coverage.jpg" alt="Orbcomm 星座网络覆盖示意图"></p><center>图 2: ORBCOMM 星座系统瞬时地面覆盖示意图</center><h3 id="1-2-铱星星座(Iridium-Constellation)"><a href="#1-2-铱星星座(Iridium-Constellation)" class="headerlink" title="1.2 铱星星座(Iridium Constellation)"></a>1.2 铱星星座(Iridium Constellation)</h3><hr><p><strong>“铱星”星座</strong> 系统是美国摩托罗拉公司于 1987 年提出的一种利用低轨道星座实现全球个人卫星移动通信的系统,它与现有的通信网相结合,可以实现全球数字化个人通信。“铱星系统”区别于其他卫星移动通信系统的特点之一是卫星具有星间通信链路,能够不依赖地面转接为地球上任意位置的终端提供连接,因而系统的性能极为先进、复杂, 这导致其投资费用较高。星座的构型为玫瑰星座,卫星均匀部署在南北方向 677km 高的 6 条极轨近圆轨道上,轨道倾角为 86.4°。每颗卫星载有 3 个 16 波束相控阵天线,其投射的多波束在地球表面形成 48 个蜂窝区。每颗卫星拥有 4 条 Ka 频段的星间通信链路,两条用于建立同轨道面前后方向卫星的星间链路,星间距离 4021~4042km;两条用于建立相邻轨道面间卫星的通信链路(仅适用于纬度 68° 以下地域),星间 距离 2700~4400km。异轨道面间链路的天线可根据加载到卫星上的星历信息进行指向调整,波束宽度足以适用纬度控制和卫星位置保持的容差。卫星在轨重量 320kg,工作寿命 5~8 年。</p><p><img src="/images/LEOComm/Iridium.jpeg" alt="铱星星座空间段示意图"></p><center>图 3: 铱星星座三维构型示意图(66 颗工作星)</center><h3 id="1-3-全球星系统(GlobalStar-System)"><a href="#1-3-全球星系统(GlobalStar-System)" class="headerlink" title="1.3 全球星系统(GlobalStar System)"></a>1.3 全球星系统(GlobalStar System)</h3><hr><p><strong>“全球星”系统</strong> 是美国 <strong>Loral</strong> 和 <strong>Qualcomm(高通)</strong> 公司发起的,是目前唯一正式商业运行的语音移动通信系统。卫星系统由 48 颗工作卫星和 12 颗备用卫星组成。最近的一次发射是在 2007 年 10 月 21 日,由俄罗斯的运载火箭将四颗备份卫星送入轨道。卫星重约 450kg,预定寿命为 7.5 年。分布在 8 个倾角为 52°的圆轨道上,轨道高度 1414km,每个轨道分布 6 颗工作卫星和 1~2 颗备用卫星,星座的相位因子为 1。系统主要覆盖南北纬 70° 以内地区。“全球星”系统的每个卫星利用 16 个点波束天线将辐射区划分为 16 个小区以与地面的用户和网关相互收发信息考虑到信息传输的多样性和链路余量问题,“全球星”在主要的商业服务区(北纬25°~49°)满足任何时刻至少两重覆盖的要求,而其他地区则只要求保证一重覆盖,“全球星”系统的地面覆盖如图4 所示。“全球星”系统的卫星设置弯管式(Bent Pipe)转发器,通过地面建立不在同一卫星覆盖区内的用户的连接,因此,需要建立较多的网关地球站。</p><p><img src="/images/LEOComm/GlobalStar-48-unprojected-large.gif" alt="全球星星座系统地面覆盖示意图"></p><center>图 4: 全球星星座系统瞬时地面覆盖示意图(48 颗星)</center><h3 id="1-4-其他系统"><a href="#1-4-其他系统" class="headerlink" title="1.4 其他系统"></a>1.4 其他系统</h3><hr><p>除上述已经投人运营的卫星通信系统外,同时期的还有 ICO, Ellipso 等卫星通信系统计划。ICO 全球通信系统由高度为 10390km 的中轨大型卫星组成,共有 12 颗卫星,布置于 2 个轨道面,每个轨道面 5 颗工作星, 1 颗备份星。由于受“铱星系统”的影响,投资者缺乏信心,1999 年也曾宣布破产重组。</p><p><strong>Ellipso 卫星移动通信系统</strong> 是由美国移动通信控股公司设计的一种独特的混合轨道星座,它由两个规则的子星座即 Borealis 和 Concordia 组成,用 17 颗卫星实现人口主要分布区域(北半球和南半球的中低讳地区)的覆盖,比 Iridium 星座和 GlobalStar 星座的卫星数量少得多。在该星座中有 10 颗卫星部署在两条轨道,倾角为 116.6° 的椭圆轨道上(Borealis),近地点高度 520km,远地点高度 7846km,轨道周期为 3h,偏心率为 0.35,用以覆盖北半球中高讳度地带;另有 7 颗卫星部署在轨道高度为 8063km 赤道圆轨道上(Concordia),用以覆盖中低讳度地带。</p><p>随着数字技术的进步以及人们对高质量的电文、语音、数据和视频通信业务需求的增长,美国许多通信经营商纷纷投向宽带多媒体卫星系统,已有多家公司获得了 FCC(Federal Communications Commission,美国通信委员会)的许可证。它们都将利用 Ka 波段(20~30GHz)提供宽带、大容量、多媒体的卫星通信业务,典型的静止轨道系统如 Spaceway、Astrolink 等,中低轨系统有 Skybridge,Teledesic 等。</p><p><strong>Skybridge 星座</strong> 由 80 颗低地球圆轨道卫星组成,采用 Ka 波段支持高速数据、因特网接人及宽带多媒体技术。Skybridge 星座在设计上有其特殊之处,为了避免与同步轨道或其他高轨卫星的频率冲突,采用了复合 Walker 星座的构型,以“星对”为单元构成整个星座,这样当任意一颗卫星与其他卫星发生冲突时,采用另外一颗处于安全距离的卫星来替代工作。</p><p><strong>Teledesic</strong> 是 20 世纪卫星数最多的一个星座计划,在计划刚公布时引起了不小的反响。星座最初计划由 840 颗星组成。后来改成了 288 颗卫星(构型如下图所示),分布于 12 平面,每个面 24 颗卫星,后又减至 120 颗卫星加 6 颗在轨备份。Teledesic的 星地链路为 Ka 波段,每个轨道面上的相邻卫星之间建 有 60GHz 的星际链路,Teledesic 采用全星上处理和全星上交换,系统设计成一个“空中因特网”。</p><p><img src="/images/LEOComm/Teledesic-288.png" alt="Teledesic星座设计构型"></p><center>图 5: Teledesic 星座三维构型示意图(228 颗星)</center><hr><h2 id="2-低轨卫星通信系统发展现状"><a href="#2-低轨卫星通信系统发展现状" class="headerlink" title="2 低轨卫星通信系统发展现状"></a>2 低轨卫星通信系统发展现状</h2><hr><p>进入 21 世纪后,计算机、微机电、先进制造等行业的快速发展推动了通信技术和微小卫星技术升级换代,进而使得卫星通信成本的下降,低轨卫星通信星座凸显出广泛的应用前景。2015年前后,国内外先后提出多个大规模低轨卫星通信系统,知名的诸如:Iridium Next、OneWeb、StarLink、鸿雁星座、虹云星座等。其中,铱星二代 (Iridium Next)在 2019 年 1 月 11 日成功完成最后一组卫星发射,并于 2019 年 2 月 6 日宣布完成星座组网,正式投入运营;SpaceX 公司的 StarLink 于 2018 年 2 月 2 日成功发射两颗试验星 Microsat2-A/B,对最终要组建的 12000 颗微小卫星星座信心十足;中国航天科工集团于 2018 年 12 月 22 日成功将虹云工程技术验证卫星发射升空,卫星进入预定轨道;中国航天科技集团于 2018 年 12 月 29 日成功发射鸿雁星座首发星 <code>重庆号</code>,并顺利开展了载荷星地通信试验;OneWeb 首批 6 星也于 2019 年 2 月 28 日成功由 <a href="http://www.spaceflightfans.cn/event/soyuz-st-b-rocket-fregat-mt-upper-stage-launch-oneweb" target="_blank" rel="noopener">联盟号运载火箭(<strong>Soyuz ST-B/Fregat-MT</strong>)发射入轨</a>,拉开了其规模庞大的宽带星座撒网序幕。</p><h3 id="2-1-铱星二代(Iridium-NEXT)"><a href="#2-1-铱星二代(Iridium-NEXT)" class="headerlink" title="2.1 铱星二代(Iridium NEXT)"></a>2.1 铱星二代(Iridium NEXT)</h3><hr><p>铱星通信公司于 2010 年 6 月宣布了其下一代卫星星座 <strong>Iridium NEXT</strong> 的筹建资金,建设和部署计划,以取代超期服务的铱星星座。2016 年铱星公司与 SpaceX 签订了 4.92 亿美元的发射合同, 一次 10 星一共七次将 70 颗铱星二代系统发射到 LEO 轨道。随后,双方补签了第八次 5 星发射合同。2019 年 1 月 11 号,随着 SpaceX 成功将最后 10 星发射入轨,标志着铱星二代完成组网工作。铱星二代由 81 颗功能相同的卫星组成天基移动通信系统,其中 66 颗工作星呈 δ-Walker 星座均匀分布在 6 个轨道面上,辅以 6 颗天基备份星和 9 颗地基备份星。</p><p><img src="/images/LEOComm/IridiumNEXTConstellation.png" alt="铱星二代星座构型示意图"></p><center> 图 6: 铱星二代星座三维构型示意图(66 颗工作星)</center><p>铱星二代卫星重约 860kg,最大功耗 2kW,发射包络 3.1m x 2.4m x 1.5m,设计寿命 10 年,任务寿命 15 年。卫星主载荷为 L 波段通信载荷,其相控阵天线在地球表面生成 48 个波束,形成直径为 4700km 的蜂窝,用于提供 1.5Mbps 的星地数据传输服务;卫星提供搭载服务,可搭载质量不大于 50kg、功耗不大于 50W、空间包络不大于 40 cm x 70 cm x 30 cm、数据量不大于 100 kbps(90% 占空比)或 1 Mbps(10% 占空比)的次载荷,目前每颗卫星皆携带一个 ADS-B 接收机,58 颗星携带了 AIS 接收机,用于全球民用客机及船舶监视服务。此外,卫星具备星间和星地网关链路,星间链路由 4 个 Ka 波段(23 GHz)通信设备实现,前后双星的链路 2 个设备固定指向,相邻轨道 2 个设备具备目标姿态指向能力,通信速率达 10Mbps;星地网关链路由 2 个具备目标姿态指向的 Ka 波段(20/30 GHz)通信设备实现,通信速率达 8Mbps。</p><center> 表 1: 铱星二代卫星总体指标</center><p><img src="/images/LEOComm/IridiumNEXT-Specs.png" alt="铱星二代卫星指标"></p><p>铱星二代星座 66 颗工作星和 6 颗备份星皆由 SpaceX 公司的 Falcon-9 v1.2 运载火箭发射,卫星首先被送入 625km 的停泊轨道,通过测试后变轨进入 780km 的工作轨道。寿命末期,卫星再次变轨将其近地点降低至 250km,实现主动离轨。由于项目规模庞大,铱星二代的总成本达 30 亿美元,包括卫星研发、制造和发射相关的所有开销。</p><h3 id="2-2-OneWeb"><a href="#2-2-OneWeb" class="headerlink" title="2.2 OneWeb"></a>2.2 OneWeb</h3><hr><h4 id="2-2-1-OneWeb-简介"><a href="#2-2-1-OneWeb-简介" class="headerlink" title="2.2.1 OneWeb 简介"></a>2.2.1 OneWeb 简介</h4><hr><p>2012 年,卫星互联网公司 <strong>O3b</strong> 创始人 <strong>Greg Wyler</strong> 成立了 <strong>OneWeb</strong> 公司,致力于实现全球天基实时互联的宽带互联网络系统。<strong>O3b</strong> 拥有 12 颗位于赤道上方的 MEO(距离地面 8000km)卫星,并成功在系统建成第一年就超额完成了 1 亿美金的财政目标,因而 <strong>OneWeb</strong> 成立之初就被众多太空互联网投资者看好。目前,其投资方阵容强大,覆盖了软银 <strong>SoftBank</strong>、高通 <strong>Qualcomm</strong>、空客防务 <strong>Airbus</strong>、维珍 <strong>Virgin</strong>、可口可乐 <strong>Coca Cola</strong> 等。</p><p><img src="/images/LEOComm/Onweb-GregWyler.png" alt="OneWeb 星座艺术图及其项目特性"></p><center> 图 7: Onweb 创始人 Greg Wyler </center><p><strong>OneWeb</strong> 公司计划建造的 <strong>OneWeb</strong> 星座设计由 <strong>900</strong> 颗微小卫星组成,其中 <strong>720</strong> 颗将被发射到倾角为 <strong>87.9°</strong> 的<strong>1200km</strong> 高度轨道,均匀分布在 <strong>18个轨道面</strong> ,每个轨道面工作星 <strong>36</strong> 颗,辅以 <strong>4</strong> 颗备份星,以提供全球宽带互联网实时连接。</p><p><img src="/images/LEOComm/Oneweb-con1.jpeg" alt="OneWeb 星座艺术图及其项目特性"></p><center> 图 8: OneWeb 星座艺术图及其项目特性 </center><p><strong>OneWeb</strong> 卫星重约 150kg,设计寿命 5 年,发射包络约为 1m x 1m x 1.3m,配备两个太阳能电池板,采用电推进系统进行轨道机动、构型保持以及主动离轨,并使用 Ku 波段通信天线实现用户链路和Ka波段通信天线实现网关链路,可提供高仰角、优于 50ms 延时、宽带速率达 50Mps 的互联网接入服务。</p><p><img src="/images/LEOComm/Oneweb-con2.jpeg" alt="OneWeb 星座空间段特性"></p><center> 图 9: OneWeb 星座空间段特性 </center><p><img src="/images/LEOComm/Oneweb-con3.jpeg" alt="OneWeb 卫星模型"></p><center> 图 10: OneWeb 卫星模型 </center><p>星座的部署分多个批次进行,每批卫星首先被发射至 450~475km 的停泊轨道,待完成测试后利用电推进系统抬升轨道至 1200km 高度的工作轨道。值得一提的是,1200km 高度的轨道空间碎片通量处于 LEO 轨道较低水平,因而碰撞风险较小,对于设计由 720 颗卫星组成的 OneWeb 星座来说无疑是极其理想的轨道空间 。此外,为满足空间碎片协委会(机构间空间碎片协调委员会)对低轨卫星空间碎片减缓要求的规定,当星座接近其预期使用寿命时,所有卫星将主动离轨。届时每颗卫星先将轨道高度降低至 1100km,再将近地点高度降低至 250km,随后利用大气阻力在 5 年内坠毁,以确保不产生太空垃圾。</p><p><img src="/images/LEOComm/Oneweb-con4.jpeg" alt="LEO 编目空间碎片通量统计数据"></p><center> 图 11: LEO 编目空间碎片通量统计数据(2011年) </center><h4 id="2-2-2-OneWeb-系统特性"><a href="#2-2-2-OneWeb-系统特性" class="headerlink" title="2.2.2 OneWeb 系统特性"></a>2.2.2 OneWeb 系统特性</h4><hr><p><strong>OneWeb</strong> 具有众多颠覆传统卫星行业的任务特性,一是其实时覆盖性;二是其理智的运营策略;三是大规模生产和发射部署的革命性举措;四是巨大的实施风险。</p><p>1). <strong>实时覆盖性:</strong>与铱星一样,<strong>OneWeb</strong> 采用了极轨道,每颗卫星设计了 16 个 Ku 用户波束,从而实现了对全球的无缝覆盖,使得不论何时身处何处,都能接收到 <strong>OneWeb</strong> 卫星提供的无线信号。由于低轨道卫星的运动速度非常快,大概在 7km/s 水平,所以用户其实是在不断地更换通讯的卫星,通过波束的多重覆盖,可以使用户感觉不到这种“漫游”,保证通讯等质量。说是这么说,效果还要拭目以待,全波束覆盖并不能彻底解决跨波束的漫游切换(hangover)问题。跨波束跨卫星的切换对于卫星来说由于其相对地面运动速度较大,终端与节点在三维空间中的随机与可预测运动轨迹与相对速度的快速变化将导致三维角速度快速变化和多普勒频移造成链路捕获与跟踪的困难,需要通过接入控制进行链路适配与切换控制,支持其链路层协议的识别,切换、链路调制。并采用类似于移动 IP 的方法进行移动性管理。此外,<strong>OneWeb</strong> 官方声称通过 <code>Progressive Pitch</code> 技术能逐步改变 LEO 卫星信号发射的方向和电平值,因而能有效消除对 GEO 卫星的干扰。然而,事实的结果是,GEO 的影响还是很难避免的,需要 GEO 的卫星降低发生功率,所以还有很多需要协调的事情。</p><p><img src="/images/LEOComm/Oneweb-con5.png" alt="OneWeb 波束覆盖示意"></p><center> 图 12: OneWeb 波束覆盖示意 </center><p>2). <strong>理智的运营策略:OneWeb</strong> 并没有像铱星一样提供小型化终端的解决方案,直接为用户提供移动连接,而是与网络运营商合作,通过社区进行网络服务的提供,这种模式成为 <strong>B2B</strong> 通讯服务。也就是说,<strong>OneWeb</strong> 是对现有的网络运营商提供在空间覆盖上经济可行的一套解决方案,由于其定位准确所以很顺利就拿到了 5 亿美元前期投资。</p><p><img src="/images/LEOComm/Oneweb-con6.png" alt="OneWeb B2B 通讯服务"></p><center> 图 13: OneWeb B2B 通讯服务 </center><p><strong>OneWeb</strong> 主要的应用场景包括:a) 应急网络连接,全球通讯保障;b) 高空高速低延迟宽带网络;c) 通过车载终端提供 200 米覆盖的 LTE 网络; d) 偏远地区家庭,学校固定网络,解决了光纤成本过高的问题;e) 乡间无线网络运营。</p><p><img src="/images/LEOComm/Oneweb-con7.png" alt="应急网络连接,全球通讯保障"></p><center> 图 14: 应急网络连接,全球通讯保障 </center><p><img src="/images/LEOComm/Oneweb-con8.png" alt="高空高速低延迟宽带网络"></p><center> 图 15: 高空高速低延迟宽带网络 </center><p><img src="/images/LEOComm/Oneweb-con9.png" alt="通过车载终端提供 200 米覆盖的 LTE 网络"></p><center> 图 16: 通过车载终端提供 200 米覆盖的 LTE 网络 </center><p><img src="/images/LEOComm/Oneweb-con10.png" alt="偏远地区家庭,学校固定网络,解决了光纤成本过高的问题"></p><center> 图 17: 偏远地区家庭,学校固定网络,解决了光纤成本过高的问题 </center><p><img src="/images/LEOComm/Oneweb-con11.png" alt="乡间无线网络运营"></p><center> 图 18: 乡间无线网络运营 </center><p>3). <strong>卫星大规模生产发射的革命性举措:OneWeb</strong> 卫星将精简设计的理念发挥到了极致,但是面对后续需要每天生产 3~5 颗卫星,每周生产 20 颗卫星的巨大产能要求,在航天界还是前所未有的。很多卫星甚至可能在生产出来的当天就被发射升空。如今 <strong>OneWeb</strong> 最大的合作方 Airbus,在图卢兹的工厂已经动工,首批 6 颗试验星以完成研制,即将发射升空。同时研制高度自动化的机器人生产线单元,以及利用人工智能实现对生产流程的优化。</p><p><img src="/images/LEOComm/Oneweb-con13.png" alt="Toulouse 与 Florida 工厂关系示意图"></p><center> 图 19: 图卢兹与佛罗里达工厂关系示意图 </center><p>同时在佛罗里达的卫星工厂实施计划也提上了日程,并与佛州达成了协议。工厂面积(包括生产区、检测区、装配区等)占地约 14 亩,将来的 900 颗卫星就将在这里生产。由于生产流程高度自动化,只需要招募 250 名左右的技术人员。</p><p><img src="/images/LEOComm/Oneweb-con14.png" alt="佛罗里达工厂示意图"></p><center> 图 20: 佛罗里达工厂示意图 </center><p>4). <strong>巨大的实施风险</strong></p><p><img src="/images/LEOComm/Oneweb-con15.jpg" alt="航天是高风险行业"></p><center> 图 21: 航天是高风险行业 </center><ul><li><strong>发射风险:</strong> 虽然商业航天现在异常繁荣,但是航天毕竟不是过家家,很多繁杂的流程看起来虽然耗费人力物力,但也是为了保证成功率与安全性。</li><li><strong>生产风险:OneWeb</strong> 签约了多家发射公司,而且卫星制造时间短,测试流程简单,所以埋下了很大的安全隐患。至今并没有了解到他们具体的卫星生产流程,这么短的研制周期,必然会带来很高的风险。而且这么短的时间生产如此之多卫星本身就是一件非常困难多事情,如果成功就是里程碑意义的事件。</li><li><strong>部署与碰撞规避风险:OneWeb</strong> 卫星首先被发射到 500km 停泊轨道,从 500km 使用电推进进入 1200km 工作轨道。期间电推进系统将持续工作很长一段时间,对其整体可靠性是极大的挑战。此外,在 500km 到 1200km 之间分布着大量的 LEO 卫星和空间碎片,这必将大大增加空间撞击事件发生的概率,造成双方巨大的损失以及大量二次碎片的产生。且星座的构型决定了 720 颗卫星在两极上方过于密集,相相邻卫星相对相位控制范围只有 ±0.25°,若不进行频繁的相位保持控制,极易发生碰撞。</li><li><strong>商业风险:O3b</strong> 提供的网络填补性很明显,所以准确的定位使得该项目很成功,然而 <strong>OneWeb</strong> 其实存在要么运营成本过高、要么用户有限的问题。其巨大的规模必然容易和地面网络形成竞争关系,这样就有可能因为成本或用户体验而败下阵来。</li></ul><h4 id="2-2-3-OneWeb-总结"><a href="#2-2-3-OneWeb-总结" class="headerlink" title="2.2.3 OneWeb 总结"></a>2.2.3 OneWeb 总结</h4><hr><p><strong>OneWeb</strong> 是一个让人心潮澎湃的伟大工程,同时它开创一种卫星全新的生产模式与运营理念。然而,其庞大的星座规模也存在巨大的商业风险。</p><p><strong>OneWeb</strong> 在 2015 年对单星造价的期望值是 50 万美元,而近期将单星提高至 100 万美元,从成立起至今公司 CEO 已经换了 3 任,第四任 CEO Adrian Steckel 也将于今年 9 月走马上任。目前,公司虽然获得软银、空客等多家金融巨头的巨额投资,但由于单星制造成本比预估翻倍,资金已出现巨大缺口,且公司后续的融资进展并不明晰,原计划的首发时间不断跳票,这使得近期外界对这家公司是否最终能完成星座组网、提供全球实时通信网有或多或少的质疑。但公司创始人 Greg Wyler 表示,OneWeb 卫星功能强大,有很多内置冗余和弹性设计,安全性可达到电信运营商应用级别,至于成本是 50 万美元还是 100 万美元,并不重要。</p><p>据最新消息,<strong>OneWeb</strong> 首批 6 颗卫星(<strong>F6</strong>)已于北京时间 2019 年 2 月 28 日在法属圭亚那的库鲁航天中心采用联盟号运载火箭(<strong>Soyuz ST-B/Fregat-MT</strong>)成功发射至高度约 1200km、倾角约 87.8° 的近地轨道上。那么这个被国内外媒体誉为 <strong>看起来最靠谱的空间互联网创业公司</strong> 最终是否会实现其 <strong>万物一网互联</strong> 的宏伟目标,让我们拭目以待。</p><h3 id="2-3-StarLink"><a href="#2-3-StarLink" class="headerlink" title="2.3 StarLink"></a>2.3 StarLink</h3><hr><p><img src="/images/LEOComm/starlink-logo.jpg" alt="StarLink"></p><center> 图 22: StarLink </center><h4 id="2-3-1-StarLink-简介"><a href="#2-3-1-StarLink-简介" class="headerlink" title="2.3.1 StarLink 简介"></a>2.3.1 StarLink 简介</h4><hr><p>除了有殖民火星的远大梦想以外,<strong>Elon Musk</strong> 的 <strong>SpaceX</strong> 还有一个似乎更加实际的目标,从 2019 年开始运营一个由上千颗低轨卫星组成的宽带互联网星座。2016 年初,<strong>SpaceX</strong> 负责卫星政府事务的副总裁 Patricia Cooper 在出席美国参议院商业、科学与技术委员会听证时表示,公司将利用自己的猎鹰 9 号可回收火箭,在 2019 年到 2024 年的 6 年时间内分别将 4425 颗卫星送到轨道,为全球客户提供高速宽带互联网服务。</p><p>2016 年 11 月 15 日 <strong>SpaceX</strong> 向美国联邦通讯委员会(FCC)提交了一份申请,计划发射共计 4425 颗通信卫星,并且准备在华盛顿州雷蒙德对卫星通信系统展开地面测试。根据 <strong>SpaceX</strong> 提交给 FCC 的这份申请,<strong>SpaceX</strong> 的卫星网络将被定名为 <code>The SpaceX non-geostationary orbit (“NGSO”) satellite system (the “SpaceX System”)</code>。根据最新的消息,美国专利商标局的申请文件披露了 <strong>SpaceX</strong> 正式递交了卫星通讯网络的商标申请 <strong>“Starlink”</strong>。</p><p><img src="/images/LEOComm/starlink-plane.jpg" alt="StarLink 详细计划"></p><center> 图 23: StarLink 计划书 </center><p><img src="/images/LEOComm/starlink-FCC.jpg" alt="StarLink 商标申请"></p><center> 图 24: StarLink 商标申请 </center><p>目前围绕地球运行的现役卫星共有 1400 余颗,还有 2600 多颗卫星已经不再工作,只是漂浮在太空之中,加上这部分已经退役的卫星,人类已发射的卫星总数约为 4000 多颗。也就是说,<strong>SpaceX</strong> 计划发射的通信卫星数量将超过人类已发射卫星总数。</p><h4 id="2-3-2-StarLink-星座构型"><a href="#2-3-2-StarLink-星座构型" class="headerlink" title="2.3.2 StarLink 星座构型"></a>2.3.2 StarLink 星座构型</h4><hr><p>目前,<strong>StarLink</strong> 的建设计划分为两步,首先向 1150km 轨道高度发射 1600 颗卫星,然后再发射 2825 颗卫星并将它们分别安置在 1110km、1130km、1275km 和 1325km 这四个轨道高度上。第一步发射的 1600 颗卫星轨道倾角为 53°,分布于 32 个轨道面,每个轨道部署50 颗卫星。第二部发射的 2825 颗卫星,其中 1600 颗的轨道高度为 1110km,轨道倾角 53.8°,分布于 32 个轨道,每个轨道部署 50 颗卫星;其中 400 颗的轨道高度为 1130km,轨道倾角 74°,分布于 8 个轨道,每个轨道部署 50 颗卫星;其中 375 颗的轨道高度为 1275km,轨道倾角 81°,分布于 5 个轨道,每个轨道部署 75 颗卫星;剩余 450 颗的轨道高度为 1325km,轨道倾角 70°,分布于 6 个轨道,每个轨道部署 75 颗卫星。</p><center> 表 2: StarLink 星座构型参数 </center><p><img src="/images/LEOComm/starlink_con.jpg" alt="StarLink 星座组成"></p><p><img src="/images/LEOComm/starlink_con1.png" alt="StarLink 星座三维构型(1600 颗)"></p><center> 图 25: StarLink 星座三维构型(1600 颗) </center><p><img src="/images/LEOComm/starlink_con2.png" alt="StarLink 星座三维构型(4425 颗)"></p><center> 图 26: StarLink 星座三维构型(4425 颗) </center><p>按照 1150km 的轨道高度计算,每一颗卫星大约可覆盖半径为 1060km 的区域,覆盖面积大约为 350 万平方公里。</p><p><img src="/images/LEOComm/starlink_beams.jpg" alt="StarLink Ku 频段波束覆盖示意图"></p><center> 图 27: StarLink Ku 频段波束覆盖示意图 </center><h4 id="2-3-3-StarLink-卫星配置"><a href="#2-3-3-StarLink-卫星配置" class="headerlink" title="2.3.3 StarLink 卫星配置"></a>2.3.3 StarLink 卫星配置</h4><hr><p><strong>SpaceX</strong> 计划发射的 <strong>StarLink</strong> 通信卫星重量约为 386kg,发射包络 4m × 1.8m × 1.2m,相当于一辆迷你 Cooper 汽车。每颗卫星配备两块太阳能电池阵,每块的面积为 12 <script type="math/tex">m^2</script> 。</p><center> 表 3: StarLink 卫星基本配置 </center><p><img src="/images/LEOComm/starlink_sat.jpg" alt="StarLink 卫星基本配置"></p><h4 id="2-3-4-StarLink-系统特性"><a href="#2-3-4-StarLink-系统特性" class="headerlink" title="2.3.4 StarLink 系统特性"></a>2.3.4 StarLink 系统特性</h4><hr><p><strong>SpaceX</strong> 的卫星系统将主要被用于为全球个人用户、商业用户、机构用户、政府和专业用户提供各种宽带和通讯服务。<strong>SpaceX</strong> 初期部署 1600 颗卫星上天后,就能提供覆盖全球的宽带服务。一旦完成最终部署(Final Deployment),系统就能为全球消费者和商业用户提供高带宽(最高每用户 1Gbps)、低延时的宽带服务。</p><ul><li><strong>高速度:</strong>为全球每一个用户提供 1Gbps 的带宽。据 Akamai 发布的《互联网状态》报告称,截至 2015 年底,全球互联网平均速度为每用户 5.1Mbps,只有 <strong>SpaceX</strong> 目标的 1/200,现在大多数网速较高的互联网服务的网速都是通过地面光缆和光纤连接实现的。</li><li><strong>高容量:SpaceX</strong>卫星系统中的每一颗卫星能够为用户们提供的下行容量总和在 17Gbps ~ 23Gbps 之间,具体数值取决于用户终端配置。以平均值 20Gbps 来计算,首期部署(Initial Deployment)的 160 0颗卫星将能够提供 32Tbps 的总容量。整个系统的部署时间长达数年,<strong>SpaceX</strong> 将在部署过程中定期改善和升级卫星,有可能进一步提升单颗卫星和整个卫星系统的总容量。</li><li><strong>高适应性</strong>:整个系统可利用相控阵技术来动态控制资源池,专注于需要容量的用户。卫星之间以激光互连,这样便于在轨道层面灵活规划数据流。而且,卫星集群可以保证频谱能够被不同卫星更高效地再利用,从而增强整个系统的灵活性、容量和牢固性。</li><li><strong>宽带服务</strong>:系统可以提供最高容量达每用户 1Gbps 的宽带服务。由于系统使用的是低轨道卫星,因此可以将延时控制在 25ms 到 35ms 之间。</li><li><strong>全球覆盖</strong>:首批 1600 颗卫星部署完成后,系统就能为美国和全球提供宽带连网服务;整个系统全部部署完成后,系统就可以进一步增加容量并覆盖赤道和两极,达到真正的全球覆盖。在申请文件附带的技术信息中,<strong>SpaceX</strong> 公司表示,将利用 1600 颗卫星开始商业宽带服务,在全球的覆盖范围是北纬 15 度到 60 度,南纬 15 度到 60 度。阿拉斯加的一些地区将被去除在外,因为那里需要 FCC 临时授权。最终,该网络的卫星数量将增长到 4425 颗,传输频段在 Ku 和 Ka 之间。</li></ul><p><img src="/images/LEOComm/starlink-RF1.jpg" alt="StarLink 频谱范围"></p><center> 图 28: StarLink 频率范围 </center><p><img src="/images/LEOComm/starlink-RF2.jpg" alt="StarLink 频谱范围"></p><center> 图 29: StarLink Ka/Ku 波束频率范围 </center><ul><li><strong>低成本</strong>:<strong>SpaceX</strong> 在设计这个系统时考虑了成本效率和可靠性。从设计和制造位于太空和地面的各种设备,到利用 <strong>SpaceX</strong> 的发射服务来发射卫星和部署整个系统,到部署用户终端以及最终用户的收费标准,<strong>SpaceX</strong> 都考虑到了成本的因素和服务的可靠性。</li><li><strong>易用性</strong>:<strong>SpaceX</strong> 采用的相控阵用户天线设计对用户所用终端的要求很低,这些终端很容易安装在墙面或屋顶,操作也很简单。这些卫星可以运行 5 到 7 年的时间,然后会在退役后的一年内迅速离轨。</li></ul><h4 id="2-3-5-StarLink-总结"><a href="#2-3-5-StarLink-总结" class="headerlink" title="2.3.5 StarLink 总结"></a>2.3.5 StarLink 总结</h4><hr><p><strong>Elon Musk</strong> 的故事大家几乎耳熟能详。一个横跨互联网(<strong>ZIP2</strong> 和 <strong>PayPal</strong>)、电动汽车(特斯拉)、航天科技(<strong>SpaceX</strong>)、太阳能(<strong>SolarCity</strong>)等不同行业且都发展得风生水起的商业奇才。但规模比 <strong>OneWeb</strong> 更大的 <strong>StarLink</strong>,除了在运载方面(自家的,便宜,风险可控性也相对较好)具有一定优势之外,其融资、频率资源、卫星制造、服务营销、风险抗压等方面都不如 <strong>OneWeb</strong>。尤其是在融资方面,目前尚无外界直接投资的消息,资金大都来自 2016 年起 <strong>SpaceX</strong> 的盈利积累。</p><p>不过,<strong>Elon Musk</strong> 是一个颠覆传统规则的 “怪才”,且善于利用新事物进行造势,而最为让人叹为观止的是他强大的执行能力。早在 2015 年时,<strong>SpaceX</strong> 就开始了 <strong>StarLink</strong> 相关的测试项目,并于 2018 年 3 月 获得 FCC 关于发射 4425 颗卫星的批准,2018 年 11 月 15 日又新获批了第二批共 7518 颗卫星的发射计划。至此,<strong>Starlink</strong> 星座的规划卫星总数达到了惊人的 11943 颗。</p><p>目前,<strong>SpaceX</strong> 正在美国、波多黎各和美属维尔京群岛等国家和地区寻求运营批准,预计在 2019 年年底之前获得运营授权。如果获得批准,<strong>SpaceX</strong> 将在 2020 年部署地球站,逐步开展星座的大规模建设和服务运营。</p><h3 id="2-4-鸿雁星座"><a href="#2-4-鸿雁星座" class="headerlink" title="2.4 鸿雁星座"></a>2.4 鸿雁星座</h3><hr><h4 id="2-4-1-鸿雁星座简介"><a href="#2-4-1-鸿雁星座简介" class="headerlink" title="2.4.1 鸿雁星座简介"></a>2.4.1 鸿雁星座简介</h4><hr><p><strong>鸿雁星座</strong> 为国内首套全球低轨卫星通信系统,该系统包含一个移动通信星座和一个宽带通信星座,其中移动通信星座将由数十颗窄带卫星组成,宽带通信星座将由数百颗宽带星组成,并辅以全球数据业务处理中心。鸿雁星座系统将实现六方面应用:移动通信、宽带互联网接入、物联网接入、热点信息推送、导航增强、航空航海监视,系统建成后可以在全球范围内实现宽带和窄带相结合的移动通信,实现地球上任意地点的人与人、物与物信息互联。</p><p>鸿雁星座的建设分为两个阶段,一期工程由 60 余颗骨干卫星构成,优先提供全球移动通信业务和重点地区的宽带互联网业务;二期拓展为 300 余颗补网卫星,将宽带业务也拓展至全球,<a href="http://www.sasac.gov.cn/n2588025/n2641616/c9820123/content.html" target="_blank" rel="noopener">以服务200万移动用户、20万宽带用户及近1000万的物联网用户</a>,并在导航、航空、航海等领域提供综合服务。即首期的 60 余颗卫星组成的星座被称作“移动通信星座”,优先满足打电话的功能,更像是美国的“铱星系统”。二期完成后,会增加一个“宽带通信星座”解决上网功能。整个星座计划在 2024 年后完成。</p><p><img src="/images/LEOComm/hongyan_con.jpeg" alt="鸿雁星座宣传海报"></p><center> 图 30: 鸿雁星座宣传海报 - 沟通万物,永不失联 </center><h4 id="2-4-2-鸿雁星座系统功能"><a href="#2-4-2-鸿雁星座系统功能" class="headerlink" title="2.4.2 鸿雁星座系统功能"></a>2.4.2 鸿雁星座系统功能</h4><hr><p>鸿雁移动通信星座将集成多项卫星应用功能,系统卫星将由中国空间技术研究院通信事业部研制。其卫星数据采集功能,可实现大地域信息收集,满足海洋、气象、交通、环保、地质、防灾减灾等领域的监测数据信息传送需求,并可为大型能源企业、工程企业等提供全球资产状态监管、人员定位、应急救援和通信服务。其卫星数据交换功能,可提供全球范围内双向、实时数据传输,以及短报文、图片、音频、视频等多媒体数据服务。</p><p><img src="/images/LEOComm/hongyan_mobile.jpg" alt="十二届珠海航展展示的鸿雁移动通信卫星模型"></p><center> 图 31: 十二届珠海航展展示的鸿雁移动通信卫星模型 </center><p>该系统将搭载船舶自动识别系统,可在全球范围内接收船舶发送的信息,全面掌握船舶的航行状态、位置、航向等,实现对远海海域航行船舶的监控及渔政管理;还将搭载广播式自动相关监视载荷,可从外层空间对全球航空目标进行位置跟踪、监视及物流调控,增强飞行安全性及突发事故搜救能力。</p><p><img src="/images/LEOComm/hongyan_application.jpg" alt="鸿雁星座应用场景"></p><center> 图 32: 鸿雁星座应用场景 </center><p>此外,该系统将具备移动广播功能,能向全球覆盖区域进行音频、视频、图像等信息广播发送,将是实现公共及定制信息一点对多点发送的有效手段;其导航增强功能可为北斗导航卫星增强系统提供信息播发通道,提高北斗导航卫星定位精度。</p><h4 id="2-4-3-鸿雁星座研发历程"><a href="#2-4-3-鸿雁星座研发历程" class="headerlink" title="2.4.3 鸿雁星座研发历程"></a>2.4.3 鸿雁星座研发历程</h4><hr><ul><li><a href="http://scitech.people.com.cn/n1/2016/1103/c1057-28830276.html" target="_blank" rel="noopener">2016 年 11 月 01 日</a>,中国航天科技集团公司在十一届珠海航展上表示,计划 2020 年建成 “鸿雁卫星星座通信系统”。 </li><li><a href="http://www.xinhuanet.com/politics/2018-07/12/c_129912522.htm?baike" target="_blank" rel="noopener">2018 年 07 月 12 日</a>,在长沙召开的航空航天航海装备论坛上,中国航天科技集团公司表示,计划在 2018 年下半年发射星座首颗星,预计于 2023 年建设骨干星座系统。</li><li><a href="http://www.spacechina.com/n25/n150/n284/n300/c2402963/content.html" target="_blank" rel="noopener">2018 年 10 月 24 日</a>,中国航天科技集团注册成立控股公司 “东方红卫星移动通信有限公司”,计划投资 200 亿 建设与运营鸿雁星座。公司注册资本 20 亿元,由中国空间技术研究院副院长王海涛先生任公司法人兼董事长。公司有 11 位股东,其中大股东为中国航天科技集团有限公司,占股 15%;其余 10 位股东分别为国创投资引导基金(有限合伙),占股 12.5%;中国电信集团有限公司,占股 12.5%;中国空间技术研究院,占股 12.5%;国新国同(浙江)投资基金合伙企业(有限合伙),占股 10%;南京熊猫汉达科技有限公司,占股 7.5%;中国电子进出口有限公司,占股 2.5%;中国电子信息产业集团有限公司,占股 2.5%;中国卫通集团股份有限公司;中国长城工业集团有限公司;国华军民融合产业发展基金(有限合伙)。公司总部坐落于美丽的山城重庆,规划建筑面积 60 万平方米,包括公司总部、运营中心、产业基地。公司还将在国内设立北京研发中心及 6 个区域分部,在国外设立海外运营中心,构建覆盖全球的、完整的产业链条与生态圈。</li><li><a href="http://www.cnsa.gov.cn/n6758823/n6758838/c6804525/content.html" target="_blank" rel="noopener">2018 年 11 月 30 日</a>,东方红卫星移动通信有限公司揭牌仪式在重庆两江新区举行,该公司将负责建设与运营全球低轨卫星移动通信与空间互联网系统,提供各种终端产品与服务,构建海、陆、空、天一体化新型天地一体化信息网络,开展面向全球的智能终端通信、物联网、移动广播、导航增强、航空航海监视、宽带互联网接入等增值服务。</li><li><a href="https://www.thepaper.cn/newsDetail_forward_2791465" target="_blank" rel="noopener">2018 年 12 月 29 日</a>,“鸿雁”星座首发星 <code>重庆号</code> 在我国酒泉卫星发射中心由长征二号丁运载火箭发射成功并进入预定轨道,并顺利开展了载荷星地通信试验。首发星的成功发射标志着“鸿雁”星座的建设全面启动。</li></ul><h4 id="2-4-4-鸿雁星座总结"><a href="#2-4-4-鸿雁星座总结" class="headerlink" title="2.4.4 鸿雁星座总结"></a>2.4.4 鸿雁星座总结</h4><hr><p>鸿雁星座作为我国在航天领域的又一重大工程,将承载起我国首套全球低轨卫星通信系统的历史使命。国家队的大手笔投资为项目提供了资金、政策和技术支撑,<code>沟通万物,永不失联</code> 在神州大地上即将成真。</p><h3 id="2-5-虹云工程"><a href="#2-5-虹云工程" class="headerlink" title="2.5 虹云工程"></a>2.5 虹云工程</h3><hr><h4 id="2-5-1-虹云工程简介"><a href="#2-5-1-虹云工程简介" class="headerlink" title="2.5.1 虹云工程简介"></a>2.5.1 虹云工程简介</h4><hr><p><strong>虹云工程</strong> 是中国航天科工集团五大商业航天工程之一,2018 年 3 月 4 日,全国政协委员、中国航天科工集团二院院长张忠阳表示,预计在 2018 年底前发射并开展低轨宽带通信的演示验证及应用示范。2022 年完成星座部署后,虹云工程将可以提供全球无缝覆盖的宽带移动通信服务,为各类用户构建“通导遥”一体化的综合信息平台。</p><h4 id="2-5-2-虹云工程计划"><a href="#2-5-2-虹云工程计划" class="headerlink" title="2.5.2 虹云工程计划"></a>2.5.2 虹云工程计划</h4><hr><p>虹云工程计划发射 156 颗卫星组成一个星载宽带全球移动互联网络,每颗卫星重约 500kg,设计运行在 1000km 的地球轨道上。卫星采用 Ka 波段通信,每颗卫星有 4Gb 带宽的吞吐量。</p><p>整个虹云工程被分解为 “1+4+156” 三步。第一步计划在 2018 年前,发射第一颗技术验证星,实现单星关键技术验证;第二步到“十三五”末,发射 4 颗业务试验星,组建一个小星座,让用户进行初步业务体验;第三步到“十四五”末,实现全部 156 颗卫星组网运行,完成业务星座构建。</p><p>目前,负责项目建设航天科工二院已经向国际电联报备了将要使用的轨道与频段。与鸿雁星座不同的是,虹云工程优先向全球用户提供“宽带互联网”服务,并计划于 2022 年前后将初步建成。系统以互联网接入为基础功能,具备通信、导航和遥感一体化、全球覆盖、系统自主可控的特点,以其高速率、低延时等特征,为全球用户提供通信、导航增强和遥感信息一体化综合服务。该系统更接近于美国的 <strong>StarLink</strong>,但是初期卫星数量不如 <strong>SpaceX</strong> 的多。</p><h4 id="2-5-3-虹云工程进展"><a href="#2-5-3-虹云工程进展" class="headerlink" title="2.5.3 虹云工程进展"></a>2.5.3 虹云工程进展</h4><hr><ul><li><a href="https://baike.baidu.com/redirect/dc0f_qk-1lTKFdWijKnI2Nzpikhu6UyoXgAQfZYjuoV3lRL6sr_R2o0Kas12Zc9In1Cg31CU5sOCnXfq9L-tbkk8iR99itvTVABu6zR5" target="_blank" rel="noopener">2018 年 03 月 04 日</a>,全国政协委员、中国航天科工集团二院院长张忠阳表示,虹云工程将在 2018 年实施技术验证星的发射,卫星已经进入正样研制阶段。预计 2022 年底具备全面运营条件,同年完成星座部署。</li><li><a href="https://baike.baidu.com/redirect/c4f9btaz0nrcza4gZzFaRJm2U-KS3tfqpVE1fojmebqMtXp8P_rPVwVQ7MlJ72PmJV8Qjg5GUGVe9tl1PbtwE-gfp1T3HfkN9PvFw4159L2oP85kfmnZKstcEw" target="_blank" rel="noopener">2018 年 09 月 26 日</a>,从中国航天科工集团有限公司第二研究院获悉,“虹云工程”技术验证星将在 2018 年底发射,并总计将发射 156 颗卫星;卫星将在距离地面约 1000km 的轨道上组网运行,构建出星载宽带全球移动互联网络。</li><li><a href="https://baike.baidu.com/redirect/0e3eOAJpRUGRBT6sMA9TVGU5fKLOLCG4tH0MBOWf4QWxOhrWvW5CNj1ucuVW2a-BcLnZ_G_ZHkhgV8yRvl4PVNUJmeacCrKhhDVzRCqBCM8M_z4gTbIv2B2UVdxINw" target="_blank" rel="noopener">2018 年 12 月 22 日</a>,中国在酒泉卫星发射中心用长征十一号运载火箭,成功将虹云工程技术验证卫星发射升空,卫星进入预定轨道。</li></ul><h4 id="2-5-4-虹云工程总结"><a href="#2-5-4-虹云工程总结" class="headerlink" title="2.5.4 虹云工程总结"></a>2.5.4 虹云工程总结</h4><hr><p>中国航天科工集团的 <code>5 朵云</code> 作为其在新时代谋求转型的重要战略工程,不惜与航天科技集团展开直接竞争。然而,其在卫星制造和应用行业的技术和资源积累却远不及中国航天科技集团。眼下虽然虹云工程的首发星抢了头彩,但若想在后续发展中继续领先,势必要拿出家底、使出看家本领。</p><hr><h2 id="3-低轨卫星通信系统产业展望"><a href="#3-低轨卫星通信系统产业展望" class="headerlink" title="3 低轨卫星通信系统产业展望"></a>3 低轨卫星通信系统产业展望</h2><hr><h3 id="3-1-机遇与挑战"><a href="#3-1-机遇与挑战" class="headerlink" title="3.1 机遇与挑战"></a>3.1 机遇与挑战</h3><hr><h4 id="3-1-1-机遇"><a href="#3-1-1-机遇" class="headerlink" title="3.1.1 机遇"></a>3.1.1 机遇</h4><hr><ul><li><strong>市场优势</strong>:截至 2017 年 6 月,全球互联网普及率为 51.7%,意味着全球仍有一半的人口未实现互联网连接。这个庞大的数字对于任何一家追求未来发展的卫星通信公司来说都是极具诱惑力的,<a href="https://www.iridium.com/" target="_blank" rel="noopener">Iridium</a>、<a href="https://www.orbcomm.com/" target="_blank" rel="noopener">ORBCOMM</a>、<a href="http://www.oneweb.world/" target="_blank" rel="noopener">Oneweb</a>、<a href="https://www.spacex.com/" target="_blank" rel="noopener">SpaceX</a>、<a href="http://www.spacechina.com/" target="_blank" rel="noopener">中国航天集团</a>、 <a href="http://www.casic.com.cn/" target="_blank" rel="noopener">中国航天科工集团</a> 等行业 <strong>独角兽</strong> 已经有了各自的计划和试验项目。目前,在轨运行的卫星中商业通信卫星占据了 38% 的比例(2014 年数据),通信卫星是卫星应用产业当子无愧的主流。收入方面,卫星电视在 2014 年的收入近 950 亿美元,而卫星音频是 40 亿美元,卫星宽带只有 20 亿美元(2014 年数据)。可见,音频和宽带卫星应用领域存在巨大的市场缺口。</li></ul><p><img src="/images/LEOComm/LEOComm_percent.jpg" alt="通信卫星市场份额"></p><center> 图 33: 通信卫星市场份额(2014 年) </center><p><img src="/images/LEOComm/LEOComm_fund.jpg" alt="通信卫星市场份额"></p><center> 图 33: 通信卫星市场收入(2014 年) </center><ul><li><strong>技术优势</strong>:相对于地面通信系统,低轨卫星通信系统易于快速实现打发范围的全球覆盖,适合低人口密度、有限业务量的国家或地区。相对于高轨卫星通信系统,低轨卫星通信系统链路传播损耗小,更有利于系统为手持终端用户提供服务;传输延时小,实时性较好;采用极轨道或大倾角轨道时可为高纬度地区提供服务;可利用多普勒频移进行定位,实现导航增强功能;星座能够对用户提供多重覆盖,具备冗余。</li><li><strong>行业优势</strong>:随着世界经济全球化、快速化发展,中国的科技实力逐年增强,并紧跟国际潮流。未来,中国将大力发展物联网、人工智能以及智慧城市等高新科技,这些都离不开互联网的支撑。所以,低轨卫星通信技术潜在用户基数大(<strong>用户潜力</strong>),建设发展低轨通信系统将孵化更多增值产业(<strong>产业潜力</strong>),且新事物将推动就业并获得国家及地方政府的支持(<strong>资本潜力</strong>)。</li></ul><h4 id="3-1-2-挑战"><a href="#3-1-2-挑战" class="headerlink" title="3.1.2 挑战"></a>3.1.2 挑战</h4><hr><p>机遇总是与挑战并存,低轨卫星通信系统与地面通信系统和高轨通信系统都存在相互竞争的关系,尤其是地面移动通信系统即将迎来 5G 时代,低轨卫星通信系统在 5G 覆盖区域的用户体验必然处于下风。此外,低轨卫星通信系统还存在规模化建设、长期稳定运营和核心技术上的诸多挑战:</p><ul><li><strong>规模化建设</strong>:低轨卫星通信系统工程宏大,耗时少则数年,多则数十年,且必须建设完整才能提供实时服务,故必然存在空间段和地面段开发及建设滞后的风险。</li><li><strong>长期稳定运营</strong>:采用传统运营技术将导致低轨通信系统运营任务繁重,必须进行技术创新,简化系统运营流程,降低星座稳定运营成本。</li><li><strong>核心技术</strong>:必须有效解决 <strong>星间链路</strong>、<strong>通信服务连续性</strong>、<strong>抗衰落通信</strong>、<strong>网络管理与控制</strong>、<strong>空间段与地面段匹配与优化</strong> 等核心技术。</li></ul><h3 id="3-2-核心资源与技术"><a href="#3-2-核心资源与技术" class="headerlink" title="3.2 核心资源与技术"></a>3.2 核心资源与技术</h3><hr><p>发展低轨卫星通信系统的核心资源是:<strong>资金</strong>、<strong>用户</strong> 和 <strong>管理</strong>。有了充足的资金,才具备开展大规模星座建设的能力;具备大量用户,系统才会实现盈利,使得项目持续发展;而卓越的项目管则理可提高效率,在空间段、地面段和用户段的建设过程中起到事半功倍的效果。</p><p>发展低轨卫星通信系统的核心技术是:<strong>领先的通信技术</strong>、<strong>规模化制造技术</strong>、<strong>星座部署与自动化运维技术</strong> 以及一切可 <strong>切实提高用户服务与体验的附加技术</strong>。领先的通信技术即是在 <a href="https://spacefan.github.io/2019/02/12/LEOComm/#3-1-2-%E6%8C%91%E6%88%98" target="_blank" rel="noopener">3.1.2 小节</a> 中的 <code>核心技术</code> 中提到的诸多技术;规模化制造技术即数十颗、数百颗卫星的批量化研发、生产和制造的技术,在此过程中,需保证卫星产品性能的一致性和稳定性;星座部署与自动化运维技术即空间段建设和智能化运营的相关技术,数百颗卫星的部署和运营已经超出国家测控体系的承载能力,必须进行技术革新。切实提高用户服务与体验的附加技术基本上属于基于以上硬实力建立的软实力,不多加论述。</p><h3 id="3-3-成败之关键"><a href="#3-3-成败之关键" class="headerlink" title="3.3 成败之关键"></a>3.3 成败之关键</h3><hr><p>发展低轨卫星通信系统成败之关键在于找到自己的优势所在,充分挖掘用户需求,利用规模化制造和领先的技术优势降低运营成本,最终实现系统长期稳定运行,持续输出价值。</p><ul><li><strong>技术背景</strong>:纵观国内外低轨卫星通信项目,知名的都出自技术背景强大的传统航天企业,那些以博人眼球和融资为目的,却缺乏技术积淀的项目必将被大浪淘沙。只需看一眼 <strong>Iridium</strong>、<strong>SpaceX</strong>、<strong>OneWeb</strong>、<strong>中国航天科技集团</strong> 以及 <strong>中国航天科工集团</strong> 的技术实力,就知道低轨卫星通信系统真正的玩家需要什么样的实力,才配获得市场和用户的认可。</li><li><strong>资本实力</strong>:低轨卫星通信要实现正常运营服务,卫星规模至少在数十颗以上,宽带星座至少在数百颗量级。如此大规模的星座建设,没有雄厚的资金,连行业的门槛都踏不进去。<strong>OneWeb</strong> 在 2017 年就已经拿到了包括日本软银在内的约 17 亿美元投资,且在 <strong>Starlink</strong> 试验星升空之后,投资人又进一步加大投入,全力助推 <strong>OneWeb</strong> 快速建网。<strong>中国航天科技集团</strong> 更是宣布投资 200 亿元人民币建设 <strong>鸿雁星座</strong>。由此可见,低轨卫星通信的资金门槛让人咋舌。</li><li><strong>频率资源</strong>:在卫星通信领域,由于相近频率上的信号干扰,原则上国际上不允许不同卫星通信系统共用频率,频率因此成为最为宝贵的资源,每一颗通信卫星都需要提前许久预定备案。在导航卫星领域,中国北斗与欧洲伽利略曾经为抢频率而抢发卫星的“斗争”也是近些年的事情。<strong>Iridium NEXT</strong> 已完成空间段建设,频率资源问题早已不再是问题。<strong>OneWeb</strong> 方面, <strong>Greg Wyler</strong> 在离开 <strong>O3b</strong> 创建 <strong>OneWeb</strong> 之时就带走了部分已授权频率资源,加上收购其他公司而获得的频率使用权,手中握有足够的 Ku 波段资源。2017 年,<strong>OneWeb</strong> 又从 ITC/FCC 获批了更加珍惜的 V 波段资源。<strong>Starlink</strong> 早在 2015 年就已经向国际电信联盟(ITU)和美国联邦通信委员会(FCC)申请频率,目前已拿到 Ku/Ka 波段资源。<strong>中国航天科技集团</strong> 与 <strong>中国航天科工集团</strong> 也都在积极申请,随着其各自成功发射首发试运星,将频率资源握在手心也只是时间的问题。</li><li><strong>卫星制造</strong>:传统卫星制造需要经过严格的 <code>设计 -> 装配 -> 集成 -> 测试”</code> 流程,而且发现问题之后还需迭代归零,一颗卫星从设计到出厂短则数月,长则数年,甚至达十几年之久。低轨卫星通信星座星数较多,制造过程必须实现批量化,一来可快速实现空间段建设,再者可大大降低单星成本。目前,<strong>OneWeb</strong> 拿到软银巨量投资后,迅速在佛罗里达建立了一个测试与总装中心,预计每天平均可生产一颗卫星,单星成本可控制在 100 万美元之下。<strong>SpaceX</strong> 仅有一个 30 人左右的小团队负责 <strong>Starlink</strong> 项目,未来计划快速扩充,但总体看来距离量产并将单星成本降至 100~150 万美元还比较遥远。<strong>中国航天科技集团</strong> 也已经在天津建设了 AIT 厂房,服务未来鸿雁星座的批量化制造。</li><li><strong>发射成本</strong>:发射成本在卫星航天产业链中占比较大,是低轨卫星通信系统拦路虎之一。目前,<strong>Iridium NEXT</strong> 全部采用 <strong>SpaceX</strong> 的猎鹰九号火箭发射,单星发射成本在 700 万美元左右;<strong>OneWeb</strong> 采取的方案是“多国联军”,已经签订了 60 多次发射合同,21 次将由俄罗斯联盟火箭完成,39 次将由英国廉价商业航天发射公司维珍银河(总部美国)完成,3 次将由欧洲下一代火箭阿丽亚娜六完成。<strong>Starlink</strong> 必然采用 <strong>SpaceX</strong> 的猎鹰系列火箭进行发射,由于 <strong>SpaceX</strong> 的火箭可回收多次利用,其成本必然秒杀所有竞争对手。</li><li><strong>服务营销</strong>:不管前期建设进行的多么顺利,最终考验低轨卫星通信系统的是营收能力,<strong>Iridium</strong> 就是前车之鉴。目前,<strong>Iridium</strong> 通信公司经过十多年的积累已步入正轨,实现盈利。<strong>OneWeb</strong> 凭借 <strong>O3b</strong> 卫星通讯网络近些年建立过程中的资源积累,在首批卫星发射前就早早布局全球营销。早在 2017 年 2 月,<strong>OneWeb</strong> 就在发布会上公开宣布首批 648 颗卫星的通信能力基本售罄,用户涵盖各个大洲。虽然 <strong>OneWeb</strong> 在初步运营阶段能否实现盈利犹未可知,但它在抢占市场先机方面可谓先拔头筹。<strong>Starlink</strong> 目前还处在“一鸣惊人”的阶段,造了一个爆炸性新闻后震惊世人,但目前尚未与任何通信服务商签订初步合同,还处在营销阶段。此外,国内的两个低轨卫星通信系统也频繁曝出项目进展,为后续发展奠定舆论基础。</li><li><strong>风险抗压</strong>:任何大型的工程都存在诸多方面的风险和内外部压力,尤其是集 <strong>航天技术</strong>、<strong>频率资源</strong>、<strong>空间法律</strong>、<strong>大规模卫星制造与发射部署</strong>、<strong>移动互联网</strong> 等诸多高新技术和国际责任于一身的低轨卫星通信系统。这方面,以国家力量或资本和技术实力雄厚的项目优势明显,也更容易在后续竞争中取得最终主动权。目前,<strong>OneWeb</strong> 背后有日本财团、欧洲制造商/火箭发射商、俄罗斯火箭发射商、英国/美国火箭发射商/投资人/政府保护、几十个已经签订初步服务合同的国家,牢牢绑定了一个大的利益集团,抗风险能力明显较高。<strong>Starlink</strong> 目前是 <strong>SpaceX</strong> 尝试扩展并渴望最终发展为主要盈利点的业务,但在当下它的可回收火箭受到蓝色起源狙击、货运飞船受到俄罗斯进步飞船狙击、客运飞船受到俄罗斯联盟号和波音新一代飞船狙击,可谓压力巨大。如果<strong>Starlink</strong> 后续无法得到足够的外部资金支持,则项目极有可能面对随时停掉的可能性。中国两大航天集团在统治国内 14 亿潜在用户的巨大市场基础之上必然会走向国际市场,资金、技术和抗风险压力比国外商业公司小很多。</li></ul><hr><h2 id="4-总结"><a href="#4-总结" class="headerlink" title="4 总结"></a>4 总结</h2><hr><p>本文阐述了笔者对低轨卫星通信技术的过去和发展现状的一些看法,并从顶层视角对低轨卫星通信产业的未来加以展望。若能为读者提供有效信息,则深感欣慰。文中的信息皆来源于网络及笔者自己对行业的观察,若有不当或错误之处,敬请多多指教、评论。</p><hr><h2 id="5-参考资料"><a href="#5-参考资料" class="headerlink" title="5 参考资料"></a>5 参考资料</h2><hr><ul><li><a href="https://directory.eoportal.org/web/eoportal/satellite-missions/i/iridium-prime" target="_blank" rel="noopener">Iridium PRIME — A Constellation of Hosted Payloads</a></li><li><a href="https://directory.eoportal.org/web/eoportal/satellite-missions/i/iridium-nexthttps://directory.eoportal.org/web/eoportal/satellite-missions/i/iridium-next" target="_blank" rel="noopener">Iridium NEXT (Hosting Payloads on a Communications Constellation)</a></li><li><a href="https://directory.eoportal.org/web/eoportal/satellite-missions/o/oneweb" target="_blank" rel="noopener">OneWeb Minisatellite Constellation for Global Internet Service</a></li><li><a href="http://www.spaceflightfans.cn/51372.html" target="_blank" rel="noopener">一网开始撒网,首批六颗卫星升空</a></li><li><a href="https://zhuanlan.zhihu.com/p/22577458" target="_blank" rel="noopener">看起来最靠谱的空间互联网创业公司-OneWeb</a></li><li><a href="https://mp.weixin.qq.com/s/ezvQKNxeLpnUJQxrEJi_OA" target="_blank" rel="noopener">ORBCOMM天基短报文/物联网系统深度分析</a></li><li><a href="https://baike.baidu.com/redirect/f11eOrLIQcR4mq6zTIfJgN2o1o7oiqewGsSQ0PJ3xkRUkXo3LKoFcvGHXitrsGpIIyAKQTZrBxnC1tMiMhEJLu6XYWFCkiFLLmJQsryheAP7e7JRi6tRAKk98ZVVnMA" target="_blank" rel="noopener">我国将发射“鸿雁”全球卫星通信星座首星</a></li><li><a href="https://baike.baidu.com/redirect/01f2ljU9h2WwnBKmcuEs0B4SyYUNK_o2mSr0vCn13Ah2jTAy-za_q23W5IZ_0OIrrT-DZlrdooe2kZt_5Synamb4t6lCdnf6SdvyZy8P_g" target="_blank" rel="noopener">“鸿雁”首发星发射成功,星座由数百颗低轨通信卫星组成</a></li><li><a href="http://www.spacechina.com/n25/n150/n284/n300/c2402963/content.html" target="_blank" rel="noopener">东方红卫星移动通信有限公司</a></li><li><a href="https://baike.baidu.com/redirect/951bj9N3LYzZUQXWGsQeH8NyCGjpQljBm-c1Boiuhesecp4PHMHcvWF0TJbAZIGJwCKYNs1jUEmiOk-2TkFHKjevjleB8OSmcNGpqkR-IOOgSQn3aR8Okp28" target="_blank" rel="noopener">我国计划2020年建成“鸿雁星座”</a></li><li><a href="https://baike.baidu.com/redirect/dc0f_qk-1lTKFdWijKnI2Nzpikhu6UyoXgAQfZYjuoV3lRL6sr_R2o0Kas12Zc9In1Cg31CU5sOCnXfq9L-tbkk8iR99itvTVABu6zR5" target="_blank" rel="noopener">航天科工虹云工程拆解:156颗卫星如何无差别覆盖全球网络</a></li><li><a href="https://baike.baidu.com/redirect/ebddOY37SducrJ8CZExBSp_qsX0m1NjtxTr-96n71nldOZMbyCB35KCncTUTyacZcdIrD6weBI-aglBl4HswOkGXzBdoXXIsAyjhM41PE-oD16l-NA" target="_blank" rel="noopener">虹云工程2022年成网移动宽带覆盖全球</a></li><li><a href="https://baike.baidu.com/redirect/0e3eOAJpRUGRBT6sMA9TVGU5fKLOLCG4tH0MBOWf4QWxOhrWvW5CNj1ucuVW2a-BcLnZ_G_ZHkhgV8yRvl4PVNUJmeacCrKhhDVzRCqBCM8M_z4gTbIv2B2UVdxINw" target="_blank" rel="noopener">我国首颗低轨宽带通信卫星技术验证星发射成功</a></li><li><a href="https://baike.baidu.com/redirect/a40c5FKh_y7QTcEKdTVMUkXpi5Jme950VNBDjggft66V3ATZcLm56lAUX6ev6EoOxnLqhhRxuPG3Lfw7T6VSzKsMdfEilI5oAWABD-ZZDt91v8swQ113ep5XVaiffWTzkw" target="_blank" rel="noopener">我国成功发射首颗低轨宽带通信技术验证星</a></li><li><a href="http://www.sohu.com/a/225480491_466840" target="_blank" rel="noopener">SpaceX的星链 (Starlink) 能否成功狙击一网 (OneWeb)?</a></li></ul>]]></content>
<categories>
<category> 航天任务 </category>
</categories>
<tags>
<tag> 卫星通信 </tag>
<tag> LEO </tag>
<tag> ORBCOMM </tag>
<tag> Iridium </tag>
<tag> OneWeb </tag>
<tag> GlobalStar </tag>
<tag> Teledesic </tag>
<tag> StarLink </tag>
<tag> SpaceX </tag>
<tag> 鸿雁星座 </tag>
<tag> 虹云工程 </tag>
<tag> 商业航天 </tag>
</tags>
</entry>
<entry>
<title>Orekit 航天动力学库调用方法</title>
<link href="/2019/01/25/orekit_prop/"/>
<url>/2019/01/25/orekit_prop/</url>
<content type="html"><![CDATA[<p><a href="https://www.orekit.org/" target="_blank" rel="noopener">Orekit</a> 是一个基于 <a href="https://www.oracle.com/technetwork/java/index.html" target="_blank" rel="noopener">Java</a> 语言开发的航天动力学库,采用对商业友好的 <a href="http://www.apache.org/licenses/LICENSE-2.0" target="_blank" rel="noopener">Apache 开源许可协议</a>,第一个公开发行版本始于 2003 年。十多年来,<a href="https://www.orekit.org/" target="_blank" rel="noopener">Orekit</a> 一直专注于航天动力学底层算法的实现,包含丰富的航天动力学元素:轨道、时间、参考架、姿态和事件等,以及大量处理这些元素的算法:元素转换、航天器状态预报、卫星姿态指向和事件响应等。</p><a id="more"></a><p><a href="https://www.orekit.org/" target="_blank" rel="noopener">Orekit</a> 在世界各大航天机构及一些科研院所中皆有使用,尤其在欧洲十分流行,诸如 <a href="https://cnes.fr/en" target="_blank" rel="noopener">CNES</a>,<a href="https://www.esa.int/ESA" target="_blank" rel="noopener">ESA</a>,<a href="https://www.nasa.gov/" target="_blank" rel="noopener">NASA</a>,<a href="https://www.sstl.co.uk/" target="_blank" rel="noopener">SSTL</a>,<a href="https://www.sscspace.com/" target="_blank" rel="noopener">SSC</a>,<a href="https://economictimes.indiatimes.com/topic/ISRO" target="_blank" rel="noopener">ISRO</a>,<a href="https://www.eumetsat.int/" target="_blank" rel="noopener">Eumetsat</a>,<a href="https://www.airbus.com/" target="_blank" rel="noopener">Airbus</a>,<a href="https://www.thalesgroup.com/en" target="_blank" rel="noopener">Thales</a>,<a href="www.telespazio.com/">Telespazio</a>,<a href="www.nexeya.com/">Nexeya</a>,<a href="https://www.nrl.navy.mil/" target="_blank" rel="noopener">U.S. Naval Research Laboratory</a>,<a href="https://www.utexas.edu/" target="_blank" rel="noopener">Texas University at Austin</a> 等大型航天机构和科研院所都在使用,通常它作为应用软件的底层代码库,为上层实现提供航天动力学算法支持。</p><p><img src="/images/orekit/orekit.org.png" alt="Orekit 项目首页"></p><center> 图 1: Orekit 项目首页 </center><h2 id="1-获取-Orekit-库"><a href="#1-获取-Orekit-库" class="headerlink" title="1 获取 Orekit 库"></a>1 获取 Orekit 库</h2><hr><p><a href="https://www.orekit.org/" target="_blank" rel="noopener">Orekit</a> 官方网站 <a href="https://www.orekit.org/" target="_blank" rel="noopener">www.orekit.org</a> 提供封装好的 <code>.jar</code> 库文件以及源码,目前最新版为 <code>v9.3</code>(2019 年 2 月 15 日更新),<code>.jar</code> 库文件可直接使用,源码可编译后使用,此处介绍 <code>.jar</code> 库文件的调用。</p><h2 id="2-调用-Orekit-库"><a href="#2-调用-Orekit-库" class="headerlink" title="2 调用 Orekit 库"></a>2 调用 Orekit 库</h2><hr><h3 id="2-1-添加-Orekit-库"><a href="#2-1-添加-Orekit-库" class="headerlink" title="2.1 添加 Orekit 库"></a>2.1 添加 Orekit 库</h3><hr><p>将 <code>orekit-9.2.jar</code> 添加到项目参考库即可调用 <a href="https://www.orekit.org/" target="_blank" rel="noopener">Orekit</a> 中的所有类库,由于 <a href="https://www.orekit.org/" target="_blank" rel="noopener">Orekit</a> 采用 <a href="www.hipparchus.org">Hipparchus</a> 库进行数值运算,所以还需下载并添加该库,方法跟添加 <a href="https://www.orekit.org/" target="_blank" rel="noopener">Orekit</a> 库一样,下载地址为 <a href="www.hipparchus.org">www.hipparchus.org</a>。</p><p><img src="/images/orekit/orekit-fig1.png" alt="添加好的 Orekit 与 Hipparchus 库列表"></p><center> 图 2: 添加好的 Orekit 与 Hipparchus 库列表 </center><h3 id="2-2-添加动力学建模数据"><a href="#2-2-添加动力学建模数据" class="headerlink" title="2.2 添加动力学建模数据"></a>2.2 添加动力学建模数据</h3><hr><p>动力学建模数据包含了 <a href="https://www.orekit.org/" target="_blank" rel="noopener">Orekit</a> 建立动力学模型、进行时间和参考架转换以及星历计算所需要的重要参数,必须在调用 <a href="https://www.orekit.org/" target="_blank" rel="noopener">Orekit</a> 下属类库之前加载,配置代码如下所示。代码中的文件路径根据具体情况修改。<br><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// configure Orekit</span></span><br><span class="line">File home = <span class="keyword">new</span> File(<span class="string">"D:/CodeProjects/eclipse_java/Orekit"</span>);</span><br><span class="line">File orekitData = <span class="keyword">new</span> File(home, <span class="string">"orekit-data"</span>);</span><br><span class="line"><span class="keyword">if</span> (!orekitData.exists()) {</span><br><span class="line">System.err.format(Locale.US, <span class="string">"Failed to find %s folder%n"</span>,</span><br><span class="line">orekitData.getAbsolutePath());</span><br><span class="line">System.err.format(Locale.US, <span class="string">"You need to download %s from the %s page and unzip it in %s for this tutorial to work%n"</span>,</span><br><span class="line"><span class="string">"orekit-data.zip"</span>, <span class="string">"https://www.orekit.org/forge/projects/orekit/files"</span>,</span><br><span class="line">home.getAbsolutePath());</span><br><span class="line">System.exit(<span class="number">1</span>);</span><br><span class="line">}</span><br><span class="line">DataProvidersManager manager = DataProvidersManager.getInstance();</span><br><span class="line">manager.addProvider(<span class="keyword">new</span> DirectoryCrawler(orekitData));</span><br></pre></td></tr></table></figure></p><h2 id="3-轨道预报"><a href="#3-轨道预报" class="headerlink" title="3 轨道预报"></a>3 轨道预报</h2><hr><p>作为航天动力学库,<a href="https://www.orekit.org/" target="_blank" rel="noopener">Orekit</a> 最基本的功能性算法就是对航天器状态矢量进行预报,该功能由 <code>org.orekit.propagation</code> 包提供。<a href="https://www.orekit.org/" target="_blank" rel="noopener">Orekit</a> 有三种预报方式,一是解析法预报,由 <code>org.orekit.propagation.analytical</code> 实现;二是数值法预报,由 <code>org.orekit.propagation.numerical</code> 和 <code>org.orekit.propagation.integration</code> 实现;三是半解析法预报,由 <code>org.orekit.propagation.semianalytical.dsst</code> 实现。</p><p>解析法预报速度快,但精度随时间下降快,且需要平根或拟平根作为预报输入,即需要事先定轨;数值法通过求解轨道动力学方程实现,模型精确的情况下,预报精度高,但由于必须递推中间过程量,故需消耗较多的计算资源;半解析法速度和精度都介于解析法和数值法之间,一般用于卫星轨道寿命与离轨分析,本文不作介绍。</p><h3 id="3-1-轨道描述"><a href="#3-1-轨道描述" class="headerlink" title="3.1 轨道描述"></a>3.1 轨道描述</h3><hr><p><a href="https://www.orekit.org/" target="_blank" rel="noopener">Orekit</a> 中的轨道描述由 <code>org.orekit.orbits</code> 包提供,该包是构建航天动力学相关程序的基础。从 v3.0 开始,<a href="https://www.orekit.org/" target="_blank" rel="noopener">Orekit</a> 就支持多种轨道描述,包括:<strong>经典开普勒轨道</strong> <code>KeplerianOrbit</code>、<strong>圆轨道</strong> <code>CircularOrbit</code>、<strong>赤道轨道</strong> <code>EquinoctialOrbit</code> 以及<strong>三维状态矢量</strong> <code>CartesianOrbit</code>。</p><ul><li><strong>经典开普勒轨道描述:</strong><code>KeplerianOrbit</code><br> <em>1).</em> <strong><script type="math/tex">a</script></strong>:轨道半场轴(<script type="math/tex">m</script>)<br> <em>2).</em> <strong><script type="math/tex">e</script></strong>:轨道偏心率(<script type="math/tex">NAN</script>)<br> <em>3).</em> <strong><script type="math/tex">i</script></strong>:轨道倾角(<script type="math/tex">rad</script>)<br> <em>4).</em> <strong><script type="math/tex">\omega</script></strong>:近地点幅角(<script type="math/tex">rad</script>)<br> <em>5).</em> <strong><script type="math/tex">\Omega</script></strong>:升交点赤经(<script type="math/tex">rad</script>)<br> <em>6).</em> <strong><script type="math/tex">\nu</script></strong>,<script type="math/tex">E</script> or <script type="math/tex">M</script>:真近角、偏近角或平近角(<script type="math/tex">rad</script>)</li><li><strong>圆轨道描述:</strong><code>CircularOrbit</code><br> <em>1).</em> <strong><script type="math/tex">a</script></strong>:轨道半场轴(<script type="math/tex">m</script>)<br> <em>2).</em> <strong><script type="math/tex">e_x</script></strong>:偏心率矢量 X 分量(<script type="math/tex">NAN</script>),<script type="math/tex">e_x = e\times cos(\omega)</script><br> <em>3).</em> <strong><script type="math/tex">e_y</script></strong>:偏心率矢量 Y 分量(<script type="math/tex">NAN</script>),<script type="math/tex">e_y = e\times sin(\omega)</script><br> <em>4).</em> <strong><script type="math/tex">i</script></strong>:轨道倾角(<script type="math/tex">rad</script>)<br> <em>5).</em> <strong><script type="math/tex">\Omega</script></strong>:升交点赤经(<script type="math/tex">rad</script>)<br> <em>6).</em> <strong><script type="math/tex">u_\nu</script></strong>,<script type="math/tex">u_E</script> or <script type="math/tex">u_M</script>:真纬度幅角(<script type="math/tex">\omega + \nu</script>)、偏纬度幅角(<script type="math/tex">\omega + E</script>)和平纬度幅角(<script type="math/tex">\omega + M</script>)(<script type="math/tex">rad</script>)</li><li><strong>赤道轨道:</strong><code>EquinoctialOrbit</code><br> <em>1).</em> <strong><script type="math/tex">a</script></strong>:轨道半场轴(<script type="math/tex">m</script>)<br> <em>2).</em> <strong><script type="math/tex">e_x</script></strong>:偏心率矢量 X 分量(<script type="math/tex">NAN</script>),<script type="math/tex">e_x = e \times cos(\omega)</script><br> <em>3).</em> <strong><script type="math/tex">e_y</script></strong>:偏心率矢量 Y 分量(<script type="math/tex">NAN</script>),<script type="math/tex">e_y = e \times sin(\omega)</script><br> <em>4).</em> <strong><script type="math/tex">i_x</script></strong>:倾角矢量 X 分量(<script type="math/tex">NAN</script>),<script type="math/tex">h_x = tan(i/2) \times cos(\Omega)</script><br> <em>5).</em> <strong><script type="math/tex">i_y</script></strong>:倾角矢量 Y 分量(<script type="math/tex">NAN</script>),<script type="math/tex">h_y = tan(i/2) \times sin(\Omega)</script><br> <em>5).</em> <strong><script type="math/tex">\Omega</script></strong>:升交点赤经(<script type="math/tex">rad</script>)<br> <em>6).</em> <strong><script type="math/tex">l_\nu</script></strong>,<script type="math/tex">l_E</script> or <script type="math/tex">l_M</script>:真纬度幅角(<script type="math/tex">\omega +\nu + \Omega</script>)、偏纬度幅角(<script type="math/tex">\omega + E + \Omega</script>)和平纬度幅角(<script type="math/tex">\omega + M + \Omega</script>)(<script type="math/tex">rad</script>)</li><li><strong>三维状态矢量:</strong><code>CartesianOrbit</code><br> <em>1).</em> <strong><script type="math/tex">X, Y, Z</script></strong>:位置矢量(<script type="math/tex">m</script>)<br> <em>2).</em> <strong><script type="math/tex">V_x, V_y, V_z</script></strong>:速度矢量(<script type="math/tex">m/s</script>)</li></ul><h3 id="3-2-轨道预报流程"><a href="#3-2-轨道预报流程" class="headerlink" title="3.2 轨道预报流程"></a>3.2 轨道预报流程</h3><hr><h4 id="3-2-1-输入参数"><a href="#3-2-1-输入参数" class="headerlink" title="3.2.1 输入参数"></a>3.2.1 输入参数</h4><hr><p>四种轨道描述方法定义的轨道根数都可以作为轨道预报的输入,采用 <script type="math/tex">Orbit</script> 关键字进行定义。开普勒轨道根数定义方法如下:<br><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">double</span> mu = <span class="number">3.986004415e+14</span>;</span><br><span class="line">Orbit kepOrbit = <span class="keyword">new</span> KeplerianOrbit(a, e, i, omega, raan, M, PositionAngle.MEAN, Frame, Date, mu);</span><br></pre></td></tr></table></figure></p><p>代码中,<script type="math/tex">M</script> 对应 <code>PositionAngle.MEAN</code>,即表示平近角,真近角和偏近角分别用 <code>PositionAngle.TURE</code> 和 <code>PositionAngle.ECCENTRIC</code> 表示;<script type="math/tex">mu</script> 为中心天体引力常数,<script type="math/tex">Frame</script> 为参考架,<strong>J2000</strong> 坐标系用 <code>FramesFactory.getEME2000()</code> 表示,遵循 <strong>IERS 2010</strong> 约定的地球固连坐标系,简称地固系,用 <code>FramesFactory.getTIRF(IERSConventions.IERS_2010)</code> 表示;<script type="math/tex">Date</script> 为时间,采用如下代码初始化:</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">AbsoluteDate Date = <span class="keyword">new</span> AbsoluteDate(yr, mt, day, hr, min, sec, TimeScalesFactory.getUTC());</span><br></pre></td></tr></table></figure><p>类似地,圆轨道根数定义方法如下:</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">double</span> mu = <span class="number">3.986004415e+14</span>;</span><br><span class="line">Orbit cirOrbit = <span class="keyword">new</span> CircularOrbit(a, ex, ey, i, raan, u, PositionAngle.MEAN, Frame, Date, mu);</span><br></pre></td></tr></table></figure><p>赤道轨道根数定义方法如下:</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">double</span> mu = <span class="number">3.986004415e+14</span>;</span><br><span class="line">Orbit equOrbit = <span class="keyword">new</span> EquinoctialOrbit(a, ex, ey, hx, hy, l, PositionAngle.MEAN, Frame, Date, mu);</span><br></pre></td></tr></table></figure><p>三维状态矢量定义方法如下:</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">double</span> mu = <span class="number">3.986004415e+14</span>;</span><br><span class="line">PVCoordinates catPV = <span class="keyword">new</span> PVCoordinates(<span class="keyword">new</span> Vector3D, <span class="keyword">new</span> Vector3D);</span><br><span class="line">Orbit catOrbit = <span class="keyword">new</span> CartesianOrbit(catPV, Frame, Date, mu);</span><br></pre></td></tr></table></figure><p>代码中,<script type="math/tex">catPV</script> 为状态矢量。根据轨道数据的来源,选择对应的轨道描述方式。</p><h4 id="3-2-2-建立轨道预报器"><a href="#3-2-2-建立轨道预报器" class="headerlink" title="3.2.2 建立轨道预报器"></a>3.2.2 建立轨道预报器</h4><hr><p><a href="https://www.orekit.org/" target="_blank" rel="noopener">Orekit</a> 提供多种解析法预报器,由 <code>org.orekit.propagation.analytical</code> 包实现,最简单的为基于 <strong>二体模型</strong> 的解析法预报器:</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">KeplerianPropagator tbProp = <span class="keyword">new</span> KeplerianPropagator(Orbit initialOrbit);</span><br></pre></td></tr></table></figure><p>较为复杂的解析法预报器基于 <strong>EcksteinHechler</strong> 模型:</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">double</span> referenceRadius = <span class="number">6378136.3</span>;</span><br><span class="line"><span class="keyword">double</span> mu = <span class="number">3.986004415e+14</span>;</span><br><span class="line"><span class="keyword">double</span> c20 = -<span class="number">0.484165143790815e-03</span>;</span><br><span class="line"><span class="keyword">double</span> c30 = <span class="number">0.957161207093473e-06</span>;</span><br><span class="line"><span class="keyword">double</span> c40 = <span class="number">0.539965866638991e-06</span>;</span><br><span class="line"><span class="keyword">double</span> c50 = <span class="number">0.686702913736681e-07</span>;</span><br><span class="line"><span class="keyword">double</span> c60 = -<span class="number">0.149953927978527e-06</span></span><br><span class="line">EcksteinHechlerPropagator ehProp = </span><br><span class="line"> <span class="keyword">new</span> EcksteinHechlerPropagator(Orbit initialOrbit, referenceRadius, mu, c20, c30, c40, c50, c60);</span><br></pre></td></tr></table></figure><p><a href="https://www.orekit.org/" target="_blank" rel="noopener">Orekit</a> 数值预报器由 <code>org.orekit.propagation.numerical</code> 包实现,定义方法如下:</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">NumericalPropagator propagator = <span class="keyword">new</span> NumericalPropagator(integrator);</span><br></pre></td></tr></table></figure><p>参数 <strong>integrator</strong> 较具有多种选择,通用型高精度积分器可选择 PD 系列中的 <code>DormandPrince853Integrator</code>,定义方法如下:</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">final</span> <span class="keyword">double</span> minStep = <span class="number">0.001</span>;</span><br><span class="line"><span class="keyword">final</span> <span class="keyword">double</span> maxstep = <span class="number">100.0</span>;</span><br><span class="line"><span class="keyword">final</span> <span class="keyword">double</span> positionTolerance = <span class="number">1.0e-13</span>;</span><br><span class="line"><span class="keyword">final</span> OrbitType propagationType = OrbitType.KEPLERIAN;</span><br><span class="line"><span class="keyword">final</span> <span class="keyword">double</span>[][] tolerances = </span><br><span class="line"> NumericalPropagator.tolerances(positionTolerance, initialOrbit, propagationType);</span><br><span class="line">AdaptiveStepsizeIntegrator integrator = </span><br><span class="line"> <span class="keyword">new</span> DormandPrince853Integrator(minStep, maxstep, tolerances[<span class="number">0</span>], tolerances[<span class="number">1</span>]);</span><br></pre></td></tr></table></figure><p>此外,数值轨道预报,还需要设置动力学模型,一般只考虑地球引力场:</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">final</span> NormalizedSphericalHarmonicsProvider provider =</span><br><span class="line"> GravityFieldFactory.getNormalizedProvider(<span class="number">20</span>, <span class="number">20</span>);</span><br><span class="line">ForceModel holmesFeatherstone = </span><br><span class="line"> <span class="keyword">new</span> HolmesFeatherstoneAttractionModel(FramesFactory.getITRF(IERSConventions.IERS_2010, <span class="keyword">true</span>), provider);</span><br></pre></td></tr></table></figure><p>更多力学模型的设置参考 API 文档中的 <code>NumericalPropagator</code> 类:<a href="https://www.orekit.org/site-orekit-development/apidocs/org/orekit/propagation/numerical/NumericalPropagator.html" target="_blank" rel="noopener">orekit-9.2-javadoc/org/<br>orekit/propagation/numerical/NumericalPropagator.html</a>。</p><h4 id="3-2-3-执行轨道预报"><a href="#3-2-3-执行轨道预报" class="headerlink" title="3.2.3 执行轨道预报"></a>3.2.3 执行轨道预报</h4><hr><p>执行预报语句,获取指定时间的轨道根数 <script type="math/tex">currentState</script>:</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line">SpacecraftState currentState = kepler.propagate(extrapDate);</span><br><span class="line">java</span><br><span class="line"></span><br><span class="line">也可构建循环语句,以定步长预报指定时间段的轨道根数:</span><br><span class="line"></span><br><span class="line">```java</span><br><span class="line"><span class="keyword">double</span> duration = <span class="number">600</span>.;</span><br><span class="line">AbsoluteDate finalDate = initialDate.shiftedBy(duration);</span><br><span class="line"><span class="keyword">double</span> stepT = <span class="number">60</span>.;</span><br><span class="line"><span class="keyword">int</span> cpt = <span class="number">1</span>;</span><br><span class="line"> extrapDate.compareTo(finalDate) <= <span class="number">0</span>;</span><br><span class="line"> extrapDate = extrapDate.shiftedBy(stepT)) {</span><br><span class="line"> SpacecraftState currentState = kepler.propagate(extrapDate);</span><br><span class="line"> System.out.println(<span class="string">"step "</span> + cpt++);</span><br><span class="line"> System.out.println(<span class="string">" time : "</span> + currentState.getDate());</span><br><span class="line"> System.out.println(<span class="string">" "</span> + currentState.getOrbit());</span><br><span class="line">}</span><br></pre></td></tr></table></figure><p>数值法预报器于解析法稍有不同,是通过 <strong>StepHandler</strong> 执行数据操作的:</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">propagator.addForceModel(holmesFeatherstone);</span><br><span class="line">propagator.setInitialState(initialState);</span><br><span class="line">propagator.setMasterMode(<span class="number">60</span>., <span class="keyword">new</span> TutorialStepHandler());</span><br><span class="line">SpacecraftState finalState = </span><br><span class="line"> propagator.propagate(initialDate.shiftedBy(<span class="number">600</span>));</span><br></pre></td></tr></table></figure><h2 id="4-总结"><a href="#4-总结" class="headerlink" title="4 总结"></a>4 总结</h2><hr><p>本文介绍了 <a href="https://www.orekit.org/" target="_blank" rel="noopener">Orekit</a> 航天动力学库的调用方法,并简单阐述了其轨道预报方法,可作为相关应用软件开发的入门级参考。</p><hr><p class="text-muted"></p><p>© Copyright by Spacefan 2019. </p><p></p>]]></content>
<categories>
<category> 专业技能 </category>
</categories>
<tags>
<tag> Space </tag>
<tag> 航天动力学 </tag>
<tag> Orekit </tag>
<tag> 轨道根数 </tag>
<tag> Java </tag>
<tag> 轨道预报 </tag>
</tags>
</entry>
<entry>
<title>史上最强的 5G 介绍,外行业看完也秒懂</title>
<link href="/2018/12/05/5G_intro/"/>
<url>/2018/12/05/5G_intro/</url>
<content type="html"><![CDATA[<p>今天的故事,从一个公式开始讲起,一个简单且神奇的公式。</p><p>这是一个既简单又神奇的公式。说它简单,是因为它一共只有3个字母。而说它神奇,是因为这个公式蕴含了博大精深的通信技术奥秘,这个星球上有无数的人都在为之魂牵梦绕。</p><p>这个公式,就是它:<script type="math/tex">c = \lambda \times \nu</script>。</p><a id="more"></a><p><img src="/images/5G_intro/P5G01.jpeg" width="60%" height="20%"></p><p>我相信很多同学都认出这个公式了,如果没认出来,而且你又是一个理科生的话,请记得有空多给你的中学物理老师打打电话!</p><p><img src="/images/5G_intro/P5G02.jpeg" width="60%" height="40%"></p><p>解释一下,上面这个公式,这是物理学的基本公式,光速=波长×频率。</p><p><img src="/images/5G_intro/P5G03.jpeg" width="60%" height="100%"></p><p>对于这个公式,可以这么说:无论是1G、2G、3G,还是4G、5G,万变不离其宗,全部都是在它身上做文章,没有跳出它的“五指山”。且听我慢慢道来。</p><h3 id="有线?无线?"><a href="#有线?无线?" class="headerlink" title="有线?无线?"></a>有线?无线?</h3><hr><p>通信技术,无论什么黑科技白科技,归根到底,就分为两种 —— <strong>有线通信</strong> 和 <strong>无线通信</strong>。</p><p>我和你打电话,信息数据要么在空中传播(看不见、摸不着),要么在实物上传播(看得见、摸得着)。</p><p><img src="/images/5G_intro/P5G04.jpeg" width="100%" height="100%"></p><p>如果是在实体物质上传播,就是有线通信,基本上就是用的铜线、光纤这些线缆,统称为有线介质。</p><p>在有线介质上传播数据,速率可以达到很高的数值。</p><p>以光纤为例,在实验室中,单条光纤最大速度已达到了26Tbps,是传统网线的两万六千倍。</p><p><img src="/images/5G_intro/P5G05.jpeg" width="100%" height="100%"></p><p><code>图注:光纤,单条最大速度已达到了26Tbps</code></p><p>而<strong>空中传播</strong>这部分,才是移动通信的瓶颈所在。</p><p>目前主流的移动通信标准,是4G LTE,理论速率只有150Mbps(不包括载波聚合)。这个和有线是完全没办法相比的。</p><p><img src="/images/5G_intro/P5G06.jpeg" width="100%" height="100%"></p><p>所以,<strong>5G如果要实现端到端的高速率,重点是突破无线这部分的瓶颈</strong>。</p><h3 id="好大一个波"><a href="#好大一个波" class="headerlink" title="好大一个波"></a>好大一个波</h3><hr><p>大家都知道,无线通信就是利用电磁波进行通信。电波和光波,都属于电磁波。</p><p>电磁波的功能特性,是由它的频率决定的。不同频率的电磁波,有不同的属性特点,从而有不同的用途。</p><p>例如,高频的γ射线,具有很大的杀伤力,可以用来治疗肿瘤。</p><p><img src="/images/5G_intro/P5G07.jpeg" width="100%" height="100%"></p><p><code>图注:电磁波的不断频率</code></p><p>我们目前主要使用<strong>电波</strong>进行通信。当然,光波通信也在崛起,例如<strong>LiFi</strong>。</p><p><img src="/images/5G_intro/P5G08.jpeg" width="100%" height="100%"></p><p><code>图注:LiFi(Light Fidelity),可见光通信</code></p><p>不偏题,回到电波先。</p><p>电波属于电磁波的一种,它的频率资源是有限的。</p><p>为了避免干扰和冲突,我们在电波这条<strong>公路</strong>上进一步划分<strong>车道</strong>,分配给不同的对象和用途。</p><p><img src="/images/5G_intro/P5G09.jpeg" width="100%" height="100%"></p><p><code>图注:不同频率电波的用途</code></p><p>请大家注意上面图中的红色字体。一直以来,我们主要是用 <font color="#FF0000">中频~超高频</font> 进行手机通信的。</p><p>例如经常说的<strong>“GSM900”</strong>、<strong>“CDMA800”</strong>,其实意思就是指,工作频段在900MHz的GSM,和工作频段在800MHz的CDMA。</p><p>目前全球主流的4G LTE技术标准,属于特高频和超高频。</p><p>我们国家主要使用超高频:</p><p><img src="/images/5G_intro/P5G10.jpeg" width="100%" height="100%"></p><p>大家能看出来,随着1G、2G、3G、4G的发展,使用的电波频率是越来越高的。</p><p>这是为什么呢?</p><p>这主要是因为,<strong>频率越高,能使用的频率资源越丰富。频率资源越丰富,能实现的传输速率就越高。</strong></p><p><img src="/images/5G_intro/P5G15.png" width="100%" height="30%"></p><p><code>图注:更高的频率→更多的资源→更快的速度</code></p><p>应该不难理解吧?频率资源就像车厢,越高的频率,车厢越多,相同时间内能装载的信息就越多。</p><p>那么,5G使用的频率具体是多少呢?</p><p>如下图所示:</p><p><img src="/images/5G_intro/P5G11.jpeg" width="80%" height="30%"></p><p>5G的频率范围,分为两种:一种是6GHz以下,这个和目前我们的2/3/4G差别不算太大。还有一种,就很高了,在24GHz以上。</p><p>目前,国际上主要使用28GHz进行试验(这个频段也有可能成为5G最先商用的频段)。</p><p>如果按28GHz来算,根据前文我们提到的公式:</p><p><img src="/images/5G_intro/P5G12.jpeg" width="80%" height="30%"></p><p>好啦,这个就是5G的第一个技术特点——<br><br></p><p><center> <font color="#FF0000" size="6" align="center"> 毫 米 波 </font> </center><br><br></p><p>请允许我再发一遍刚才那个频率对照表:</p><p><img src="/images/5G_intro/P5G09.jpeg" width="100%" height="100%"></p><p><code>图注:不同频率电波的用途</code></p><p>请注意看最下面一行,是不是就是<strong>“毫米波”</strong>?</p><p>继续,继续!</p><p>好了,既然,频率高这么好,你一定会问:“为什么以前我们不用高频率呢?”</p><p>原因很简单——不是不想用,是用不起。</p><p><strong>电磁波的显著特点:频率越高,波长越短,越趋近于直线传播(绕射能力越差)。频率越高,在传播介质中的衰减也越大。</strong></p><p>你看激光笔(波长635nm左右),射出的光是直的吧,挡住了就过不去了。</p><p>再看卫星通信和GPS导航(波长1cm左右),如果有遮挡物,就没信号了吧。</p><p><img src="/images/5G_intro/P5G13.jpeg" width="60%" height="20%"><br><code>图注:卫星那口大锅,必须校准瞄着卫星的方向,否则哪怕稍微歪一点,都会影响信号质量。</code></p><p>移动通信如果用了高频段,那么它最大的问题,就是<strong>传输距离大幅缩短,覆盖能力大幅减弱</strong>。</p><p>覆盖同一个区域,需要的5G基站数量,将大大超过4G。</p><p><img src="/images/5G_intro/P5G14.jpeg" width="60%" height="100%"></p><p>基站数量意味着什么?钱啊!投资啊!成本啊!</p><p>频率越低,网络建设就越省钱,竞争起来就越有利。这就是为什么,这些年,电信、移动、联通为了低频段而争得头破血流。</p><p>有的频段甚至被称为——<strong>黄金频段</strong>。</p><p><img src="/images/5G_intro/P5G15.jpeg" width="60%" height="100%"></p><p>这也是为什么,5G时代,运营商拼命怼设备商,希望基站降价。(如果真的上5G,按以往的模式,设备商就发大财了。)</p><p><img src="/images/5G_intro/P5G16.jpeg" width="40%" height="100%"></p><p><img src="/images/5G_intro/P5G17.jpeg" width="60%" height="100%"></p><p>所以,基于以上原因,在高频率的前提下,为了减轻网络建设方面的成本压力,5G必须寻找新的出路。</p><p>出路有哪些呢?</p><p>首先,就是微基站。<br><br></p><p><center><font color="#FF0000" size="6" align="center"> 微 基 站 </font> </center><br><br></p><p>基站有两种,微基站和宏基站。看名字就知道,微基站很小,宏基站很大!</p><p>宏基站:</p><p><img src="/images/5G_intro/P5G18.jpeg" width="60%" height="100%"></p><p><code>图注:室外常见,建一个覆盖一大片</code></p><p>微基站:</p><p><img src="/images/5G_intro/P5G19.jpeg" width="60%" height="100%"></p><p><code>图注:看上去是不是很酷炫?</code></p><p><img src="/images/5G_intro/P5G20.jpeg" width="60%" height="100%"></p><p><code>图注:还有更小的,巴掌那么大</code></p><p>其实,微基站现在就有不少,尤其是城区和室内,经常能看到。</p><p>以后,到了5G时代,微基站会更多,到处都会装上,几乎随处可见。</p><p>你肯定会问,那么多基站在身边,会不会对人体造成影响?</p><p>我的回答是——不会。</p><p>其实,和传统认知恰好相反,事实上,基站数量越多,辐射反而越小!</p><p>你想一下,冬天,一群人的房子里,一个大功率取暖器好,还是几个小功率取暖器好?</p><p>大功率方案▼</p><p><img src="/images/5G_intro/P5G21.jpeg" width="60%" height="100%"></p><p>小功率方案▼</p><p><img src="/images/5G_intro/P5G22.jpeg" width="60%" height="100%"></p><p>上面的图,一目了然了。基站小,功率低,对大家都好。如果只采用一个大基站,离得近,辐射大,离得远,没信号,反而不好。</p><h3 id="天线去哪了?"><a href="#天线去哪了?" class="headerlink" title="天线去哪了?"></a>天线去哪了?</h3><hr><p>大家有没有发现,以前大哥大都有很长的天线,早期的手机也有突出来的小天线,为什么现在我们的手机都没有天线了?</p><p><img src="/images/5G_intro/P5G23.jpeg" width="60%" height="100%"></p><p>其实,我们并不是不需要天线,而是我们的天线变小了。</p><p><strong>根据天线特性,天线长度应与波长成正比,大约在1/10~1/4之间。</strong></p><p><img src="/images/5G_intro/P5G24.jpeg" width="60%" height="100%"></p><p>随着时间变化,我们手机的通信频率越来越高,波长越来越短,天线也就跟着变短啦!</p><p>毫米波通信,天线也变成毫米级。。。</p><p>这就意味着,天线完全可以塞进手机的里面,甚至可以塞很多根。。。</p><p>这就是5G的第三大杀手锏——<br><br></p><p><center><font color="#FF0000" size="6" align="center"> Massive MIMO(多天线技术) </font> </center><br><br></p><p>MIMO 就是“多进多出”(Multiple-Input Multiple-Output),多根天线发送,多根天线接收。</p><p>在LTE时代,我们就已经有MIMO了,但是天线数量并不算多,只能说是初级版的MIMO。</p><p>到了5G时代,继续把MIMO技术发扬光大,现在变成了加强版的<strong>Massive MIMO</strong>(Massive:大规模的,大量的)。</p><p><img src="/images/5G_intro/P5G25.jpeg" width="60%" height="100%"></p><p>手机里面都能塞好多根天线,基站就更不用说了。</p><p>以前的基站,天线就那么几根:</p><p><img src="/images/5G_intro/P5G26.jpeg" width="60%" height="100%"></p><p>5G时代,天线数量不是按根来算了,是按“阵”。。。“天线阵列”。。。一眼看去,要得密集恐惧症的节奏。。。</p><p><img src="/images/5G_intro/P5G27.jpeg" width="60%" height="100%"></p><p>不过,天线之间的距离也不能太近。</p><p><strong>因为天线特性要求,多天线阵列要求天线之间的距离保持在半个波长以上。如果距离近了,就会互相干扰,影响信号的收发</strong>。</p><h3 id="你是直的?还是弯的?"><a href="#你是直的?还是弯的?" class="headerlink" title="你是直的?还是弯的?"></a>你是直的?还是弯的?</h3><hr><p>大家都见过灯泡发光吧?</p><p><img src="/images/5G_intro/P5G28.jpeg" width="60%" height="100%"></p><p>其实,基站发射信号的时候,就有点像灯泡发光。</p><p>信号是向四周发射的,对于光,当然是照亮整个房间,如果只是想照亮某个区域或物体,那么,大部分的光都浪费了。。。</p><p><img src="/images/5G_intro/P5G29.jpeg" width="60%" height="100%"></p><p>基站也是一样,大量的能量和资源都浪费了。</p><p>我们能不能找到一只无形的手,把散开的光束缚起来呢?</p><p>这样既节约了能量,也保证了要照亮的区域有足够的光。</p><p>答案是:可以。</p><p>这就是——<br><br></p><p><center><font color="#FF0000" size="6" align="center"> 波 束 赋 形 </font> </center><br><br></p><p><strong>波束赋形</strong>: 在基站上布设天线阵列,通过<strong>对射频信号相位的控制</strong>,使得相互作用后的电磁波的波瓣变得非常狭窄,并指向它所提供服务的手机,而且能跟据手机的移动而转变方向。这种空间复用技术,由全向的信号覆盖变为了精准指向性服务,波束之间不会干扰,在相同的空间中提供更多的通信链路,极大地提高基站的服务容量。</p><p><img src="/images/5G_intro/P5G30.jpeg" width="60%" height="100%"></p><p>直的都能掰成弯的。。。还有什么是通信砖家干不出来的?</p><p><img src="/images/5G_intro/P5G31.jpeg" width="60%" height="100%"></p><h3 id="别收我钱,行不行?"><a href="#别收我钱,行不行?" class="headerlink" title="别收我钱,行不行?"></a>别收我钱,行不行?</h3><hr><p>在目前的移动通信网络中,即使是两个人面对面拨打对方的手机(或手机对传照片),信号都是通过基站进行中转的,包括控制信令和数据包。。。</p><p>而在5G时代,这种情况就不一定了。</p><p>5G的第五大特点——D2D,也就是Device to Device(设备到设备)。<br><br></p><p><center><font color="#FF0000" size="6" align="center"> D 2 D </font> </center><br><br></p><p>5G时代,同一基站下的两个用户,如果互相进行通信,他们的数据将不再通过基站转发,而是直接手机到手机。。。</p><p><img src="/images/5G_intro/P5G32.jpeg" width="60%" height="100%"></p><p>这样,就节约了大量的空中资源,也减轻了基站的压力。</p><p>不过,如果你觉得这样就不用付钱,那你就图样图森破了。</p><p><img src="/images/5G_intro/P5G33.jpeg" width="60%" height="100%"></p><p>控制消息还是要从基站走的,你用着频谱资源,运营商爸爸怎么可能放过你。。。<span class="github-emoji" style="display:inline;vertical-align:middle" data-src="https://github.githubassets.com/images/icons/emoji/unicode/1f604.png?v8">😄</span> <span class="github-emoji" style="display:inline;vertical-align:middle" data-src="https://github.githubassets.com/images/icons/emoji/unicode/1f604.png?v8">😄</span> <span class="github-emoji" style="display:inline;vertical-align:middle" data-src="https://github.githubassets.com/images/icons/emoji/unicode/1f604.png?v8">😄</span></p><h3 id="后记"><a href="#后记" class="headerlink" title="后记"></a>后记</h3><hr><p>相信大家通过本文,对5G和她背后的通信知识已经有了深刻的理解。而这一切,都只是源于一个小学生都能看懂的数学公式。不是么?</p><p>通信技术并不神秘,5G作为通信技术皇冠上最耀眼的宝石,也不是什么遥不可及的创新革命技术,它更多是对现有通信技术的演进。</p><p>正如一位高人所说—— <strong>通信技术的极限,并不是技术工艺方面的限制,而是建立在严谨数学基础上的推论,在可以遇见的未来是基本不可能突破的。</strong></p><p>如何在科学原理的范畴内,进一步发掘通信的潜力,是通信行业众多奋斗者们孜孜不倦的追求。</p>]]></content>
<categories>
<category> 科技前沿 </category>
</categories>
<tags>
<tag> 5G </tag>
<tag> 通信 </tag>
<tag> 毫米波 </tag>
<tag> 微基站 </tag>
</tags>
</entry>
<entry>
<title>CodeBlocks v17.12 界面汉化与编辑器主题美化</title>
<link href="/2018/11/30/Codeblocksv1712/"/>
<url>/2018/11/30/Codeblocksv1712/</url>
<content type="html"><![CDATA[<p><a href="http://codeblocks.org/" target="_blank" rel="noopener">Code::Blocks</a> 是一个非常优秀的 IDE,它轻巧、强大、跨平台,且紧跟标准,最新版更是加入了对 <a href="https://www.qt.io/" target="_blank" rel="noopener">Qt5</a> 的支持。然而,这么一个令人爱不释手的 IDE 竟无汉化,编辑器主题界面也十分简陋,于是便有了本博文。</p><p>本文将以 <a href="https://sourceforge.net/projects/codeblocks/files/Binaries/17.12/" target="_blank" rel="noopener">Code::Blocks v17.12</a> 为对象,介绍其菜单汉化及编辑器主题优化方法,配置后的软件有助于我们更赏心悦目度撸代码。<span class="github-emoji" style="display:inline;vertical-align:middle" data-src="https://github.githubassets.com/images/icons/emoji/unicode/1f604.png?v8">😄</span> <span class="github-emoji" style="display:inline;vertical-align:middle" data-src="https://github.githubassets.com/images/icons/emoji/unicode/1f604.png?v8">😄</span> <span class="github-emoji" style="display:inline;vertical-align:middle" data-src="https://github.githubassets.com/images/icons/emoji/unicode/1f604.png?v8">😄</span></p><a id="more"></a><p><img src="/images/codeblocks/CB01.png" width="100%" height="100%"></p><h3 id="一、界面汉化"><a href="#一、界面汉化" class="headerlink" title="一、界面汉化"></a>一、界面汉化</h3><hr><h4 id="1-1-下载-Code-Blocks-汉化包"><a href="#1-1-下载-Code-Blocks-汉化包" class="headerlink" title="1.1 下载 Code::Blocks 汉化包"></a>1.1 下载 Code::Blocks 汉化包</h4><hr><p>首先,大家需要下载一个 Code::Blocks 汉化包,下载链接: <a href="https://pan.baidu.com/s/1sniGc01" target="_blank" rel="noopener">https://pan.baidu.com/s/1sniGc01</a> (提取码: 7e9m)。</p><h4 id="1-2-汉化-Code-Blocks"><a href="#1-2-汉化-Code-Blocks" class="headerlink" title="1.2 汉化 Code::Blocks"></a>1.2 汉化 Code::Blocks</h4><hr><p>1) 汉化包下载完成后,是一个压缩包,将其解压,其中包含有一个 locale 文件夹,如下图所示,这是我们需要的。</p><p><img src="/images/codeblocks/CB02.png" width="100%" height="100%"></p><p>2) 进入 Code::Blocks 安装目录(其默认安装目录为 C:\Program Files (x86)\CodeBlocks),依次进入 share —> CodeBlocks 文件夹,然后将解压汉化包得到的 locale 文件夹,复制到 CodeBlocks 文件夹下,如下图所示:</p><p><img src="/images/codeblocks/CB03.png" width="100%" height="100%"></p><p>如果上述过程,你都没有打开 Code::Blocks,这个时候你直接打开,应该就可以看到,你的 Code::Blocks 已经汉化成功啦。如果还没有成功,继续以下操作。</p><h4 id="1-3-更改Code-Blocks设置"><a href="#1-3-更改Code-Blocks设置" class="headerlink" title="1.3 更改Code::Blocks设置"></a>1.3 更改Code::Blocks设置</h4><hr><p>1) 打开 Code::Blocks,选择 “Settings —> Environmen”,如下图所示:</p><p><img src="/images/codeblocks/CB04.png" width="100%" height="100%"></p><p>2) 会弹出用于设置 Code::Blocks 的对话框,如下图所示:</p><p><img src="/images/codeblocks/CB05.png" width="100%" height="100%"></p><p>选择 View 选项,勾选 Internationalization 选项,同时选择其中的 Chinese(Simplified)。然后点击 OK 按钮。设置完成后,直接重新启动 Code::Blocks,此时 Code::Blocks 会出现一个提示框,提示你是否保存更改,选择保存即可。</p><p>3) 再次启动 Code::Blocks,你会看到全新的汉化的 Code::Blocks,虽然没有完全汉化,但起码不会影响日常的正常使用。 </p><p><img src="/images/codeblocks/CB06.png" width="100%" height="100%"></p><h3 id="二、编辑器主题美化"><a href="#二、编辑器主题美化" class="headerlink" title="二、编辑器主题美化"></a>二、编辑器主题美化</h3><hr><h4 id="2-1-替换配置文件"><a href="#2-1-替换配置文件" class="headerlink" title="2.1 替换配置文件"></a>2.1 替换配置文件</h4><hr><p>在 C 盘下搜索文件 <code>default.conf</code>(先去文件夹选项里勾上显示隐藏的系统文件),用文本编辑器打开,搜索标签,用记事本打开 <code>default.conf</code>,把这个主题网址的下面的所有代码都覆盖复制进去(建议把原来的 default 文件名字改为备份,以留后用)。</p><p><a href="http://wiki.codeblocks.org/index.php?title=Syntax_highlighting_custom_colour_themes" target="_blank" rel="noopener">http://wiki.codeblocks.org/index.php?title=Syntax_highlighting_custom_colour_themes</a></p><p>一般这个文件地址是 <code>C:\用户\(你电脑的用户名)\AppData\Roaming\CodeBlocks\default.conf</code>,可以用 <a href="https://www.voidtools.com" target="_blank" rel="noopener">Everything</a> 搜索。</p><p><img src="/images/codeblocks/CB07.png" width="100%" height="100%"></p><p>在此期间 Code::Blocks 需要关闭,不然会被改回去。</p><h4 id="2-2-稍作修改"><a href="#2-2-稍作修改" class="headerlink" title="2.2 稍作修改"></a>2.2 稍作修改</h4><hr><p>可能用新的界面风格会看不到光标,这个在 Code::Blocks 内修改,Settings->Configure editor->Margins and caret->Caret->Colour,选择一个可以辨识的颜色,比如白色。并将宽度设为 3(或者更宽)。</p><p><img src="/images/codeblocks/CB08.png" width="100%" height="100%"></p><h4 id="2-3-修改字体"><a href="#2-3-修改字体" class="headerlink" title="2.3 修改字体"></a>2.3 修改字体</h4><hr><p>字体修改在 Settings->Configure editor->General settings->Font,点击 Choose,在里面选择。最后主题自己选定一个保存再打开 Code::Blocks 新建一个文件或者工程就可以看到主题样式已经发生改变。</p><p><img src="/images/codeblocks/CB09.png" width="100%" height="100%"></p><h4 id="2-4-代码缩进指示线"><a href="#2-4-代码缩进指示线" class="headerlink" title="2.4 代码缩进指示线"></a>2.4 代码缩进指示线</h4><hr><p>如下图修改一下就有这种效果(可能汉化包不一样,反正倒数第三个选项打勾应该就可以了)。</p><p><img src="/images/codeblocks/CB10.png" width="100%" height="100%"></p><p>效果如图:</p><p><img src="/images/codeblocks/CB11.png" width="100%" height="100%"> </p><h3 id="三、总结"><a href="#三、总结" class="headerlink" title="三、总结"></a>三、总结</h3><hr><p>汉化后的界面和美化后的编辑器主题有利于我们写出更优秀的代码,至此,打完收工。</p>]]></content>
<categories>
<category> 编程语言 </category>
</categories>
<tags>
<tag> CodeBlocks </tag>
<tag> IDE </tag>
<tag> c </tag>
<tag> C++ </tag>
<tag> 编辑器 </tag>
<tag> 主题美化 </tag>
</tags>
</entry>
<entry>
<title>基于 JavaScript 的 GIS 开发库 Cesium</title>
<link href="/2018/06/30/cesium-intro/"/>
<url>/2018/06/30/cesium-intro/</url>
<content type="html"><![CDATA[<p><a href="http://cesiumjs.org/" target="_blank" rel="noopener">Cesium</a> 是一个用来在 Web 浏览器中创建三维地球与二维地图的 JavaScript 库,Cesium 开发的应用不需要任何浏览器插件的支持即可运行。Cesium 使用 WebGL 进行硬件图形加速,并且跨平台,跨浏览器,适合用来进行动态数据可视化。</p><a id="more"></a><h3 id="x1f44d-核心功能"><a href="#x1f44d-核心功能" class="headerlink" title="👍 核心功能"></a><span class="github-emoji" style="display:inline;vertical-align:middle" data-src="https://github.githubassets.com/images/icons/emoji/unicode/1f44d.png?v8">👍</span> 核心功能</h3><hr><ul><li>地理空间动态可视化<ul><li>使用 <a href="https://github.com/AnalyticalGraphicsInc/cesium/wiki/CZML-Guide" target="_blank" rel="noopener">CZML</a> 数据驱动的、时间动态的场景</li><li>世界范围的高精度地形可视化;</li><li>使用 WMS、TMS、OpenStreetMaps、Bing 及 Esri 标准绘制影像图层;</li><li>使用 GeoJSON 和 TopoJSON 绘制矢量数据;</li><li>使用 COLLADA 和 glTF 绘制三维模型;</li><li>使用 <a href="http://cesiumjs.org/plugins/index.html" target="_blank" rel="noopener">插件</a> 来扩展 Cesium。</li></ul></li><li>为性能和精度进行设计<ul><li>使用硬件加速的方式,通过批处理和效率选择来优化 WebGL;</li><li>绘制多种几何图形,包括 polylines、polygons、billboards、labels、extrusions 和 corridors;</li><li>控制相机并创建飞行路径;</li><li>使用标准小部件控制动画时间,选择图像图层并缩放到某个位置。</li></ul></li><li>一个API,三种视图<ul><li>Cesium 支持采用同一 API 实现三维(全球)、2.5维(Columbus视图)及二维(地图)三种视图</li></ul></li></ul><p><img src="http://live.osgeo.org/_images/cesiumjs_3in1.png" width="100%" height="100%"></p><h3 id="x1f680-快速开始"><a href="#x1f680-快速开始" class="headerlink" title="🚀 快速开始"></a><span class="github-emoji" style="display:inline;vertical-align:middle" data-src="https://github.githubassets.com/images/icons/emoji/unicode/1f680.png?v8">🚀</span> 快速开始</h3><hr><p>访问 <a href="http://cesiumjs.org/downloads.html" target="_blank" rel="noopener">下载页面</a> 或者使用 <code>npm</code> 安装 <a href="http://cesiumjs.org/" target="_blank" rel="noopener">Cesium</a> :<br><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ npm install cesium</span><br></pre></td></tr></table></figure></p><p>有任何问题都可以在 <a href="http://cesiumjs.org/forum.html" target="_blank" rel="noopener">论坛</a> 提出。如果对项目开发贡感兴趣,可以进一步阅读 <a href="https://github.com/AnalyticalGraphicsInc/cesium/blob/master/CONTRIBUTING.md" target="_blank" rel="noopener">CONTRIBUTING.md</a>。 <span class="github-emoji" style="display:inline;vertical-align:middle" data-src="https://github.githubassets.com/images/icons/emoji/unicode/2764.png?v8">❤</span></p><h3 id="x2744-项目使命"><a href="#x2744-项目使命" class="headerlink" title="❄ 项目使命"></a><span class="github-emoji" style="display:inline;vertical-align:middle" data-src="https://github.githubassets.com/images/icons/emoji/unicode/2744.png?v8">❄</span> 项目使命</h3><hr><p><a href="http://cesiumjs.org" target="_blank" rel="noopener">Cesium</a> 的使命是为静态和时间动态内容创建领先的三维地球仪和地图,具有最佳性能,精度,视觉质量,平台支持,社区和易用性。</p><h3 id="x1f4d7-使用许可"><a href="#x1f4d7-使用许可" class="headerlink" title="📗 使用许可"></a><span class="github-emoji" style="display:inline;vertical-align:middle" data-src="https://github.githubassets.com/images/icons/emoji/unicode/1f4d7.png?v8">📗</span> 使用许可</h3><hr><p><a href="http://cesiumjs.org" target="_blank" rel="noopener">Cesium</a> 使用 <a href="http://www.apache.org/licenses/LICENSE-2.0.html" target="_blank" rel="noopener">Apache 2.0</a> 许可协议,对于商业和非商业用户都是免费的。</p><h3 id="x1f44f-特性展示"><a href="#x1f44f-特性展示" class="headerlink" title="👏 特性展示"></a><span class="github-emoji" style="display:inline;vertical-align:middle" data-src="https://github.githubassets.com/images/icons/emoji/unicode/1f44f.png?v8">👏</span> 特性展示</h3><hr><p align="center"> <a href="http://cesiumjs.org/demos/STORMevent/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/STORMevent.png" height="150"></a> <a href="http://cesiumjs.org/demos/Swisstopo/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/Swisstopo.png" height="150"></a> <a href="http://cesiumjs.org/demos/STKCZML/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/STKCZML.jpg" height="150"></a> <a href="http://cesiumjs.org/demos/ContextCapture/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/ContextCapture.jpg" height="150"></a> <a href="http://cesiumjs.org/demos/Flightradar24/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/Flightradar24.jpg" height="150"></a> <a href="http://apps.agi.com/SatelliteViewer/?Status=Operational" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/SatelliteViewer.png" height="150"></a> <a href="http://cesiumjs.org/NewYork" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/nyc.png" height="150"></a> <a href="http://cesiumjs.org/demos/xalps/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/RedBull1.jpg" height="150"></a> <a href="http://cesiumjs.org/demos/MarsTrek/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/MarsTrek.png" height="150"></a> <a href="http://cesiumjs.org/demos/hiroshima-archive/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/hiroshima/showcase.jpg" height="150"></a> <a href="http://cesiumjs.org/demos/noradtrackssanta/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/noradtrackssanta.png" height="150"></a> </p><h3 id="x1f44f-演示项目"><a href="#x1f44f-演示项目" class="headerlink" title="👏 演示项目"></a><span class="github-emoji" style="display:inline;vertical-align:middle" data-src="https://github.githubassets.com/images/icons/emoji/unicode/1f44f.png?v8">👏</span> 演示项目</h3><hr><p align="center"><a href="http://cesiumjs.org/demos/idecanarias/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/idecanarias.jpg" height="150"></a> <a href="http://cesiumjs.org/demos/pop/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/pop_bubbles.jpg" height="150"></a> <a href="http://cesiumjs.org/demos/onesky/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/onesky.jpg" height="150"></a> <a href="http://cesiumjs.org/demos/analyticalservices/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/analyticalservices.jpg" height="150"></a> <a href="http://cesiumjs.org/demos/uch_enmek/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/uch_enmek.png" height="150"></a> <a href="http://cesiumjs.org/demos/fishing/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/fishing.jpg" height="150"></a> <a href="http://cesiumjs.org/demos/moontrek/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/moontrek.jpg" height="150"></a> <a href="http://cesiumjs.org/demos/maven/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/maven.jpg" height="150"></a> <a href="http://cesiumjs.org/demos/spedmo/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/spedmo.jpg" height="150"></a> <a href="http://cesiumjs.org/demos/Volans/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/volans.jpg" height="150"></a> <a href="http://cesiumjs.org/demos/DRCOG/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/DRCOG.jpg" height="150"></a> <a href="http://cesiumjs.org/demos/HOWL/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/HOWL.jpg" height="150"></a> <a href="http://cesiumjs.org/demos/UNISEC/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/UNISEC.jpg" height="150"></a> <a href="http://cesiumjs.org/demos/AllisonHouse/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/AllisonHouse.jpg" height="150"></a> <a href="http://cesiumjs.org/demos/Smapshot/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/smapshot.jpg" height="150"></a> <a href="http://cesiumjs.org/demos/Ascendium/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/Ascendium.png" height="150"></a> <a href="http://cesiumjs.org/demos/PropellerPlatform/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/PropellerPlatform.png" height="150"></a> <a href="http://cesiumjs.org/demos/STORMevent/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/STORMevent.png" height="150"></a> <a href="http://cesiumjs.org/demos/EndPoint/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/EndPoint.png" height="150"></a> <a href="http://cesiumjs.org/demos/Swisstopo/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/Swisstopo.png" height="150"></a> <a href="http://cesiumjs.org/demos/Stratalogica/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/Stratalogica.jpg" height="150"></a> <a href="http://cesiumjs.org/demos/STKCZML/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/STKCZML.jpg" height="150"></a> <a href="http://cesiumjs.org/demos/STI/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/STI.jpg" height="150"></a> <a href="http://cesiumjs.org/demos/TexasGroundwater/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/TXgroundwater.png" height="150"></a> <a href="http://cesiumjs.org/demos/PearlHarbor/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/PearlHarbor.jpg" height="150"></a> <a href="http://cesiumjs.org/demos/JumpLog/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/JumpLog.png" height="150"></a> <a href="http://cesiumjs.org/demos/Soarer/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/Soarer.jpg" height="150"></a> <a href="http://cesiumjs.org/demos/IMERG/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/IMERG.jpg" height="150"></a> <a href="http://cesiumjs.org/demos/OrbitLogic/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/OrbitLogic.png" height="150"></a> <a href="http://cesiumjs.org/demos/nextPlace/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/nextPlace.jpg" height="150"></a> <a href="http://cesiumjs.org/demos/Entwine/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/Entwine.png" height="150"></a> <a href="http://cesiumjs.org/demos/FlightAirMap/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/FlightAirMap.jpg" height="150"></a> <a href="http://cesiumjs.org/demos/NYPLphotographers/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/NYPLphotographers.png" height="150"></a> <a href="http://cesiumjs.org/demos/RiftVelocity/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/RiftVelocity.jpg" height="150"></a> <a href="http://cesiumjs.org/demos/ContextCapture/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/ContextCapture.jpg" height="150"></a> <a href="http://cesiumjs.org/demos/VolumeRaycasting/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/VolumeRaycast.jpg" height="150"></a> <a href="http://cesiumjs.org/demos/TXGeothermal/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/TXGeothermal.png" height="150"></a> <a href="http://cesiumjs.org/demos/LiquidGalaxy/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/LiquidGalaxy.jpg" height="150"></a> <a href="http://cesiumjs.org/demos/KansasAviation/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/Kansas.jpg" height="150"></a> <a href="http://cesiumjs.org/demos/Desalination/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/Desal.png" height="150"></a> <a href="http://cesiumjs.org/demos/GlobalSubsurface/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/GlobalSubsurface.png" height="150"></a> <a href="http://cesiumjs.org/demos/ShakeFinder/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/ShakeFinder.jpg" height="150"></a> <a href="http://cesiumjs.org/demos/GeoPort3D/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/GeoPort3D.jpg" height="150"></a> <a href="http://cesiumjs.org/demos/HurricaneHunters/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/HurricaneHunters.jpg" height="150"></a> <a href="http://cesiumjs.org/demos/HWRF/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/HWRF.jpg" height="150"></a> <a href="http://cesiumjs.org/demos/GPMNRTView/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/GPMNRTView.jpg" height="150"></a> <a href="http://cesiumjs.org/demos/STORMVG/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/STORMVG.jpg" height="150"></a> <a href="http://cesiumjs.org/demos/CubeCities/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/CubeCities.png" height="150"></a> <a href="http://cesiumjs.org/demos/VirES/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/VirES.png" height="150"></a> <a href="http://cesiumjs.org/demos/NASAweather/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/NASAweather.jpg" height="150"></a> <a href="http://cesiumjs.org/demos/Citisens/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/citisens.jpg" height="150"></a> <a href="http://cesiumjs.org/demos/ParalogPerformance/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/ParalogPerformance.jpg" height="150"></a> <a href="http://cesiumjs.org/demos/FlightClub/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/FlightClub.jpg" height="150"></a> <a href="http://cesiumjs.org/demos/GDMOV/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/GDMOV.jpg" height="150"></a> <a href="http://cesiumjs.org/demos/CanadianLandforms/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/CanadianLandforms.jpg" height="150"></a> <a href="http://cesiumjs.org/demos/myCesiumflight/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/myCesiumflight.jpg" height="150"></a> <a href="http://cesiumjs.org/demos/PowderGlobe/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/PowderGlobe.jpg" height="150"></a> <a href="http://cesiumjs.org/demos/Flightradar24/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/Flightradar24.jpg" height="150"></a> <a href="http://cesiumjs.org/demos/CubeGlobe/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/CubeGlobe.png" height="150"></a> <a href="http://cesiumjs.org/demos/OrbitalPredictor/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/OrbitalPredictor.jpg" height="150"></a> <a href="http://cesiumjs.org/demos/RapidScat/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/RapidScat.jpg" height="150"></a> <a href="http://cesiumjs.org/demos/Wasurenai/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/Wasurenai.jpg" height="150"></a> <a href="http://cesiumjs.org/demos/N2YO/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/N2YO.jpg" height="150"></a> <a href="http://cesiumjs.org/demos/LiveTrack24/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/LiveTrack24.jpg" height="150"></a> <a href="http://cesiumjs.org/demos/PHAROS/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/PHAROS.jpg" height="150"></a> <a href="http://cesiumjs.org/demos/LSDSLAM/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/LSDSLAM.jpg" height="150"></a> <a href="http://cesiumjs.org/demos/GEFSonline/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/GEFS.jpg" height="150"></a> <a href="http://cesiumjs.org/demos/GeoglyphRail/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/GeoglyphRail.jpg" height="150"></a> <a href="http://cesiumjs.org/demos/ParaglidingLogbook/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/ParaglidingLogbook.jpg" height="150"></a> <a href="http://cesiumjs.org/demos/EarthClock/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/EarthClock.jpg" height="150"></a> <a href="http://apps.agi.com/SatelliteViewer/?Status=Operational" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/SatelliteViewer.png" height="150"></a> <a href="http://cesiumjs.org/demos/WAVE/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/WAVE.png" height="150"></a> <a href="http://cesiumjs.org/demos/Nanaimo/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/Nanaimo.png" height="150"></a> <a href="http://cesiumjs.org/demos/HereYouGo/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/HereYouGo.png" height="150"></a> <a href="http://cesiumjs.org/demos/CyberCity3D/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/CyberCity.png" height="150"></a> <a href="http://cesiumjs.org/demos/EastJapanEarthquake/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/JapanEarthquake.png" height="150"></a> <a href="http://cesiumjs.org/demos/PaperDrone/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/PaperDrone.png" height="150"></a> <a href="http://cesiumjs.org/demos/OpenWebGIS/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/OpenWebGIS.png" height="150"></a> <a href="http://cesiumjs.org/demos/3DHarvestingPlanner/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/3DHarvest1.jpg" height="150"></a> <a href="http://cesiumjs.org/2015/10/02/Red-Bull-X-Alps-in-Cesium/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/RedBull1.jpg" height="150"></a> <a href="http://cesiumjs.org/demos/GeoAnimate/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/GeoAnimate.png" height="150"></a> <a href="http://cesiumjs.org/demos/DataCurtains/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/DataCurtains.png" height="150"></a> <a href="http://cesiumjs.org/demos/DronesOculus/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/DronesOculus.jpg" height="150"></a> <a href="http://cesiumjs.org/demos/3DCityDB/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/3DCityDB.png" height="150"></a> <a href="http://cesiumjs.org/demos/GridViz/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/grid_viz.png" height="150"></a> <a href="http://cesiumjs.org/demos/TacMap/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/TacMap.png" height="150"></a> <a href="http://cesiumjs.org/demos/VirtualCitiesProject/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/VirtualCitiesProject.jpg" height="150"></a> <a href="http://cesiumjs.org/demos/MarsTrek/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/MarsTrek.png" height="150"></a> <a href="http://cesiumjs.org/demos/raceQs/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/raceQs.png" height="150"></a> <a href="http://cesiumjs.org/demos/EarthViewer/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/EarthViewerMain.jpg" height="150"></a> <a href="http://cesiumjs.org/demos/cloudahoy/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/cloudahoy.png" height="150"></a> <a href="http://cesiumjs.org/demos/VestaTrek/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/VestaTrek.png" height="150"></a> <a href="http://cesiumjs.org/demos/Taipei3DCityNavigation/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/Taipei3DCityNavigation.jpg" height="150"></a> <a href="http://cesiumjs.org/demos/4DChoroplethMap/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/4DChoroplethMap.jpg" height="150"></a> <a href="http://cesiumjs.org/demos/RikiTraki/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/RikiTraki.jpg" height="150"></a> <a href="http://cesiumjs.org/demos/EgyptianObeliskTracker/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/EgyptianObeliskTracker.jpg" height="150"></a> <a href="http://cesiumjs.org/demos/hiroshima-archive/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/hiroshima/showcase.jpg" height="150"></a> <a href="http://cesiumjs.org/demos/nasa-gibs/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/nasa-gibs/Cesium-GIBS1-md.jpg" height="150"></a> <a href="http://cesiumjs.org/demos/fodarEarth/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/fodar/fodar_03_md.jpg" height="150"></a> <a href="http://cesiumjs.org/demos/catalonia-spain/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/CataloniaSpain/overview_sm.png" height="150"></a> <a href="http://cesiumjs.org/demos/woe/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/woe.png" height="150"></a> <a href="https://cesium.com/blog/2015/03/19/eclipsetracks-interactive-solar-eclipses-with-cesium/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/eclipsetracks.png" height="150"></a> <a href="http://cesiumjs.org/demos/divvy/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/divvy.png" height="150"></a> <a href="http://cesiumjs.org/demos/geo/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/geo.png" height="150"></a> <a href="http://cesiumjs.org/demos/create/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/create.png" height="150"></a> <a href="http://cesiumjs.org/demos/cyclingthealps/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/cyclingthealps.png" height="150"></a> <a href="http://cesiumjs.org/demos/bhuvan/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/bhuvan.png" height="150"></a> <a href="http://cesiumjs.org/demos/nationalmap/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/nationalMapThumb.jpg" height="150"></a> <a href="http://cesiumjs.org/demos/gplates/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/GPlates.jpg" height="150"></a> <a href="http://cesiumjs.org/demos/ign/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/ign.png" height="150"></a> <a href="http://cesiumjs.org/demos/atovisualizer/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/atovisualizer.jpg" height="150"></a> <a href="http://cesiumjs.org/demos/sunshine/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/sunshine.jpg" height="150"></a> <a href="http://cesiumjs.org/demos/noradtrackssanta/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/noradtrackssanta.png" height="150"></a> <a href="http://cesiumjs.org/demos/doarama/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/doarama.jpg" height="150"></a> <a href="http://cesiumjs.org/demos/powdertracks/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/powdertracks.png" height="150"></a> <a href="http://cesiumjs.org/demos/earthkamexplorer/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/earthkamexplorer.png" height="150"></a> <a href="http://cesiumjs.org/demos/d3/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/d3.png" height="150"></a> <a href="http://cesiumjs.org/demos/subspace/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/subspace.png" height="150"></a> <a href="http://cesiumjs.org/demos/agsattrack/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/agsattrack.png" height="150"></a> <a href="http://cesiumjs.org/demos/weblvcsimulationviewer/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/weblvcsimulationviewer.png" height="150"></a> <a href="http://cesiumjs.org/demos/vega/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/vega.png" height="150"></a> <a href="https://cesiumjs.org/Cesium/Apps/Sandcastle/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/demos/images/Sandcastle.png" height="150"></a> <a href="http://cesiumjs.org/Cesium/Build/Apps/CesiumViewer/" target="_blank" rel="noopener"><img src="http://cesiumjs.org/images/CesiumViewer.jpg" height="150"></a> </p>]]></content>
<categories>
<category> 专业技能 </category>
</categories>
<tags>
<tag> Cesium </tag>
<tag> GIS </tag>
<tag> JavaScript </tag>
<tag> NPM </tag>
<tag> AGI </tag>
<tag> WebGL </tag>
<tag> Web </tag>
<tag> 数字地球 </tag>
</tags>
</entry>
<entry>
<title>Hexo 博客使用 emoji 表情</title>
<link href="/2018/06/30/hexo-emoji/"/>
<url>/2018/06/30/hexo-emoji/</url>
<content type="html"><![CDATA[<p>将 Markdown 转化为 html 的过程叫做 Markdown 渲染,对应的插件叫做 Markdown 渲染引擎。在 <a href="https://hexo.io/" target="_blank" rel="noopener">Hexo</a> 中默认的 Markdown 渲染器是 <a href="https://github.com/hexojs/hexo-renderer-marked" target="_blank" rel="noopener">hexo-renderer-marked</a>,这个渲染器不支持 emoji 表情。本文利用 <a href="https://github.com/crimx/hexo-filter-github-emojis" target="_blank" rel="noopener">hexo-filter-github-emojis</a> 在博客中实现 emoji 表情。</p><a id="more"></a><h3 id="1-插件安装"><a href="#1-插件安装" class="headerlink" title="1. 插件安装"></a>1. 插件安装</h3><hr><p>使用以下命令安装 <a href="https://github.com/crimx/hexo-filter-github-emojis" target="_blank" rel="noopener">hexo-filter-github-emojis</a> 插件:<br><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ npm install hexo-filter-github-emojis --save</span><br></pre></td></tr></table></figure></p><h3 id="2-启用插件"><a href="#2-启用插件" class="headerlink" title="2. 启用插件"></a>2. 启用插件</h3><hr><p>向站点配置文件 <code>hexo_root\_config.yml</code> 中添加如下设置:<br><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">githubEmojis:</span></span><br><span class="line"><span class="attr"> enable:</span> <span class="literal">true</span></span><br><span class="line"><span class="attr"> className:</span> <span class="string">github-emoji</span></span><br><span class="line"><span class="attr"> unicode:</span> <span class="literal">true</span></span><br><span class="line"><span class="attr"> styles:</span></span><br><span class="line"><span class="attr"> display:</span> <span class="string">inline</span></span><br><span class="line"><span class="attr"> vertical-align:</span> <span class="string">middle</span> <span class="comment"># Freemind适用</span></span><br><span class="line"><span class="attr"> localEmojis:</span></span><br></pre></td></tr></table></figure></p><p>具体的每个配置项含义参见 <a href="https://github.com/crimx/hexo-filter-github-emojis" target="_blank" rel="noopener">说明文档</a>。</p><h3 id="3-使用方法"><a href="#3-使用方法" class="headerlink" title="3. 使用方法"></a>3. 使用方法</h3><hr><p>在 <a href="https://www.webpagefx.com/tools/emoji-cheat-sheet/" target="_blank" rel="noopener">emoji-cheat-sheet</a> 中找到你想要的表情,然后点击即可复制。使用方法和 <a href="https://github.com" target="_blank" rel="noopener">GitHub</a> 一样,比如你想发一个笑脸 <span class="github-emoji" style="display:inline;vertical-align:middle" data-src="https://github.githubassets.com/images/icons/emoji/unicode/1f604.png?v8">😄</span> 直接输入笑脸对应的 emoji 编码 <code>:smile:</code> 就可以。来一波表情 <span class="github-emoji" style="display:inline;vertical-align:middle" data-src="https://github.githubassets.com/images/icons/emoji/unicode/1f60d.png?v8">😍</span> <span class="github-emoji" style="display:inline;vertical-align:middle" data-src="https://github.githubassets.com/images/icons/emoji/unicode/1f604.png?v8">😄</span> <span class="github-emoji" style="display:inline;vertical-align:middle" data-src="https://github.githubassets.com/images/icons/emoji/unicode/1f602.png?v8">😂</span> <span class="github-emoji" style="display:inline;vertical-align:middle" data-src="https://github.githubassets.com/images/icons/emoji/unicode/2728.png?v8">✨</span> <span class="github-emoji" style="display:inline;vertical-align:middle" data-src="https://github.githubassets.com/images/icons/emoji/unicode/1f3b5.png?v8">🎵</span> <span class="github-emoji" style="display:inline;vertical-align:middle" data-src="https://github.githubassets.com/images/icons/emoji/unicode/1f44c.png?v8">👌</span> <span class="github-emoji" style="display:inline;vertical-align:middle" data-src="https://github.githubassets.com/images/icons/emoji/unicode/1f44d.png?v8">👍</span> <span class="github-emoji" style="display:inline;vertical-align:middle" data-src="https://github.githubassets.com/images/icons/emoji/unicode/1f49c.png?v8">💜</span><br><span class="github-emoji" style="display:inline;vertical-align:middle" data-src="https://github.githubassets.com/images/icons/emoji/unicode/1f46b.png?v8">👫</span> <span class="github-emoji" style="display:inline;vertical-align:middle" data-src="https://github.githubassets.com/images/icons/emoji/unicode/1f4a7.png?v8">💧</span> <span class="github-emoji" style="display:inline;vertical-align:middle" data-src="https://github.githubassets.com/images/icons/emoji/unicode/2600.png?v8">☀</span> <span class="github-emoji" style="display:inline;vertical-align:middle" data-src="https://github.githubassets.com/images/icons/emoji/unicode/1f43c.png?v8">🐼</span> <span class="github-emoji" style="display:inline;vertical-align:middle" data-src="https://github.githubassets.com/images/icons/emoji/unicode/1f426.png?v8">🐦</span> <span class="github-emoji" style="display:inline;vertical-align:middle" data-src="https://github.githubassets.com/images/icons/emoji/unicode/1f31a.png?v8">🌚</span> <span class="github-emoji" style="display:inline;vertical-align:middle" data-src="https://github.githubassets.com/images/icons/emoji/unicode/1f30f.png?v8">🌏</span> <span class="github-emoji" style="display:inline;vertical-align:middle" data-src="https://github.githubassets.com/images/icons/emoji/unicode/1f4de.png?v8">📞</span> <span class="github-emoji" style="display:inline;vertical-align:middle" data-src="https://github.githubassets.com/images/icons/emoji/unicode/1f52b.png?v8">🔫</span> <span class="github-emoji" style="display:inline;vertical-align:middle" data-src="https://github.githubassets.com/images/icons/emoji/unicode/1f52d.png?v8">🔭</span> <span class="github-emoji" style="display:inline;vertical-align:middle" data-src="https://github.githubassets.com/images/icons/emoji/unicode/1f6b4.png?v8">🚴</span> <span class="github-emoji" style="display:inline;vertical-align:middle" data-src="https://github.githubassets.com/images/icons/emoji/unicode/1f345.png?v8">🍅</span> <span class="github-emoji" style="display:inline;vertical-align:middle" data-src="https://github.githubassets.com/images/icons/emoji/unicode/1f680.png?v8">🚀</span> <span class="github-emoji" style="display:inline;vertical-align:middle" data-src="https://github.githubassets.com/images/icons/emoji/unicode/1f1e8-1f1f3.png?v8">🇨🇳</span> <span class="github-emoji" style="display:inline;vertical-align:middle" data-src="https://github.githubassets.com/images/icons/emoji/unicode/1f21a.png?v8">🈚</span> <span class="github-emoji" style="display:inline;vertical-align:middle" data-src="https://github.githubassets.com/images/icons/emoji/unicode/1f233.png?v8">🈳</span> <span class="github-emoji" style="display:inline;vertical-align:middle" data-src="https://github.githubassets.com/images/icons/emoji/unicode/1f6af.png?v8">🚯</span> <span class="github-emoji" style="display:inline;vertical-align:middle" data-src="https://github.githubassets.com/images/icons/emoji/unicode/264e.png?v8">♎</span> <span class="github-emoji" style="display:inline;vertical-align:middle" data-src="https://github.githubassets.com/images/icons/emoji/unicode/00a9.png?v8">©</span>。</p>]]></content>
<categories>
<category> Hexo建站 </category>
</categories>
<tags>
<tag> Hexo </tag>
<tag> emoji </tag>
</tags>
</entry>
<entry>
<title>开放航空航天仿真工具集锦</title>
<link href="/2018/06/28/OpenTools/"/>
<url>/2018/06/28/OpenTools/</url>
<content type="html"><![CDATA[<p>小时候,晴朗的天空总是蔚蓝,就连那连绵不断的山峰也无法遮挡住那深邃的远方。曾几何时,天空中偶尔会飞过一架飞机,于是众小伙伴奔走相告,哪怕飞机的轰鸣早已响彻耳旁。有时,我们会目不转睛地望着飞机,直到它飞出视野范围之外,并梦想着有一天能够像飞机一样在天空中翱翔,到我们想去的远方。</p><p>依稀记得,那些年,为了躲避夏日的炎热,我们姐妹三人常常在优静的晚上躺在繁星闪烁的夜空下,仰望宇宙的苍穹。那时,我们的视力好到可以看见亮度十分暗淡的人造卫星飞越上空。而为了等待流星划过夜空的美丽瞬间,我们更是轮流看守,不放过任何一次机会。令我们感到十分惊讶的是,我们几乎总是能在深夜欣赏到流星划过的瞬间,甚至有时还会中头奖,来一次令人激动不已的流星雨。</p><p>童年纵然逝去,但我相信每个人心中都有个孩子,每个人心中都留有一份童真,每个人心中都深藏童年的美好记忆。现在看来,长大可并不是一件好事,但是爸妈却不这么想,天天盼望着我们长大成人,并能有所作为。</p><a id="more"></a><p>童年对头顶上那片天空产生的特殊情怀使得我踏上了航空航天的学习道路,然而多年以来却术无专攻、学无所成。唯一值得欣慰的是,这么多年来,我学会了一个原则,那就是做任何事都不要首先尝试重新发明轮子,而要学着制造汽车。用牛顿先生的话说,就是:“如果说我比别人看得更远些,那是因为我站在了巨人的肩膀上。”于是,当我需要某种工具时,必先用 <a href="www.google">Google</a> 搜寻一番,哪怕是 <a href="www.bing.com">Bing</a> 也是可以的。时至今日才猛然发现,在开放的世界竟然有那么多实用的工具可以为我所用,即使是专业特性超强的航空航天领域。</p><p>本文并非一篇教读者如何在庞杂的信息世界里搜索合适的工具,而是直接授之以鱼,将笔者已知的航空航天领域十分优秀的开放仿真工具介绍给大家,并辅以相应的入门级教程。这其实是一项十分艰难的工作,因为大部分开放软件的文档都较为匮乏,且绝大多数由英文写成。这倒不是致命伤,关键在于,笔者不可能把每一款软件都学会,然后写出教程。从时间和精力的角度来讲,这都是不现实的。所以本文将重点对功能相对强大且笔者认为十分有研究价值的工具软件展开介绍,希望能抛砖引玉,吸引更多的爱好者加入到本文的撰写过程中来。</p><p>本文定性为航空航天仿真工具的相关介绍和研究,主要涉及航空航天领域大量优秀的开放仿真软件,不会涉及任何与开放硬件相关的话题。这里的开放是指读者可以免费获取资源,而无需为其支付任何使用费用。文中介绍的工具包含了很多开源的软件,而开源是开放的子集,开源的软件绝大多数是免费的。此外,开源软件最鲜明的特点是其源代码必定公开,并可以通过互联网或其它媒介自由获取。书中并不包含那些停止开发或多年未曾更新的工具软件,因为笔者认为,只有历经岁月的洗礼,才能称得上优秀,并最具研究价值。原则上,长达五年未曾更新的软件不会出现在本文的分类之中,已经包含在本文中的软件如果在未来五年之内不再更新,亦将在下一次更新过程中被剔除。</p><p>是开源赋予了这个时代更多的活力,而开放则将知识的种子播撒开来。知识本就不应该被束之高阁,即使是本文所讨论的航空航天。衷心地希望本文能够帮助读者了解航空航天,了解开放的世界,并最终找到自己钟爱的航空航天仿真工具。 </p><hr><h2 id="第零篇-基本信息"><a href="#第零篇-基本信息" class="headerlink" title="第零篇 基本信息"></a>第零篇 基本信息</h2><hr><h3 id="0-1-版本信息"><a href="#0-1-版本信息" class="headerlink" title="0.1 版本信息"></a>0.1 版本信息</h3><hr><h4 id="0-1-1-更新记录"><a href="#0-1-1-更新记录" class="headerlink" title="0.1.1 更新记录"></a>0.1.1 更新记录</h4><hr><ul><li>2016/06/28 v1.0 建立基本框架,对每款软件进行较为完整的介绍,并不涉及任何操作实践,甚至不包括如何安装软件。</li></ul><h4 id="0-1-2-写作计划"><a href="#0-1-2-写作计划" class="headerlink" title="0.1.2 写作计划"></a>0.1.2 写作计划</h4><hr><ul><li>2019/04/05 v1.1 添加 <a href="http://openrocket.sourceforge.net/" target="_blank" rel="noopener">OpenRocket</a> 安装教程。</li><li>2019/04/15 v1.2 添加 <a href="http://orbit.medphys.ucl.ac.uk/index.html" target="_blank" rel="noopener">Orbiter</a> 入门教程:冲破卡门线。</li><li>2019/04/25 v1.3 添加 <a href="http://gmatcentral.org/display/GW/GMAT+Wiki+Home" target="_blank" rel="noopener">GMAT</a> 入门教程:<a href="https://en.wikipedia.org/wiki/Molniya_orbit" target="_blank" rel="noopener">Molniya</a> 轨道预报。</li><li>2019/05/15 v1.4 添加 <a href="http://orbit.medphys.ucl.ac.uk/index.html" target="_blank" rel="noopener">Orbiter</a> 入门教程:造访国际空间站。</li><li>2019/05/25 v1.5 添加 <a href="http://eyes.nasa.gov/" target="_blank" rel="noopener">NASA’s Eyes</a> 入门教程:在家畅游太阳系。</li><li>2019/06/15 v1.6 添加 <a href="http://orbit.medphys.ucl.ac.uk/index.html" target="_blank" rel="noopener">Orbiter</a> 入门教程:带她一起去月球。</li><li>2019/06/25 v1.7 添加 <a href="http://gmatcentral.org/display/GW/GMAT+Wiki+Home" target="_blank" rel="noopener">GMAT</a> 入门教程:霍曼转移。</li><li>2019/07/15 v1.8 添加 <a href="http://orbit.medphys.ucl.ac.uk/index.html" target="_blank" rel="noopener">Orbiter</a> 进阶教程:<a href="https://sourceforge.net/projects/transx/" target="_blank" rel="noopener">TransX</a> 行星际航行指南。</li><li>2019/07/25 v1.9 添加 <a href="http://orbit.medphys.ucl.ac.uk/index.html" target="_blank" rel="noopener">Orbiter</a> 进阶教程:红色行星之旅行。</li><li>2019/08/15 v2.0 添加 <a href="http://orbit.medphys.ucl.ac.uk/index.html" target="_blank" rel="noopener">Orbiter</a> 高级教程:EVA & EDL。</li></ul><h3 id="0-2-使用协议"><a href="#0-2-使用协议" class="headerlink" title="0.2 使用协议"></a>0.2 使用协议</h3><hr><p>本文采用 <a href="http://creativecommons.org/" target="_blank" rel="noopener">Creative Commons</a> 使用协议,具体内容请参照 <a href="http://creativecommons.org/" target="_blank" rel="noopener">Creative Commons</a> 协议官方网站。</p><hr><h2 id="第一篇-航空工具集"><a href="#第一篇-航空工具集" class="headerlink" title="第一篇 航空工具集"></a>第一篇 航空工具集</h2><hr><h3 id="1-0-内容概述"><a href="#1-0-内容概述" class="headerlink" title="1.0 内容概述"></a>1.0 内容概述</h3><hr><p>本篇将对开放航空工具进行分类归纳,由于笔者已不再从事航空学方面的研究工作,所以很少再接触新的航空工具软件,文中涉及的工具皆为笔者早年间熟知的软件,具有一定的代表性。同时希望读者能够分享信息,提供更多关于开放航空仿真工具软件最新的发展状况。</p><p>本篇含有三个部分的内容,在广度和深度方面都不如航天工具集篇详实,但其中却不乏重量级的工具。如 <a href="http://www.flightgear.org/" target="_blank" rel="noopener">FlightGear</a> 和 <a href="http://openrocket.sourceforge.net" target="_blank" rel="noopener">OpenRocket</a>,它们在各自的领域都有着极大的影响力。特别值得一提的是它们的源代码都是开放的,使得用户可以进行深层次的探究。</p><p>笔者作为一名模拟飞行爱好者,曾经使用过 <a href="https://www.x-plane.com/" target="_blank" rel="noopener">X-Plane</a>,如今对 <a href="http://orbit.medphys.ucl.ac.uk/index.html" target="_blank" rel="noopener">Orbiter</a> 有较为系统的学习。虽然只是在虚拟的环境中体验飞行,但这也未曾不失为一种乐趣,而且模拟带着浓厚的教育意味,在此过程中可以学得一些书本之外的知识。</p><h3 id="1-1-模拟飞行"><a href="#1-1-模拟飞行" class="headerlink" title="1.1 模拟飞行"></a>1.1 模拟飞行</h3><hr><p><img src="/images/OTCAAS/Images2/FlightGear/FG_concorde_landing_at_london_gatwick.jpg" width="100%" height="100%"></p><p><code>图注:“协和”号即将降落在伦敦盖特威克机场跑道上</code></p><h4 id="1-1-1-FlightGear"><a href="#1-1-1-FlightGear" class="headerlink" title="1.1.1 FlightGear"></a>1.1.1 <a href="http://www.flightgear.org/" target="_blank" rel="noopener">FlightGear</a></h4><hr><p><img src="/images/OTCAAS/Images2/FlightGear/Fglogosm.jpg" width="100%" height="100%"></p><p><a href="http://www.flightgear.org/" target="_blank" rel="noopener">FlightGear</a> 是一款开源的跨平台模拟飞行器。该项目始于 1997 年,经过最初十年的开发,于 2007 年 12 月发布了功能较为完善的 <code>v1.0.0</code> 版本。其最新版本为 2019 年 1 月 29 日发布的 <code>v2018.3.2</code> 版本,软件授权协议为 <a href="http://www.gnu.org/copyleft/gpl.html" target="_blank" rel="noopener">GPL(GNU General Public License)</a>。从 <a href="http://www.flightgear.org/" target="_blank" rel="noopener">FlightGear</a> 官方手册可知,FlightGear 具有以下诸多特点:</p><p><strong>民用性</strong></p><blockquote><p>该项目主要针对民航,用于通用航空和民航飞行模拟。<a href="http://www.flightgear.org/" target="_blank" rel="noopener">FlightGear</a> 的长远目标是可以作为 FAA 的飞行训练模拟器;<a href="http://www.flightgear.org/" target="_blank" rel="noopener">FlightGear</a> 不能进行空战模拟可能会让您感觉有些失望。但我们并没有完全排除 <a href="http://www.flightgear.org/" target="_blank" rel="noopener">FlightGear</a> 的这部分功能,只是因为缺少空战模拟的开发人员所以还没有实现这部分功能。</p></blockquote><p><strong>跨平台</strong></p><blockquote><p>项目所有开发人员都希望代码能不依赖平台,因此 <a href="http://www.flightgear.org/" target="_blank" rel="noopener">FlightGear</a> 能运行在多种电脑硬件和操作系统上。当前的代码支持 Linux(任何分支和平台)、Windows XP/Vista/7/8/10( Intel/AMD 平台)、Mac OS X、BSD UNIX & Sun Solaris 等等。目前为止,还没有其它任何一款模拟飞行软件(不管是商业化的还是免费的)支持如此多的平台。</p></blockquote><p><strong>开放性</strong></p><blockquote><p><a href="http://www.flightgear.org/" target="_blank" rel="noopener">FlightGear</a> 不限定在任何固定开发人员手里,能在项目中发挥作用任何人都是受欢迎的。此项目的版权在自由软件基金会的手中,虽然 GPL 现在还不太被人们了解,但它已经得到法律的保护。在这个体系中,GPL 允许您复制和免费贡献代码,只要你喜欢这样做。然而,你必须免费提供源代码给每个需要它的人,且必须保留原始著作权。简而言之,GPL 允许你做任何除了收费之外的事情。</p></blockquote><p><strong>扩展性</strong></p><blockquote><p>从设计之初开始,<a href="http://www.flightgear.org/" target="_blank" rel="noopener">FlightGear</a> 的场景地形、飞机模型、内部参数、API 和其它任何东西都是对用户透明并有文档记录的。就算没有任何开发文档,您也能参看源代码来了解 <a href="http://www.flightgear.org/" target="_blank" rel="noopener">FlightGear</a> 是如何工作的。<a href="http://www.flightgear.org/" target="_blank" rel="noopener">FlightGear</a> 开发人员的目标是建立是一个能自由进行场景设计、飞行面板设计、ATC 设计及声音驱动的基本引擎。<a href="http://www.flightgear.org/" target="_blank" rel="noopener">FlightGear</a> 项目凝结了来自全世界开发者的智慧,我们希望此项目所有的开发人员和用户都能从中获益。</p></blockquote><h4 id="1-1-2-Plane-Maker"><a href="#1-1-2-Plane-Maker" class="headerlink" title="1.1.2 Plane-Maker"></a>1.1.2 <a href="https://developer.x-plane.com/manuals/planemaker/" target="_blank" rel="noopener">Plane-Maker</a></h4><hr><p><img src="/images/OTCAAS/Images2/Plane-Maker.png" width="100%" height="100%"></p><p><a href="https://developer.x-plane.com/manuals/planemaker/" target="_blank" rel="noopener">Plane-Maker</a> 是随 <a href="(http://www.x-plane.com/desktop/home/">X-Plane</a> 免费发布的一款内部模型插件开发工具,专门供 <a href="https://www.x-plane.com/" target="_blank" rel="noopener">X-Plane</a> 插件开发者为其开发飞机、人物、车辆及地景模型等第三方插件。用户只需安装 <a href="https://www.x-plane.com/desktop/try-it/" target="_blank" rel="noopener">X-Plane Demo</a>,而非购买完整的 <a href="https://www.x-plane.com/" target="_blank" rel="noopener">X-Plane</a> 软件包,即可获得 <a href="https://developer.x-plane.com/manuals/planemaker/" target="_blank" rel="noopener">Plane-Maker</a> 进行插件开发。</p><p><a href="https://developer.x-plane.com/manuals/planemaker/" target="_blank" rel="noopener">Plane-Maker</a> 虽然是免费软件,但它的功能却异常强大。首先,它给开发者提供了一个十分方便的 GUI 集成环境,从而使得开发者可以很轻松地在该环境中创建各种类型的模型;其次,<a href="https://developer.x-plane.com/manuals/planemaker/" target="_blank" rel="noopener">Plane-Maker</a> 与 <a href="https://www.x-plane.com/" target="_blank" rel="noopener">X-Plane</a> 的交互过程既简单又高效,且在 <a href="https://developer.x-plane.com/manuals/planemaker/" target="_blank" rel="noopener">Plane-Maker</a> 中开发的飞机插件可以直接导入 <a href="https://www.x-plane.com/" target="_blank" rel="noopener">X-Plane</a> 这一高仿真度的模拟飞行环境中进行试飞;此外,<a href="https://developer.x-plane.com/manuals/planemaker/" target="_blank" rel="noopener">Plane-Maker</a> 能够读取来自外部三维软件(如 <a href="https://www.blender.org/" target="_blank" rel="noopener">Blender</a>、<a href="http://www.sketchup.com/" target="_blank" rel="noopener">Google Sketchup</a>、<a href="https://www.inivis.com/" target="_blank" rel="noopener">AC3D</a> 及 <a href="https://www.autodesk.com/products/3ds-max/overview" target="_blank" rel="noopener">3DS Max</a> 等)所构建的各种模型。</p><p>事实上,<a href="https://developer.x-plane.com/manuals/planemaker/" target="_blank" rel="noopener">Plane-Maker</a> 完全是 <a href="https://www.x-plane.com/" target="_blank" rel="noopener">X-Plane</a> 团队为提升自身竞争力而为第三方开发者量身打造的插件开发工具。时间证明,这种做法是成功的。因为,如今 <a href="https://www.x-plane.com/" target="_blank" rel="noopener">X-Plane</a> 的插件开发者已经为其开发了大量的优秀插件,这间接增加了 <a href="https://www.x-plane.com/" target="_blank" rel="noopener">X-Plane</a> 对用户的吸引力。你可以从 <a href="https://www.x-plane.com/" target="_blank" rel="noopener">X-Plane</a> 官方论坛下载到由众多爱好者开发的各种插件。当然,如果你想设计一架属于自己的机模,我相信 <a href="https://developer.x-plane.com/manuals/planemaker/" target="_blank" rel="noopener">Plane-Maker</a> 一定是不错的选择。</p><h4 id="1-1-3-CRRCSim"><a href="#1-1-3-CRRCSim" class="headerlink" title="1.1.3 CRRCSim"></a>1.1.3 <a href="http://sourceforge.net/projects/crrcsim/" target="_blank" rel="noopener">CRRCSim</a></h4><hr><p><img src="/images/OTCAAS/Images2/crrcsim.png" width="100%" height="100%"></p><p><a href="http://sourceforge.net/projects/crrcsim/" target="_blank" rel="noopener">CRRCSim</a> 是一款基于 GPL 发布的开源遥控模型飞机飞行模拟器,由 C 和 C++ 语言编写而成,OpenGL 作为图形驱动引擎。<a href="http://sourceforge.net/projects/crrcsim/" target="_blank" rel="noopener">CRRCSim</a> 可运行在主流的操作系统平台之上,多数 Linux 发行版本、Mac OS X 及 Microsoft Windows。使用 <a href="http://sourceforge.net/projects/crrcsim/" target="_blank" rel="noopener">CRRCSim</a> 不仅可以帮助你学习如何操控遥控模型飞机,并在模拟环境中提高遥控操纵技能,还可以帮助你测试新设计的飞机模型。</p><h3 id="1-2-飞行动力学仿真"><a href="#1-2-飞行动力学仿真" class="headerlink" title="1.2 飞行动力学仿真"></a>1.2 飞行动力学仿真</h3><hr><p><img src="/images/OTCAAS/Images2/FlightGear/JSBSim_GUI_3.png" width="100%" height="100%"></p><p><code>图注:基于 JSBSim 开发的 MATLAB/Simulink 仿真模块</code></p><h4 id="1-2-1-JSBSim"><a href="#1-2-1-JSBSim" class="headerlink" title="1.2.1 JSBSim"></a>1.2.1 <a href="http://sourceforge.net/projects/jsbsim/" target="_blank" rel="noopener">JSBSim</a></h4><hr><p><img src="/images/OTCAAS/Images2/FlightGear/UIUC.jpg" width="100%" height="100%"></p><p><a href="http://sourceforge.net/projects/jsbsim/" target="_blank" rel="noopener">JSBSim</a> 是一套开源的飞行动力学模型软件库,目前为 <a href="http://www.flightgear.org/" target="_blank" rel="noopener">FlightGear</a> 两大常用的飞行动力学引擎之一。此外,<a href="http://sourceforge.net/projects/jsbsim/" target="_blank" rel="noopener">JSBSim</a> 还被 OpenEaagles 模拟框架所使用,并可以单独被其它程序调用,以此来创建一些模拟工具。<br><a href="http://sourceforge.net/projects/jsbsim/" target="_blank" rel="noopener">JSBSim</a> 于 1996 年被开发并使用至今,可运行在 Linux、Mac OS X 及 Microsoft Windows 等多种操作系统平台上,它由 C++ 编写而成,使用 XML 解析配置文件。</p><h4 id="1-2-2-YASim"><a href="#1-2-2-YASim" class="headerlink" title="1.2.2 YASim"></a>1.2.2 <a href="http://wiki.flightgear.org/YASim" target="_blank" rel="noopener">YASim</a></h4><hr><p><img src="/images/OTCAAS/Images2/FlightGear/yasim_tut1.png" width="100%" height="100%"></p><p><a href="http://wiki.flightgear.org/YASim" target="_blank" rel="noopener">YASim</a> 是 <a href="http://www.flightgear.org/" target="_blank" rel="noopener">FlightGear</a> 两大常用的飞行动力学引擎之一,它采用飞机的几何外形来生成其飞行特性。虽然这种方法只能是近似,但在获得初始结果后可以对飞行参数作进一步调整,以此来达到逼真的仿真效果。如果你已经获得飞机可靠的飞行数据(比如风洞数据),或是想生成超级真实的仿真模型,那么 <a href="http://sourceforge.net/projects/jsbsim/" target="_blank" rel="noopener">JSBSim</a> 应该是更好的选择。但如果你手中缺乏飞行数据,只知道飞机的几何模型,那么 <a href="http://wiki.flightgear.org/YASim" target="_blank" rel="noopener">YASim</a> 则能提供可以满足绝大多数仿真需求的解决方案。此外,<a href="http://wiki.flightgear.org/YASim" target="_blank" rel="noopener">YASim</a> 还包含直升机飞行动力学模型。</p><h3 id="1-3-飞行性能分析"><a href="#1-3-飞行性能分析" class="headerlink" title="1.3 飞行性能分析"></a>1.3 飞行性能分析</h3><hr><p><img src="/images/OTCAAS/Images2/OpenRocket_moonflight.jpg" width="100%" height="100%"></p><p><code>图注:OpenRocket Photo Studio生成的探空火箭云层穿越想象图</code></p><h4 id="1-3-1-XFLR5"><a href="#1-3-1-XFLR5" class="headerlink" title="1.3.1 XFLR5"></a>1.3.1 <a href="http://www.xflr5.com/xflr5.htm" target="_blank" rel="noopener">XFLR5</a></h4><hr><p><img src="/images/OTCAAS/Images2/XLDR5_Analyser.png" width="100%" height="100%"></p><p><a href="http://www.xflr5.com/xflr5.htm" target="_blank" rel="noopener">XFLR5</a> 是一个在低雷诺数下翼型、机翼和飞机的分析工具,使用 <a href="http://web.mit.edu/drela/Public/web/xfoil/" target="_blank" rel="noopener">Xfoil</a>(用于分析翼型气动力的共享软件,由 MIT 航空航天系的 <code>Prof. Mark Drela</code> 和 <code>H. Youngren</code> 开发)作为求解器,<a href="https://www.qt.io" target="_blank" rel="noopener">QT</a> 开发用户界面。 其主要功能包括:</p><ul><li>基于 <a href="http://web.mit.edu/drela/Public/web/xfoil/" target="_blank" rel="noopener">Xfoil</a> 翼型分析程序的直接和逆向分析能力;</li><li>基于升力线法、涡格法和 3D 面元法的机翼设计和分析。</li></ul><p><a href="https://sourceforge.net/projects/xflr5/files/" target="_blank" rel="noopener">XFLR5 v6</a> 版本引入了模型飞机的稳定性分析。</p><h4 id="1-3-2-OpenRocket"><a href="#1-3-2-OpenRocket" class="headerlink" title="1.3.2 OpenRocket"></a>1.3.2 <a href="http://openrocket.sourceforge.net" target="_blank" rel="noopener">OpenRocket</a></h4><hr><p><img src="/images/OTCAAS/Images2/OpenRocket_Orion4upscale.jpg" width="100%" height="100%"></p><p><a href="http://openrocket.sourceforge.net" target="_blank" rel="noopener">OpenRocket</a> 是一款功能强大的模型火箭仿真软件,你可以用它设计你的模型火箭,然后对其进行模拟试飞,得到其仿真性能参数,并加以改进。<a href="http://openrocket.sourceforge.net" target="_blank" rel="noopener">OpenRocket</a> 包括以下主要功能:</p><ul><li>六自由度飞行仿真</li><li>自动设计优化</li><li>实时高度、速度及加速度仿真显示</li><li>对火箭串并联级的支持</li><li>跨平台(基于 <a href="https://java.com" target="_blank" rel="noopener">Java</a>)</li></ul><p><a href="http://openrocket.sourceforge.net" target="_blank" rel="noopener">OpenRocket</a> 以 GPL 开源协议发布,这意味着你可以自由地使用它。正如其它开源软件一样,<a href="http://openrocket.sourceforge.net" target="_blank" rel="noopener">OpenRocket</a> 提供完整的项目源代码(由 <a href="https://java.com" target="_blank" rel="noopener">Java</a> 语言编写而成),这使得感兴趣的模型火箭爱好者可以理解其内部运作机理,并对其进行功能扩展。</p><h4 id="1-3-3-Sumo"><a href="#1-3-3-Sumo" class="headerlink" title="1.3.3 Sumo"></a>1.3.3 <a href="http://www.larosterna.com/sumo.html" target="_blank" rel="noopener">Sumo</a></h4><hr><p><img src="/images/OTCAAS/Images2/Sumo.png" width="100%" height="100%"></p><p><a href="http://www.larosterna.com/sumo.html" target="_blank" rel="noopener">Sumo</a> 是由一位在 <a href="http://www.kth.se/en" target="_blank" rel="noopener">皇家理工学院</a>(位于瑞典首都斯德哥尔摩)飞行动力学实验室工作的研究员基于 C++ 开发的一款飞行器建模与网格生成工具软件。</p><p><a href="http://www.larosterna.com/sumo.html" target="_blank" rel="noopener">Sumo</a> 能够快速生成飞机的几何模型,并自动对其表面进行网格划分。但它并不是一套 CAD 系统,而是一个简单易用的画板,专门用于飞机的外形结构建模。<a href="http://www.larosterna.com/sumo.html" target="_blank" rel="noopener">Sumo</a> 发型版本中自带一款叫做 <a href="http://www.larosterna.com/scope.html" target="_blank" rel="noopener">Scope</a> 的气动弹性可视化工具,用于显示流体势能求解器 dwfs 生成的分析结果(如飞机表面数据、颤振振型及飞行轨迹)。另外,<a href="http://www.larosterna.com/scope.html" target="_blank" rel="noopener">Scope</a> 还能读取 NASTRAN 数据文件、模型分析结果和动画本征模态形式。</p><hr><h2 id="第二篇-航天工具集"><a href="#第二篇-航天工具集" class="headerlink" title="第二篇 航天工具集"></a>第二篇 航天工具集</h2><hr><p><img src="/images/OTCAAS/Goddard.png" width="100%" height="100%"></p><p><code>图注:航天先驱“罗伯特·戈达得”和他的名言</code></p><h3 id="2-0-内容概述"><a href="#2-0-内容概述" class="headerlink" title="2.0 内容概述"></a>2.0 内容概述</h3><hr><p>本篇将对开放航天工具进行分类归纳, 由于笔者现今从事航天学方面的研究工作,所以接触的航天工具软件比航空更加广泛,其中一些工具早在几年前已经有所了解,但出于时间和兴趣的关系没有深入研究。</p><p>本篇含有三部分内容,但其实每部分介绍的工具软件在功能上存在着交叉。比如 <a href="http://orbit.medphys.ucl.ac.uk/index.html" target="_blank" rel="noopener">Orbiter</a> 被划分在了 <code>2.1 航天交互式仿真</code>,该部分内容主要收集具有很强人机交互性的航天仿真软件,但 <a href="http://orbit.medphys.ucl.ac.uk/index.html" target="_blank" rel="noopener">Orbiter</a> 的功能并不仅限于此,其内部包含着丰富的航天动力学理论知识。之所以进行这样的分类,是因为各款工具软件有着功能侧重点之分,需体现出它们的功能特色及主要用途。</p><h3 id="2-1-航天交互式仿真"><a href="#2-1-航天交互式仿真" class="headerlink" title="2.1 航天交互式仿真"></a>2.1 航天交互式仿真</h3><hr><p>本节将对 <a href="http://orbit.medphys.ucl.ac.uk/index.html" target="_blank" rel="noopener">Orbiter</a> 、<a href="https://eyes.nasa.gov/" target="_blank" rel="noopener">EYES ON THE SOLAR SYSTEM</a> 和 <a href="http://www.shatters.net/celestia/" target="_blank" rel="noopener">Celestia</a> 三款极具交互性的航天仿真工具软件展开介绍,之所以将三者单独成章是因为它们具有较为相似的功能特性,即强大的交互能力以及令人惊艳的视觉效果。下图截自 <a href="https://eyes.nasa.gov/" target="_blank" rel="noopener">EYES ON THE SOLAR SYSTEM</a>,展示的是土星那美丽而又神秘的巨大光环。计算机图形显示技术的飞速发展使得我们在个人计算机上欣赏这一美景得以成为现实。</p><p><img src="/images/OTCAAS/Images2/NASA's Eyes Saturn.png" width="100%" height="100%"></p><p><code>图注:EYES ON THE SOLAR SYSTEM 中的土星和它那美丽而又神秘的巨大光环</code></p><h4 id="2-1-1-Orbiter-Space-Flight-Simulator"><a href="#2-1-1-Orbiter-Space-Flight-Simulator" class="headerlink" title="2.1.1 Orbiter Space Flight Simulator"></a>2.1.1 <a href="http://orbit.medphys.ucl.ac.uk/index.html" target="_blank" rel="noopener">Orbiter Space Flight Simulator</a></h4><hr><p><img src="/images/OTCAAS/Images2/Oribter_intro.png" width="100%" height="100%"></p><p><a href="http://orbit.medphys.ucl.ac.uk/index.html" target="_blank" rel="noopener">Orbiter</a> 是一款功能异常强大的免费太空飞行模拟器,它可以带你冲破卡门线,驶入浩瀚的星空,体味驾驶宇宙飞船的快感。Orbiter 的核心部分由 <code>Dr. Martin Schweiger</code> 团队开发,第一个版本于 2000 年 11 月 27 日发布,最新稳定版本为 <code>Orbiter 2016</code>。通常,官方发布的 <a href="http://orbit.medphys.ucl.ac.uk/index.html" target="_blank" rel="noopener">Orbiter</a> 版本只是基础版(Base Edition),用户要想获得绝佳的飞行体验还需要下载第三方扩展插件,如 <a href="http://orbiter.dansteph.com/" target="_blank" rel="noopener">DanSteph</a> 开发的 <a href="http://orbiter.dansteph.com/forum/index.php?page=download" target="_blank" rel="noopener">OrbiterSound</a>,及社区开发用于支持 DirectX9 图形渲染的 <a href="http://users.kymp.net/~p501474a/D3D9Client/" target="_blank" rel="noopener">D3D9Client</a> 客户端。</p><p><a href="http://orbit.medphys.ucl.ac.uk/index.html" target="_blank" rel="noopener">Orbiter</a> 能够十分真实地模拟航天器在轨运行的轨迹,这源于隐藏在视觉背后的航天动力学理论知识。当用户驾驶飞船翱翔在太阳系时,实际上是沉侵于太阳强大的引力场中。</p><p>更多关于 <a href="http://orbit.medphys.ucl.ac.uk/index.html" target="_blank" rel="noopener">Orbiter</a> 的介绍,可跳转小编的另一篇博文:<a href="https://spacefan.github.io/2016/03/25/orbiter-intro/" target="_blank" rel="noopener">Orbiter 模拟航天入门攻略 - Ch00</a>。</p><h4 id="2-1-2-EYES-ON-THE-SOLAR-SYSTEM"><a href="#2-1-2-EYES-ON-THE-SOLAR-SYSTEM" class="headerlink" title="2.1.2 EYES ON THE SOLAR SYSTEM"></a>2.1.2 <a href="https://eyes.nasa.gov/" target="_blank" rel="noopener">EYES ON THE SOLAR SYSTEM</a></h4><hr><p><img src="/images/OTCAAS/Images2/JPL-bg-eotss.png" width="100%" height="100%"></p><p><a href="https://eyes.nasa.gov/" target="_blank" rel="noopener">Eyes on the Solar System</a> 是一个包含了众多 NASA 真实航天任务数据的三维仿真环境。你可以用 Eyes 在自己的电脑上畅游太阳系:登上小行星,和“旅行者”号一起飞向太阳系的边缘,并实时观看整个太阳系的运动情况。总之,在 <a href="https://eyes.nasa.gov/" target="_blank" rel="noopener">Eyes</a> 的虚拟世界里,所有操作都取决于你,空间和时间任由你掌控。而以这种前所未有的方式探索太阳系,只需你点击 <strong>“Launch”</strong> 按钮,或是选择一个特定的任务模块即可。</p><h4 id="2-1-3-Celestia"><a href="#2-1-3-Celestia" class="headerlink" title="2.1.3 Celestia"></a>2.1.3 <a href="http://www.shatters.net/celestia/" target="_blank" rel="noopener">Celestia</a></h4><hr><p><img src="/images/OTCAAS/Images2/Celestia_Europe_Io_Jupiter.jpg" width="100%" height="100%"></p><p><a href="http://www.shatters.net/celestia/" target="_blank" rel="noopener">Celestia</a> 是一款由 <code>Chris Claurel</code> 主导开发的开源天文软件,以 OpenGL 为三维图形引擎,跟据 <a href="https://naif.jpl.nasa.gov/naif/" target="_blank" rel="noopener">JPL/SPICE</a> 星历表模拟宇宙中的各种天体。</p><p>通过 <a href="http://www.shatters.net/celestia/" target="_blank" rel="noopener">Celestia</a>,用户不仅可以鸟瞰地球,还可以畅游太阳系,以及其它多达 10 万颗星体,甚至是银河系以外的星座。在 <a href="http://www.shatters.net/celestia/" target="_blank" rel="noopener">Celestia</a> 中,你可以远观星云,也可以近看飞行器,所有的查看和缩放都非常平滑。</p><p><a href="http://www.shatters.net/celestia/" target="_blank" rel="noopener">Celestia</a> 包含了巨大的天文数据库,恒星、行星、卫星、彗星以及太空飞船。如果自带的这些天体模型还满足不了你的话,你可以从 <a href="http://www.shatters.net/celestia/" target="_blank" rel="noopener">Celestia</a> 相关社区下载并安装扩展插件。当你在 <a href="http://www.shatters.net/celestia/" target="_blank" rel="noopener">Celestia</a> 中飞行时,不会受到速度、方向及时间的限制,可以以任何角度观赏小至人造卫星、大至星系的各种天体。</p><p><a href="http://www.shatters.net/celestia/" target="_blank" rel="noopener">Celestia</a> 是在 GPL 开源许可协议下发布的自由软件,目前已有 Microsoft Windows、Mac OS X 和 Linux 发行版本。此外,<a href="https://www.nasa.gov/" target="_blank" rel="noopener">NASA</a> 和 <a href="https://www.esa.int/ESA" target="_blank" rel="noopener">ESA</a> 已将 <a href="http://www.shatters.net/celestia/" target="_blank" rel="noopener">Celestia</a> 用于教育和推广项目,并将其作为轨道分析软件的接口。</p><h3 id="2-2-航天动力学仿真"><a href="#2-2-航天动力学仿真" class="headerlink" title="2.2 航天动力学仿真"></a>2.2 航天动力学仿真</h3><hr><p>本节将对几款重量级的航天动力学仿真工具展开介绍,它们绝大多数是开源的,而且功能十分强大。此外,互联网上存在很多开放的航天动力学仿真工具,但笔者并未将它们一一囊括在本节。这样做的原因有很多,最主要的原因是很多工具既不成熟也不完整,而且大多数以库的形式存在,对用户自身的编程能力及专业要求过高。</p><p>航天动力学的主要任务是对航天器的轨道特性进行分析,传统的开普勒体系和牛顿力学并不能精确地反应真实的情况,所以考虑各种摄动力对航天器的影响显得尤为重要。下图截自 <a href="http://gmatcentral.org" target="_blank" rel="noopener">GMAT</a>,是对考虑地球非球形引力摄动的 LEO 圆轨道所做的长时间预报仿真,可以很明显地看出,该轨道的升交点赤经在地球非球形引力摄动的长时间作用下发生了很大的漂移。</p><p><img src="/images/OTCAAS/Images2/GmatScreenShot.png" width="100%" height="100%"></p><p><code>图注:考虑地球非球形引力摄动的LEO圆轨道预报仿真</code></p><h4 id="2-2-1-General-Mission-Analysis-Tool"><a href="#2-2-1-General-Mission-Analysis-Tool" class="headerlink" title="2.2.1 General Mission Analysis Tool"></a>2.2.1 <a href="http://gmatcentral.org" target="_blank" rel="noopener">General Mission Analysis Tool</a></h4><hr><p><img src="/images/OTCAAS/Images2/GMATSplashScreen.png" width="100%" height="100%"></p><p><a href="http://gmatcentral.org/display/GW/GMAT+Wiki+Home" target="_blank" rel="noopener">GMAT</a> (<strong>G</strong>eneral <strong>M</strong>ission <strong>A</strong>nalysis <strong>T</strong>ool) 是一套由 <a href="http://www.nasa.gov/" target="_blank" rel="noopener">NASA</a> <a href="http://www.nasa.gov/goddard" target="_blank" rel="noopener">戈达德太空飞行中心</a> 主导开发的通用航天任务仿真工具,作为一款开源的通用航天任务分析仿真软件, 其功能涵盖了基本的航天任务分析需求,如轨道设计、轨道优化、飞行任务分析、星座设计及行星际飞行仿真等。<a href="http://gmatcentral.org/display/GW/GMAT+Wiki+Home" target="_blank" rel="noopener">GMAT</a> 的仿真精度可以与 <a href="http://www.agi.com/" target="_blank" rel="noopener">AGI/STK</a> 相媲美,足以将其直接应用于通用航天任务的分析与仿真工作之中。</p><p><a href="http://gmatcentral.org/display/GW/GMAT+Wiki+Home" target="_blank" rel="noopener">GMAT</a> 由 <a href="http://www.nasa.gov/goddard" target="_blank" rel="noopener">GSFC</a> 从 2002 年开始开发。 随后在NASA的领导下,<code>Thinking System, Inc</code> 公司、 <code>Computer Sciences Corporation</code> 公司和 <code>Honeywell Technology Solutions, Inc</code> 公司参与了该软件的开发,目前 <a href="https://www.nasa.gov/" target="_blank" rel="noopener">NASA</a> 仍在招商开源伙伴合作商参与该项目的进一步研发。</p><p><a href="http://gmatcentral.org/display/GW/GMAT+Wiki+Home" target="_blank" rel="noopener">GMAT</a> 的主要特性包括:</p><ul><li>高仿真度航天动力学模型;</li><li>图形和报表生成;</li><li>任务优化及目标定位;</li><li><a href="http://www.mathworks.com" target="_blank" rel="noopener">MATLAB</a> & <a href="http://www.python.org" target="_blank" rel="noopener">Python</a> 编程接口;</li><li><a href="http://www.apache.org/licenses/" target="_blank" rel="noopener">Apache License Version 2.0</a> 开源许可协议;</li><li>跨平台:支持 Windows、MacOS X & Linux;</li><li>内建脚本编程;</li><li>用户自定义函数;</li><li>以及二次开发等。</li></ul><p>当前最新版本为 2018 年 5 月发布的 <a href="https://sourceforge.net/projects/gmat/files/GMAT/GMAT-R2018a/" target="_blank" rel="noopener">GMAT R2018a</a>。经过十多年的持续开发,<a href="http://gmatcentral.org/display/GW/GMAT+Wiki+Home" target="_blank" rel="noopener">GMAT</a> 的 <a href="http://gmat.sourceforge.net/docs/" target="_blank" rel="noopener">用户手册</a> 已经相当完善,但由于文档皆用英文撰写,所以学习起来存在一定的语言障碍。</p><h4 id="2-2-2-Orbit-Determination-Toolbox"><a href="#2-2-2-Orbit-Determination-Toolbox" class="headerlink" title="2.2.2 Orbit Determination Toolbox"></a>2.2.2 <a href="http://odtbx.sourceforge.net/" target="_blank" rel="noopener">Orbit Determination Toolbox</a></h4><hr><p><img src="/images/OTCAAS/Images2/ODTBX_OrbitPlot.jpg" width="100%" height="100%"></p><p><a href="http://odtbx.sourceforge.net/" target="_blank" rel="noopener">ODTB</a> (<strong>O</strong>rbit <strong>D</strong>etermination <strong>T</strong>ool<strong>B</strong>ox) 是由 <a href="http://www.nasa.gov/" target="_blank" rel="noopener">NASA</a> <a href="http://www.nasa.gov/goddard" target="_blank" rel="noopener">戈达德太空飞行中心</a> 的导航与任务设计部门(Navigation & Mission Design branch at NASA GSFC)开发的一款航天器高级任务仿真分析定轨工具箱,基于 MATLAB 环境和 <a href="https://java.com" target="_blank" rel="noopener">Java</a> 语言实现,可用于航天任务设计的概念研究、方案分析和早期设计等阶段,特别适用于编队飞行及系统研究。<br><a href="http://odtbx.sourceforge.net/" target="_blank" rel="noopener">ODTB</a> 的底层构架相当灵活,使得高级用户可以在此基础之上开发自己的导航算法及仿真程序 <a href="http://odtbx.sourceforge.net/" target="_blank" rel="noopener">ODTB</a> 的核心功能由一系列预估指令实现,并辅以蒙特卡洛(Monte Carlo)数据模拟、线性协方差分析及普通水平的测量处理功能。目前,<a href="http://odtbx.sourceforge.net/" target="_blank" rel="noopener">ODTB</a> 的主要功能逐渐移植到了 <a href="http://gmatcentral.org/display/GW/GMAT+Wiki+Home" target="_blank" rel="noopener">GMAT</a> 。</p><h4 id="2-2-3-PreviSat-Satellite-Tracking-For-Everyone"><a href="#2-2-3-PreviSat-Satellite-Tracking-For-Everyone" class="headerlink" title="2.2.3 PreviSat: Satellite Tracking For Everyone"></a>2.2.3 <a href="http://previsat.sourceforge.net/" target="_blank" rel="noopener">PreviSat: Satellite Tracking For Everyone</a></h4><hr><p><img src="/images/OTCAAS/Images2/PreviSat.jpg" width="100%" height="100%"></p><p><a href="http://previsat.sourceforge.net/" target="_blank" rel="noopener">PreviSat</a> 是一款通过解析由美国太空监视网(Space Surveillance Network,SSN)发布并定期更新的“两行轨道根数”(Two-Line Element,<strong>TLE</strong>)实现卫星轨道预报及跟踪的开源航天仿真工具,其用户界面友好,可同时对多达数百个在轨目标的 TLE 参数进行解析。</p><p><a href="http://tleanalyser.blogspot.fr/" target="_blank" rel="noopener">TLE ANALYSER</a> 内部使用来自北美空防司令部(North American Air Defense Command,NORAD)开发的 <strong>SGP4</strong>(Simplified General Perturbations Models,SGP4)和 <strong>SDP4</strong> 模型进行轨道预报,能较为精确地预报 TLE 编目卫星下一时间段的轨道位置。</p><h4 id="2-2-4-Celestlab"><a href="#2-2-4-Celestlab" class="headerlink" title="2.2.4 Celestlab"></a>2.2.4 <a href="https://atoms.scilab.org/toolboxes/celestlab/" target="_blank" rel="noopener">Celestlab</a></h4><hr><p><img src="/images/OTCAAS/Images2/Celestlab.png" width="100%" height="100%"></p><p><a href="https://atoms.scilab.org/toolboxes/celestlab/" target="_blank" rel="noopener">Celestlab</a> 是由 <a href="https://cnes.fr/en" target="_blank" rel="noopener">CNES (Centre National d Etudes Spatiales - French Space Agency,法国宇航局)</a> 基于 <a href="https://www.scilab.org/" target="_blank" rel="noopener">Scilab</a> 开发的轨道力学工具箱,可对多种航天任务进行轨迹分析及轨道设计。</p><p>工程师们可用 <a href="https://atoms.scilab.org/toolboxes/celestlab/" target="_blank" rel="noopener">Celestlab</a> 完成轨道预报、姿态计算、初步轨道机动计算、参考系转换及坐标变换等初步任务设计分析工作,其中的函数分为下面几种类型:</p><ul><li>坐标及参考系:定义参考系,时间尺度,坐标类型等;</li><li>几何形状及事件:计算轨道几何形状及其相关事件(地面站可见性等);</li><li>星际航行:星际航行和三体问题;</li><li>数学:数学函数;</li><li>模型:大气密度模型,日月位置等;</li><li>轨道特征:太阳同步轨道,回归轨道,冻结轨道,轨道根数的漂移等;</li><li>相对运动:用 <code>C-W Hill</code> 方程分析航天器相对运动轨迹;</li><li>轨道及机动:轨道预报和轨道机动计算;</li><li>工具集:各种实用工具及多目标函数。</li></ul><h4 id="2-2-5-STELA"><a href="#2-2-5-STELA" class="headerlink" title="2.2.5 STELA"></a>2.2.5 <a href="https://logiciels.cnes.fr/en/content/stela" target="_blank" rel="noopener">STELA</a></h4><hr><p><img src="/images/OTCAAS/Images2/STELA.png" width="100%" height="100%"></p><p><a href="https://logiciels.cnes.fr/en/content/stela" target="_blank" rel="noopener">STELA</a> (<strong>S</strong>emi-analytic <strong>T</strong>ool for <strong>E</strong>nd of <strong>L</strong>ife <strong>A</strong>nalysis,半解析全寿命分析工具) 是一款由 <a href="https://cnes.fr/en" target="_blank" rel="noopener">CNES (Centre National d Etudes Spatiales - French Space Agency,法国宇航局)</a> 开发并维护的轨道寿命分析软件,用于支持 FSOA(French Space Operations Act),用户可免费下载并使用此软件。 </p><p><a href="https://logiciels.cnes.fr/en/content/stela" target="_blank" rel="noopener">STELA</a> 体现了对 LEO 和 GEO 轨道区域保护的普遍关注(轨道寿命及保护区与报废轨道的交叉问题),并给用户提供了与需求相容的实用评估工具。它基于半解析模型和保护区评估原则,提供了针对 LEO,GEO 和 GTO 有效地长期轨道预报功能,并会在运行过程中生成一份汇总计算结果的报告文件及一份星历文件。</p><p><a href="https://logiciels.cnes.fr/en/content/stela" target="_blank" rel="noopener">STELA</a> 软件能够:1) 对给定初轨的大气再入寿命进行迭代计算;2) 计算给定寿命 GEO 交叉区的规避问题;3) 对 GTO 进行概率模型分析;4) 计算航天器的平均横截面积;5) 转换 TLE 数据。</p><p><a href="https://logiciels.cnes.fr/en/content/stela" target="_blank" rel="noopener">STELA</a> 由 JAVA 语言编写而成,能运行在装有 JRE 1.6 及以上版本(Java Runtime Environment,Java 运行时环境)的 Windows、Linux 及其诸如 Sun-Solaris 等 Unix 平台上,并能作为 JAVA 库被用户调用。</p><h4 id="2-2-6-Tudat"><a href="#2-2-6-Tudat" class="headerlink" title="2.2.6 Tudat"></a>2.2.6 <a href="http://tudat.tudelft.nl/" target="_blank" rel="noopener">Tudat</a></h4><hr><p><img src="/images/OTCAAS/Images2/Tudat.png" width="100%" height="100%"></p><p><a href="http://tudat.tudelft.nl/" target="_blank" rel="noopener">Tudat</a> (<strong>TU</strong> <strong>D</strong>elft <strong>A</strong>strodynamics <strong>T</strong>oolbox) 是由荷兰代尔夫特理工大学航天工程学院航天动力学与航天任务研究组的教职工及学生开发并维护的 C++ 软件库集,它为用户提供了多种可用于航天动力学应用仿真的实用功能。</p><p><a href="http://tudat.tudelft.nl/" target="_blank" rel="noopener">Tudat</a> 是开源软件,采用 <code>BSD-3-Clause 开源协议</code>,用户可以自由下载使用。但较为不便的是,<a href="http://tudat.tudelft.nl/" target="_blank" rel="noopener">Tudat</a> 开发团队并不发布编译好的二进制包供用户直接安装,而是只发布软件源码,想使用 <a href="http://tudat.tudelft.nl/" target="_blank" rel="noopener">Tudat</a> 得先将其编译成可执行文件。</p><p><a href="http://tudat.tudelft.nl/" target="_blank" rel="noopener">Tudat</a> 分为 <a href="http://tudat.tudelft.nl/" target="_blank" rel="noopener">Tudat</a> 内核(Tudat Core)和 <a href="http://tudat.tudelft.nl/" target="_blank" rel="noopener">Tudat</a> 库(Tudat libraries)两大部分。其中 <a href="http://tudat.tudelft.nl/" target="_blank" rel="noopener">Tudat</a> 内核只包含非常成熟的代码,功能较为有限。而 <a href="http://tudat.tudelft.nl/" target="_blank" rel="noopener">Tudat</a> 库则大大扩展了 <a href="http://tudat.tudelft.nl/" target="_blank" rel="noopener">Tudat</a> 内核的功能,虽然有些库可能存在一些未知的问题。</p><h4 id="2-2-7-Orekit"><a href="#2-2-7-Orekit" class="headerlink" title="2.2.7 Orekit"></a>2.2.7 <a href="https://www.orekit.org/" target="_blank" rel="noopener">Orekit</a></h4><hr><p><img src="/images/OTCAAS/Images2/Orekit.png" width="100%" height="100%"></p><p><a href="https://www.orekit.org/" target="_blank" rel="noopener">Orekit</a> (<strong>OR</strong>bit <strong>E</strong>xtrapolation <strong>KIT</strong>, Orekit) 是一套基于 <a href="https://java.com" target="_blank" rel="noopener">Java</a> 语言编写的底层航天动力学库,旨在为航天动力学应用程序的开发提供准确有效的底层算法支撑。<a href="https://www.orekit.org/" target="_blank" rel="noopener">Orekit</a> 被设计为可以简单地应用在各种不同的背景之下,从快速地学习到具体的操作。作为工具库,<a href="https://www.orekit.org/" target="_blank" rel="noopener">Orekit</a> 包含了基本的元素(轨道、日期、姿态及框架等)和多样的算法来处理这些元素(坐标转换、轨道预报及定位等)。</p><p><a href="https://www.orekit.org/" target="_blank" rel="noopener">Orekit</a> 是开源软件,用户可以同时下载到 <code>.jar</code>封装库和源码,以及相关文档和测试样例。<a href="https://www.orekit.org/" target="_blank" rel="noopener">Orekit</a> 采用对商业友好的 <a href="http://www.apache.org/licenses/LICENSE-2.0" target="_blank" rel="noopener">Apache 开源许可协议</a>,这意味着任何人都可以使用 <a href="https://www.orekit.org/" target="_blank" rel="noopener">Orekit</a> 来构建其它任何程序,且不要求在用户开发的代码中附带任何说明。</p><p>自 2008 年发布以来,<a href="https://www.orekit.org/" target="_blank" rel="noopener">Orekit</a> 的应用价值得到了世界范围的广泛认可,在一些大型的航天机构中得到了具体的应用,体现在以下方面:</p><ul><li><a href="https://www.orekit.org/" target="_blank" rel="noopener">Orekit</a> 已经成功被 <a href="https://cnes.fr/en" target="_blank" rel="noopener">法国宇航局</a> 和 <a href="https://www.esa.int/ESA" target="_blank" rel="noopener">欧空局</a> 用于自动转移装置(Automated Transfer Vehicle,ATV)的任务规划和国际空间站(International Space Station,<strong>ISS</strong>)交会对接调相期间的实时监测;</li><li><a href="https://www.orekit.org/" target="_blank" rel="noopener">Orekit</a> 已于2011年被 <a href="https://cnes.fr/en" target="_blank" rel="noopener">法国宇航局</a> 选为下一代航天飞行动力学系统,包括操作系统、学习系统和任务分析系统;</li><li><a href="https://www.orekit.org/" target="_blank" rel="noopener">Orekit</a> 已经被诸如 <a href="https://www.eumetsat.int/" target="_blank" rel="noopener">Eumetsat</a> 等商业公司用于学习及地面站系统的开发;</li><li><a href="https://www.orekit.org/" target="_blank" rel="noopener">Orekit</a> 已经被 ISAT 用于培训。</li></ul><h4 id="2-2-8-SaVi"><a href="#2-2-8-SaVi" class="headerlink" title="2.2.8 SaVi"></a>2.2.8 <a href="http://savi.sourceforge.net/" target="_blank" rel="noopener">SaVi</a></h4><hr><p><img src="/images/OTCAAS/Images2/savi-iridium-geomview.png" width="100%" height="100%"></p><p><a href="http://savi.sourceforge.net/" target="_blank" rel="noopener">SaVi</a> (<strong>Sa</strong>tellite constellation <strong>Vi</strong>sualization)是一款人造卫星星座仿真软件,它具有对人造卫星(尤其是卫星星座)进行轨道预报和地面覆盖仿真分析的能力,并可以二维和三维的形式实现卫星星座可视化。</p><p><a href="http://savi.sourceforge.net/" target="_blank" rel="noopener">SaVi</a> 的发行包自带诸如铱星、全球定位系统、伽利略导航系统及闪电通信卫星系统等多个卫星星座仿真示例,供用户学习使用。这从某种程度上弥补了其自身文档不足的缺陷。</p><p><a href="http://savi.sourceforge.net/" target="_blank" rel="noopener">SaVi</a> 的运行依赖 Tcl/Tk 库,其三维渲染能力来自 <a href="http://www.geomview.org/" target="_blank" rel="noopener">Geomview</a>,虽然 <a href="http://www.geomview.org/" target="_blank" rel="noopener">Geomview</a> 并不是必须的,但它能帮助 <a href="http://savi.sourceforge.net/" target="_blank" rel="noopener">SaVi</a> 实现三维可视化。</p><p><a href="http://savi.sourceforge.net/" target="_blank" rel="noopener">SaVi</a> 官方只发布能直接运行在 Unix 和 Linux 环境下的安装包,Windows 和 Mac OS X 用户需要通过自己编译源码的方式才能使用它。</p><p><a href="http://savi.sourceforge.net/" target="_blank" rel="noopener">SaVi</a> 是自由软件,基于 <a href="https://opensource.org/licenses/bsd-license.php" target="_blank" rel="noopener">BSD (Berkeley Software Distribution,BSD) 开源许可协议</a> 发布,用户可以修改其代码进行二次发布,但必须得遵守 <a href="https://opensource.org/licenses/bsd-license.php" target="_blank" rel="noopener">BSD 协议</a> 的相关条款。</p><h3 id="2-3-航天器轨迹优化"><a href="#2-3-航天器轨迹优化" class="headerlink" title="2.3 航天器轨迹优化"></a>2.3 航天器轨迹优化</h3><hr><p>本节将介绍三款功能强大的开源航天器轨迹优化软件,其中全局优化软件 <a href="https://github.com/esa/pagmo" target="_blank" rel="noopener">PaGMO</a> 和通用航天任务分析软件 <a href="https://github.com/esa/pykep" target="_blank" rel="noopener">PyKEM</a> 出自 <a href="http://www.esa.int/gsp/ACT/index.html" target="_blank" rel="noopener">欧空局的先进概念团队</a> (ESA Advanced Concepts Team,<strong>ACT</strong>) 之手,软件质量极高。下图是 <a href="https://github.com/esa/pagmo" target="_blank" rel="noopener">PaGMO</a> 求解 JPL 主办的第六届国际深空探测轨迹优化设计大赛题目得到的最优结果。</p><p><img src="/images/OTCAAS/Images2/PyGMO_trajectory.png" width="100%" height="100%"></p><p><code>图注:使用 PaGMO 求解 JPL 主办的第六届国际深空探测轨迹优化设计大赛题目得到的最优结果</code></p><h4 id="2-3-1-Trajectory-Optimization-Tool"><a href="#2-3-1-Trajectory-Optimization-Tool" class="headerlink" title="2.3.1 Trajectory Optimization Tool"></a>2.3.1 <a href="https://forum.kerbalspaceprogram.com/index.php?/topic/33568-winmaclinux-ksp-trajectory-optimization-tool-v162-now-for-linux/" target="_blank" rel="noopener">Trajectory Optimization Tool</a></h4><hr><p><img src="/images/OTCAAS/Images2/OrbiterTOT.png" width="100%" height="100%"></p><p><strong>TOT</strong> (<strong>T</strong>rajectory <strong>O</strong>ptimization <strong>T</strong>ool) 是一款由 Arrowstar 基于 MATLAB 环境开发的轨迹优化软件,它用于帮助 <a href="http://orbit.medphys.ucl.ac.uk/index.html" target="_blank" rel="noopener">Orbiter</a> 及 <a href="https://www.kerbalspaceprogram.com/" target="_blank" rel="noopener">KSP</a> 用户规划并实施星际转移。<strong>KSPTOT</strong> 的主要功能包括:</p><ul><li>用 Lambert 求解器绘制 Porkchop图(即 C3 能量图),以帮助确定星际转移轨道的逃逸及到达时间;</li><li>用 Lambert 求解器获得的数据来确定最优双曲线逃逸轨道,并计算变轨需要的推力大小及方向(即矢量)。此外,还提供航天器初始逃逸轨道的点火地点;</li><li>计算最优行星飞越轨迹,以最小燃料消耗到达 <a href="https://www.kerbalspaceprogram.com/" target="_blank" rel="noopener">KSP</a> 中诸如 Moho,Eello 等难以造访的目标星体;</li><li>寻找最优的双脉冲轨道机动方案,以最小的燃料消耗实现轨道调整。</li></ul><p>Arrowstar 最初为 <a href="http://orbit.medphys.ucl.ac.uk/index.html" target="_blank" rel="noopener">Orbiter</a> 开发了 <strong>OrbiterTOT</strong> 工具,但在 <a href="https://www.orbiter-forum.com/showthread.php?t=24053" target="_blank" rel="noopener">Orbiter TOT v2.1</a> 发布后就未曾更新过,转而将 <strong>TOT</strong> 移植到 <a href="https://www.kerbalspaceprogram.com/" target="_blank" rel="noopener">KSP</a>。目前,<strong>KSPTOT</strong> 的最新发行版本为 <a href="(https://forum.kerbalspaceprogram.com/index.php?/topic/33568-winmaclinux-ksp-trajectory-optimization-tool-v162-now-for-linux/">KSPTOT v1.6.2</a>,仍处于活跃开发状态。</p><p><img src="/images/OTCAAS/Images2/KSPTOT.png" width="100%" height="100%"></p><h4 id="2-3-2-PaGMO"><a href="#2-3-2-PaGMO" class="headerlink" title="2.3.2 PaGMO"></a>2.3.2 <a href="https://github.com/esa/pagmo" target="_blank" rel="noopener">PaGMO</a></h4><hr><p><img src="/images/OTCAAS/Images2/PaGMO_dtlz2.png" width="100%" height="100%"></p><p><a href="https://github.com/esa/pagmo" target="_blank" rel="noopener">PaGMO</a> (<strong>Pa</strong>rallel <strong>G</strong>lobal <strong>M</strong>ultiobjective <strong>O</strong>ptimizer, 并行全局多目标优化器),其 Python 绑定版本命名为 <strong>PyGMO</strong>。</p><p><a href="https://github.com/esa/pagmo" target="_blank" rel="noopener">PaGMO</a> 的主要功能是为用户提供一个能够处理“广义岛屿模型”(Generalized Island Model)的通用并行计算引擎,它友好地为用户提供了大量的全局和局部优化算法及相关问题的求解方案。</p><p><a href="https://github.com/esa/pagmo" target="_blank" rel="noopener">PaGMO</a> 最初由 <a href="http://www.esa.int/gsp/ACT/index.html" target="_blank" rel="noopener">欧空局的先进概念团队</a> (ESA Advanced Concepts Team,<strong>ACT</strong>) 开发,目的是为了帮助实现星际航行轨迹和航天器轨道转移设计过程的自动化。由于 <a href="https://github.com/esa/pagmo" target="_blank" rel="noopener">PaGMO</a> 同时发布其 Python 绑定版本,故用户可以使用 C++ 及 Python 语言实现自己的算法并解决问题。</p><h4 id="2-3-3-PyKEM"><a href="#2-3-3-PyKEM" class="headerlink" title="2.3.3 PyKEM"></a>2.3.3 <a href="https://github.com/esa/pykep" target="_blank" rel="noopener">PyKEM</a></h4><hr><p><img src="/images/OTCAAS/Images2/PyKEM.png" width="100%" height="100%"></p><p><a href="https://github.com/esa/pykep" target="_blank" rel="noopener">PyKEM</a> 是一套专为星际航行或通用航天任务分析提供科学计算支持的基本工具库,基于 <a href="https://www.gnu.org/licenses/gpl.html" target="_blank" rel="noopener">GPL 开源许可协议</a>,由 <a href="http://www.esa.int/gsp/ACT/index.html" target="_blank" rel="noopener">欧空局的先进概念团队</a> (ESA Advanced Concepts Team,<strong>ACT</strong>) 开发。</p><p><a href="https://github.com/esa/pykep" target="_blank" rel="noopener">PyKEM</a> 由 C++ 编写而成,并通过 <code>Boost.Python</code> 实现对 Python 语言的绑定,其算法的执行效率是开发 <a href="https://github.com/esa/pykep" target="_blank" rel="noopener">PyKEM</a> 库过程中考虑的主要因素。</p><p><a href="https://github.com/esa/pykep" target="_blank" rel="noopener">PyKEM</a> 库的核心功能是实现对多圈兰伯特问题、Sims-Flanagan 小推力描述模型、开普勒预报器及Taylor 积分器等进行高效的求解。</p><h2 id="FAQ"><a href="#FAQ" class="headerlink" title="FAQ"></a>FAQ</h2><hr><h4 id="Q1-如何联系作者?"><a href="#Q1-如何联系作者?" class="headerlink" title="Q1. 如何联系作者?"></a>Q1. 如何联系作者?</h4><blockquote><p>可以通过以下方式联系作者:</p><ul><li>微信:Spacefan</li><li>E-mail:<a href="[email protected]">[email protected]</a></li><li>QQ:516951770</li></ul></blockquote><h4 id="Q2-为什么文中的部分链接无法访问?"><a href="#Q2-为什么文中的部分链接无法访问?" class="headerlink" title="Q2. 为什么文中的部分链接无法访问?"></a>Q2. 为什么文中的部分链接无法访问?</h4><blockquote><p>由于文中很多链接皆为国外网站,可能会被防火长城拦截,故无法访问。此外,诸如地域和网络类型等因素也可能会导致部分网站无法访问。对于无法访问的链接,读者可以采用翻墙的方式进行访问。至于如何翻墙,请自行解决。</p></blockquote><hr><p class="text-muted"></p><p>© Copyright by Spacefan 2016~2019. </p><p></p>]]></content>
<categories>
<category> 专业技能 </category>
</categories>
<tags>
<tag> GMAT </tag>
<tag> 航天 </tag>
<tag> 开源 </tag>
<tag> 航空 </tag>
<tag> 仿真 </tag>
<tag> FlightGear </tag>
<tag> X-Plane </tag>
<tag> Plane-Maker </tag>
<tag> CRRCSim </tag>
<tag> JSBSim </tag>
<tag> OpenRocket </tag>
<tag> XFLR5 </tag>
<tag> Sumo </tag>
<tag> Orbiter </tag>
<tag> NASA Eyes </tag>
<tag> Celestia </tag>
<tag> PreviSat </tag>
<tag> Celestlab </tag>
<tag> STELA </tag>
<tag> Tudat </tag>
<tag> Orekit </tag>
<tag> SaVi </tag>
<tag> KSPTOT </tag>
<tag> PaGMO </tag>
<tag> PyKEM </tag>
</tags>
</entry>
<entry>
<title>Hexo 添加 MathJax 数学公式渲染</title>
<link href="/2018/06/27/hexo-MathJax/"/>
<url>/2018/06/27/hexo-MathJax/</url>
<content type="html"><![CDATA[<p>最近想在博客上写些带有公式的文章,但却发现 <a href="https://hexo.io/" target="_blank" rel="noopener">Hexo</a> 渲染公式的问题让人十分恼火。本着不怕折腾的精神,看了很多博文,也尝试可好几种解决方案,都以失败告终。今天,终于大功告成,虽然针对整个 <a href="https://hexo.io/" target="_blank" rel="noopener">Hexo</a> 的完美解决方法仍需要详细探讨,但适用于 <a href="https://github.com/wzpan/hexo-theme-freemind" target="_blank" rel="noopener">Freemind</a> 主题的详细解决方案已然寻得。</p><a id="more"></a><h3 id="1-添加-MathJax-支持"><a href="#1-添加-MathJax-支持" class="headerlink" title="1. 添加 MathJax 支持"></a>1. 添加 MathJax 支持</h3><hr><p>向 <code>hexo_root\themes\freemind\layout\_partial</code> 文件夹中添加 <code>mathjax.ejs</code> 文件:</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><span class="line"><script type=<span class="string">"text/x-mathjax-config"</span>></span><br><span class="line"> MathJax.Hub.Config({</span><br><span class="line"> menuSettings: {</span><br><span class="line"> zoom: <span class="string">"None"</span></span><br><span class="line"> },</span><br><span class="line"> showMathMenu: <span class="literal">false</span>,</span><br><span class="line"> jax: [<span class="string">"input/TeX"</span>,<span class="string">"output/CommonHTML"</span>],</span><br><span class="line"> extensions: [<span class="string">"tex2jax.js"</span>],</span><br><span class="line"> TeX: {</span><br><span class="line"> extensions: [<span class="string">"AMSmath.js"</span>,<span class="string">"AMSsymbols.js"</span>],</span><br><span class="line"> equationNumbers: {</span><br><span class="line"> autoNumber: <span class="string">"AMS"</span></span><br><span class="line"> }</span><br><span class="line"> },</span><br><span class="line"> tex2jax: {</span><br><span class="line"> inlineMath: [[<span class="string">"\\("</span>, <span class="string">"\\)"</span>]],</span><br><span class="line"> displayMath: [[<span class="string">"\\["</span>, <span class="string">"\\]"</span>]]</span><br><span class="line"> }</span><br><span class="line"> });</span><br><span class="line"><<span class="regexp">/script></span></span><br><span class="line"><span class="regexp"></span></span><br><span class="line"><span class="regexp"><script type="text/</span>javascript<span class="string">" src="</span><span class="comment">//cdnjs.cloudflare.com/ajax/libs/mathjax/2.6.1/MathJax.js"></script></span></span><br><span class="line"><<span class="regexp">/script></span></span><br></pre></td></tr></table></figure><p>向 <code>hexo_root\themes\freemind\layout\_partial\after_footer.ejs</code> 文件中添加如下代码:<br><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><% <span class="keyword">if</span> (page.mathjax){ %></span><br><span class="line"><%- partial(<span class="string">'mathjax'</span>) %></span><br><span class="line"><% } %></span><br></pre></td></tr></table></figure></p><p>向站点配置文件 <code>hexo_root\_config.yml</code> 中添加如下设置:<br><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># MathJax Support</span></span><br><span class="line"><span class="attr">mathjax:</span></span><br><span class="line"><span class="attr"> enable:</span> <span class="literal">true</span></span><br><span class="line"><span class="attr"> per_page:</span> <span class="literal">false</span></span><br><span class="line"><span class="attr"> cdn:</span> <span class="string">//cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML</span></span><br></pre></td></tr></table></figure></p><h3 id="2-更改默认渲染引擎"><a href="#2-更改默认渲染引擎" class="headerlink" title="2. 更改默认渲染引擎"></a>2. 更改默认渲染引擎</h3><hr><p>卸载 <a href="https://hexo.io/" target="_blank" rel="noopener">Hexo</a> 默认的 Markdown 渲染插件 <a href="https://github.com/hexojs/hexo-renderer-marked" target="_blank" rel="noopener">hexo-renderer-marked</a>:<br><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">$ npm uninstall hexo-renderer-marked --save</span><br><span class="line">or</span><br><span class="line">$ npm un hexo-renderer-marked --save</span><br></pre></td></tr></table></figure></p><p>安装新的增强型 Markdown 渲染插件 <a href="https://github.com/sun11/hexo-renderer-kramed" target="_blank" rel="noopener">hexo-renderer-kramed</a>:<br><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">$ npm install hexo-renderer-kramed --save</span><br><span class="line">or</span><br><span class="line">$ npm i hexo-renderer-kramed --save</span><br></pre></td></tr></table></figure></p><p>并再次向站点配置文件 <code>hexo_root\_config.yml</code> 中添加如下设置:<br><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">kramed:</span></span><br><span class="line"><span class="attr"> gfm:</span> <span class="literal">true</span></span><br><span class="line"><span class="attr"> pedantic:</span> <span class="literal">false</span></span><br><span class="line"><span class="attr"> sanitize:</span> <span class="literal">false</span></span><br><span class="line"><span class="attr"> tables:</span> <span class="literal">true</span></span><br><span class="line"><span class="attr"> breaks:</span> <span class="literal">true</span></span><br><span class="line"><span class="attr"> smartLists:</span> <span class="literal">true</span></span><br><span class="line"><span class="attr"> smartypants:</span> <span class="literal">true</span></span><br></pre></td></tr></table></figure></p><h3 id="3-文章启用-MathJax"><a href="#3-文章启用-MathJax" class="headerlink" title="3. 文章启用 MathJax"></a>3. 文章启用 MathJax</h3><hr><p>前面的方法允许文章选择性加载 <a href="https://www.mathjax.org/" target="_blank" rel="noopener">MathJax</a> 渲染公式,在每篇文章头部添加 <code>mathjax: true</code> 即选择使用 <a href="https://www.mathjax.org/" target="_blank" rel="noopener">MathJax</a> 渲染公式。如果不添加,则本篇文章不加载 <a href="https://www.mathjax.org/" target="_blank" rel="noopener">MathJax</a> 渲染公式,如此可以节约资源,增加网页访问速度。本文头部设置如下:<br><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">---</span></span><br><span class="line"><span class="attr">title:</span> <span class="string">Hexo</span> <span class="string">添加</span> <span class="string">MathJax</span> <span class="string">数学公式渲染</span></span><br><span class="line"><span class="attr">date:</span> <span class="number">2018</span><span class="bullet">-06</span><span class="bullet">-27</span> <span class="number">21</span><span class="string">:30:00</span></span><br><span class="line"><span class="attr">tags:</span> <span class="string">Hexo教程</span></span><br><span class="line"><span class="attr">categories:</span> <span class="string">Hexo建站</span></span><br><span class="line"><span class="attr">description:</span> <span class="string">"Hexo Freemind 主题使用 MathJax 渲染公式入门指南"</span></span><br><span class="line"><span class="attr">shadow:</span> <span class="literal">true</span></span><br><span class="line"><span class="attr">mathjax:</span> <span class="literal">true</span></span><br><span class="line"><span class="attr">feature:</span> <span class="string">/images/hexo.jpg</span></span><br><span class="line"><span class="attr">toc:</span> <span class="literal">true</span></span><br><span class="line"><span class="meta">---</span></span><br></pre></td></tr></table></figure></p><h3 id="4-公式显示效果测试"><a href="#4-公式显示效果测试" class="headerlink" title="4. 公式显示效果测试"></a>4. 公式显示效果测试</h3><hr><p><strong>行内公式测试:</strong><script type="math/tex">f(x)=ax+b</script>,<script type="math/tex">\sqrt{\frac{a^2+b^2}{a^2-b^2}}</script> 。注意,根据 <a href="https://github.com/hexojs/hexo-renderer-marked" target="_blank" rel="noopener">hexo-renderer-marked</a> 说明,行内公式格式为:<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">`$f(x)=ax+b$` </span><br><span class="line">`$\sqrt(\frac{a^2+b^2}{a^2-b^2})$`</span><br></pre></td></tr></table></figure></p><p>若想在行内显示<code>$some code$</code>符号,格式如下:<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">` $some code$ `</span><br></pre></td></tr></table></figure></p><p>进一步,若想在行内显示<code>$$</code>或者$$,格式如下:<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">` $$ `</span><br><span class="line">\$\$</span><br></pre></td></tr></table></figure></p><p><strong>行间公式测试1:</strong></p><script type="math/tex; mode=display">H=-\sum_{i=1}^N (\sigma_{i}^x \sigma_{i+1}^x+g \sigma_{i}^z)</script><p><strong>行间公式测试2(换行测试,用 \ 可正常换行):</strong><br><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">$$</span><br><span class="line">f(n) = \begin{cases}</span><br><span class="line"> \frac{n}{2},</span><br><span class="line"> & \text{if } n\text{ is even}</span><br><span class="line"> \\ 3n+1, & \text{if } n\text{ is odd}</span><br><span class="line"> \end{cases}</span><br><span class="line">$$</span><br></pre></td></tr></table></figure></p><script type="math/tex; mode=display">f(n) = \begin{cases} \frac{n}{2}, & \text{if } n\text{ is even} \\\ 3n+1, & \text{if } n\text{ is odd} \end{cases}</script><p><strong>行间公式测试3(换行测试,用 \\ 代替 \ 也可实现换行):</strong><br><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">$$</span><br><span class="line">f(n) = \begin{cases}</span><br><span class="line"> \frac{n}{2},</span><br><span class="line"> & \text{if } n\text{ is even}</span><br><span class="line"> \\\ 3n+1, & \text{if } n\text{ is odd}</span><br><span class="line"> \end{cases}</span><br><span class="line">$$</span><br><span class="line"></span><br><span class="line">$$f(x): \begin{cases} x, x>0 \\\ -x,x<0 \end{cases}$$</span><br></pre></td></tr></table></figure></p><script type="math/tex; mode=display">f(n) = \begin{cases} \frac{n}{2}, & \text{if } n\text{ is even} \\\ 3n+1, & \text{if } n\text{ is odd} \end{cases}</script><script type="math/tex; mode=display">f(x): \begin{cases} x, x>0 \\\ -x,x<0 \end{cases}</script><h3 id="5-总结"><a href="#5-总结" class="headerlink" title="5. 总结"></a>5. 总结</h3><hr><p>利用 <code>mathjax.ejs</code> 和增强型 Markdown 插件 <a href="https://github.com/sun11/hexo-renderer-kramed" target="_blank" rel="noopener">hexo-renderer-kramed</a>,本文实现了 <a href="https://github.com/wzpan/hexo-theme-freemind" target="_blank" rel="noopener">Freemind</a> 主题下的公式渲染,但是这并不意味着文中的方法也适用于其他主题。本文仅作为使用 <a href="https://github.com/wzpan/hexo-theme-freemind" target="_blank" rel="noopener">Freemind</a> 主题的用户参考。</p>]]></content>
<categories>
<category> Hexo建站 </category>
</categories>
<tags>
<tag> Hexo </tag>
<tag> MathJax </tag>
</tags>
</entry>
<entry>
<title>这个星球上最强大的开源数学软件</title>
<link href="/2017/10/28/sage-intro/"/>
<url>/2017/10/28/sage-intro/</url>
<content type="html"><![CDATA[<h3 id="1-基本简介"><a href="#1-基本简介" class="headerlink" title="1. 基本简介"></a>1. 基本简介</h3><p><a href="https://www.sagemath.org" target="_blank" rel="noopener">SageMath</a> 是一款由 <a href="https://wstein.org/" target="_blank" rel="noopener">William A. Stein</a> 主导开发的基于 <a href="https://www.gnu.org/licenses/gpl-3.0.en.html" target="_blank" rel="noopener">GPL</a> 协议的开源数学软件。它使用 <a href="https://www.python.org/" target="_blank" rel="noopener">Python</a> 作为通用接口,并将现有的许多开源软件包整合在一起,构建一个统一的计算平台,如 <a href="http://numpy.scipy.org/" target="_blank" rel="noopener">NumPy</a>, <a href="http://www.scipy.org/" target="_blank" rel="noopener">SciPy</a>, <a href="http://matplotlib.sourceforge.net/" target="_blank" rel="noopener">matplotlib</a>, <a href="http://www.sympy.org/" target="_blank" rel="noopener">Sympy</a>, <a href="http://maxima.sourceforge.net/" target="_blank" rel="noopener">Maxima</a>, <a href="http://www.gap-system.org/" target="_blank" rel="noopener">GAP</a>, <a href="http://www.flintlib.org/" target="_blank" rel="noopener">FLINT</a>, <a href="http://www.r-project.org/" target="_blank" rel="noopener">R</a> 以及 <a href="https://www.sagemath.org/links-components.html" target="_blank" rel="noopener">更多</a>。<a href="https://www.sagemath.org" target="_blank" rel="noopener">SageMath</a> 的目标是创建一个有活力的自由开源软件以替代 <a href="http://magma.maths.usyd.edu.au/magma/" target="_blank" rel="noopener">Magma</a>,<a href="https://www.maplesoft.com/" target="_blank" rel="noopener">Maple</a>,<a href="https://www.wolfram.com/mathematica/" target="_blank" rel="noopener">Mathematica</a> 和 <a href="https://www.mathworks.com" target="_blank" rel="noopener">MATLAB</a>。</p><a id="more"></a><p><img src="http://i-7.vcimg.com/trim/1ef0936af82fdc9d0d0f07f570e0a11b262895/SageWallpaper.jpg" width="100%" height="100%"></p><h3 id="2-功能概览"><a href="#2-功能概览" class="headerlink" title="2. 功能概览"></a>2. 功能概览</h3><p><a href="https://www.sagemath.org" target="_blank" rel="noopener">SageMath</a> 的功能异常强大,官方介绍中有这么一句:“这款开源软件的支持者称 <a href="https://www.sagemath.org" target="_blank" rel="noopener">SageMath</a> 能够完成任何事情,从 12 维物体到计算全球变暖效应数学模型中的降雨量。”</p><p><a href="https://www.sagemath.org" target="_blank" rel="noopener">SageMath</a> 采用浏览器作为 GUI 界面,融入了云计算的思想,可以在线使用 <a href="https://cocalc.com/" target="_blank" rel="noopener">SageMath Cloud</a>,你再也无需为了完成一次作业而安装十几个 Gb 大的 <a href="https://www.mathworks.com" target="_blank" rel="noopener">MATLAB</a> 了,推荐大家去体验。</p><p><img src="http://i-7.vcimg.com/crop/e25ac84bee60c48909bb10a66a084c39597634(600x)/thumb.jpg" width="100%" height="100%"></p><p><img src="http://i-7.vcimg.com/crop/6090a021f390f5b6aa05feb5764342f435479(600x)/thumb.jpg" width="100%" height="100%"></p><p><img src="http://i-7.vcimg.com/crop/4461f4c9d24646fe5d713adb72e6be1f37545(600x)/thumb.jpg" width="100%" height="100%"></p><p><img src="http://i-7.vcimg.com/crop/a4dec60212905aa762850d5aa6169edc224797(600x)/thumb.jpg" width="100%" height="100%"></p><h3 id="3-快速开始"><a href="#3-快速开始" class="headerlink" title="3. 快速开始"></a>3. 快速开始</h3><p>软件下载访问 <a href="https://www.sagemath.org/download.html" target="_blank" rel="noopener">Download</a>,快速开始跳转 <a href="https://www.sagemath.org/tour-quickstart.html" target="_blank" rel="noopener">Quickstart</a>,详细参考文档见 <a href="https://doc.sagemath.org/" target="_blank" rel="noopener">Doc</a>。此外,中文入门文档见 <a href="http://ai7.org/wp/html/682.html" target="_blank" rel="noopener">男单 618 - Sage Tutorial 中文版</a> 或 <a href="https://www.lainme.com/doku.php/topic/sage/start" target="_blank" rel="noopener">Lainme - Sage Tutorial 中文版</a>。最后附上 <a href="https://wstein.org/" target="_blank" rel="noopener">William A. Stein</a> 关于其为何创建 SageMath & SageMath Cloud 项目初衷的视频(若无法观看,请自行爬墙 <a href="https://www.youtube.com/embed/AEKOjac9obk" target="_blank" rel="noopener">SageMath — Open source is ready to compete with Mathematica for use in the classroom</a>,或者访问 <a href="https://v.youku.com/v_show/id_XMTUyMTI0NDEzMg==.html" target="_blank" rel="noopener">SageMath - 地球上最强大的开源数学软件</a>)。</p><embed src="https://imgcache.qq.com/tencentvideo_v1/playerv3/TPout.swf?max_age=86400&v=20161117&vid=u07265ovjq4&auto=0" allowfullscreen="true" quality="high" width="560" height="315" align="middle" allowscriptaccess="always" type="application/x-shockwave-flash">]]></content>
<categories>
<category> 开源世界 </category>
</categories>
<tags>
<tag> SageMath </tag>
<tag> Python </tag>
<tag> IPython </tag>
<tag> NumPy </tag>
<tag> SciPy </tag>
<tag> R </tag>
<tag> 数学软件 </tag>
<tag> 开源软件 </tag>
</tags>
</entry>
<entry>
<title>GMAT R2017a 发布</title>
<link href="/2017/07/29/GMAT2017a/"/>
<url>/2017/07/29/GMAT2017a/</url>
<content type="html"><![CDATA[<h2 id="R2017a-简要说明"><a href="#R2017a-简要说明" class="headerlink" title="R2017a 简要说明"></a>R2017a 简要说明</h2><p>经过一年多的开发,<a href="https://sourceforge.net/projects/gmat/files/GMAT/GMAT-R2017a/" target="_blank" rel="noopener">R2017a</a> 终于 2017 年 7 月 18 日在 <a href="https://sourceforge.net/projects/gmat" target="_blank" rel="noopener">SF</a> 上发布,虽然官方网站并未未对此次发布作任何说明,但通过版本注释可以获得 <a href="https://sourceforge.net/projects/gmat/files/GMAT/GMAT-R2017a/" target="_blank" rel="noopener">R2017a</a> 的新特性。此外,还可通过访问 <a href="http://bugs.gmatcentral.org/secure/ReleaseNote.jspa?projectId=10000&version=11000" target="_blank" rel="noopener">开发面板</a> 了解 <a href="https://sourceforge.net/projects/gmat/files/GMAT/GMAT-R2017a/" target="_blank" rel="noopener">R2017a</a> 开发记录及 Bug 列表。下面对 <a href="http://gmat.sourceforge.net/docs/R2017a/html/ReleaseNotes.html#ReleaseNotesR2017a" target="_blank" rel="noopener">Release Notes</a> 作简单翻译。</p><h2 id="R2017a-新特性"><a href="#R2017a-新特性" class="headerlink" title="R2017a 新特性"></a>R2017a 新特性</h2><h3 id="1-定轨能力强化"><a href="#1-定轨能力强化" class="headerlink" title="1. 定轨能力强化"></a>1. 定轨能力强化</h3><hr><p>定轨方面,<a href="https://sourceforge.net/projects/gmat/files/GMAT/GMAT-R2017a/" target="_blank" rel="noopener">R2017a</a> 增加了如下新功能:</p><ul><li>新增了对三种数据类型的处理支持:1) GPS 导航状态矢量 (GPS_PosVec);2) 距离测量数据 (Range);3) 距离变化率数据 (RangeRate)。注意,这三种数据类型都经过反复测试,但只有 DSN 距离变化率数据通过了应用级测试,即 DSN 距离变化率数据对于 <a href="http://gmatcentral.org/display/GW/GMAT+Wiki+Home" target="_blank" rel="noopener">GMAT</a> 来说是可靠的数据。</li></ul><a id="more"></a><ul><li>扩展卡尔曼滤波器算法经小范围测试和归档后形成的 alpha 版本现在可用于实验性质的使用。 此插件可用,但默认情况下处于关闭状态。要使用它,请在启动文件中启用 “libEKF” 插件。</li><li>增加了二级数据编辑功能,此功能允许您选择未在估计状态更新中使用的观测值。</li></ul><h3 id="2-STK-e-格式星历预报器"><a href="#2-STK-e-格式星历预报器" class="headerlink" title="2. STK .e 格式星历预报器"></a>2. STK .e 格式星历预报器</h3><hr><p><a href="http://gmatcentral.org/display/GW/GMAT+Wiki+Home" target="_blank" rel="noopener">GMAT</a> 现在支持使用 AGI 的 <code>.e</code> 星历文件格式的预报器。 有关更多信息,请参阅 <a href="http://gmat.sourceforge.net/docs/R2017a/html/Propagator.html" target="_blank" rel="noopener">Propagator</a> 参考。</p><h3 id="3-文件管理工具"><a href="#3-文件管理工具" class="headerlink" title="3. 文件管理工具"></a>3. 文件管理工具</h3><hr><p><a href="http://gmatcentral.org/display/GW/GMAT+Wiki+Home" target="_blank" rel="noopener">GMAT</a> 现在可以使用 <a href="http://www.python.org/" target="_blank" rel="noopener">Python</a> 文件管理器管理经验数据更新。该实用程序允许用户轻松更新闰秒、EOP、空间天气和其他文件,并可选择归档旧版本。有关详细信息,请参阅配置 <a href="http://gmat.sourceforge.net/docs/R2018a/help.html#ConfiguringGmat_DataFiles" target="_blank" rel="noopener">GMAT 数据文件部分</a>。运行该实用程序时,用户将看到如下所示的输出(以下数据仅是输出的部分摘要)。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br></pre></td><td class="code"><pre><span class="line">--------UPDATING GMAT LEAP SECOND FILE ------------------------------</span><br><span class="line">Process Began At 2017-06-01-11:23:55</span><br><span class="line">--------Downloading tai-utc.dat</span><br><span class="line">tai-utc.dat downloaded successfully </span><br><span class="line">tai-utc.dat archived successfully to 2017-06-01-11h23m55s_tai-utc.dat</span><br><span class="line">tai-utc.dat updated successfully</span><br><span class="line">Process Finished At 2017-06-01-11:23:55</span><br><span class="line"></span><br><span class="line">--------UPDATING GMAT EOP FILE --------------------------------</span><br><span class="line">Process Began At 2017-06-01-11:23:55</span><br><span class="line">--------Downloading eopc04_08.62-now</span><br><span class="line">eopc04_08.62-now downloaded successfully </span><br><span class="line">eopc04_08.62-now archived successfully to </span><br><span class="line"> 2017-06-01-11h23m57s_eopc04_08.62-now</span><br><span class="line">eopc04_08.62-now updated successfully</span><br><span class="line"></span><br><span class="line">---------UPDATING SPICE LEAP SECOND FILE -----------------------</span><br><span class="line">Process Began At 2017-06-01-11:23:57</span><br><span class="line">--------Downloading naif0011.tls</span><br><span class="line">SPICELeapSecondKernel.tls downloaded successfully</span><br><span class="line">--------Downloading naif0012.tls</span><br><span class="line">SPICELeapSecondKernel.tls downloaded successfully</span><br><span class="line">SPICELeapSecondKernel.tls archived successfully to </span><br><span class="line"> 2017-06-01-11h24m00s_SPICELeapSecondKernel.tls</span><br><span class="line">SPICELeapSecondKernel.tls updated successfully</span><br><span class="line">Process Finished At 2017-06-01-11:24:00</span><br></pre></td></tr></table></figure><h3 id="4-CSALT-独立库与工具箱配置工具"><a href="#4-CSALT-独立库与工具箱配置工具" class="headerlink" title="4. CSALT 独立库与工具箱配置工具"></a>4. CSALT 独立库与工具箱配置工具</h3><hr><p><a href="http://gmatcentral.org/display/GW/GMAT+Wiki+Home" target="_blank" rel="noopener">GMAT</a> 现在有一个独立的 C++ 库,用于通过搭配 CSALT解决最优控制问题。 该库经过了充分测试,可用于应用程序,目前正在与 <a href="http://gmatcentral.org/display/GW/GMAT+Wiki+Home" target="_blank" rel="noopener">GMAT</a> 集成。 CSALT 库不通过 <a href="http://gmatcentral.org/display/GW/GMAT+Wiki+Home" target="_blank" rel="noopener">GMAT</a> 接口公开,但熟悉 C++ 编程的用户现在可以使用 CSALT 解决最优控制问题。源代码将通过 <a href="https://sourceforge.net/p/gmat/git/ci/GMAT-R2018a/tree/" target="_blank" rel="noopener">SourceForge</a> 提供。 CSALT 正在整合进入 <a href="http://gmatcentral.org/display/GW/GMAT+Wiki+Home" target="_blank" rel="noopener">GMAT</a>,并计划在下一个 <a href="http://gmatcentral.org/display/GW/GMAT+Wiki+Home" target="_blank" rel="noopener">GMAT</a> 版本发布时完成。有关 CSALT 库的更多信息,请参阅随 <a href="http://gmatcentral.org/display/GW/GMAT+Wiki+Home" target="_blank" rel="noopener">GMAT</a> 分发的 <code>docs</code> 文件夹中名为 <code>CSALT_CollocationBenchmarkingResults.pdf</code> 的论文。</p><h3 id="5-API-接口雏形"><a href="#5-API-接口雏形" class="headerlink" title="5. API 接口雏形"></a>5. API 接口雏形</h3><hr><p>一个还处于雏形阶段的 API 正在紧密锣鼓的开发中, 不可在生产环境中视同,只在 <a href="https://sourceforge.net/p/gmat/git/ci/GMAT-R2018a/tree/" target="_blank" rel="noopener">SourceForge</a> 中单独分发,并标注为 “Alpha”。API 使用 SWIG 将 <a href="http://gmatcentral.org/display/GW/GMAT+Wiki+Home" target="_blank" rel="noopener">GMAT</a> 的功能提供给多种语言。目前,已经在 MATLAB 中调用的 JAVA 接口上进行了初步测试。下面的代码片段展示了如何通过 MATLAB 调用 JAVA 接口来计算作用在航天器上的轨道加速度。还执行了一些 Python 接口测试。</p><figure class="highlight matlab"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">% Load GMAT</span></span><br><span class="line">scriptFileName = fullfile(pwd, <span class="string">'gmat.script'</span>);</span><br><span class="line">[myMod, gmatBinPath, result] = load_gmat(scriptFileName);</span><br><span class="line"></span><br><span class="line"><span class="comment">% Get the SolarSystem object from GMAT</span></span><br><span class="line">ss = myMod.GetDefaultSolarSystem();</span><br><span class="line"></span><br><span class="line"><span class="comment">% Prepare the force model to be used for dynamics</span></span><br><span class="line">fm = myMod.GetODEModel(<span class="string">'DefaultProp_ForceModel'</span>);</span><br><span class="line">state = gmat.GmatState(<span class="number">6</span>+<span class="number">6</span>^<span class="number">2</span>);</span><br><span class="line">fm.SetSolarSystem(ss); <span class="comment">% Set solar system pointer in force model</span></span><br><span class="line">fm.SetState(state); <span class="comment">% Provide force model with the state placeholder</span></span><br><span class="line"></span><br><span class="line"><span class="comment">% Create new Spacecraft</span></span><br><span class="line">sat = gmat.Spacecraft(<span class="string">'Sat'</span>); </span><br><span class="line"></span><br><span class="line"><span class="comment">% Create PropagationStateManager to manage calculation of derivatives</span></span><br><span class="line">propManager = gmat.PropagationStateManager();</span><br><span class="line">propManager.SetObject(sat); <span class="comment">% Add sat PropagationStateManager</span></span><br><span class="line">propManager.SetProperty(<span class="string">'AMatrix'</span>, sat); <span class="comment">% Want to calculate Jacobian</span></span><br><span class="line">propManager.BuildState(); </span><br><span class="line"></span><br><span class="line"><span class="comment">% Tell force model to use propmanager</span></span><br><span class="line">fm.SetPropStateManager(propManager);</span><br><span class="line">fm.UpdateInitialData(); <span class="comment">% Update model with changes</span></span><br><span class="line">fm.BuildModelFromMap(); <span class="comment">% Sets up the models in the force model</span></span><br><span class="line">state = gmat.gmat.convertJavaDoubleArray(x(:,tIndex));</span><br><span class="line"></span><br><span class="line"><span class="comment">% Compute the orbital accelerations including variational terms</span></span><br><span class="line">fm.GetDerivatives(state, t(tIndex), <span class="number">1</span>); <span class="comment">% Calculate derivatives</span></span><br><span class="line">deriv = fm.GetDerivativeArray(); <span class="comment">% Get calculated derivatives</span></span><br><span class="line">derivArray = gmat.gmat.convertDoubleArray(deriv, <span class="number">42</span>);</span><br></pre></td></tr></table></figure><h2 id="R2017a-性能改进"><a href="#R2017a-性能改进" class="headerlink" title="R2017a 性能改进"></a>R2017a 性能改进</h2><ul><li>用户现在可以通过命令行界面定义 <a href="http://gmatcentral.org/display/GW/GMAT+Wiki+Home" target="_blank" rel="noopener">GMAT</a> 启动和日志的文件名称和位置。 这在同时运行多个 <a href="http://gmatcentral.org/display/GW/GMAT+Wiki+Home" target="_blank" rel="noopener">GMAT</a> 会话或具有复杂的自定义文件配置时非常有用。</li><li>用户现在可以用米为单位编写 <code>STK ephem</code> 文件(之前只支持 km)。</li><li>用户现在可以编写没有离散事件边界的 <code>STK ephem</code> 文件。</li></ul><h2 id="R2017a-兼容性变化"><a href="#R2017a-兼容性变化" class="headerlink" title="R2017a 兼容性变化"></a>R2017a 兼容性变化</h2><ul><li><a href="http://gmatcentral.org/display/GW/GMAT+Wiki+Home" target="_blank" rel="noopener">GMAT</a> 现在需要 Python 3.6.x。</li><li><code>Schatten</code> 文件不再需要文件顶部的 “PREDICTED SOLAR DATA” 关键字。</li><li><a href="http://gmatcentral.org/display/GW/GMAT+Wiki+Home" target="_blank" rel="noopener">GMAT</a> 用的多个数据文件的名称和位置不再是硬编码,它们的名称和位置在 <code>bin</code> 目录中的文件 <code>gmat_startup_file.txt</code> 中设置。如果用户使用自定义启动文件,则必须在启动 <a href="http://gmatcentral.org/display/GW/GMAT+Wiki+Home" target="_blank" rel="noopener">GMAT</a> 之前将以下行添加到启动文件中。请注意,与 <a href="http://gmatcentral.org/display/GW/GMAT+Wiki+Home" target="_blank" rel="noopener">GMAT</a> 一起分发的启动文件已经添加了这些设置。这种向后兼容的模式仅影响自定义其启动文件的用户。</li></ul><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">EARTH_LATEST_PCK_FILE = PLANETARY_COEFF_PATH/earth_latest_high_prec.bpc</span><br><span class="line">EARTH_PCK_PREDICTED_FILE = PLANETARY_COEFF_PATH/SPICEEarthPredictedKernel.bpc</span><br><span class="line">EARTH_PCK_CURRENT_FILE = PLANETARY_COEFF_PATH/SPICEEarthCurrentKernel.bpc</span><br><span class="line">LUNA_PCK_CURRENT_FILE = PLANETARY_COEFF_PATH/SPICELunaCurrentKernel.bpc</span><br><span class="line">LUNA_FRAME_KERNEL_FILE = PLANETARY_COEFF_PATH/SPICELunaFrameKernel.tf</span><br></pre></td></tr></table></figure><ul><li>为了整个系统的一致性,导航功能的语法已经发生了重大变化。有关详细信息,请参阅 <a href="http://gmat.sourceforge.net/docs/R2017a/html/TrackingDataTypes.html" target="_blank" rel="noopener">Tracking Data Types for OD</a> 中的 <strong>Deprecated Measurement Type Names</strong> 部分内容。</li></ul><hr><p class="text-muted"></p><p>© Copyright by Spacefan 2017~2019. </p><p></p>]]></content>
<categories>
<category> 专业技能 </category>
</categories>
<tags>
<tag> GMAT </tag>
<tag> Space </tag>
<tag> 航天 </tag>
<tag> 任务分析 </tag>
<tag> 轨道设计 </tag>
<tag> 轨迹优化 </tag>
<tag> NASA </tag>
<tag> GSFC </tag>
</tags>
</entry>
<entry>
<title>ORBITER 2016 发布</title>
<link href="/2016/08/31/orbiter2016/"/>
<url>/2016/08/31/orbiter2016/</url>
<content type="html"><![CDATA[<h2 id="ORBITER-2016-基本说明"><a href="#ORBITER-2016-基本说明" class="headerlink" title="ORBITER 2016 基本说明"></a>ORBITER 2016 基本说明</h2><hr><p>经过长达 6 年之久的开发,<a href="http://orbit.medphys.ucl.ac.uk/index.html" target="_blank" rel="noopener">ORBITER 2016</a> 正式版本已于今日发布,小伙伴们又可以捣鼓捣鼓了。啥?还不知道 <a href="http://orbit.medphys.ucl.ac.uk/index.html" target="_blank" rel="noopener">ORBITER</a> 是神马东东?赶快跳转 <a href="https://spacefan.github.io/2016/03/25/orbiter-intro/" target="_blank" rel="noopener">ORBITER 模拟航天入门攻略 - Ch00</a>。</p><p><a href="http://orbit.medphys.ucl.ac.uk/index.html" target="_blank" rel="noopener">ORBITER 2016</a> 相对于 <code>ORBITER 2010</code> 有许多改进,但最为重大的改进当属高清数字高程地形(DEM)的加入,这使得行星地表看起来更加清晰,用户体验更加逼真。</p><p>此外,<a href="http://orbit.medphys.ucl.ac.uk/index.html" target="_blank" rel="noopener">ORBITER 2016</a> 重写了物理引擎,增强了碰撞检测,改进了默认机型 <code>Delta-glider MK.4</code> 。废话少说,上视频,直观地感受一下新版本在模拟航天方面实实在在看得见的进步。</p><a id="more"></a><h2 id="ORBITER-2016-高清演示"><a href="#ORBITER-2016-高清演示" class="headerlink" title="ORBITER 2016 高清演示"></a>ORBITER 2016 高清演示</h2><hr><embed src="https://imgcache.qq.com/tencentvideo_v1/playerv3/TPout.swf?max_age=86400&v=20161117&vid=e0326o2xty9&auto=0" allowfullscreen="true" quality="high" width="690" height="450" align="middle" allowscriptaccess="always" type="application/x-shockwave-flash"><h2 id="ORBITER-2016-功能简介"><a href="#ORBITER-2016-功能简介" class="headerlink" title="ORBITER 2016 功能简介"></a>ORBITER 2016 功能简介</h2><hr><p>Martin 先生在更新 <a href="http://orbit.medphys.ucl.ac.uk/index.html" target="_blank" rel="noopener">ORBITER</a> 版本的同时,不忘更新 <a href="http://orbit.medphys.ucl.ac.uk/index.html" target="_blank" rel="noopener">ORBITER</a> 首页,Martin 先生列出了 9 个 <a href="http://orbit.medphys.ucl.ac.uk/index.html" target="_blank" rel="noopener">ORBITER</a> 的功能或特性,当然 <a href="http://orbit.medphys.ucl.ac.uk/index.html" target="_blank" rel="noopener">ORBITER</a> 的神奇并不仅仅局限于此。</p><p><img src="/images/orbiter/orbiter-HomePage.png" alt="ORBITER 2016 特性简介"></p><hr><p class="text-muted"></p><p>© Copyright by Spacefan 2016~2019. </p><p></p>]]></content>
<categories>
<category> 模拟飞行 </category>
</categories>
<tags>
<tag> Space </tag>
<tag> ORBITER </tag>
<tag> 模拟航天 </tag>
</tags>
</entry>
<entry>
<title>ORBITER 模拟航天入门攻略 - Ch00</title>
<link href="/2016/03/25/orbiter-intro/"/>
<url>/2016/03/25/orbiter-intro/</url>
<content type="html"><![CDATA[<h2 id="基本简介"><a href="#基本简介" class="headerlink" title="基本简介"></a>基本简介</h2><hr><p><a href="http://orbit.medphys.ucl.ac.uk/index.html" target="_blank" rel="noopener">ORBITER</a> 是一款功能异常强大的免费太空飞行模拟器,它可以带你冲破卡门线,驶入浩瀚的星空,体味驾驶宇宙飞船的快感。</p><p><a href="http://orbit.medphys.ucl.ac.uk/index.html" target="_blank" rel="noopener">ORBITER</a> 的核心部分由 <a href="http://orbit.medphys.ucl.ac.uk/index.html" target="_blank" rel="noopener">Dr. Martin Schweiger</a> 团队开发,第一个版本于 2000 年 11 月 27 日发布,最新稳定版本为 <code>ORBITER 2016</code>。通常,官方发布的 <a href="http://orbit.medphys.ucl.ac.uk/index.html" target="_blank" rel="noopener">ORBITER</a> 版本只是基础版(<code>Base Edition</code>),用户要想获得绝佳的飞行体验还需要下载第三方扩展插件,如 <a href="http://orbiter.dansteph.com/index.php" target="_blank" rel="noopener">DanSteph</a> 开发的 <a href="http://orbiter.dansteph.com/forum/index.php?page=download" target="_blank" rel="noopener">OrbiterSound</a>,及社区开发用于支持 <code>DirectX9</code> 图形渲染的 <a href="http://d3d9client.codeplex.com/" target="_blank" rel="noopener">D3D9Client</a> 客户端。</p><p><a href="http://orbit.medphys.ucl.ac.uk/index.html" target="_blank" rel="noopener">ORBITER</a> 能够十分真实地模拟航天器在轨运行的轨迹,这源于隐藏在视觉背后的航天动力学理论知识。当用户驾驶飞船翱翔在太阳系时,实际上是沉侵于太阳强大的引力场中。下面让我们用三个视频来更为直观地认识 <a href="http://orbit.medphys.ucl.ac.uk/index.html" target="_blank" rel="noopener">ORBITER</a>。</p><a id="more"></a><blockquote><p><strong>A FILM BY TEX - ORBITER 2006-P1 EDITION</strong><br> <embed src="https://imgcache.qq.com/tencentvideo_v1/playerv3/TPout.swf?max_age=86400&v=20161117&vid=w03268p8x81&auto=0" allowfullscreen="true" quality="high" width="790" height="540" align="middle" allowscriptaccess="always" type="application/x-shockwave-flash"></p><p><strong>ALR-4 - MISSION TO VENUS</strong><br> <embed src="https://imgcache.qq.com/tencentvideo_v1/playerv3/TPout.swf?max_age=86400&v=20161117&vid=g03264tc6m0&auto=0" allowfullscreen="true" quality="high" width="790" height="540" align="middle" allowscriptaccess="always" type="application/x-shockwave-flash"></p><p><strong>A FILM BY TEX - Jupiter Odyssey</strong><br> <embed src="https://imgcache.qq.com/tencentvideo_v1/playerv3/TPout.swf?max_age=86400&v=20161117&vid=x0326avo9te&auto=0" allowfullscreen="true" quality="high" width="790" height="540" align="middle" allowscriptaccess="always" type="application/x-shockwave-flash"></p></blockquote><p><code>(: 肿么样! 有没有感觉到:高、大、上 :)</code></p><h2 id="影响力"><a href="#影响力" class="headerlink" title="影响力"></a>影响力</h2><hr><p>经过十多年的开发,<a href="http://orbit.medphys.ucl.ac.uk/index.html" target="_blank" rel="noopener">ORBITER</a> 日益成熟,在国内外得到了广大模拟飞行爱好者的青睐。在国外,<a href="http://orbit.medphys.ucl.ac.uk/index.html" target="_blank" rel="noopener">ORBITER</a> 已经广泛用于教学辅助,产生了巨大的反响。在 <a href="http://www.youtube.com" target="_blank" rel="noopener">Yutube</a> 上,众多 <a href="http://orbit.medphys.ucl.ac.uk/index.html" target="_blank" rel="noopener">ORBITER</a> 爱好者发布有相关的教学视频,帮助初学者快速进入角色。</p><p><a href="http://orbit.medphys.ucl.ac.uk/index.html" target="_blank" rel="noopener">ORBITER</a> 的发展离不开强大的社区,其中最值得一提的是由 Tex 组建的官方论坛 <a href="http://www.orbiter-forum.com/" target="_blank" rel="noopener">ORBITER Forum</a>。在这里中,众多 <a href="http://orbit.medphys.ucl.ac.uk/index.html" target="_blank" rel="noopener">ORBITER</a> 爱好者齐聚一堂,相互学习、相互帮助、协同开发,共同推动着 <a href="http://orbit.medphys.ucl.ac.uk/index.html" target="_blank" rel="noopener">ORBITER</a> 向前发展。</p><h2 id="开放度"><a href="#开放度" class="headerlink" title="开放度"></a>开放度</h2><hr><p><a href="http://orbit.medphys.ucl.ac.uk/index.html" target="_blank" rel="noopener">ORBITER</a> 虽然可以免费获取,但它并不是一款开源软件,它的开放性体现在 SDK (Software Development Kits,软件开发套件)。通过 SDK 预设的 API,开发者可以进行二次开发,创建出各种各样属于自己的箭船、地景、星球、MFD 以及其它各种各样的插件。</p><h2 id="任务类型"><a href="#任务类型" class="headerlink" title="任务类型"></a>任务类型</h2><hr><p><a href="http://orbit.medphys.ucl.ac.uk/index.html" target="_blank" rel="noopener">ORBITER</a> 之所以受到广大模拟飞行爱好者的青睐,是因为其具有丰富的任务类型。你无需担心来自外星人的攻击,也无需为提高等级而“过关斩将”。你唯一需要做的就是自己设定好飞行任务,然后飞到太阳系中任何你想去的地方。通常情况下,用户可以在 <a href="http://orbit.medphys.ucl.ac.uk/index.html" target="_blank" rel="noopener">ORBITER</a> 中执行以下几类基本任务:</p><ul><li>驾驶各色各样的飞行器奔向太空;</li><li>在太空中进行各种形式的轨道机动;</li><li>执行各种航天任务,如交会对接、太空行走(EVA)、载荷部署、空间目标捕获及空间站组建等,当然还有欣赏太空那迷人的美景;</li><li>进行星际航行,访问太阳系内的行星或卫星;</li><li>从太空返回并降落,当然最好是能安全降落。</li></ul><h2 id="内建航天器"><a href="#内建航天器" class="headerlink" title="内建航天器"></a>内建航天器</h2><hr><p><a href="http://orbit.medphys.ucl.ac.uk/index.html" target="_blank" rel="noopener">ORBITER</a> 基础版本含有丰富的内建航天器,包含真实世界中存在的航天器和概念航天器。</p><h3 id="真实世界存在的航天器"><a href="#真实世界存在的航天器" class="headerlink" title="真实世界存在的航天器"></a>真实世界存在的航天器</h3><hr><h4 id="1-“阿特兰蒂斯号”-航天飞机-Space-Shuttle-Atlantis"><a href="#1-“阿特兰蒂斯号”-航天飞机-Space-Shuttle-Atlantis" class="headerlink" title="1. “阿特兰蒂斯号” 航天飞机 (Space Shuttle Atlantis)"></a>1. “阿特兰蒂斯号” 航天飞机 (Space Shuttle Atlantis)</h4><hr><blockquote><p><code>阿特兰蒂斯号</code> 是美国航天飞机梯队中的一员,由 <code>NASA</code> 运行维护。由于航天飞机维修花费巨大,且安全系数较低,已于2011年退出历史舞台。在 <a href="http://orbit.medphys.ucl.ac.uk/index.html" target="_blank" rel="noopener">ORBITER</a> 中,<code>阿特兰蒂斯号</code> 航天飞机是唯一一架玩家可操作的、基于真实设计参数构建的飞行器模型。</p></blockquote><h4 id="2-“和平号”-空间站-Space-Station-Mir"><a href="#2-“和平号”-空间站-Space-Station-Mir" class="headerlink" title="2. “和平号” 空间站 (Space Station Mir)"></a>2. “和平号” 空间站 (Space Station Mir)</h4><hr><blockquote><p><code>和平号</code> 空间站是前苏联发展的第三代空间站,象征着空间站走向实用阶段。前苏联解体后,<code>和平号</code> 空间站由俄罗斯接管,并超期服役至2001年,最终坠入太平洋。在 <a href="http://orbit.medphys.ucl.ac.uk/index.html" target="_blank" rel="noopener">ORBITER</a> 中,<code>和平号</code> 空间站并未坠毁,而是被放置在了一个近椭圆轨道。这样做的初衷是为了让 <code>和平号</code> 间站成为早期 <a href="http://orbit.medphys.ucl.ac.uk/index.html" target="_blank" rel="noopener">ORBITER</a> 版本中进行星际航行较好的出发点,当玩家驾驶着飞船与 <code>和平号</code> 空间站对接后,可以自动加注燃料,向更远的星际空间飞去。另外,玩家也可以从 <code>和平号</code> 空间站转移到最终的目标轨道。</p></blockquote><h4 id="3-国际空间站-International-Space-Station,ISS"><a href="#3-国际空间站-International-Space-Station,ISS" class="headerlink" title="3. 国际空间站 (International Space Station,ISS)"></a>3. 国际空间站 (International Space Station,ISS)</h4><hr><blockquote><p>运行在与真实世界相同轨道上并组装完成的 <code>国际空间站</code>,包括当前已经取消安装计划的模块。</p></blockquote><h4 id="4-哈勃太空望远镜-Hubble-Space-Telescope,HST"><a href="#4-哈勃太空望远镜-Hubble-Space-Telescope,HST" class="headerlink" title="4. 哈勃太空望远镜 (Hubble Space Telescope,HST)"></a>4. 哈勃太空望远镜 (Hubble Space Telescope,HST)</h4><hr><blockquote><p>真实比列的 <code>哈勃太空望远镜</code>模型,在 <a href="http://orbit.medphys.ucl.ac.uk/index.html" target="_blank" rel="noopener">ORBITER</a> 中通常作为航天飞机的载荷。</p></blockquote><h4 id="5-长期暴露装置-Long-Duration-Exposure-Facility,LDEF"><a href="#5-长期暴露装置-Long-Duration-Exposure-Facility,LDEF" class="headerlink" title="5. 长期暴露装置 (Long Duration Exposure Facility,LDEF)"></a>5. 长期暴露装置 (Long Duration Exposure Facility,LDEF)</h4><hr><blockquote><p><code>LDEF</code> 是 <code>NASA</code> 为研究空间环境对航天器性能影响作用机理而发射的实验卫星,在将近 6 年的暴露时间里,<code>LDEF</code> 经历了各种空间环境的作用,为 <code>NASA</code> 研究人员提供了宝贵的实验数据。和 <code>哈勃太空望远镜</code> 一样,<code>LDEF</code> 是 <a href="http://orbit.medphys.ucl.ac.uk/index.html" target="_blank" rel="noopener">ORBITER</a> 中航天飞机极佳的有效载荷之一。</p></blockquote><h3 id="概念航天器"><a href="#概念航天器" class="headerlink" title="概念航天器"></a>概念航天器</h3><hr><h4 id="1-Delta-glider-MK-4"><a href="#1-Delta-glider-MK-4" class="headerlink" title="1. Delta-glider MK.4"></a>1. Delta-glider MK.4</h4><hr><blockquote><p><code>德尔塔</code> 三角翼空天飞机是 <a href="http://orbit.medphys.ucl.ac.uk/index.html" target="_blank" rel="noopener">ORBITER</a> 经典的入门级飞行器,它十分容易操作,所以被 <a href="http://orbit.medphys.ucl.ac.uk/index.html" target="_blank" rel="noopener">ORBITER</a> 用作默认飞行器。有两种型号的 <code>德尔塔</code>,一种是 <code>Delta-glider Mk.4 (DG)</code>,另一种是 <code>Delta-glider-S MK.4 (DG-S)</code>。<code>DG-S</code> 在 <code>DG</code> 的基础上加装了超燃发动机,使得其可以在高层大气进行超音速飞行。由于德尔塔的设计过程中采用了超高比冲的推进剂和超低燃料消耗率的发动机,所以它可以很轻松地实现单级入轨,并具备星际航行的能力。</p></blockquote><h4 id="2-Shuttle-A"><a href="#2-Shuttle-A" class="headerlink" title="2. Shuttle-A"></a>2. Shuttle-A</h4><hr><blockquote><p><code>Shuttle-A</code> 是 <a href="http://orbit.medphys.ucl.ac.uk/index.html" target="_blank" rel="noopener">ORBITER</a> 中的小型概念太空货运飞船,可以运输六个总重高达120吨的大型货箱。它没有气动操纵面,主要用于月球和火星测探。空载时,<code>Shuttle-A</code> 可以从地球起飞,并降落在地面上。但由于其缺乏气动升力,加上地球的引力和大气阻力,使得 <code>Shuttle-A</code> 从地面起飞、降落变得困难,且十分消耗燃料。 <code>Shuttle-A</code> 的货箱带有自动降落伞,因而可以在高层大气释放货物。<code>Shuttle-A</code> 的惯性大,空气动力学性能极差,致使其比 <code>德尔塔</code>更难在大气层内飞行。</p></blockquote><h4 id="3-Shuttle-PB"><a href="#3-Shuttle-PB" class="headerlink" title="3. Shuttle-PB"></a>3. Shuttle-PB</h4><hr><blockquote><p><code>Shuttle-PB</code> 是 <a href="http://orbit.medphys.ucl.ac.uk/index.html" target="_blank" rel="noopener">ORBITER</a> 中的小型个人航天器,其敏捷性高,外形设计具有前瞻性。由于主要作为 SDK 样例供插件开发者参考,所以相对于 <a href="http://orbit.medphys.ucl.ac.uk/index.html" target="_blank" rel="noopener">ORBITER</a> 中的其它内建飞船,<code>Shuttle-PB</code> 缺乏具体的细节,如 2D/3D 座舱和动画显示功能。</p></blockquote><h4 id="4-Dragonfly"><a href="#4-Dragonfly" class="headerlink" title="4. Dragonfly"></a>4. Dragonfly</h4><hr><blockquote><p><code>Dragonfly</code> 是 <a href="http://orbit.medphys.ucl.ac.uk/index.html" target="_blank" rel="noopener">ORBITER</a> 中为空间站组件而设计的一种构造复杂的载人航天运载器,它对多个子系统进行了仿真设计,其复杂度胜过 <a href="http://orbit.medphys.ucl.ac.uk/index.html" target="_blank" rel="noopener">ORBITER</a> 其它所有内建航天器。<code>Dragonfly</code> 作为 SDK 技术实现层面的绝佳示例,其源代码包含在 ORBITER/SDK 安装包内。<code>Dragonfly</code> 的飞行模型设计参数可以用当前的航天技术实现,所以称 <code>Dragonfly</code> 是一种接近现实的航天器。</p></blockquote><h4 id="5-Luna-OB1"><a href="#5-Luna-OB1" class="headerlink" title="5. Luna-OB1"></a>5. Luna-OB1</h4><hr><blockquote><p><code>Luna-OB1</code> 是 <a href="http://orbit.medphys.ucl.ac.uk/index.html" target="_blank" rel="noopener">ORBITER</a> 中的一座科幻轮状月球轨道空间站,其设计灵感来自《2001: A Space Odyssey》片头中的 <code>Space Station V</code>。由于 <code>Luna-OB1</code> 以固定的旋转角速度运动,所以与其对接是一件极具挑战性的任务。</p></blockquote><h4 id="6-Carina"><a href="#6-Carina" class="headerlink" title="6. Carina"></a>6. Carina</h4><hr><blockquote><p><code>Carina</code> 是一种小型的概念卫星,在 <a href="http://orbit.medphys.ucl.ac.uk/index.html" target="_blank" rel="noopener">ORBITER</a> 中作为航天飞机的有效载荷,但目前还属于毫无用途的载荷类型。</p></blockquote><h2 id="操作复杂度"><a href="#操作复杂度" class="headerlink" title="操作复杂度"></a>操作复杂度</h2><hr><p><a href="http://orbit.medphys.ucl.ac.uk/index.html" target="_blank" rel="noopener">ORBITER</a> 并不像多数商业化太空游戏,只具备十分粗糙的物理模型,其内部采用的是精确的航天动力学模型,包括 <code>Kepler</code> 二体轨道、非球形摄动(只考虑带谐项)、大气阻力摄动(高达 2000km)及太阳光压摄动。如果你想真正理解 <a href="http://orbit.medphys.ucl.ac.uk/index.html" target="_blank" rel="noopener">ORBITER</a> 的运行方式,需要有一定的轨道力学基础。</p><p>此外,虽然 <a href="http://orbit.medphys.ucl.ac.uk/index.html" target="_blank" rel="noopener">ORBITER</a> 可以连接飞行摇杆,但绝大多数操作需要使用快捷键,这在某种程度上也增加了 <a href="http://orbit.medphys.ucl.ac.uk/index.html" target="_blank" rel="noopener">ORBITER</a> 的入门难度。</p><p>总而言之,<a href="http://orbit.medphys.ucl.ac.uk/index.html" target="_blank" rel="noopener">ORBITER</a> 是一款十分严谨的太空飞行模拟器,掌握 <a href="http://orbit.medphys.ucl.ac.uk/index.html" target="_blank" rel="noopener">ORBITER</a> 需要大量的实践操作,以及对轨道力学的深刻理解。</p><h2 id="文档完善度"><a href="#文档完善度" class="headerlink" title="文档完善度"></a>文档完善度</h2><hr><p><a href="http://orbit.medphys.ucl.ac.uk/index.html" target="_blank" rel="noopener">ORBITER</a> 经过十多年的发展,拥有数量相当可观的用户群,相关的教程也较为完善。除了官方发布的文档外(位于 <a href="http://orbit.medphys.ucl.ac.uk/index.html" target="_blank" rel="noopener">ORBITER</a> 安装根目录下的 \Doc 子文件夹内),互联网上可以找到很多关于 <a href="http://orbit.medphys.ucl.ac.uk/index.html" target="_blank" rel="noopener">ORBITER</a> 的学习资料。但由于绝大多数教程由英文写成,且专业性较强,所以 <a href="http://orbit.medphys.ucl.ac.uk/index.html" target="_blank" rel="noopener">ORBITER</a> 的学习曲线仍然相当陡峭。</p><p>最后需要说明的是,要想成为一名顶级的 <a href="http://orbit.medphys.ucl.ac.uk/index.html" target="_blank" rel="noopener">ORBITER</a> 玩家,需要大量的时间和持久的耐心进行实践操作,在此过程中一定要坚持,不气馁、不放弃。永远记住,这是真正的太空模拟飞行,而不只是游戏。毕竟,我们选择在 <a href="http://orbit.medphys.ucl.ac.uk/index.html" target="_blank" rel="noopener">ORBITER</a> 中模拟飞行,<code>不是因为它简单,而是因为它难</code>。</p><hr><p class="text-muted"></p><p>© Copyright by Spacefan 2016~2019. </p><p></p>]]></content>
<categories>
<category> 模拟飞行 </category>
</categories>
<tags>
<tag> Space </tag>
<tag> ORBITER </tag>
<tag> 模拟飞行 </tag>
</tags>
</entry>
<entry>
<title>GMAT 入门攻略 - Ch00</title>
<link href="/2016/03/15/GMAT-intro/"/>
<url>/2016/03/15/GMAT-intro/</url>
<content type="html"><![CDATA[<h2 id="基本情况"><a href="#基本情况" class="headerlink" title="基本情况"></a>基本情况</h2><hr><p><a href="http://gmatcentral.org/display/GW/GMAT+Wiki+Home" target="_blank" rel="noopener">GMAT</a> 是一套由 <a href="http://www.nasa.gov/" target="_blank" rel="noopener">NASA</a> <a href="http://www.nasa.gov/goddard" target="_blank" rel="noopener">戈达德太空飞行中心(Goddard Space Flight Center, GSFC)</a> 主导开发的通用航天任务仿真工具,作为一款开源的通用航天任务分析仿真软件, 其功能涵盖了基本的航天任务分析需求,如轨道设计、轨道优化、飞行任务分析、星座设计及行星际飞行仿真等。<a href="http://gmatcentral.org/display/GW/GMAT+Wiki+Home" target="_blank" rel="noopener">GMAT</a> 的仿真精度可以与 <a href="http://www.agi.com/" target="_blank" rel="noopener">AGI/STK</a> 相媲美,足以将其直接应用于通用航天任务的分析与仿真工作之中。</p><h2 id="项目起源"><a href="#项目起源" class="headerlink" title="项目起源"></a>项目起源</h2><hr><p><a href="http://gmatcentral.org/display/GW/GMAT+Wiki+Home" target="_blank" rel="noopener">GMAT</a> 为 <font size="3px" color="blue"> <u>G</u> </font>eneral <font size="3px" color="blue"> <u>M</u> </font>ission <font size="3px" color="blue"> <u>A</u> </font>nalysis <font size="3px" color="blue"> <u>T</u> </font>ool 的首字母缩写,由 <a href="http://www.nasa.gov/goddard" target="_blank" rel="noopener">GSFC</a> 从 2002 年开始开发。 随后在 <a href="http://www.nasa.gov/" target="_blank" rel="noopener">NASA</a> 的号召下,Thinking System. Inc、Computer Sciences Corporation 以及 Honeywell Technology Solutions. Inc 等公司参与了该软件的开发,目前 <a href="http://www.nasa.gov/" target="_blank" rel="noopener">NASA</a> 仍在继续寻找开源伙伴合作参与该项目的进一步研发。</p><a id="more"></a><h2 id="主要特性"><a href="#主要特性" class="headerlink" title="主要特性"></a>主要特性</h2><hr><p><a href="http://gmatcentral.org/display/GW/GMAT+Wiki+Home" target="_blank" rel="noopener">GMAT</a> 的主要特性包括:</p><ul><li>高仿真度航天动力学模型;</li><li>图形和报表生成;</li><li>任务优化及目标定位;</li><li><a href="http://www.mathworks.com" target="_blank" rel="noopener">MATLAB</a> & <a href="http://www.python.org" target="_blank" rel="noopener">Python</a> 编程接口;</li><li><a href="http://www.apache.org/licenses/" target="_blank" rel="noopener">Apache License Version 2.0</a> 开源许可协议;</li><li>跨平台:支持Windows/MacOS X/Linux;</li><li>内建脚本编程;</li><li>用户自定义函数;</li><li>以及二次开发等。</li></ul><p>当前最新版本为2017年7月18日发布的 <a href="https://sourceforge.net/projects/gmat/files/GMAT/GMAT-R2017a/" target="_blank" rel="noopener">GMAT R2017a</a>。经过十多年的持续开发,<a href="http://gmatcentral.org/display/GW/GMAT+Wiki+Home" target="_blank" rel="noopener">GMAT</a> 的 <a href="http://gmat.sourceforge.net/docs/" target="_blank" rel="noopener">用户手册</a> 已经相当完善,但由于文档皆用英文撰写,所以学习起来存在一定的语言障碍。</p><p><img src="/images/gmat/SplashScreen.png" alt="GMAT 启动窗口"></p><hr><p class="text-muted"></p><p>© Copyright by Spacefan 2016~2019. </p><p></p>]]></content>
<categories>
<category> 专业技能 </category>
</categories>
<tags>
<tag> GMAT </tag>
<tag> Space </tag>
<tag> 航天 </tag>
<tag> 任务分析 </tag>
<tag> 轨道设计 </tag>
<tag> 轨迹优化 </tag>
<tag> NASA </tag>
<tag> GSFC </tag>
</tags>
</entry>
<entry>
<title>世界你好!</title>
<link href="/2016/03/15/hexo-hello-world/"/>
<url>/2016/03/15/hexo-hello-world/</url>
<content type="html"><![CDATA[<p>很高兴使用 <a href="https://hexo.io/" target="_blank" rel="noopener">Hexo</a>! 这是我的第一篇博文。查看 <a href="https://hexo.io/docs/" target="_blank" rel="noopener">documentation</a> 可以获取更多关于 <a href="https://hexo.io/" target="_blank" rel="noopener">Hexo</a> 的信息。如果你在使用 <a href="https://hexo.io/" target="_blank" rel="noopener">Hexo</a> 的过程中遇到问题,可以访问 <a href="https://hexo.io/docs/troubleshooting.html" target="_blank" rel="noopener">troubleshooting</a> 或者在 <a href="https://github.com/hexojs/hexo/issues" target="_blank" rel="noopener">GitHub</a> 上询问 <a href="https://hexo.io/" target="_blank" rel="noopener">Hexo</a> 的作者。</p><h2 id="快速开始"><a href="#快速开始" class="headerlink" title="快速开始"></a>快速开始</h2><h3 id="创建新博文"><a href="#创建新博文" class="headerlink" title="创建新博文"></a>创建新博文</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo new <span class="string">"My New Post"</span></span><br></pre></td></tr></table></figure><p>更多信息: <a href="https://hexo.io/docs/writing.html" target="_blank" rel="noopener">Writing</a></p><h3 id="运行服务"><a href="#运行服务" class="headerlink" title="运行服务"></a>运行服务</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo server</span><br></pre></td></tr></table></figure><p>更多信息: <a href="https://hexo.io/docs/server.html" target="_blank" rel="noopener">Server</a></p><h3 id="生成静态文件"><a href="#生成静态文件" class="headerlink" title="生成静态文件"></a>生成静态文件</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo generate</span><br></pre></td></tr></table></figure><a id="more"></a><p>更多信息: <a href="https://hexo.io/docs/generating.html" target="_blank" rel="noopener">Generating</a></p><h3 id="部署至远程站点"><a href="#部署至远程站点" class="headerlink" title="部署至远程站点"></a>部署至远程站点</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo deploy</span><br></pre></td></tr></table></figure><p>更多信息: <a href="https://hexo.io/docs/deployment.html" target="_blank" rel="noopener">Deployment</a></p>]]></content>
<categories>
<category> Hexo建站 </category>
</categories>
<tags>
<tag> Hexo </tag>
</tags>
</entry>
</search>