天天看点

【机器视觉系统】基于3DOF机械臂的五子棋机器人(1)基于3DOF机械臂的五子棋机器人

基于3DOF机械臂的五子棋机器人

文章目录

  • 基于3DOF机械臂的五子棋机器人
    • 1. 前言
    • 2. 机器视觉系统概述
      • 2.1 机器
      • 2.2 视觉
      • 2.3 系统
    • 3. 系统组成概述
      • 3.1 使用工具盘点
      • 3.2 流程图
    • 4. 制作步骤建议
    • 5. 需要的知识及参考资料推荐
      • 5.1 机械设计部分
      • 5.2 下位机控制与控制原理部分
      • 5.3 视觉部分
      • 5.4 上位机部分
    • 6. 参考资料

1. 前言

  2020年因为疫情,全国大学都不开学,差不多在家里呆了大半年吧,因为不想无所事事,所以杂七杂八的学了很多东西。到6月份的时候,因为我是毕业生,需要回学校办理一些毕业事项和离校手续,就在学校进行封闭式隔离。说真的,在学校的日子实在是挺无聊的,啥事也不能干,因为恰好学了学c++和opencv,所以就想做点东西,最后就搞了个软件层面的,能人机交互的五子棋系统。大搞也就写了一个多星期吧。

【机器视觉系统】基于3DOF机械臂的五子棋机器人(1)基于3DOF机械臂的五子棋机器人

软件五子棋

  因为碰巧看了一些做五子棋机器人的视频,后来就一直心理念念不忘,想搞个硬件和机械层面的五子棋机器人。于是从七月开始就一直在着手策划了,零零散散,断断续续的做着,正好11月1号完工了,前前后后可能花费了大约4个月的时间吧,最后决定写个五子棋机器人系列的文章,做个总结,也希望告诉其他人应该怎么做这个事情,打算不但把自己成功的一些方法写进来,也把失败和遇到的一些问题写进来。有时候出现的问题可能更加具有参考价值。

  这篇文章就写个系统概述,说一说这个系统都包括了什么,需要什么基础知识,以及怎么做。后面大概会写机械结构怎么设计,设计的时候应该注意什么问题;下位机怎么开发,如何通过运动学逆解求解舵机的角度,怎么通过轨迹规划,使得运动更加平滑;上位机如何开发,怎么识别棋盘和棋子;五子棋的软件层面是什么逻辑;如何通过串口通讯把系统组合起来;以及一些涉及到手工制作的东西怎么做。

  不过吧,这里也要说一句,我确实不是学相关专业的人士,我学和做这些个东西,算是个业余爱好吧,要是有哪里说得不专业了,请各位网友包涵哈!

  顺便让五子棋机器人系统亮个相。

【机器视觉系统】基于3DOF机械臂的五子棋机器人(1)基于3DOF机械臂的五子棋机器人

五子棋机器人整体图

2. 机器视觉系统概述

  机器视觉系统[1],从字面意思看,主要包括机器、视觉和系统三个部分。

2.1 机器

  机器就是指机械的结构设计和运动控制,机械结构就比如这里的机械臂,运动控制可以使用单片机、PLC等进行控制。

【机器视觉系统】基于3DOF机械臂的五子棋机器人(1)基于3DOF机械臂的五子棋机器人

机械臂

2.2 视觉

  视觉部分是机器的眼睛,为了能够看机器正常工作,就必须能够让他看到环境的状态,包括光源和摄像头。只有营造好良好的视觉系统,才能够有良好的图片输入,如果图片质量比较高的话,软件层面的图像处理就会比较顺利。光源主要目的是为了照明,提供足够的亮度,同时光源的布置必须注意光照均匀、尽量减少系统的反光,不然图片处理层面比较难解决。光源包括点光源、线光源、平行光源等。不过我的系统里面没有专门的光源。

