nanopad_joy.py
Go to the documentation of this file.
1 #!/usr/bin/env python
2 
3 # joystick input driver for nanoPad2 input device
4 # http://www.amazon.co.jp/KORG-USB-MIDI-%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%A9%E3%83%BC-NANOPAD2-%E3%83%96%E3%83%A9%E3%83%83%E3%82%AF/dp/B004M8YPKM
5 
6 import roslib
7 import rospy
8 
9 import pygame
10 import pygame.midi
11 
12 import sys
13 
14 from sensor_msgs.msg import *
15 
16 
17 BUTTON_INDICES = [37, 39, 41, 43, 45, 47, 49, 51,
18  36, 38, 40, 42, 44, 46, 48, 50]
19 AXIS_INDICES = []
20 
21 
22 def main():
23  rospy.init_node('nanopad_joy')
24  pub = rospy.Publisher('/nanopad/joy', Joy, latch=True)
25 
26  pygame.midi.init()
27  devices = pygame.midi.get_count()
28  if devices < 1:
29  rospy.logerr("No MIDI devices detected")
30  exit(-1)
31  rospy.loginfo("Found %d MIDI devices" % devices)
32 
33  if len(sys.argv) > 1:
34  input_dev = int(sys.argv[1])
35  else:
36  rospy.loginfo("no input device supplied. will try to use default device.")
37  input_dev = pygame.midi.get_default_input_id()
38  if input_dev == -1:
39  rospy.logerr("No default MIDI input device")
40  exit(-1)
41  rospy.loginfo("Using input device %d" % input_dev)
42 
43  controller = pygame.midi.Input(input_dev)
44  rospy.loginfo("Opened it")
45 
46  m = Joy()
47  m.axes = [ 0 ] * len(AXIS_INDICES)
48  m.buttons = [ 0 ] * len(BUTTON_INDICES)
49 
50  p = False
51 
52  while not rospy.is_shutdown():
53  m.header.stamp = rospy.Time.now()
54 
55  # count the number of events that are coalesced together
56  c = 0
57  while controller.poll():
58  c += 1
59  data = controller.read(1)
60  rospy.loginfo("%s" % data)
61  # loop through events received
62  for event in data:
63  control = event[0]
64  timestamp = event[1]
65  button_index = control[1]
66 
67  for bi, i in zip(BUTTON_INDICES, range(len(BUTTON_INDICES))):
68  if button_index == bi:
69  if control[0] == 144:
70  m.buttons[i] = 1
71  elif control[0] == 128:
72  m.buttons[i] = 0
73  p = True
74  for bi, i in zip(AXIS_INDICES, range(len(AXIS_INDICES))):
75  if button_index == bi:
76  m.axes[i] = control[2] / 127.0
77  p = True
78  if p:
79  pub.publish(m)
80  p = False
81 
82  rospy.sleep(0.01) # 100hz max
83 
84 
85 
86 if __name__ == '__main__':
87  try:
88  main()
89  except rospy.ROSInterruptException:
90  pass
def main()
Definition: nanopad_joy.py:22


jsk_teleop_joy
Author(s): Ryohei Ueda
autogenerated on Fri May 14 2021 02:52:11