7.2.7 综合演示案例

本节汇总 UNO Q Debian Python 示例脚本。建议先运行 control_rgb_demo.py,确认 Python 与 Bridge 通信正常后,再运行会产生机械臂运动的案例。

注意:以下脚本会直接控制机械臂或外设。运行前请固定机械臂、清空工作区域,并确保同一时刻没有 App Lab、TCP Socket、手柄控制或其他 Python 程序在发送运动指令。

1. 示例脚本列表

脚本 功能 是否产生运动
control_rgb_demo.py RGB 颜色循环 否
go_home_demo.py 机械臂回零 是
single_joint_angle_demo.py 单关节运动 是
multi_joint_angles_demo.py 多关节运动 是
control_robot_sway_demo.py 左右摆动 是
control_robot_dance_demo.py 舞蹈动作 是
control_robot_gripper_demo.py 自适应夹爪测试 是
control_robot_pump_demo.py 吸泵搬运流程 是

推荐在 UNO Q Debian 终端进入示例目录后运行:

cd ~/mycobot/example/debian
python3 control_rgb_demo.py

每次只运行一个脚本。上一个脚本未退出时,不要启动下一个案例。

2. RGB 颜色循环

脚本:control_rgb_demo.py。该案例只控制末端 RGB 灯板,不产生机械臂运动,适合作为第一个通信验证案例。

from pymycobot.mycobot280 import MyCobot280

import time

mc = MyCobot280(unoq_bridge=True)
time.sleep(2)

i = 7
#循环7次
while i > 0:
    mc.set_color(0,0,255) #蓝灯亮
    time.sleep(2)    #等2秒
    mc.set_color(255,0,0) #红灯亮
    time.sleep(2)    #等2秒
    mc.set_color(0,255,0) #绿灯亮
    time.sleep(2)    #等2秒
    i -= 1

运行命令:

python3 control_rgb_demo.py

3. 机械臂回零

脚本:go_home_demo.py。该案例先检查控制器连接状态,确认连接后将 6 个关节发送到零位。

from pymycobot.mycobot280 import MyCobot280

import time

mc = MyCobot280(unoq_bridge=True)
time.sleep(2)

if mc.is_controller_connected() != 1:
    print("请正确连接机械臂进行程序写入")
    exit(0)

# 回零
mc.send_angles([0, 0, 0, 0, 0, 0], 30)

运行命令:

python3 go_home_demo.py

4. 单关节运动

脚本:single_joint_angle_demo.py。该案例先回零,再依次控制不同关节到指定角度,最后调用 go_home() 回到初始姿态。

from pymycobot.mycobot280 import MyCobot280

import time

mc = MyCobot280(unoq_bridge=True)
time.sleep(2)


# 回零
mc.send_angles([0, 0, 0, 0, 0, 0], 40)
time.sleep(3)

# 控制关节3运动70°
mc.send_angle(3,70,40)
time.sleep(3)

# 控制关节4运动-70°
mc.send_angle(4,-70,40)
time.sleep(3)

# 控制关节1运动90°
mc.send_angle(1,90,40)
time.sleep(3)

# 控制关节5运动-90°
mc.send_angle(5,-90,40)
time.sleep(3)

# 控制关节5运动90°
mc.send_angle(5,90,40)
time.sleep(3)

# 回零
mc.go_home()

运行命令:

python3 single_joint_angle_demo.py

5. 多关节运动

脚本:multi_joint_angles_demo.py。该案例通过 send_angles() 一次发送 6 个关节角度,实现多关节联动。

from pymycobot.mycobot280 import MyCobot280

import time

mc = MyCobot280(unoq_bridge=True)
time.sleep(2)


# 回零
mc.send_angles([0, 0, 0, 0, 0, 0], 40)
time.sleep(2.5)

# 控制多个关节转动的不同角度
mc.send_angles([90,45,-90,90,-90,90],50)
time.sleep(2.5)
# 机械臂复原归零

mc.send_angles([0,0,0,0,0,0],50)
time.sleep(2.5)
# 控制多个关节转动的不同角度
mc.send_angles([-90,-45,90,-90,90,-90],50)
time.sleep(2.5)

# 回零
mc.send_angles([0,0,0,0,0,0],50)

运行命令:

python3 multi_joint_angles_demo.py

6. 左右摆动

脚本:control_robot_sway_demo.py。该案例先读取当前角度,再回零并控制关节 1、关节 2 形成左右摆动动作。

from pymycobot.mycobot280 import MyCobot280

import time

mc = MyCobot280(unoq_bridge=True)
time.sleep(2)


# 获得当前位置的角度
angle_datas = mc.get_angles()
print(angle_datas)

# 让机械臂移动到指定位置
mc.send_angles([0, 0, 0, 0, 0, 0], 50)
time.sleep(2.5)

# 让关节1移动到90这个位置
mc.send_angle(1, 90, 50)
time.sleep(2)

# 设置循环次数
num = 5

# 让机械臂左右摇摆
while num > 0:
    # 让关节2移动到50这个位置
    mc.send_angle(2, 50, 50)
    # 设置等待时间,确保机械臂已经到达指定位置
    time.sleep(1.5)
    # 让关节2移动到-50这个位置
    mc.send_angle(2, -50, 50)
    # 设置等待时间,确保机械臂已经到达指定位置
    time.sleep(1.5)
    num -= 1
