手势控制的机器人手臂

本文介绍了一个使用手势和计算机视觉控制的机器人手臂项目。通过摄像头捕捉手势,运用OpenCV处理数据,经Python脚本解析后,将指令发送给Arduino驱动伺服电机。项目包括组装机械臂、连接抽吸泵机构,以及编写相应的Arduino和Python代码。通过手势,可以精确控制手臂的运动。
摘要由CSDN通过智能技术生成

将向你展示如何构建机械手臂并使用手势和计算机视觉来控制它。下面有一个在开发阶段的机械手臂的演示视频。

展示开发中的手臂的演示视频:https://youtu.be/KwiwetZGv0s

如图所示,该过程首先用摄像头捕捉我的手及其标志。通过跟踪特定的界标,例如拇指和食指的指尖,可以确定这些界标的相对运动,并将其转化为伺服系统的运动。这是通过处理数据并将整数值发送到控制伺服电机的 Arduino 的 Python 脚本完成的。

操作流程:

相机 —> python 脚本 —> Arduino —> 伺服电机

f6b4ec8ea3d509fd4f1539aa3f9ef856.jpeg

此项目的项目列表

  1. 机械臂套件(仅限框架和伺服电机 (MG996)):

  2. Arduino 板(加 USB 线)

  3. 跳线

  4. 电话充电器

  5. PCA9685 伺服电机驱动器

  6. 笔记本电脑

  7. 抽吸泵套件:

  8. 继电器模块

使用的编程环境:
  1. 开发环境

  2. PyCharm 编辑器

先决条件:
  • OpenCV 知识

    • youtube 上有教程:https://www.youtube.com/watch?v=WQeoO7MI0Bs&t=8774s

  • 了解 C++ 和 Python

需要修改机械臂组件(用于我购买的套件),因为伺服电机在完全组装后无法移动机械臂,导致某些自由度 (DOF) 的损失,并取消了作为末端执行器的抓手。我选择改用抽吸泵机构。

对于这个项目,你可以只购买我使用的机械臂套件,或者只购买底盘并升级到更强大的伺服系统,以与完整的组件一起工作。第二种选择需要你使用本文作为指导,并进行修改以达到你想要的结果。

  1. 组装机械臂:

  • 将 Arduino 代码加载到电路板上,并使用电路图连接伺服电机。

  • 是时候组装机器人手臂了。在开始之前,确保按照此处所述(https://www.electroniclinic.com/pca9685-servo-driver-arduino-circuit-diagram-and-code/#google_vignette),通过下载并安装 HCPCA9685 库来加载 Arduino 代码。使用提供的电路图连接伺服电机,以确保它们处于所需位置。首先将手臂底部的伺服(旋转底座关节)连接到 PCA9865 的引脚 0,然后将手臂中的下一个伺服(肩关节)连接到引脚 3,依此类推,从左到右移动 PCA9685。最后,启动 Arduino 板并等待伺服电机到达其位置。

  1. 手臂关节

  • 将滑轮放在伺服电机上并固定螺钉。

  • 现在是时候组装机器人手臂的其他部分了。使用此处(https://automaticaddison.com/how-to-build-a-diy-aluminium-6-dof-robotic-arm-from-scratch/) 链接的视频作为指南,但你可以随意使用自己的方法来实现图像中描绘的姿势。如果在测试过程中遇到任何问题,例如关节不动,请检查伺服电机是否发热。如果天气很热,则该接头处可能存在装配问题,导致其无法正常工作。

880cd4c1df8635cfd4687f9dd599ebb0.jpeg 8b027964dfa74b78feca5c2c5b0891ef.jpeg

图片显示机器人手臂处于原位。

96a14d68a54124efe26d188f0cbf54f4.png 764ba1038ba341b2071f96e56cbe3d4d.png 5ba7b399be4fe495d7e84a5c13a3a640.png

组装手臂时供参考的附加图片

  1. 连接抽吸泵:

  • 如下图所示连接软管,黑色箭头代表空气的连接和流动。

a0a41d8ba66fd4ffef8e2e44b2a19f83.jpeg 1651a97e39eb8a1d86f88e8247e1b14e.jpeg

抽吸泵机构

  • 将真空泵、继电器模块和电磁阀的负极端子连接到电源的负极端子。

  • 将继电器模块的正极端子连接到电源的正极端子。

  • 将继电器模块的信号线连接到 Arduino 板的数字引脚 3。

  • 将真空泵的正极端子连接到继电器模块的常开 (NO) 端子。

  • 将电磁阀的正极端子连接到继电器模块的常闭 (NC) 端子。

  • 将继电器模块的公共端子连接到电源输入的正极端子。

  1. Arduino代码:

  • 设置和初始化库和变量。

#include <Servo.h>

#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>

// called this way, it uses the default address 0x40
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();


#define USMIN  1000//600 // This is the rounded 'minimum' microsecond length based on the minimum pulse of 150
#define USMAX  2000//2400 // This is the rounded 'maximum' microsecond length based on the maximum pulse of 600
#define SERVO_FREQ 50 // Analog servos run at ~50 Hz updates

uint16_t Pos1;
uint16_t Pos2;
uint16_t Pos3;
uint16_t Pos0;
 int ang;
 int ang2;
 int ang3;
 int ang0;
 int X;  //variable storing data from the index finger (landmark 8)
 int Y;  //variable storing data from the middle finger(landmark 12)
 int Z;  //variable storing data from the ring finger (landmark 16)
 int J;  //variable storing data from the bottom of the palm (landmark 0)
 int K;  //variable storing data from the thumb finger (landmark )
 int L;  //variable storing data from the thumb finger (landmark )
 const int RELAY_PIN = 3; // auction pump relay pin
 const int RELAY_PIN = 3;
  • “setup”部分在通电后运行一次并定

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值