欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

NAO学习第一周

程序员文章站 2022-07-14 22:03:44
...

1.目标

1.1掌握NAO的基础知识;

1.2看至少三篇论文,确立大概研究方向;

1.3练习Python,为算法做准备;

2.进展

2.1NAO的基础知识

2.1.1环境与构造

NAO学习第一周

2.1.2其它

如何连接NAO机器人?

2.2论文研究成果

NAO学习第一周

参考文献为:

基于NAO服务型机器人的二次开发_蔡浩

NAO机器人在自闭症干预中的应用_张婷

基于NAO机器人的手势和表情识别_深仕卿

2.3Python编程练习(关于NAO)

2.3.1安装与概述

2.3.1.1感谢大佬开路

Python 3.7安装教程

Python2.7 安装教程

电脑软件无法安装怎么办(来自菜逼的忧伤,安装时一直提示另一个程序正在安装,感谢度娘)

2.3.1.2Python概述

1)特色

a.决定动态数据形态

NAO学习第一周

好处是可创造简易的一般化程序代码,如建立一个会将两个变量相加的函数,就不用考虑多种变量类型的组合,只需:

#coding:utf-8 #一定要用Python2,python3.7把我坑惨了
import math
a=input("请输入第一个数:")
b=input("请输入第二个数:")      
def add(a,b): #冒号呀冒号,千万别忘记
    return a+b
print add(a,b)   (这个写得不好,看后面声明函数部分!!菜逼表示很自卑呜呜呜)

b.平*立语言——对操作系统无限制

c.清楚及简单的语法——仅使用缩排来区隔程序区块

d.内建数据结构——

字符串(string)——是一种数据类型,比较特殊的是还有一个编码问题

列表(list)——是一种有序的集合,可以随时添加和删除其中的元素。

>>> week=['Monday','Wednesday','Thursday','Friday','Saturday']
>>> week
['Monday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']
>>> type(week)
<type 'list'>
>>> week.append('Sunday')  #添加
>>> week
['Monday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
>>> week.insert(1,'Thesday')  #插入
>>> week
['Monday', 'Thesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
>>> week.index('Sunday')  #索引函数
6
>>> week.count('Thursday')  #计数函数
1
>>> week.sort()  #排序函数,升序字母排列
>>> week
['Friday', 'Monday', 'Saturday', 'Sunday', 'Thesday', 'Thursday', 'Wednesday']
>>> week.reverse()  #反向函数,降序字母顺序排列
>>> week
['Wednesday', 'Thursday', 'Thesday', 'Sunday', 'Saturday', 'Monday', 'Friday']
>>> 

>>> a=['hello',23,['a','b','c']]
>>> a
['hello', 23, ['a', 'b', 'c']]

多元组(tuple)——tuple和list非常类似,但是tuple一旦初始化就不能修改

>>> a=('hello',23,('a','b','c'))
>>> a
('hello', 23, ('a', 'b', 'c'))

关联数组(dictionary)——字典

>>> score={'Bob': 66,'Tina': 88,'Tom': 99}
>>> score
{'Bob': 66, 'Tina': 88, 'Tom': 99}
>>> type(score)
<type 'dict'>
>>> score.items()  #对象函数
[('Bob', 66), ('Tina', 88), ('Tom', 99)]
>>> score.keys()  #键函数
['Bob', 'Tina', 'Tom']
>>> score.values()  #数值函数
[66, 88, 99]

e.自动内存管理——根据需要的量自动提高或降低内存容量

g.可扩展性——兼容性好,可与其他语言相互调用模块

对NAO来说,Choregraphe安装时也安装了Python,可使用IDLE来进行测试。也可编辑一些Choregraphe模块。

2.3.2数据型态及操作数

2.3.2.1变量名称

可用文字,数字和下底线(_);第一个字母不能为数字且所有变量大小写敏感

不能被用作变量名称的保留字(会变色的哦)
and del from not while
as elif global or with
assert else if pass yiled
breay except import print  
class exec in raise  
continue finally is return  
def for lambda try  

2.3.2.2操作数,数字及字符串表示法

1)数据类型

长整型(long),浮点型(float),复数(complex)

>>> score = 100  #整型int
>>> type(score)
<type 'int'>
>>> 0b1010  #二进制转十进制
10
>>> 0o11  #八进制变十进制
9
>>> 0xa3  #十六进制变十进制
163
>>> bin(10)  #十变二
'0b1010'
>>> oct(9)  #十变八
'011'
>>> hex(163)  #十变十六
'0xa3'
>>> pi = 3.14  #浮点数
>>> type(pi)
<type 'float'>
>>> pi
3.14  #没有出现3.1400000000000001的浮点数误差
>>> pi = 314e-2  #浮点数另一种表示方法
>>> type(pi)
<type 'float'>
>>> pi
3.14
>>> x=1+1j  #复数
>>> type(x)
<type 'complex'>
>>> x.imag
1.0
>>> x.real
1.0
>>> x.conjugate()
(1-1j)
2)操作数

