AIR

nao机器人的多线程编程

首先,我在机器人编程这方面还是小白,不是很懂,如果有错误或者要补充的可以留言哦!

什么是线程
线程:
是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。在Unix System V及SunOS中也被称为轻量进程(lightweight processes),但轻量进程更多指内核线程(kernel thread),而把用户线程(user thread)称为线程。

多线程:
是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。具有这种能力的系统包括对称多处理机、多核心处理器以及芯片级多处理(Chip-level multithreading)或同时多线程(Simultaneous multithreading)处理器。在一个程序中,这些独立运行的程序片段叫作“线程”(Thread),利用它编程的概念就叫作“多线程处理(Multithreading)”。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程(台湾译作“执行绪”),进而提升整体处理性能。

这些都是专业解释,听起来比较抽象,更多的在于运用中去理解。

机器人在执行一个任务的同时,如果只用单线程,那不能同时执行别的任务。要实现nao机器人在走路的同时被摸了前额,机器人就停下来休息,我就遇到了这个问题。

在没有使用多线程的时候,机器人总是一直走下去,或者在刚开始的时候,还没有开始走就摸它的头,它会停下来休息。我本来一直以为是我在API的使用方面不对,后来才意识到机器人可能不能同时执行多个任务。

API上面的事件是可以直接用的,我现在才知道,开始我一直不知道怎么用,就仿照事件上的代码在写,发现又长又容易看 不懂。其实是可以直接用的,这样的代码比较简单。

接下来看实现机器人走路的同时被摸了一下就休息的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# -*-encoding:UTF-8 -*-
from nao import ALProxy
robotIP=""
PORT=9559

import argparse
import math
import threading

motion=ALProxy("ALMotion",robotIP,PORT)
posture=ALProxy("ALRobotPosture",robotIP,PORT)
memory=ALProxy("ALMemory",robotIP,PORT)

config=[] #这里可以自己设定参数
def move():
motion.wakeUP()
posture.goToPosture("StandInit",0.5)
motion.moveTo(1.0,0.0,0.0,config)
def Touch():
while Ture:
front=memory.getData("FrontTactilTouched")
if front==1:
motion.rest()
break
if _name_="_main_":
t1=threading.Thread(target=move)
t2=threading.Thread(target=Touch)
t1.start()
t2.start()

t1.join()
t2.join()

这就是一个多线程编程


 Comments


Blog content follows the Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0) License

Use Material X as theme , total visits times .
载入天数...载入时分秒...