跳到主要内容

第 5 课 · 夹爪与执行器

这一课学什么?

这一课开始把 CoCube 从“会移动的平台”推进到“会执行动作的机器人”。

夹爪课最关键的不是某一个函数,而是动作顺序:

  • 先张开
  • 再靠近
  • 然后闭合
  • 最后搬运和放下

夹爪模块

夹爪搬运示意

学习目标

  • 会给扩展模块上电
  • 会控制夹爪张开、闭合和指定角度
  • 会把移动和夹爪动作组合成一个简单任务
  • 理解执行器和传感器的角色差别

用到的硬件和功能

这一课需要接入夹爪模块。

会用到的接口主要有:

  • cm.power_on():给扩展模块上电。夹爪、ToF、语音这类外设在读取或控制前都建议先上电。
  • cm.gripper_open():让夹爪张到接近全开。
  • cm.gripper_close():让夹爪收到接近全闭。
  • cm.gripper_degree(degree):按角度控制夹爪。degree 范围是 0~70;数值越小越接近张开,数值越大越接近闭合。
  • cm.gripper_stop():停止夹爪动作,适合在测试角度后让夹爪停在当前位置。
  • cocube.move_ms(direction, speed, ms):配合夹爪做时间控制搬运。directioncocube.FORWARD / cocube.BACKWARDspeed 是底盘速度;ms 是移动时长。
  • cocube.move_to(x, y, speed=40):配合夹爪做坐标搬运。x / y 是目标坐标;speed 是移动速度。

先认识这个能力

传感器负责读取外界,执行器负责改变外界。
夹爪就是最典型的执行器之一。

写夹爪程序时,先记住一条简单规律:

  • 顺序通常比参数更重要

如果顺序错了,即使每个函数都写对,也很难抓稳目标。

开始编程

1. 先测试夹爪本身动作

import time
import cocube
import cocube_module as cm

cm.power_on()

cm.gripper_open()
time.sleep_ms(800)

cm.gripper_degree(35)
time.sleep_ms(800)

cm.gripper_close()
time.sleep_ms(800)

cm.gripper_stop()

先观察这三种状态:

  • 全开时夹爪有多大
  • 中间角度适不适合夹住小物件
  • 全闭时是否能稳定夹紧

2. 用移动和夹爪做一个最小搬运动作

import time
import cocube
import cocube_module as cm

cm.power_on()

cm.gripper_open()
time.sleep_ms(600)

cocube.move_ms(cocube.FORWARD, 25, 900)
time.sleep_ms(200)

cm.gripper_close()
time.sleep_ms(800)

cocube.move_ms(cocube.BACKWARD, 25, 900)
time.sleep_ms(200)

cm.gripper_stop()
cocube.brake()

这段程序的节奏很清楚:

  1. 先张开
  2. 再靠近
  3. 然后夹住
  4. 最后撤回

3. 再往前一步:按坐标搬运

如果上一课的位置控制已经跑通,可以继续试一个“从抓取点到投放点”的版本。

import time
import cocube
import cocube_module as cm

cm.power_on()
cm.gripper_open()
time.sleep_ms(500)

if cocube.pos.state:
cocube.move_to(100, 120, 35)
time.sleep_ms(200)
cm.gripper_close()
time.sleep_ms(700)
cocube.move_to(200, 150, 35)
time.sleep_ms(200)
cm.gripper_open()
time.sleep_ms(500)
else:
print("定位无效,请把 CoCube 放到定位垫上")

运行时观察什么

运行夹爪程序时,重点看这些现象:

  • 夹爪张开角度够不够大
  • 靠近目标时速度会不会太快
  • 闭合之后,目标会不会立刻滑掉
  • 放下前是否已经到达合适位置

常见问题 / 使用提醒

  • 抓不稳时,先调顺序,再调角度和速度
  • 不要刚闭合就立刻后退,给夹爪一点稳定时间
  • 用时间控制搬运时,目标位置最好固定
  • 如果要做更稳定的运输,优先用坐标移动而不是纯时间控制

挑战一下

给自己设定一个完整的小任务:

  1. 从 A 点拿起一个小物件
  2. 运到 B 点
  3. 放下后退回安全区

如果想继续升级,可以再加一层:

  • 搬运过程中在屏幕上显示当前状态
  • 用坐标控制路线,而不是只用时间

快速参考

这一课最常用的写法是:

import cocube_module as cm

cm.power_on()
cm.gripper_open()
cm.gripper_close()
cm.gripper_degree(35)
  • cm.gripper_open():张开夹爪
  • cm.gripper_close():闭合夹爪
  • cm.gripper_degree(...):设置夹爪角度
  • cm.gripper_stop():停止夹爪动作
  • cm.power_on():打开扩展模块电源

如果想继续查外设接口,可以查看 cocube_module 快速参考