在ROS中用openCV显示摄像头并发布图像数据
前言使用C++实现CMakeLists.txt配置
使用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进行图片接收,并显示
参考本人博客:订阅部分
客官!如果觉得有用,给俺点赞支持下呗!
欢迎留言讨论,指出不足和建议!