一、源起
本来只是浅学一下Orekit,后来发现Orekit里的姿态类AttitudeProvider顾名思义只是提供了几个模型的姿态,姿态只是工具,不是计算为目的的。发现有论坛上有欧洲大佬推荐了美国项目Basilisk,就想下载下来摸摸。过程中遇到一些小坑,记录一下。总的来说,就像“Orekit+Oreczml”能够完成测定轨计算+可视化一样,“Basilisk+Vizard”能够完成姿态+可视化。动量轮和姿态控制的计算,能很方便的可视化出来。

这比STK的可视化方案好在哪里呢?总结下是
1、免费开源;2、速度快(因为内核是c/c++)3、好上手(因为外皮是python)
二、官网简介
https://avslab.github.io/basilisk/
“Basilisk(简称BSK)是一个软件框架,既能实现超实时航天器仿真,包括可重复的蒙特卡洛仿真选项,又能为硬件在环仿真提供实时选项。Basilisk软件包设计为一组用C/C++编写的Python模块,既便于Python脚本编写和重新配置,又能提供C/C++的执行速度。该软件由科罗拉多大学AVS实验室和大气与空间物理实验室(LASP)联合开发。该框架旨在用于天体力学研究,模拟复杂航天器系统的轨道和姿态,以及包括硬件在环场景在内的复杂任务特定飞行器仿真。”
开始搜了一下Basilisk发现其实好多叫这个名字的开源项目,下次找记得加上AVS Lab
三、安装的坑
先在这里再提醒一句,为了避免出现玄学问题,最好所有目录都不要用汉字。
1、Git下载源码
https://github.com/AVSLab/basilisk
2、准备环境
这个部分比较坑,因为多平台Win\Linux\mac,就是每个平台下都要自己编译,官网的教程其实很详细(又有点太详细了)。最大的坑其实是要用到NASA的JPL很多底层包和数据包,有的时候又因为在墙里面有点麻烦。比较了一下,感觉其实还是Win下最省事。
1)准备python (我用的3.11)
支持版本3.8 to 3.13. Version 3.8 is deprecated and will be removed April 2026.
2)他说最好给Basilisk用虚拟环境(可以不用)
就是第一次在Basilisk源码的目录下运行下:
python -m venv .venv
就会在Basilisk源码目录下生成一个“.venv”隐藏目录,然后每次用这个玩意,要多一个命令激活一下这个虚拟环境,好处是避免系统 Python 被污染或锁定。
.venv\Scripts\activate
后面之所以感觉有点多此一举,Win下我按他说的来的,每次用它还要到这个虚拟环境里激活一下有点麻烦。而Linux本来就是为他专门虚的系统,我就直接pip install的,其实也没事。其实这一步就是快速pip安装Basilisk用到的其他python包。requirements_dev.txt这个文件就在Basilisk的源码包下面,cd进去源码目录就行了。打开看一下requirements_dev.txt就会发现,它想pip install的依赖都限定了版本,很可能跟咱们系统之前安装包存在冲突。如果就想把自己的python环境打造成Basilisk专用的可以用管理员身份运行powershell再运行这句也行。否者官方”强烈“推荐使用虚拟环境是有道理的。
pip install -r requirements_dev.txt
3)安装Swig(官网说4以上,4.3.1可以)
SWIG(Simplified Wrapper and Interface Generator)是一个开源软件工具,主要用于自动生成C/C++代码与其他编程语言(如Python、Java、Ruby等)的接口代码,解决跨语言调用难题。它通过解析C/C++声明自动生成“胶水代码”,广泛应用于用户界面开发、原型测试和系统集成等领域。因为本质Basilisk是个C/C++写的,但是用又是通过python包的形式,所以这个玩意必须装。https://www.swig.org/index.html找Download ,download area,一步步点进去,就能down到。
下载了之后,还是在“设置”-“系统”-“系统信息”-“高级系统设置”里面“环境变量”把swig所在目录加一行到“Path”里就行了。
4)安装 Visual Studio (官网说v16以上,v17 community 2022 社区版可以)
其实因为只是要他的c/c++编译器,安装只要选择c/c++就够了,我觉得主要要的是cmake和编译器。好在反正现在vs2022社区版也是免费。https://visualstudio.microsoft.com/zh-hans/vs/features/cplusplus/
5)真的编译Basilisk
前面搞了半天其实等于都是准备工作,准备需要swig、python包和win下的cl编译器。
目的是执行这句python conanfile.py,如果是前面装了虚拟环境,后面又叉叉掉了,记得再cd进源码目录后,再进一次虚拟环境,再执行这个。
.venv\Scripts\activate
python conanfile.py
官网里说可以加一堆参数,生成一些工程文件,自己再用Visual Studio的IDE编译,我觉得其实作为初学者先不用太关心源码,先解决能跑的问题,再研究怎么飞。
6)JPL NASA的星历数据
其实如果要是能科学上网,按道理运行了python conanfile.py只要等(个把小时?)就行了,问题是因为没有JPL的星历包,可能会报错。于是我把我找到的三个.bsp文件上传到csdn了,把他们拷贝到CMakeLists.txt 里写的:
${CMAKE_SOURCE_DIR}/../supportData/EphemerisData/目录下,再跑一次python conanfile.py就行。
类似我的EphemerisData目录应该在
D:/TOOL/Basilisk/basilisk-2.8.0/supportData/EphemerisData/
如果 supportData 或 EphemerisData 子目录尚不存在,手动新建即可,CMake 的 download_and_move_file() 函数本来也会自动创建中间目录。确保文件名完全一致
7)googletest的依赖
应该还是科学上网的事情,居然还有Github上的包反复下不了的问题,https://github.com/google/googletest/archive/refs/tags/v1.17.0.zip自己手动多下几次,另外我也传了一个。然后手动“欺骗” CMake 让它跳过下载,这次不能放目录就跑,需要手动创建一个完整的 FetchContent 缓存结构,而不仅仅是放个 zip 文件。
dist3\_deps\
├── googletest-src\ ← 把手动下载的v1.17.0.zip解压源码到此
│ ├── CMakeLists.txt
│ ├── googletest\
│ └── ...
├── googletest-subbuild\
│ └── googletest-populate-prefix\
│ └── src\
│ └── googletest-populate-stamp\
│ ├── googletest-populate-done ← 手动创建空的标记文件
│ └── download-googletest-populate-done ← 手动创建空的标记文件
最后能出现
Total Build Time: 1:03:33.143154
The Basilisk build is successful and the scripts are ready to run
Basilisk算编译成功了!!
3、冒烟一下
对了,还有就是要咱们写的python程序,能找到Basilisk。记得一定要把Basilisk的dist3目录放系统环境变量的在PYTHONPATH里。或者到powershell里跑一句
setx PYTHONPATH "D:/TOOL/Basilisk/basilisk-2.8.0/dist3;%PYTHONPATH%"
如果前面安装了虚拟环境,还是要记得进虚拟环境,
# 还在 build 目录的话
cd D:\TOOL\Basilisk\basilisk-2.8.0
.\.venv\Scripts\activate
然后直接跑
python -c "import Basilisk; print(Basilisk.__path__)"
如果能打印路径,就说明Basilisk的包已可见,可以玩一下了。
4、小跑两下
cd dist3
python -c "
import Basilisk
from Basilisk.simulation import spacecraft
sc = spacecraft.Spacecraft()
print('Basilisk spacecraft object created successfully!')
"
如果不报错,就说明能虚拟一个航天器了,基本上能干剩下所有的事情了。
再来跑一下官网推荐的第一个例子。
cd D:/TOOL/Basilisk/basilisk-2.8.0/examples
python scenarioBasicOrbit.py
不用写任何东西,就能跑出来这个效果,没有仔细看代码,貌似是为了说明J2摄动下轨道跟“理论轨道”的差。trajectory differences 就是两条轨道同一时刻“一减”得到的偏差矢量和其大小,学会了这个例子,就类似能衡量类似模型、算法、扰动或初始误差对飞行路径的影响有多大。

