前几天跟一个玩乐高机器人的朋友聊天,聊到python的多线程,他也是困惑了很久,终于被他搞定了乐高机器人的多线程。我一琢磨,S1怎么说也比乐高高级吧,A9 vs ARM7,强大太多了。那么利用python原生的多线程机制应该也可以吧。于是我去查了一下资料,试验了一把,果然S1是可以玩多线程的
可惜了,歌舞大赛结束了,用多线程让S1载歌载舞将会大幅度简化编程
废话不多说了,上代码
import threading
def start():
robot_ctrl.set_mode(rm_define.robot_mode_free)
t1=threading.Thread(target=aa,args=())
t2=threading.Thread(target=bb,args=())
t1.start()
t2.start()
while True:
pass
def aa():
gimbal_ctrl.rotate_with_degree(rm_define.gimbal_left,90)
def bb():
chassis_ctrl.move_with_time(0,2.5)
这是一个简单的demo,创建了两个线程,t1转云台,t2前进,先赋值,再用start调用,注意,这里的t1.start()是非阻塞的了。实际运行的效果就是S1边前进边转云台,视频就不发了,大家自行试验
scratch怎么办呢?很遗憾,多线程是python才有的。有了多线程,python和scratch不再是一一对应的关系,说python秒杀scratch一点都不夸张
既然多线程原生支持了,是不是也可以yy一下网络功能呢?很遗憾,这条语句报错,郁闷了
import socket
期待下一个版本的固件能够支持更多的python原生特性和库,特别需要socket,numpy,os,有这几个东东,即使sdk晚一点出,仍然可以大大增加S1的可玩性