NAO Robot Learning_6 Locomotion Control using python

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]] )

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值