【睿尔曼-RealMan】睿尔曼超轻量仿人机械臂--双臂复合机器人跳舞python demo

Forrest 2023-12-14

一、Python语言开发环境

1.Win10系统下使用

        开发环境
        系统:win10
        IDE:PyCharm
        Python版本:python 3.11.2
        SDK版本号:4.1.3
       由于机械臂相关软件版本不定期更新,如果你使用的软件接口或协议与本文有出入,请联系官方技术人员及时更新。

2.项目创建&加载SDK

       创建python文件,可以通过多种方式,本文中以Pycharm为示例。详述从项目创建到添加SDK、实际运行控制机械臂。

       创建Python项目。打开Pycharm软件,在右上角’File-->New Project’。打开新建项目界面,在界面中可选择项目路径及项目名称、Python版本等信息。最后点击界面右下角‘Create’按钮。




3.加载SDK文件

        第一步,添加dll文件。找到项目创建的目录,在设备资料中‘RM-65\(2)API\C\windows’中选择对应本地电脑的SDK版本(此处可选32位/64位),将dll文件复制并粘贴至上一步骤中创建项目的文件夹中。SDK中的接口可以通过SDK接口函数示例文档查看。

        第二步,程序中添加库文件。可在程序界面右击选择‘Run main’选项进行运行程序测试。

        第三步,测试项目运行。在程序界面右击选择“Run main”,查看是否会报错。成功界面如下所示:

        第四步,本文基于双臂复合机器人开发了一个跳舞的demo。将以下程序写入Python程序中即可。代码如下:

import threading
import time

from robotic_arm_package.robotic_arm import *

global speed
global clog

# 机械臂1为左臂2为右臂
arm1 = Arm(RM65, '192.168.10.18')
arm2 = Arm(RM65, '192.168.10.19')


def Robot_Lift():
# 预备运动
move_j(arm1, [-45, -70, 0, 0, 0, 0])
Hand_Seq(arm1, 1)
Hand_Seq(arm1, 2)
Hand_Seq(arm1, 1)
move_j(arm1, [0, -90, 0, 0, 0, 0])

# 第一段
Hand_Seq(arm1, 3)
move_j(arm1, [-45, -70, 0, 0, 0, 0])
move_j(arm1, [-150, -70, 0, 0, 0, 0])
Hand_Seq(arm1, 1)
move_j(arm1, [-175, 0, 0, 0, 0, 0])
move_j(arm1, [0, -90, 0, 0, 0, 0])

# 第二段
move_j(arm1, [-90, -70, 0, 0, 0, 0])
Hand_Seq(arm1, 2)
move_j(arm1, [-90, 70, -120, 0, -25, 0])
move_j(arm1, [-90, 0, 0, 0, 0, 0])
move_j(arm1, [0, -90, 0, 0, 0, 0])
Hand_Seq(arm1, 1)

# 第三段
move_j(arm1, [0, 90, 0, 0, 0, 0])
move_j(arm1, [0, -90, 0, 0, 0, 0])
move_j(arm1, [0, 90, 0, 0, 0, 0])
move_j(arm1, [0, -90, 0, 0, 0, 0])

# 第四段
move_j(arm1, [0, 0, 90, 0, 0, 0])
Hand_Seq(arm1, 2)
move_j(arm1, [0, -55, 115, 0, 30, 0])
move_j(arm1, [0, 0, 90, 0, 0, 0])
move_j(arm1, [0, -55, 115, 0, 30, 0])
move_j(arm1, [0, 0, 90, 0, 0, 0])
move_j(arm1, [0, -90, 0, 0, 0, 0])
Hand_Seq(arm1, 1)

# 第五段
Hand_Seq(arm1, 2)
move_j(arm1, [0, -45, 0, 0, 0, 0])
move_j(arm1, [-50, -30, -80, -60, -110, 0])
Hand_Seq(arm1, 1)
Hand_Seq(arm1, 4)
Hand_Seq(arm1, 4)
Hand_Seq(arm1, 1)
Hand_Seq(arm1, 2)
move_j(arm1, [0, -45, 0, 0, 0, 0])
move_j(arm1, [0, -90, 0, 0, 0, 0])
Hand_Seq(arm1, 1)
print("左臂运动完成")


def Robot_Right():
# 预备运动
move_j(arm2, [45, -70, 0, 0, 0, 0])
Hand_Seq(arm2, 1)
Hand_Seq(arm2, 2)
Hand_Seq(arm2, 1)
move_j(arm2, [0, -90, 0, 0, 0, 0])

# 第一段
Hand_Seq(arm2, 3)
move_j(arm2, [45, -70, 0, 0, 0, 0])
move_j(arm2, [150, -70, 0, 0, 0, 0])
Hand_Seq(arm2, 1)
move_j(arm2, [175, 0, 0, 0, 0, 0])
move_j(arm2, [0, -90, 0, 0, 0, 0])

# 第二段
move_j(arm2, [90, -70, 0, 0, 0, 0])
Hand_Seq(arm2, 2)
move_j(arm2, [90, 70, -120, 0, -25, 0])
move_j(arm2, [90, 0, 0, 0, 0, 0])
move_j(arm2, [0, -90, 0, 0, 0, 0])
Hand_Seq(arm2, 1)

# 第三段
move_j(arm2, [0, 90, 0, 0, 0, 0])
move_j(arm2, [0, -90, 0, 0, 0, 0])
move_j(arm2, [0, 90, 0, 0, 0, 0])
move_j(arm2, [0, -90, 0, 0, 0, 0])

# 第四段
move_j(arm2, [0, 0, 90, 0, 0, 0])
Hand_Seq(arm2, 2)
move_j(arm2, [0, -55, 115, 0, 30, 0])
move_j(arm2, [0, 0, 90, 0, 0, 0])
move_j(arm2, [0, -55, 115, 0, 30, 0])
move_j(arm2, [0, 0, 90, 0, 0, 0])
move_j(arm2, [0, -90, 0, 0, 0, 0])
Hand_Seq(arm2, 1)

# 第五段
Hand_Seq(arm2, 2)
move_j(arm2, [0, -45, 0, 0, 0, 0])
move_j(arm2, [50, -30, -80, 60, -110, 0])
Hand_Seq(arm2, 1)
Hand_Seq(arm2, 4)
Hand_Seq(arm2, 4)
Hand_Seq(arm2, 1)
Hand_Seq(arm2, 2)
move_j(arm2, [0, -45, 0, 0, 0, 0])
move_j(arm2, [0, -90, 0, 0, 0, 0])
Hand_Seq(arm2, 1)
print("右臂运动完成")


def move_j(robot, joint):
ret = robot.Movej_Cmd(joint, speed, 0, clog)
if ret == 0:
print("运动完成")
else:
print("运动规划失败")


def Hand_Seq(robot, num):
ret = robot.Set_Hand_Seq(num, clog)
if ret == 0:
print("运动完成")
else:
print("运动规划失败")


if __name__ == "__main__":
# 设置运动速度
speed = 30

# 设置阻塞模式
clog = True

# 创建两个线程
t1 = threading.Thread(name='t1', target=Robot_Lift)
t2 = threading.Thread(name='t2', target=Robot_Right)

# 启动两个线程
t1.start()
t2.start()

# 等待两个线程完成
t1.join()
t2.join()

运行结果展示:


附件下载

0 条评论

关于作者

Forrest

让机械臂成为智能、易用、可靠、通用的作业工具,走入千行百业、千家万户。

选择发帖板块
选择发帖板块