感知算法-超声波三角定位测量方法

测量目标坐标点的计算

1、表述定义

定义目标位置的坐标为 ( x 2 T , y 2 T ) (x^T_2,y^T_2) (x2T,y2T),2号传感器的坐标为 ( x 2 2 , y 2 2 ) (x^2_2,y^2_2) (x22,y22)、3号传感器的坐标点为 ( x 2 3 , y 2 3 ) (x^3_2,y^3_2) (x23,y23)、4号传感器的坐标点为 ( x 2 4 , y 2 4 ) (x^4_2,y^4_2) (x24,y24)。2、3、4号传感器测得的实际距离定义为 D 2 D_2 D2 D 3 D_3 D3 D 4 D_4 D4。点 ( x 2 3 , y 2 3 ) (x^3_2,y^3_2) (x23,y23)和点 ( x 2 4 , y 2 4 ) (x^4_2,y^4_2) (x24,y24)之间的距离为 L 1 L_1 L1,点 ( x 2 2 , y 2 2 ) (x^2_2,y^2_2) (x22,y22)和点 ( x 2 3 , y 2 3 ) (x^3_2,y^3_2) (x23,y23)之间的距离为 L 2 L_2 L2。定义 L 1 L_1 L1相对 X X X轴旋转的角度为 α 1 \alpha_1 α1 L 2 L_2 L2相对 X X X轴旋转的角度为 α 2 \alpha_2 α2 D 3 D_3 D3 L 1 L_1 L1的夹角为 β 1 \beta_1 β1 D 2 D_2 D2 L 2 L_2 L2的夹角为 β 2 \beta_2 β2

2、传感器工作状态描述

3号传感器处于收发一体模式,2、4号传感器处于接收模式。3号传感器发射完超声波后,和2、4号传感器一样都处于接收状态,等待超声波的回波信号,分别产生3个飞行时间,分别为 T O F 2 TOF_2 TOF2 T O F 3 TOF_3 TOF3 T O F 4 TOF_4 TOF4

对上述状态的图像化描述,如下图所示:
坐标关系图

3、测量距离计算

假设T℃温度时的声速为 V T V_T VT,建立距离关系式
D 2 + D 3 = V T ∗ T O F 2 D 3 + D 3 = V T ∗ T O F 3 D 4 + D 3 = V T ∗ T O F 4 \begin{matrix} D_2 + D_3 = V_T*TOF_2 \\ D_3 + D_3 = V_T*TOF_3 \\ D_4 + D_3 = V_T*TOF_4 \end{matrix} D2+D3=VTTOF2D3+D3=VTTOF3D4+D3=VTTOF4
第一步计算距离 D 3 D_3 D3
D 3 = V T ∗ T O F 3 2 D_3 = \frac{V_T*TOF_3}{2} D3=2VTTOF3
接下来计算距离 D 2 D_2 D2 D 4 D_4 D4
D 2 = V T ∗ T O F 2 − D 3 D 4 = V T ∗ T O F 4 − D 3 D_2 = V_T*TOF_2 - D_3\\ D_4 = V_T*TOF_4 - D_3 D2=VTTOF2D3D4=VTTOF4D3
当然,在实际工程应用中,可以不考虑这个误差,直接算出这三个距离值。
D 2 = V T ∗ T O F 2 2 D 3 = V T ∗ T O F 3 2 D 4 = V T ∗ T O F 4 2 D_2 = \frac{V_T*TOF_2}{2} \\ D_3 = \frac{V_T*TOF_3}{2} \\ D_4 = \frac{V_T*TOF_4}{2} D2=2VTTOF2D3=2VTTOF3D4=2VTTOF4

4、目标位置计算

  1. 根据坐标点 ( x 2 3 , y 2 3 ) (x^3_2,y^3_2) (x23,y23) ( x 2 4 , y 2 4 ) (x^4_2,y^4_2) (x24,y24)的位置,计算坐标点 ( x 2 T , y 2 T ) (x^T_2,y^T_2) (x2T,y2T)
  • 计算角度 α \alpha α
    α 1 = arctan ⁡ y 2 4 − y 2 3 x 2 4 − x 2 3 \alpha_1 = \arctan \frac{y^4_2 - y^3_2}{x^4_2 - x^3_2} α1=arctanx24x23y24y23
    α 2 = arctan ⁡ y 2 3 − y 2 2 x 2 3 − x 2 2 \alpha_2 = \arctan \frac{y^3_2 - y^2_2}{x^3_2 - x^2_2} α2=arctanx23x22y23y22
  • 计算角度 β \beta β

