1 changed files with 113 additions and 0 deletions
@ -0,0 +1,113 @@ |
|||||
|
#!/usr/bin/env python |
||||
|
# -*- coding: utf-8 -*- |
||||
|
import roslib; roslib.load_manifest('teleop_twist_keyboard') |
||||
|
import rospy |
||||
|
|
||||
|
from geometry_msgs.msg import Twist |
||||
|
|
||||
|
import sys, select, termios, tty |
||||
|
|
||||
|
msg = """ |
||||
|
Reading from the keyboard and Publishing to Twist! |
||||
|
--------------------------- |
||||
|
Moving around: |
||||
|
|⇑ y|↖ u|↑ i|↗ o| |
||||
|
|⇐ h|← j| k|→ l|⇒ m| |
||||
|
|⇓ n|↙ ,|↓ ;|↘ :| |
||||
|
|
||||
|
a/w : increase/decrease max speeds by 10% |
||||
|
z/x : increase/decrease only linear speed by 10% |
||||
|
e/c : increase/decrease only angular speed by 10% |
||||
|
anything else : stop |
||||
|
|
||||
|
CTRL-C to quit |
||||
|
""" |
||||
|
|
||||
|
moveBindings = { |
||||
|
# x th y z |
||||
|
'i':(1,0,0,0), |
||||
|
'o':(1,-1,0,0), |
||||
|
'j':(0,1,0,0), |
||||
|
'l':(0,-1,0,0), |
||||
|
'u':(1,1,0,0), |
||||
|
';':(-1,0,0,0), |
||||
|
':':(-1,1,0,0), |
||||
|
',':(-1,-1,0,0), |
||||
|
'h':(0,0,-1,0), |
||||
|
'm':(0,0,1,0), |
||||
|
'y':(0,0,0,1), |
||||
|
'n':(0,0,0,-1), |
||||
|
} |
||||
|
|
||||
|
speedBindings={ |
||||
|
'a':(1.1,1.1), |
||||
|
'w':(.9,.9), |
||||
|
'z':(1.1,1), |
||||
|
'x':(.9,1), |
||||
|
'e':(1,1.1), |
||||
|
'c':(1,.9), |
||||
|
} |
||||
|
|
||||
|
def getKey(): |
||||
|
tty.setraw(sys.stdin.fileno()) |
||||
|
select.select([sys.stdin], [], [], 0) |
||||
|
key = sys.stdin.read(1) |
||||
|
termios.tcsetattr(sys.stdin, termios.TCSADRAIN, settings) |
||||
|
return key |
||||
|
|
||||
|
speed = .5 |
||||
|
turn = 1 |
||||
|
|
||||
|
def vels(speed,turn): |
||||
|
return "currently:\tspeed %s\tturn %s " % (speed,turn) |
||||
|
|
||||
|
if __name__=="__main__": |
||||
|
settings = termios.tcgetattr(sys.stdin) |
||||
|
pub = rospy.Publisher('cmd_vel', Twist) |
||||
|
rospy.init_node('teleop_twist_keyboard_azerty') |
||||
|
x = 0 |
||||
|
th = 0 |
||||
|
y = 0 |
||||
|
z = 0 |
||||
|
status = 0 |
||||
|
try: |
||||
|
print msg |
||||
|
print vels(speed,turn) |
||||
|
while(1): |
||||
|
key = getKey() |
||||
|
if key in moveBindings.keys(): |
||||
|
x = moveBindings[key][0] |
||||
|
th = moveBindings[key][1] |
||||
|
y = moveBindings[key][2] |
||||
|
z = moveBindings[key][3] |
||||
|
elif key in speedBindings.keys(): |
||||
|
speed = speed * speedBindings[key][0] |
||||
|
turn = turn * speedBindings[key][1] |
||||
|
|
||||
|
print vels(speed,turn) |
||||
|
if (status == 14): |
||||
|
print msg |
||||
|
status = (status + 1) % 15 |
||||
|
else: |
||||
|
x = 0 |
||||
|
th = 0 |
||||
|
y = 0 |
||||
|
z = 0 |
||||
|
if (key == '\x03'): |
||||
|
break |
||||
|
twist = Twist() |
||||
|
twist.linear.x = x*speed |
||||
|
twist.linear.y = y*speed |
||||
|
twist.linear.z = z*speed |
||||
|
twist.angular.x = 0; twist.angular.y = 0; |
||||
|
twist.angular.z = th*turn |
||||
|
pub.publish(twist) |
||||
|
except: |
||||
|
print e |
||||
|
finally: |
||||
|
twist = Twist() |
||||
|
twist.linear.x = 0; twist.linear.y = 0; twist.linear.z = 0 |
||||
|
twist.angular.x = 0; twist.angular.y = 0; twist.angular.z = 0 |
||||
|
pub.publish(twist) |
||||
|
termios.tcsetattr(sys.stdin, termios.TCSADRAIN, settings) |
||||
|
|
||||
Loading…
Reference in new issue