{"version":"0.1.0","code":"0000","result":true,"message":"处理成功","errdetail":"","timestamp":1671508836764,"data":{"id":71712391,"title":"4.8.2 传感器基础知识","slug":"oh61rt","format":"lake","bookId":26046811,"body":null,"body_draft":null,"body_html":"
定位引擎后端融合使用的坐标系为右前上-XYZ坐标系,如上图所示。
X轴正方向指向车辆右侧,因为绕着X轴转动时车辆是在做俯仰的动作,所以也称为俯仰轴-Pitch。
Y轴正方向指向车辆前方,因为绕着Y轴转动时车辆是在做滚转的动作,所以也称为滚转轴-Roll。
Z轴正方形指向车顶上方,因为绕着Z轴滚转时车辆是在做偏航的动作,所以也称为偏航轴-Yaw。
明确了轴正向方向后就可以确认正负值定义。对陀螺仪来说,需借助右手法则,拇指朝向轴正向,屈指方向为输出正值的方向;对加速度计来说,轴正向的加速度为正值。
陀螺仪,这边指的是三轴陀螺仪,是用于获取车辆三个轴向的角速度值的器件,如果是单轴陀螺仪的话一般就是只有Z轴,用来测量车辆的左右转向角度值。
轴向定义 | 值定义 | 对应的数据结构成员 | 单位 | |
X轴(Pitch) | 车的左侧指向车的右侧 | 车辆上坡输出正值,车辆下坡输出负值 | GDLOCGYRO::fValueX | 度/s |
Y轴(Roll) | 车尾指向车头 | 车辆左侧高于右侧的过程输出正值, | GDLOCGYRO::fValueY | 度/s |
Z轴(Yaw) | 由车底指向车顶 | 车辆左转输出正值,车辆右转输出负值 | GDLOCGYRO::fValueZ | 度/s |
/**\n * @brief 陀螺数据\n */\ntypedef struct tagGDLOCGYRO {\n enumLOCDATATYPE euDataType; /**< 本结构体所表示的数据类型,赋值:eLocDataGyro */\n enumLOCTHREEAXIS euAxis; /**< 有效数据轴 */\n Gfloat32 fValueZ; /**< 上,单位:度/秒 */ \n Gfloat32 fValueX; /**< 右,单位:度/秒 */ \n Gfloat32 fValueY; /**< 前,单位:度/秒 */ \n Gfloat32 fTemperature; /**< 温度。单位:摄氏度。陀螺仪芯片上的温度传感器的读值 */\n Gint32 nInterval; /**< 前后两个信号的间隔时间,单位:毫秒 */\n Guint32 unTickTime; /**< 时间戳,推荐输入系统滴答数,某些系统取不到系统滴答数时取1970年01月01日00时00分00秒以来的时间戳。单位:毫秒 */\n} GDLOCGYRO;
加速度计,用于获取车辆三个轴向的加速度值。
轴向定义 | 值定义 | 对应的数据结构成员 | 单位 | |
X轴(Pitch) | 车的左侧指向车的右侧 | 车辆向右横移输出变大,向左横移输出变小 | GDLOCACCE3D::fAcceX | g |
Y轴(Roll) | 车尾指向车头 | 车辆向前加速输出变大,刹车输出变小 | GDLOCACCE3D::fAcceY | g |
Z轴(Yaw) | 由车底指向车顶 | 车辆水平静止的时候,Z轴输出+1.0左右 | GDLOCACCE3D::fAcceZ | g |
g为重力加速度,也就是9.8m/s^2。如果系统方提供的加速度计信号单位是m/s^2,那就需要上层先转换为单位g再传给定位引擎(除以9.8)。
/**\n * @brief 3D加速度计\n */\ntypedef struct tagGDLOCACCE3D {\n enumLOCDATATYPE euDataType; /**< 本结构体所表示的数据类型,赋值:eLocDataAcce3D */\n enumLOCTHREEAXIS euAxis; /**< 有效数据轴 */\n Gfloat32 fAcceZ; /**< 上,单位:g(9.8米/秒^2) */\n Gfloat32 fAcceX; /**< 右,单位:g(9.8米/秒^2) */\n Gfloat32 fAcceY; /**< 前,单位:g(9.8米/秒^2) */\n Gint32 nInterval; /**< 前后两个信号的间隔时间,单位:毫秒 */\n Guint32 unTickTime; /**< 时间戳,推荐输入系统滴答数,某些系统取不到系统滴答数时取1970年01月01日00时00分00秒以来的时间戳。单位:毫秒 */\n} GDLOCACCE3D;
设备安装角
下图中的坐标系和旋转顺序跟上面提到的安装角没有相关性,只是用于解释欧拉角而已。
整个旋转分为三个步骤:
- 将红色坐标系xyz 绕自己本身的z 轴旋转 ψ 角度得到黑色坐标系x'y'z'
- 将黑色坐标系x'y'z' 绕自己本身的y' 轴旋转 θ 角度得到绿色坐标系x"y"z"
- 将绿色坐标系x"y"z"绕自己本身的x" 轴旋转φ 角度得到蓝色坐标系x'"y'"z'"
由于绕不同的轴旋转所得到的欧拉角是不同的,所以欧拉角在使用的时候必须要先指明旋转的顺序。
/**\n * @brief 设备安装角\n */\ntypedef struct tagMOUNTANGLE {\n Gint32 hasMountAngle; /**< 安装角是否有效 0无效 1有效 */\n Gfloat64 yawMountAngle; /**< 偏航角 */\n Gfloat64 pitchMountAngle; /**< 俯仰角 */\n Gfloat64 rollMountAngle; /**< 翻滚角 */\n} MOUNTANGLE, *PMOUNTANGLE;\n\n/*\n\\brief 设置安装角\n\\details 上层使用此接口来设置设备的安装角。当前只有后端融合项目才需要如此\n\\param mountAngle 安装角\n\\retval void\n\\note 异步接口\n\\see MOUNTANGLE\n*/\nvirtual void setMountAngle(MOUNTANGLE *mountAngle) = 0;
后端融合陀螺仪和加速度计的对接需要额外注意。对接之前需要先确认已了解如下信息
先以一个大安装角的项目的图示来说明,图中包含了五点信息。
- 系统侧输出的值如何与芯片坐标系对应上可以直接标在图上,也可以额外说明,这与系统侧如何提供这三个值有关。需要跟系统侧对清楚。
- 高德定义的坐标系使用右手法则来规定陀螺的方向,所以也需要明确芯片确定方向的方法。如果不一样,定位信息调查表中会有体现
- 高德定义的加速度计,轴正向的加速度为正值,朝着轴向加速时,值变大,反之变小。
- 为了方便行文,假设系统通过json协议来传递这三个值,陀螺对应关系分别是 zGyroValue 对应Z`, yGyroValue 对应 Y`,xGyroValue 对应X`,加速度计对应关系分别是 zA3DValue 对应 Z`, yA3DValue 对应 Y`, xA3DValue 对应X`。
了解了如下信息后,我们就很清楚陀螺和加速度计如何赋值了,如下所示:
轴和轴向的定义是相对的,所以针对大角度安装角这种CASE,我们也可以按如下方式来赋值:
- 陀螺仪赋值:
- zGyroValue输出值赋给引擎的Y轴,即GDLOCGYRO::fValueY = zGyroValue
- yGyroValue输出值乘上-1.0后再赋给引擎的Z轴,即GDLOCGYRO::fValueZ = yGyroValue * -1.0
- xGyroValue输出值赋给引擎的X轴,即GDLOCGYRO::fValueX = xGyroValue
- 加速度计赋值
- zA3DValue输出值赋给引擎的Y轴,即GDLOCACCE3D::fAcceY = zA3DValue
- yA3DValue输出值乘上-1.0后再赋给引擎的Z轴,即GDLOCACCE3D::fAcceZ = yA3DValue* -1.0
- xA3DValue输出值赋给引擎的X轴,即GDLOCACCE3D::fAcceX = xA3DValue
- 安装角配置为(0,30,0),即YAW(Z) = 0,PITCH(X) = 30,ROLL(Y) = 0
再以小角度安装角的一个项目为例说明一下。
每个项目提供资料的方式都不一样,有些时候信息是分散提供的。以下华晨M8X项目为例
我们仍然需要先知道如下6点信息
如下图是客户提供的芯片坐标系说明有设备在实车上的安装姿态,我们可以知道芯片的坐标系:
结合导航坐标系我们可以知道,此项目定位的轴和轴向跟我们定义的导航坐标系其实只是轴命名和轴向有不同,我们可以简单地修改赋值关系,省去复杂的坐标系旋转。所以三个轴的赋值公式和安装角如下:
https://lark.alipay.com/aone573531/imu/npi4yn
单轴陀螺角速度敏感轴与竖直向上的方向夹角要求在6°内
脉冲是用于记录车速信息的信号,单位为km/h。
/**\n * @brief 脉冲数据\n */\ntypedef struct tagGDLOCPULSE {\n enumLOCDATATYPE euDataType; /**< 本结构体所表示的数据类型,赋值:eLocDataPulse */\n Gfloat32 fValue; /**< 脉冲速度,单位:千米/小时 */\n Gint32 nInterval; /**< 前后两个信号的间隔时间,单位:毫秒 */\n Guint32 unTickTime; /**< 时间戳,推荐输入系统滴答数,某些系统取不到系统滴答数时取1970年01月01日00时00分00秒以来的时间戳。单位:毫秒 */\n} GDLOCPULSE;
对于前端融合,可以不提供左转,右转,停车,掉头等运动状态,但是一定要提供倒车状态,即在倒车时将引擎的GDLOCDRPOS信号结构体的euMoveStatus字段赋值为EMoveStatus_MoveBack。理论上讲,前端融合会输入两种状态:倒车状态和无效状态
对于后端融合,定位引擎要求在倒车的时候,将速度值置成负值。
一般设备/器件提供的可能是传感器 AD 值,也就是电压数字值,需要转换成引擎所需要的单位再进行传输。
陀螺仪的单位是 °/s ,加速度计单位是 g (即 9.8m/s2 )。
具体参考定位引擎对外头文件中的数据结构体定义,转换公式可以找硬件供应商或者集成商提供。
","body_lake":null,"pub_level":null,"status":"0","updated_at":"2022-04-06 07:02:23","deleted_at":null,"nameSpace":"mnlcaa/v610","browseCount":324,"collectCount":0,"estimateDate":16,"docStatus":0,"permissions":true,"overView":false}}