{"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":"

导航坐标系

\"1556106837630-44d3cfe1-3deb-4417-8c36-d36d9c1c40f0.png\"

定位引擎后端融合使用的坐标系为右前上-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;


相关知识

  1. 陀螺仪零偏
    指陀螺仪在无外部输入(车辆静止或匀速直线行驶)状态下,所输出的值不等于0的状态,零偏亦指这种状态下输出的误差值。
  1. 陀螺仪温漂
    指陀螺仪零偏随着传感器本身温度不同而变化的特性。
  1. 陀螺仪轴向验证


3D加速度计

定义

加速度计,用于获取车辆三个轴向的加速度值。


轴向定义

值定义

对应的数据结构成员

单位

X轴(Pitch)

车的左侧指向车的右侧

车辆向右横移输出变大,向左横移输出变小

GDLOCACCE3D::fAcceX

g

Y轴(Roll)

车尾指向车头

车辆向前加速输出变大,刹车输出变小

GDLOCACCE3D::fAcceY

g

Z轴(Yaw)

由车底指向车顶

车辆水平静止的时候,Z轴输出+1.0左右
垂直向上加速的时候,Z轴输出大于+1.0
垂直向下加速的时候,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;


设备安装角

\"1556106122448-35e93ed1-bf93-4831-ba31-04e10b32119b.png\"


什么是安装角?

安装角如何获取?

下图中的坐标系和旋转顺序跟上面提到的安装角没有相关性,只是用于解释欧拉角而已。


\"1556106482645-0c0913e4-43ac-438a-b94f-0584b17d8ba7.png\"


整个旋转分为三个步骤:

  1. 将红色坐标系xyz 绕自己本身的z 轴旋转 ψ 角度得到黑色坐标系x'y'z'
  2. 将黑色坐标系x'y'z' 绕自己本身的y' 轴旋转 θ 角度得到绿色坐标系x"y"z"
  3. 将绿色坐标系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;


对接陀螺和加速度前先看这里

后端融合陀螺仪和加速度计的对接需要额外注意。对接之前需要先确认已了解如下信息

  1. 芯片坐标系
  1. 导航坐标系,即高德定义的车身坐标系
  1. 芯片相对于设备的位置及姿态
  1. 设备相对于车辆的位置及姿态
  1. 安装角
  1. 系统侧输出的值如何与芯片坐标系对应上

大角度安装角

先以一个大安装角的项目的图示来说明,图中包含了五点信息。

  1. X`,Y`,Z`三轴就是芯片坐标系。这里的X`画的是一个圈,中间一个点,表示轴向是朝向屏幕外
  1. X,Y,Z三轴就是导航坐标系
  1. 从图中可以看出芯片相对于设备的位置和姿态
  1. 从图中可以看出设备相对于车辆的位置和姿态
  2. 从图中可以看出,需要将设备绕着X`轴旋转120度,芯片坐标系才能跟车辆坐标系一致,所以根据右手定则,设备的安装角是(0,120,0),即YAW(Z) = 0,PITCH(X) = 120,ROLL(Y) = 0
  1. 系统侧输出的值如何与芯片坐标系对应上可以直接标在图上,也可以额外说明,这与系统侧如何提供这三个值有关。需要跟系统侧对清楚。
  2. 高德定义的坐标系使用右手法则来规定陀螺的方向,所以也需要明确芯片确定方向的方法。如果不一样,定位信息调查表中会有体现
  3. 高德定义的加速度计,轴正向的加速度为正值,朝着轴向加速时,值变大,反之变小。
  4. 为了方便行文,假设系统通过json协议来传递这三个值,陀螺对应关系分别是 zGyroValue 对应Z`, yGyroValue 对应 Y`,xGyroValue 对应X`,加速度计对应关系分别是 zA3DValue 对应 Z`, yA3DValue 对应 Y`, xA3DValue 对应X`。

\"word_media_image1.png\"

了解了如下信息后,我们就很清楚陀螺和加速度计如何赋值了,如下所示:

轴和轴向的定义是相对的,所以针对大角度安装角这种CASE,我们也可以按如下方式来赋值:


小角度安装角

再以小角度安装角的一个项目为例说明一下。

每个项目提供资料的方式都不一样,有些时候信息是分散提供的。以下华晨M8X项目为例

我们仍然需要先知道如下6点信息

  1. 芯片坐标系
  1. 导航坐标系,即高德定义的车身坐标系
  1. 芯片相对于设备的位置及姿态
  1. 设备相对于车辆的位置及姿态
  1. 安装角
  1. 系统侧输出的值如何与芯片坐标系对应上

如下图是客户提供的芯片坐标系说明有设备在实车上的安装姿态,我们可以知道芯片的坐标系:

结合导航坐标系我们可以知道,此项目定位的轴和轴向跟我们定义的导航坐标系其实只是轴命名和轴向有不同,我们可以简单地修改赋值关系,省去复杂的坐标系旋转。所以三个轴的赋值公式和安装角如下:

\"word_media_image2.png\"

\"word_media_image3.png\"

加速度计正负号判断方法

\"word_media_image4.png\"

单轴陀螺安装角影响分析报告

https://lark.alipay.com/aone573531/imu/npi4yn

单轴陀螺角速度敏感轴与竖直向上的方向夹角要求在6°内

\"1556107040112-39a0246f-ea7d-4869-9e5c-c5359367678b.png\"

脉冲

脉冲是用于记录车速信息的信号,单位为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/s)。

具体参考定位引擎对外头文件中的数据结构体定义,转换公式可以找硬件供应商或者集成商提供。

","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}}