Mycobot机械臂各关节的运动(三)-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 244|回复: 0

Mycobot机械臂各关节的运动(三)

[复制链接]
发表于 2022-9-30 17:31 | 显示全部楼层 |阅读模式



[color=rgba(0, 0, 0, 0.65)]这一节我们开始第一个程序,就是机械臂各关节的运动。让我们首先打开Mycobot,然后登入一个终端,我们输入“python”进入python环境。
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]我们采用一边实验一边介绍MyCobot机械臂的API的使用方法:
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)] (1)控制机械臂左右摆动所使用的 API 为:MyCobot(port)
[color=rgba(0, 0, 0, 0.65)]程序的开头首先要导入这些API:
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]from pymycobot.mycobot import MyCobot
[color=rgba(0, 0, 0, 0.65)]from pymycobot.genre import Angle
[color=rgba(0, 0, 0, 0.65)]from pymycobot import PI_PORT, PI_BAUD # 当使用树莓派版本的mycobot时,可以引用这两个变量进行MyCobot初始化
[color=rgba(0, 0, 0, 0.65)]import time
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)](2)get_angles()
[color=rgba(0, 0, 0, 0.65)]函数功能:获得机械臂六个关节点的角度。
[color=rgba(0, 0, 0, 0.65)]返回值:返回值的类型是 list,共有六个元素数据,分别对应关节 1~6。
[color=rgba(0, 0, 0, 0.65)]当机械臂运行到某一个位置时我们可以通过print指令打印出当前机械臂的各关节角度数据。
[color=rgba(0, 0, 0, 0.65)]如:
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]mc = MyCobot(PI_PORT, PI_BAUD)
[color=rgba(0, 0, 0, 0.65)]angle_datas = mc.get_angles()
[color=rgba(0, 0, 0, 0.65)]print(angle_datas)
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]运行后给出的结果:
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]注意我们这里先记下这个机械臂的值: [6.06, -144.05, 154.77, -148.35, -75.84, -99.4],这个值的机械臂是个什么样子呢,我拍个照片给大家看。
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)](3)send_angle(id, degree, speed)
[color=rgba(0, 0, 0, 0.65)]id:指的是哪一节机械臂,如果不指定id,那么就是指你要给出6节机械臂的运动角度。
[color=rgba(0, 0, 0, 0.65)]degree:指的是关节的角度,取值范围-180~180
[color=rgba(0, 0, 0, 0.65)]speed:指关节到达指定位置时的速度,取值范围0~100,值越大速度越快。
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]我们传递个数值给机械臂,当然先传0,就是0角度的状态。
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]mc.send_angles([0, 0, 0, 0, 0, 0], 50)
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]机械臂变成了这样子:
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]接下来让我们测试每一个关节是怎么运动的和运动的方向:
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]mc.send_angle(Angle.J1.value, 90, 50) #第一节转90度,速度50
[color=rgba(0, 0, 0, 0.65)]mc.send_angle(Angle.J2.value, 30, 50) #第二节转30度,速度50
[color=rgba(0, 0, 0, 0.65)]mc.send_angle(Angle.J3.value, 30, 50) #第三节转30度,速度50
[color=rgba(0, 0, 0, 0.65)]mc.send_angle(Angle.J4.value, 30, 50) #第四节转30度,速度50
[color=rgba(0, 0, 0, 0.65)]mc.send_angle(Angle.J5.value, 30, 50) #第五节转30度,速度50
[color=rgba(0, 0, 0, 0.65)]mc.send_angle(Angle.J6.value, 30, 50) #第六节转30度,速度50
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]然后是这个样子:
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]

