机械爪角度与距离之间的关系
■ 背景
在博文舵机控制的机械爪 测试了舵机机械爪的运动。由于多级的角度与给定的指令之间存在着伺服(角度负反馈闭环)控制关系,因此可以近似为一个线性控制关系。
舵机的角度与两个机械爪之间的距离可以通过几何分析得到理论之间的数值。由于该款机械爪本身使用塑料件注塑而成,配合相对粗糙,所以两个机械爪之间的距离与控制命令之间存在一定的误差噪声。
▲ 机械爪在命令控制下张开与闭合
下面通过图像处理的方式来获得实验拍摄到两个机械爪之间的距离,并给出指令与机械爪距离之间的数值关系。从而为后面该机械爪的使用和控制提供理论模型支撑。
01图像处理
1.基本方案
在两个机械爪上安放两块绿色塑料片,一方面提供图片测量两个机械爪之间距离的基准,另一方面也便于图像处理。在机械爪的下面铺设红色背景布,提高图像处理的对比度。
使用一个顶视的 HikVision网络摄像头 拍摄机械爪运动图片。由于该款监视摄像头视野具有一定的畸变,通过它拍摄的图片需要进行几何校正。在这里简便起见,就省去了空间校正的环节。
#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# TEST1.PY -- by Dr. ZhuoQing 2020-08-13
#
# Note:
#============================================================
from headm import *
from tsmodule.tsstm32 import *
setnum = linspace(80, 480, 200, endpoint=False)
printf(setnum)
gifid = 2
tspgiffirst(gifid)
for sn in setnum:stm32cmd('pwm %d'%sn)time.sleep(1)tspgifappend(gifid)printf(sn)
#------------------------------------------------------------
# END OF FILE : TEST1.PY
#============================================================
2.测量距离
(1) 获得边缘图
利用 Python Canny 函数获得图片中的边缘。通过调整阈值的大小,使得定位绿色塑料片的边缘呈现完整清晰。
▲ 使用Canny算法获得图片的边缘
(2) 所有采集到图形的边缘图
for f in range(filenumber):fn = os.path.join(filepath, '%04d.BMP'%f)img = cv2.imread(fn)[:,:,1]edges = cv2.Canny(img, sv1, sv2)
(3) 获得机械爪间距
#------------------------------------------------------------
def edgewidth(edge):edges = edge[320:350,:]edgesadd = sum(edges, 0)edgesadd = [int(s) for s in list(edgesadd > 0)]firstid = edgesadd.index(1) + 50endid = len(edgesadd) - edgesadd[::-1].index(1) - 50inneredge = edgesadd[firstid:endid]leftid = inneredge.index(1)rightid = len(inneredge) - inneredge[::-1].index(1)width = rightid - leftidreturn width
▲ 机械爪之间的距离的变化
02理论分析
以舵机输出轴作为原点,建立直角坐标系。假设舵机输出杆的长度为LLL,那么多级的输出角度Θ\ThetaΘ与两个机械爪之间的位移WWW之间的关系为:
▲ 机械爪运动坐标系
假设机械臂的各部分的参数为:
- L= 2 cm;
- M = 2.5cm;
下图是角度与机械爪间距之间的关系。
▲ 角度与机械爪之间的距离
对照前面实际测量的角度与机械爪距离之间的关系,可以看到他们之间的相似性。
03结果分析
机械爪之间的间距与角度之间通过理论分析和实际测量,他们在趋势上是相符的。但是实际测量的结果存在着误差:
- 来自于机械装配之间的随机抖动;
- 来自于舵机角度的起始位置与终止位置的误差;
※ 代码
#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# MEASURE1.PY -- by Dr. ZhuoQing 2020-08-13
#
# Note:
#============================================================from headm import *
from PIL import Image
import cv2
from tsmodule.tsdraw import *gifid = 2filename = tspgetdopfile(gifid)
filenumber = tspgetgifpage(gifid)
filepath = os.path.dirname(filename)#------------------------------------------------------------
def edgewidth(edge):edges = edge[320:350,:]edgesadd = sum(edges, 0)edgesadd = [int(s) for s in list(edgesadd > 0)]firstid = edgesadd.index(1) + 50endid = len(edgesadd) - edgesadd[::-1].index(1) - 50inneredge = edgesadd[firstid:endid]leftid = inneredge.index(1)rightid = len(inneredge) - inneredge[::-1].index(1)width = rightid - leftidreturn width#------------------------------------------------------------
'''img = cv2.imread(filename)[:,:,::-1]edges = cv2.Canny(img, 300, 400)[320:350,:]edgesadd = sum(edges, 0)edgesadd = [int(s) for s in list(edgesadd > 0)]firstid = edgesadd.index(1) + 50
endid = len(edgesadd) - edgesadd[::-1].index(1) - 50inneredge = edgesadd[firstid:endid]
leftid = inneredge.index(1)
rightid = len(inneredge) - inneredge[::-1].index(1)width = rightid - leftidprintff(leftid, rightid, width)#printf(edgesadd)#printf(shape(edges))plt.subplot(211), plt.imshow(img)
plt.subplot(212), plt.imshow(edges, cmap='gray')
plt.xticks([]), plt.yticks([])
plt.show()exit()'''
#------------------------------------------------------------
pltgif = PlotGIF()plt.draw()
plt.pause(.001)sv1 = 300
sv2 = 400widthdim = []for f in range(filenumber):fn = os.path.join(filepath, '%04d.BMP'%f)img = cv2.imread(fn)[:,:,1]edges = cv2.Canny(img, sv1, sv2)widthdim.append(edgewidth(edges))printff(fn, widthdim[-1])# plt.clf()
# plt.imshow(edges, cmap='gray')
# plt.title('Canny(img, %d, %d), Pages:%04d'%(sv1,sv2,f))# plt.xticks([]), plt.yticks([])
# plt.draw()
# plt.pause(.001)
# pltgif.append(plt)
# printf(fn)#pltgif.save(r'd:\temp\1.gif')printf('\a')
#plt.show()plt.plot(list(range(filenumber)), widthdim)
plt.xlabel("Sample")
plt.ylabel("Width")
plt.grid(True)
plt.tight_layout()
plt.show()#------------------------------------------------------------
# END OF FILE : MEASURE1.PY
#============================================================
★ 相关的博文应用:
- 舵机控制的机械爪
机械爪角度与距离之间的关系相关推荐
- 当支持向量机遇上神经网络:这项研究揭示了SVM、GAN、Wasserstein距离之间的关系...
选自arXiv 作者:Alexia Jolicoeur-Martineau 编辑:小舟.蛋酱 转载自公众号:机器之心 SVM 是机器学习领域的经典算法之一.如果将 SVM 推广到神经网络,会发生什么呢 ...
- svm分类代码_当支持向量机遇上神经网络:SVM、GAN距离之间的关系
选自arXiv 作者:Alexia Jolicoeur-Martineau 编辑:小舟.蛋酱 SVM 是机器学习领域的经典算法之一.如果将 SVM 推广到神经网络,会发生什么呢? 支持向量机(Supp ...
- 深入理解WMS(四):从WMS的角度分析Activity之间的关系
system_server_AMS类图.png Activity_Window_相关类图.png system_server_AMS类图.png 总体类图.png 流程图.png 一.相关概念 1.A ...
- 机械爪的带有压力反馈的控制实验
■ 实验背景说明 在 两轴机械臂+机械爪整体控制板设计与机械爪控制调试 中的机械臂安装有 舵机控制的机械爪 .在机械爪上安装有 FSR压力传感器 来感应机械爪在抓取试剂瓶时的压力.在 两轴机械臂+机械 ...
- (1)三相电机中相电压与线电压之间的关系 (2)电机转速,机器速度,电角速度之间的关系(3)磁链估算和磁场定向的定义
三相电机中相电压与线电压之间的关系 Ua=1/3(2Uab+Ubc) Ub=1/3(Ubc-Uab) Uc=-1/3(Uab+2Ubc) 电机转速,机械速度,电角速度之间的关系 电角速度=机器速度* ...
- 双关节机械臂+机械爪运动控制
01控制调试基础 在博文两轴机械臂+机械爪整体控制板设计与机械爪控制调试 中给出了双轴机械臂整体控制电路板的设计以及初步调试的过程.本文则完成对于双臂运动的控制调试. 控制调试包括两部分的内容: 机械 ...
- 嵌入式与单片机之间的关系是什么?
一定有很多人都听说过嵌入式和单片机,但在刚开始接触时,不知道大家有没有听说过嵌入式就是单片机这样的说法,其实嵌入式和单片机还是有区别的.单片机与嵌入式到底有什么关系? 下面我们就来说说嵌入式和单片机之 ...
- cpu(处理器)、内存、硬盘之间的关系
前面提到了,电脑之父--冯·诺伊曼提出了计算机的五大部件:输入设备.输出设备.存储器.运算器和控制器. 我们看一下现在我们电脑的: 键盘鼠标.显示器.机箱.音响等等. 这里显示器为比较老的CRT显示器 ...
- cpu、内存、硬盘之间的关系
前面提到了,电脑之父--冯·诺伊曼提出了计算机的五大部件:输入设备.输出设备.存储器.运算器和控制器. 我们看一下现在我们电脑的: 键盘鼠标.显示器.机箱.音响等等. 这里显示器为比较老的CRT显示器 ...
最新文章
- 西南民族大学计算机基础技能应用培训基地,计科学院第九期Office应用培训开班典礼顺利举办...
- 为什么PUE只说明了数据中心能效的一部分?
- 2019第十届蓝桥杯C/C++ B组省赛 —— 第四题:数的分解
- 在JavaEE中使用CDI的简单面向方面的编程(AOP)
- 基于微信小程序开发的仿微信demo
- 点触科技:构建实时计算和数据仓库解决方案
- 使用OmniDB数据库管理工具,管理Oracle/MariaDB/PostgreSQL等关系型数据库
- 介绍一下Python中webbrowser的用法?
- java读写excel文件
- 还在低效搬砖?看 BIM 如何颠覆了土木工程?
- Android10apk怎么传数据,Android不同apk之间传递参数与数据
- python画柱状图-Python 使用 matplotlib 画柱状图教程
- 【数据库】Hive SQL 正则表达式进阶二(regexp_extract函数进阶使用)
- python word转pdf图片格式_Python将Word转成PDF
- 001 MATLAB-plotyy-函数详解
- 【压缩感知合集8】MP算法(算法实现、收敛讨论以及问题分析)
- 游戏模块分析总结(4)之系统篇
- 2012年移动SEO启示
- 中西入门哲学史差异记录
- IBM系列企业云计算产品和服务正式亮相