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坐标系的一个示例