具身智能:零基础入门睿尔曼机械臂(三)——夹爪抓取与释放控制全解析

news/2025/12/10 3:40:19/文章来源:https://www.cnblogs.com/ChenAI-TGF/p/19328918

@

目录
  • 一、前言
  • 二、睿尔曼机械臂夹爪:抓取作业的核心执行部件
    • 1. 全型号适配
    • 2. 简洁的参数化控制
    • 3. 无额外硬件配置
    • 4. 核心功能
  • 三、核心例程全解析:逐行吃透夹爪控制逻辑
    • 3.1 环境配置与模块导入
    • 3.2 核心控制类RobotArmController解析
      • 3.2.1 初始化函数__init__:建立机械臂(含夹爪)连接
      • 3.2.2 disconnect:断开机械臂(含夹爪)连接
      • 3.2.3 movej:关节空间运动(抓取/释放的基础)
      • 3.2.4 set_gripper_pick_on:夹爪连续力控抓取(核心函数)
        • 参数详解
        • 执行逻辑
      • 3.2.5 set_gripper_release:夹爪释放(核心函数)
        • 参数详解
        • 执行逻辑
    • 3.3 主函数main:“运动+抓取+释放”完整流程
  • 四、应用实践:从代码到夹爪抓取实操
    • 4.1 环境搭建
      • 4.1.1 硬件准备
      • 4.1.2 软件准备
      • 4.1.3 网络配置
      • 4.1.4 夹爪硬件确认
    • 4.2 运行步骤
    • 4.3 常见问题与排查
      • 1. 夹爪无动作(指令返回成功但无物理动作)
      • 2. 抓取失败(错误码非0)
      • 3. 抓取后物体掉落
      • 4. 释放失败(夹爪无法张开)
  • 五、总结与拓展

一、前言

上一篇我们掌握了睿尔曼第三代机械臂的基础运动控制逻辑,而夹爪作为机械臂完成抓取、放置等作业的核心执行部件,是从“单纯运动”到“实际作业”的关键环节。相比于传统工业夹爪复杂的气动/电动控制调试,睿尔曼第三代机械臂配套夹爪通过Python SDK提供了封装完善的控制接口,无需额外的硬件接线或底层驱动配置,只需调用简单的函数即可实现夹爪的“抓取”“释放”等核心操作。

在这里插入图片描述

本文的核心目标是:以睿尔曼夹爪控制官方例程为蓝本,拆解夹爪控制的核心代码逻辑,从“参数含义”“函数作用”“执行流程”三个维度,让零基础读者理解“如何通过代码控制夹爪完成抓取作业”,并能动手完成夹爪抓取-释放的完整实操。无论你是高校学生、创客,还是刚接触机械臂的工程师,都能通过本文掌握睿尔曼机械臂夹爪的基础控制方法。

二、睿尔曼机械臂夹爪:抓取作业的核心执行部件

睿尔曼第三代机械臂配套夹爪是面向科研、教育、轻量工业场景的电动夹爪,与第三代机械臂(RM_65/RM_75/RML_63等)深度适配,核心特点如下:

1. 全型号适配

夹爪无需针对不同型号机械臂做硬件适配,通过统一的Python SDK接口控制,与上一篇学习的基础运动指令兼容,一套代码可适配所有第三代机械臂型号。

2. 简洁的参数化控制

支持通过“速度”“力度”参数自定义夹爪动作:

  • 速度:控制夹爪开合的快慢,适配不同尺寸、重量的抓取目标;
  • 力度:控制夹爪抓取时的夹持力,避免损坏易碎物体或抓取力不足导致掉落。

3. 无额外硬件配置

夹爪通过机械臂本体供电并通信,无需额外的控制器、接线或气动回路,仅需确保夹爪与机械臂末端正确安装,即可通过网络通信实现控制。

4. 核心功能

支持“连续力控抓取”“主动释放”两大核心动作,满足入门阶段抓取-放置作业的全部需求。

三、核心例程全解析:逐行吃透夹爪控制逻辑

