目录

一、关节控制方法

1.1 控制关节

1.2 定时插值

1.3 反应控制

1.4 读关节角度

一、关节控制方法

关节控制通常要经历多个ALMotion周期(20ms)。为使关节平稳转动,每隔20ms,API需要重新计算电机电流和刚度变化。

控制关节或关节组有两种方式:

(1)插值方法,阻塞调用,类似于动画,在起始位置和终止位置间定时插入若干中间值。

(2)反应式方法,非阻塞调用,通常在反应控制中多次调用。例如在头部跟踪时,NAO可能得到一组相互矛盾的命令序列(如前一个命令是头部左转,后一个命令是右转),调用反应式方法可以保证运动平滑且速度连续。

方法名

说明

调用方式

angleInterpolation (names, angleLists, timeLists, isAbsolute)

插值运动。names 是关节名称;angleLists是角度、角度列表或二维角度列表,单位为弧度;timeLists是为达到目标角度的时间、时间列表或二维时间列表;isAbsolute为True,代表绝对角度,为False,代表相对角度。

阻塞调用

angleInterpolationWithSpeed(names, targetAngles, maxSpeedFraction)

插值运动(带速度限制)。names是关节名称;targetAngles为弧度表示的角度或角度列表,maxSpeedFraction为最大速度百分比

阻塞调用

angleInterpolationBezier(jointNames, times,controlPoints)

贝塞尔角度插值。jointNames为关节名称列表,times为时间列表,controlPoints为控制点列表

阻塞调用

setAngles(names,angles, fractionMaxSpeed)

设置关节角度。names是关节名称;angles为一个或多个角度;maxSpeedFraction为最大速度百分比

非阻塞调用

changeAngles(names,angles, fractionMaxSpeed)

改变关节角度。names是关节名称;angles为一个或多个角度;maxSpeedFraction为最大速度百分比

非阻塞调用

getAngles(names, useSensors)

获取关节角度。names为关节名;useSensors为True返回关节传感器角度,为False返回执行器角度

closeHand(handName)

合上手掌。handName取值:LHand,RHand

阻塞调用

openHand(handName)

张开手掌。handName取值:LHand,RHand

阻塞调用

1.1 控制关节

需要给出关节名称、以弧度为单位的目标角度和转到目标角度的速度。

almath是NAOqi系统提供的数学函数库,almath.TO_RAD为1度所对应的弧度数,在关节控制方法中,目标角度都以弧度为单位,本例及以后示例中,目标角度都用角度*1度对应弧度数形式表示。 setAngles()方法为非阻塞调用方法,本例中转头动作后面的语句将头部刚度设置为0,因此调用setAngles()方法时需要使用延时。

# 头部关节运动(头部左转30度)
import  time
import  almath
class  MyClass(GeneratedClass):def  __init__(self):GeneratedClass.__init__(self)self.motion=ALProxy("ALMotion")def  onLoad(self):passdef  onUnload(self):passdef  onInput_onStart(self):self.motion.setStiffnesses("Head", 1.0)names = "HeadYaw"angles = 30.0*almath.TO_RADfractionMaxSpeed = 0.1       # HeadYaw joint at 10% max speedself.motion.setAngles(names,angles,fractionMaxSpeed)time.sleep(3.0)self.motion.setStiffnesses("Head", 0.0)passdef  onInput_onStop(self):self.onUnload()self.onStopped()

1.2 定时插值

如果关节运动的轨迹是已知的,angleInterpolation()[阻塞调用]angleInterpolationWithSpeed()方法可以在每个ALMotion周期中重新计算执行器(电机)参数,控制关节运动速度,使机器人运动平稳。关节插值运动方法可以对一个关节或多个关节指定运动角度,也可以指定角度序列及完成这些动作的时间序列

