使用树莓派4b和OpenCV做机械臂夹取

这篇具有很好参考价值的文章主要介绍了使用树莓派4b和OpenCV做机械臂夹取。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

文章目录

  • 前言
  • 一、基本功能
  • 二、主要代码
    • 1.图像处理部分
    • 2.舵机驱动部分

前言

 本人第一次在csdn上发技术类文章,原谅在此多说一些废话。项目是自己的毕设,比较简单还望不要见笑,如果发现有什么问题欢迎指正。发文章的目的一方面是希望用自己微薄的能力的帮助有需要的人,另一方面想要记录下自己一步一步走过的痕迹,我不知道自己还能走多久,但只要我还在做这些东西就会记录下来,一起努力前进吧。

一、基本功能

主控采用的是树莓派4b,机械臂采用的是社团现成的幻尔机械臂,因为用不到六自由度所以把旋转机械手的舵机拆了下来,摄像头用的是淘宝买的树莓派摄像头20块左右,还买了支架和补光灯用来架设摄像头,夹取平台是自己建模用3d打印机打出来的。

基本功能就是在有物块在平台上时机械臂会自动夹取物体放置在指定位置,主要用到的就是OpenCV的一些库函数和像素点坐标转换一些简单数学运算以及舵机的控制。

二、主要代码

在写代码实现功能之前要先安装好树莓派的一些库,有以下几个东西需要安装好或调试好,安装好OpenCV的库(当时我搞了好长时间),开启摄像头功能,要能用摄像头显示视频,熟悉树莓派的一些基本使用,像是gpio,i2c之类的。

1.图像处理部分

写代码之前一些库的引用

import RPi.GPIO as GPIO
import cv2 as cv
import time
import math
import numpy as np

具体代码,其中摄像头的画面进行了一些截取,只显示放置平台部分方便后续处理,得到的图片坐标是物块在截取图片中以左上角为起点的像素点坐标,我采用的的等比缩放的方法得到实际坐标,即画面尺寸和实际尺寸之间有一定比例,后续要想得到机械臂坐标系坐标还要进行进一步转化。

我的像素点坐标获取借鉴了另一位博主的文章OpenCV-Python学习笔记(使用opencv识别物体的位置,找到中心点位)_pd很不专业的博客-CSDN博客_opencv识别物体并输出坐标点

​
 #获取视频物体坐标
    cap = cv.VideoCapture(0)#选择摄像头
    
    ret,frame = cap.read()
    
    zero = frame[115:365,195:445]#截取画面尺寸
    
    cv.imwrite("tupian.jpg",zero)#存储图片
    zero0 = cv.imread("/home/pi/Desktop/tupian.jpg",1)
    
    zero1 = cv.GaussianBlur(zero0,(5,5),0)#高斯滤波

    zero2 = cv.cvtColor(zero1,cv.COLOR_BGR2GRAY)#颜色空间转换

    ret,zero3 = cv.threshold(zero2,110,255,cv.THRESH_BINARY_INV)#设置阈值,二值化处理

    kai0 = np.ones((5,5),np.uint8)
    zero4 = cv.morphologyEx(zero3,cv.MORPH_OPEN,kai0,iterations=3)#开运算
    
    
    #判断是否有物体
    if(np.mean(zero4)>0):
        print("object")
        
        contours,hierarchy = cv.findContours(zero4,cv.RETR_TREE,cv.CHAIN_APPROX_SIMPLE)#轮廓拟合
        
        cnt0 = contours[0]

        rect0 = cv. minAreaRect(cnt0)
        box0 = cv.boxPoints(rect0)
        box0 = np.int0(box0)
        zero5 = cv.drawContours(zero0,[box0],0,(0,0,255),3)#画矩形框

        M0 = cv.moments(cnt0)# 计算第一条轮廓的各阶矩,字典形式
        center_x0 = int(M0['m10']/M0['m00'])
        center_y0 = int(M0['m01']/M0['m00'])
        cv. circle(zero0,(center_x0,center_y0),7,128,-1)#绘制中心点
        str0 = '(' +str(center_x0)+',' +str(center_y0)+')'#把坐标转化为字符串
        cv.putText(zero0,str0,(center_x0-50,center_y0+40),cv.FONT_HERSHEY_SIMPLEX,1,(255,0,0),2,cv.LINE_AA)#坐标点位绘制在图片上
        print(center_x0,center_y0)#输出像素点坐标

