MCPcopy Create free account
hub / github.com/HaisenbergPeng/ROLL / gpsHandler

Method gpsHandler

src/mapOptmization.cpp:900–952  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

898 }
899
900 void gpsHandler(const sensor_msgs::NavSatFixConstPtr& gpsMsg)
901 {
902 if (gpsMsg->status.status != 0 || isnan(gpsMsg->latitude) || isnan(gpsMsg->longitude) || isnan(gpsMsg->altitude))
903 {
904 if(debugMode) cout<<"Bad message, status: "<<gpsMsg->status.status<<endl;
905 return;
906 }
907 // string gpsFrame = "/gps";
908 // tf::TransformListener listener;
909 // tf::StampedTransform transformStamped_lidar_to_gps;
910 // try
911 // {
912 // // ERROR] [1639030193.661625830, 1521156822.162099906]: "lidar_link" passed to lookupTransform argument target_frame does not exist
913 // listener.waitForTransform(lidarFrame, mapFrame, gpsMsg->header.stamp, ros::Duration(0.1));
914 // listener.lookupTransform(lidarFrame, mapFrame, gpsMsg->header.stamp, transformStamped_lidar_to_gps);
915 // }
916 // catch (tf::TransformException &ex)
917 // {
918 // ROS_ERROR("%s",ex.what());
919 // return;
920 // }
921
922 float x,y,z;
923 x = sin(deg2rad(gpsMsg->latitude - lati0))*rns;
924 y = sin(deg2rad(gpsMsg->longitude - longi0))*rew*cos(deg2rad(lati0));
925 z = alti0 - gpsMsg->altitude;
926
927 Eigen::Affine3f trans_gps_to_gpsM = pcl::getTransformation(x,y,z,0,0,0);
928 Eigen::Affine3f trans_imu_to_map = trans_gps_to_gpsM;
929 // Eigen::Affine3f trans_imu_to_map = affine_gps_to_body*trans_gps_to_gpsM*affine_gps_to_body.inverse()*affine_imu_to_body;
930 // cout<<"after conversion x y z: "<<trans_imu_to_map(0,3)<<" "<<trans_imu_to_map(1,3)<<" "<<trans_imu_to_map(2,3)<<endl;
931 nav_msgs::Odometry odomGPS;
932 // notice PoseWithCovariance order: # (x, y, z, rotation about X axis, rotation about Y axis, rotation about Z axis; float64[36] covariance
933 // different from GTSAM pose covariance order
934
935 odomGPS.pose.covariance[0] = gpsMsg->position_covariance[0];
936 odomGPS.pose.covariance[7] = gpsMsg->position_covariance[4];
937 odomGPS.pose.covariance[14] = gpsMsg->position_covariance[8];
938 odomGPS.pose.pose.position.x = trans_imu_to_map(0,3);
939 odomGPS.pose.pose.position.y = trans_imu_to_map(1,3);
940 odomGPS.pose.pose.position.z = trans_imu_to_map(2,3);
941 odomGPS.pose.pose.orientation.x = 0;
942 odomGPS.pose.pose.orientation.y = 0;
943 odomGPS.pose.pose.orientation.z = 0;
944 odomGPS.pose.pose.orientation.w = 1.0;
945 odomGPS.header.stamp = gpsMsg->header.stamp;
946 odomGPS.header.frame_id = "/map";
947 gpsQueue.push_back(odomGPS);
948 gpsTrajPub.publish(odomGPS);
949
950 gps_file<<odomGPS.header.stamp.toSec()<<" "<<odomGPS.pose.pose.position.x<<" "<<odomGPS.pose.pose.position.y<<" "<<odomGPS.pose.pose.position.z<<
951 " "<<odomGPS.pose.covariance[0]<<" "<<odomGPS.pose.covariance[7]<<" "<<odomGPS.pose.covariance[14]<<"\n";
952 }
953
954
955 void gtHandler(const nav_msgs::Odometry::ConstPtr& gtMsg)

Callers

nothing calls this directly

Calls 1

deg2radFunction · 0.85

Tested by

no test coverage detected