小觅双目相机如何使用_小觅双目相机测试

本文档详细介绍了如何在Ubuntu TX1上安装和使用小觅双目相机。内容包括安装SDK、运行示例、测试左右视图和深度图、ORB-SLAM2集成以及ROS环境下的使用。还提供了相机标定文件和ROS包的下载及配置方法。
摘要由CSDN通过智能技术生成

查看

ls /dev/video*

1 TX1安装记录

1 安装基本依赖

2 下载SDK

从 Install SDK 开始 ,第一个kuda自带

cd

$ ./install.sh

$ source ~/.bashrc

查看是否安装好

$ echo $MYNTEYE_SDK_ROOT

编译测试

$ cd samples/

$ mkdir build

$ cd build/

$ cmake -DCMAKE_BUILD_TYPE=Release ..

$ make

4 运行示例

环境 配置普通tx1版的 opencv3.2

在路径ubuntu@tegra-ubuntu:~/Code/XiMi/SDK/mynteye/samples$

./samples/bin/camera [name]

[name] 为空 自动选择摄像头

4.1 测试左右视图

./samples/bin/camera

自动选择摄像头

使用HUB,因为USB问题,可能读不出來,换一个

查看USB  ls /dev/video*

4.2 测试深度图

./samples/bin/camera2

2ORB-SLAM2

我们创建了一个stereo_mynteye在ORB-SLAM2中命名的样本,以展示如何使用我们的MYNT EYE相机。

在运行stereo_mynteyeORB-SLAM2之前,请按照以下步骤操作:

在这里下载MYNT EYE SDK并按照教程进行安装。

按照正常程序安装ORB-SLAM2。

$cd stereo_mynteyeORB-SLAM2

$chmod +x build.sh

$./build.sh

校准MYNT EYE相机并更改参数cam_stereo.yaml。

运行stereo_mynteye,

$ ./Examples/Stereo/mynt-eye-orb-slam2-sample ./Vocabulary/ORBvoc.txt ./Examples/Stereo/cam_stereo.yaml 1

./Vocabulary/ORBvoc.txt是词汇文件./Examples/Stereo/cam_stereo.yaml的路径,是相机配置文件的路径,1代表video1。

你可以通过这里的视频了解运行效果。

在文件夹

ubuntu@tegra-ubuntu:~/Code/XiMi/MYNT-EYE-ORB-SLAM2-Sample-mynteye/Examples/Stereo$

./stereo_mynteye ./ORBvoc.txt ./cam_stereo.yaml 0

3ROS

1必须安装ROS 版的SDK

cd

$ ./install.sh

$ source ~/.bashrc

检查是否安装好

echo $MYNTEYE_SDK_ROOT

2Build SDK Samples

$ cd samples/

$ mkdir build

$ cd build/

$ cmake -DCMAKE_BUILD_TYPE=Release ..

$ make

3  运行实例

./samples/bin/camera

需要一个相机标定文件,在博文最后自己标定

SN03882E340009070E.conf

4在ROS中打开  发布左右图 深度图 IMU

4.1 下载ROS测试包

新建一个ROS包,下载

git clone https://github.com/slightech/MYNT-EYE-ROS-Wrapper.git

4.2 编译

catkin_make

source ./devel/setup.bash

4.3 根据相机USB口修改打开0还是1

修改launchu 文件 0 usb

4.4 开始运行实例

# Run MYNT EYE camera node, and open Rviz to display

$ roslaunch mynteye_ros_wrapper mynt_camera_display.launch

# Run MYNT EYE camera node

$ roslaunch mynteye_ros_wrapper mynt_camera.launch

# Or,

$ rosrun mynteye_ros_wrapper mynteye_wrapper_node

ROS 标定参数

%YAML:1.0

M1: !!opencv-matrix

rows: 3

cols: 3

dt: d

data: [ 7.0670498518636600e+002, 0., 3.7297901043077900e+002, 0.,

7.0666416610920203e+002, 2.1240374979570200e+002, 0., 0., 1. ]

D1: !!opencv-matrix

rows: 1

cols: 14

dt: d

data: [ -4.6388704908098000e-001, 2.3425087249454701e-001, 0., 0., 0.,

0., 0., 0., 0., 0., 0., 0., 0., 0. ]

M2: !!opencv-matrix

rows: 3

cols: 3

dt: d

data: [ 7.0503556956133104e+002, 0., 4.0450936863506502e+002, 0.,

7.0491472237897597e+002, 2.2503054543868200e+002, 0., 0., 1. ]

D2: !!opencv-matrix

rows: 1

cols: 14

dt: d

data: [ -4.6174421404117999e-001, 2.1536606632286900e-001, 0., 0., 0.,

0., 0., 0., 0., 0., 0., 0., 0., 0. ]

R: !!opencv-matrix