5、链接Vizard
然后就好奇,这样其实没有三维化啊。打开例子代码,发现一堆说明,没仔细看,但应该是这咕噜有用。把注释#去掉,记得加个逗号“,”然后就能跑可视化了,你看看多简单。
# Vizard Visualization Option
# ---------------------------
# If you wish to transmit the simulation data to the United based Vizard Visualization application,
# then uncomment the following
# line from the python scenario script. This will cause the BSK simulation data to
# be stored in a binary file inside the _VizFiles sub-folder with the scenario folder. This file can be read in by
# Vizard and played back after running the BSK simulation.
# To enable this, uncomment this line:
viz = vizSupport.enableUnityVisualization(scSim, simTaskName, scObject,
# saveFile=__file__
# liveStream=True
)
后来发现这个例子的注释还是要好好读一下,因为卡在waiting for tcp://localhost:5556上了。才跑到官网https://avslab.github.io/basilisk/Vizard/VizardDownload.html下载了Vizard下载了可执行包(这个终于不用编译能直接用了)。如果想直接跑basilisk项目就能把Vizard带起来,应该还要再设置一下Vizard的环境变量安装位置啥的,不多写了。另外貌似Vizard还能用脚本启动直接带上启动端口(Vizard和Basilisk之间的仿真数据貌似是通过ZeroMQ跑过去的,如果默认用 TCP 传输并封装成 ZMQ 的 REQ/REP(双向锁步)意味着应该可以用PUB/SUB(只读广播)模式不止在一个机器上跑仿真场景,有时间再说吧),我这里就直接手动跑到解压目录下,直接双击启动后手填的tcp,然后点击一下Start那个按钮。
等它一会儿,终于能看见球了,剩下的例子慢慢摸吧。
四、其他和其他
1、按理说应该能让 Basilisk 自动拉起 Vizard,可能需要系统环境变量再设置一个 VIZARD_PATH 指向的完整路径吧,回头再试试。最好是python一跑Basilisk会自动弹Vizard,不再需要手动listen。因为用的可能是ZeroMQ,如果之前已经跑了5556端口。可以试着改一下端口。
viz = vizSupport.enableUnityVisualization(...,
liveStream=True,
streamPort=5557) # 换端口
2、Linux和mac系统下安装差不多,跟着官网一步步有耐心走就可以。主要是因为科学上网问题,可能Linux还有一个SPICE的ToolKit的外拥包问题,类似解决或者干脆科学上网吧。个人有点推测Basilisk底层的数据源和某些动力学计算模型干脆用的就是NASA的,其实从产业生态上想他们这样玩挺好的,有人牵头搞一些基础项目,其他学校和爱好者能在那个基础上二次开发或者直接贡献,毕竟"一枝独秀不是春,万紫千红春满园"啊,期待咱们的科研环境也能有这种踏踏实实做东西,大大方方做开源的氛围啊。其实搞啥东西都讲氛围讲群众基础,“爱好者基数”很重要啊,不管水平咋样,没事儿玩玩呗。
3、按顺序学example
| 场景 | 关键词 | 收获 |
| scenarioBasicOrbit ★ | 二体轨道 | 熟悉 SimBaseClass、r_CN_N |
| scenarioOrbitManeuver ★★ | 霍曼转移 | 学会 CmdDeltaV、事件触发 |
| scenarioAttitudeFeedback ★★ | PD 姿态控制 | 认识 MRP_Feedback、rwStateEffector |
| scenarioLambertSolver ★★★ | 兰伯特变轨 | 接触 lambertPlanner、轨道优化 |
| scenarioFormation ★★★ | 编队保持 | 多星 dynTask 并行 |
优快云上有个“矢志航天的阿洪”同学的《Basilisk库教程》还写了一个系列,真心的不错https://blog.youkuaiyun.com/weixin_57997461/article/details/149325658。看得出来这个同学是真学进去了,好在是个开源项目,我们这种初学者即使不能入门,没事儿也可以在门口逛逛,为爱好者基数做做贡献。

6869

被折叠的 条评论
为什么被折叠?



