Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #include "mrpt_bridge/GPS.h"
00017
00018
00019 namespace mrpt_bridge
00020 {
00021
00022
00023
00024 bool GPS::ros2mrpt(const sensor_msgs::NavSatFix &msg,
00025 CObservationGPS &obj)
00026 {
00027 mrpt::obs::gnss::Message_NMEA_GGA gga;
00028 gga.fields.altitude_meters = msg.altitude;
00029 gga.fields.latitude_degrees = msg.latitude;
00030 gga.fields.longitude_degrees = msg.longitude;
00031
00032 switch(msg.status.status)
00033 {
00034 case -1:
00035 gga.fields.fix_quality = 0;
00036 break;
00037 case 0:
00038 gga.fields.fix_quality = 1;
00039 break;
00040 case 2:
00041 gga.fields.fix_quality = 2;
00042 break;
00043 case 1:
00044 gga.fields.fix_quality = 3;
00045 break;
00046 default:
00047 gga.fields.fix_quality = 0;
00048
00049 }
00050 obj.setMsg(gga);
00051 }
00052
00053
00054
00055
00056 bool GPS::mrpt2ros(const CObservationGPS &obj,
00057 const std_msgs::Header &msg_header,
00058 sensor_msgs::NavSatFix &msg)
00059 {
00060
00061 msg.header = msg_header;
00062
00063
00064
00065 if (obj.hasMsgClass<mrpt::obs::gnss::Message_NMEA_GGA>())
00066 {
00067 const mrpt::obs::gnss::Message_NMEA_GGA &gga =
00068 obj.getMsgByClass<mrpt::obs::gnss::Message_NMEA_GGA>();
00069 msg.altitude = gga.fields.altitude_meters;
00070 msg.latitude = gga.fields.latitude_degrees;
00071 msg.longitude = gga.fields.longitude_degrees;
00072
00075 switch(gga.fields.fix_quality)
00076 {
00077 case 0:
00078 msg.status.status = -1;
00079 break;
00080 case 1:
00081 msg.status.status = 0;
00082 break;
00083 case 2:
00084 msg.status.status = 2;
00085 break;
00086 case 3:
00087 msg.status.status = 1;
00088 break;
00089 default:
00090
00091 msg.status.status = 0;
00092 }
00093
00094 msg.status.service = 1;
00095
00096 }
00099 }
00100 }
00101
00102
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130