waist_joint_trajectory_example.py
Go to the documentation of this file.
1 #!/usr/bin/env python
2 # coding: utf-8
3 
4 import rospy
5 import actionlib
6 from control_msgs.msg import (
7  FollowJointTrajectoryAction,
8  FollowJointTrajectoryGoal
9 )
10 from trajectory_msgs.msg import JointTrajectoryPoint
11 import sys
12 import math
13 
14 class WaistYaw(object):
15  # 初期化処理
16  def __init__(self):
17  self.__client = actionlib.SimpleActionClient("/sciurus17/controller3/waist_yaw_controller/follow_joint_trajectory",
18  FollowJointTrajectoryAction)
19  self.__client.wait_for_server(rospy.Duration(5.0))
20 
21  if not self.__client.wait_for_server(rospy.Duration(5.0)):
22  rospy.logerr("Action Server Not Found")
23  rospy.signal_shutdown("Action Server not found")
24  sys.exit(1)
25  self.present_angle = 0.0
26 
27  # 現在角度を設定
28  def set_present_angle(self, angle):
29  self.present_angle = angle
30 
31  # 目標角度の設定と実行
32  def set_angle(self, yaw_angle, goal_sec):
33  goal = FollowJointTrajectoryGoal()
34  goal.trajectory.joint_names = ["waist_yaw_joint"]
35 
36  # 現在の角度から開始(遷移時間は現在時刻)
37  yawpoint = JointTrajectoryPoint()
38  yawpoint.positions.append(self.present_angle)
39  yawpoint.time_from_start = rospy.Duration(nsecs=1)
40  goal.trajectory.points.append(yawpoint)
41 
42  # 途中に角度と時刻をappendすると細かい速度制御が可能
43  # 参考=> http://wiki.ros.org/joint_trajectory_controller/UnderstandingTrajectoryReplacement
44 
45  # ゴール角度を設定(指定されたゴール時間で到達)
46  yawpoint = JointTrajectoryPoint()
47  yawpoint.positions.append(yaw_angle)
48  yawpoint.time_from_start = rospy.Duration(goal_sec)
49  goal.trajectory.points.append(yawpoint)
50  self.present_angle = yaw_angle
51 
52  # 軌道計画を実行
53  self.__client.send_goal(goal)
54  self.__client.wait_for_result(rospy.Duration(goal_sec))
55  return self.__client.get_result()
56 
57 if __name__ == '__main__':
58  rospy.init_node("waist_test")
59 
60  wy = WaistYaw()
61  wy.set_present_angle(math.radians(0.0))
62 
63  # まず正面を向く
64  wy.set_angle(math.radians(0.0), 0.1)
65  rospy.sleep(1.0)
66  # 左45度,1秒
67  wy.set_angle(math.radians(45.0), 1.0)
68  rospy.sleep(1.0)
69  # 正面:1秒
70  wy.set_angle(math.radians(0.0), 1.0)
71  rospy.sleep(1.0)
72  # 右45度,1秒
73  wy.set_angle(math.radians(-45.0), 1.0)
74  rospy.sleep(1.0)
75  # 正面,1秒
76  wy.set_angle(math.radians(0.0), 1.0)


sciurus17_examples
Author(s): Daisuke Sato , Hiroyuki Nomura
autogenerated on Sun Oct 2 2022 02:21:39