#没有物体输出
    else:
        print("No object")
        
    
    #关闭摄像头
    cap.release()
    cv.destroyAllWindows()

​

中间的转动角度计算与每个人的机械臂夹取方式与运动轨迹规划有关,且本人并没有学过机器人运动学相关知识这部分代码就不展示了,当时看了另一篇博客从中得到启发延伸到自己5自由度的机械臂。

机械臂转动角度计算_AI视觉网奇的博客-CSDN博客_机械臂关节角度

2.舵机控制部分

原先的想法是用舵机驱动板PCA9685来驱动舵机,好处就是只需要用i2c通信就可以输出16路可控pwm,但由于在树莓派上下载的库始终效果不好,而且源码不好修改最终放弃了,值得一提的是因为操作不当还把树莓派的电源芯片烧了,好在最后修好了。使用树莓派4b和OpenCV做机械臂夹取

PCA9685

 最后只能用树莓派引脚输出PWM和外接稳压电源来控制舵机,发送完pwm之后要进行消抖要不然数字舵机会不停抖动,由于代码过长且许多都是重复只有参数不同,所以只展示一部分。

GPIO.setmode(GPIO.BOARD)#GPIO采用BOAED模式
GPIO.setwarnings(False)#清除报错
#设置引脚
pins_0 = 12     #GPIO.1云台
pins_1 = 16     #GPIO.4下关节
pins_2 = 18     #GPIO.5上关节
pins_3 = 22     #GPIO.6调整关节
pins_4 = 32     #GPIO.26夹取关节

#引脚为输出模式
GPIO.setup(pins_0,GPIO.OUT)
GPIO.setup(pins_1,GPIO.OUT)
GPIO.setup(pins_2,GPIO.OUT)
GPIO.setup(pins_3,GPIO.OUT)
GPIO.setup(pins_4,GPIO.OUT)

#设置PWM频率为50Hz
pwm0 = GPIO.PWM(pins_0,50)
pwm1 = GPIO.PWM(pins_1,50)
pwm2 = GPIO.PWM(pins_2,50)
pwm3 = GPIO.PWM(pins_3,50)
pwm4 = GPIO.PWM(pins_4,50)

#初始/无动作姿态
pwm0.start(6.55)
pwm1.start(10.23)
pwm2.start(4.077)
pwm3.start(3.56)
pwm4.start(5)
time.sleep(0.2)#消抖
pwm0.ChangeDutyCycle(0)
pwm1.ChangeDutyCycle(0)
pwm2.ChangeDutyCycle(0)
pwm4.ChangeDutyCycle(0)
time.sleep(1)

使用树莓派4b和OpenCV做机械臂夹取

 实物图

还有许多功能可以改进,譬如多颜色识别等等,由于后续还有考试需要准备所以暂时只能做到这里。文章来源地址https://www.toymoban.com/news/detail-404758.html