接下来我们逐模块、逐行解析夹爪控制例程代码,重点拆解夹爪专属的控制函数,同时梳理“运动+抓取”的协同控制逻辑。

3.1 环境配置与模块导入

import sys
import os
import time# Add the parent directory of src to sys.path
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..')))from src.Robotic_Arm.rm_robot_interface import *
  • import sys/import os:与上一篇作用一致,用于补全SDK的模块搜索路径,确保能导入核心接口rm_robot_interface.py
  • import time:新增的时间模块,核心作用是在夹爪执行抓取/释放动作后,通过time.sleep(2)让程序短暂等待,确保夹爪完成机械动作(夹爪开合需要物理时间,避免程序过快执行后续指令导致动作不完整);
  • from src.Robotic_Arm.rm_robot_interface import *:导入的核心接口中,新增了rm_set_gripper_pick_on(夹爪抓取)、rm_set_gripper_release(夹爪释放)等夹爪控制函数,是实现夹爪操作的核心依赖。

3.2 核心控制类RobotArmController解析

该类在基础运动控制类的基础上,新增了夹爪抓取、释放的专属函数,同时复用了机械臂连接、断开、关节运动的核心函数,我们重点解析新增的夹爪控制函数,复用函数仅补充关键说明。

3.2.1 初始化函数__init__:建立机械臂(含夹爪)连接

def __init__(self, ip, port, level=3, mode=2):"""Initialize and connect to the robotic arm (and gripper).Args:ip (str): IP address of the robot arm.port (int): Port number.level (int, optional): Connection level. Defaults to 3.mode (int, optional): Thread mode (0: single, 1: dual, 2: triple). Defaults to 2."""self.thread_mode = rm_thread_mode_e(mode)self.robot = RoboticArm(self.thread_mode)self.handle = self.robot.rm_create_robot_arm(ip, port, level)if self.handle.id == -1:print("\nFailed to connect to the robot arm\n")exit(1)else:print(f"\nSuccessfully connected to the robot arm: {self.handle.id}\n")
  • 复用逻辑:与上一篇一致,建立机械臂网络连接并返回句柄;
  • 关键补充:夹爪作为机械臂的末端部件,无需单独建立连接,只要机械臂连接成功(handle.id≠-1),即可通过该句柄控制夹爪,这是睿尔曼SDK“一体化控制”的设计优势。

3.2.2 disconnect:断开机械臂(含夹爪)连接

def disconnect(self):"""Disconnect from the robot arm (and release gripper resources).Returns:None"""handle = self.robot.rm_delete_robot_arm()if handle == 0:print("\nSuccessfully disconnected from the robot arm\n")else:print("\nFailed to disconnect from the robot arm\n")
  • 复用逻辑:与上一篇一致,释放机械臂连接句柄;
  • 关键补充:断开连接时,SDK会自动释放夹爪的控制资源,避免夹爪处于“卡死”状态,因此程序结束前必须调用该函数。

3.2.3 movej:关节空间运动(抓取/释放的基础)

def movej(self, joint, v=20, r=0, connect=0, block=1):"""Perform movej motion (move to gripper target position).Args:joint (list of float): Joint positions.v (float, optional): Speed of the motion. Defaults to 20.connect (int, optional): Trajectory connection flag. Defaults to 0.block (int, optional): Whether the function is blocking (1 for blocking, 0 for non-blocking). Defaults to 1.r (float, optional): Blending radius. Defaults to 0.Returns:None"""movej_result = self.robot.rm_movej(joint, v, r, connect, block)if movej_result == 0:print("\nmovej motion succeeded\n")else:print("\nmovej motion failed, Error code: ", movej_result, "\n")
  • 复用逻辑:参数、返回值与上一篇完全一致;
  • 核心作用:夹爪无法在任意位置完成有效抓取,需通过movej将机械臂末端(夹爪)运动到“抓取位”“放置位”“复位位”,是夹爪作业的前提。

3.2.4 set_gripper_pick_on:夹爪连续力控抓取(核心函数)

