mirror of
https://github.com/apache/nuttx.git
synced 2026-05-23 14:58:13 +08:00
drivers/sensors/: Add coordinate conversion function
convert from body coordinate system to right-hand
coordinate system.
Example:
Compared to the standard coordinate system,
the x-axis and y-axis are interchanged and have opposite directions,
the z-axis remains normal.
body coordinate ----> right-hand coordinate
+x +y
| |
| |
| |
| |
-y<-------. .------>+x
/ /
/ /
/ /
/ /
+z +z
So for the above conversion, using "P3" to represent transformation relationships
The front is 1 0 2, which represents the y x z axis.
The standard order is 0 1 2, so y and x are interchanged.
The following -1 1 1 indicates the direction of the axis.
The standard is 1 1 1. Because the current y-axis is opposite to
the standard x-axis, it is -1.
static const struct sensor_axis_map_s g_remap_tbl[] =
{
{ 0, 1, 2, 1, 1, 1 }, /* P0 */
{ 1, 0, 2, 1, -1, 1 }, /* P1 */
{ 0, 1, 2, -1, -1, 1 }, /* P2 */
{ 1, 0, 2, -1, 1, 1 }, /* P3 */
{ 0, 1, 2, -1, 1, -1 }, /* P4 */
{ 1, 0, 2, -1, -1, -1 }, /* P5 */
{ 0, 1, 2, 1, -1, -1 }, /* P6 */
{ 1, 0, 2, 1, 1, -1 }, /* P7 */
};
you can call the function sensor_remap_vector_raw16 and pass P3 parameters
to perform the conversion.
Signed-off-by: Jiuzhu Dong <dongjiuzhu1@xiaomi.com>
This commit is contained in:
@@ -316,6 +316,125 @@
|
||||
#define SENSOR_REMOTE (1u << 31)
|
||||
#define SENSOR_PERSIST (1u << 30)
|
||||
|
||||
/* Body coordinate system position P0:
|
||||
*
|
||||
* +y
|
||||
* |
|
||||
* |
|
||||
* |
|
||||
* |
|
||||
* .------>+x
|
||||
* /
|
||||
* /
|
||||
* /
|
||||
* /
|
||||
* +z
|
||||
*
|
||||
*/
|
||||
|
||||
#define SENSOR_BODY_COORDINATE_P0 0
|
||||
|
||||
/* Body coordinate system position P1:
|
||||
*
|
||||
* .------>+y
|
||||
* /|
|
||||
* / |
|
||||
* / |
|
||||
* / |
|
||||
* +z -x
|
||||
*
|
||||
*/
|
||||
|
||||
#define SENSOR_BODY_COORDINATE_P1 1
|
||||
|
||||
/* Body coordinate system position P2:
|
||||
*
|
||||
* -x<------.
|
||||
* /|
|
||||
* / |
|
||||
* / |
|
||||
* / |
|
||||
* +z -y
|
||||
*
|
||||
*/
|
||||
|
||||
#define SENSOR_BODY_COORDINATE_P2 2
|
||||
|
||||
/* Body coordinate system position P3:
|
||||
*
|
||||
* +x
|
||||
* |
|
||||
* |
|
||||
* |
|
||||
* |
|
||||
* -y<------.
|
||||
* /
|
||||
* /
|
||||
* /
|
||||
* /
|
||||
* +z
|
||||
*
|
||||
*/
|
||||
|
||||
#define SENSOR_BODY_COORDINATE_P3 3
|
||||
|
||||
/* Body coordinate system position P4:
|
||||
*
|
||||
* +y -z
|
||||
* | /
|
||||
* | /
|
||||
* | /
|
||||
* |/
|
||||
* -x<------.
|
||||
*
|
||||
*/
|
||||
|
||||
#define SENSOR_BODY_COORDINATE_P4 4
|
||||
|
||||
/* Body coordinate system position P5:
|
||||
*
|
||||
* +y -z
|
||||
* | /
|
||||
* | /
|
||||
* | /
|
||||
* |/
|
||||
* -x<------.
|
||||
*
|
||||
*/
|
||||
|
||||
#define SENSOR_BODY_COORDINATE_P5 5
|
||||
|
||||
/* Body coordinate system position P6:
|
||||
*
|
||||
* -z
|
||||
* /
|
||||
* /
|
||||
* /
|
||||
* /
|
||||
* -x<------.
|
||||
* |
|
||||
* |
|
||||
* |
|
||||
* |
|
||||
* -y
|
||||
*
|
||||
*/
|
||||
|
||||
#define SENSOR_BODY_COORDINATE_P6 6
|
||||
|
||||
/* Body coordinate system position P7:
|
||||
*
|
||||
* +x -z
|
||||
* | /
|
||||
* | /
|
||||
* | /
|
||||
* |/
|
||||
* .------->y
|
||||
*
|
||||
*/
|
||||
|
||||
#define SENSOR_BODY_COORDINATE_P7 7
|
||||
|
||||
/****************************************************************************
|
||||
* Inline Functions
|
||||
****************************************************************************/
|
||||
@@ -1058,6 +1177,24 @@ extern "C"
|
||||
#define EXTERN extern
|
||||
#endif
|
||||
|
||||
/****************************************************************************
|
||||
* Name: sensor_remap_vector_raw16
|
||||
*
|
||||
* Description:
|
||||
* This function remap the sensor data according to the place position on
|
||||
* board. The value of place is determined base on g_remap_tbl.
|
||||
*
|
||||
* Input Parameters:
|
||||
* in - A pointer to input data need remap.
|
||||
* out - A pointer to output data.
|
||||
* place - The place position of sensor on board,
|
||||
* ex:SENSOR_BODY_COORDINATE_PX
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
void sensor_remap_vector_raw16(FAR const int16_t *in, FAR int16_t *out,
|
||||
int place);
|
||||
|
||||
/****************************************************************************
|
||||
* "Upper Half" Sensor Driver Interfaces
|
||||
****************************************************************************/
|
||||
|
||||
Reference in New Issue
Block a user