<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>https://patrius.cnes.fr/index.php?action=history&amp;feed=atom&amp;title=User_Manual_4.17_Properties_and_models%3A_Sensors</id>
	<title>User Manual 4.17 Properties and models: Sensors - Historique des versions</title>
	<link rel="self" type="application/atom+xml" href="https://patrius.cnes.fr/index.php?action=history&amp;feed=atom&amp;title=User_Manual_4.17_Properties_and_models%3A_Sensors"/>
	<link rel="alternate" type="text/html" href="https://patrius.cnes.fr/index.php?title=User_Manual_4.17_Properties_and_models:_Sensors&amp;action=history"/>
	<updated>2026-04-06T06:47:10Z</updated>
	<subtitle>Historique des versions pour cette page sur le wiki</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>https://patrius.cnes.fr/index.php?title=User_Manual_4.17_Properties_and_models:_Sensors&amp;diff=4030&amp;oldid=prev</id>
		<title>Admin tsn : Page créée avec « == Introduction == === Scope === In this section are presented the sensor model for a PATRIUS assembly, the associated part property and the fields of view that are necessary to describe it.  === Javadoc === The [{{JavaDoc4.17}}/fr/cnes/sirius/patrius/assembly/models/SensorModel.html SensorModel] ais available in the package [{{JavaDoc4.17}}/fr/cnes/sirius/patrius/assembly/models/package-summary.html fr.cnes.sirius.patrius.assembly.models].  The [{{JavaDoc4.17}}/... »</title>
		<link rel="alternate" type="text/html" href="https://patrius.cnes.fr/index.php?title=User_Manual_4.17_Properties_and_models:_Sensors&amp;diff=4030&amp;oldid=prev"/>
		<updated>2025-11-25T16:54:46Z</updated>

		<summary type="html">&lt;p&gt;Page créée avec « == Introduction == === Scope === In this section are presented the sensor model for a PATRIUS assembly, the associated part property and the fields of view that are necessary to describe it.  === Javadoc === The [{{JavaDoc4.17}}/fr/cnes/sirius/patrius/assembly/models/SensorModel.html SensorModel] ais available in the package [{{JavaDoc4.17}}/fr/cnes/sirius/patrius/assembly/models/package-summary.html fr.cnes.sirius.patrius.assembly.models].  The [{{JavaDoc4.17}}/... »&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Introduction ==&lt;br /&gt;
=== Scope ===&lt;br /&gt;
In this section are presented the sensor model for a PATRIUS assembly, the associated part property and the fields of view that are necessary to describe it.&lt;br /&gt;
&lt;br /&gt;
=== Javadoc ===&lt;br /&gt;
The [{{JavaDoc4.17}}/fr/cnes/sirius/patrius/assembly/models/SensorModel.html SensorModel] ais available in the package [{{JavaDoc4.17}}/fr/cnes/sirius/patrius/assembly/models/package-summary.html fr.cnes.sirius.patrius.assembly.models].&lt;br /&gt;
&lt;br /&gt;
The [{{JavaDoc4.17}}/fr/cnes/sirius/patrius/assembly/properties/SensorProperty.html SensorProperty] is available in the package [{{JavaDoc4.17}}/fr/cnes/sirius/patrius/assembly/properties/package-summary.html fr.cnes.sirius.patrius.assembly.properties].&lt;br /&gt;
&lt;br /&gt;
The fields of view are available in the package [{{JavaDoc4.17}}/fr/cnes/sirius/patrius/fieldsofview/package-summary.html fr.cnes.sirius.patrius.fieldsofview].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Links ===&lt;br /&gt;
None as of now.&lt;br /&gt;
&lt;br /&gt;
=== Useful Documents ===&lt;br /&gt;
None as of now.&lt;br /&gt;
&lt;br /&gt;
=== Package overview ===&lt;br /&gt;
The sensor model is associated to one part of an assembly that must have a &amp;quot;SensorProperty&amp;quot; property.&lt;br /&gt;
&lt;br /&gt;
Its main and inhibition targets are several PVCoordinatesProvider (and their radiuses are doubles), its main and inhibition fields of view are under the IFieldOfView interface, in the &amp;quot;fieldsofview&amp;quot; package.&lt;br /&gt;
&lt;br /&gt;
Please note that not all implementations are present in the following diagram for the sake of clarity.&lt;br /&gt;
&lt;br /&gt;
[[File:sensors.PNG|center]]&lt;br /&gt;
&lt;br /&gt;
== Features Description ==&lt;br /&gt;
=== Properties ===&lt;br /&gt;
==== Sensor Property ====&lt;br /&gt;
&lt;br /&gt;
To create a sensor model, one part of the assembly must be associated to a SENSOR property.&lt;br /&gt;
&lt;br /&gt;
A sensor property contains :&lt;br /&gt;
* a sight axis (not optional)&lt;br /&gt;
* (optional) a main spherical target defined by its center and radius (that can be set to zero to create a simple point)&lt;br /&gt;
* (optional)if a main target has been defined : a main field of view&lt;br /&gt;
* (optional) two arrays (same length) for the inhibition fields and the associated targets (as the main one, they are spherical, with radiuses that can be set to zero to create a simple point)&lt;br /&gt;
* (optional) an array of reference axis&lt;br /&gt;
&lt;br /&gt;
All of them are expressed in the sensor part/frame.&lt;br /&gt;
&lt;br /&gt;
This property shall be used through the Sensor Model.&lt;br /&gt;
&lt;br /&gt;
The property type associated is &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;&amp;#039;&amp;#039;&amp;#039;SENSOR&amp;#039;&amp;#039;&amp;#039;&amp;lt;/font&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Geometric property ====&lt;br /&gt;
&lt;br /&gt;
The Geometric property associates a part to any shape that implements the [{{JavaDoc4.17}}/fr/cnes/sirius/patrius/math/geometry/euclidean/threed/SolidShape.html SolidShape] interface.&amp;lt;br&amp;gt;&lt;br /&gt;
(See the [MAT_GEO_Home Geometry] chapter of the Mathematics user manual for more details)&amp;lt;br&amp;gt;&lt;br /&gt;
It is used in masking computations.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The property type associated is &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;&amp;#039;&amp;#039;&amp;#039;GEOMETRY&amp;#039;&amp;#039;&amp;#039;&amp;lt;/font&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Sensor model ===&lt;br /&gt;
An instance of the sensor model is associated to one part, that contains a SENSOR property. It realizes the useful computations about this particular sensor : check if the main target is in its field of view, if inhibition or maskings happen, etc... &lt;br /&gt;
&lt;br /&gt;
Here is a complete list of thoses services. &lt;br /&gt;
The model provides methods to :&lt;br /&gt;
&lt;br /&gt;
* Check if the main spherical  target is in the field of view at a date&lt;br /&gt;
&lt;br /&gt;
Important : for &amp;quot;is in&amp;quot; boolean tests, all spherical targets (main and inhibition) are considered to be in the associated field as soon as a part of them is in.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
// the model is build from an assembly, giving the name of the part that contains the SENSOR property.&lt;br /&gt;
SensorModel sensor = new SensorModel(assembly, partName);&lt;br /&gt;
boolean targetIsInField = sensor.isMainTargetInField(date);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Check if at least an inhibition spherical  target is in its associated inhibition field at a date&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
boolean noInhibition = sensor.noInhibition(date);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Check if the main spherical target is in the field of view AND no inhibition target in its inhibition field at a given date&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
boolean visibilityIsOk = sensor.visibilityOk(date);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Computes the angular distance of the main target CENTER to the border of the main field of view at a date. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;double angularDistance = sensor.getTargetCenterFOVAngle(date);&amp;lt;/code&amp;gt;&lt;br /&gt;
The result is positive if the target is in the field.&lt;br /&gt;
NB : in some particular cases of Boolean Field of view, this angular distance is approximated (but the sign is still right). &lt;br /&gt;
&lt;br /&gt;
* Computes the main spherical target direction vector in the part&amp;#039;s frame (CX, CY, CZ)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Vector3D targetInFrame = sensor.getTargetVectorInSensorFrame(date);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Computes the dihedral angles (AX = atan2(CZ, CY), AY = atan2(CX, CZ), AZ = atan2(CY, CX))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
// the order in this array is : AX, AY, AZ&lt;br /&gt;
double[] angles = sensor.getTargetDihedralAngles(date);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Computes the vector angles (of the main target to the sight axis or one of the reference axis)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
// to the sight axis&lt;br /&gt;
double angleSightAxis = sensor.getTargetSightAxisAngle(date);&lt;br /&gt;
&lt;br /&gt;
// to the reference axis number N (for the first N = 1 !!)&lt;br /&gt;
double angleRefAxis = sensor.getTargetRefAxisAngle(date, N);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Computes the elevation angles (of the main target to the plane orthogonal to the sight axis or to one of the reference axis)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
// to the sight axis&lt;br /&gt;
double angleSightAxis = sensor.getTargetSightAxisElevation(date);&lt;br /&gt;
&lt;br /&gt;
// to the reference axis number N (for the first N = 1 !!)&lt;br /&gt;
double angleRefAxis = sensor.getTargetRefAxisElevation(date, N);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Set potentially masking objects and test the masking at a date. Those objects can be parts of the same spacecraft (the one carrying the sensor), parts of [MIS_SENSORS_SecondSpc secondary spacecrafts] or [MIS_SENSORS_PatriusBodySpheroid celestial bodies].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
// two potentially masking celestial bodies&lt;br /&gt;
BodyShape earth = new OneAxisEllipsoid(aeEarth, fEarth, attachedFrameEarth, &amp;quot;earth&amp;quot;);&lt;br /&gt;
BodyShape moon= new OneAxisEllipsoid(aeMoon, fMoon, attachedFrameMoon, &amp;quot;moon&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
sensor.addMaskingCelestialBody(earth);&lt;br /&gt;
sensor.addMaskingCelestialBody(moon);&lt;br /&gt;
&lt;br /&gt;
// a potentially masking spacecraft (the concerned Assembly&amp;#039;s parts must have the right GEOMETRY property)&lt;br /&gt;
SecondarySpacecraft issStation = new SecondarySpacecraft (assemblyISS, propagatorISS, &amp;quot;ISS&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
// its potentially masking parts names&lt;br /&gt;
String[] maskingPartsISS = {&amp;quot;solar panel 1&amp;quot;, &amp;quot;solar panel 2&amp;quot;};&lt;br /&gt;
&lt;br /&gt;
sensor.addSecondaryMaskingSpacecraft(issStation, maskingPartsISS );&lt;br /&gt;
&lt;br /&gt;
// the same spacecraft&amp;#039;s potentially masking parts (that must have each a GEOMERTY property)&lt;br /&gt;
String[] maskingPartsSameSpacecraft = {&amp;quot;solar panel&amp;quot;, &amp;quot;big antenna&amp;quot;};&lt;br /&gt;
&lt;br /&gt;
sensor.addOwnMaskingParts(maskingPartsSameSpacecraft);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Set the maximum number of iterations for the signal propagation (default value is 100) via the dedicated setter setEpsilonSignalPropagation(double)&lt;br /&gt;
&lt;br /&gt;
=== Fields of view ===&lt;br /&gt;
See the dedicated [SPC_FIELD_mainPage Fields of view ] page.&lt;br /&gt;
&lt;br /&gt;
== Getting started ==&lt;br /&gt;
{{specialInclusion prefix=$theme_sub section=&amp;quot;GettingStarted&amp;quot;/}}&lt;br /&gt;
&lt;br /&gt;
== Contents ==&lt;br /&gt;
=== Interfaces ===&lt;br /&gt;
None as of now.&lt;br /&gt;
=== Classes ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Class&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Summary&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Javadoc&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;SensorProperty&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|This class is a part property for the PATRIUS assembly. It allows to define a part as a sensor, with associated fields and axis.&lt;br /&gt;
|[{{JavaDoc4.17}}/fr/cnes/sirius/patrius/assembly/properties/SensorProperty.html ...]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;GeometricProperty&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|This class is a part property for the PATRIUS assembly. It allows to define the part geometry for masking computations.&lt;br /&gt;
|[{{JavaDoc4.17}}/fr/cnes/sirius/patrius/assembly/properties/GeometricProperty.html ...]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;SensorModel&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|This class is a model for a sensor integrated in a PATRIUS assembly.&lt;br /&gt;
|[{{JavaDoc4.17}}/fr/cnes/sirius/patrius/assembly/models/SensorModel.html ...]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;SecondarySpacecraft&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|This class is a potentially sensor-masking secondary spacecraft.&lt;br /&gt;
|[{{JavaDoc4.17}}/fr/cnes/sirius/patrius/events/sensor/SecondarySpacecraft.html ...]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
See the dedicated [SPC_FIELD_mainPage Fields of view ] page for associated contents.&lt;br /&gt;
&lt;br /&gt;
[[Category:User_Manual_4.17_Spacecraft]]&lt;/div&gt;</summary>
		<author><name>Admin tsn</name></author>
	</entry>
</feed>