def set_gripper_pick_on(self, speed, force, block=True, timeout=30):"""Perform continuous force-controlled gripping with the gripper.Args:speed (int): Speed of the gripper.force (int): Force applied by the gripper.block (bool, optional): Whether the function is blocking. Defaults to True.timeout (int, optional): Timeout duration. Defaults to 30.Returns:None"""gripper_result = self.robot.rm_set_gripper_pick_on(speed, force, block, timeout)if gripper_result == 0:print("\nGripper continuous force control gripping succeeded\n")else:print("\nGripper continuous force control gripping failed, Error code: ", gripper_result, "\n")time.sleep(2)

这是控制夹爪完成“抓取”动作的核心函数,我们从参数含义执行逻辑两个维度拆解:

参数详解

  1. speed(必选,int):夹爪闭合的速度,取值范围需符合睿尔曼夹爪硬件限制(通常0~1000),示例中设为500(中等速度):
    • 速度过小:夹爪闭合慢,作业效率低;
    • 速度过大:易因冲击导致抓取目标掉落或夹爪损坏。
  2. force(必选,int):夹爪抓取时的夹持力,取值范围通常0~500(单位:N,牛顿),示例中设为200(适中力度):
    • 力度过小:无法夹紧物体,易掉落;
    • 力度过大:损坏易碎物体(如玻璃、塑料件)或夹爪自身。
  3. block(可选,bool):阻塞标志,默认True:
    • True(阻塞):程序等待夹爪完成抓取动作后,再执行下一行代码;
    • False(非阻塞):发送抓取指令后程序立即执行后续代码,夹爪后台完成抓取。
  4. timeout(可选,int):超时时间,默认30秒:
    • 若夹爪因故障无法完成抓取动作,程序等待timeout秒后判定为执行失败,避免程序无限等待。

执行逻辑

  1. 调用SDK核心接口rm_set_gripper_pick_on,传入速度、力度等参数,返回执行结果(0=成功,非0=错误码);
  2. 打印执行结果,便于调试排查问题;
  3. time.sleep(2):额外等待2秒,确保夹爪完成物理闭合动作(即使block=True,硬件动作仍需短暂时间,避免后续运动指令打断抓取)。

3.2.5 set_gripper_release:夹爪释放(核心函数)

def set_gripper_release(self, speed, block=True, timeout=30):"""Release the gripper.Args:speed (int): Speed of the gripper release.block (bool, optional): Whether the function is blocking. Defaults to True.timeout (int, optional): Timeout duration. Defaults to 30.Returns:None"""gripper_result = self.robot.rm_set_gripper_release(speed, block, timeout)if gripper_result == 0:print("\nGripper release succeeded\n")else:print("\nGripper release failed, Error code: ", gripper_result, "\n")time.sleep(2)

这是控制夹爪完成“释放”动作的核心函数,拆解如下:

参数详解

  1. speed(必选,int):夹爪张开的速度,取值范围与抓取速度一致(通常0~1000),示例中设为500:
    • 释放速度需适配抓取目标:易碎物体建议低速释放,避免掉落;重型物体可适当提高速度。
  2. block/timeout:含义与set_gripper_pick_on完全一致,默认阻塞+30秒超时。

执行逻辑

  1. 调用SDK核心接口rm_set_gripper_release,传入释放速度等参数,返回执行结果;
  2. 打印执行结果;
  3. time.sleep(2):等待夹爪完成物理张开动作,确保物体顺利脱离夹爪。

3.3 主函数main:“运动+抓取+释放”完整流程

def main():# Create a robot arm controller instance and connect to the robot armrobot_controller = RobotArmController("192.168.1.18", 8080, 3)# Get API versionprint("\nAPI Version: ", rm_api_version(), "\n")# Perform movej motion (move to gripping position)robot_controller.movej([90, 90, 30, 0, 60, 0])# Perform continuous force-controlled gripping with the gripperrobot_controller.set_gripper_pick_on(500, 200)# Perform movej motion (move to placing position)robot_controller.movej([0, 90, 30, 0, 60, 0])# Release the gripperrobot_controller.set_gripper_release(500)# Perform movej motion (reset to initial position)robot_controller.movej([90, 90, 30, 0, 60, 0])# Disconnect the robot armrobot_controller.disconnect()if __name__ == "__main__":main()

