Scilab Home Page | Wiki | Bug Tracker | Forge | Mailing List Archives | Scilab Online Help | File Exchange
ATOMS : CelestLab details
Login with GitLab


CNES Space Mechanics Toolbox for Mission Analysis
(9516 downloads for this version - 114110 downloads for all versions)
A more recent valid version with binaries for Scilab 6.1 exists: 3.4.1
Owner Organization
Alain Lamy
Thierry MARTIN
Creation Date
August 4, 2020
Source created on
Scilab 6.1.x
Binaries available on
Scilab 6.1.x:
Windows 64-bit Windows 32-bit Linux 64-bit Linux 32-bit macOS
Install command
--> atomsInstall("celestlab")
CelestLab - CNES Space Mechanics Toolbox for Scilab 
Version 3.4.0			     

CelestLab is a Scilab toolbox for Space Flight Dynamics. 

It has been developed by CNES (Centre National d'Etudes Spatiales - 
French Space Agency) for mission analysis purposes.

CelestLab can be used for trajectory analysis and orbit
design for various types of space missions. 
It allows engineers to perform tasks such as: orbit propagation, attitude
computation, elementary manoeuvre computation, change of coordinate systems,

CelestLab comes with an extension module called CelestLabX.  
The features in CelestLab that require CelestLabX to be installed are
related to: 
- STELA: CNES orbit long-term propagation software
- Two Line Elements 
- MSIS2000 atmospheric model 

- CelestLab can be used with Scilab versions 5.5.x to 6.1 
- The version of CelestLabX that should be used is 3.4.0 

- CelestLabX Atoms page for more details about CelestLabX:
- The detailed changelog in CelestLab menu for more information about what has
changed in CelestLab compared to the previous version. 

Files (2)
[64.41 MB]
OS-independent binary for Scilab 6.1.x
Binary version for Scilab 6.1 (platform independent) 
[57.07 MB]
Source code archive

News (0)
Comments (8)     Leave a comment 
Comment from Hani Ibrahim -- August 27, 2020, 09:58:41 AM    
There is a BUG for the macOS version of Scilab 6.1; After installation and restart you get
the error:

*** CelestLab is not available for this version of Scilab (Scilab 6.1.0 or less required)

This because Scilab 6.1 for macOS returns 611 (6.1.1) of CL__scilabVersion() but
celestlab.start doesn't except numbers greater than 610.

To avoid problems with macOS or even with newer Scilab 6.1. versions in the future, please
change line 27 of celestlab.start.



1) Install celestlab via Atoms
2) Go to Mac's Finder and open the Application folder
3) Search for the Scilab-branch-6.1 app bundle
4) Right click (control-click) on it and click "Show Package Contents"
5) Go to folder "Contents/MacOS/share/scilab/contrib/celestlab/3.4.0/etc"
6) Open file celestlab.start in a texteditor (e.g. TextEdit) and go to line 27
7) Change 
      if (vnum > 610)
      if (vnum >= 620)
8) Save celestlab.start
9) Restart Scilab
10) Done
Answer from Alain Lamy -- September 1, 2020, 02:12:18 PM    
Thanks for the report. 
Actually we have never used CelestLab under macOs. 

Comment from Hiroshi Tachihara -- September 29, 2020, 07:42:10 AM    
I have a question about the behavior of function CL_gm_visiParams.

Once you execute the following script, 

satVec = [0: 180];
distVec = CL_gm_visiParams(7000e3, 6500e3, 'sat', satVec / 180 * %pi, 'dist');

plot(satVec, distVec);
xlabel('sat [deg]');
ylabel('dist [m]');

you can find that dist = %nan while sat > 68 deg, because view line from a satellite
not touch the Earth surface.
However while sat > 112 deg, dist will get definite value again. I understand that dist

cannot be defined during this sat. Why does dist get these values?

Hiroshi Tachihara
Answer from Alain Lamy -- September 29, 2020, 09:11:11 AM    

Thanks for the remark. 
You're right. 
The results are not valid for an angle from the satellite greater than 90 deg. 
They should be Nan. 
We'll add a test on the input angle to ensure that. 

Comment from Xiang Liao -- January 24, 2021, 03:36:24 AM    
Celestlab implement the Eckstein-Hechler model, but the modeling is not fully realized,
the perturbations of J2~J6 and J2^2 are considered.

The semi-major axis accuracy of the complete Eckstein-Hechler model can reach 1m. The full

implementation can address many orbital maneuver planning problems, is celestlab willing to

do this difficult but cool task in the next versions?
Comment from Hani Ibrahim -- August 1, 2021, 01:43:45 AM    
Bug report:

With Scilab version 6.1.1, Celestlab 3.4.0 no longer starts on all platforms. Tested on
macOS 10.14, Win 10, Linux Mint 20. Problems are in the "celestlab.start" as far
as I see.

1.) The version check "if (vnum > 610)" I mentioned for macOS earlier, is now
a problem for other platforms, too. Fixing is easy by setting "(vnum > 611)".
But finally it was a good idea to check that strict ;-)

2.) In 6.1.1. it seems that the Scilab-authors fixed silently the wrong behavior of
"fileparts" you relied on. It is now one level to high:
"celestlab/3.4.0/etc/" instead of "celestlab/3.4.0/" This effects the
variable "root_tlbx" (line 31) and "TBLX_PATH" (line 90) and therefore
the add_help_chapter call. Error: "No existing directory".

I fixed it on Windows for both variables with 

and on Unices with: 


But I still get an error I cannot fix:

exec: error on line #116: "Not defined variable 'h' in funktion 'findobj'."

Comment from Alain Lamy -- August 2, 2021, 09:03:19 AM    
Yes you're right. 
There are 2 reasons that prevent CelestLab form starting: 
- there has been a change in function "fullfile": in 6.1.0, the separator at the
end of the path was removed. This is not the case anymore in 6.1. Correcting this requires
many changes. 
- there is a bug in function "findobj" (see bug #16717). The workaround is to
enclose the call in a "try .. catch" block. 

So before a new CelestLab version is released, you can probably make CelestLab work by: 
- loading the function "fullfile.sci" (code from scilab 6.1.0)
- applying the workaround for "findobj". 


Comment from Hiroshi Tachihara -- September 6, 2021, 03:17:37 PM    

I have a question about concatenation of CLtle objects.

We use lstcat function for concatenation of list objects like following.
L1 = list(1,2,3);
L2 = list(4,5);
L_all = lstcat(L1, L2);
   ans = 5

On the other hand, lstcat does not work for CLtle objects.
TLE1 = CL_tle_new(3);
TLE2 = CL_tle_new(2);
TLE_all = lstcat(TLE1, TLE2);
   ans = 2

CLtle has to be mlist object. However, lstcat for 3 and 2 elements of CLtle generates 2 
elements of list, not 5 elements of CLtle.
How shall I concatenate CLtle as the same type of CLtle?

Hiroshi Tachihara
Comment from Alain Lamy -- September 6, 2021, 03:54:52 PM    

CLtle object is based on mlist. A certain number of operations are overloaded, but not all
of them.  

To do something equivalent to "tle = lstcat(tle1, tle2)", one simple way could

tle = CL_tle_new(size(tle1) + size(tle2)); 
tle(1:size(tle1)) = tle1; 
tle(size(tle1)+1 : size(tle)) = tle2; 

Leave a comment
You must register and log in before leaving a comment.
Login with GitLab
Email notifications
Send me email when this toolbox has changes, new files or a new release.
You must register and log in before setting up notifications.