【机器视觉系统】基于3DOF机械臂的五子棋机器人(1)基于3DOF机械臂的五子棋机器人

  摄像头包括usb摄像头、工业摄像头等,主要用来把光信号转换为计算机能够处理的电信号。usb摄像头价格比较低,但是会产生一些图像畸变的问题。同时,如果在摄像头前面增加合适的镜片,可以对光进行一些预处理。比如有些usb镜头视野比较小,可以增加广角镜头;光源处理不当平面有反光,可以选择增加偏振光滤光镜头;比如光强太大,可以用中性灰度镜减少光线的整体输入。

【机器视觉系统】基于3DOF机械臂的五子棋机器人(1)基于3DOF机械臂的五子棋机器人

usb摄像头

【机器视觉系统】基于3DOF机械臂的五子棋机器人(1)基于3DOF机械臂的五子棋机器人

偏振光滤光片

2.3 系统

  系统主要是指软件层面的东西。如果说视觉是机器的眼睛的话,系统就是机器的大脑。从视觉系统中获取到的图片,传送给电脑,在电脑端进行图像的处理,将处理得到的结果传递给下位机,即可控制执行部件完成指定的功能。

3. 系统组成概述

3.1 使用工具盘点

  在视觉部分,我并没有专门配备光源。摄像头选择了最普通的usb摄像头,还是有一点点模糊的。摄像头通过USB接口连接到电脑,构成了系统的输入部分。如果不希望电脑连接很多线的话,也可了利用wifi技术,购买带有wifi图传功能的摄像头模块,在电脑端写一个套接字接收图片即可。

【机器视觉系统】基于3DOF机械臂的五子棋机器人(1)基于3DOF机械臂的五子棋机器人

自己造的摄像头

  有了输入部分之后,就需要有处理部分了。处理部分就是PC机。我的上位机开发环境是VS2019+opencv 3.4.9,编程语言使用的是c++。计算机通过usb接口,读取摄像头采集到的图片,通过opencv对图片进行预处理,对摄像头读取的图片进行识别,读取得到了网格线的像素坐标,以及棋子的坐标。将棋局信息送入五子棋裁决部分,即可解析得到落子点,将落子点返回给下位机即可完成自己的任务。

  最后是执行部分。执行部分的机械结构是吸盘机械臂,通过大气压吸取棋子,完成棋子的拿取和放下的动作。控制部分使用的是arduino nano和配套的舵机控制板。arduino通过串口数据线,获取上位机来的指令,通过运动学的逆解,将坐标信息解析为舵机的关节角,即可驱动机械臂拾取棋子。如果不希望通过数据线连接电脑进行数据交换,可以使用wifi或者蓝牙模块进行数据的交互。

【机器视觉系统】基于3DOF机械臂的五子棋机器人(1)基于3DOF机械臂的五子棋机器人

机械设计

【机器视觉系统】基于3DOF机械臂的五子棋机器人(1)基于3DOF机械臂的五子棋机器人

arduino nano

  其余还用到了一些东西就比如自己制作的棋盘,购买的棋子以及整个系统的固定底座了。

【机器视觉系统】基于3DOF机械臂的五子棋机器人(1)基于3DOF机械臂的五子棋机器人

棋盘和棋子

【机器视觉系统】基于3DOF机械臂的五子棋机器人(1)基于3DOF机械臂的五子棋机器人

CAD画的底板

3.2 流程图

【机器视觉系统】基于3DOF机械臂的五子棋机器人(1)基于3DOF机械臂的五子棋机器人

4. 制作步骤建议

  关于制作步骤,我个人的想法是

(1)多看看别人是怎么做的,了解整个系统架构。我是在b站看了看别人怎么设计的,采用差不多的路子做的。

(2) 购买一个比较简单的机械臂了解一下结构和原理,并进行结构设计,或者购买现成的,省去这一步。如果想作为参考物的话,淘宝这种木质的就很好,因为非常便宜。

【机器视觉系统】基于3DOF机械臂的五子棋机器人(1)基于3DOF机械臂的五子棋机器人