主函数是夹爪作业的“完整执行流程”,我们按步骤拆解核心逻辑:

  1. 建立连接:创建RobotArmController实例,传入机械臂IP(192.168.1.18)、端口(8080)、连接等级(3),完成机械臂+夹爪的连接;
  2. 确认SDK版本:打印rm_api_version(),确保SDK版本与机械臂固件兼容,避免夹爪指令执行失败;
  3. 运动到抓取位:调用movej将机械臂运动到预设的抓取位[90, 90, 30, 0, 60, 0](关节角度),此时夹爪正对抓取目标;
  4. 夹爪抓取:调用set_gripper_pick_on(500, 200),以500的速度、200N的力度完成抓取;
  5. 运动到放置位:调用movej将机械臂运动到放置位[0, 90, 30, 0, 60, 0],携带抓取目标移动;
  6. 夹爪释放:调用set_gripper_release(500),以500的速度张开夹爪,释放目标;
  7. 复位到初始位:调用movej将机械臂复位到抓取位,便于下一次作业;
  8. 断开连接:释放连接资源,完成整个作业流程。

四、应用实践:从代码到夹爪抓取实操

掌握夹爪控制代码逻辑后,我们通过实操完成“抓取-放置”作业,核心步骤如下:

4.1 环境搭建

4.1.1 硬件准备

  1. 基础硬件:睿尔曼第三代机械臂(如RM_65)、电脑(Windows/Linux)、网线/无线网卡(确保与机械臂同网段);
  2. 新增硬件:睿尔曼配套电动夹爪(已正确安装到机械臂末端);
  3. 辅助物料:待抓取物体(如塑料杯、小积木,建议先从轻型、规则形状物体开始)。

4.1.2 软件准备

与上一篇完全一致:

  1. 安装Python 3.7+(睿尔曼SDK推荐版本);
  2. 下载睿尔曼第三代机械臂SDK,解压到本地;
  3. 将夹爪控制例程脚本放在SDK指定目录(确保sys.path路径正确)。

4.1.3 网络配置

与上一篇完全一致:

  1. 机械臂默认IP:192.168.1.18(可通过示教器修改);
  2. 电脑IP设置为192.168.1.x(x≠18,子网掩码255.255.255.0);
  3. 测试连通性:ping 192.168.1.18,确保能ping通。

4.1.4 夹爪硬件确认

新增步骤:

  1. 检查夹爪与机械臂末端的连接:确保夹爪固定牢固,供电/通信接口无松动;
  2. 夹爪自检:启动机械臂后,通过示教器确认夹爪处于“就绪”状态,无报错信息。

4.2 运行步骤

  1. 启动机械臂:接通电源,待机械臂+夹爪完成自检(进入“就绪”状态);
  2. 放置抓取目标:将待抓取物体放在机械臂“抓取位”(与代码中[90, 90, 30, 0, 60, 0]对应的物理位置或修改代码中的位置参数);
  3. 修改代码:将RobotArmController("192.168.1.18", 8080, 3)中的IP改为实际机械臂IP;
  4. 运行脚本:在终端执行python 夹爪控制例程文件名.py
  5. 观察执行过程:
    • 机械臂先运动到抓取位;
    • 夹爪闭合完成抓取;
    • 机械臂运动到放置位;
    • 夹爪张开释放物体;
    • 机械臂复位到初始位;
    • 终端打印每一步的执行结果(成功/失败+错误码)。

4.3 常见问题与排查

针对夹爪控制的专属问题,补充如下排查方向:

1. 夹爪无动作(指令返回成功但无物理动作)

  • 排查:
    1. 夹爪是否已正确安装并完成自检(示教器查看夹爪状态);
    2. time.sleep()时间是否过短(建议至少2秒,确保硬件动作完成);
    3. 速度参数是否设为0(speed=0时夹爪无动作)。

