跳到主要内容

cocube 核心接口

import cocube

这是什么?

cocube 是 CoCube 固件里最核心的模块,负责:

  • 读取位置传感器
  • 读取左右轮速度
  • 控制底盘前进、后退、转向
  • 查询电池电量

常量

cocube.FORWARD
cocube.BACKWARD
cocube.LEFT
cocube.RIGHT

位置与速度

cocube.pos

后台约每 10ms 自动刷新一次,直接读属性即可。

属性类型说明
cocube.pos.xint当前 X 坐标
cocube.pos.yint当前 Y 坐标
cocube.pos.angleint当前朝向角
cocube.pos.indexint当前所在格子编号
cocube.pos.statebool定位是否有效

cocube.speed

属性类型说明
cocube.speed.leftfloat左轮速度
cocube.speed.rightfloat右轮速度

最小示例:

import time
import cocube

while True:
if cocube.pos.state:
print(cocube.pos.x, cocube.pos.y, cocube.pos.angle)
print(cocube.speed.left, cocube.speed.right)
else:
print("定位无效")
time.sleep_ms(100)

基础运动

这些接口更适合快速控制底盘:

cocube.set_wheel(left, right)
cocube.move(direction, speed)
cocube.rotate(direction, speed)
cocube.stop()
cocube.brake()
cocube.move_ms(direction, speed, ms)
cocube.rotate_ms(direction, speed, ms)

说明:

  • speed 常用范围是 0~50
  • set_wheel(left, right) 支持 -50~50
  • set_wheel() 每次调用只会执行一轮 PID 调整,然后立即返回;如果想持续按测速反馈修正,应该放进循环里反复调用
  • move() / rotate() 会立即返回,并保持当前电机输出;通常要自己再调用 stop()brake() 结束
  • move_ms() / rotate_ms() 会在内部每 10ms 更新一次输出,时间到后自动 brake()

精确运动

这些接口更适合课程中的“走到某个点”或“转到某个角度”:

cocube.rotate_to(angle, speed=30)
cocube.rotate_by(direction, speed, degrees)
cocube.move_to(x, y, speed=40)
cocube.move_by(direction, steps, speed=40)

说明:

  • rotate_to():阻塞,转到绝对角度,误差约 <= 1°
  • rotate_by():阻塞,按相对角度旋转,要求 cocube.pos.state 有效
  • move_to():阻塞,先转向再走到目标坐标,过程中会按角度误差做差速修正
  • move_by():阻塞,按步数前进或后退,要求 cocube.pos.state 有效

其他

cocube.battery()

返回电池电量百分比,范围 0~100

常见写法

import cocube
import time

cocube.move_ms(cocube.FORWARD, 30, 1000)
time.sleep_ms(300)
cocube.rotate_by(cocube.LEFT, 30, 90)
print(cocube.battery())

注意

  • move_to()rotate_by()move_by() 都依赖定位状态;pos.state 无效时,后两者会直接返回
  • move_to() 虽然不会先检查 pos.state,但只有在定位数据正常更新时才适合使用
  • stop() 更像滑行停止,brake() 更像主动刹住