ApolloAuto / apollo

An open autonomous driving platform
Apache License 2.0
24.99k stars 9.66k forks source link

导航模式下路径规划问题 #5805

Open freeclouds opened 5 years ago

freeclouds commented 5 years ago

代码版本:apollo 3.0 问题描述: 在使用导航模式时,在dreamview里面仿真,打开相关模块,回放录制的数据包 rosbag play /apollo/data/bag/2018-09-25-20-04-55.bag --topics /apollo/perception/obstacles /apollo/localization/pose /apollo/sensor/gnss/corrected_imu /apollo/sensor/gnss/imu /apollo/sensor/gnss/odometry /apollo/prediction /apollo/canbus/chassis 当数据包已经播放完,但是planning模块、relative map模块仍有数据输出。如下图: 2018-09-26 19-13-43

当在实车测试时,如果车已经到了终点,需要人手动关闭planning等相关模块吗?如果不关闭此时control模块仍不断接收planning模块输出的数据,车无法停止。

yifeijiang commented 5 years ago

在路测中,到达终点后需要人工接管。目前相对地图的逻辑是 完成指引线后,会继续延实时车道线自动驾驶。

freeclouds commented 5 years ago

@yifeijiang 从前面的提供的信息看,如果车行驶完通过指引线生成的道路后,会继续使用感知得到的信息生成实时车道线,如果想将车在行驶完通过指引线生成的道路停车,需要人工执行停车动作。我们想让车在行驶完通过指引线生成的道路停车,从code中看到在

从planning模块中输出的/apollo/planning topic信息: decision { main_decision { stop { reason_code: STOP_REASON_DESTINATION reason: "stop by REF_END_0_Path from navigation line index 0" stop_point { x: 21.9748137816 y: 0.106479256295 } stop_heading: 0.00285595784381 change_lane_type: FORWARD } } object_decision { decision { id: "REF_END_0_Path from navigation line index 0" perception_id: -1025593075 object_decision { stop { reason_code: STOP_REASON_DESTINATION distance_s: -0.5 stop_point { x: 21.9748137816 y: 0.106479256295 z: 0.0 } stop_heading: 0.00285595784381 } } } } vehicle_signal { turn_signal: TURN_NONE } } 前面这个信息时一个停车的信号,但是这个信号不是在行驶结束发出,在行驶过程中就会通过planning 的topic输出。所以这个reason_code:STOP_REASON_DESTINATION,主要的功能是什么?主要是在dreamview上面显示停止信号?如果要实现行驶完指引线就停车,能否让control模块检测这个reason_code:STOP_REASON_DESTINATION实现停车功能? 另外在code中发现apollo中将终点虚拟成一个obstacle,如果我们车在相对地图模式行驶过程中遇到前方有人或其他障碍物,控制车停车的信息也是通过planning的topic将reason_code发出吗?在potobuf文件中 看到关于traffice rule的stop枚举其中有STOP_REASON_OBSTACLE,想请教一下apollo在相对地图这种模式中遇到障碍物control模块是从哪儿接收的停车信息? enum StopReasonCode { STOP_REASON_HEAD_VEHICLE = 1; STOP_REASON_DESTINATION = 2; STOP_REASON_PEDESTRIAN = 3; STOP_REASON_OBSTACLE = 4; STOP_REASON_PREPARKING = 5; STOP_REASON_SIGNAL = 100; // only for red signal STOP_REASON_STOP_SIGN = 101; STOP_REASON_YIELD_SIGN = 102; STOP_REASON_CLEAR_ZONE = 103; STOP_REASON_CROSSWALK = 104; STOP_REASON_CREEPER = 105; STOP_REASON_REFERENCE_END = 106; // end of the reference_line STOP_REASON_YELLOW_SIGNAL = 107; // yellow signal STOP_REASON_PULL_OVER = 108; // pull over

}

yifeijiang commented 5 years ago

目前还不支持目的地停车。如果要修改这样的逻辑: 大概可以看下 3.0下的 /planning/toolkits/deciders/destination.cc: 48行 /planning/reference_line/reference_line_provider.cc: 408行

freeclouds commented 5 years ago

@yifeijiang @mickeyouyou @all2one @mbinna 1、/home/alan/apollo/modules/map/pnc_map/route_segments.cc bool RouteSegments::StopForDestination() const { return stop_fordestination; }

void RouteSegments::SetStopForDestination(bool stop_for_destination) { stop_fordestination = stop_for_destination; } 2、/home/alan/apollo/modules/planning/common/frame.cc if (segments_iter->StopForDestination()) { is_neardestination = true; 3、/home/alan/apollo/modules/planning/tasks/traffic_decider/destination.cc if (!frame->is_near_destination()) { return Status::OK(); } 4、/home/alan/apollo/modules/planning/common/frame.h const bool is_near_destination() const { return is_neardestination; } frame->is_near_destination()这个对终点的判断是来自于routing模块中读取的终点信息进行的判断,在navigation模式中没有routing模块,通过对frame->is_near_destination()相关信息进行处理能够判断车是否到终点? code中看在导航模式下没有路由信息,在每一次规划的路径段中都会输出STOP_REASON_DESTINATION这个信息,这个信息仅仅是在dreamview中进行显示,无法根据这个stop reason做出停车的动作,我的理解对吗?