2. 抓取失败(错误码非0)

  • 排查:
    1. 力度参数是否超出夹爪硬件限制(通常0~500N,需参考夹爪手册);
    2. 抓取位是否超出夹爪工作范围(夹爪开合角度有限,需确保物体在夹持范围内);
    3. 机械臂连接等级是否为3(等级不足无法执行夹爪控制指令)。

3. 抓取后物体掉落

  • 排查:
    1. 夹持力force是否过小(可适当提高,如从200调整为300);
    2. 机械臂运动速度v是否过快(运动时冲击导致物体掉落,可降低movej的速度参数);
    3. 夹爪表面是否光滑(可增加防滑垫提升摩擦力)。

4. 释放失败(夹爪无法张开)

  • 排查:
    1. 释放速度speed是否过小(可适当提高);
    2. 物体是否卡死在夹爪中(手动轻推物体,确认无卡顿);
    3. 超时时间timeout是否过短(可延长至60秒,排查是否为动作超时)。

五、总结与拓展

本文在上一篇基础运动控制的基础上,完成了睿尔曼机械臂夹爪控制的“代码解析+实操落地”,核心知识点如下:

  1. 夹爪控制的核心逻辑:机械臂连接→运动到抓取位→力控抓取→运动到放置位→释放→复位→断开连接;
  2. 夹爪核心函数参数:
    • set_gripper_pick_on:通过speed(闭合速度)、force(夹持力)控制抓取效果;
    • set_gripper_release:通过speed(张开速度)控制释放效果;
  3. 协同控制关键:夹爪动作需与机械臂运动配合,通过movej到达指定位置后,再执行抓取/释放,且需通过time.sleep()确保硬件动作完成。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/995851.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

具身智能:零基础入门睿尔曼机械臂(一)——从硬件准备到首次运行全攻略

前言 作为刚接触睿尔曼协作机器人的新手,是否对着包装箱里的部件感到无从下手?别担心!这篇入门博客将以官方硬件准备手册为基础,带大家一步步完成机器人的组装、接线、开机与示教器连接,无论是操作人员、技术人员…

DevEco Studio签名认证与上传应用

DevEco Studio签名认证与上传应用 引言 通过本指南,您将彻底搞懂并完成: ​核心概念:理解证书、Profile、密钥之间的关系与作用。 ​文件制备:在 DevEco Studio 中生成密钥和证书请求文件。 ​官方申请:在 AppGal…

洛谷U640030 删除一个点 题解 割点/点双连通分量

题目链接:https://www.luogu.com.cn/problem/U640030 题目大意: 给你一个 \(n\) 个顶点 \(m\) 条边的无向图。顶点编号从 \(1\) 到 \(n\)。 请你求出该图删除一个点之后,连通块最多有多少。 解题思路: 首先,有两个…

终端 MQTT 通信开发规范

终端 MQTT 通信开发规范 一、概述 本文档整合终端与服务端 MQTT 通信全流程规范,涵盖连接配置、认证注册、主题格式、数据上报、指令交互等核心模块,为终端开发提供标准化、可落地的操作指南,确保通信兼容性与安全性…

UEFI 中的杂项知识总结-Protocol Handle 机制的详细介绍 - 阿源

本文介绍了在 UEFI 学习过程中遇到的一些知识集合。总结如下:复位向量ResetVector;不同平台的OS loader/GRUB;UEFI中的ESP目录是什么;以及UEFI中很重要的Protocol Handle机制,非常类似于Linux设备驱动和应用的设计…

状态模式

状态模式:封装状态变化的行为设计艺术 一、状态模式的定义与核心思想 状态模式(State Pattern) 是一种行为型设计模式,它允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。其核心思想是 …

