daohu527 / dig-into-apollo

Apollo notes (Apollo学习笔记) - Apollo learning notes for beginners.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

有关车道线检测的问题

markofan opened this issue · comments

您好,非常感谢您之前的回复。
目前我在看车道线检测这一块,用的网络是DarkSCNN,我不太理解process2D这个函数对车道线做了什么处理?您对这一块有研究吗,谢谢!

commented

目前我正在看camera模块,可能需要到7月左右,期间我会看下这个问题,也欢迎你看完之后讨论

好的,非常感谢,后面还有 camera obstacle 这一步真的看得我云里雾里。

commented

简单来说Process2D和Process3D是提取模型感知到的车道线结果,并且转换到世界坐标

Process2D

从(感知结果)图像中得到2D的车道线的点,转换到相机坐标

  1. lane_map 中是深度学习模型检测到的车道线信息
  2. value的值定义如下
std::map<base::LaneLinePositionType, int> spatialLUTind = {
    {base::LaneLinePositionType::UNKNOWN, 0},
    {base::LaneLinePositionType::FOURTH_LEFT, 1},
    {base::LaneLinePositionType::THIRD_LEFT, 2},
    {base::LaneLinePositionType::ADJACENT_LEFT, 3},
    {base::LaneLinePositionType::EGO_LEFT, 4},
    {base::LaneLinePositionType::EGO_CENTER, 5},
    {base::LaneLinePositionType::EGO_RIGHT, 6},
    {base::LaneLinePositionType::ADJACENT_RIGHT, 7},
    {base::LaneLinePositionType::THIRD_RIGHT, 8},
    {base::LaneLinePositionType::FOURTH_RIGHT, 9},
    {base::LaneLinePositionType::OTHER, 10},
    {base::LaneLinePositionType::CURB_LEFT, 11},
    {base::LaneLinePositionType::CURB_RIGHT, 12}};
  1. xy_points[value] 则对应每种类型车道中包含的点的个数,比如value=4,则表示左边车道线中采样的点的集合
  2. 进行多项式采样 RansacFitting
  3. 处理特殊情况,比如左边车道的点小于最小采样的点等
  4. 保存采样点

Process3D

把2D相机坐标转换到3D世界坐标

简单来说Process2D和Process3D是提取模型感知到的车道线结果,并且转换到世界坐标

Process2D

从(感知结果)图像中得到2D的车道线的点,转换到相机坐标

  1. lane_map 中是深度学习模型检测到的车道线信息
  2. value的值定义如下
std::map<base::LaneLinePositionType, int> spatialLUTind = {
    {base::LaneLinePositionType::UNKNOWN, 0},
    {base::LaneLinePositionType::FOURTH_LEFT, 1},
    {base::LaneLinePositionType::THIRD_LEFT, 2},
    {base::LaneLinePositionType::ADJACENT_LEFT, 3},
    {base::LaneLinePositionType::EGO_LEFT, 4},
    {base::LaneLinePositionType::EGO_CENTER, 5},
    {base::LaneLinePositionType::EGO_RIGHT, 6},
    {base::LaneLinePositionType::ADJACENT_RIGHT, 7},
    {base::LaneLinePositionType::THIRD_RIGHT, 8},
    {base::LaneLinePositionType::FOURTH_RIGHT, 9},
    {base::LaneLinePositionType::OTHER, 10},
    {base::LaneLinePositionType::CURB_LEFT, 11},
    {base::LaneLinePositionType::CURB_RIGHT, 12}};
  1. xy_points[value] 则对应每种类型车道中包含的点的个数,比如value=4,则表示左边车道线中采样的点的集合
  2. 进行多项式采样 RansacFitting
  3. 处理特殊情况,比如左边车道的点小于最小采样的点等
  4. 保存采样点

Process3D

把2D相机坐标转换到3D世界坐标

谢谢!Darkscnn 的process2D这一部分我已经看懂啦,darkscnn输出的size和输入的size一样大,输出的是一个13维的图像,每一个channel对应的就是您发的那个type,然后将其整合为一张图上,process2D就是左车道选取靠右的采样点,右车道选取靠左的采样点。再拟合
不知道您有没有看denseline的process2D,感觉有点麻烦。Denseline的输出是一个9个channel然后输出尺寸是原来的1/8,有点像yolo的输出?等您看了denseline这部分希望能和您再请教一下。谢谢!

我还想问一下,lane这部分的输出是会给谁?我看它的output_channel 是 /perception/lanes,但是我好像没有看到哪个component的输入是/perception/lanes?而且obstacles中也有一个步骤进行lane detection,感觉这个就是使用DarkSCNN进行车道线的检测,所以这个lane_component目前是还没有使用么?

commented

目前车道线部分发布的topic已经废弃掉了,采用的方式是部分代码在obstacles detection使用的方式。