ROS学习笔记---获取机器人相机图像数据

学习目标:

  • ROS相机图像获取的C++实现

一、C++实现步骤:

  1. 流程概述
    在这里插入图片描述

本次实验的主要流程如上图所示,ROS获取机器人摄像头的图像数据(ROS格式),将其转换成Opencv的数据格式后,利用Opencv中的显示函数将其显示到屏幕上。

  1. 实现步骤
    1. 进入工作空间,创建功能包
      cd ~/catkin_ws/src/
      catkin_create_pkg cv_pkg roscpp cv_bridge
    2. 进入VScode创建节点文件:cv_image_node.cpp
      在这里插入图片描述3. 编写节点代码
#include<ros/ros.h>
#include<cv_bridge/cv_bridge.h>
#inclde<sensor_msgs/image_encodings.h>
#include<opencv2/imgproc/imgproc.hpp>
#include<opencv2/highgui/highgui.hpp>
using namespace cv;

void Cam_RGB_Callback(const sensor_msgs::Image msg)
{
	cv_bridge::CvImagePtr cv_ptr;
	try
	{
		cv_ptr=cv_bridge::toCvCopy(msg,sensor_msg::image_encodings::BGR8);
	}
	catch (cv_bridge::Excpetion& e)
	{
		ROS_ERROR("cv_bridge exception::%s",e.what());
		return;
	}
	Mat imgOriginal = cv_ptr->image;
    imshow("RGB",imgOriginal);
    waitKey(1);//暂停1ms
}

int main(int argc,char **argv)
{
	ros::init(argc,argv,"cv_image_node");
	ros::NodeHandle nh;
	ros::Subscriber rgb_sub = nh.subscribe("/kinect2/qhd/image_color_rect",1,Cam_RGB_Callback);//相机名称:kinect2 分辨率:qhd 畸变矫正后的彩色图像:image_color_rect 缓存一帧图像
	namedWindow("RGB");
	ros::spin();
}
  1. 添加编译规则

在这里插入图片描述

打开CMakeLists.txt,在末尾如下指令
1. find_package(OpenCV REQUIRED) //17行
2. include_directories(
#include
${catkin_INCLUIDE_DIRS}
${OpenCV_INCLUDE_DIRS})//117
3.最后在文件末尾添加如下指令:
在这里插入图片描述

  1. 编译节点
进入工作空间:
cd ~/catkin_ws
编译:
catkin_make
  1. 测试节点
打开终端输入:
roslaunch wpr_simulation wpb_balls.launch 
  • 会看到一个机器人前面有四个不同颜色的小球:
    在这里插入图片描述
  • 重开一个终端输入如下指令:
rosrun cv_pkg cv_image_node

在终端会弹出RGB命名的窗口即为机器人摄像头的实时画面。
在这里插入图片描述

  • 测试画面实时性:
新开终端:
rosrun wpr_simulation ball_random_move
可以在窗口中看到移动的小球,本实验就算成功啦!

实验结果证明,RGB窗口中为实时显示的摄像头图像
在这里插入图片描述
关于Python实现,且听下回分解!

本次实验的内容及图片来源于B站:机器人工匠阿杰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值