小觅双目相机如何使用_小觅双目相机测试
查看
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;
}
小觅双目相机如何使用_小觅双目相机测试相关推荐
- 小觅双目相机如何使用_小觅双目深度相机亮相GTC2019
3月17日,***一届的GPU技术大会(GTC)在美国加利福尼亚州圣何塞拉开序幕.GPU技术大会(NVIDIA GTC )是 AI和深度学习领域的盛会,也是全球范围的GPU开发者行业聚会.<福布 ...
- 小程序input获得焦点触发_小程序如何获得种子用户,微信9亿月活用户来教你!...
小程序虽已上线2年了,但在微信生态中还非常年轻,正处于学习奔跑的阶段.而且,许多商家对于如何正确获得第一批种子用户,并不十分清楚. 今天,企乐网就以如何定位种子用户?种子用户在哪里获得?用什么方法沉淀 ...
- 小程序 const moment = require('moment')_小程序依赖分析实践
用过 webpack 的同学肯定知道 webpack-bundle-analyzer ,可以用来分析当前项目 js 文件的依赖关系. webpack-bundle-analyzer 因为最近一直在做小 ...
- 小程序 和 web 功能对比_小程序官方推出的Kbone,是如何解决Web 端和小程序同构痛点的?...
小程序作为一种新兴地连接用户与服务的方式,相信大家都或多或少接触过.对于开发者来说,它是一种类似 Web 但又不同于 Web 的开发模式,它提供了一套自定义的 API 和文件组织方式,这无疑带给开发者 ...
- 小波自适应阈值选取python_小波去噪阈值如何选取_小波阈值分析 - 全文
1.小波阈值去噪法的流程如下所示: 小波图像去噪就是根据信号和噪声的小波系数在不同尺度上具有不同性质的原理,利用相应的数学工具构造系数选择方式,对带噪信号的小波系数进行处理.小波去噪过程就是利用小波分 ...
- 小程序 和 web 功能对比_小程序的基本知识及功能
"小沃"为客户开发项目中经常遇到客户要求开发小程序,"小沃"也是一个刨根问底的工作狂,从而收集了对"小程序生态变化"市场调研报告,一方面让客 ...
- 小朵机器人安卓叫什么_小朵机器人手机版下载-小朵机器人app安卓版下载v1.3.2下载 - 八号下载安卓频道...
小朵机器人app安卓版是一款儿童教育教学平台,他涵盖了小学所有重点课程,帮助孩子快速进行启蒙教育,各种课堂练习等你来体验,喜欢的用户快来下载吧! 最新资讯 中国人口基数巨大,再加上国家开放了二胎政策, ...
- 单片机c语言小波阈值降噪,小波阈值去噪的基本原理_小波去噪阈值如何选取
小波阈值去噪的基本原理 小波阈值去噪的基本思想是先设置一个临界阈值λ,若小波系数小于λ,认为该系数主要由噪声引起,去除这部分系数;若小波系数大于λ,则认为此系数主要是由信号引起,保留这部分系数,然后对 ...
- nginx做小程序外链跳转_小程序跳转外部链接怎么设置,实现小程序跳转外链的两种方法...
小程序跳转到外部链接有很多种类型,包括小程序跳转到APP,小程序跳转到小程序,小程序跳转到公众号,小程序跳转到网页等.由于小程序跳转的对象比较多,各自的规则又不一样,因此小程序跳转外部链接是用户咨询较 ...
- nginx做小程序外链跳转_小程序如何做外部链接跳转
随着互联网的发展,小程序定制开发的需求也是越来越多了.客户在寻问小程序开发的时候,小程序跳转外部链接是他们比较关心的问题之一.下面我们将小程序跳转外部链接的规则汇总整理,希望用户对小程序的跳转规则有更 ...
最新文章
- tomcat(2)一个简单的servlet容器
- java xml格式打包,maven项目打包xml没有被打包解决办法 ,mybatis的xml打包
- weblogic安装错误BEA-090870解决方案
- python官网的软件-mPython
- sum 去重_总结leetcode上【排列问题】【组合问题】【子集问题】回溯算法去重的两种写法!...
- CMR(IF=50.129)重磅综述|肠-脑轴新疗法:肠道菌群如何影响人类神经系统疾病
- Google翻译插件
- 计算机报名上传图片需要flash,公务员报名上传照片时需要的flash控件是什么
- Charles抓包工具的安装操作以及可能出现的问题(安装不了证书、手机不能上网)
- 记忆就是记忆!!不要深究!
- Python爬取网页图片
- allwinner gsensor 校准调试
- 【C语言】简单的飞机游戏
- 巧用TP-LINK无线路由器连接IPv6网络
- Linux数据库管理与应用
- Maven基础简介+安装说明
- [高项]应急储备VS管理储备
- C语言编程>第一周 ⑦ 利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示
- Python下载微信公众号文章和图片保存至本地
- Java基础 DAY02