reference:http://doc.aldebaran.com/2-8/naoqi/motion/control-walk.html#move-config
一、Nao机器人的移动控制方式共有两种:
1.使用已有的API函数:moveTo / move / moveToward
moveTo:从当前位置移动到指定的位置,目标是明确的,具体的移动路径是通过API内部函数进行路径规划得到的(阻塞调用)
move/moveToward:指定延轴的速度,这两种方式下,机器人的具体的运动轨迹和速度都不是显式确定的(设置的只是一个限定的速度区间,并不是实际的运动速度)(非阻塞调用)
使用方式:在使用以上3中函数控制机器人移动时,只需要传入指定的参数即可。使用起来很简单,但实际上,在函数的背后运用了路径步态规划的相应算法,所以如果要改变机器人的运动步态,就需要修改算法,这里官方也提供了一些步态参数来允许用户自定义步态。
通过设置这些步态参数,可以影响步态的规划。
2.自定义机器人的步态(确定机器人每步的实际落脚点的位置):
使用setFootSteps/
setFootStepsWithSpeed方法,但必须自己实现算法来确定机器人每一步的位置
二、建议:如果不是要研究机器人的步态控制或完成复杂的动作任务的,一般采用上述第一种方法即可
三、使用示例:
# example
motion_service = session.service("ALMotion")
posture_service = session.service("ALRobotPosture")
# Wake up robot
motion_service.wakeUp()
# Send robot to Stand Init
posture_service.goToPosture("StandInit", 0.5)
motion_service.moveInit()
# TARGET VELOCITY
X = 1.0
Y = 0.0
Theta = 0.0
Frequency = 1.0
# Default walk (MaxStepX = 0.04 m)
motion_service.moveToward(X, Y, Theta, [["Frequency", Frequency]])
time.sleep(3.0)
print "walk Speed X :",motion_service.getRobotVelocity()[0]," m/s"
# Speed walk (MaxStepX = 0.06 m) # 一般建议最大设置为0.06m
motion_service.moveToward(X, Y, Theta, [["Frequency", Frequency],
["MaxStepX", 0.06]])
time.sleep(4.0)
print "walk Speed X :",motion_service.getRobotVelocity()[0]," m/s"
# stop walk on the next double support
motion_service.stopMove() # best method to finish the move
# Go to rest position
motion_service.rest()
四、相关操作:
1.设置运动时的手部动作:
# Example showing how to disable left arm motions during a move
leftArmEnable = False
rightArmEnable = True
proxy.setMoveArmsEnabled(leftArmEnable, rightArmEnable)
# Example showing how to get the enabled flags for the arms
print 'LeftArmEnabled: ', proxy.getMoveArmsEnabled("LArm")
print 'RightArmEnabled: ', proxy.getMoveArmsEnabled("RArm")
print 'ArmsEnabled: ', proxy.getMoveArmsEnabled("Arms")
2.不同的移动函数可供设置的步态参数的形式也有差异:
moveTo:只能同时对双脚进行设置
motion.moveTo(0.2, 0, 0, [["StepHeight", 0.02]])
move/moveToward:需要分开分别对两只脚进行设置:
# TARGET VELOCITY
X = 1.0
Y = 0.0
Theta = 0.0
Frequency = 1.0
motion_service.moveToward(X, Y, Theta,[["Frequency", Frequency],
# LEFT FOOT
["LeftStepHeight", 0.02],
["LeftTorsoWy", 5.0*almath.TO_RAD],
# RIGHT FOOT
["RightStepHeight", 0.005],
["RightMaxStepX", 0.001],
["RightMaxStepFrequency", 0.0],
["RightTorsoWx", -7.0*almath.TO_RAD],
["RightTorsoWy", 5.0*almath.TO_RAD]] )