当前位置:首页 > 工业控制 > 电路设计项目集锦
[导读]该系统采用平行四边形结构的四自由度机械臂(MeArm),能够通过网络摄像头识别工作区上的物体(彩色球体),计算其毫米级真实坐标,并控制机械臂抓取并将其放置到预设的“投放区域”。软件使用Python编写,通过串口或蓝牙低功耗(BT-24模块)与微控制器(Arduino R3)通信。

该系统采用平行四边形结构的四自由度机械臂(MeArm),能够通过网络摄像头识别工作区上的物体(彩色球体),计算其毫米级真实坐标,并控制机械臂抓取并将其放置到预设的“投放区域”。软件使用Python编写,通过串口或蓝牙低功耗(BT-24模块)与微控制器(Arduino R3)通信。

软件

架构采用模块化设计,将视觉逻辑、运动学和硬件通信分开:

•视觉(vision.py):使用OpenCV进行物体跟踪和立体识别。

•运动学(kinematics.py):包含将笛卡尔坐标(X, Y, Z)转换为伺服电机角度的数学模型。

•通信(arm_link.py、ble_link.py、serial_link.py):用于向Arduino发送指令的接口(串口/蓝牙)。

•主程序(Main):并发管理视频与运动,以避免系统瓶颈。

校准

为了使机器人能够精确地与现实世界交互,需要通过专用脚本完成两个关键的校准步骤。

空间校准(同轴标定)

由于摄像头拍摄的是工作台表面,图像中存在透视畸变。通过calibrate.py脚本,系统将4个已知坐标点(以毫米为单位)相对于机械臂基座进行了映射。该算法计算出一个同轴标定矩阵(HOMOGRAPHY_FILE),使得pixel_to_table()函数能够实时将网络摄像头所见像素转换为工作台上的真实坐标。

颜色校准(HSV空间)

通过calibrate_color.py脚本,实现了对目标物体与背景的分离。该工具可实时调节色相(H)、饱和度(S)和明度(V)的最小/最大阈值。解决方案:为应对光照变化,系统校准了四种不同强度的“绿色”样本。借助别名系统(Alias),软件能识别这四种变体中的任意一种为目标对象,从而确保视觉识别的极高可靠性。

机电校准(电机偏移与方向)

硬件部分(SG90微型伺服电机)存在显著的机械公差:由于齿轮采用千分位级的啮合方式,软件计算出的逻辑角度90°往往无法完全对应物理上的精确90°。此外,根据电机在平行四边形结构中的安装方式不同,其逻辑旋转方向(顺时针/逆时针)可能与笛卡尔坐标系中的计算结果相反。

CALIBRATE_COLOR.PY

打开摄像头并使用滑块,根据您的光照条件和您所选球体的颜色,找到正确的最小/最大HSV值。移动滑块,直到“Mask”窗口中仅显示球体为白色(其余部分为黑色),然后将控制台输出的数值复制到config.COLOR_RANGES中。按“q”键后,数值将显示在控制台中。

CALIBRATE.PY

通过四点同构变换进行相机至工作台的标定。

说明:

•将相机固定在桌子上方,确保覆盖整个机械臂的工作区域(俯视图;即使不完全垂直也无妨,软件会自动调整)。

•在机械臂底座的四个已知真实坐标点(以毫米为单位)上放置4个标记(用尺子测量:x = 底座左右方向,y = 从底座向前方向)。

•运行此脚本,点击图像上的4个点,顺序必须与下方 REAL_POINTS_MM 中定义的一致,然后按 's' 键保存(例如,我按顺时针顺序定义:左上 → 右上 → 右下 → 左下)。

SCAN_BLE.PY

用于诊断如何通过蓝牙(BLE)与 BT-24 模块通信的脚本。

说明:

运行:python scan_ble.py

它将显示附近发现的所有BLE设备(名称 + 地址)。找到用于控制机械臂的设备(通常命名为“DX-BT24”或“BT24”)。

再次运行脚本,并将地址作为参数传入:

•python scan_ble.py AA:BB:CC:DD:EE:FF (Windows/Linux)

•python scan_ble.py 44BAD4C8-18F8-FAE0-ED97-FFFC3A69A296 (macOS 使用 UUID 而不是 MAC)

它会连接并打印所有服务和特征,以及它们各自的属性(读取/写入/通知)。

在步骤3的结果中,应关注以下内容:

•具有“write”或“write-without-response”属性的特征 → 这是电脑向机械臂发送数据时所写入的特征(相当于电脑发送 / 模块接收)。

•具有“notify”属性的特征 → 这是模块用于向电脑通知数据的特征(相当于模块发送 / 电脑接收),可用于读取“OK”或“ERR”确认信息。

•记录这两个特征的UUID:这些UUID将用于 config.py 文件中的 BLE_WRITE_CHAR_UUID 和 BLE_NOTIFY_CHAR_UUID,以及创建 ble_link.py。

许多此类廉价模块在写入和通知时都使用同一个特征(例如以“FFE1”结尾的UUID):如果你看到一个同时具备写入和通知属性的单个特征,请将其用于双向通信。

主程序

多线程 + 半圆轨迹。主线程负责处理流畅的30帧/秒视频。次级线程通过预设的安全角度控制机械臂运动(你需要将Arduino代码上传到板子,并在Config.PY中决定通过串口或蓝牙进行通信)。

该项目展示了先进视觉系统与低成本硬件控制之间的融合。通过严谨的软件设计和对系统几何结构的实用化处理,充分弥补了经济机械本身的固有局限,从而实现了一款可靠、自主且运行流畅的机器人。

本文编译自hackster.io

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
关闭