drive_teleop.py
Go to the documentation of this file.
1 #!/usr/bin/python
2 
3 import rospy
4 import subprocess
5 
6 from sensor_msgs.msg import Joy
7 from std_msgs.msg import Float32
8 from geometry_msgs.msg import Twist
9 from actionlib_msgs.msg import GoalID
10 
12  def __init__(self):
13  self.speed_setting = 2 # default to medium speed
14  self.servo_pan_speed = rospy.get_param('~servo_pan_speed', 5) # degrees of change per button press
15  self.servo_pan_max = rospy.get_param('~servo_pan_max', 160) # max angle of servo rotation
16  self.servo_pan_min = rospy.get_param('~servo_pan_min', 0) # min angle of servo rotation
17  self.servo_position = self.servo_pan_max/2 # center servo position
18 
19  self.cmd_vel_pub = rospy.Publisher("teleop/cmd_vel", Twist, queue_size=1)
20  self.goal_cancel_pub = rospy.Publisher("move_base/cancel", GoalID, queue_size=1)
21  self.servo_pub = rospy.Publisher("servo_pos", Float32, queue_size=1)
22  self.joy_sub = rospy.Subscriber("joy", Joy, self.on_joy)
23 
24  def on_joy(self, data):
25  # Set speed ratio using d-pad
26  if data.axes[7] == 1: # full speed (d-pad up)
27  self.speed_setting = 1
28  if data.axes[6] != 0: # medium speed (d-pad left or right)
29  self.speed_setting = 2
30  if data.axes[7] == -1: # low speed (d-pad down)
31  self.speed_setting = 3
32 
33  # Drive sticks
34  left_speed = -data.axes[1] / self.speed_setting # left stick
35  right_speed = -data.axes[4] / self.speed_setting # right stick
36 
37  # Convert skid steering speeds to twist speeds
38  linear_vel = (left_speed + right_speed) / 2.0 # (m/s)
39  angular_vel = (right_speed - left_speed) / 2.0 # (rad/s)
40 
41  # Publish Twist
42  twist = Twist()
43  twist.linear.x = linear_vel
44  twist.angular.z = angular_vel
45  self.cmd_vel_pub.publish(twist)
46 
47  # Servo servo panning control
48  if data.buttons[5]: # pan leftward (left bumper)
49  if self.servo_position > self.servo_pan_min:
50  self.servo_position -= self.servo_pan_speed
51  if data.buttons[4]: # pan rightward (right bumper)
52  if self.servo_position < self.servo_pan_max:
53  self.servo_position += self.servo_pan_speed
54  if data.buttons[3]: # center servo position (Y button)
55  self.servo_position = self.servo_pan_max/2
56  self.servo_pub.publish(self.servo_position)
57 
58  # Cancel move base goal
59  if data.buttons[2]: # X button
60  rospy.loginfo('Cancelling move_base goal')
61  cancel_msg = GoalID()
62  self.goal_cancel_pub.publish(cancel_msg)
63 
64 def main():
65  rospy.init_node("drive_teleop")
66  controller = DriveTeleop()
67  rospy.spin()


simple_drive
Author(s): Daniel Snider , Matthew Mirvish
autogenerated on Mon Jun 10 2019 15:05:01