双目立体视觉(4)- ZED2双目视觉开发理论与实践 with examples 0.1 object detection
国际惯例:Src https://github.com/stereolabs/zed-examples
查看本人系列文章了解ZED2 SDK in Linux build(CUDA 10.0 used): 双目立体视觉(2)- ZED2 SDK配置 Ubuntu18.04 + ROS melodic_Techblog of HaoWANG-CSDN博客_ros zed2
ZED2官方文档:Stereolabs Docs: API Reference, Tutorials, and Integration
目录
1. Object Detect demo (ROS)
1.1 zed_obj_det_sub_tuttorial.cpp
1.2 CMakeLists.txt
1.3 配置zed_wrapper/params/zed2.yaml
2. 测试
2.1 运行zed2.launch
2.2 查看Topic列表
2.3 查看/zed2/zed_node/obj_det/objects话题内容
2.4 测试demo出错
3. 解决
3.1 分析
3.2 再次测试
官方教程C++历程源码阅读及编译使用教程
Building a C++ Application on Linux and Jetson | Stereolabshttps://www.stereolabs.com/docs/app-development/cpp/linux/
1. Object Detect demo (ROS)
近日收到CSDN小伙伴私信求助,ZED相机做物体识别和深度值估计时出现问题,即节点起来之后pipline没有数据,直呼,马老师发生甚摸事了?很简单,三步走。你先这样,然后再这样,最后再那样就可以了。
1.1 zed_obj_det_sub_tuttorial.cpp
/*** This tutorial demonstrates how to receive the list of detected objects from a ZED node* from the ZED node*/#include <ros/ros.h>#include <zed_interfaces/Object.h>
#include <zed_interfaces/ObjectsStamped.h>/*** Subscriber callbacks. The argument of the callback is a constant pointer to the received message*/void objectListCallback(const zed_interfaces::ObjectsStamped::ConstPtr& msg)
{ROS_INFO("***** New object list *****");for (int i = 0; i < msg->objects.size(); i++){if (msg->objects[i].label_id == -1)continue;ROS_INFO_STREAM(msg->objects[i].label << " [" << msg->objects[i].label_id << "] - Pos. ["<< msg->objects[i].position[0] << "," << msg->objects[i].position[1] << ","<< msg->objects[i].position[2] << "] [m]"<< "- Conf. " << msg->objects[i].confidence<< " - Tracking state: " << static_cast<int>(msg->objects[i].tracking_state));}
}/*** Node main function*/
int main(int argc, char** argv)
{ros::init(argc, argv, "zed_obj_det_sub_tutorial");ros::NodeHandle n;ros::Subscriber subObjList = n.subscribe("objects", 1, objectListCallback);/*** ros::spin() will enter a loop, pumping callbacks. With this version, all* callbacks will be called from within this thread (the main one). ros::spin()* will exit when Ctrl-C is pressed, or the node is shutdown by the master.*/ros::spin();return 0;
}
代码非常简单,即创建一个obt_det 订阅者节点,callback回调函数用于处理接收到的检测结果。
注意到, ros::Subscriber subObjList = n.subscribe("objects", 1, objectListCallback);
该节点订阅的Topic是"objects",至于ZED2 SDK发布的Obj是不是该话题我们暂时不得而知。
(一定不是,不然不会出问题。)
1.2 CMakeLists.txt
cmake_minimum_required(VERSION 3.5)
project(zed_obj_det_sub_tutorial)# if CMAKE_BUILD_TYPE is not specified, take 'Release' as default
IF(NOT CMAKE_BUILD_TYPE)SET(CMAKE_BUILD_TYPE Release)
ENDIF(NOT CMAKE_BUILD_TYPE)## Find catkin and any catkin packages
find_package(catkin REQUIRED COMPONENTS roscpp zed_interfaces)## Declare a catkin package
catkin_package()include_directories(include ${catkin_INCLUDE_DIRS})## Build
add_executable(zed_obj_det_sub src/zed_obj_det_sub_tutorial.cpp)
target_link_libraries(zed_obj_det_sub ${catkin_LIBRARIES})
add_dependencies(zed_obj_det_sub ${catkin_EXPORTED_TARGETS})
查看CMakerlists文件,发现该节点的依赖和编译设置没有问题。
1.3 配置zed_wrapper/params/zed2.yaml
更改objetc_detection 栏目下的相应内容即可。
2. 测试
2.1 运行zed2.launch
查看zed2参数配置及初始化结果:
2.2 查看Topic列表
/zed2/zed_node/obj_det/objects没有问题
2.3 查看/zed2/zed_node/obj_det/objects话题内容
2.4 测试demo出错
节点运行没有反应,这就机霸的见鬼了。
3. 解决
3.1 分析
节点没问题、话题没问题、ZED2驱动没问题、CUDA没问题。。。
自然而然的想到,可能是obj节点并没有接收到Topic中的消息。
修改代码:
/*** This tutorial demonstrates how to receive the list of detected objects from a ZED node* from the ZED node*/#include <ros/ros.h>#include <zed_interfaces/Object.h>
#include <zed_interfaces/ObjectsStamped.h>/*** Subscriber callbacks. The argument of the callback is a constant pointer to the received message*/void objectListCallback(const zed_interfaces::ObjectsStamped::ConstPtr& msg)
{ROS_INFO("***** New object list *****");for (int i = 0; i < msg->objects.size(); i++){if (msg->objects[i].label_id == -1)continue;ROS_INFO_STREAM(msg->objects[i].label << " [" << msg->objects[i].label_id << "] - Pos. ["<< msg->objects[i].position[0] << "," << msg->objects[i].position[1] << ","<< msg->objects[i].position[2] << "] [m]"<< "- Conf. " << msg->objects[i].confidence<< " - Tracking state: " << static_cast<int>(msg->objects[i].tracking_state));}
}/*** Node main function*/
int main(int argc, char** argv)
{ros::init(argc, argv, "zed_obj_det_sub_tutorial");ros::NodeHandle n;ros::Subscriber subObjList = n.subscribe("/zed2/zed_node/obj_det/objects", 1, objectListCallback);/*** ros::spin() will enter a loop, pumping callbacks. With this version, all* callbacks will be called from within this thread (the main one). ros::spin()* will exit when Ctrl-C is pressed, or the node is shutdown by the master.*/ros::spin();return 0;
}
ros::Subscriber subObjList = n.subscribe("/zed2/zed_node/obj_det/objects", 1, objectListCallback);
重新编译catkin_make + source,再次测试。
3.2 再次测试
ok,成功
识别结果:
数据结构 - person 数量 【1】 位置 pos [ x, y ,z ] 单位 米, confidence: 【】
双目立体视觉(4)- ZED2双目视觉开发理论与实践 with examples 0.1 object detection相关推荐
- 双目立体视觉源代码 双目立体视觉匹配程序 双目视觉3d成像(三维重构图像处理) 基于双目视觉的深度计算和三维重建 opencv写的双目视觉摄像机标定和三维重建代码
双目视觉/双目标定源码/图片集标定匹配三维重建坐标计算OpenCV 1.双目立体视觉源代码(包括标定,匹配,三维重建) 2.双目视觉实验图片集(双目立体视觉中使用的标准实验图,适合初学者进 行实验使用 ...
- Java 理论与实践: JDK 5.0 中更灵活、更具可伸缩性的锁定机制--转载
多线程和并发性并不是什么新内容,但是 Java 语言设计中的创新之一就是,它是第一个直接把跨平台线程模型和正规的内存模型集成到语言中的主流语言.核心类库包含一个 Thread 类,可以用它来构建.启动 ...
- 科研教育「双目视觉技术」首选!维视MV-VS220双目立体视觉系统开发平台
NO.1产品背景 在最近大热的自动驾驶赛道,大疆采用新的技术路线--双目立体视觉.具体来说,它就是模拟人的视觉系统,通过两个临近摄像头所拍摄到的画面的视差,来还原出三维立体结构.不需要对海量数据进行标 ...
- python双目视觉三维重建代码_双目立体视觉的三维重建方法与流程
本发明为双目立体视觉的三维重建方法,属于图像处理与机器视觉领域,涉及halcon软件,具体涉及空间场景的三维重建. 背景技术: 三维重建技术作为计算机视觉领域的一个重要分支,在人工智能.虚拟现实.非接 ...
- 双目视觉焦距_深度相机原理揭秘--双目立体视觉
深度相机原理揭秘--双目立体视觉 博文来源:http://www.sohu.com/a/203027140_100007727 导读 为什么非得用双目相机才能得到深度? 双目立体视觉深度相机的工作流程 ...
- 双目立体视觉摄像头模块开发搭建,含源代码、电路图
作品摘要 本作品为基于ATLYS FPGA开发平台.VmodCAM双目摄像头模块开发设计的双目立体视觉系统.VmodCAM用于采集双路的视觉信息,FPGA开发平台负责完成视觉信息的处理及图像的高速分析 ...
- 利用华硕e6308_P8P67_PRO主板开发双目立体视觉问题小结
利用华硕e6308_P8P67_PRO主板开发双目立体视觉问题小结 实验室有台组装计算机,主板是华硕e6308_P8P67_PRO.实验室要求我利用该计算机开发双目立体视觉系统. 咋看上去,这块主板很 ...
- 双目立体视觉(3)- ZED2 ROS Melodic 发布RGB图像及深度信息
国际惯例:Src https://github.com/stereolabs/zed-examples 查看本人系列文章了解ZED2 SDK in Linux build(CUDA 10.0 used ...
- 双目视觉焦距_教你如何提高双目立体视觉系统的精度
双目立体视觉(Binocular Stereo Vision)是机器视觉的一种重要形式,它是基于视差原理并利用成像设备从不同的位置获取被测物体的两幅图像,通过计算图像对应点间的位置偏差,来获取物体三维 ...
最新文章
- lwip之数据收发流程_2
- C++ Primer 5th笔记(chap 16 模板和泛型编程)类模板和友元
- 【已解决】Android5.0版本如何打开调试模式
- 媒体服务器协议,媒体服务器介绍(mediactrl架构)
- promotion failed 和 Concurrent Mode Failure的区别
- Linux的目录说明
- 设置布局默认为LinearLayout,却成了RelativeLayout
- 什么软件测试内存稳定性,喜大普奔:内存稳定性工具Memtest终有Windows版
- 如何将本地项目上传到码云
- 三种形式全排列——指数型、排列型、组合型类型题目汇总
- 2008年高考数学江西卷压轴题
- 一维有限差分算法推导及MATLAB代码
- 9月15日相约苏州丨共同探讨数智化时代,国产数据库的技术创新与实践
- RelativeLayout(相对布局)
- 利用向量组证明矩阵的秩不等式
- 考研html模板素材,2020考研英语作文模板素材:品质类模板
- Unity GUI游戏界面
- C++中的friend class 用法总结
- ibatis3 一个小bug
- Linux 修改远程默认端口 22
热门文章
- 阿里内核月报2014年3月
- 《网络协议》TCP 的成块数据流
- 如何把MySQL数据迁移到Redis
- mysql create user identified by,MySQL的SQL语句 - 数据库管理语句 - 账户管理语句 - CREATE USER 语句(1)...
- 计算机应用数学,图灵奖得主姚期智的硬课:计算机应用数学
- 反思:IT部门在企业中的位置,IT人的地位,IT的价值
- python抢茅台_python实现简单淘宝秒杀功能
- @zabbix监控网络设备温度Temp及告警配置 (sensor)
- SAP GN_DELIVERY_CREATE ME795
- 解析中国电子学会:全国青少年软件编程(Scratch)等级考试试卷(2019一级测试卷)