Apollo环境下的调试

Apollo环境下的调试

在安装完Apollo的环境之后如何使用Apollo系统进行调试运行是了解该系统的基础,网上以及官方说明文档也有,主要是下载Apollo提供的数据包,看看数据效果,本文主要是针对代码调试自己需要了解的模块,这里主要以规划控制模块为例,其他模块与之类似。本文主要对规划中的全局路径规划(Routing)模块、决策规划(Planning)模块的运行过程进行说明,并介绍了如何在planning中添加障碍物,以及planning中对障碍物的决策进行说明。

1.启动Apollo的环境

调试Apollo的环境需要先启动Apollo的运行环境,对Apollo安装有不懂的可以参考Apollo无人驾驶平台的离线搭建与使用。启动Apollo环境过程如下:

// 切换到docker目录下
~$ cd apollo-3.0.0/docker/scripts/
// start(可能需要联网,然后将--local去掉)
~$ ./dev_start.sh --local
// 进入
~$ ./dev_into.sh
//run system
~$ ./scripts/bootstrap.sh start

2.选择车辆和地图的配置参数

在浏览器中打开 http://localhost:8888 进入界面,车辆型号选择 MkzExample,Apollo给了三个区域的高精度地图,地图可以任意选择一个,这里选择 Sunnyvale Loop,并在Tasks里面选择 simcontrol,即可进入仿真模拟控制,如下图所示:
车辆和地图的配置

3.启动模块进程

在选择好配置参数启动仿真模拟后,在ModuleControl中选择你需要调试的模块如下图所示:
模块进程启动
由于这是模拟环境下启动的,没有雷达摄像头等硬件设备,因此很难直接在这个模拟平台上调试感知的参数,当然如果有摄像头激光雷达的数据包也可以使用感知模块。感知与预测模块得到的障碍物数据是给planning中使用的,当然如果需要测试planning中对障碍物的决策情况,还是可以手动添加的障碍物,会在后续文档进行介绍。因此,这里就很多情景中,无人车的轨迹跟随的场景进行模拟,这里启动routing(全局规划),planning(决策规划),control(控制模块的进程),启动完成后,可以进入routing Editing发送请求,如下图,第一张图表示Apollo给出的一张地图,其地图的详细数据存储在base_map.xml中,设置请求即在如下地图中设置起点-途经点-终点,如下第二张图所示:
地图设置请求可以在整张地图上,拖动点击鼠标可以在地图上任意选择两个点,然后选择send routing request可以发送请求,routing模块就会在地图中搜索出可行的路径,planning模块将指导车进行决策和局部规划,进而指导车进行运动,其效果如下:
规划图中可了解到,红线就是routing规划的,蓝色的亮线为planning规划的。

4. 手动添加障碍物

在Apollo系统的代码中因为没有感知和预测的数据,所以除了高精度地图中的一些标志,是没有其他车辆和障碍物的约束,要想了解在planning模块中对障碍物的决策过程,可以在程序中添加障碍物,planning中将预测得到的结果添加到frame中得到障碍物的轨迹,因此可以按照预测的结果直接添加到frame函数中,具体过程如下:

在这个目录下按照这个文件格式添加障碍物

"modules/planning/common/testdata/sample_prediction.pb.txt"

其数据格式如下:

header {
  timestamp_sec: 1487029724.22
  module_name: "prediction"
  sequence_num: 9338
}
prediction_obstacle {
  perception_obstacle {
    id: 2161
    position {
      x: 585868.39
      y: 4139982.16
      z: 0
    }
    theta: 0.0249947936189
    velocity {
      x: 0
      y: 0
      z: 0
    }
    length: 0.357469637533
    width: 1.513933358
    height: 0.514804840088
	
	polygon_point {
      x: 97.2893624333
      y: 347.796489884
      z: -31.6976950117
    }
    polygon_point {
      x: 97.2902582356
      y: 347.923750521
      z: -31.6948381206
    }
    polygon_point {
      x: 97.3307050201
      y: 348.052103216
      z: -31.6921948431
    }
    polygon_point {
      x: 97.5875120205
      y: 348.394845337
      z: -31.6860325399
    }
    polygon_point {
      x: 97.6613368321
      y: 346.921045429
      z: -31.7196251173
    }
    polygon_point {
      x: 97.33956867
      y: 346.945560842
      z: -31.7171360436
    }
    polygon_point {
      x: 97.3009911378
      y: 347.136420518
      z: -31.7126110052
    }
    
    tracking_time: 0
    type: UNKNOWN
    timestamp: 0
  }
}

Header是数据头包括时间戳、标签名、序列号等,prediction_obstacle是具体的数据,包括障碍物的id、位置(该位置可以设置到地图中,是全局坐标)、航向角、速度,以及障碍物的尺寸(长宽高),polygon_point用来描述障碍物的的形状,这里采用多边形来进行描述,type表示障碍物的类型,与感知的标签有关,当然如果是unknown,planning会根据尺寸和为位置进行判断,考虑前车或者其他的交通进行决策,具体过程见planningtasks中,这里没有加障碍物预测的轨迹,如有需要可自行添加。
然后在frame.cc中在 **Frame::CreateReferenceLineInfo()**函数中这行
bool has_valid_reference_line = false ;前添加如下代码:

//添加一个静态的障碍物
  PredictionObstacles prediction_obstacle;
  common::util::GetProtoFromFile(
        "modules/planning/common/testdata/sample_prediction.pb.txt",
        &prediction_obstacle);
    auto obstacles = Obstacle::CreateObstacles(prediction_obstacle);
  //AddObstacle(*obstacles1);
  for (auto& obstacle : obstacles) {
      AddObstacle(*obstacle);
    } 

这里在车前设置一个障碍物,车认为是静止的前车,然后进行决策,采取stop,其效果如下所示:
障碍物决策停止

  • 8
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值