(3) 熟悉arduino的使用和舵机的控制方法

(4) 完成运动学正逆解和轨迹规划,完成拾取一些小物件的功能。

【机器视觉系统】基于3DOF机械臂的五子棋机器人(1)基于3DOF机械臂的五子棋机器人

拾取棋子

(5) 制作或者购买棋子和棋盘,完成网格识别和棋子识别,使得电脑端能够根据图片输出棋盘的数据。

(6) 完成五子棋算法。实现在棋盘上下棋,电脑能够自动给出对应手,并绘制在棋盘上

(7) 完成串口通讯部分,使得上位机和下位机之间能够交互

(8) 固定各个部件位置,比如制作底板。

(9) 进行最后的综合测试。

5. 需要的知识及参考资料推荐

  下面这些参考资料是我看完了的,感觉不错的,可以根据需要选取。

5.1 机械设计部分

  (1) Solidworks 推荐视频“solidworks 从入门到精通” ,用来绘制整个机械臂结构的,建议全看完

https://www.bilibili.com/video/BV1nW411Y7W7

  (2)CAD二维设计 推荐视频“CAD 2018快速入门教程”,用来绘制底板的,因为亚克力切割淘宝需要cad的文件。https://www.bilibili.com/video/BV13t411i7c8

  (3) CAD三维设计 推荐视频"CAD三维建模完全自学教程",如果有三维亚克力设计需求的,继续看三维设计视频。这个三维视频比较一般般吧,有更好的可以找更好的https://www.bilibili.com/video/BV12E41167UD

  (4) grabCAD网站有很多机械臂开源图纸,也可以参考,强烈推荐这个网站https://grabcad.com/

5.2 下位机控制与控制原理部分

  (1) Arduino 推荐一本书 “Arduino编程指南个智能硬件程序设计技巧Simon Monk 人民邮电出版社” ,这本书里面讲了一些比较深入的设计方法,比较有趣。如果没有时间全看一本书,稍微了解arduino使用方法、舵机控制原理、库封装方法也够了。

  (2) 运动学逆解推荐一本书 《机器人学导论》作者:[美]约翰·克雷格,推荐网课 台大机器人学–林沛群https://www.bilibili.com/video/BV1v4411H7ez。不过如果你只是使用三自由度机械臂,并且没有深入学习的欲望,这本书可以跳过不看,不使用线性代数的方法,可以使用几何方法进行解析。

如果想更加深入的了解机械臂怎么精确控制,这是本非常经典的书

  (3) 如果要看机器人学导论的话,需要先修线性代数,推荐书籍 《线性代数及其应用》 作者:戴维.c.雷 ,推荐搭配网课 MIT 线性代数 一起阅读https://www.bilibili.com/video/BV1zx411g7gq

5.3 视觉部分

  (1) opencv ,推荐书籍《opencv3编程入门》作者:毛星云。 推荐两个up的视频搭配一起看,致敬大神https://www.bilibili.com/video/BV1jJ411M7Bo,会飞的吴克https://space.bilibili.com/14672002?spm_id_from=333.788.b_765f7570696e666f.2

书建议全部看完,因为你会有更多解决图像中出现问题的思路

5.4 上位机部分

  (1) c++。如果只是想入门的话,看一下"翁恺C++语言程序编程全系列"足够了https://www.bilibili.com/video/BV1j7411L7kL,需要有c语言基础。

  除此之外,我还看完了《essential c++》和《c++ primer》。读c++ primer可以配网课一起看 :

  • C++ Primer 初级(C++基础) https://www.bilibili.com/video/BV1P7411k7Km、
  • C++ Primer 中级(oop)https://www.bilibili.com/video/BV1A7411k7MD、
  • C++ Primer高级(stl及算法) https://www.bilibili.com/video/BV1A7411k7mv

6. 参考资料

[1]机器视觉系统有哪些部分组成

继续阅读