利用KINECT实现无人车视觉的方法
技术领域
本发明涉及机器人视觉技术领域,具体为利用KINECT实现无人车视觉的方法。
背景技术
随着机器人技术的不断成熟与发展,机器人研究的重点也逐步放在能在未知、复杂、动态环境中独立完成给定任务的自主式移动机器人的研究。移动机器人在环境监测、安全保卫、助老助残、搜索救援等领域具有广泛的应用前景,移动机器人定位与地图构建、视觉导航、复杂环境下的避障以及多机器人协调控制等均是世界范围内的研究热点。自主移动机器人的主要特征是能够借助于自身的传感器系统实时感知和理解环境,并自主完成任务规划和动作控制,而视觉系统则是其实现环境感知的重要手段之一。
在机器人视觉当中,对运动物体的识别方法是对目标物体的RGB图像的处理来实现深度检测,工作量较大。因此,设计可实现深度检测和实现三维图像的利用KINECT实现无人车视觉的方法是很有必要的。
发明内容
本发明的目的在于提供利用KINECT实现无人车视觉的方法,以解决上述背景技术中提出的问题。
为了解决上述技术问题,本发明提供如下技术方案:利用KINECT实现无人车视觉的方法,包括步骤一,下载相应的驱动包,Kinect在Linux下有一个开源的驱动包freenect,Ros针对此驱动包也有相应的功能包:freenect_camera,安装完驱动包后可以运行freenect,launch文件来启动Kinect启动,Kinect主要由彩色相机、深度相机、指示灯以及四元麦克风阵列四部分组成,光学部分是由红外线发射器以及红外线摄像头组成,由红外线发射器发出红外线再由红外线摄像头接受发射的光线来捕捉人的肢体动作,它可以一秒捕捉30次,除此之外还有一个探测力度与深度的传感器,以及四个采集声音的麦克风;
步骤二,对摄像头的参数进行标定,Ros提供我们一个用于双目和单目摄像头标定的功能包camera_calibration,标定程序启动后,标定靶只要处于摄像头的视野范围内即可,Ros系统是开源的免费的,是一种点对点的操纵系统。它能够提供十分强大的功能包括程序的发行,程序之间的信息交互,底层驱动程序管理,它也提供一些工具和库来方便用户建立编写代码,以及运行,用户可以自行创建各种功能包和工作空间;
步骤三,标定程序启动后,处于摄像头的视野范围内,看到图形界面,上下左右移动旋转棋盘格,右边上部X,Y,Size,Skew表示各个方向标定进度,直到CALIBRATE呈绿色,标定结束并点击,这时后台计算标定数据,耐心等待几分钟后,下面的SAVE、CMMIT会变成绿色,表示后台计算完毕;
步骤四,调用回调函数,将图像转换成OpenCv的数据格式,在opencv里面创建灰度图像,创建平衡直方图,减少光线影响,之后检测人脸,OpenCV用C++语言编写,它的主要接口也是C++语言,但是依然保留了大量的C语言接口,该库也有大量的Python、Java andMATLAB/OCTAVE(版本2.5)的接口,这些语言的API接口函数可以通过在线文档获得,如今也提供对于C#、Ch、Ruby,GO的支持,ROS提供的cv_bridge功能包能够与OpenCV进行交接,cv_bridge功能包可以将ROS图像信息转换为OpenCV中的图像,并可以通过opencv库生成不同的图像;
步骤五,用ros里的ar_track_alvar功能包来创建与识别二维码,运行成功后可以打开rviz界面中看到摄像头信息,主界面中还有word和cemera两个坐标系的显示,现在将二维码放置到摄像头的视野范围内,可以看到识别结果;
步骤六,在模型库创建完毕后,需要对这些模型进行数据训练,生成识别需要的匹配模板,在终端中分别启动Kinect、三维物体识别和rviz可视化界面,如果Kinect范围内有可乐罐就会出现画面;
步骤七,对可乐罐的识别是使用linemod算法,基于可乐罐模板匹配算法,将训练过的可乐罐模型于数据库中的模板进行对比随后识别出可乐罐模型,目标跟踪就是在序列图像不同时刻检测到的目标之间根据目标的某些特征在时间上建立起联系,通俗一点说就是跟踪上的目标在图像序列的不同帧里,始终赋予稳定一致的编号,目标跟踪在计算机视觉领域里是一个充满挑战的问题,在视频分析领域,对多个目标跟踪的主要困难是在相邻两帧间建立起目标正确的关联关系,尤其是在复杂场景里多个相似目标之间存在遮挡、合并分离等情况时,确定目标之间的正确对应关系变得很困难。使用以下命令启动usb摄像头,然后启动物体跟踪例程,摄像头自动检测出多个物体并自动抓取目标,如果目标移动方框也会一直跟踪,物体跟踪与检测是有区别的简单来说,检测是针对特定的目标,而跟踪无需确切知道跟踪的是什么,它们应用场景不太一样,比如签到时合适用人脸识别,抓嫌疑人时合适用人体跟踪等,它们的联系,有不少的实际应用都是检测+跟踪,这个系统就是特定跟踪,特定跟踪一来更适合某些实际场景。
根据上述技术方案,上述步骤二中,连接USB摄像头到PC端的USB接口,启动摄像头,查看当前系统中的图像话题信息,摄像头是精密仪器,其对光学器件的要求较高,因为摄像头与外界一些原因,所生成的图像可能会产生光学畸变,为了避免光学畸变造成的误差,需要对摄像头的参数进行标定。Ros提供我们一个用于双目和单目摄像头标定的功能包camera_calibration。
根据上述技术方案,上述步骤二中,查看三维点云数据中,对应于rviz中add可视化插件时选择的插件类型的具体结构,如果使用分布式网络传播,在宽带有限的情况下,考虑数据传输是否满足要求或数据压缩。
根据上述技术方案,上述步骤三中,对摄像头的参数进行标定,安装摄像头标定包,安装完成后在终端输入以下命令启动USB摄像头,启动标定程序。
根据上述技术方案,在上述步骤四中,安装OpenCV库,ROS提供的cv_bridge功能包能够与OpenCV进行交接,cv_bridge功能包可以将ROS图像信息转换为OpenCV中的图像,并可以通过opencv库生成不同的图像。
根据上述技术方案,在上述步骤五中,利用左侧的cv_bridge将OpenCV图像中的图像转换成ROS,并显示效果,通过opencv库,在图像的左上角绘制一个红色圆圈。
根据上述技术方案,上述步骤四中,摄像头自动检测出多个物体并自动抓取目标,如果目标是移动方框也会一直跟踪,通过彩色摄像头获取图像信息,并通过骨骼追踪将骨骼叠加在图像上,通过景深摄像头获取的景深信息,也在图上叠加了骨骼信息,通过对比可以发现,深度图像不同于RGB图像,它的捕捉不受灯光环境的限制,这样更有利于使机器人适用于各种复杂的环境,使机器人在进行深度信息的采集时,提高了自己的抗干扰能力。
根据上述技术方案,上述步骤五中,运行成功后打开rviz界面中看到摄像头信息,主界面中还有word和cemera两个坐标系的显示,将二维码放置到摄像头的视野范围内,可以看到识别结果,在显示的图像中,看到多个二维码被同时准确识别出来,ar_track_alvar功能包可以读取图像中的二维码信息还可以确定二维码的空间位置,一帧720x 1280分辨率的图像数据量就是2.76MB,如果按照30帧1秒的帧率计算,那么一秒钟摄像头产生的数据量就高达82.944MB,这个数据量在实际应用中是接受不了的,尤其是在远程传输图像的场景中,图像占用的带宽过大,会对无线网络造成很大压力。实际应用中,图像在传输前往往会进行压缩处理。
与现有技术相比,本发明所达到的有益效果是:本发明,
在Ubuntu中通过OpenCV以及Kinect深度摄像头来获取并显示物体深度图像的方法,并把这种方法使用在机器人视觉系统当中,实验结果表明,此方法可以大大减少图像深度信息提取的工作量。
附图说明
附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。在附图中:
图1是本发明的cv_bridge功能包的作用示意图;
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
请参阅图1,本发明提供技术方案:利用KINECT实现无人车视觉的方法,包括步骤一,下载相应的驱动包,Kinect在Linux下有一个开源的驱动包freenect,Ros针对此驱动包也有相应的功能包:freenect_camera,安装完驱动包后可以运行freenect,launch文件来启动Kinect启动,Kinect主要由彩色相机、深度相机、指示灯以及四元麦克风阵列四部分组成,光学部分是由红外线发射器以及红外线摄像头组成,由红外线发射器发出红外线再由红外线摄像头接受发射的光线来捕捉人的肢体动作,它可以一秒捕捉30次,除此之外还有一个探测力度与深度的传感器,以及四个采集声音的麦克风;
步骤二,对摄像头的参数进行标定,Ros提供我们一个用于双目和单目摄像头标定的功能包camera_calibration,标定程序启动后,标定靶只要处于摄像头的视野范围内即可,Ros系统是开源的免费的,是一种点对点的操纵系统。它能够提供十分强大的功能包括程序的发行,程序之间的信息交互,底层驱动程序管理,它也提供一些工具和库来方便用户建立编写代码,以及运行,用户可以自行创建各种功能包和工作空间;
步骤三,标定程序启动后,处于摄像头的视野范围内,看到图形界面,上下左右移动旋转棋盘格,右边上部X,Y,Size,Skew表示各个方向标定进度,直到CALIBRATE呈绿色,标定结束并点击,这时后台计算标定数据,耐心等待几分钟后,下面的SAVE、CMMIT会变成绿色,表示后台计算完毕;
步骤四,调用回调函数,将图像转换成OpenCv的数据格式,在opencv里面创建灰度图像,创建平衡直方图,减少光线影响,之后检测人脸,OpenCV用C++语言编写,它的主要接口也是C++语言,但是依然保留了大量的C语言接口,该库也有大量的Python、Java andMATLAB/OCTAVE(版本2.5)的接口,这些语言的API接口函数可以通过在线文档获得,如今也提供对于C#、Ch、Ruby,GO的支持,ROS提供的cv_bridge功能包能够与OpenCV进行交接,cv_bridge功能包可以将ROS图像信息转换为OpenCV中的图像,并可以通过opencv库生成不同的图像;
步骤五,用ros里的ar_track_alvar功能包来创建与识别二维码,运行成功后可以打开rviz界面中看到摄像头信息,主界面中还有word和cemera两个坐标系的显示,现在将二维码放置到摄像头的视野范围内,可以看到识别结果;
步骤六,在模型库创建完毕后,需要对这些模型进行数据训练,生成识别需要的匹配模板,在终端中分别启动Kinect、三维物体识别和rviz可视化界面,如果Kinect范围内有可乐罐就会出现画面;
步骤七,对可乐罐的识别是使用linemod算法,基于可乐罐模板匹配算法,将训练过的可乐罐模型于数据库中的模板进行对比随后识别出可乐罐模型,目标跟踪就是在序列图像不同时刻检测到的目标之间根据目标的某些特征在时间上建立起联系,通俗一点说就是跟踪上的目标在图像序列的不同帧里,始终赋予稳定一致的编号,目标跟踪在计算机视觉领域里是一个充满挑战的问题,在视频分析领域,对多个目标跟踪的主要困难是在相邻两帧间建立起目标正确的关联关系,尤其是在复杂场景里多个相似目标之间存在遮挡、合并分离等情况时,确定目标之间的正确对应关系变得很困难。使用以下命令启动usb摄像头,然后启动物体跟踪例程,摄像头自动检测出多个物体并自动抓取目标,如果目标移动方框也会一直跟踪,物体跟踪与检测是有区别的简单来说,检测是针对特定的目标,而跟踪无需确切知道跟踪的是什么,它们应用场景不太一样,比如签到时合适用人脸识别,抓嫌疑人时合适用人体跟踪等,它们的联系,有不少的实际应用都是检测+跟踪,这个系统就是特定跟踪,特定跟踪一来更适合某些实际场景;
上述步骤二中,连接USB摄像头到PC端的USB接口,启动摄像头,查看当前系统中的图像话题信息,摄像头是精密仪器,其对光学器件的要求较高,因为摄像头与外界一些原因,所生成的图像可能会产生光学畸变,为了避免光学畸变造成的误差,需要对摄像头的参数进行标定。Ros提供我们一个用于双目和单目摄像头标定的功能包camera_calibration;
在上述步骤二中,查看三维点云数据中,对应于rviz中add可视化插件时选择的插件类型的具体结构,如果使用分布式网络传播,在宽带有限的情况下,考虑数据传输是否满足要求或数据压缩;
在上述步骤三中,对摄像头的参数进行标定,安装摄像头标定包,安装完成后在终端输入以下命令启动USB摄像头,启动标定程序;
在上述步骤四中,安装OpenCV库,ROS提供的cv_bridge功能包能够与OpenCV进行交接,cv_bridge功能包可以将ROS图像信息转换为OpenCV中的图像,并可以通过opencv库生成不同的图像;
在上述步骤五中,利用左侧的cv_bridge将OpenCV图像中的图像转换成ROS,并显示效果,通过opencv库,在图像的左上角绘制一个红色圆圈;
上述步骤四中,摄像头自动检测出多个物体并自动抓取目标,如果目标是移动方框也会一直跟踪,通过彩色摄像头获取图像信息,并通过骨骼追踪将骨骼叠加在图像上,通过景深摄像头获取的景深信息,也在图上叠加了骨骼信息,通过对比可以发现,深度图像不同于RGB图像,它的捕捉不受灯光环境的限制,这样更有利于使机器人适用于各种复杂的环境,使机器人在进行深度信息的采集时,提高了自己的抗干扰能力;
上述步骤五中,运行成功后打开rviz界面中看到摄像头信息,主界面中还有word和cemera两个坐标系的显示,将二维码放置到摄像头的视野范围内,可以看到识别结果,在显示的图像中,看到多个二维码被同时准确识别出来,ar_track_alvar功能包可以读取图像中的二维码信息还可以确定二维码的空间位置,一帧720x 1280分辨率的图像数据量就是2.76MB,如果按照30帧1秒的帧率计算,那么一秒钟摄像头产生的数据量就高达82.944MB,这个数据量在实际应用中是接受不了的,尤其是在远程传输图像的场景中,图像占用的带宽过大,会对无线网络造成很大压力。实际应用中,图像在传输前往往会进行压缩处理。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。
最后应说明的是:以上所述仅为本发明的优选实施例而已,并不用于限制本发明,尽管参照前述实施例对本发明进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。