# 让机械臂缩起来。你可以手动摆动机械臂,然后使用get_angles()函数获得坐标数列,
# 通过该函数让机械臂到达你所想的位置。
mc.send_angles([88.68, -138.51, 145.65, -128.05, -9.93, -15.29], 50)
time.sleep(2.5)

运行命令:

python3 control_robot_sway_demo.py

7. 舞蹈动作

脚本:control_robot_dance_demo.py。该案例包含快速、连续的多姿态运动。运行前请充分清空工作区域,并确认机械臂底座固定可靠。

from pymycobot.mycobot280 import MyCobot280

import time

mc = MyCobot280(unoq_bridge=True)
time.sleep(2)

# 设置开始开始时间
start = time.time()
# 让机械臂到达指定位置
mc.send_angles([-1.49, 115, -145, 30, -33.42, 137.9], 80)
# 判断其是否到达指定位置
while not mc.is_in_position([-1.49, 115, -145, 30, -33.42, 137.9], 0):
    # 让机械臂恢复运动
    mc.resume()
    # 让机械臂移动0.5s
    time.sleep(0.5)
    # 暂停机械臂移动
    mc.pause()
    # 判断移动是否超时
    if time.time() - start > 3:
        break
# 设置开始时间
start = time.time()
# 让运动持续30秒
while time.time() - start < 30:
    # 让机械臂快速到达该位置
    mc.send_angles([-1.49, 115, -145, 30, -33.42, 137.9], 80)
    # 将灯的颜色为[0,0,50]
    mc.set_color(0, 0, 50)
    time.sleep(0.7)
    # 让机械臂快速到达该位置
    mc.send_angles([-1.49, 55, -145, 80, 33.42, 137.9], 80)
    # 将灯的颜色为[0,50,0]
    mc.set_color(0, 50, 0)
    time.sleep(0.7)

运行命令:

python3 control_robot_dance_demo.py

8. 夹爪控制

脚本:control_robot_gripper_demo.py。该案例用于自适应夹爪开合测试。运行前请确认夹爪类型、供电和接线与示例一致。

from pymycobot.mycobot280 import MyCobot280

import time

def gripper_test(mc):
    print("Start check IO part of api\n")
    # 检测夹爪是否正在移动
    flag = mc.is_gripper_moving()
    print("Is gripper moving: {}".format(flag))
    time.sleep(1)

    mc.send_angle(1, 0, 20)
    time.sleep(2)

    mc.send_angles([88.59, 89.91, -89.64, 90.7, 88.5, 89.29], 30)
    time.sleep(3)

    # 以80的速度让夹爪到达100状态
    mc.set_gripper_value(100, 80, 1)
    time.sleep(3)
    # 以80的速度让夹爪到达0状态
    mc.set_gripper_value(0, 80, 1)
    time.sleep(3)

    num=5
    while num>0:
        # 设置夹爪的状态,让其以80的速度快速打开爪子
        mc.set_gripper_state(0, 80, 1)
        time.sleep(3)
        # 设置夹爪的状态,让其以70的速度快速收拢爪子
        mc.set_gripper_state(1, 80, 1)
        time.sleep(3)
        num-=1

    # 获取夹爪的值
    print("")
    print(mc.get_gripper_value())

if __name__ == "__main__":
    mc = MyCobot280(unoq_bridge=True)
    time.sleep(2)

    mc.send_angles([0, 0, 0, 0, 0, 0], 40)
    time.sleep(3)
    gripper_test(mc)

运行命令:

python3 control_robot_gripper_demo.py

9. 吸泵控制

脚本:control_robot_pump_demo.py。该案例通过末端 IO 控制吸泵,并配合多个姿态完成吸取流程。运行前请确认吸泵接线和 IO 定义。

from pymycobot.mycobot280 import MyCobot280

import time

mc = MyCobot280(unoq_bridge=True)
time.sleep(2)

# 机械臂运动的位置
angles = [
            [92.9, -10.1, -60, 5.8, -2.02, -37.7],
            [92.9, -53.7, -83.05, 50.09, -0.43, -38.75],
            [92.9, -10.1, -87.27, 5.8, -2.02, -37.7]
        ]


# 开启吸泵
def pump_on():
    mc.set_digital_output(33, 0)
    time.sleep(0.05)

# 停止吸泵
def pump_off():
    mc.set_digital_output(33, 1)
    time.sleep(0.05)
    mc.set_digital_output(23, 0)
    time.sleep(1)
    mc.set_digital_output(23, 1)
    time.sleep(0.05)

# 机械臂复原
mc.send_angles([0, 0, 0, 0, 0, 0], 30)
time.sleep(3)

#开启吸泵
pump_on()
time.sleep(1)
mc.send_angles(angles[2], 30)
time.sleep(2)

#吸取小物块
mc.send_angles(angles[1], 30)
time.sleep(2)
mc.send_angles(angles[0], 30)
time.sleep(2)
mc.send_angles(angles[1], 30)
time.sleep(2)

#关闭吸泵
pump_off()
time.sleep(1)
mc.send_angles(angles[0], 40)
time.sleep(1.5)

运行命令:

python3 control_robot_pump_demo.py

手柄案例需要额外的输入设备和驱动,参见 7.4 SBC 手柄控制。

← 上一节 | 返回 Python 开发 | 下一节 →

results matching ""

    No results matching ""