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

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

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 im
  • 7
    点赞
  • 114
    收藏
    觉得还不错? 一键收藏
  • 23
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值