视觉C-部分技术文档

颜色形状识别

以提取摄像头视野中的红色圆形为例,在颜色识别脚本中实现了一个拓展类,该拓展类继承了ros和opencv集合的基类。

首先,cvtColor函数将摄像头采集到的图像从BGR 空间转化为 HSV 空间,HSV 是颜色空间模型,在这个空间里颜色连续,容易区分。

其次采用inRang二值化函数,将在颜色阈值内的像素值设置黑色(0),阈值外的设置为白色(255),从而区分出某个特定颜色。

再利用bitwise_and 与函数,将两张图像黑色区域合并。

接着利用滤波函数滤除噪点,进一步采用连续的开闭运算函数平滑集合区域;

最后采用霍夫变换函数,在一张灰度图中识别出期望图形。

最终的实现效果如下:

 

图1  摄像头视野中的红色圆                                               图2 灰度图        

基于opencv的人脸识别

要想正确识别出是谁,首先要具备提取出人脸的能力,及正确识别出人脸所在位置。

2001 年,Viola 和 Jones 提出了基于 Haar 特征的级联分类器对象检测算法,并在 2002 年由 Lienhart 和Maydt 进行改进,为快速、可靠的人脸检测应用提供了一种有效方法。OpenCV 已经集成了该算法的开源实现,利用大量样本的 Haar 特征进行分类器训练,然后调用训练好的瀑布级联分类器 cascade 进行模式匹配。

  为实现人脸检测,首先应生成继承类以继承ROS 与 Opencv 接口类,

利用核心函数detectMultiScale提取出视屏中的人脸,其反馈值是由多个数组组成的 faces,每个数组代表人脸在当前图像中的位置(x,y,w,h)分别代表人脸框的左上角点的坐标,人脸框的宽度和长度。

人脸检测效果如下:

图3 人脸检测效果展示

基于 kcf 的目标跟踪

基于 ros 与单目相机的目标跟踪功能主要由opencv 的 kcf 跟踪算法,卡尔曼滤波算法实现。在目标识别脚本中,首先应生成继承类继承ROS_OPENCV 基类的功能与函数,接着生成opencv 库中的 KCF 跟踪器,卡尔曼滤波器及其参数。在追踪函数中,通过 kcf 跟踪器实现目标的跟踪,然后通过卡尔曼滤波器锁定目标中心,可以看到输出的目标点。

在连接摄像头后,选择要跟踪的目标,可以看到跟踪效果如下:

图4 目标跟踪效果展示

自主导航

通过gmapping实现小规模建图、调整机器人初始位姿后,即可开始导航。

导航功能的实现主要是依靠 navigation 功能包集来完成的,navigation 是 2D 的导航包集,它通过接收里程计数据、tf坐标变换树以及传感器数据,为移动机器人输出目标位置以及安全速度。

图5 导航流程图

导航功能的核心是 move_base 节点,它接收来自里程计消息、机器人姿态位置、地图数据等信息,在节点内会进行全局规划以及局部规划。其中局部规划是为了能在导航过程中随时根据环境的改变来改变自己的路径,达到自动避障的效果。

导航功能的实现首先要有的三个因素就是地图、导航的起点、终点目标,并在导航过程中不断根据里程计、激光雷达等传感器数据来确定自己的位置。在 navigation 导航功能中,首先会根据代价地图规划处起点到终点的路线,然后结合里程计信息以及激光雷达的数据判断当前位置并规划处当前位置附近的局部路线以达到避障的效果。最终将局部规划的路线以速度指令的形式输出。

图6 导航效果展示

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值