跳到主要内容

第 2 课 · 运动基础

这一课学什么?

这一课开始让 CoCube 真正动起来。
重点不是“马上完成复杂任务”,而是先把最基本的前进、后退、转弯和停下跑顺。

运动课程机器人

学习目标

  • 会用时间控制 CoCube 前进、后退和转弯
  • 能把几段基础动作拼成一个简单路径
  • 理解 stop()brake() 的区别
  • 知道为什么按时间控制会出现误差

用到的硬件和功能

这一课只需要 CoCube 本体,不需要定位垫,也不需要额外扩展模块。

会用到的接口主要有:

  • cocube.move_ms(direction, speed, ms):按时间前进或后退。directioncocube.FORWARD / cocube.BACKWARDspeed 是速度,常用 0~50ms 是持续时间,单位毫秒。
  • cocube.rotate_ms(direction, speed, ms):按时间旋转。directioncocube.LEFT / cocube.RIGHTspeed 是转向速度;ms 是旋转时长,单位毫秒。
  • cocube.move(direction, speed):持续运动。direction 还是前进 / 后退;speed 是速度;启动后会保持输出,直到你再调用 stop()brake()
  • cocube.stop():滑行停止,不会主动抱死轮子,更适合观察惯性。
  • cocube.brake():主动刹车,会更快停下。

先认识这个能力

这一课先用“按时间控制”的方式让 CoCube 运动。

这种方式的好处是上手快,马上就能看到结果;
但也要接受一个事实:同样的代码,在不同地面、不同电量、不同摩擦条件下,结果可能会有一点偏差。

所以这一课更关注两件事:

  • 先把动作顺序写对
  • 再观察实际轨迹和预期之间的差别

开始编程

1. 先跑通前进和后退

import time
import cocube

cocube.move_ms(cocube.FORWARD, 30, 800)
time.sleep_ms(300)
cocube.move_ms(cocube.BACKWARD, 30, 800)

这段代码的目的很简单:

  1. 先确认前进方向正常
  2. 再确认后退方向正常
  3. 看看 speedms 组合会带来多大的位移

2. 把直行和转弯拼成一段路径

在第 2 课里,转弯先用 rotate_ms()试试。

import time
import cocube

cocube.move_ms(cocube.FORWARD, 30, 900)
time.sleep_ms(250)

cocube.rotate_ms(cocube.LEFT, 25, 720)
time.sleep_ms(250)

cocube.move_ms(cocube.FORWARD, 30, 700)

你可以继续改这两个参数:

  • 900700 决定直行距离
  • 720 决定转弯幅度

3. 试一试 stop()brake() 的区别

import time
import cocube

cocube.move(cocube.FORWARD, 25)
time.sleep_ms(1000)
cocube.stop()

time.sleep_ms(1200)

cocube.move(cocube.FORWARD, 25)
time.sleep_ms(1000)
cocube.brake()

这段程序会连续做两次前进:

  • 第一次用 stop() 停下
  • 第二次用 brake() 停下

运行时观察什么

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

  • move_ms() 结束后,CoCube 会自动制动
  • stop() 更像撤掉动力,通常会再滑出去一点
  • brake() 会停得更干脆
  • 同样的转弯时间,不一定每次都正好得到一样的角度

常见问题 / 使用提醒

  • 地面太滑或太粗糙时,轨迹误差会更明显
  • 第一次调路径时,尽量把速度设在 20~30,更容易观察
  • 运行前先留出足够空间,避免撞到边缘或障碍物

挑战一下

先挑战一个最经典的路径:正方形。

方形轨迹灵感

如果正方形已经跑通,再继续观察“左右轮速度不完全对称”时会发生什么。

绕圈运动效果

可以继续试这几个方向:

  • 把四段直行和四次转弯拼成正方形
  • 调整转弯时间,让每个角更接近 90
  • 让一段路径故意变短或变长,观察轨迹怎么变化
参考代码: 走正方形形(先自己试,再展开)
import time
import cocube

for _ in range(4):
cocube.move_ms(cocube.FORWARD, 40, 1000)
time.sleep_ms(250)
cocube.rotate_ms(cocube.LEFT, 30, 1000)
time.sleep_ms(250)

cocube.brake()

这段代码先给出一个可运行的起点。
如果实际轨迹不像正方形,优先微调时间参数。

参考代码:走圆形(先自己试,再展开)
import cocube

while True:
cocube.set_wheel(20, 40)

这段代码会让左右轮保持不同输出,所以轨迹会接近圆形。
如果圆太大,就把两侧速度差调大一点;如果太急,就把两侧速度调得更接近一些。

快速参考

这一课最常用的写法是:

import cocube

cocube.move_ms(cocube.FORWARD, 30, 1000)
cocube.rotate_ms(cocube.LEFT, 25, 700)
cocube.brake()
  • cocube.move_ms(...):按时间直行
  • cocube.rotate_ms(...):按时间转弯
  • cocube.move(...):持续运动
  • cocube.stop():滑行停止
  • cocube.brake():主动刹车

如果想继续查运动接口,可以查看 cocube 核心接口速查