[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]所有的运动均符合右手定律。有兴趣的小伙伴可以试一下-90度,机械臂是如何运动。
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)] (4)release_all_servos()
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]函数功能:放松机械臂,让其可以随意手动摆动。注意执行这个指令的时侯机械臂会因重力落下,要注意防止砸到其他的东西。
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]mc.release_all_servos()
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]然后让我们再把机械臂运动到刚开始的状态,这就要用到我们当时的那个值: [6.06, -144.05, 154.77, -148.35, -75.84, -99.4],好的让我们执行:
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]mc.send_angles([6.06, -144.05, 154.77, -148.35, -75.84, -99.4],50)
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]输入指令请注意不要用全角字符,一定要把键盘切换成半角字符运行。
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]这样机械臂又回到了初始时的状态。
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)](5)写成可执行文件。
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]假如我们写成一段连续的可执行文件又是怎么的呢?参考说明书中的代码,看下面机械臂摇摆程序:
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]#!/usr/bin/python3
[color=rgba(0, 0, 0, 0.65)]#-*- coding: UTF-8 -*-
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]from pymycobot.mycobot import MyCobot
[color=rgba(0, 0, 0, 0.65)]from pymycobot.genre import Angle
[color=rgba(0, 0, 0, 0.65)]from pymycobot import PI_PORT, PI_BAUD # 当使用树莓派版本的mycobot时,可以引用这两个变量进行MyCobot初始化
[color=rgba(0, 0, 0, 0.65)]import time
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]mc = MyCobot(PI_PORT, PI_BAUD)
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]# 获得当前位置的坐标
[color=rgba(0, 0, 0, 0.65)]angle_datas = mc.get_angles()
[color=rgba(0, 0, 0, 0.65)]print(angle_datas)
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]# 用数列传递传递坐标参数,让机械臂移动到指定位置
[color=rgba(0, 0, 0, 0.65)]mc.send_angles([0, 0, 0, 0, 0, 0], 50)
[color=rgba(0, 0, 0, 0.65)]print(mc.is_paused())
[color=rgba(0, 0, 0, 0.65)]# 设置等待时间,确保机械臂已经到达指定位置
[color=rgba(0, 0, 0, 0.65)]# while not mc.is_paused():
[color=rgba(0, 0, 0, 0.65)]time.sleep(2.5)
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]# 让关节1移动到90这个位置
[color=rgba(0, 0, 0, 0.65)]mc.send_angle(Angle.J1.value, 90, 50)
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]# 设置等待时间,确保机械臂已经到达指定位置
[color=rgba(0, 0, 0, 0.65)]time.sleep(2)
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]# 设置循环次数
[color=rgba(0, 0, 0, 0.65)]num = 5
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]# 让机械臂左右摇摆
[color=rgba(0, 0, 0, 0.65)]while num > 0:
[color=rgba(0, 0, 0, 0.65)]    # 让关节2移动到50这个位置
[color=rgba(0, 0, 0, 0.65)]    mc.send_angle(Angle.J2.value, 50, 50)
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]    # 设置等待时间,确保机械臂已经到达指定位置
[color=rgba(0, 0, 0, 0.65)]    time.sleep(1.5)
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]    # 让关节2移动到-50这个位置
[color=rgba(0, 0, 0, 0.65)]    mc.send_angle(Angle.J2.value, -50, 50)
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]    # 设置等待时间,确保机械臂已经到达指定位置
[color=rgba(0, 0, 0, 0.65)]    time.sleep(1.5)
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]    num -= 1
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]# 让机械臂缩起来。你可以手动摆动机械臂,然后使用get_angles()函数获得坐标数列,
[color=rgba(0, 0, 0, 0.65)]# 通过该函数让机械臂到达你所想的位置。
[color=rgba(0, 0, 0, 0.65)]mc.send_angles([88.68, -138.51, 155.65, -128.05, -9.93, -15.29], 50)
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]# 设置等待时间,确保机械臂已经到达指定位置
[color=rgba(0, 0, 0, 0.65)]time.sleep(2.5)
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]# 让机械臂放松,可以手动摆动机械臂
[color=rgba(0, 0, 0, 0.65)]mc.release_all_servos()
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)] 注意:程序前面要加上:
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]#!/usr/bin/python3
[color=rgba(0, 0, 0, 0.65)]#-*- coding: UTF-8 -*-
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]让我们把这个文件保存成,3.py
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]运行这段代码:
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]直接在终端窗口执行:
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]python 3.py
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]
[color=rgba(0, 0, 0, 0.65)]这样就可以连续执行机械臂的运动了。



您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 01:53 , Processed in 0.142931 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表