请选择 进入手机版 | 继续访问电脑版
正在上传图片(0/1)

多线程搞定了!

 7
手机看帖 16 1993
前几天跟一个玩乐高机器人的朋友聊天,聊到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的可玩性
   
评论
上传
你需要登录之后才能回帖    登录 | 注册
boolrobot  机甲大师 RoboMaster S1认证用户 2019-12-13 2#
这个可以有
alex_dj  机甲大师 RoboMaster S1认证用户 2019-12-13 3#
编辑器用的原生的,还是外挂的呀?
fansb77222f4  Inspire 2认证用户 2019-12-13 4#
☆Petrel☆  Osmo Pocket认证用户 2019-12-15 5#
djiuser_7aFEgiQ   2020-1-11 6#
什么时候出网络包,有计划吗?
有没有支持的python的包或api说明文档?
方单单   2020-2-10 7#
方单单   2020-2-10 8#
我用多线程完成了几个编程挑战卡
是姚飞凡吖   2020-2-11 9#
是姚飞凡吖   2020-2-11 10#
是姚飞凡吖   2020-2-11 11#
方单单   2020-2-12 12#
         
方单单   2020-2-12 13#
烈火之怒   2020-2-21 14#
还有opencv、pytorch、pandas、sicpy等等有用的库,还能玩机器学习
成天翔  机甲大师 RoboMaster S1认证用户 2020-2-23 15#
方单单2-10 15:40
我用多线程完成了几个编程挑战卡
看了一下你的那个课程。比这个详细多了。
机甲果果   2020-3-17 16#
看着你的弄了一个三线程 直接结束不了, 最后强行退出程序才结束。 双线程也结束很慢。
Peter.Z  Mavic Mini认证用户 2020-8-28 17#
按照楼主的代码,把刷锅和识别标签射击组合了一下,刷锅线程可以正常进行,但是识别标签射击就没反应,是哪里有问题么?
能帮我看看哪里出问题了么?
import threading
    def start():
    robot_ctrl.set_mode(rm_define.robot_mode_free)
    gimbal_ctrl.enable_stick_overlay()
    chassis_ctrl.enable_stick_overlay()
    t1=threading.Thread(target=movep,args=())
    t2=threading.Thread(target=shootp,args=())
    t1.start()
    t2.start()
#    while True:
#        pass

def shootp():
    variable_X = 0
    variable_Y = 0
    variable_Post = 0
    variable_angle = 0
    list_MarkerList = RmList()
    global variable_X
    global variable_Y
    global variable_Post
    global variable_angle
    global list_MarkerList
    global pid_x
    global pid_y
    global pid_Pitch
    global pid_Yaw
    pid_x = PIDCtrl()
    pid_y = PIDCtrl()
    pid_Pitch = PIDCtrl()
    pid_Yaw = PIDCtrl()
    robot_ctrl.set_mode(rm_define.robot_mode_free)
    vision_ctrl.set_marker_detection_distance(2)
    vision_ctrl.enable_detection(rm_define.vision_detection_marker)
    pid_Yaw.set_ctrl_params(120,0,10)
    pid_Pitch.set_ctrl_params(65,0,5)
    variable_Post = 0.05
    ir_blaster_ctrl.set_fire_count(8)
    while True:
        list_MarkerList=RmList(vision_ctrl.get_marker_detection_info())
        if list_MarkerList[1] >= 1:
            variable_X = list_MarkerList[3]
            variable_Y = list_MarkerList[4]
            pid_Yaw.set_error(variable_X - 0.5)
            pid_Pitch.set_error(0.5 - variable_Y)
            gimbal_ctrl.rotate_with_speed(pid_Yaw.get_output(),pid_Pitch.get_output())
            time.sleep(0.05)
            if abs(variable_X - 0.5) <= variable_Post and abs(0.5 - variable_Y) <= variable_Post:
                ir_blaster_ctrl.fire_continuous()
                time.sleep(0.5)
        else:
            gimbal_ctrl.rotate_with_speed(0,0)


def movep():
    variable_zhuan = 0
    variable_yid = 0
    variable_offer = 0
    global variable_zhuan
    global variable_yid
    global variable_offer
    variable_zhuan = 60
    variable_yid = 250
    variable_offer = 120
    gimbal_ctrl.enable_stick_overlay()
    chassis_ctrl.enable_stick_overlay()
    while True:
        variable_zhuan = -1 * variable_zhuan
        variable_yid = -1 * variable_yid
        chassis_ctrl.set_wheel_speed((variable_yid - variable_zhuan) + variable_offer,(variable_zhuan - variable_yid) + variable_offer,(-1 * variable_yid - variable_zhuan) + variable_offer,(variable_zhuan + variable_yid) + variable_offer)
        time.sleep(0.5)
        variable_zhuan = -1 * variable_zhuan
        variable_yid = -1 * variable_yid
        chassis_ctrl.set_wheel_speed((variable_yid - variable_zhuan) + variable_offer,(variable_zhuan - variable_yid) + variable_offer,(-1 * variable_yid - variable_zhuan) + variable_offer,(variable_zhuan + variable_yid) + variable_offer)
        time.sleep(1)
        variable_zhuan = -1 * variable_zhuan
        variable_yid = -1 * variable_yid
        chassis_ctrl.set_wheel_speed((variable_yid - variable_zhuan) + variable_offer,(variable_zhuan - variable_yid) + variable_offer,(-1 * variable_yid - variable_zhuan) + variable_offer,(variable_zhuan + variable_yid) + variable_offer)
        time.sleep(0.7)
认证设备
取消 点赞 评论
分享至:
回复:
上传
取消 评论
快速回复 返回顶部 返回列表