rows: 3

cols: 3

dt: d

data: [ 9.9997459395392996e-001, -3.3977699515345002e-003,

-6.2663072083021200e-003, -3.3890405418889199e-003,

9.9999327274544803e-001, 1.4031635874333700e-003,

-6.2710326803329004e-003, -1.3818911694177701e-003,

9.9997938205040904e-001 ]

T: !!opencv-matrix

rows: 3

cols: 1

dt: d

data: [ -1.1963887403661900e+002, -1.5522537096063099e-001,

-9.4210539328372297e-003 ]

SGM-双目深度图 ROS

#include

#include

#include

#include

#include

#include

#include

//ROS

#include

#include

#include

#include

//CUDA sgm

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include "disparity_method.h"

//MY-EYE

#include "camera.h"

#include "utility.h"

char command;

cv::Mat left,right;

void imageCallbackLeft(const sensor_msgs::ImageConstPtr &msg)

{

try

{

left = cv_bridge::toCvShare(msg,"bgr8")->image;

cv::imshow("left",left );

command=cv::waitKey(1);

if(command == ' ')

{

cv::imwrite("left.jpg",left);

cv::imwrite("right.jpg",right);

}

}

catch(cv_bridge::Exception &e)

{

}

}

void imageCallbackRight(const sensor_msgs::ImageConstPtr &msg)

{

try

{

right = cv_bridge::toCvShare(msg,"bgr8")->image;

cv::imshow("right",right);

//cv::waitKey(1);

}

catch(cv_bridge::Exception &e)

{

}

}

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

ros::init(argc, argv, "sgm_ros");

ros::NodeHandle nh("~");

image_transport::ImageTransport it(nh);

image_transport::Subscriber sub_left = it.subscribe("/left/image_rect_color", 1,imageCallbackLeft);

image_transport::Subscriber sub_right = it.subscribe("/right/image_rect_color", 1,imageCallbackRight);

//open camera

std::string name;

if (argc >= 2) {

name = argv[1];

} else {

bool found = false;

name = FindDeviceName(&found);

}

cout << "Open Camera: " << name << endl;

CalibrationParameters *calib_params = nullptr;

if (argc >= 3) {

stringstream ss;

ss << argv[2];

calib_params = new CalibrationParameters;

calib_params->Load(ss.str());

}

InitParameters init_params(name, calib_params);

Camera cam;

//cam.SetMode(Mode::MODE_CPU);

cam.Open(init_params);

if (calib_params)

delete calib_params;

if (!cam.IsOpened()) {

std::cerr << "Error: Open camera failed" << std::endl;

return 1;

}

cout << "\033[1;32mPress ESC/Q on Windows to terminate\033[0m\n";

uint8_t p1 = 7;

uint8_t p2 = 84;

init_disparity_method(p1, p2);

ros::Rate loop_rate(50);

while(ros::ok())

{

ros::spinOnce();

loop_rate.sleep();

cv::Mat h_im0 = left.clone();

if(!h_im0.data) {

std::cerr << "Couldn't read the file " << std::endl;

continue;

}

cv::Mat h_im1 = right.clone();

if(!h_im1.data) {

std::cerr << "Couldn't read the file " << std::endl;

continue;

}

// Convert images to grayscale

if (h_im0.channels()>1) {

cv::cvtColor(h_im0, h_im0, CV_RGB2GRAY);

}

if (h_im1.channels()>1) {

cv::cvtColor(h_im1, h_im1, CV_RGB2GRAY);

}

if(h_im0.rows != h_im1.rows || h_im0.cols != h_im1.cols) {

std::cerr << "Both images must have the same dimensions" << std::endl;

return EXIT_FAILURE;

}

if(h_im0.rows % 4 != 0 || h_im0.cols % 4 != 0) {

std::cerr << "Due to implementation limitations image width and height must be a divisible by 4" << std::endl;

return EXIT_FAILURE;

}

// Compute

float elapsed_time_ms;

cv::Mat disparity_im = compute_disparity(h_im0, h_im1, &elapsed_time_ms);

std::cout << "matching time: " << elapsed_time_ms << std::endl;

const int type = disparity_im.type();

const uchar depth = type & CV_MAT_DEPTH_MASK;

if(depth == CV_8U) {

cv::imshow("disp",disparity_im);

//cv::imwrite("disp.jpg", disparity_im);

} else {

cv::Mat disparity16(disparity_im.rows, disparity_im.cols, CV_16UC1);

for(int i = 0; i < disparity_im.rows; i++) {

for(int j = 0; j < disparity_im.cols; j++) {

const float d = disparity_im.at(i, j)*256.0f;

disparity16.at(i, j) = (uint16_t) d;

}

}

cv::imshow("disp",disparity_im);

//cv::imwrite("disp.jpg", disparity16);

}

}

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值