NAO机器人程序设计复习,助你拿高分
时间:2022-07-13 08:30:00
文章目录
-
- 1. NAO机器人概述
-
- 1.1 机器人传感器
- 1.2 机器人关节运动分类
- 1.3 机器人的自由度
- 数学基础
-
- 方位描述
- 坐标变换(重点是公式)
-
- 平移坐标变换
- 旋转坐标变换
- 复合变换
- 齐次变换(重点)
- 例题(类似试题)
- 2. Python基本语法
-
- 2.1 条件语句
- 2.2 while循环语句
- 2.3 列表
-
- 2.3.1 访问列表元素
- 2.3.2 操作列表常用方法
- 2.3.3 列表分片
- 2.3.4 列表加和乘运算
- 2.4 for循环
- 2.5 函数
- 3. NAO机器人编程基础
-
- 3.1 阻塞调用和非阻塞调用
- 3.2 内存
-
- 3.2.1 NAO状态数据
- 3.2.2 订阅事件数据
- 4. 运动控制
-
- 4.1 刚度控制
- 4.2 关节控制方法
- 4.3 运动控制方法
-
- 4.3.1 moveTo方法
- 4.3.2 move方法
- 4.3.3 moveToward方法
- 4.4 步态控制
- 4.5 时间轴指令盒
- 5.音频处理
-
- 5.1 音频数值化过程
-
- 5.1.1 采样
- 5.1.2 量化
- 5.1.3 编码
- 5.2 音频存储
- 5.3 ALAudioRecorder录音模块
-
- 5.3.1 ALAudioRecorder方法
- 5.4 ALSoundLocalization声音识别模块
- 6. 视觉处理
-
- 6.1 分辨率和颜色空间
- 6.2 ALPhotoCapture图像捕获
- 6.2 订阅图像
-
- 6.2.1 订阅图像的相关方法
- 6.2.2 订阅图像流程
- 7. 传感器
-
- 7.1 什么是DCM
- 7.2 DCM作用
1. NAO机器人概述
1.1 机器人传感器
- 接触传感器:触摸,按压,划过接触传感器可以触发接触传感器产生电信号,进而完成向机器人输入信息。
- 惯性传感器:测量身体状态和加速度,包括两个陀螺仪和一个加速度计。
- 位置传感器:有36个测量机器人自身关节的位置。例如,在录制舞蹈时,位置传感器可以测量 机器人的关节数据,并最终存储以记录机器人的状态。
- 压力传感器:每只脚上有四个压力传感器来确定每只脚的压力中心的位置。行走时,NAO机器人根据重心位置调整步态以保持身体平衡。
1.2 机器人关节运动分类
对于连接机器人两个身体部位的关节,驱动电机实现关节运动时,固定在躯干上的部件固定,远离躯干的 部件将围绕关节轴旋转。
- 横滚(Roll):沿x轴向旋转称为横滚
- 俯仰(Pitch):沿y轴向旋转称为俯仰
- 偏转(Yaw):沿z轴方向的旋转称为偏转
- 沿关节轴逆时针转动角度为正,顺时针转动角度为负
- 向左为正,向右为负
1.3 机器人的自由度
自由度机器人能独立运动的关节数,称为机器人的运动自由,称为自由(Degree of Freedom),由DOF简写表示。
头部有两个关节,可以做偏转(Yaw)和俯仰(Pitch),因此,头部的自由度为2。除表列出的24个自由度外,每只手都可以张开和关闭,有一个自由度,因此,NAO全身有26 自由度。
数学基础
方位描述
- 坐标系绕X轴旋转
-
坐标系绕Y轴旋转
-
坐标系绕Z轴旋转
坐标变换(重点是公式)
平移坐标变换
旋转坐标变换
复合变换
齐次变换(重点)
齐次变换:将n维矩阵升级到n+1维
例题(考题类似)
Rot是旋转矩阵
2. Python基本语法
2.1 条件语句
- 双分支选择结构
score=75if score>=60: print ("Pass")else: print ("Fail")
- 多分支选择结构
score=75if score>=90: print ("Excellent")elif score>=80: print ("Very Good")elif score>=70: print ("Good")elif score>=60: print ("Pass")else: print ("Fail")
2.2 while循环语句
- continue语句
- break语句
2.3 列表
- 列表:列表由一系列按特定顺序排列的元素组成。
- 元素可以是任何类型的变量。
- 与其他语言中的数组不同,列表元素之间可以没有任何关系,可以是不同数据类型的。
- 列表包含多个元素,通常给列表指定一个表示复数的名称 (如letters 、digits 或names )。
- 用方括号[ ]来表示列表,并用逗号来分隔其中的元素。
xs=[1,2,3,4,5]ys=["one","two","three","four","five"]zs=[1,"one",True]print xsprint ysprint zs输出结果为:[1, 2, 3, 4, 5]['one', 'two', 'three', 'four', 'five'][1, 'one', True]
2.3.1 访问列表元素
- 通过下标(索引)访问列表元素
- len()函数求出列表长度:len (grades)表示列表grades的长度
- 索引0表示第一个元素,索引-1表示列表最后一个元素
2.3.2 操作列表常用方法
2.3.3 列表分片
列表分片:取出列表的一部分元素,称为分片。
Python对列表提供了强大的分片操作,运算符仍然为下标运算符。创建列表分片,需要指定所取元素的起始索引和终止索引,中间用**冒号分隔。分片将包含从起始索引到终止索引 (不含终止索引)**所对应的所有元素。
- 不指定起始索引,Python将自动从列表头开始
- 不指定终止索引,Python将提取到列表末尾
- 终止索引小于等于起始索引时,分片结果为空
- 两个索引都不指定时,将复制整个列表。
2.3.4 列表加和乘运算
2.4 for循环
- range函数
- for循环例子
s=[]for i in range(1,11):s.append(i**2)print s输出结果为: [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]。在Python 中,i的n立方用i**n 表示。
2.5 函数
函数代码块以def 关键词开头,后接函数标识符名称和圆括号 (),括号里面是函数的参数,冒号后面对应缩进的代码块是函 数体。 函数如果需要有返回的结果,利用return关键字作返回。
def add(list): sum = 0 for i in list: sum+=i return sumarray = [1,2,3,4,5]count = add(array)print (count)
3. NAO机器人编程基础
3.1 阻塞调用和非阻塞调用
-
阻塞调用:阻塞调用是指调用结果返回之前,调用者会进入阻塞状态等待。只有在得到结果之后才会返回。也就是说,在顺序结构的程序中,只有在前一个调用结束后才能执行下一条语句
-
对于NAOqi任何阻塞调用的方法,如果使用Proxy的post对象进行调用,将在并行线程中创建任务,这样可以同时执行后面的语句
-
非阻塞调用:指在不能立刻得到结果之前,该方法不会阻塞当前线程,而会立刻返回,这样就可以继续执行下面的语句。
eg:让NAO机器人行走与说话
from naoqi import ALProxyimport timemotion = ALProxy("ALMotion", "192.168.1.170",