Skip to main content
MethodsX logoLink to MethodsX
. 2021 Jan 23;8:101244. doi: 10.1016/j.mex.2021.101244

Method to determine the tracking angles of heliostats

Victor Grigoriev 1,, Kypros Milidonis 1, Manuel Blanco 1, Marios Constantinou 1
PMCID: PMC8374198  PMID: 34434767

Abstract

The heliostats with two tracking axes are considered, and the method is presented to find the tracking angles for reflection of sun light to a given target. An important advantage of the method is that the tracking axes are not required to be orthogonal like in azimuth-elevation, tilt-roll or target-aligned heliostats. All of these configurations are covered in a unified way, and the presented solution is valid even for arbitrary orientation of tracking axes. The ability to have such a general solution is very valuable, because the orthogonality condition may not hold precisely for manufacturing reasons or due to degradation of heliostats. These deviations need to be corrected properly to achieve a high concentration of sun light. The offsets between tracking axes are also taken into account. However, the targeting problem for heliostats in this case becomes considerably different from the inverse kinematic problems for robotic arm manipulators. It is shown that the tracking angles can be found iteratively, and the convergence of results is very fast for a typical set of parameters used in solar thermal plants. To simplify the use of the method, a Python-library HelioK was developed, and it is demonstrated how to work with it in a Jupyter-notebook. To explain the kinematics of heliostats better, a 3D model of heliostat is provided, which was made and animated in an open-source 3D editor Blender.

The main highlights of the method:

  • The tracking axes and the facet of heliostat can have an arbitrary orientation, and there can be offsets between them.

  • The tracking problem is solved both for targets attached to heliostat (local aiming) and for separated targets (global aiming).

  • The single-axis trackers are included as a limiting case.

Keywords: Heliostat, Sun tracking, Solar tracker, Two-axis tracking, Dual-axis tracker

Graphical abstract

Image, graphical abstract


Specifications Table

Subject Area Energy
More specific subject area Concentrating Solar Power
Method name Method to determine the tracking angles of heliostats
Name and reference of original method Paden–Kahan subproblems for inverse kinematics[2,3]
Resource availability HelioK repository:
https://scmt.cyi.ac.cy/bitbucket/projects/ART/repos/heliok
Anaconda (Python distribution):
https://www.anaconda.com/products/individual
Blender (3D editor):
https://www.blender.org/download

Method details

Armature of heliostat

The rotation of heliostat is described by using an armature (Fig. 1). The armature consists of connected bones, which represent different parts of heliostat. The heads and tails of the bones can be linked by a hinge joint, which supports a rotation around given axis, or a more general joint type. The relative positions and orientations of the bones are defined in local heliostat frame when the primary and secondary angles are set to zero (Fig. 1a). The head of the foundation bone is positioned at the origin of heliostat frame. This bone is always fixed in the heliostat frame, and serves as a parent for other bones. The primary head has a translation pa from the foundation head. The hinge joint in the primary head can rotate around the axis a in the range [αmin,αmax]. The secondary head has a translation pb from the primary head. The hinge joint in the secondary head can rotate around the axis b in the range [βmin,βmax]. The rotation angles around the axes are measured according to the right-hand rule, and the static configuration (Fig. 1a) is used as a reference for zero angles. Notice that there is some ambiguity how to place the armature bones. Only the positions of heads are important where the hinges are, while the positions of tails can be selected to match the geometry of different moving parts. In particular, this was used to make the foundation bone vertical, although the primary axis is slightly shifted from it (Fig. 1b). The default directions of the primary and secondary bones can be used as a reference to define zero angles for the corresponding tracking axes. The mirror bone is fixed rigidly to the secondary bone, and it is necessary just to separate the mirror facet.

Fig. 1.

Fig 1

Heliostat with two tracking drives (a), and its armature (b). The arrows show the directions of primary (purple) and secondary (green) axes as well as the normal of mirror facet (blue). The rotation angles are controlled by changing the expansion length of linear actuators. The triangles show the rotation plane for each axis and the attachment points of linear actuators. The 3D model of heliostat is also provided as a supplementary material. (For interpretation of the references to colour in this figure legend, the reader is referred to the web version of this article.)

Heliostat facets

In general, one or more mirror facets can be attached to the secondary bone. They can be described by appropriate translations pm and rotations Rm. It is necessary to define a vertex (a combination of point rM0 and normal n0), which can be used to determine the main direction of reflection. For a single facet, it usually corresponds to the center of the facet. The position rM and normal n of the tracking vertex depend on the primary α and secondary β angles as (the subscript ‘0’ is used when the values are taken for zero tracking angles)

(rM1)=[Ra(α)pa01][Rb(β)pb01](rM01), (1)
n=Ra(α)Rb(β)n0. (2)

Heliostat drives

The positive rotation around the axes is determined by the right-hand rule. The rotation matrix around the axis a for angle α is computed as

Ra(α)=cosαI+sinαa×+(1cosα)aa, (3)

where I is the identity operator, a× is a cross product in matrix form, and aa=aaT is a dyadic product. The rotation can be performed by slew drives or linear actuators. The former control the rotation angle directly, while the latter control the rotation angle via expansion length. If the distances from an axis to two attachment points are p and q, the expansion length λ according to the law of cosines is

λ2=p2+q22pqcosα. (4)

This relation can be inverted to get the mapping α(λ).

Heliostat field

The position and orientation of heliostat in global frame is defined by 4 × 4 transformation matrix

(r1)global=[Rhph01](r1)local. (5)

The rotation matrix of heliostat can be decomposed into 3 Euler angles as Rh=Rx(φx)Ry(φy)Rz(φz). In general, heliostats can be used to concentrate light on a target attached to it (local aiming) or a separated target (global aiming). A typical example of the former is a heliostat dish with a CPV (Concentrated Photovoltaics) element in the focus. The latter is mostly applied in CST (Concentrated Solar Thermal) power plants.

Local aiming

The unit vector in the direction of the sun is converted to heliostat frame as sRhTs. Since the aiming point rA is specified in the same frame as the facet vertex rM0, the target vector can be found as t0=(rArM0)/|rArM0|, and it does not depend on the tracking angles. The corresponding sun vector according to the reflection law is s0=(2n0n01)t0. The tracking angles are found as a rotation of s0 to s (See Sequential rotation).

Global aiming

The unit vector in the direction of the sun is converted to heliostat frame as sRhTs. The aiming point rA can be converted from global to heliostat frame as rARhT(rAph). The target vector t=(rArM)/|rArM|, where for the first iteration rM0 can be used instead of rM. The required position of the normal according to the reflection law is n=(s+t)/|s+t|. The tracking angles are found as a rotation of n0 to n (See Sequential rotation). Once the angles are found, they can be used to update rM according to Eq. (1). The accuracy of iteration is checked by substituting the new value of rM into |t×(rArM)|, which corresponds to the lateral displacement of reflected ray from target. Typically, a sub-millimeter accuracy is acceptable. Otherwise, a new iteration starts with updating the value of t.

Sequential rotation

The primary α and secondary β angles for rotation of vector v0 to v are found by composing an intermediate vector m, which separates the sequential rotation into two single-axis rotations [1]. The intermediate vector satisfies the equations a·v=a·m and b·m=b·v0. It can be searched in the form m=maa+mbb±mkk where k=a×b, and the solution of the system is

ma=a·v(a·b)(b·v0)1(a·b)2,mb=b·v0(a·b)(a·v)1(a·b)2,mk=sqrt[1ma2mb22mamb(a·b)]|k|. (6)

For each of the m± branches, the angles of single-axis rotations are found as

α=atan[a·m×v,m·v(a·v)2],β=atan[b·v0×m,v0·m(b·v0)2]. (7)

By default, the angles are returned in the range [π,π). It is possible to cast them to the range [φ0,φ0+2π) with the following transformation

φφ2πφφ02π, (8)

where is the floor function. This simplifies the check whether the angle is within a given range [φmin,φmax]. It is also possible to introduce a function w(α,β)=|α|+|β| to sort the solutions and select the branch which requires less rotation.

Single-axis trackers