到了这里,关于使用树莓派4b和OpenCV做机械臂夹取的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 树莓派4B系统一键安装opencv,再也不要用编译安装啦!(支持buster、bullseye)

    首先第一步,需要配置好国内镜像软件源(原生源通不过),已经换源的可以跳过 。这里选择清华源为例。 点击链接看到使用帮助:https://mirrors.tuna.tsinghua.edu.cn/help/raspbian/,选择对应的系统版本,这里使用Buster为例 输入命令修改文件 /etc/apt/sources.list 和 /etc/apt/sources.list.d/

    2024年02月12日
    浏览(28)
  • 动态识别二维码(树莓派4b + python3 + pyzbar + opencv + 摄像头)

            最近需要做一个 工训物料小车 扫码领取任务的功能,于是使用 树莓派 的摄像头扫码二维码。经过我的多番寻找,发现有个叫pyzbar的库,可以结合opencv,可以做一个 视频动态二维码扫描 。         本文实现的功能: 实现树莓派的二维码扫描         opencv的

    2024年02月14日
    浏览(30)
  • 树莓派4b安装opencv4.6.0并开启ffmpeg视频加速(2022.10.27)

    按ctrl + o ,enter保存,ctrl + x 关闭; 将以下内容写入配置文件(为pip配置阿里和豆瓣源):(保存并退出同上)

    2023年04月16日
    浏览(35)
  • 树莓派4B安装XRDP使用远程桌面

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 之前写了很多关于Ubuntu使用RDP或VNC的文章,最近在鼓捣树莓派4B,VNC我暂时没鼓捣成功,黑屏还未找到原因,XRDP可以使用,然后Windows远程桌面应用可以直接访问。 我的配置: OS:树莓派系统 64bits 这里

    2024年01月25日
    浏览(34)
  • 树莓派4B(Raspberry Pi 4B)使用docker搭建springBoot/springCloud服务

    前提:本文基于Ubuntu,Java8,SpringBoot 2.6.13讲解 准备SpringBoot/SpringCloud项目jar包 用 maven 打包springBoot/springCloud项目,先在本地跑一跑,是否可以正常运行,特别注意哈!如果项目访问数据库,redis等运行在docker容器的服务,那么你的IP不能配置成树莓派IP,必须是docker network 内分

    2024年02月22日
    浏览(33)
  • 树莓派4B(Raspberry Pi 4B)使用docker搭建阿里巴巴sentinel服务

    由于国内访问不了docker hub,而国内镜像仓库又没有适配树莓派ARM架构的sentinel镜像,所以我们只能退而求其次——自己动手构建镜像。本文基于Ubuntu,Java8,sentinel-dashboard-1.8.7讲解 下载sentinel-dashboard-1.8.7.jar 到GitHub(Releases · alibaba/Sentinel (github.com))下载 下载jdk-8u391-linux-aar

    2024年02月20日
    浏览(35)
  • 使用USB转TTL线连接树莓派4B

    一般我们刷完树莓派系统后,都是通过连接鼠标键盘及显示器来进行操作,当我们开启SSH功能后我们才可以通过ssh客户端进行远程访问,那么是否有更方便的方式进行连接,并且不需连接外部设备进行操作呢? 当然可以,我们可以使用USB转TTL线将树莓派与计算机连接起来,这

    2024年02月13日
    浏览(35)
  • 树莓派4B使用USB摄像头的注意点

    1 需要在在raspi-config的interface中启用摄像头 2 安装opencv sudo apt install python3-opencv 3 代码中的打开摄像头部分需要加入CAP_V4L2 ```python import cv2 # 打开摄像头 cap = cv2.VideoCapture(0,cv2.CAP_V4L2) while True: # 从摄像头读取帧 ret, frame = cap.read() # 显示帧 cv2.imshow(\\\'frame\\\', frame) # 按下 \\\'q\\\' 键退出

    2024年02月16日
    浏览(29)
  • 树莓派4B +Ubuntu20.04+ROS1的使用(2)

    在这次实验中,主机是一台Ubuntu20.04.03系统的台式机,我们间通过这台准备来远程遥控树莓派上的ros1系统,它的ip地址是192.168.230.181 从机是一台搭载Ubuntu20.04桌面版+ros1的树莓派4B的只智能小车,它的ip地址是192.168.230.37(搭载方式见树莓派4B+ubuntu20.04+ros1桌面配置(一)-CSDN博客

    2024年01月15日
    浏览(39)
  • 树莓派4B使用NCNN部署Yolov5-lite

    目录 文章目录 前言 一、树莓派配置NCNN 1.安装依赖 2.下载NCNN并编译 二、Yolov5-lite模型训练 1.源码地址 2.安装所需要的包  3.训练自己的数据集(YOLO格式) 4.模型训练  5.模型转换 6.onnx模型简化 三、树莓派部署lite模型 1.将onnx模型转换为ncnn 2.添加Yolov5-lite.cpp 3.修改eopt.param  4.修

    2024年02月05日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包