Basilisk航天动力学开源工具Windows安装教程

 一、源起

本来只是浅学一下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。看得出来这个同学是真学进去了,好在是个开源项目,我们这种初学者即使不能入门,没事儿也可以在门口逛逛,为爱好者基数做做贡献。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值