SLAM坐标系全解析:从像素到世界的实战避坑手册
当你第一次打开ORB-SLAM的代码,看到满屏的world2camera、camera2normalized函数调用时,是否感觉像在解译外星密码?我至今记得自己初学SLAM时,因为把相机坐标系的Z轴方向搞反,导致整个点云地图倒挂在空中的尴尬场景。坐标系就像SLAM领域的"交通规则"——不理解它,再精妙的算法也会让你"撞车"。
1. 为什么SLAM需要四层坐标系?
想象你正在用手机拍摄广场上的雕塑。世界坐标系是广场中央的经纬度标志(X轴朝东,Y轴朝北,Z轴朝天),相机坐标系是手机镜头当前的视角(原点在镜头中心,Z轴指向拍摄方向),归一化坐标系是去掉距离因素后的纯方向坐标(就像用激光笔照射雕塑的光点位置),而像素坐标系则是最终照片上某个像素的行列号。这四层抽象就像从上帝视角逐步聚焦到照片细节的观察过程。
1.1 世界坐标系:SLAM的绝对参考系
世界坐标系是SLAM系统的"锚点",通常选择初始时刻相机位置作为原点。在自动驾驶中,可能会将车辆初始位置的地面点设为原点,Z轴垂直于地面向上。关键特性:
- 右手定则:伸出右手,拇指为X,食指为Y,中指Z轴方向
- 常见误区:在ROS中默认使用Z轴向上,而有些仿真器采用Y轴向上
- 代码验证:
// 检查坐标系朝向 Eigen::Vector3d x_axis(1,0,0); Eigen::Vector3d y_axis(0,1,0); Eigen::Vector3d z_axis = x_axis.cross(y_axis); std::cout << "Z轴方向应为(0,0,1): " << z_axis.transpose() << std


547

被折叠的 条评论
为什么被折叠?