基本算术运算(+,-,*,/),取余数(%),指数(**),指数的优先权大于其余算术运算

2.3.3控制语句

2.3.3.1条件式

1)“if”语句

>>> score=77   
>>> if 90<=score<=100:
	print"A"
elif 80<=score<90:
	print"B"
elif 70<=score<80:
	print"C"
elif 60<=score<70:
	print"D"
else:
	print"不及格"

	
C
>>> 
2) "while"语句
>>> sum = 0
>>> number = 0
>>> while number < 5:
	number += 1
	sum += number
	print number,sum

	
1 1
2 3
3 6
4 10
5 15

2.3.3.2循环

1)"for"语句

>>> number = ['one','two','three','four','five']
>>> for i in number:
	print i

	
one
two
three
four
five
2)range函数——创建不断重复数值的列表
>>> range(1,6,1) #range(起始值,终止值,增加值)
[1, 2, 3, 4, 5]
>>> sum = 0      #range + for =while
>>> for i in range(1,6):
	sum += i
	print i,sum

	
1 1
2 3
3 6
4 10
5 15
>>> 

2.3.4类

2.3.4.1声明——同时定义数据(data)和方法(method)

>>> class firstclass:  #可用“pass"语句来定义一个简单且没有任何内容的类
	pass

>>> f1=firstclass()    #对象创造
>>> type(f1)           
<type 'instance'>
>>> #通用类(定义变量和方法和对象声明)
>>> import math  #会声明且导入开根号(sqrt)函数的模块
>>> class Point:
	x=0;y=0; #变量初始化
	def distance(self):
		return math.sqrt(self.x*self.x+self.y*self.y)

	
>>> p1=Point()
>>> p1.x=10;p1.y=20;
>>> p1.distance()
22.360679774997898

2.3.4.2类及对象间的关系 

>>> class secondclass:
	name = "hi"

	
>>> x1=secondclass()
>>> x2=secondclass()
>>> x1.name
'hi'
>>> x2.name
'hi'
>>> x2.name="hello"
>>> x1.name
'hi'
>>> x2.name
'hello'
>>> #独立的类对象
>>> 
>>> x1.age=10
>>> print x1.name,x1.age
hi 10
>>> #可动态且独立的增加对象和类变量
>>> 
>>> isinstance(x1,secondclass)
True
>>> p=10
>>> isinstance(p,secondclass)
False
>>> #使用'isinstance'方法可以了解类和对象之间的关系

2.3.4.3构造函数(创建一个类时的初始化,当创建一个对象时会自动声明)和析构函数(会在销毁对象时被自动声明)

>>> class conclass:
	def __init__(self):
		print"Constructor Called"
	def __del__(self):
		print"Destrutor Called"

		
