# routing模块分析 ## 功能: 基于请求,输出两点之间导航信息。 ## 输入: * 用户的起始和终止位置。/apollo/routing_request[pb_msgs/RoutingRequest]。 * HD map。 * /apollo/monitor[pb_msgs/MonitorMessage]。 ## 输出: * 请求的响应:/apollo/routing_response[pb_msgs/RoutingResponse],包含了最终的路由信息。 * /apollo/monitor[pb_msgs/MonitorMessage]。 ## 节点I/O: ![routing data flow](images/routing_node_arch.bmp) ## routing源码: ### routing.cc和routing.h * Name()函数:返回节点名字。 * Routing():构造函数,初始化monitor_。 * Init():节点初始化函数。 * 获取路由地图文件routing_map_file。 * 创建导航器navigator_ptr_。 * 读取导航配置文件:modules/routing/conf/routing.pb.txt到routing_conf_。 * 根据Adapter配置文件:modules/routing/conf/adapter.conf,创建nodehandle和响应topics。 * 设置路由请求话题的回调函数OnRouting_Request。这里为啥不直接使用rosservice?//TODO。 * OnRouting_Request():处理请求。 * 输入路由请求。 * 执行SearchRoute()函数,根据routing_request,寻找路由,并设置routing_response。 * 发布routing_response。 ### navigation.cc和navigation.h: * SearchRoute()函数: * 显示请求命令的信息。 * 检查导航器是否ready。构造函数时打开。 * 通过初始化函数,将请求中的点转化为graph中的格式,并存储在way_nodes和way_s。 * 通过a star算法由way_nodes和way_s计算出路由点result_nodes。 * 将路由点result_nodes合并到response结构。 * SearchRouteByStrategy()函数: 主要是利用A star算法寻找一个全局路径。 * GetWayNodes()函数: 将request转化为拓扑图graph_中的点。