# 头部插值运动
import  almath
import  timeclass  MyClass(GeneratedClass):def  __init__(self):GeneratedClass.__init__(self)self.motion=ALProxy("ALMotion")def  onLoad(self):passdef  onUnload(self):passdef  onInput_onStart(self):self.motion.setStiffnesses("Head", 1.0)names = "HeadYaw"angleLists = 50.0*almath.TO_RADtimeLists  = 1.0isAbsolute = Trueself.motion.angleInterpolation(names, angleLists, timeLists, isAbsolute)time.sleep(1.0)names= "HeadYaw"angleLists = [30.0*almath.TO_RAD, 0.0]timeLists  = [1.0, 2.0]isAbsolute = Trueself.motion.angleInterpolation(names, angleLists, timeLists, isAbsolute)time.sleep(1.0)names      = ["HeadYaw", "HeadPitch"]angleLists = [30.0*almath.TO_RAD, 30.0*almath.TO_RAD]timeLists  = [1.0, 1.2]isAbsolute = Trueself.motion.angleInterpolation(names, angleLists, timeLists, isAbsolute)names  = ["HeadYaw","HeadPitch"]angleLists=[[50.0*almath.TO_RAD, 0.0],[-30.0*almath.TO_RAD, 30.0*almath.TO_RAD, 0.0]]timeLists=[[1.0, 2.0], [ 1.0, 2.0, 3.0]]isAbsolute=Trueself.motion.angleInterpolation(names, angleLists, timeLists, isAbsolute)self.motion.setStiffnesses("Head", 0.0)passdef  onInput_onStop(self):self.onUnload() self.onStopped()

1.3 反应控制

setAngles()changeAngles()方法为非阻塞调用方法,经常用于关节反应式控制,在前一个调用未完成前,可以执行下一个调用。

# 反应控制
import  timeclass  MyClass(GeneratedClass):def  __init__(self):GeneratedClass.__init__(self)self.motion=ALProxy("ALMotion")def  onLoad(self):passdef  onUnload(self):passdef  onInput_onStart(self):self.motion.setStiffnesses("Head", 1.0)names = "HeadYaw"angles = 0.3fractionMaxSpeed = 0.1self.motion.setAngles(names,angles,fractionMaxSpeed)      time.sleep(0.5)   # wait  half  a  second       angles = 0.0   # change  targetself.motion.setAngles(names,angles,fractionMaxSpeed)       time.sleep(0.5)   # wait  half  a second       angles = 0.1   # change  targetself.motion.setAngles(names,angles,fractionMaxSpeed)time.sleep(3.0)self.motion.setStiffnesses("Head", 0.0)passdef  onInput_onStop(self):self.onUnload()self.onStopped()

1.4 读关节角度

关节控制是通过调用API方法,将关节控制命令发送给相应的执行器(电机)完成的。命令执行完成后,关节角度应该与发给执行器的命令相一致(实际的机械结构执行过程中可能存在微小误差)。NAO在每个关节上安装了位置传感器测量关节角度。getAngles()方法即可以读取执行器角度,也可以读取传感器角度。

# 获取关节角度
import time
class  MyClass(GeneratedClass):def  __init__(self):GeneratedClass.__init__(self)self.motion=ALProxy("ALMotion")def onLoad(self):passdef  onUnload(self):passdef  onInput_onStop(self):self.onUnload() self.onStopped() def  onInput_onStart(self):self.motion.setStiffnesses("Head", 1.0)names = "HeadYaw"angles = 0.3fractionMaxSpeed = 0.8self.motion.setAngles(names,angles,fractionMaxSpeed)      time.sleep(1.5)   names = "Head"                  #包括HeadYaw和HeadPitchuseSensors = FalsecommandAngles = self.motion.getAngles(names, useSensors)   #读取执行器角度self.logger.info("Command angles:")self.logger.info(str(commandAngles))useSensors  = TruesensorAngles = self.motion.getAngles(names, useSensors)   #读取传感器角度self.logger.info("Sensor angles:")self.logger.info(str(sensorAngles))errors = []for  i  in  range(0, len(commandAngles)):errors.append(commandAngles[i]-sensorAngles[i])self.logger.info("Errors")self.logger.info(errors)pass

