在ROS中用openCV显示摄像头并发布图像数据
- 前言
- 使用C++实现
-
- 使用python实现
- 查看usb串口使用情况
- 永久打开串口权限
- ROS使用openCV进行图片接收,并显示
- 客官!如果觉得有用,给俺点赞支持下呗!
前言
自己也是刚开始学习ros和openCV,经常会踩很多坑,比如这次在ros中使用openCV,按照很多博客写的,最后要么死机,要么黑框。对此,经过请教学长,终于调通,分享给大家以供参考。
使用C++实现
#include <iostream>
#include <ros/ros.h>
#include <cv_bridge/cv_bridge.h>
#include <sensor_msgs/image_encodings.h>
#include <image_transport/image_transport.h>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/videoio.hpp>
int main(int argc, char** argv)
{
ros::init(argc, argv, "imageGet_node");
ros::NodeHandle nh;
image_transport::ImageTransport it(nh);
image_transport::Publisher image_pub = it.advertise("/cameraImage", 1);
ros::Rate loop_rate(200);
cv::Mat imageRaw;
cv::VideoCapture capture(0);
if(capture.isOpened() == 0)
{
std::cout << "Read camera failed!" << std::endl;
return -1;
}
while(nh.ok())
{
capture.read(imageRaw);
cv::imshow("veiwer", imageRaw);
sensor_msgs::ImagePtr msg = cv_bridge::CvImage(std_msgs::Header(), "bgr8", imageRaw).toImageMsg();
image_pub.publish(msg);
ros::spinOnce();
loop_rate.sleep();
if(cv::waitKey(2) >= 0)
break;
}
}
一定要注意,waitKey()必须要有,且不为0,其他大多博客这点都没有,导致出错
*ls -l /dev/ttyUSB 命令查看串口 **
CMakeLists.txt配置
添加(最后两个的image_Get是生成可执行文件的名字,根据自己来设定):
find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})
add_executable(image_Get src/image_Get.cpp)
target_link_libraries(image_Get ${catkin_LIBRARIES} ${OpenCV_LIBS})
使用python实现
未完待续
查看usb串口使用情况
ls -l /dev/ttyUSB*
永久打开串口权限
若出现[Errno 13] Permission denied: '/dev/ttyUSB0’问题,可以用下面命令打开串口权限:
sudo chmod 777 /dev/ttyUSB0
sudo usermod -aG dialout nankel
其中nankel为用户名
ROS使用openCV进行图片接收,并显示
参考本人博客:订阅部分
客官!如果觉得有用,给俺点赞支持下呗!
欢迎留言讨论,指出不足和建议!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)