MATLAB终于可以完成相机与激光雷达的标定啦!!

本文介绍了如何使用MATLAB2020b在Ubuntu16.04+ROS(kinetic)+velodyne(16线)+basler+棋盘格环境下完成相机与激光雷达的标定过程。详细步骤包括数据录制、相机内参标定、数据分割以及使用MATLAB工具进行标定。此外,还展示了如何将点云投影到二维图像上,并对投影结果进行了初步分析。
摘要由CSDN通过智能技术生成

一、相机与激光雷达之间的标定

1.MATLAB2020b

(1)获取方式:百度网盘链接提取码:zadk
(2)安装教程:详细说明
2.详细步骤

官方教程:仔细瞅瞅
(1)搭建实验平台,实验操作系统Ubuntu16.04+ROS(kinetic)+velodyne(16线)+basler+棋盘格(10*7 41mm)。(ps:标定板没有白边,没有白边!)

在这里插入图片描述
(2)Ubuntu下打开激光雷达和相机,教程见前文,并录制数据bag。(ps:一定要激光雷达和相机的频率的一致!一定一定!)

(3)拍摄单目相机棋盘格图像,用MATLAB工具箱标定,获取相机的内参。(ps:传统的相机标定方法,标定板要留白边!)

(4)将数据bag中的激光雷达数据和相机数据分割出来。

代码如下:
bag→.pcd

#include <pcl_ros/point_cloud.h>
#include <ros/ros.h>
#include <sensor_msgs/PointCloud2.h>
#include <string>
#include <iostream>
using namespace std;
int num = 1;

void lidar_callback(const sensor_msgs::PointCloud2ConstPtr &in_cloud_msg) {
   

  // 1.Msg to pointcloud
  pcl::PointCloud<pcl::PointXYZI> rawCloudIn;
  pcl::fromROSMsg(*in_cloud_msg, rawCloudIn);
  string pcdpath = "";//保存.pcd文件路径
  std::string str=std::to_string(num);
  //pcdpath += std::to_string(count++);
  if(str.size()==1)
  {
   
      pcdpath+="000"+str+".pcd";
  }
  else if(str.size()==2)
  {
   
      pcdpath+="00"+str+".pcd";
  }
  else if(str.size()==3)
  {
   
      pcdpath+="0"+str+".pcd";
  }
  else
  {
   
      pcdpath+=str+".pcd";
  }
  num++;
  pcl::io::savePCDFileASCII(pcdpath, rawCloudIn);
}

int main(int argc, char **argv) {
   

  ros::init(argc, argv, "GroundPlaneFit");
  ros::NodeHandle nh;
  ros::Subscriber lidar_sub = nh.subscribe("/velodyne_points", 1, lidar_callback); //订阅激光雷达点云
  ros::spin();
  return 0;
}

bag→.jpg

import roslib
import rosbag
import rospy
import cv2
from sensor_msgs.msg import Image
from cv_bridge 
  • 7
    点赞
  • 114
    收藏
    觉得还不错? 一键收藏
  • 23
    评论
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值