The presented method can also be applied for single-axis trackers like troughs or Fresnel collectors (line focusing as opposed to point focusing). Due to the axial symmetry, it can be assumed that n0·a=0. The vectors s and t are projected on the rotation plane by using an operator 1aa and renormalizing the result. After that the similar steps (See Local aiming and Global aiming) can be applied to find the primary tracking angle α. The main difference is that rotation of vector v0 to v is solved as

α=atan[a·v0×v,v0·v]. (9)

Implementation of method

Input data

The method was implemented in Python and can be used as a library (HelioK). The parameters of heliostat field are stored in xml format (Fig. 2). The tag HelioK is used as a root and has the attributes to set the units of lengths and angles. The subtags World, Factory and provide the following details. The tag World defines the location of the plant and the position of the sun. The tag Factory stores the templates of materials and heliostats. The tag Scene describes the layout of the objects in the scene.

Fig. 2.

Fig 2

Definition of heliostat field in xml-format.

The parameters of heliostat are stored in the tag HeliostatKit and are grouped in the following way. The tag Primary with the attributes translation (pa), rotationAxis (a) and rotationAngles (αmin,αmax) is used for the primary drive. The tag Secondary with the attributes translation (pb), rotationAxis (b) and rotationAngles (βmin,βmax) is used for the secondary drive. The tag Facet with attributes translation (pm, zero by default) and rotation (Rm, stored as Euler angles φx,φy,φz) defines a heliostat facet and can be repeated several times. The tag Angles with the attributes primary (α) and secondary (β) stores the orientation of heliostat. The tag Tracking with the attributes point (rM0) and normal (n0) defines a vertex on the facet which will be used for tracking. The tag Aiming with the attribute point (rA) sets the aiming point.

The actual placement of heliostats is described in the tag Scene. It contains a tree of Node tags, which define geometrical transformations. Each node has the attributes translation (p) and rotation (R, stored as Euler angles φx,φy,φz). The nodes can be nested, which combines the transformations. The heliostats are attached to the nodes by using the tag HeliostatKit with the attribute ref, which refers to a specific template with the attribute name.

Example of usage

The HelioK library can be used in Jupyter notebook (Fig. 3). The cell 1 imports the HelioK library with a short name hk. The cell 2 opens a heliostat field in xml-format and assigns it to a variable app. The cell 3 shows how to find a heliostat by name. The cell 4 sets the primary and secondary angles of the selected heliostat. The output is True, when the angles are within the tracking range. The cell 5 creates a reference to the sun object in the scene and changes its azimuth and elevation. The cell 6 updates the tracking angles of heliostat according to the position of the sun. The optional parameter debug enables a debug output. It shows two possible solutions and how the accuracy changes with iterations. If there is a solution within the tracking range, the tacking angles of heliostat are updated, and the output is True.

Fig. 3.

Fig 3

Example of using HelioK in Jupyter notebook.

Declaration of Competing Interest

The authors declare that they have no known competing financial interests or personal relationships that could have appeared to influence the work reported in this paper.

Acknowledgements

This work was supported by the European Union's Horizon 2020 research and innovation program within the context of the CySTEM ERA Chair project, under grant agreement No. 667942.

Footnotes

Supplementary material associated with this article can be found, in the online version, at doi:10.1016/j.mex.2021.101244.

Appendix. Supplementary materials

Download video file (3.2MB, mp4)
mmc2.zip (381.5KB, zip)

References

  • 1.Grigoriev V., Milidonis K., Blanco M. Sun tracking by heliostats with arbitrary orientation of primary and secondary axes. Solar Energy. 2020;207:1384–1389. [Google Scholar]
  • 2.Paden B. 1985. Kinematics and Control of Robot Manipulators, PhD thesis. [Google Scholar]
  • 3.Murray R., Li Z., Sastry S. CRC Press; 1994. A Mathematical Introduction to Robotic Manipulation. [Google Scholar]

Associated Data

This section collects any data citations, data availability statements, or supplementary materials included in this article.

Supplementary Materials

Download video file (3.2MB, mp4)
mmc2.zip (381.5KB, zip)

Articles from MethodsX are provided here courtesy of Elsevier

RESOURCES