40 from std_msgs.msg
import String
41 from geometry_msgs.msg
import Twist
42 from geometry_msgs.msg
import Pose2D
44 from std_srvs.srv
import Empty, EmptyResponse
45 from naoqi_bridge_msgs.srv
import CmdPoseService, CmdVelService, CmdPoseServiceResponse, CmdVelServiceResponse, SetArmsEnabled, SetArmsEnabledResponse
47 from humanoid_nav_msgs.srv
import StepTargetService, StepTargetServiceResponse
49 from nao_apps
import startWalkPose
53 NaoqiNode.__init__(self,
'nao_walker')
67 initStiffness = rospy.get_param(
'~init_stiffness', 0.0)
72 self.
footGaitConfig = rospy.get_param(
'~foot_gait_config', self.motionProxy.getFootGaitConfig(
"Default"))
74 self.
footGaitConfig = self.motionProxy.getFootGaitConfig(
"Default")
77 if initStiffness > 0.0
and initStiffness <= 1.0:
78 self.motionProxy.stiffnessInterpolation(
'Body', initStiffness, 0.5)
81 enableFootContactProtection = rospy.get_param(
'~enable_foot_contact_protection')
82 self.motionProxy.setMotionConfig([[
"ENABLE_FOOT_CONTACT_PROTECTION", enableFootContactProtection]])
83 if enableFootContactProtection:
84 rospy.loginfo(
"Enabled foot contact protection")
86 rospy.loginfo(
"Disabled foot contact protection")
92 rospy.Subscriber(
"cmd_vel", Twist, self.
handleCmdVel, queue_size=1)
94 rospy.Subscriber(
"cmd_step", StepTarget, self.
handleStep, queue_size=50)
97 self.
pub = rospy.Publisher(
"speech", String, latch =
True)
108 self.
say(
"Walker online")
110 rospy.loginfo(
"nao_walker initialized")
113 '''(re-) connect to NaoQI''' 114 rospy.loginfo(
"Connecting to NaoQi at %s:%d", self.
pip, self.
pport)
121 """ Stops the current walking bahavior and blocks until the clearing is complete. """ 123 self.motionProxy.setWalkTargetVelocity(0.0, 0.0, 0.0, self.
stepFrequency)
124 self.motionProxy.waitUntilWalkIsFinished()
127 except RuntimeError,e:
128 print "An error has been caught" 136 self.pub.publish(text)
139 rospy.logdebug(
"Walk cmd_vel: %f %f %f, frequency %f", data.linear.x, data.linear.y, data.angular.z, self.
stepFrequency)
140 if data.linear.x != 0
or data.linear.y != 0
or data.angular.z != 0:
144 if abs(data.linear.x)<eps
and abs(data.linear.y)<eps
and abs(data.angular.z)<eps:
145 self.motionProxy.setWalkTargetVelocity(0,0,0,0.5)
148 except RuntimeError,e:
150 rospy.logerr(
"Exception caught in handleCmdVel:\n%s", e)
151 rospy.signal_shutdown(
"No NaoQI available anymore")
157 return CmdVelServiceResponse()
160 """handles cmd_pose requests, walks to (x,y,theta) in robot coordinate system""" 162 rospy.logdebug(
"Walk target_pose: %f %f %f", data.x,
169 self.motionProxy.post.walkTo(data.x, data.y, data.theta, self.
footGaitConfig)
171 self.motionProxy.walkTo(data.x, data.y, data.theta, self.
footGaitConfig)
173 except RuntimeError,e:
174 rospy.logerr(
"Exception caught in handleTargetPose:\n%s", e)
179 rospy.logdebug(
"Step leg: %d; target: %f %f %f", data.leg, data.pose.x,
180 data.pose.y, data.pose.theta)
182 if data.leg == StepTarget.right:
184 elif data.leg == StepTarget.left:
187 rospy.logerr(
"Received a wrong leg constant: %d, ignoring step command", data.leg)
189 self.motionProxy.stepTo(leg, data.pose.x, data.pose.y, data.pose.theta)
191 except RuntimeError, e:
192 rospy.logerr(
"Exception caught in handleStep:\n%s", e)
197 return StepTargetServiceResponse()
202 """ do NOT use post""" 204 return CmdPoseServiceResponse()
210 return EmptyResponse()
221 return EmptyResponse()
227 self.
footGaitConfig = rospy.get_param(
'~foot_gait_config', self.motionProxy.getFootGaitConfig(
"Default"))
229 self.
footGaitConfig = self.motionProxy.getFootGaitConfig(
"Default")
230 return EmptyResponse()
233 self.motionProxy.setWalkArmsEnable(req.left_arm, req.right_arm)
234 rospy.loginfo(
"Arms enabled during walk: left(%s) right(%s)" % (req.left_arm, req.right_arm))
235 return SetArmsEnabledResponse()
238 if __name__ ==
'__main__':
240 rospy.loginfo(
"nao_walker running...")
242 rospy.loginfo(
"nao_walker stopping...")
245 rospy.loginfo(
"nao_walker stopped.")
def handleSetArmsEnabledSrv(self, req)
def startWalkPose(motionProxy)
def handleTargetPoseService(self, req)
def handleStopWalkSrv(self, req)
def handleCmdVel(self, data)
def gotoStartWalkPose(self)
def handleNeedsStartWalkPoseSrv(self, data)
def handleStepSrv(self, req)
def handleTargetPose(self, data, post=True)
def handleCmdVelService(self, req)
def handleStep(self, data)
def get_proxy(self, name, warn=True)
def handleReadFootGaitConfigSrv(self, data)