PyLego 使用指南
- 不用搭积木
- 不用绕 Data Wire
- 前进、转弯都可以在 3 个字符内
- 为什么不用 Python 来写乐高呢?
概述
- 基于 Python 2.7 (Python 3 目前无法使用前进/后退功能)
- 目前只有 NXT 支持
- 基于 nxt-python
- 连接需要 pyusb 以及 pybluez 模块
V0.9 更新
更新于 12-10-18
-
修复 bug 并提高稳定性
-
改进
f()
和b()
的参数,使之更简洁 -
新增:图形化无法实现的重磅功能:原地旋转
- 关于实现请查看
spin()
函数
- 关于实现请查看
-
新增:
hold_on()
函数。开着命令行挂机,随时写点东西,不用担心 Lego 省电关机 -
(目前(2018-12-10)的
t
参数暂未提供支持)
安装
项目中有已经有需要的环境(Windows),但因为有一些细节工作,所以提供第三方教程[教程]: -https://blog.xuezhonghao.com/2018/08/16/nxt-python.html
安装第三方库
连接相关
- Windows: 项目中有你需要的部分第三方库,在命令行中分别进入
pyusb
以及pybluez
文件夹,并运行python setup.py install
- Mac: 请参考上述教程
内核相关
- Windows:在 cmd 命令行运行:
pip install threading
- Mac:在 terminal 中运行:
sudo pip install threading
(需要权限)
配置驱动
- Windows: 按照上述教程配置 USB 驱动,把乐高驱动换成 libusb-win32
- Mac:安装 libusb
- (
测试版目前仅支持 USB 调试。试验性蓝牙模块已经加入)
导入模块
- 以下2个步骤都可以
- 把 nxt 文件夹放入你正在写的 python 项目文件夹
- 命令行执行
pip install nxt-python
- 把 core.py 以及 放在你正在写的 python 项目文件夹里面
开始
输入以下语句即可食用以下提及的所有函数
from core import *
以下是默认使用的接口,如果你想改动请到 core.py
的 reset()
中更改,第一次导入 core
模块时都会调用这个函数进行初始化。如果不想改程序,请改造你的乐高机器人。
L-Motor: PORT_B
R-Motor: PORT_C
Light(PORT_3)
Ultrasonic(PORT_2)
Touch(PORT_4)
关于函数的设计
- 每个函数都有参数
- 每个函数的参数都有默认值
- 如果你不想要默认值,可以改其中一个、一些或者全部
运动类函数
l(r=1, p=75, t=None, b=True)
向左转的函数,注意是小写的L
参数解析:
p
:马力。整数。默认值是75即75%马力r
:转动的距离(rolls)。(如果t
被修改,那么r
的值作废!)- 如果
r
>=30,会被认为是轮子转动的角度(degree)。比如r=360
就是让右轮旋转360度(正好一圈),于是左转 - 否则,会被认为是轮子转动的圈数(circles of rotation)
- 如果
t
:转动的时间。(如果t
被修改,那么r
的值作废!)目前(2018-12-10)的t
参数暂未提供支持,下同- 单位:秒
b
: 即 break, 是否转完马上刹车- 只能是 True 或者 False
- 默认值 True
例子
l() # 75%马力,右轮转1圈,使整体左转
l(3) # 75%马力,右轮转3圈,使整体左转
l(p=80, r=3) # 80%马力,右轮转3圈
l(r=45) # 右轮转45度
l(t=10) # 右轮转10秒
r(r=1, p=75, t=None, b=True)
右转的函数。请参考 l
的说明
spin(r=1, p=75)
顺时针原地旋转(v0.9 的更新内容) 参数请参考上面的函数
f(r=1, p=75, t=None)
前进(forward)的函数
参数解析
(现已取消)unlimited
:是否无限前进,直到下一个操作发生。要不 True 要不 False- 当
r
的值为 1 或者 None,无限前进,直到stop()
被执行 - 其余请参考
l
- 在 p > 75 的情况下,长时间移动可能导致电压过低,Brick 重启
例子
f() # 两边轮子转1圈前进
f(3) # 两边轮子转3圈前进
f(0)
f(None) # 一直前进直到 stop 被调用
#其余参考 l()函数
b(r=1, p=100, t=None)
后退(backward)的函数,参考 f()
功能类函数
reset(remote=True)
执行 from core import *
时,模块会自动调用这个函数进行初始化,并自动检测连接方式,如果两种方式都行,优先 USB(见参数解析)。
如果出现连接错误,请调用它重新连接。或者可以使用参数把连接方式重置为另一种。使用蓝牙方式reset(True)
配合 Python 命令行食用风味更佳,敲下来的命令可以立即执行。
使用方法
- 默认值: USB
- True: 蓝牙
- False: USB
sound()
发出声音**(尚不稳定)**
hold_on()
挂机专用,防止乐高圣殿关机
传感类函数
distance() -> int
获取一个整数:即超声波传感器的读数 单位 cm
brightness() -> int
获取一个整数:光传感器的读数 区间:0 ~ 100
hit()
判断是否撞到物体(传感器被按下,或者是距离<5cm) 返回值:
- True:是的,撞到了
- False: 不,~
black() -> bool
判断地面是否为黑色。是则返回 True,否则 False。
green() -> bool
判断地面是否是绿色。参考上一个
white() -> bool
白色