@@ -32,6 +32,10 @@ Output Conversions::rosToEigen(const Input& msg)
3232 {
3333 return RosToEigen::odomConvert (msg);
3434 }
35+ else if constexpr (std::is_same_v<Input, gps_msgs::msg::GPSFix>)
36+ {
37+ return RosToEigen::dgpsConvert (msg);
38+ }
3539}
3640
3741template <typename Output, typename Input>
@@ -92,6 +96,14 @@ Eigen::Vector3d Conversions::RosToEigen::gpsConvert(const sensor_msgs::msg::NavS
9296 return Eigen::Vector3d (msg.latitude , msg.longitude , msg.altitude );
9397}
9498
99+ std::pair<Eigen::Vector3d, Eigen::Vector2d> Conversions::RosToEigen::dgpsConvert (const gps_msgs::msg::GPSFix& msg)
100+ {
101+ Eigen::Vector3d gps (msg.latitude , msg.longitude , msg.altitude );
102+ Eigen::Vector2d heading (msg.track , msg.err_track );
103+
104+ return std::make_pair (gps, heading);
105+ }
106+
95107Eigen::Isometry3d Conversions::RosToEigen::odomConvert (const nav_msgs::msg::Odometry& msg)
96108{
97109 Eigen::Quaterniond quat (msg.pose .pose .orientation .w , msg.pose .pose .orientation .x , msg.pose .pose .orientation .y , msg.pose .pose .orientation .z );
@@ -352,6 +364,7 @@ template Eigen::Vector3d Conversions::rosToEigen<Eigen::Vector3d>(const sensor_m
352364template Eigen::Vector4d Conversions::rosToEigen<Eigen::Vector4d>(const geometry_msgs::msg::Quaternion& msg);
353365template Eigen::Isometry3d Conversions::rosToEigen<Eigen::Isometry3d>(const geometry_msgs::msg::PoseStamped& msg);
354366template Eigen::Isometry3d Conversions::rosToEigen<Eigen::Isometry3d>(const nav_msgs::msg::Odometry& msg);
367+ template std::pair<Eigen::Vector3d, Eigen::Vector2d> Conversions::rosToEigen<std::pair<Eigen::Vector3d, Eigen::Vector2d>>(const gps_msgs::msg::GPSFix& msg);
355368
356369template geometry_msgs::msg::Vector3 Conversions::eigenToRos<geometry_msgs::msg::Vector3>(const Eigen::Vector3d& vec);
357370template geometry_msgs::msg::Quaternion Conversions::eigenToRos<geometry_msgs::msg::Quaternion>(const Eigen::Vector4d& vec);
0 commit comments