slam下常用的坐标变换Tcw与Twc

参考
世界坐标系下标为w,相机坐标系为c(有些资料以机器人坐标系r)
在SLAM十四讲中, R 12 R_{12} R12表示“坐标系2的向量变换到坐标系1中”,t_12表示“坐标系1原点指向坐标系2原点的向量,在坐标系1下取的坐标”,记为“从1到2的向量”
向量a在12两个坐标系下的坐标为a1 ,a2,有
a 1 = R 12 ∗ a 2 + t 12 a_1=R_{12} * a_2 + t_{12} a1=R12a2+t12

a 1 = T 12 ∗ a 2 a_1 = T_{12} * a_2 a1=T12a2
T 12 T_{12} T12表示把2坐标系下的点变换到1坐标系中

R 12 、 T 12 、 t 12 R_{12}、T_{12}、t_{12} R12T12t12都表示向量之间的变换,只是当用于机器人或相机时,可以直接用其来表示相机位姿

如果1为世界坐标系,2为相机坐标系,有
a w = T w c ∗ a c a_w = T_{wc} * a_c aw=Twcac

T w c T_{wc} Twc中的 t w c t_{wc} twc实际上就是相机在世界坐标系W下的位置, R w c R_{wc} Rwc直接表示相机在世界坐标系W下的姿态
因此,虽然实践当中使用 T c w T_{cw} Tcw 来表示相机位姿更加常见,由于 T w c T_{wc} Twc来表示相机位姿更为直观,在可视化程序里,轨迹存储文件一般存储 T w c T_{wc} Twc

例如 相机原点 坐标 O c O_c Oc 为零向量
O w = R w c ∗ O c + t w c = t w c O_w = R_{wc} * O_c + t_{wc} = t_{wc} Ow=RwcOc+twc=twc
可以看出 T w c T_{wc} Twc的平移变量 t w c t_{wc} twc直接就是相机在世界坐标系下的位置
而其 R w c R_{wc} Rwc就是相机的旋转角度

坐标系之间的变换
SLAM十四讲中的3.6.2
slambook2/ch3/examples/coordinateTransform.cpp代码中用的是 T c w T_{cw} Tcw,如果要画轨迹的画,应该用 T w c T_{wc} Twc

例如slam仿真环境的AirSim,其API记录的是车辆位姿T_world_car与相机位姿T_world_camera,要求相机在车辆坐标系下的坐标

  Vector3d O_cam_zero(0, 0, 0);
  auto t_rel = T_world_car.inverse() * T_world_camera*O_cam_zero;

计算结果表明坐标t_rel基本不变,由于车俩运动与帧率原因,x值会有误差(虽然误差可能有点大)
请添加图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值