关于坐标系map、odom、base_link

个人理解,欢迎指正

map:地图坐标系,为固定坐标系,理论上应与odom坐标系重合;
odom:里程计坐标系;
base_link:机器人本体坐标系;
laser_base:激光传感器的坐标系,与base_link之间的tf恒定。
机器人开始运动时mapodom重合,但随着时间推移两者的tf不为0。
tf树中只有一种遍历关系--从父节点到子节点,如下图所示。

TF树

SLAM中的定位就是为了计算tf: map->odom
Karto SLAM中的代码,根据上述的遍历关系,是先计算base_link->odom,再计算odom->map再用.inverse()计算map->odom。如以下代码。

// Compute the map->odom transform
  tf::Stamped<tf::Pose> odom_to_map;
      
  m_.lock();
  tf::Stamped<tf::Pose> odom_pose = odom_pose_;//base_link->odom
  m_.unlock();

  tf_.transformPose(odom_frame_, tf::Stamped<tf::Pose>(tf::Transform(tf::createQuaternionFromRPY(0, 0, corrected_pose.GetHeading()), 
                    tf::Vector3(corrected_pose.GetX(), corrected_pose.GetY(), 0.0)).inverse(), odom_pose.stamp_, base_frame_), odom_to_map);

  map_to_odom_mutex_.lock();
  map_to_odom_ = tf::Transform(tf::Quaternion(odom_to_map.getRotation()),
                               tf::Point(odom_to_map.getOrigin()))
                              .inverse();
  map_to_odom_mutex_.unlock();

参考文献

[1]ROS里基本坐标系的理解
[2]ROS探索总结(二十二)-- 设置机器人的tf变换

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容