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 开发 | 下一节 →