机械臂的校准和基本控制
01. 机械臂的校准
适用设备
- myCobot 280 Pi
- myCobot 320 Pi
- mechArm 270 Pi
操作步骤
Step 1: Atom 烧录最新版的 atomMain。
Step 2: [编写机械校准的 GUI 程序] 在桌面新建一个 Python 文件为 *.py,将下列代码拷贝进去并保存。
庆幸的是,机械臂的校准程序已经由我们编写好了,你只需要把它复制粘贴到你的树莓派上就可以了。请放心使用。
请在桌面点击打开下图所示的图标,即可开始我们的机械臂校准和基本控制的测试。
@todo: 补充一副 mycobot_test_tool 的截图。
受保护的内容
请输入密码以查看此内容
Step 3: 打开终端(快捷键 CTRL+ALT+T),输入以下命令,然后点击回车:
cd Desktop
python3 rasp_mycobot_test_gui.py
庆幸的是,机械臂的校准程序已经由我们编写好了,你只需要把它复制粘贴到你的树莓派上就可以了。请放心使用。
请在桌面点击打开下图所示的图标,即可开始我们的机械臂校准和基本控制的测试。
Step 4: 选择相应的波特率,然后点击连接。
- myCobot 280-Pi:1000000

Step 5: 手动将各个机械臂各关节归于零位,点击开始校准。界面出现校准结束,机械臂校准完成。

02. Python 开发环境准备
pymycobot 是一个和 myCobot 进行串口通讯的 Python 包,支持 Python2、Python3.5 及之后版本。在使用 pymycobot 控制机械臂之前需要搭建 Python 环境,下面就对 Python 的下载安装做出详细说明。
mycobot 280pi 机械臂内置 python 环境,您可以在 280pi 的 Ubuntu 系统里编写 python 代码,也可以在您自己的 PC 电脑里编写 python 程序,将编写好的 python 程序用 u 盘拷贝进机械臂的 Ubuntu 系统里进行运行。可以通过以下方法来对机械臂的 python 环境进行检查
python 包的检查。打开终端,输入
pip list
然后按下 enter 回车键,即可查看目前 python 环境内所安装的全部包。
在终端内输入
python --version
即可查询目前机械臂所使用的 python 版本。
在终端输入 python,然后回车,当显示了 >>> 后即代表进入了 python 编译环境,此时可以使用 python 来编写代码。

同时也可以使用 nano 命令来创立 python 文件。首先打开终端,输入
nano demo.py
然后按下回车键,即可创建名为 demo 的 python 文件。此处的 demo 为创立的 python 文件的文件名,您可以在此更改为任意名称。按下回车键后会进入代码编辑页面,您可以在此界面对进行 python 程序代码编写。


当编写好 python 程序后,按下 ctrl+s 来对已经编辑好的程序进行保存,再按下 ctrl+x 退出编辑器。
在打开的终端中输入
python demo.py
即可运行刚刚编写完成的 python 程序。

03. 机械臂关节的运动控制(Python)
对于串联式多关节机器人,关节空间的控制是针对机器人各个关节的变量进行的控制,目标是让机器人各个关节按照一定速度达到目标位置。
注意: 在设置角度时,不同系列的机械臂限位有所不同,具体可查看对应型号的参数介绍。
单关节控制
- send_angle(id, degree, speed)
- 功能: 发送指定的单个关节运动至指定的角度
- 参数说明:
id: 代表机械臂的关节,用数字 1-6 来表示。degree: 表示关节的角度speed:表示机械臂运动的速度,范围 1~100
- 返回值: 1
- set_encoder(joint_id, encoder, sp)
- 功能: 发送指定的单个关节运动至指定的电位值
- 参数说明:
joint_id: 代表机械臂的关节,用数字 1-6 来表示。encoder: 表示机械臂的电位值,取值范围是 0 ~ 4096sp: 表示机械臂运动的速度,范围 1~100
- 返回值: 1
多关节控制
- get_angles()
- 功能: 获取所有关节角度
- 返回值:
list一个浮点值的列表,代表所有关节的角度
- send_angles(degrees, speed)
- 功能: 发送所有角度给机械臂所有关节
- 参数说明:
degrees:(List[float])包含所有关节的角度,表示方法为:[20,20,20,20,20,20]speed: 表示机械臂运动的速度,取值范围是 1-100
- 返回值: 1
- set_encoders(encoders, sp)
- 功能: 发送电位值给机械臂所有关节
- 参数说明:
encoder: 表示机械臂的电位值,取值范围是 0 ~ 4096,表示方法为:[2048,2048,2048,2048,2048,2048]sp: 表示机械臂运动的速度,取值范围是 1-100
- 返回值: 1
- sync_send_angles(degrees, speed, timeout=15)
- 功能: 同步发送角度,到达目标点返回
- 参数说明:
degrees: 每个关节的角度值列表List[float]speed: (int) 机械臂运动的速度,取值范围是 1-100timeout:时间默认 15s
- 返回值: 1
- get_radians()
- 功能: 获取所有关节的弧度
- 返回值:
list包含所有关节弧度值的列表
- send_radians(radians, speed)
- 功能: 发送弧度值给机械臂所有关节
- 参数说明:
radians:list表示机械臂的弧度值列表,取值范围是 -5~5
- 返回值: 1
案例使用
在运行上述代码时,我们基本上都会遇到报错。请仔细阅读报错信息,思考一下:报错信息说明错误在哪里?
按照提示来解决问题。Solution 在下方代码直上的加密模块。请先尝试解决问题,如果实在无法解决,请查看 Solution。
密码是:2357
受保护的内容
请输入密码以查看此内容
from pymycobot.mycobot280 import MyCobot280
import time
# MyCobot280 类初始化需要两个参数:
# 初始化一个 MyCobot280 对象
# 这里为 PI 版本创建对象代码
mc = MyCobot280('/dev/ttyAMA0', 1000000)
# 通过传递角度参数,让机械臂每个关节移动到对应 [0, 0, 0, 0, 0, 0] 的位置
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, 155.65, -128.05, -9.93, -15.29], 50)
# 设置等待时间,确保机械臂已经到达指定位置
time.sleep(2.5)
# 让机械臂放松,可以手动摆动机械臂
mc.release_all_servos()