std_msgs/Header header
std_msgs/Float32 throttle # Throttle value between [-1,1]
std_msgs/Float32 steering_angle # Steering angle value between [-1,1], where left <0, right >0
Cmd.msg
float64 dc # msg.throttle.data 油门
float64 delta # msg.steering_angle.data 转向角
geometry_msgs/Polygon.msg
geometry_msgs/Point32[] points
锥桶位置求出中心路径并进行密集化
//map消息,锥桶的颜色和位置void PurePursuitHandle::slamMapCallback(const fsd_common_msgs::Map &map){
geometry_msgs::PolygonStamped center_line;{// Find Center Line 找中心线,对于每一个红色的锥桶找一个最近的蓝色锥桶
center_line.polygon.points.clear();for(constauto&red: map.cone_red){constauto it_blue = std::min_element(map.cone_blue.begin(), map.cone_blue.end(),[&](const fsd_common_msgs::Cone &a,const fsd_common_msgs::Cone &b){constdouble da = std::hypot(red.position.x - a.position.x,
red.position.y - a.position.y);constdouble db = std::hypot(red.position.x - b.position.x,
red.position.y - b.position.y);return da < db;});
geometry_msgs::Point32 p;
p.x =static_cast<float>((red.position.x + it_blue->position.x)/2.0);
p.y =static_cast<float>((red.position.y + it_blue->position.y)/2.0);
p.z =0.0;
center_line.polygon.points.push_back(p);}}//密集路径
geometry_msgs::Polygon dense_center_line;{// Densify the center lineconstdouble precision =0.2;for(unsignedint i =1; i < center_line.polygon.points.size(); i++){constdouble dx = center_line.polygon.points[i].x - center_line.polygon.points[i -1].x;constdouble dy = center_line.polygon.points[i].y - center_line.polygon.points[i -1].y;constdouble d = std::hypot(dx, dy);constint nm_add_points = d / precision;for(unsignedint j =0; j < nm_add_points;++j){
geometry_msgs::Point32 new_p = center_line.polygon.points[i -1];
new_p.x += precision * j * dx / d;
new_p.y += precision * j * dy / d;
dense_center_line.points.push_back(new_p);}}}
center_line.polygon = dense_center_line;
center_line.header.frame_id ="map";
center_line.header.stamp = ros::Time::now();
centerLinePublisher_.publish(center_line);
pure_pursuit_.setCenterLine(dense_center_line);}