关于采用GPS数据解析后发布到robot_pose_ekf时报错的问题Covariance specified for measurement on topic gps is zero

2023-05-16

**

组合惯导与里程计融合后,发布信息到robot_pose_ekf,报错显示Covariance specified for measurement on topic gps is zero的问题

**
1、解析原始GPS数据,一般提取经纬度、状态,按照sensor_msgs::NavSatFix 格式进行发布
2、robot_pose_ekf里面需要的gps数据格式与此不同,需要进行 GPS坐标与UTM坐标的转换

2.1 消息

gps_common定义了两个通用消息,供GPS驱动程序输出:gps_common/GPSFix和gps_common/GPSStatus。

在大多数情况下,这些消息应同时发布,并带有相同的时间戳。
2.2 utm_odometry_node节点

utm_odometry_node将经纬度坐标转换为UTM坐标。
2.3 订阅的话题

fix (sensor_msgs/NavSatFix):GPS测量和状态
2.4 发布的话题

odom (nav_msgs/Odometry):UTM编码的位置

参考原文链接:https://blog.csdn.net/learning_tortosie/article/details/103349907
https://blog.csdn.net/learning_tortosie/article/details/103349907
Github: http://wiki.ros.org/gps_common
3、转换后,robot_pose_ekf订阅gps话题,但是报错Covariance specified for measurement on topic gps is zero,是因为在一开始发布gps消息时候协方差矩阵对角线为0,因此,

方法1:在gps原始数据发布时,加入协方差矩阵

  sensor_msgs::NavSatFix gps_data;
                gps_data.header.stamp = ros::Time::now();
                gps_data.header.frame_id = "gps_link";

                gps_data.status.status= stoi(Status);
                ROS_INFO("gps_data.status.status:%d",gps_data.status.status);
                gps_data.latitude=stof(Lattitude);
                gps_data.longitude=stof(Longitude);
                gps_data.altitude=stof(Altitude);
                gps_data.position_covariance={
                  0.002,0.0,0.0,
                  0.0,0.002,0.0,
                  0.0,0.0,0.002};

方法2 参考
https://blog.csdn.net/skyrim_H/article/details/106636862
将`在这里插入代码片

void OdomEstimationNode::odomCallback(const OdomConstPtr& odom)
{


  *if (odom_covariance_(1,1) == 0.0){
        SymmetricMatrix measNoiseOdom_Cov(6);  measNoiseOdom_Cov = 0;
        measNoiseOdom_Cov(1,1) = pow(0.01221,2);  // = 0.01221 meters / sec
        measNoiseOdom_Cov(2,2) = pow(0.01221,2);  // = 0.01221 meters / sec
        measNoiseOdom_Cov(3,3) = pow(0.01221,2);  // = 0.01221 meters / sec
        measNoiseOdom_Cov(4,4) = pow(0.007175,2);  // = 0.41 degrees / sec
        measNoiseOdom_Cov(5,5) = pow(0.007175,2);  // = 0.41 degrees / sec
        measNoiseOdom_Cov(6,6) = pow(0.007175,2);  // = 0.41 degrees / sec
        odom_covariance_ = measNoiseOdom_Cov;
     }*



  my_filter_.addMeasurement(StampedTransform(odom_meas_.inverse(), odom_stamp_, base_footprint_frame_, "wheelodom"), odom_covariance_);
  
  ```````````````````````
};
`
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于采用GPS数据解析后发布到robot_pose_ekf时报错的问题Covariance specified for measurement on topic gps is zero 的相关文章

随机推荐