每日3题 4(咕咕咕

孩子们事情太多了明天再说

基于事件驱动机制的提醒系统设计方案

基于事件驱动机制的提醒系统设计方案一、系统架构设计 采用 "分层架构 + 事件驱动引擎" 模式,各层级职责与技术选型如下:层级核心职责技术选型前端层用户交互(增删改查提醒)、实时接收提醒、处理确认操作…

docker快速上手

docker快速上手 安装配置# 移除旧版本 sudo dnf remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine # 配置yum源 sudo …

全球首个液冷迷你机!abee AI Station 395 Max工作站图赏

全球首个液冷迷你机!abee AI Station 395 Max工作站图赏Posted on 2025-12-10 01:22 lzhdim 阅读(0) 评论(0) 收藏 举报日前,abee AI Station 395 Max迷你液冷AI工作站发布,定价为17999元。 现在这款新品已经来…

Docker环境下Redis ACL实战踩坑记:权限、挂载与用户配置解析

Docker环境下Redis ACL实战踩坑指南:权限、挂载与用户配置解析 开篇:实战场景说明 最近在生产环境中部署Redis时,我们决定升级到Redis 7.0并启用ACL功能,以实现更精细化的权限控制。核心需求很简单:启用ACL功能,…

一例罗技M275鼠标空键程处理

笔者手中有一个罗技M275鼠标,最近发现鼠标空键程现象比较严重,不如手中另一只M215鼠标手感清脆、爽利。因此笔者尝试解决手中鼠标的空键程现象。 首先根据网络上已经提出的解决办法,打开鼠标,在鼠标左键和微动的接…

Alientech KESS V3: Master Bench-Boot Protocols Activation for Agri Trucks Buses

Overcoming Agriculture Truck & Bus Diagnostic Challenges: The Alientech KESS V3 KESS3 Master Solution In the world of agriculture truck and bus maintenance, downtime is a costly enemy. For European…

洛谷U640022 找割点 题解 点双连通分量

题目链接:https://www.luogu.com.cn/problem/U640022根节点要分割出至少 \(2\) 个连通块(因为根节点没有父节点那部分的连通块)。 其它节点只需要分割出至少 \(1\) 个连通块即可。对于一个 当前节点 \(u\),dfs 它的…

Alientech KESS V3 Master OBD Protocol Activation: Bike, ATV, UTV – Boost Repair Diagnostics

Mastering Protocol Activation for Bikes, ATVs, and UTVs: The Alientech KESS V3 Advantage Problem: Activation Challenges with Specialized Vehicles For European and American automotive professionals and …

第50天(中等题 数据结构)

打卡第五十天 2道中等题题目:思路:代码: class Solution { public:int numOfSubarrays(vector<int>& arr) {const int MODULO = 1000000007; int odd = 0, even = 1; // odd: 奇数前缀数量,ev…

Alientech KESS3 Master: Efficient OBD Protocols Activation for Agri Trucks Buses

Diagnosing the Challenges of Agricultural, Truck, and Bus Diagnostics For automotive professionals and owners working with agriculture, trucks, and buses, traditional diagnostic tools often fall short.…

内网环境-centos7.6配置chrom和flask项目

1.离线安装Anaconda, 配置python环境 #ip网络配置文件 vim /etc/sysconfig/network-scripts/ifcfg-ens33Linux安装Anaconda教程 2.离线安装chrome 2.1离线安装命令#使用 rpm命令强制安装 --nodeps选项会跳过依赖检查 r…

selenium其他重要的Api

元素等待方法 认识等待 由于⽹络或其他原因,元素未能及时加载出来,⽽代码已执⾏,会触发异常,故要设置等待。代码执⾏过程中,第⼀次未找到元素,先不抛出异常。激活等待时间,在等待过程中如果找到元素就执⾏。 隐…

洛谷P2860 [USACO06JAN] Redundant Paths G 题解 边双连通分量

题目链接:https://www.luogu.com.cn/problem/P2860 解题思路: 双连通分量缩点,设缩点后有 \(cnt\) 个度数为 \(1\) 的点。 则答案为 \(\lceil \frac{cnt}{2} \rceil\)(即 (cnt + 1) / 2)。 示例程序: #include &…