版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
机器人操作系统(ROS)机器人操作系统(ROS)机器视觉8.1机器人操作系统(ROS)8.1机器视觉机器视觉作为人工智能技术的一个重要分支,近些年发展迅速。其主要原理为通过计算机和相机,对生物的视觉系统进行模拟,将被摄目标的信息转换成可以被计算机进行处理的图像信息。并根据其图像特征,经由图像处理系统,代替人类对目标进行的识别、检测、分类、跟踪等功能。机器人操作系统(ROS)8.1.1相机驱动安装本节使用的摄像头品牌为RMONCAM林柏视,如图8-1所示。$sudoapt-getinstallros-melodic-usb-cam运行以下命令下载摄像头驱动(具体版本视安装的ros版本决定),如果系统已经安装了驱动,则会显示如右图所示的结果:安装摄像头驱动结果图林柏视相机机器人操作系统(ROS)8.1.1相机驱动安装下面进行相机测试,运行以下命令启动摄像头驱动功能包,运行结果如下图所示:$roslaunchusb_camusb_cam-test.launch此时出现的图像一般为电脑自带的摄像头,如果电脑不带摄像头且没有接入摄像头,就不会出现该界面。一般电脑的摄像头默认为video0,外部接入的USB摄像头编号视实际情况而定(本节摄像头设备号为video2)。机器人操作系统(ROS)8.1.1相机驱动安装如果电脑没有自带摄像头,外部接入的摄像头就会为video0,运行以下命令查看摄像头端口号,运行结果如下图所示:$ls/dev/当电脑自带摄像头且外接有摄像头时,usb_cam-test.launch只会调用自带的摄像头,此时如果要调用外接摄像头,需运行以下命令修改usb_cam-test.launch,运行结果如下图所示。机器人操作系统(ROS)8.1.1相机驱动安装将video_device的value从“/dev/video0”变成“/dev/video2”,这样就能通过usb_cam-test.launch调用外接摄像头,usb_cam-test.launch内容如下所示:<launch><nodename="usb_cam"pkg="usb_cam"type="usb_cam_node"output="screen"><paramname="video_device"value="/dev/video0"/><paramname="image_width"value="640"/><paramname="image_height"value="480"/><paramname="pixel_format"value="yuyv"/><paramname="camera_frame_id"value="usb_cam"/><paramname="io_method"value="mmap"/></node></launch>修改完usb_cam-test.launch,运行以下命令重新启动摄像头驱动功能包,此时启动的摄像头是外接摄像头,运行结果如右图所示:$roslaunchusb_camusb_cam-test.launch机器人操作系统(ROS)8.1.2通过rviz显示图像首先通过如下命令查看摄像头发布的话题列表,运行结果如图8-7所示:$rostopiclist可以看到/usb_cam/image_raw是摄像头功能包发布的图像话题。机器人操作系统(ROS)8.1.2通过rviz显示图像运行以下命令打开rviz:$rosrunrvizrviz点击左下角Add,选择Image,确定并将其勾选,rviz添加Image界面如图8-9所示机器人操作系统(ROS)8.1.2通过rviz显示图像然后修改Image的ImageTopic为/usb_cam/image_raw,即可通过rviz调用摄像头显示图像,显示结果如图所示。机器人操作系统(ROS)8.1.3相机内参标定我们所处的世界是三维的,而照片是二维的。相机的内参标定就是假定相机符合针孔相机模型,通过内参的标定求解模型的参数,以达到用简单的数学模型来表达复杂成像过程的目的,并求解出成像的反过程。而且由于镜头径向曲率产生的径向畸变,以及相机组装过程中不能使透镜严格和成像平面平行而产生的切向畸变,会在图像的数据处理中产生误差,因此需要针对摄像头的参数进行标定。本节采用的是基于ROS的可对单目和双目相机标定的camera_calibration功能包。机器人操作系统(ROS)8.1.3相机内参标定在进行标定之前,需要先准备一个尺寸已知的标定板。本书采用如下图所示的棋盘格标定板,每个棋盘格的边长为0.024m。实际标定过程中检测的为标定板内部的角点,标定的size也就是内部交叉点的个数,而不是方形格的个数,因此该棋盘格的size为9*6。除了标定板的size,还需要知道标定板每个棋盘格的边长square,准备好了标定板之后,就能开始标定过程了。棋盘格标定板相机内存标定-标定板准备机器人操作系统(ROS)8.1.3相机内参标定运行以下命令安装摄像头标定功能包camera_calibration,运行结果如图所示:$sudoapt-getinstallros-melodic-camera-calibration
安装标定功能包相机内存标定-camera_calibration功能表配置机器人操作系统(ROS)8.1.3相机内参标定在标定前,通过以下命令启动摄像头:$roslaunchusb_camusb_cam-test.launch运行以下命令启动标定程序,对摄像头进行标定,启动标定程序结果下图所示:$rosruncamera_calibrationcameracalibrator.py--size9x6--square0.024image:=/usb_cam/image_rawcamera:=/usb_cam
启动标定程序其中--size后面为使用的标定板的内部角点的个数,--square为每个棋盘格的边长,单位为米,image:=/usb_cam/image_raw表示标定时订阅的图像来自于/usb_cam/image_raw的话题,camera:=/usb_cam表示的当前摄像头名,具体的参数请根据使用的标定板和摄像头进行选择。相机内存标定-启动标定节点机器人操作系统(ROS)8.1.3相机内参标定进入标定界面后,将标定板放在摄像头下,就可以开始标定了,标定界面如图所示。相机内存标定-标定相机参数机器人操作系统(ROS)8.1.3相机内参标定标定界面右边有四个进度条,标定没有成功时,右下角的三个按钮都是不能使用的,通过将标定板左右移动来提高X进度条的进度,将标定板上下移动来提高Y进度条的进度,标定过程如图所示。相机内存标定-标定相机参数机器人操作系统(ROS)8.1.3相机内参标定将标定板前后移动来提高Size进度条的进度,将标定板左右上下倾斜来提高Skew的进度条,标定过程如下图所示。相机内存标定-标定相机参数机器人操作系统(ROS)8.1.3相机内参标定通过不断变更位置来提高标定进度条进度指导四个进度条都达到满意的效果,标定结束如下图所示。相机内存标定-标定相机参数机器人操作系统(ROS)8.1.3相机内参标定最后按下右下角的CALIBRATE按钮对内参系数和畸变系数进行计算,计算过程中不要关闭标定界面,参数计算完成后,SAVE和COMMIT按钮会亮起,点击SAVE按钮对结果数据进行保存,此时在终端中也会出现标定的结果,如下图所示。相机内存标定-标定相机参数机器人操作系统(ROS)8.1.3相机内参标定点击COMMIT按钮可以提交数据并退出标定界面,并在~/.ros/camera_info/文件夹下生成标定参数配置文件head_camera.yaml如图所示,此时重新打开相机,将自动加载该配置文件,矫正相机畸变,相机内存标定-标定相机参数机器人操作系统(ROS)8.1.3相机内参标定根据终端中输出的路径可以找到保存的标定参数,标定参数保存路径如下图所示。根据上述路径打开压缩包calibrationdata.tar.gz,里面放着标定过程的图片以及存放标定结果的ost.txt和ost.yaml文件,这里的ost.yaml文件就是所需要的内参标定结果文件,如图所示。相机内存标定-标定相机参数机器人操作系统(ROS)8.1.4人脸识别实验OpenCV作为开源的计算机视觉库,由一系列的C函数和少量的C++类构成,实现了图像处理和计算机视觉方面的很多通用算法,能够运行于Windows、Linux、macOS等操作系统中,由于我们使用的ROS版本为Melodic,在该版本中ROS会默认安装OpenCV3,可以通过以下命令查看OpenCV是否安装成功以及其版本:$python>>>importcv2>>>cv2.__version__当出现如图所示结果时,就说明OpenCV被正常安装,对应的版本为OpenCV3.2.0:
若未安装OpenCV,可以运行如下命令安装:$sudo
apt-get
install
ros-melodic-vision-opencv
libopencv-dev
python-opencv人脸识别实验-Opencv配置机器人操作系统(ROS)8.1.4人脸识别实验人脸识别实验-初始化函数部分def__init__(self):rospy.on_shutdown(self.cleanup);#创建cv_bridge,由于在Opencv中,图像是以Mat矩阵的形式储存的,这与ROS的图像消息的格式有所区别,因此需要通过cv_bridge将其联系起来。self.bridge=CvBridge()self.image_pub=rospy.Publisher("cv_bridge_image",Image,queue_size=1)
#获取haar特征的级联表的XML文件,设置在启动文件中。cascade_1=rospy.get_param("~cascade_1","")cascade_2=rospy.get_param("~cascade_2","")
#使用级联表初始化haar特征检测器。self.cascade_1=cv2.CascadeClassifier(cascade_1)self.cascade_2=cv2.CascadeClassifier(cascade_2)
#设置级联表的参数,优化人脸识别,可以在launch文件中重新配置。self.haar_scaleFactor=rospy.get_param("~haar_scaleFactor",1.2)self.haar_minNeighbors=rospy.get_param("~haar_minNeighbors",2)self.haar_minSize=rospy.get_param("~haar_minSize",40)self.haar_maxSize=rospy.get_param("~haar_maxSize",60)self.color=(50,255,50)
#初始化图像数据的订阅者,使图像的话题名能在launch文件中重映射。self.image_sub=rospy.Subscriber("input_rgb_image",Image,self.image_callback,queue_size=1)机器人操作系统(ROS)8.1.4人脸识别实验人脸识别实验-图像处理函数部分defimage_callback(self,data):#使用cv_bridge将ROS的图像数据转换成OpenCV的图像格式。try:cv_image=self.bridge.imgmsg_to_cv2(data,"bgr8")frame=np.array(cv_image,dtype=np.uint8)exceptCvBridgeError,e:printe
#将图像转化成灰度图。grey_image=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)#平衡直方图以减少光线影响。grey_image=cv2.equalizeHist(grey_image)#尝试检测人脸faces_result=self.detect_face(grey_image#在opencv的窗口中框出所有人脸区域。iflen(faces_result)>0:forfaceinfaces_result:x,y,w,h=facecv2.rectangle(cv_image,(x,y),(x+w,y+h),self.color,2
#将识别后的图像转换成ROS消息并发布。self.image_pub.publish(self.bridge.cv2_to_imgmsg(cv_image,"bgr8"))机器人操作系统(ROS)8.1.4人脸识别实验人脸识别实验-人脸识别函数部分defdetect_face(self,input_image):#正面人脸的模型匹配。ifself.cascade_1:faces=self.cascade_1.detectMultiScale(input_image,self.haar_scaleFactor,self.haar_minNeighbors,cv2.CASCADE_SCALE_IMAGE,(self.haar_minSize,self.haar_maxSize))#侧面人脸的模型匹配。iflen(faces)==0andself.cascade_2:faces=self.cascade_2.detectMultiScale(input_image,self.haar_scaleFactor,self.haar_minNeighbors,cv2.CASCADE_SCALE_IMAGE,self.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 秋季学期学生发展评价体系计划
- 急诊工作的指导计划
- 跨部门合作在年度工作中的关键性计划
- 《机械零件加工》课件第一篇模块一项目一任务一
- 新余学院《新能源专业英语》2023-2024学年第一学期期末试卷
- 新余学院《编排设计》2021-2022学年第一学期期末试卷
- 西南医科大学《卫生学》2022-2023学年第一学期期末试卷
- 西南医科大学《毒理学基础》2023-2024学年第一学期期末试卷
- 西华大学《走进国画》2022-2023学年第一学期期末试卷
- 2024年01月11304管理案例分析期末试题答案
- 硫酸安全技术说明书MSDS
- 城市轨道交通服务员职业技能大赛理论试题库
- 儿科及成人营养不良筛查表(STAMP)
- 五邑大学交通工程(轨道交通电气化)专业
- 四年级语文上册句子整理复习统编课件ppt
- 物联网能耗监控项目性能测试报告V0全解
- 制程品质管控作业流程图
- 香港联合交易所有限公司证券上市规则
- 爆破作业安全技术交底
- 澳大利亚CH2绿色办公大楼
- 2020年中小学教师正高级职称评聘答辩试题
评论
0/150
提交评论