利用ros进行双目相机标定(发布双目相机话题再用cameracalibrator.py文件进行标定)

1、创建工作环境

mkdir -p opencv_test/src
cd opencv_test/src/
catkin_create_pkg stereo_camera std_msgs roscpp rospy  

 2、修改CMakeLists.txt(cmakelist里要包含到opencv和ros的包)

3、再写一个打开双目相机并把获取到的图像进行发布并保存

#include <ros/ros.h>
#include "iostream"
#include <image_transport/image_transport.h>
#include <opencv2/opencv.hpp>
#include <cv_bridge/cv_bridge.h>
#include <algorithm>
#include <fstream>
#include <iomanip>
#include <chrono>
#include "camera_info_manager/camera_info_manager.h"

int main(int argc, char** argv)
{
  ros::init(argc, argv, "image_publisher");
  ros::NodeHandle nh;
  image_transport::ImageTransport it(nh);
  image_transport::Publisher pub_L = it.advertise("camera/left/image_raw", 1);
  image_transport::Publisher pub_R = it.advertise("camera/right/image_raw", 1);
  cv::Mat imLeft, imRight, imLeftRect, imRightRect;
  // USB双目相机初始化与启动
  int width=2560;
  int height=960;
  int fps=60;

  cv::VideoCapture cap(2);
  cap.set(cv::CAP_PROP_FRAME_WIDTH,width);//分辨率
  cap.set(cv::CAP_PROP_FRAME_HEIGHT,height);
  cap.set(cv::CAP_PROP_FPS,fps);//帧率
  cap.set(cv::CAP_PROP_FOURCC,cv::VideoWriter::fourcc('Y','U','Y','2'));
  float current_pose_q[7]={0};
  char key=' ';
  cv::Mat stereo_img;
  std::cout<<"开始发布图像数据..."<<std::endl;
	std::cout<<"分辨率:"<<width*0.5<<"*"<<height<<std::endl;	 
	std::cout<<"帧率:"<<fps<<"fps"<<std::endl;	

  while(nh.ok())
  {
    cap >> stereo_img;//获取当前帧图像
    imLeft=stereo_img.colRange(0,width/2).clone();
    imRight=stereo_img.colRange(width/2,width).clone();
	  cv::cvtColor(imLeft,imLeft,cv::COLOR_BGR2GRAY);
	  cv::cvtColor(imRight,imRight,cv::COLOR_BGR2GRAY);

    sensor_msgs::ImagePtr msg_L = cv_bridge::CvImage(std_msgs::Header(), "mono8", imLeft).toImageMsg();
    sensor_msgs::ImagePtr msg_R = cv_bridge::CvImage(std_msgs::Header(), "mono8", imRight).toImageMsg();

    ros::Rate loop_rate(60);
    pub_L.publish(msg_L);
    pub_R.publish(msg_R);
    loop_rate.sleep();
    }
}

4、开始编译(已经编译就开始下一步)

catkin_make

5、开始发布(rosrun前要再一个终端roscore)

cd opencv_test/
source ./devel/setup.bash 
rosrun stereo_camera my_publisher_usb_960 

再开一个终端

roscore

再开一个终端(查看发布的左右目相机话题)

rviz

 6、运行标定程序(程序中跑动的是包中的标定的py程序)  注:size为网格数,square为网网格边长,right/left都为发布的图像话题(在rviz或rostopic  list中查看话题)

rosrun camera_calibration cameracalibrator.py --size 9x6 --square 0.025 --approximate=0.01 right:=/camera/right/image_raw left:=/camera/left/image_raw 

 打开标定界面。

  • 3
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ROS中,标定双目相机需要进行以下步骤: 1. 安装并配置相机驱动程序。根据相机型号选择对应的驱动程序,安装并配置好相机的驱动程序。 2. 拍摄一组双目图像。将两个相机对准同一场景,同时拍摄一组双目图像。确保两个相机的光轴平行,并且图像中的特征点能够被同时捕捉到。 3. 使用rosrun命令启动相机标定节点。在终端中输入以下命令: ``` rosrun camera_calibration cameracalibrator.py --size 8x6 --square 0.024 image:=/camera/left/image_raw camera:=/camera/left ``` 其中,--size指定棋盘格的大小,--square指定棋盘格方块的尺寸,image:=/camera/left/image_raw指定左相机图像话题camera:=/camera/left指定左相机相机信息话题。 4. 在图像窗口中显示棋盘格。在相机标定节点启动后,会打开一个图像窗口,显示左相机图像。将棋盘格放置在场景中,确保该棋盘格能够被左相机拍摄到,并在图像窗口中显示出来。 5. 移动棋盘格拍摄一组图像。保持棋盘格不动,将右相机移动一定距离,拍摄另一张图像。确保右相机图像与左相机图像中的棋盘格位置有一定的重叠。 6. 重复以上步骤拍摄多组图像。每次移动右相机一定距离,拍摄一组双目图像。最好拍摄15-20组图像。 7. 点击“Calibrate”按钮进行标定。在拍摄完所有图像后,点击“Calibrate”按钮进行标定ROS会自动计算左右相机之间的相对位置关系,并输出标定结果。 8. 保存标定结果。标定完成后,将标定结果保存到相应的文件中,以便后续使用。 以上是在ROS标定双目相机的基本步骤。具体操作中可能还需要根据不同的相机型号、场景等进行一些调整和修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值