【机器视觉系统】基于3DOF机械臂的五子棋机器人(1)
基于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,所以就想做点东西,最后就搞了个软件层面的,能人机交互的五子棋系统。大搞也就写了一个多星期吧。
软件五子棋
因为碰巧看了一些做五子棋机器人的视频,后来就一直心理念念不忘,想搞个硬件和机械层面的五子棋机器人。于是从七月开始就一直在着手策划了,零零散散,断断续续的做着,正好11月1号完工了,前前后后可能花费了大约4个月的时间吧,最后决定写个五子棋机器人系列的文章,做个总结,也希望告诉其他人应该怎么做这个事情,打算不但把自己成功的一些方法写进来,也把失败和遇到的一些问题写进来。有时候出现的问题可能更加具有参考价值。
这篇文章就写个系统概述,说一说这个系统都包括了什么,需要什么基础知识,以及怎么做。后面大概会写机械结构怎么设计,设计的时候应该注意什么问题;下位机怎么开发,如何通过运动学逆解求解舵机的角度,怎么通过轨迹规划,使得运动更加平滑;上位机如何开发,怎么识别棋盘和棋子;五子棋的软件层面是什么逻辑;如何通过串口通讯把系统组合起来;以及一些涉及到手工制作的东西怎么做。
不过吧,这里也要说一句,我确实不是学相关专业的人士,我学和做这些个东西,算是个业余爱好吧,要是有哪里说得不专业了,请各位网友包涵哈!
顺便让五子棋机器人系统亮个相。
五子棋机器人整体图
2. 机器视觉系统概述
机器视觉系统[1],从字面意思看,主要包括机器、视觉和系统三个部分。
2.1 机器
机器就是指机械的结构设计和运动控制,机械结构就比如这里的机械臂,运动控制可以使用单片机、PLC等进行控制。
机械臂
2.2 视觉
视觉部分是机器的眼睛,为了能够看机器正常工作,就必须能够让他看到环境的状态,包括光源和摄像头。只有营造好良好的视觉系统,才能够有良好的图片输入,如果图片质量比较高的话,软件层面的图像处理就会比较顺利。光源主要目的是为了照明,提供足够的亮度,同时光源的布置必须注意光照均匀、尽量减少系统的反光,不然图片处理层面比较难解决。光源包括点光源、线光源、平行光源等。不过我的系统里面没有专门的光源。
摄像头包括usb摄像头、工业摄像头等,主要用来把光信号转换为计算机能够处理的电信号。usb摄像头价格比较低,但是会产生一些图像畸变的问题。同时,如果在摄像头前面增加合适的镜片,可以对光进行一些预处理。比如有些usb镜头视野比较小,可以增加广角镜头;光源处理不当平面有反光,可以选择增加偏振光滤光镜头;比如光强太大,可以用中性灰度镜减少光线的整体输入。
usb摄像头
偏振光滤光片
2.3 系统
系统主要是指软件层面的东西。如果说视觉是机器的眼睛的话,系统就是机器的大脑。从视觉系统中获取到的图片,传送给电脑,在电脑端进行图像的处理,将处理得到的结果传递给下位机,即可控制执行部件完成指定的功能。
3. 系统组成概述
3.1 使用工具盘点
在视觉部分,我并没有专门配备光源。摄像头选择了最普通的usb摄像头,还是有一点点模糊的。摄像头通过USB接口连接到电脑,构成了系统的输入部分。如果不希望电脑连接很多线的话,也可了利用wifi技术,购买带有wifi图传功能的摄像头模块,在电脑端写一个套接字接收图片即可。
自己造的摄像头
有了输入部分之后,就需要有处理部分了。处理部分就是PC机。我的上位机开发环境是VS2019+opencv 3.4.9,编程语言使用的是c++。计算机通过usb接口,读取摄像头采集到的图片,通过opencv对图片进行预处理,对摄像头读取的图片进行识别,读取得到了网格线的像素坐标,以及棋子的坐标。将棋局信息送入五子棋裁决部分,即可解析得到落子点,将落子点返回给下位机即可完成自己的任务。
最后是执行部分。执行部分的机械结构是吸盘机械臂,通过大气压吸取棋子,完成棋子的拿取和放下的动作。控制部分使用的是arduino nano和配套的舵机控制板。arduino通过串口数据线,获取上位机来的指令,通过运动学的逆解,将坐标信息解析为舵机的关节角,即可驱动机械臂拾取棋子。如果不希望通过数据线连接电脑进行数据交换,可以使用wifi或者蓝牙模块进行数据的交互。
机械设计
arduino nano
其余还用到了一些东西就比如自己制作的棋盘,购买的棋子以及整个系统的固定底座了。
棋盘和棋子
CAD画的底板
3.2 流程图
4. 制作步骤建议
关于制作步骤,我个人的想法是
(1)多看看别人是怎么做的,了解整个系统架构。我是在b站看了看别人怎么设计的,采用差不多的路子做的。
(2) 购买一个比较简单的机械臂了解一下结构和原理,并进行结构设计,或者购买现成的,省去这一步。如果想作为参考物的话,淘宝这种木质的就很好,因为非常便宜。
(3) 熟悉arduino的使用和舵机的控制方法
(4) 完成运动学正逆解和轨迹规划,完成拾取一些小物件的功能。
拾取棋子
(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]机器视觉系统有哪些部分组成
【机器视觉系统】基于3DOF机械臂的五子棋机器人(1)相关推荐
- 基于机器视觉的多机械臂煤矸石分拣机器人系统研究
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 基于机器视觉的多机械臂煤矸石分拣机器人系统研究 王鹏1,2,曹现刚 ...
- UR机器人装箱姿态_UR10 RG2机械臂手臂+RealsenseZR300 机器人手眼标定 系列第四篇
UR10 RG2机械臂手臂+RealsenseZR300 机器人手眼标定 系列第四篇 发布时间:2018-09-18 17:43, 浏览次数:1180 , 标签: UR RG RealsenseZR ...
- delta机械臂,delta机器人,运动控制器,运动控制卡 本卡采用前瞻运动轨迹规划,运动采用G代码指令编程,具有G5三维空间的圆弧插补,空间直线插补功能
delta机械臂,delta机器人,运动控制器,运动控制卡 本卡采用前瞻运动轨迹规划,运动采用G代码指令编程,具有G5三维空间的圆弧插补,空间直线插补功能,子程序编程功能,逻辑判断语句功能,示教编程功 ...
- delta机械臂,delta机器人,运动控制器,运动控制卡
delta机械臂,delta机器人,运动控制器,运动控制卡 本卡采用前瞻运动轨迹规划,运动采用G代码指令编程,具有G5三维空间的圆弧插补,空间直线插补功能,子程序编程功能,逻辑判断语句功能,示教编程功 ...
- 机器人抓矸石_基于机器视觉的多机械臂煤矸石分拣机器人系统研究
工矿自动化 Industryand MineAutomation Vol. 45 No. 9 Sep.2019 第 45 卷第 9 期 2019 年 9 月 文章编号 : 1671 - 251X(20 ...
- 动作捕捉系统用于柔性机械臂的末端定位控制
柔性机械臂是一种新型仿生机械臂,其设计受到自然界中生物结构启发,比如象鼻.章鱼爪.蚯蚓和蛇等.与传统机械臂相比,柔性机械臂可以在材料变形范围内进行任意形状的弯曲运动,通过调整自身形态在狭小复杂的空间内 ...
- 【Nokov】动作捕捉系统标定与机械臂各坐标系的说明
导语:这一周的工作先是完成了度量系统Nokov的标定,然后对机械臂自身的编码器得到的坐标值与动作捕捉系统Nokov测得的坐标值进行了比较,来观察二者之间的误差.在这个过程中我对Nokov软件Seeke ...
- ur机械臂 控制器_UR机器人远程控制研究
UR 机器人远程控制研究* 刘宇航 1,2, 顾营迎 1, 乔冠宇 1,2, 刘宏伟 1, 吴清文 1 [摘 要] 摘 要 : 针对 UR 机器人的远程控制问题,设计了一种 UR 机器人的远 程控制方 ...
- ABB机械臂乱弹1-ABB机器人选项功能
ABBSystemOptions:选项功能 Industrial Networks 现场总线 709-1 DeviceNet Master/Slave 必备888-2 PROFINET Control ...
最新文章
- MS UC 2013-0-虚拟机-标准化-部署-2-模板机-制作-2-设置-虚拟机
- liunx下的DNS配置
- mysql怎么加全局锁_MySQL锁机制/管理(并发锁,行锁,表锁,预加锁,全局锁等等)
- 图论算法-图论的表示、分类及基本概念(系列1)
- Oracle10g数据库归档与非归档模式下的备份与恢复
- matlab如何excel数据,Matlab如何读取Excel里的数据
- SAP Spartacus build error之后的retrigger方式
- CentOS查询端口占用和清除端口占用的程序
- 2019/02/11-分布式数据库概述
- 在 Ubuntu 14.04 中配置 PXE 服务器
- 应用计算机技术建立起来的地图,地理信息系统的思考题及其答案
- vueRouter使用心得
- 使用grunt合并压缩js、css文件
- python爬虫如何连接数据库_Python爬虫框架和数据库连接
- RecyclerView更全解析之 为它优雅的添加头部和底部
- 浩海技术激活工具可激活Windows10系统和office
- 【C语言】输出“*”菱形图案
- vue 接入天地图并且在地图上画基站扇形覆盖物
- 罗素说理想与历程—幸福心灵的获取
- usaco3.2.7香甜的奶油
热门文章
- C/C++黑魔法-编译期运行的sizeof
- 对话驻云创始人 | 七问技术创业者(合辑)
- html div 虚线边框样式,纯CSS实现渐变虚线框和边框滚动动画
- 0x00007FF8DC013526(ntdll.dll) 处(位于XXX.exe中) 引发的异常 osg 0xC0000005: 读取位置 0xFFFFFFFFFFFFFFFF时发生访问
- 插入排序基本思路与算法
- 【CV】Mask R-CNN:用于目标实例分割的通用框架
- 什么是标称属性?什么是二元属性?什么是序数属性?
- c语言无符号整型除法,用位运算的方法实现无符号整数的除法,游戏编程 | 李大仁博客...
- mysql安装后目录介绍,MySQL安装后的目录结构及配置文件详解
- adb命令行打开Android settings