目录
SPICE官方课程学习文档链接:
https://naif.jpl.nasa.gov/naif/tutorials.html
一、Mice介绍
Mice是SPICE在MATLAB环境下的扩展工具包。所有 Mice 调用都是CSPICE函数,无论调用格式如何底层,并返回 MATLAB 原生数据类型。 Mice 具有 CSPICE 中不具备的一些功能,例如矢量化。CSPICE 错误消息以try...catch结构的形式返回给 MATLAB。Mice是一个完整的、独立的工具包,因此无需安装C编译器即可使用,你只需将Mice加入到Matlab的搜索路径中即可
二、Mice使用方法
1.1 加载内核
cspice_furnsh(KernelPath); % cspice_furnsh('standard.tm')
使用cspice_furnsh加载内核时,内核是直接加载到Matlab会话中而不是脚本中,这意味着你只需加载一次内核即可在多个脚本中调用内核而无需在每个脚本中都加载内核,但有时某些你不需要的内核数据会在某一个脚本中被错误使用从而得到错误的结果。因此建议在加载内核时注意这些内核是否是你需要使用的以及注意加载顺序,除此之外,你也可以在每个脚本中都加载内核并在脚本末尾卸载内核。
1.2 卸载内核
cspice_unload(KernelPath); % 卸载KernelPath内核
cspice_kclear(); % 卸载所有内核
1.3 矢量化参数
大多数Mice函数都包括矢量化参数的使用,这是C或Fortran工具包中没有的功能,例如使用Mice检索状态向量和1000个历时的光时值。
创建一个包含1000个星历时间的数组,步长为10小时,从2005年7月1日开始:
start = cspice_str2et('July 1 2005');
et = (0:999)*3600 + start;
通过LT+S像差校正,检索J2000帧中每个et从火星到地球的状态向量和相应的光时:
[state,ltime] = cspice_spkezr('Earth',et,'J2000','LT+S','MARS');
starg = mice_spkezr('Earth',et,'J2000','LT+S','MARS');
使用表达式访问第i个星历时间对应的第i个状态6向量(6x1数组):
state_i = state(:,1);
or
state_i = starg(i).state;
将前一个示例中的星历时间向量et转换为UTC日历字符串,在seconds字段中具有三个小数位的精度:
format = 'C';
prec = 3;
utcstr = cspice_et2utc(et,format,prec);
utcstr_i = utcstr(i,:);
将cspice_spkezr函数在状态中返回的N个状态向量的位置分量(状态向量中的前三个分量)转换为纬度坐标:
[radius,latitude,longitude] = cspice_reclat(state(1:3,:));
三、示例
作为使用Mice的一个例子,计算并绘制卡西尼号航天器在J2000惯性坐标系中的轨迹,从2004年6月20日到2005年12月1日。本例使用cspice_spkpos函数检索位置数据。
% Load the generic kernels
cspice_furnsh( { 'pck00011.tpc', '030201AP_SK_SM546_T45.bsp','de440.bsp','naif0012.tls'} )
% Define the number of divisions of the time interval.
STEP = 1000;
et = cspice_str2et( {'Jun 20, 2004', 'Dec 1, 2005'} );
times = (0:STEP-1) * ( et(2) - et(1) )/STEP + et(1);
[pos,ltime]= cspice_spkpos( 'Cassini', times, 'J2000', 'NONE', 'SATURN BARYCENTER' );
% Plot the resulting trajectory.
x = pos(1,:);
y = pos(2,:);
z = pos(3,:);
plot3(x,y,z);
xlabel('x');
ylabel('y');
zlabel('z');
grid on
cspice_kclear
重复示例,只是使用mice_spkezr函数来检索完整的状态向量:
% Define the number of divisions of the time interval.
STEP = 1000;
cspice_furnsh( { 'pck00011.tpc', '030201AP_SK_SM546_T45.bsp','de440.bsp','naif0012.tls'} )
et = cspice_str2et( {'Jun 20, 2004', 'Dec 1, 2005'} );
times = (0:STEP-1) * ( et(2) - et(1) )/STEP + et(1);
ptarg = mice_spkpos( 'Cassini', times, 'J2000', 'NONE', 'SATURN BARYCENTER' );
pos = [ptarg.pos];
% Plot the resulting trajectory.
x = pos(1,:);
y = pos(2,:);
z = pos(3,:);
plot3(x,y,z);
xlabel('x');
ylabel('y');
zlabel('z');
grid on
cspice_kclear
![](https://i-blog.csdnimg.cn/blog_migrate/c309f7908846007161ea349b4634d2d2.png)