gazebo仿真阵列超声波信号并完成点云构建

目前是有这样一个项目,我们希望做一个集成式的超声波阵列,能够探测到物体具体的高度信息,其实也就是将障碍物的表面能用三维的方式表达出来

本来是想用TDK-ch201来尝试这部分的工作,它有自己的开发板大概1600块钱,开发板上集成了4个sensor,这样的话我们可以直接用他们这一套来完成阵列点云的学习,但是由于时间问题,最后还是还是做个仿真浅浅的研究一下吧

刚开始的时候我发现搞这种阵列式的超声波是有人做过的,可以参考开源代码

GitHub - alextousss/3d_ultrasonic_scanner: An ultrasonic 3D scanner

这个使用的是HC-SR04设置了40个发射口和9个接收口,具体我没有复现,因为还需要自己设计电路啥的,太复杂了,不过确实也成功的扫描到的点云。

都说超生波定位会根据两个雷达进行三角定位,但其实三角定位只是对于那种点状物体,比如一根细细的管道,这确实能进行三角定位,两个传感器画出来的椭圆刚好会和其中一个传感器画的圆相交,交点就是障碍物的 x y 坐标,但是试想一下如果面前的是一个3D的立方体,我们如何能只用一个 xy 坐标去表示这个物体呢,所以又有一种概念叫三边测量,我一直会有点分不清这两个概念,也不知道我理解的对不对。

下面就说一下仿真是如何进行的吧!

这里我默认大家是学过ros8讲的,里边会有搭载好的传感器模型,而我只是将其中的激光雷达传感器换成了超声波(距离)传感器,然后在gazebo加载出来,这样就能得到简单的距离信息了,我们可以设置水平和垂直视场角,但是这个传感器只会返回探测到的最近的距离

然而我所需要的是一个搭载了很多超声波的东西,比如

 

假设我这个是一个5*5的阵列,使用这个阵列去扫描物体仍然不会有平面,这是为什么呢?

因为25个距离传感器只会反馈给我25个点,那么人家的超声波阵列为什么就可以有很多个点?

我分析了一下,是因为超声波阵列可以通过相位延迟的方法,通过不同的发射头,可获取障碍物表面不同的点位信息,这样即使我的超声波阵列不动也可以获得很多的信息,跟我们设计的仿真还是有本质区别的,所以我一直在思考我这个东西获取也不能算是超声波模拟,因为他们没有发射和接收这个概念,每个传感器都是独立的,提供各自获取到的距离信息,而我只是将他们的距离信息与传感器设计安装的位置结合起来,就可以将这个距离信息换算成 xyz 的信息了

下面说一下我面临的问题

首先按照正常的超声波雷达来说,会探测到地面信息,返回一个固定值,这些都好处理

但是我的传感器探测到的距离如何换算到我的 xyz坐标,这是我面临的问题,因为我会不断的移动我的小车,去获取更多的点位信息,而此时探测到的距离信息并不能直接加到我的x轴上(假设我设置x轴正方向为我的前进方向),但是我又不知道探测到的障碍物距离信息与我的x轴夹角,这是很麻烦的!

因为我预计是使用SFM算法来完成对物体的扫描,所以当前坐标系下我需要得到一个准确的数据,这样换算到世界坐标系下才能比较直观,为了满足这个要求,我只能是把视场角都设置为0,这样传感器就只能扫到垂直角度的物体了,得到的距离信息直接加到X上也是正确的,只是我需要通过小车的不断扫描才能得到障碍物的三维表示

小车定位部分的数据也是通过自身的一个插件得到的,所以很好获取,只需要将实时坐标换算到第一帧的世界坐标下,基本上就完成了这部分工作,结果如图

为了确定角度我们只能探测传感器正前方物体点位信息,但其实我们也可以去设计探测的角度,增加高度上的信息,这个角度我们是确定的,将其探测的距离可以计算在XYZ上的分量,我简单试了一下调高角度和调低角度,就获得了更高的量程范围,如下:

其实我们完全是可以做成那种万花筒形状的,每个射线都想外扩散,这样的话,范围肯定很好,但是计算XYZ坐标那块可能就要复杂一点点,但是由于角度是自己设置的,还是可以计算出来的。

代码开源:暂时先不放了,还没整理好!

  • 14
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值