资讯中心

新闻资讯

行业观点

天聚动态

联系方式

公司地址:青岛市福州北路万科中心B座803室

联系电话:13589273999(售前)/16678687621(售后)

联系电话:0532-87621819

热点新闻

NAO机器人【镜像动作实验】

2021-03-29 行业观点 文章来源:

NAO机器人--镜像动作实验

NAO-1 (1).jpg

▍NAO驱动器

NAO机器人除了我们所熟知的传感器以外,内部还拥有陀螺仪、加速度计和驱动单元。

陀螺仪与加速度计的功能如同人体的内耳,提供了让机器人保持平衡与重力的功能。

驱动器(Actuators)指的是位于NAO机器人各关节上的伺服电机,每个电机上都有一个编码器(Encoder),编码器的功能是测量电机的旋转角度,通过电机的旋转角度,便能知道机器人的手臂或者其他关节正处于什么位置。

▍“镜像动作程序”

刚刚我们提到了驱动器内部有编码器,其功能是检测机器人所有关节(电机)角度的变化。在本节中我们在Choregraphe软件中使用【Python】指令盒,设计一个能够让操作者自由转动机器人的一支手臂,而另一支手臂则会跟着操作者移动轨迹移动的镜像动作指令盒。

程序说明.png

<01>碰撞传感器(Bumper)指令盒

Bumper.png

双击指令盒,进入指令盒内部构造

leftBumper.png

Bumper指令盒内部构造(左脚)

rightBumper.png

Bumper指令盒内部构造(右脚)

碰撞传感器位于NAO机器人双脚的前端。碰撞传感器通过是否被按压或碰撞来感测信号,机器人能通过此功能辨别前方是否有障碍物。

碰撞传感器指令盒有两个布尔值输出,分别是表示左右脚是否被按压。指令盒内部分别有左右脚变量输出,若是其中一只脚被按压,那么输出数值为“1”(True),两只脚都没被按压则会输出“0”(False)。

碰撞-新.jpg

碰撞传感器位置

<02>Python指令盒

python.png

双击指令盒,进入指令盒内部构造

Python指令盒.png

Python指令盒内部说明

接着输入Python代码,如下图所示:

import timeclass MyClass(GeneratedClass):
    def __init__(self)://将需要用到的各个关节做定义
        GeneratedClass.__init__(self)
        self.motion = ALProxy("ALMotion")        
        self.done = False        
        self.stiff = ['RShoulderPitch','RShoulderRoll','RElbowYaw','RElbowRoll']        
        self.unstiff = ['LShoulderPitch','LShoulderRoll','LElbowYaw','LElbowRoll']        
        self.origStiffness = self.motion.getStiffnesses(self.unstiff)    
    def onLoad(self):        
        #put initialization code here        
        pass    
    def onUnload(self)://信号未输入时将各关节锁死        
        self.done = True        
        self.motion.setStiffnesses(self.unstiff,self.origStiffness)    
    def onInput_onStart(self)://信号输入时执行动作
        self.motion.setStiffnesses(self.unstiff,0.0)        
        self.done = False        
        while not self.done:            
            vals = self.motion.getAngles(self.unstiff,True)            
            vals[1] = -vals[1]            
            vals[2] = -vals[2]            
            vals[3] = -vals[3]            
            self.motion.setAngles(self.stiff,vals,0.5)            
            time.sleep(0.1)    
    def onInput_onStop(self)://信号输入后暂停时动作        
        self.onUnload()

本程序通过一个循环来持续测量左手臂关节角度,并在右臂设置相同的角度。利用getAngles函数取得手臂的角度,并使用setAngles函数来设定另一个手臂的角度。

stiff变量指的是将执行镜像动作的手臂(右臂)的关节;

unstiff变量指的是有刚度的手臂(左臂)关节。

所以当左脚的碰撞传感器(Bumpers)被按下时,机器人的关节电机没有上电,处于放松状态,右脚的碰撞传感器(Bumpers)按下后,关节即恢复其刚度。

中国总部·青岛Email:mail@qdtianju.com

河南分公司·郑州Email:wx@qdtianju.com