odom协方差初始化

在使用robot_pose_ekf时,常遇到接收到的odometry数据格式错误的问题。一个可能的原因为底盘或其他设备发布odometry数据的协方差矩阵默认为0矩阵。解决的方法由两种:一种为在底盘将信息封装发布前对协方差矩阵进行初始化;另一种方法为在robot_pose_ekf中添加判断,如果接收到的odometry信息的协方差矩阵没有进行初始化,则进行初始化。
做工程时采用了第二种方法。初始化位于odom_estimation_node.cpp中:
void OdomEstimationNode::odomCallback(const OdomConstPtr& odom)
{

odom_meas_ = Transform(q, Vector3(odom->pose.pose.position.x, odom->pose.pose.position.y, 0));
for (unsigned int i=0; i<6; i++)
for (unsigned int j=0; j<6; j++)
odom_covariance_(i+1, j+1) = odom->pose.covariance[6*i+j];
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_);

}

由于对于我手头情况而言odometry确定协方差矩阵为0,故判断条件设得较为简单:odom_covariance_(1,1) == 0.0。判断条件应根据实际情况设定。协方差矩阵具体值可以考虑设置为精度的二次方。

关于卡尔曼滤波中协方差矩阵的设定没能深入学习理解,感觉较为复杂。但在做工程中确保odom的协方差矩阵对角线元素不均0则robot_pose_ekf即可工作。

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
nav_msgs/Odometry是ROS (Robot Operating System) 中的一个消息类型,用于传递机器人的运动信息。Odometry(里程计)表示机器人通过跟踪车轮或其他运动传感器的旋转和位移来估计自身位置和姿态。 这个消息类型包含了机器人的位置、姿态和速度信息。具体来说,包括了机器人在世界坐标系下的位置(坐标和方向),机器人在地图坐标系下的位置(坐标和方向),机器人当前线速度和旋转速度等。 这个消息类型的主要组成部分包括: 1. Header:包含了消息的时间戳和坐标系信息。 2. Child Frame ID:表示相对于哪个坐标系计算得出的位置和姿态。 3. Pose:包含了机器人在世界坐标系下的位置和姿态。 4. Pose Covariance:包含了位置和姿态的协方差矩阵,用于描述位置和姿态的不确定性。 5. Twist:包含了机器人的线速度和旋转速度。 6. Twist Covariance:包含了线速度和旋转速度的协方差矩阵,用于描述线速度和旋转速度的不确定性。 机器人在运动过程中,通过传感器获取到的旋转和位移信息会被用于计算机器人的新位置,并更新Odometry消息中的位置和姿态。这个消息类型在导航、路径规划、SLAM(Simultaneous Localization and Mapping,同时定位与地图构建)等机器人领域非常常用,可以帮助机器人实时获取自身的运动状态,并为后续的决策和控制提供依据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值