>>> c1=conclass()  #自动声明构造函数
Constructor Called
>>> c1=0  #通过"c1=0"来将连接对象改为 0 以检测是否有声明析构函数
Destrutor Called #此外,就算你使用"del()"函数来从内存 中删除对象,析构函数还是会被声明。 

通常,构造函数与析构函数必须定义对象的初始化程序(例如,使用 NAO 来交换电子邮件时),它们会提供电子邮件地址与 IP 位置到对象中。 

2.3.4.4静态方法(static method)——可声明外部的对象,而无须创造

>>> class staticclass:
	def print_hello(): #静态函数,一般函数中有"self"作为第一个参数来指向它自己的对象,但静态方法不需要第一个参数 
		print"Hello World"
	static_print=staticmethod(print_hello)
>>> staticclass.static_print()
Hello World

2.3.4.5操作数重载(Operator overloading)

>>> class TString:  #运算符重载最典型的例子——增加字符串 
	def __init__(self,init):
		self.string = init
	def __add__(self,other):
		return self.string[:]+other

	
>>> hello=TString("hello")
>>> hello+" hi"
'hello hi'  #其他还有很多预定义方法

2.3.4.6继承

>>> class Robot:
	def move(self):  #'move'方法
		pass
	def operating(self):  #'operating'方法
		pass

	
>>> class Biped_Robot(Robot):  #双足行走(Biped_Robot)
	def __init__(self,leg):
		self.leg=leg    #代表一只腿的变量'leg'

		
>>> class Nao(Biped_Robot):
	def __init__(self,leg):
		self.company="aldebaran robotics"
		self.os="embedded linux"
		Biped_Robot,__init__(self,leg)

		
>>> issubclass(Nao,Robot)  #`issubclass' 函数可以检查子类与父类之间的关系 
True                       #存在父子关系
>>> class Hubo(Biped_Robot):#增加 Hubo 机器人来代替 NAO(使用继承关系去增加一个新类)
	def __init__(self,leg):
		self.company="vaist"
		self.os="nothing,16bit microprocessor"
		Biped_Robot,__init__(self,leg)

		
>>> class Hubo(Biped_Robot):# 函数重载
	def move(self):
		print "Hubo is moving"

		
>>> hubo = Hubo(2)
>>> hubo.move()
Hubo is moving

2.3.5模块(Module)——具有特定功能的函数组合

2.3.5.1使用——import

2.3.5.2创造——数据存在Lib文件夹中

2.3.6函数

2.3.6.1声明

>>> def add(a,b):
	return a+b

>>> add(10,20)
30
>>> add("hello","LYF")
'helloLYF'
>>>   惊了!!!

2.3.6.2返回值——有"return"语句才有返回值(return value)

>>> def nothing():
	return

>>> print nothing()
None
>>> #如何返回多个对象
>>> def cla(a,b):
	return a+b,a-b,a*b,a/b

>>> cla(10,20)
(30, -10, 200, 0)
>>> a,b,c,d = cla(10,20)
>>> print a,b,c,d
30 -10 200 0

2.3.6.3参数——Python以引用的方式将参数传递至函数

>>> def add(a,b):
	b = 10
	return a+b

>>> def change(a):
	a[0] = 'a'

	
>>> a = 20;b = 30
>>> add(a,b)
30
>>> print a,b
20 30                #可修改的类型
>>> a = ['b','b','b']
>>> change(a)
>>> print a
['a', 'b', 'b']      #不可修改的类型

2.3.6.4pass——是用来创造不进行任何操作的程序代码

"pass"语句在编写程序时的使用频率较高,举例来说,当编写一个临时函数(temporary function),模块(module),或类(class)时你可以只指派名称但不编写任何内容。 

>>> def nothing():
	pass

>>> nothing()
>>> print nothing()
None

3.感想

Naoqi和DCM还搞不懂是什么……其它要学的也好多呀!下周继续加油!争取实现一个深度对话功能!

NAO学习第一周

相关标签: NAO python