视觉抓取套装
如何使用视觉抓取套装
- 如何安装视觉抓取套装
Windows系统如何进行环境搭建
- 安装python+pymycobot,pymycobot 是一个和 myCobot 进行串口通讯的 Python 包,支持 Python2、Python3.5 及之后版本
安装OpenCV,OpenCV-Python是基于Python的库,旨在解决计算机视觉问题。安装之前需确保Python环境已完成搭建 打开一个控制台终端(快捷键Win+R,输入cmd进入终端),输入以下命令:
# 二者版本号需保持一致,这里安装4.5.5.62版本 pip install opencv-python==4.5.5.62 pip install opencv-contrib-python==4.5.5.62
如何使用Python
- 如何调整摄像头
- 如何使用视觉模块定位物体
- 如何进行物体形状识别
- 如何进行颜色识别
- 如何进行特征点识别
- 如何进行二维码识别
- 如何转换定位的物体为机械臂识别的坐标
- 如何执行转换后的坐标
- 如何控制吸泵/夹爪去拾取物体
1 环境搭建
使用环境: Windows 10 或者 Windows 11、Python3+OpenCV+pymycobot、Git
适用设备: ultraArm P340
1.1 安装Python+pymycobot
pymycobot 是一个和 myCobot 进行串口通讯的 Python 包,支持 Python2、Python3.5 及之后版本。
在使用 pymycobot控制机械臂之前需要搭建Python环境,具体搭建过程请查看 Pyhton 环境搭建 章节。
1.2 安装OpenCV
OpenCV-Python是基于Python的库,旨在解决计算机视觉问题。安装之前需确保Python环境已完成搭建。
打开一个控制台终端(快捷键Win+R,输入cmd进入终端),输入以下命令:
# 二者版本号需保持一致,这里安装4.5.5.62版本
pip install opencv-python==4.5.5.62
pip install opencv-contrib-python==4.5.5.62
安装成功后,可通过下面的命令查看具体安装的版本以及安装位置:
# 也可查看其他python库 格式:pip show 库名称
pip show opencv-python
pip show opencv-contrib-python
1.3 安装Git
Git是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理。
Git官方下载地址: https://gitforwindows.org/
点击
Download
选项,开始下载Git
- 双击下载好的exe文件进行安装
- 选择安装位置,默认是在C盘下,如果不想放在C盘下可以进行位置更换。选择好安装位置以后点击next。
- 默认不会在桌面创建图标,并且增加了一个新的特性,将GItBash添加到Windows terminal中,建议勾选。
- 下一步默认,选择Next即可。
- 选择一个默认的编辑器,默认为Vim(Linux的),里面还有Notepad,我选择使用Vim
- 在Git创建分支后的默认的名字(master),如果没有特别的使用默认的设置,点击next即可。
- 下一步默认,选择Next即可。
- 下一步默认,选择Next即可。
- 下一步默认,选择Next即可。
- 下一步默认,选择Next即可。
- 下一步默认,选择Next即可。
- 下一步默认,选择Next即可。
- 下一步默认,选择Next即可。
- 下一步默认,选择Next即可。
- 额外的配置选项,这里面默认都没有选,可以将这两个选框勾选上,支持(node、python虽然还有bug)然后选择install。
- 安装完成后,点击FInish安装完成。
检查
打开一个控制台终端(快捷键Win+R,输入cmd进入终端),输入以下命令查看Git版本信息:
git --version
在后续下载 aikit 包需要用到git,git 的使用可以参考下面链接:
1.4 aikit_V2 安装
aikit_V2
是 ElephantRobotics 推出的,适配旗下桌面机械臂的人工智能套装V2.0 程序包。
项目地址:https://github.com/elephantrobotics/aikit_V2
- 1 双击桌面
Git Bash
图标,进入Git终端。
- 2 在Git终端输入以下命令:
cd Desktop
git clone https://github.com/elephantrobotics/aikit_V2.git
然后桌面会出现 aikit_V2
文件夹。
至此,Windows环境搭建完成。
2 如何使用Python
2.1 如何调整摄像头
首先,需要使用python运行aikit_V2包下的OpenVideo.py。若开启的摄像头为电脑摄像头则需要修改cap_num,具体可参考:注意事项。确保摄像头完全包含整个识别区域,且识别区域在视频中是正正方方的,如下图所示。若识别区域在视频中不符合要求,则需要调整摄像头的位置。
- 打开一个控制台终端(快捷键Win+R,输入cmd进入终端),输入以下命令进入目标文件夹
cd Desktop/aikit_V2/AiKit_ultraArm_P340/
- 输入以下命令,打开摄像头进行调整
python scripts/OpenVideo.py
2.2 如何使用视觉模块定位物体
- 启动识别程序前,需要校准摄像头,确保摄像头完全包含整个识别区域,且识别区域在视频中是正正方方的
- 启动识别程序后,将可识别物体放置识别区域中,程序将通过OpenCV自带的识别函数对物体进行定位。
2.3 如何进行物体形状识别
- 打开一个控制台终端(快捷键Win+R,输入cmd进入终端),输入以下命令进入目标文件夹:
cd Desktop/aikit_V2/AiKit_ultraArm_P340/
- 再输入以下命令,启动形状识别程序。
python scripts/aikit_shape.py
- 当命令终端出现ok并且摄像头窗口能正常开启时,说明程序运行成功,此时可将可识别的物体放置识别区域进行识别抓取。
2.4 如何进行颜色识别
- 打开一个控制台终端(快捷键Win+R,输入cmd进入终端),输入以下命令进入目标文件夹:
cd Desktop/aikit_V2/AiKit_ultraArm_P340/
- 再输入以下命令,启动形状识别程序。
python scripts/aikit_color.py
- 当命令终端出现ok并且摄像头窗口能正常开启时,说明程序运行成功,此时可将可识别的物体放置识别区域进行识别抓取。
2.5 如何添加特征点新图像
- 打开一个控制台终端(快捷键Ctrl+Alt+T),进入目标文件夹
cd ~/aikit_V2/AiKit_ultraArm_P340/
- 输入以下命令,启动添加图像的程序。
python scripts/add_img.py
- 根据终端输入的提示进行操作,在弹出的第二个图像框中进行图像的截取。
- 图像截取区域完成后,按下回车键,根据终端提示,输入数字(1~4)保存到相对应图像的文件夹,按下回车键即可保存至对应文件夹。
2.6 如何进行特征点图像识别
- 打开一个控制台终端(快捷键Win+R,输入cmd进入终端),输入以下命令进入目标文件夹:
cd Desktop/aikit_V2/AiKit_ultraArm_P340/
- 再输入以下命令,启动形状识别程序。
python scripts/aikit_img.py
- 当命令终端出现ok并且摄像头窗口能正常开启时,说明程序运行成功,此时可将可识别的物体放置识别区域进行识别抓取。
2.7 如何进行二维码识别
- 打开一个控制台终端(快捷键Win+R,输入cmd进入终端),输入以下命令进入目标文件夹:
cd Desktop/aikit_V2/AiKit_ultraArm_P340/
- 再输入以下命令,启动形状识别程序。
python scripts/aikit_encode.py
- 当命令终端出现坐标信息并且摄像头窗口能正常开启时,说明程序运行成功,此时可将可识别的物体放置识别区域进行识别抓取。
2.8 如何转换定位的物体为机械臂识别的坐标
- 通过测量抓取区域中的两个aruco的像素点位可计算出两个aruco的之间的像素距离M1,测量两个aruco的实际距离M2,这样我们就能获得像素与实际距离的比值 ratio = M2 / M1。我们可以从图片中计算出物块距离抓取区域中心的像素差,这样我们可以计算出物块实际距离抓取区域中心的相对坐标(x1, y1)。将相对坐标(x1, y1)加上抓取区域中心到机械臂的相对坐标(x2, y2),即可求得物块对于机械臂的相对坐标(x3, y3)。
# 抓取中心点相对于 机械臂 的坐标
self.camera_x, self.camera_y = camera_x, camera_y
# 物体相对于机械臂的坐标,可以设置参数为:
self.c_x = self.c_y = 0, 0
# 像素与实际比值为:
self.ratio = 0
# 设置参数函数用于计算立方体和 机械臂 之间的坐标
def set_params(self, c_x, c_y, ratio):
self.c_x = c_x
self.c_y = c_y
self.ratio = 220.0/ratio
# 获取位置函数,用于计算立方体和 机械臂 之间的坐标
def get_position(self, x, y):
return ((y - self.c_y)*self.ratio + self.camera_x), ((x - self.c_x)*self.ratio + self.camera_y)
# 接下来,程序会调用设置参数函数set_params(),用于计算和设置物体和机械臂之间真实坐标的参数
detect.set_params(
(detect.sum_x1+detect.sum_x2)/20.0,
(detect.sum_y1+detect.sum_y2)/20.0,
abs(detect.sum_x1-detect.sum_x2)/10.0 +
abs(detect.sum_y1-detect.sum_y2)/10.0
)
# 然后将调用函数get_position() 用于 计算立方体和 mycobot 之间的真实坐标
real_x, real_y = detect.get_position(x, y)
# 最终将获取的真实坐标经过稍微处理,将其传入decide_move()函数,供后续机械臂抓取使用。
detect.decide_move(real_sx/20.0, real_sy/20.0, detect.color)
2.9 如何执行转换后的坐标
- 程序将最终获取的真实坐标经过稍微处理,将其传入 decide_move() 函数,供后续机械臂抓取使用
detect.decide_move(real_sx/20.0, real_sy/20.0, detect.color)
- 在decide_move()函数中,则会继续调用 move() 函数,用于触发机械臂的移动抓取
# 决定是否抓取物体 decide whether grab cube
def decide_move(self, x, y, color):
# 输出打印真实物体的平面坐标
print(x, y, self.cache_x, self.cache_y)
# 检测物块状态移动或运行
if (abs(x - self.cache_x) + abs(y - self.cache_y)) / 2 > 5: # mm
self.cache_x, self.cache_y = x, y
return
else:
self.cache_x = self.cache_y = 0
# 调整吸泵吸取位置,y增大,向左移动;y减小,向右移动;x增大,前方移动;x减小,向后方移动
# 调用move函数,使机械臂进行一系列抓取动作
self.move(x, y, color)
- 当机械臂进行抓取移动操作时,说明程序执行的是 move() 函数
def move(self, x, y, color):
print(color)
# 发送角度去移动机械臂,速度为50
self.ua.set_angles(self.move_angles[2], 50)
# 等待3秒
time.sleep(3)
# 发送坐标去移动机械臂,使机械臂末端到达物块的正上方,速度为50
self.ua.set_coords([x, -y, 65.51], 50)
# 等待1.5秒
time.sleep(1.5)
# 发送坐标去移动机械臂,使机械臂末端到达物块的上表面,速度为50
self.ua.set_coords([x, -y, -32], 50)
# 等待2秒
time.sleep(2)
2.10 如何控制吸泵/夹爪去拾取物体
- 当机械臂末端吸泵到达物体上方并接触物体时,调用吸泵函数并吸取或者释放物体
# 开启吸泵
def pump_on(self):
self.ua.set_gpio_state(0)
# 停止吸泵
def pump_off(self):
self.ua.set_gpio_state(1)
- 开启吸泵
# open pump
self.pump_on()
- 关闭吸泵
# open pump
self.pump_off()