xyzToEnuAdp(x, declination = 0, debug = getOption("oceDebug"))
adp
object, i.e. one inheriting from adp-class
.data$v[,,1:3]
altered appropriately, and
metadata$oce.orientation
changed from xyz
to enu
.
x[["v"]][,,1:3]
) into what RDI [1, pages 11 and 12]
calls "ship" (or "righted") components. For example, the z coordinate,
which may point upwards or downwards depending on instrument orientation, is
mapped onto a "mast" coordinate that points more nearly upwards than
downward. The other ship coordinates are called "starboard" and "forward",
the meanings of which will be clear to mariners. Once the (x,y,z)
velocities are converted to ship velocities, the orientation of the
instrument is extracted from heading, pitch, and roll vectors stored in the
object. These angles are defined differently for RDI and Sontek profilers.The code handles every case individually, based on the table given below. The table comes from Clark Richards, a former PhD student at Dalhousie University [2], who developed it based on instrument documentation, discussion on user groups, and analysis of measurements acquired with RDI and Sontek acoustic current profilers in the SLEIWEX experiment [3]. In the table, (X, Y, Z) denote instrument-coordinate velocities, (S, F, M) denote ship-coordinate velocities, and (H, P, R) denote heading, pitch, and roll.
Case | Mfr. | Instr. Orient. | H | P | R | S | F | M | 1 | RDI |
ADCP | up | H | arctan(tan(P)*cos(R)) | R | -X | Y | -Z | 2 | RDI | ADCP |
down | H | arctan(tan(P)*cos(R)) | -R | X | Y | Z | 3 | Nortek | ADP | up |
H-90 | R | -P | X | Y | Z | 4 | Nortek | ADP | down | H-90 |
R | -P | X | -Y | -Z | 5 | Sontek | ADP | up | H-90 | -P |
-R | X | Y | Z | 6 | Sontek | ADP | down | H-90 | -P | -R |
X | Y | Z | 7 | Sontek | PCADP | up | H-90 | R | -P | X |
Y | Z | 8 | Sontek | PCADP | down | H-90 | R | -P | X | Y |
Z | Case | Mfr. | Instr. Orient. | H | P | R | S | F | M | 1 |
Finally, a standardized rotation matrix is used to convert from ship
coordinates to earth coordinates. As described in the RDI coordinate
transformation manual [1, pages 13 and 14], this matrix is based on sines
and cosines of heading, pitch, and roll If CH
and SH
denote
cosine and sine of heading (after adjusting for declination), with similar
terms for pitch and roll using second letters P
and R
, the
rotation matrix is
rbind(c( CH*CR + SH*SP*SR, SH*CP, CH*SR - SH*SP*CR), c(-SH*CR + CH*SP*SR, CH*CP, -SH*SR - CH*SP*CR), c( -CP*SR, SP, CP*CR))
This matrix is left-multiplied by a matrix with three rows, the top a vector
of "starboard" values, the middle a vector of "forward" values, and the
bottom a vector of "mast" values. Finally, the columns of
data$v[,,1:3]
are filled in with the result of the matrix
multiplication.
2. Clark Richards, 2012, PhD Dalhousie University Department of Oceanography.
3. The SLEIWEX experiment (http://myweb.dal.ca/kelley/SLEIWEX/index.php).
adp
data: [[,adp-method
,
[[<-,adp-method
, adp-class
,
adp
, as.adp
,
beamName
, beamToXyzAdp
,
beamToXyzAdv
, beamToXyz
,
beamUnspreadAdp
, binmapAdp
,
enuToOtherAdp
, enuToOther
,
plot,adp-method
,
read.adp.nortek
,
read.adp.rdi
,
read.adp.sontek.serial
,
read.adp.sontek
, read.adp
,
read.aquadoppHR
,
read.aquadoppProfiler
,
read.aquadopp
,
subset,adp-method
,
summary,adp-method
, toEnuAdp
,
toEnu
, velocityStatistics
,
xyzToEnu