新手上路
- 积分
- 25
- 金钱
- 25
- 注册时间
- 2019-1-15
- 在线时间
- 7 小时
|
12金钱
问题是这样,我在移植官方的MPL的库,准备用内部的DMP姿态解算。
看了官方的文档以后,在eMPL_outputs.h 这个c文件中有 int inv_get_sensor_type_euler(long *data, int8_t *accuracy, inv_time_t *timestamp);这样一个获取欧拉角的函数。但是我看网上别人移植的时候,还有参考书上,都是采取从DMP的FIFO中读取四元数数据,然后自己写一个函数来把四元数转换成欧拉角。为什么不用现成的而要自己写呢?
第二个问题是,官方的文件里面有hal_outputs.c这个文件,又有eMPL_outputs.c这个文件。这俩文件里面实现的函数功能都是差不多的。
hal_outputs.c里有这些函数
int inv_get_sensor_type_orientation(float *values, int8_t *accuracy,
inv_time_t * timestamp);
int inv_get_sensor_type_accelerometer(float *values, int8_t *accuracy,
inv_time_t * timestamp);
int inv_get_sensor_type_gyroscope(float *values, int8_t *accuracy,
inv_time_t * timestamp);
int inv_get_sensor_type_gyroscope_raw(float *values, int8_t *accuracy,
inv_time_t * timestamp);
int inv_get_sensor_type_magnetic_field(float *values, int8_t *accuracy,
inv_time_t * timestamp);
int inv_get_sensor_type_rotation_vector(float *values, int8_t *accuracy,
inv_time_t * timestamp);
int inv_get_sensor_type_linear_acceleration(float *values,
int8_t *accuracy,
inv_time_t * timestamp);
int inv_get_sensor_type_gravity(float *values, int8_t *accuracy,
inv_time_t * timestamp);
inv_error_t inv_enable_hal_outputs(void);
inv_error_t inv_disable_hal_outputs(void);
inv_error_t inv_init_hal_outputs(void);
inv_error_t inv_start_hal_outputs(void);
inv_error_t inv_stop_hal_outputs(void);
而eMPL_outputs.c里面
int inv_get_sensor_type_accel(long *data, int8_t *accuracy, inv_time_t *timestamp);
int inv_get_sensor_type_gyro(long *data, int8_t *accuracy, inv_time_t *timestamp);
int inv_get_sensor_type_compass(long *data, int8_t *accuracy, inv_time_t *timestamp);
int inv_get_sensor_type_quat(long *data, int8_t *accuracy, inv_time_t *timestamp);
int inv_get_sensor_type_euler(long *data, int8_t *accuracy, inv_time_t *timestamp);
int inv_get_sensor_type_rot_mat(long *data, int8_t *accuracy, inv_time_t *timestamp);
int inv_get_sensor_type_heading(long *data, int8_t *accuracy, inv_time_t *timestamp);
inv_error_t inv_enable_eMPL_outputs(void);
inv_error_t inv_disable_eMPL_outputs(void);
这俩文件有什么讲究吗? 我能不能只移植empl_outputs.c 不移植这个hal_outputs.c文件?
各位大佬帮忙解解惑。
|
|