乱蚣 发表于 2025-12-10 03:45:04

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

@
目录

[*]一、前言
[*]二、睿尔曼机械臂夹爪:抓取作业的核心执行部件

[*]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)这是控制夹爪完成“抓取”动作的核心函数,我们从参数含义和执行逻辑两个维度拆解:
参数详解


[*]speed(必选,int):夹爪闭合的速度,取值范围需符合睿尔曼夹爪硬件限制(通常0~1000),示例中设为500(中等速度):

[*]速度过小:夹爪闭合慢,作业效率低;
[*]速度过大:易因冲击导致抓取目标掉落或夹爪损坏。

[*]force(必选,int):夹爪抓取时的夹持力,取值范围通常0~500(单位:N,牛顿),示例中设为200(适中力度):

[*]力度过小:无法夹紧物体,易掉落;
[*]力度过大:损坏易碎物体(如玻璃、塑料件)或夹爪自身。

[*]block(可选,bool):阻塞标志,默认True:

[*]True(阻塞):程序等待夹爪完成抓取动作后,再执行下一行代码;
[*]False(非阻塞):发送抓取指令后程序立即执行后续代码,夹爪后台完成抓取。

[*]timeout(可选,int):超时时间,默认30秒:

[*]若夹爪因故障无法完成抓取动作,程序等待timeout秒后判定为执行失败,避免程序无限等待。

执行逻辑


[*]调用SDK核心接口rm_set_gripper_pick_on,传入速度、力度等参数,返回执行结果(0=成功,非0=错误码);
[*]打印执行结果,便于调试排查问题;
[*]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)这是控制夹爪完成“释放”动作的核心函数,拆解如下:
参数详解


[*]speed(必选,int):夹爪张开的速度,取值范围与抓取速度一致(通常0~1000),示例中设为500:

[*]释放速度需适配抓取目标:易碎物体建议低速释放,避免掉落;重型物体可适当提高速度。

[*]block/timeout:含义与set_gripper_pick_on完全一致,默认阻塞+30秒超时。
执行逻辑


[*]调用SDK核心接口rm_set_gripper_release,传入释放速度等参数,返回执行结果;
[*]打印执行结果;
[*]time.sleep(2):等待夹爪完成物理张开动作,确保物体顺利脱离夹爪。
3.3 主函数main:“运动+抓取+释放”完整流程

def main():
    # Create a robot arm controller instance and connect to the robot arm
    robot_controller = RobotArmController("192.168.1.18", 8080, 3)

    # Get API version
    print("\nAPI Version: ", rm_api_version(), "\n")

    # Perform movej motion (move to gripping position)
    robot_controller.movej()

    # Perform continuous force-controlled gripping with the gripper
    robot_controller.set_gripper_pick_on(500, 200)

    # Perform movej motion (move to placing position)
    robot_controller.movej()

    # Release the gripper
    robot_controller.set_gripper_release(500)

    # Perform movej motion (reset to initial position)
    robot_controller.movej()

    # Disconnect the robot arm
    robot_controller.disconnect()

if __name__ == "__main__":
    main()主函数是夹爪作业的“完整执行流程”,我们按步骤拆解核心逻辑:

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

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

4.1.1 硬件准备


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

与上一篇完全一致:

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

与上一篇完全一致:

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

新增步骤:

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


[*]启动机械臂:接通电源,待机械臂+夹爪完成自检(进入“就绪”状态);
[*]放置抓取目标:将待抓取物体放在机械臂“抓取位”(与代码中对应的物理位置或修改代码中的位置参数);
[*]修改代码:将RobotArmController("192.168.1.18", 8080, 3)中的IP改为实际机械臂IP;
[*]运行脚本:在终端执行python 夹爪控制例程文件名.py;
[*]观察执行过程:

[*]机械臂先运动到抓取位;
[*]夹爪闭合完成抓取;
[*]机械臂运动到放置位;
[*]夹爪张开释放物体;
[*]机械臂复位到初始位;
[*]终端打印每一步的执行结果(成功/失败+错误码)。

4.3 常见问题与排查

针对夹爪控制的专属问题,补充如下排查方向:
1. 夹爪无动作(指令返回成功但无物理动作)


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

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


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

3. 抓取后物体掉落


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

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


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

五、总结与拓展

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

[*]夹爪控制的核心逻辑:机械臂连接→运动到抓取位→力控抓取→运动到放置位→释放→复位→断开连接;
[*]夹爪核心函数参数:

[*]set_gripper_pick_on:通过speed(闭合速度)、force(夹持力)控制抓取效果;
[*]set_gripper_release:通过speed(张开速度)控制释放效果;

[*]协同控制关键:夹爪动作需与机械臂运动配合,通过movej到达指定位置后,再执行抓取/释放,且需通过time.sleep()确保硬件动作完成。

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

髭赌 发表于 2025-12-11 04:03:23

收藏一下   不知道什么时候能用到

全阳霁 发表于 2025-12-20 02:57:42

过来提前占个楼

丧血槌 发表于 2025-12-29 05:10:39

过来提前占个楼

贺蛟亡 发表于 2026-1-18 04:20:45

谢谢楼主提供!

炳裘垦 发表于 2026-1-20 00:40:42

不错,里面软件多更新就更好了

玛凶 发表于 2026-1-20 23:13:33

这个有用。

沦嘻亟 发表于 2026-1-21 03:43:28

yyds。多谢分享

祖柔惠 发表于 2026-1-21 10:17:28

谢谢分享,辛苦了

习和璧 发表于 2026-1-26 08:10:29

新版吗?好像是停更了吧。

迫蔺 发表于 2026-1-28 05:14:28

谢谢分享,辛苦了

骆熙华 发表于 2026-1-28 08:48:43

谢谢楼主提供!

泻缥 发表于 2026-1-28 19:20:58

热心回复!

喳谍 发表于 2026-2-3 06:56:44

感谢分享,学习下。

茅香馨 发表于 2026-2-6 04:38:17

鼓励转贴优秀软件安全工具和文档!

钤凑讪 发表于 2026-2-6 11:29:50

谢谢楼主提供!

印萍 发表于 2026-2-6 12:47:08

感谢发布原创作品,程序园因你更精彩

港髁 发表于 2026-2-8 14:23:03

感谢分享,下载保存了,貌似很强大

愆蟠唉 发表于 2026-2-8 16:01:44

yyds。多谢分享

这帜 发表于 2026-2-9 02:48:21

谢谢分享,辛苦了
页: [1] 2
查看完整版本: 具身智能:零基础入门睿尔曼机械臂(三)——夹爪抓取与释放控制全解析