根据余弦定理计算得
β 1 = arccos ⁡ D 3 2 + L 1 2 − D 4 2 2 ∗ D 3 ∗ L 1 \beta_1 = \arccos \frac{D_3^2 + L_1^2 - D_4^2}{2*D_3*L_1} β1=arccos2D3L1D32+L12D42
β 2 = arccos ⁡ D 2 2 + L 2 2 − D 3 2 2 ∗ D 2 ∗ L 2 \beta_2 = \arccos \frac{D_2^2 + L_2^2 - D_3^2}{2*D_2*L_2} β2=arccos2D2L2D22+L22D32

  • 计算目标位置坐标

3、4号传感器组合测量结果为

[ x 2 T y 2 T ] = [ x 2 3 y 2 3 ] + [ D 3 ∗ cos ⁡ ( α 1 + β 1 ) D 3 ∗ sin ⁡ ( α 1 + β 1 ) ] \left[ \begin{matrix} x^T_2\\y^T_2 \end{matrix} \right]= \left[ \begin{matrix} x^3_2\\y^3_2 \end{matrix} \right]+ \left[ \begin{matrix} D_3*\cos (\alpha_1+\beta_1) \\ D_3*\sin (\alpha_1+\beta_1) \end{matrix} \right] [x2Ty2T]=[x23y23]+[D3cos(α1+β1)D3sin(α1+β1)]

2、3号传感器组合测量结果为

[ x 2 T y 2 T ] = [ x 2 2 y 2 2 ] + [ D 2 ∗ cos ⁡ ( α 2 + β 2 ) D 2 ∗ sin ⁡ ( α 2 + β 2 ) ] \left[ \begin{matrix} x^T_2\\y^T_2 \end{matrix} \right]= \left[ \begin{matrix} x^2_2\\y^2_2 \end{matrix} \right]+ \left[ \begin{matrix} D_2*\cos (\alpha_2+\beta_2) \\ D_2*\sin (\alpha_2+\beta_2) \end{matrix} \right] [x2Ty2T]=[x22y22]+[D2cos(α2+β2)D2sin(α2+β2)]

5、计算过程中的常数

由于传感器的安装位置是固定的,所以上述计算过程中,很多参数是确定的常量。

  • 已知传感器安装位置点
传感器号坐标位置实际坐标点
2号 ( x 2 2 , y 2 2 ) (x^2_2,y^2_2) (x22,y22) ( 360 , 30 ) (360,30) (360,30)
3号 ( x 2 3 , y 2 3 ) (x^3_2,y^3_2) (x23,y23) ( 360 , − 30 ) (360,-30) (360,30)
4号 ( x 2 4 , y 2 4 ) (x^4_2,y^4_2) (x24,y24) ( 346 , − 70 ) (346,-70) (346,70)

通过上述信息,可以计算出传感器的距离 L 1 L_1 L1 L 2 L_2 L2,以及对应的旋转角度 α 1 \alpha_1 α1 α 2 \alpha_2 α2

参数计算值
L 1 L_1 L142.3792(cm)
L 2 L_2 L260(cm)
α 1 \alpha_1 α1250.71(°)
α 2 \alpha_2 α2270(°)

6、软件代码

        /// <summary>
        /// 计算超声波的距离
        /// </summary>
        /// <param name="m_318Data">输入原始超声波的原始数据</param>
        /// <param name="Distance">计算实际距离</param>
        private void DistanceCalculate(LIN_STP318_ReadData[] m_318Data,ref double [] Distance)
        {
            Distance[1] = m_318Data[1].TOF * 0.0157;//cm
            Distance[0] = m_318Data[0].TOF * 0.0314 - Distance[1];//cm
            Distance[2] = m_318Data[2].TOF * 0.0314 - Distance[1];//cm
        }
        //目标位置计算
        /// <summary>
        /// 目标位置坐标点计算
        /// </summary>
        /// <param name="base_position">基准点坐标点</param>
        /// <param name="base_angle">基准角度(弧度)</param>
        /// <param name="base_L">基准长度(cm)</param>
        /// <param name="distance1">临边长度(cm)</param>
        /// <param name="distance2">对角长度(cm)</param>
        /// <param name="TargetPosition">输出最终的目标位置坐标</param>
        private void TargetPositionCalculate(Axis base_position,double base_angle,double base_L,double distance1, double distance2,ref Axis TargetPosition)
        {
            double beta = Math.Acos((Math.Pow(base_L, 2) + Math.Pow(distance1, 2) - Math.Pow(distance2, 2)) / (2 * base_L * distance1));
            TargetPosition.x = base_position.x + distance1 * Math.Cos(base_angle + beta);
            TargetPosition.y = base_position.y + distance1 * Math.Sin(base_angle + beta);
        }
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

henry.zhu51

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值