Skip to content

雷达倒立,相机正立时遇到的标定错误问题 #70

@ccpdead

Description

@ccpdead

在标定是发现,如果雷达与相机朝向一样的情况下,标定是很准确的,但是如果雷达倒立,相机正立(机器人头部的安装方式),会出现标定结果有很大错误的问题

我的雷达相机安装方式

Image

Image

对程序解读后,发现程序中在include/common_lib.h函数中有一段是对相机与雷达位姿的定义,这里我增加了对倒装雷达的变换关系。

if (axis_mode == "lidar") {
for (const auto& p : *pc) {
pcl::PointXYZ pt;
pt.x = -p.y; // LiDAR Y -> Cam -X
pt.y = -p.z; // LiDAR Z -> Cam -Y
pt.z = p.x; // LiDAR X -> Cam Z
// 正装雷达的变换(LiDAR: X前Y左Z上 -> Camera: X右Y下Z前)
// pt.x = -p.y; // LiDAR Y(左)-> Cam -X(左)
// pt.y = -p.z; // LiDAR Z(上)-> Cam -Y(上)
// pt.z = p.x; // LiDAR X(前)-> Cam Z(前)

  // 倒装雷达的变换(绕X轴旋转180°,Y和Z轴反向)
  pt.x = p.y;    // LiDAR Y(右)-> Cam X(右)
  pt.y = p.z;    // LiDAR Z(下)-> Cam Y(下)
  pt.z = p.x;    // LiDAR X(前)-> Cam Z(前)
  work_pc->push_back(pt);
}

if (axis_mode == "lidar") {
for (auto& point : v->points) {
// 正装雷达的逆变换
// float x_new = point.z; // Cam Z -> LiDAR X
// float y_new = -point.x; // Cam -X -> LiDAR Y
// float z_new = -point.y; // Cam -Y -> LiDAR Z

  // 倒装雷达的逆变换
  float x_new = point.z;    // Cam Z -> LiDAR X
  float y_new = -point.x;   // Cam -X -> LiDAR Y
  float z_new = -point.y;   // Cam -Y -> LiDAR Z
  float y_new = point.x;    // Cam X -> LiDAR Y
  float z_new = point.y;    // Cam Y -> LiDAR Z
  point.x = x_new;
  point.y = y_new;
  point.z = z_new;

修改后标定结果很准确
标定后fastlivo2的运行结果
Image

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions