#百人创作先锋团#特定范围搜索障碍物算法 原创

发布于 2022-12-24 18:45
浏览
0收藏

背景

如果你是做自动驾驶的工作人员,那么你一定知道自动驾驶模块主要由感知模块、高精地图模块、定位模块、路径规划模块以及控制模块组成,然而感知模块在整车当中就相当于人的眼睛一样十分重要。现在有这么一个需求:在自动驾驶雷达感知模块中,我们需要在特定探测范围内搜索障碍物。
#百人创作先锋团#特定范围搜索障碍物算法-汽车开发者社区

问题分析

我们假设站在车(驻点)的角度看待,整车的摄像头覆盖的角度为90度,那么从整车的摄像头的坐标看,整个视野就为90度,我们需要对整个视野的障碍物进行一个统计。
约定:我们假定points为待观测点,angle为观测角度,location为驻点或者站点。
思路: 先要计算驻点与待观测点的一个角度,这个我们可以通过atan2函数计算得到弧度,然后转换为角度
角度 = 180.0 / pi * 弧度
(因为angle是角度),需要考虑一个跨象限问题,因此计算值需要加360°,最后就是排序然后进行滑动窗口搜索。

代码设计

1、遍历是否和驻点重合,不重合即可计算两个点的弧度,否则认为是驻点,并记录个数。

    for i in points: # 
        if i != location:
            r.append(atan2(i[1] - location[1], i[0] - location[0]))
        else:  # 驻点
            samePoint = samePoint + 1
    new_l = []

2、将计算的弧度转为角度,并对所有数据加上360°。

    for i in r:  # 2、对弧度转为角度,同时防止跨象限问题加上360
        tmp = 180.0 / pi * i
        new_l.append(tmp)
        new_l.append(tmp + 360.0)

3、对所有角度进行排序,这个可以直接调用list对应的函数

new_l.sort()

4、滑动搜索。窗口new_l[right] - new_l[left]值小于指定的angle角度,计数+1

    while right < len(new_l):     # 滑窗 搜索
        while right < len(new_l) and new_l[right] - new_l[left] <= angle:
            right = right + 1 # 窗口new_l[right] - new_l[left]值小于指定的angle角度,计数+1
        ans = max(ans, right - left)
        left = left + 1

#百人创作先锋团#特定范围搜索障碍物算法-汽车开发者社区

总结

其实整个算法是一个算法比赛的一个题目,整个背景是十分适合在自动驾驶领域使用,出题方也是站在自动驾驶的角度去看待这个问题。我们做自动驾驶方向,我们站在这个角度去看待这个问题的话,其实就是一个搜索问题,当然这里是使用了Python语言实现,也可以考虑使用C++。

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
分类
收藏
回复
举报
回复
相关推荐