| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203 |
- For discussion. Unclear are:
- * is the definition of +/- values practical or counterintuitive?
- * are the definitions unambiguous and easy to follow?
- * are the examples correct?
- * should we have HOWTO engineer a correct matrix for a new device (without comparing to a different one)?
- ====
- Mounting matrix
- The mounting matrix is a device tree property used to orient any device
- that produce three-dimensional data in relation to the world where it is
- deployed.
- The purpose of the mounting matrix is to translate the sensor frame of
- reference into the device frame of reference using a translation matrix as
- defined in linear algebra.
- The typical usecase is that where a component has an internal representation
- of the (x,y,z) triplets, such as different registers to read these coordinates,
- and thus implying that the component should be mounted in a certain orientation
- relative to some specific device frame of reference.
- For example a device with some kind of screen, where the user is supposed to
- interact with the environment using an accelerometer, gyroscope or magnetometer
- mounted on the same chassis as this screen, will likely take the screen as
- reference to (x,y,z) orientation, with (x,y) corresponding to these axes on the
- screen and (z) being depth, the axis perpendicular to the screen.
- For a screen you probably want (x) coordinates to go from negative on the left
- to positive on the right, (y) from negative on the bottom to positive on top
- and (z) depth to be negative under the screen and positive in front of it,
- toward the face of the user.
- A sensor can be mounted in any angle along the axes relative to the frame of
- reference. This means that the sensor may be flipped upside-down, left-right,
- or tilted at any angle relative to the frame of reference.
- Another frame of reference is how the device with its sensor relates to the
- external world, the environment where the device is deployed. Usually the data
- from the sensor is used to figure out how the device is oriented with respect
- to this world. When using the mounting matrix, the sensor and device orientation
- becomes identical and we can focus on the data as it relates to the surrounding
- world.
- Device-to-world examples for some three-dimensional sensor types:
- - Accelerometers have their world frame of reference toward the center of
- gravity, usually to the core of the planet. A reading of the (x,y,z) values
- from the sensor will give a projection of the gravity vector through the
- device relative to the center of the planet, i.e. relative to its surface at
- this point. Up and down in the world relative to the device frame of
- reference can thus be determined. and users would likely expect a value of
- 9.81 m/s^2 upwards along the (z) axis, i.e. out of the screen when the device
- is held with its screen flat on the planets surface and 0 on the other axes,
- as the gravity vector is projected 1:1 onto the sensors (z)-axis.
- If you tilt the device, the g vector virtually coming out of the display
- is projected onto the (x,y) plane of the display panel.
- Example:
- ^ z: +g ^ z: > 0
- ! /!
- ! x=y=0 / ! x: > 0
- +--------+ +--------+
- ! ! ! !
- +--------+ +--------+
- ! /
- ! /
- v v
- center of center of
- gravity gravity
- If the device is tilted to the left, you get a positive x value. If you point
- its top towards surface, you get a negative y axis.
- (---------)
- ! ! y: -g
- ! ! ^
- ! ! !
- ! !
- ! ! x: +g <- z: +g -> x: -g
- ! 1 2 3 !
- ! 4 5 6 ! !
- ! 7 8 9 ! v
- ! * 0 # ! y: +g
- (---------)
- - Magnetometers (compasses) have their world frame of reference relative to the
- geomagnetic field. The system orientation vis-a-vis the world is defined with
- respect to the local earth geomagnetic reference frame where (y) is in the
- ground plane and positive towards magnetic North, (x) is in the ground plane,
- perpendicular to the North axis and positive towards the East and (z) is
- perpendicular to the ground plane and positive upwards.
- ^^^ North: y > 0
- (---------)
- ! !
- ! !
- ! !
- ! ! >
- ! ! > North: x > 0
- ! 1 2 3 ! >
- ! 4 5 6 !
- ! 7 8 9 !
- ! * 0 # !
- (---------)
- Since the geomagnetic field is not uniform this definition fails if we come
- closer to the poles.
- Sensors and driver can not and should not take care of this because there
- are complex calculations and empirical data to be taken care of. We leave
- this up to user space.
- The definition we take:
- If the device is placed at the equator and the top is pointing north, the
- display is readable by a person standing upright on the earth surface, this
- defines a positive y value.
- - Gyroscopes detects the movement relative the device itself. The angular
- velocity is defined as orthogonal to the plane of rotation, so if you put the
- device on a flat surface and spin it around the z axis (such as rotating a
- device with a screen lying flat on a table), you should get a negative value
- along the (z) axis if rotated clockwise, and a positive value if rotated
- counter-clockwise according to the right-hand rule.
- (---------) y > 0
- ! ! v---\
- ! !
- ! !
- ! ! <--\
- ! ! ! z > 0
- ! 1 2 3 ! --/
- ! 4 5 6 !
- ! 7 8 9 !
- ! * 0 # !
- (---------)
- So unless the sensor is ideally mounted, we need a means to indicate the
- relative orientation of any given sensor of this type with respect to the
- frame of reference.
- To achieve this, use the device tree property "mount-matrix" for the sensor.
- This supplies a 3x3 rotation matrix in the strict linear algebraic sense,
- to orient the senor axes relative to a desired point of reference. This means
- the resulting values from the sensor, after scaling to proper units, should be
- multiplied by this matrix to give the proper vectors values in three-dimensional
- space, relative to the device or world point of reference.
- For more information, consult:
- https://en.wikipedia.org/wiki/Rotation_matrix
- The mounting matrix has the layout:
- (mxx, myx, mzx)
- (mxy, myy, mzy)
- (mxz, myz, mzz)
- Values are intended to be multiplied as:
- x' = mxx * x + myx * y + mzx * z
- y' = mxy * x + myy * y + mzy * z
- z' = mxz * x + myz * y + mzz * z
- It is represented as an array of strings containing the real values for
- producing the transformation matrix.
- Examples:
- Identity matrix (nothing happens to the coordinates, which means the device was
- mechanically mounted in an ideal way and we need no transformation):
- mount-matrix = "1", "0", "0",
- "0", "1", "0",
- "0", "0", "1";
- The sensor is mounted 30 degrees (Pi/6 radians) tilted along the X axis, so we
- compensate by performing a -30 degrees rotation around the X axis:
- mount-matrix = "1", "0", "0",
- "0", "0.866", "0.5",
- "0", "-0.5", "0.866";
- The sensor is flipped 180 degrees (Pi radians) around the Z axis, i.e. mounted
- upside-down:
- mount-matrix = "0.998", "0.054", "0",
- "-0.054", "0.998", "0",
- "0", "0", "1";
- ???: this does not match "180 degrees" - factors indicate ca. 3 degrees compensation
|