cartographer问题 imu_tracker.cc:70 Check failed: (orientation_ * gravity_vector_).z() > 0. (nan vs. 0)

本文探讨了在使用自定义imu数据运行Cartographer ROS时遇到的Checkfailed错误,焦点在于(orientation_*gravity_vector_).z()的nan值。通过定位问题,发现imu数据中存在nan,影响了姿态估计。文章提供了关键代码段和解决步骤,包括检查并修复数据质量问题。
摘要由CSDN通过智能技术生成

问题描述

使用自己采集的imu数据,跑cartographer ros 时候发生
Check failed: (orientation_ * gravity_vector_).z() > 0. (nan vs. 0)

问题原因

把错误在cartographer 的imu_tracker.cc:70行代码如下:

CHECK_GT((orientation_ * gravity_vector_).z(), 0.);
CHECK_GT((orientation_ * gravity_vector_).normalized().z(), 0.99);

此处是(orientation_ * gravity_vector_).z()的值没有大于0.,它的实际值为nan所以抛出上述错误。

问题排查与解决

于是分别打印orientation_ 和gravity_vector_看看谁的值为nan,

  if (std::isnan(orientation_.z())) {
    std::cout<<"std::isnan(rotation)"<<orientation_.z()<< std::endl;
  }
  if (std::isnan(gravity_vector_[0]) || std::isnan(gravity_vector_[1]) ||std::isnan(gravity_vector_[2])) {
    std::cout<<"std::isnan(gravity_vector_)"<< gravity_vector_[2]<<std::endl;
  }

发现orientation_.z()的值有为nan的时候,

问题解决

因此可以去确定是imu数据中有nan的存在

header: 
  seq: 4576
  stamp: 
    secs: 1624269353
    nsecs: 608993773
  frame_id: "imu_link"
orientation: 
  x: 0.0
  y: 0.0
  z: 0.0
  w: 1.0
orientation_covariance: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
angular_velocity: 
  x: 0.0
  y: 0.0
  z: 0.0
angular_velocity_covariance: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
linear_acceleration: 
  x: nan
  y: nan
  z: nan
linear_acceleration_covariance: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值