GPS数据处理
在sensorBridge中,处理GPS数据的函数为HandleNavSatFixMessage。
如果雷达的数据不是STATUS_NO_FIX,则就直接返回不处理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
   |  void SensorBridge::HandleNavSatFixMessage(     const std::string& sensor_id, const sensor_msgs::NavSatFix::ConstPtr& msg) {   const carto::common::Time time = FromRos(msg->header.stamp);      if (msg->status.status == sensor_msgs::NavSatStatus::STATUS_NO_FIX) {     trajectory_builder_->AddSensorData(         sensor_id,         carto::sensor::FixedFramePoseData{time, absl::optional<Rigid3d>()});     return;   }
       if (!ecef_to_local_frame_.has_value()) {     ecef_to_local_frame_ =         ComputeLocalFrameFromLatLong(msg->latitude, msg->longitude);     LOG(INFO) << "Using NavSatFix. Setting ecef_to_local_frame with lat = "               << msg->latitude << ", long = " << msg->longitude << ".";   }
       trajectory_builder_->AddSensorData(       sensor_id, carto::sensor::FixedFramePoseData{                      time, absl::optional<Rigid3d>(Rigid3d::Translation(                                ecef_to_local_frame_.value() *                                LatLongAltToEcef(msg->latitude, msg->longitude,                                                 msg->altitude)))}); }
 
  | 
 
如果是第一帧雷达数据,则计算一个ecef原点到局部坐标系的坐标变换。
在之后的GPS数据中,可以使用此坐标变换来获得GPS数据间的相对坐标变换
ecef 坐标系


这里的显示x,y, z就是ecef坐标系的一个示例