前言

近期我省举办的机器人大赛刚刚落下帷幕,有幸参与其中的NAO机器人点球比赛,凭借着较好的运气取得了吉林省第一名。本文将从比赛的各个方面讲述所用程序及策略,所用程序代码如有不足之处,以及更好的逻辑优化,欢迎大家在评论区留言。

本文章不提供源代码,仅提供部分核心代码供大家交流学习。

完整代码链接:
https://download.csdn.net/download/Clearlove7_/13701931

NAO机器人点球比赛简介

简而言之,就是队伍分别担任进攻方和防守方,进攻方共三次机会,每次进球记一分,最后以得分数判别胜负。进攻方要求只能触球一次;守方无限制。并要求机器人具备识别足球的功能。

使用环境

  1. python2.7(为了适应NAOqi库)
  2. NAOqi(本文不再过多介绍,更多信息请查阅我的前几篇文章)
  3. opencv

策略分析

  1. 由于比赛使用的是8mm的绿色草坪,NAO会由于草坪出现走路不稳的情况,我们采用了使用海报纸将nao机器人的脚包起来,降低机器人脚部与地面的摩擦,使机器人能在草坪上正常移动。
  2. 第二点,也是最重要的一点,所有的一切都是建立在让机器人成功识别的前提下进行的 。这里我们使用的是opencv中的霍夫圆检测搭配naoqi中的“ALVideoDevice”模块来调用nao的摄像头。这一点会在后面详细说明。
  3. 在机器人识别成功并且走到球附近后,根据球的相对位置,控制机器人进行微调,然后调用Choregraphe中预设好踢球的程序,完成一整套进攻的流程。
  4. 防守策略目前是使用Choregraphe直接控制机器人,根据场上局势控制机器人左、右走。

代码模块分析

项目的目录结构如下:

主要分为 机器人控制模块、工具包、机器人视觉模块、以及主模块。

机器人控制模块

控制模块的主要功能是:
1.通过naoqi的ALMotion模块,对机器人的关节角度进行控制,在整个程序中主要用在机器人头部的复位上。

2.通过naoqi完成对机器人本身已经预设好的程序的调用。

核心代码

对机器人某关节角度进行控制的函数,第一个参数为一个ALMotion代理,第二个为关节名,第三个为转到的目标角度,默认速度被我设为0.2。
关于NAO机器人以及API文档的使用请翻看我的上几个博客。

接下来是本程序的两个最核心部分之一,通过python调用机器人中预设好的程序。
代码如下:(此部分封装在一个继承自threading.Thread的类的构造函数中)


然后我们封装一个方法,方便我们在主函数中调用:

工具包

工具包中包括两个模块,第一个模块用于掩膜操作(详情查看我的上一篇文章),第二个模块通过ALVideoDevice代理来获得机器人传回的图片,一帧一帧组合形成视频流。

核心部分如下:

视觉模块

第二个最核心的部分就是视觉模块。本模块主要是在我在第一篇文章中的霍夫圆检测识别红球程序之上,更改了筛选球颜色的阈值(通过掩膜操作以及图片拼接所得到)所得到,在绿色草坪上的识别成功率极高。
拼接部分核心程序:

其中重要方法霍夫圆检测,各参数具体如下:

cv2.HoughCircles(image, method, dp, minDist, circles, param1, param2, minRadius, maxRadius)

image:为输入图像,需要灰度图,程序中传入的为经过一系列预处理的图像(平滑去噪后的图像)

method:为检测方法, 常用为CV_HOUGH_GRADIENT

dp:为检测内侧圆心的累加器图像的分辨率于输入图像之比的倒数,如dp=1,累加器和输入图像具有相同的分辨率,如果dp=2,累计器便有输入图像一半那么大的宽度和高度

minDist:表示两个圆之间圆心的最小距离

param1:有默认值100,它是method设置的检测方法的对应的参数,对当前唯一的方法霍夫梯度法cv2.HOUGH_GRADIENT,它表示传递给canny边缘检测算子的高阈值,而低阈值为高阈值的一半

param2:有默认值100,它是method设置的检测方法的对应的参数,对当前唯一的方法霍夫梯度法cv2.HOUGH_GRADIENT,它表示在检测阶段圆心的累加器阈值,它越小,就越可以检测到更多根本不存在的圆,而它越大的话,能通过检测的圆就更加接近完美的圆形了

minRadius:有默认值0,圆半径的最小值

maxRadius:有默认值0,圆半径的最大值

单位为像素(px)。

主函数模块

主函数的功能主要是将各个单独的模块关联到一起,以及在识别到球以后的机器人微调的策略问题。
在我们完成了对足球的识别后,需要机器人根据球的相对位置,进行简单的调整;我们在比赛中使用的是一种没有用到测距,较为取巧的一种方法:

我将图片划分成了四个区域,根据圆心的坐标位置(opencv图像中的坐标位置在我的上一篇文章中提到过),来决定机器人移动的距离。(机器人的移动通过ALMotion模块下的moveTo()方法实现)

核心代码如下,具体参数的值请根据实际情况进行调整。

结语

看着码了好久的文章,沉默了好久,这可能是我关于NAO这边的最后一篇文章了,以后的精力可能要更多的放在考研和深度学习这方面了。但还是很感激这个小破机器人的,在摆弄他的时候真的是对我的技术的一种磨练(痛苦的查API文档,以及python语言一点点适应,可以说刚开始学python就是为了给它服务吧,但现在已经不打算继续发展下去了)。写这些文章即是对自己这两年来学习NAO相关知识的一个交代,又算是对我的协会成员们的一个交代吧。
就这样。