NAO机器人——运动控制(2)相关推荐

  1. NAO机器人——运动控制(1)

    目录 ALRobotPosture Motion 肩关节: 髋关节: 腿关节: 刚度设置1: 刚度设置2: 关节位置参考:NAO团队任务--运动控制(1)_云灵小镇的博客-CSDN博客 ALRobot ...

  2. NAO机器人——运动控制(3)

    目录 一.关节运动与身体平衡 1.1 moveTo 1.2 move 1.3 moveToward 一.关节运动与身体平衡 步频:步数/秒 当关节运动时,机器人的重心会发生变化,严重时机器人会摔倒.为 ...

  3. 《NAO机器人程序设计》---第四章 运动控制

    <NAO机器人程序设计>-第四章 运动控制 Nao机器人-Choregraphe 关节名 机器人边走边说话 moveInit():运动进程的初始化,检查机器人的当前状态,并选择一个正确的姿 ...

  4. [行业调研]NAO机器人相关

    ################## NAO机器人 ################## NAO机器人是Aldebaran Robotics公司研制的一款人工智能机器人.Nao是在学术领域世界范围内运 ...

  5. OpenCV NAO机器人辅助捡球丢球

    文章目录 1. 概述 2. 相关技术 2.1 NAO机器人 2.2 Choregraphe 2.3 OpenCV 3. 总体设计与详细设计 3.1 系统模块划分 3.2 主要功能模块 4 遇到的问题 ...

  6. python控制nao机器人_python控制nao机器人身体动作实例详解

    本文实例为大家分享了python控制nao机器人身体动作的具体代码,供大家参考,具体内容如下 今天读的代码,顺便写了出来,与文档的对比,差不多. import sys import motion im ...

  7. nao机器人行走速度_数计学院学子在2020世界机器人大赛总决赛中荣获佳绩!

    12月3日至6日,2020世界机器人大赛总决赛在佛山潭州国际会展中心举行.由武汉纺织大学数学与计算机学院何儒汉教授指导,杨皓然.成振瑞.李幸阜.伏嘉豪.李创等5名本科生同学组成的参赛团队荣获 2020 ...

  8. 机器人运动控制-水下机器人

    文章目录 1背景 2PCE体系结构 3感知层 3.1水下机器人动力学模型 3.2目标指令理解 4控制层 4.1神经网络搭建 5水下机器人执行层技术 6水下机器人运动控制系统 1背景 水下机器人运动控制 ...

  9. Nao机器人运行B-human代码之开始篇 1

    申明:既然在网上有介绍安装B-human软件的,我就不写了,在此转载.原文地址:http://www.cnblogs.com/followyourheart/archive/2012/03/12/B- ...

最新文章

  1. Android 10 新增的功能
  2. 【POJ1113】Wall(凸包)
  3. 【Java并发编程】—–“J.U.C”:ConcurrentLinkedQueue
  4. 解决python安装第三方库速度很慢的问题(opencv为例)
  5. MySQL性能调优的14板斧
  6. java ftp 关闭连接_java - 使用Java Apache FTPClient进行FTP TLS获取“握手时远程主机关闭连接”[重复] - 堆栈内存溢出...
  7. 新的生活,新的工作,新的挑战
  8. redis统计用户日活量_【赵强老师】Redis案例分析:用setbit统计活跃用户
  9. Unity 3D 学习(一)——Roll a ball
  10. 《毫米波雷达运动人体目标建模与特征提取》---论文学习笔记
  11. UG与PROE哪个好用,主要看是用在哪里
  12. 笔记-Tukey Method发现outliers(离群点)
  13. Premiere 常用视频概念
  14. 谋定而后动,常怀敬畏之心--生产库DBA必备素质
  15. css最后一行省略号,CSS怎么实现单行、多行文本溢出显示省略号
  16. 关于过圣诞节的一段往事
  17. 易语言dd驱动模拟按键模块_DD虚拟键盘虚拟鼠标
  18. Jetty的安装、配置和使用(三种使用方式)
  19. Houdini 导出粒子替代物至Maya渲染
  20. Gephi简易学习[七]————通过Pyhthon编写程序来调用honglou.json生成.csv文件

热门文章

  1. 删除对象属性的三种方法
  2. dalle:zero-shot text-to-image generation
  3. physical examination
  4. 第一章、Ansible的详细介绍与安装
  5. 从0开始学习卷积神经网络与Yolo系列目标检测算法
  6. AD/2000技巧 - 60多条!
  7. 动态规划之二见完全背包问题
  8. JDK、JRE、JVM三者分别表示什么?有何区别?
  9. SPARQL 使用教程
  10. 2021年十大数据分析和商业智能趋势