年更博主,可以先关注上,以后不定期更新

最后,放一张小NAO的图片

python OpenCV与NAOqi库在机器人点球比赛中的应用相关推荐

  1. 使用Python+OpenCV+Tensorflow+Flask实现检测X光图像中的COVID-19(新冠病毒)

    免责声明 本研究是为X光图像中COVID-19的自动检测而开发的,完全是为了教育目的.由于COVID-19没有经过专业或学术评估,最终的应用并不打算成为一个准确的用于诊断人类的COVID-19诊断系统 ...

  2. python下医学图像处理库的安装问题(更新中)

    1. pip install dipy:DIPY is a python toolbox for analysis of MR diffusion imaging. 2. pip install ni ...

  3. Python+OpenCV 实现Farneback光流法从RGB图像序列中提取光流

    写在前面:   前段时间处理行为识别的数据集要做对比实验,久违的又用到了光流图像,这篇把生成光流图像的代码存一下.   首先,我们用到的是Farneback光流法提取图像序列间的光流特征,这个算法在O ...

  4. python+OpenCV图像处理(十二)车牌定位中对图像的形态学组合操作处理

    车牌定位中对图像的形态学组合操作处理 所谓的车牌定位,其中最关键的部分就是对图片的处理,参数的设置,并使之拥有泛化能力. 首先传入图片,在进行大规模的图片处理时,因为无法确定图片的尺寸,所以需要将原始 ...

  5. Python+OpenCV教程5:颜色空间转换 追踪视频中特定颜色的物体 消除票据中的红色印章

    目标 颜色空间转换,如BGR↔Gray,BGR↔HSV等 追踪视频中特定颜色的物体 OpenCV函数:cv2.cvtColor(),cv2.inRange() 消除票据中的红色印章 教程 颜色空间转换 ...

  6. python调用海康威视sdk库_HikVision SDK: C++ 至 Python

    海康威视(HikVision)在视频解决方案的地位毋庸置疑,起码属于国内业界顶尖水平.选择他家设备主要有两个原因:首要是因为他家产品贵,这确实是选择的首要原因(毕竟经费是--咳,打住):另一个重要原因 ...

  7. python+opencv车道线检测(简易实现)

    python+opencv车道线检测(简易实现) 技术栈:python+opencv 实现思路: canny边缘检测获取图中的边缘信息: 霍夫变换寻找图中直线: 绘制梯形感兴趣区域获得车前范围: 得到 ...

  8. 机器人足球仿真中的三角进攻算法研究

    摘 要:机器人足球仿真系统提供了实时对抗环境下研究多智能体协作问题的一个良好平台.本文基于仿真环境下的理论基础及模型,通过逐场次逐帧地测试与分析研究,设计出用于控制机器人协作队形的三角进攻算法,并对基 ...

  9. python机器人库_机器人之实战深度学习(上)OpenCV库

    本文主要向大家介绍了机器人之实战深度学习(上)OpenCV库,通过具体的内容向大家展现,希望对大家学习机器人有所帮助. 在如今人工智能的浪潮下,无数模拟机器学习和深度学习的开发者工具倍出,其中在计算机 ...

最新文章

  1. list,set,map,数组间的相互转换
  2. 《算法设计手册》面试题解答 第四章:排序和搜索
  3. Facebook 开源的快速文本分类器 FastTex
  4. PHP允许输入负数,php exec在linux中返回值不能为负数
  5. J-Rooms及时会议室 v4.5.5333.1104
  6. python内置类型和类_python – 内置类型和用户定义之间的不一致
  7. 用友 NCC 1909 授权许可+无密码登录方法
  8. 淘宝天猫融合能拉回“出淘”的用户吗?
  9. 【转载】怎样编写CSS?
  10. 元组定义 元组运算符
  11. 虚拟手游服务器,自己搭建手机游戏服务器
  12. 大厂内推的一些套路--校招、初中级社招
  13. C语言数组——一维数组实例详解
  14. 鹿晗关晓彤公布恋情微博服务器崩了,程序员结婚当天加班
  15. ACRO2010__系统性综述: 达到缓解的AS患者能否停用TNF拮抗剂
  16. Ubuntu 14.04刷机时报错_BROM ERROR : S_UNDEFINED_ERROR (1001)
  17. 解密!看蚂蚁金服智能调度技术如何优化客服中心资源调配
  18. zuul灰度发布功能实现
  19. 如何成为一名全栈开发人员
  20. 同桌之间那些或暧昧或有趣的事

热门文章

  1. 【Unity3D日常开发】灯光系统,太阳光晕效果实现
  2. 虚拟存储页面置换算法c语言,虚拟存储器管理页面置换算法模拟实验.doc
  3. 阿里EasyExcel对Excel复杂模版填充实现并设置单元格格式
  4. 排列奇偶性与排序的关系
  5. TFN TT70网络综合分析仪性能如何
  6. DDD-领域驱动设计包结构
  7. node.js+uniapp计算机毕业设计安卓在线民宿预定app(程序+APP+LW)
  8. 【drawio笔记】在图表中添加和删除图层
  9. 网络上找不到共享的计算机,找不到局域网中的共享电脑
  10. 融入动画技术的交互应用优秀作业推荐