rosruby 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. data/bin/rubyroscore +5 -0
  2. data/lib/ros.rb +25 -0
  3. data/lib/ros/duration.rb +63 -0
  4. data/lib/ros/graph_manager.rb +408 -0
  5. data/lib/ros/log.rb +72 -0
  6. data/lib/ros/master.rb +408 -0
  7. data/lib/ros/master_proxy.rb +256 -0
  8. data/lib/ros/message.rb +65 -0
  9. data/lib/ros/name.rb +88 -0
  10. data/lib/ros/node.rb +442 -0
  11. data/lib/ros/package.rb +144 -0
  12. data/lib/ros/parameter_manager.rb +127 -0
  13. data/lib/ros/parameter_subscriber.rb +47 -0
  14. data/lib/ros/publisher.rb +96 -0
  15. data/lib/ros/rate.rb +41 -0
  16. data/lib/ros/ros.rb +10 -0
  17. data/lib/ros/roscore.rb +29 -0
  18. data/lib/ros/service.rb +37 -0
  19. data/lib/ros/service_client.rb +83 -0
  20. data/lib/ros/service_server.rb +92 -0
  21. data/lib/ros/slave_proxy.rb +153 -0
  22. data/lib/ros/subscriber.rb +119 -0
  23. data/lib/ros/tcpros/client.rb +108 -0
  24. data/lib/ros/tcpros/header.rb +89 -0
  25. data/lib/ros/tcpros/message.rb +74 -0
  26. data/lib/ros/tcpros/server.rb +137 -0
  27. data/lib/ros/tcpros/service_client.rb +104 -0
  28. data/lib/ros/tcpros/service_server.rb +132 -0
  29. data/lib/ros/time.rb +109 -0
  30. data/lib/ros/topic.rb +47 -0
  31. data/lib/ros/xmlrpcserver.rb +40 -0
  32. data/samples/add_two_ints_client.rb +25 -0
  33. data/samples/add_two_ints_server.rb +20 -0
  34. data/samples/gui.rb +126 -0
  35. data/samples/sample_log.rb +16 -0
  36. data/samples/sample_param.rb +20 -0
  37. data/samples/sample_publisher.rb +20 -0
  38. data/samples/sample_subscriber.rb +19 -0
  39. data/scripts/genmsg_ruby.py +1135 -0
  40. data/scripts/genmsg_ruby.pyc +0 -0
  41. data/scripts/gensrv_ruby.py +105 -0
  42. data/scripts/gensrv_ruby.pyc +0 -0
  43. data/scripts/rosruby_genmsg.py +67 -0
  44. data/scripts/run-test.rb +21 -0
  45. data/test/test_header.rb +36 -0
  46. data/test/test_log.rb +45 -0
  47. data/test/test_master_proxy.rb +73 -0
  48. data/test/test_message.rb +13 -0
  49. data/test/test_node.rb +166 -0
  50. data/test/test_package.rb +10 -0
  51. data/test/test_param.rb +27 -0
  52. data/test/test_pubsub.rb +154 -0
  53. data/test/test_rate.rb +16 -0
  54. data/test/test_service.rb +34 -0
  55. data/test/test_slave_proxy.rb +49 -0
  56. data/test/test_time.rb +39 -0
  57. metadata +170 -0
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'test/unit'
4
+ require 'ros/package'
5
+
6
+ class TestPackage < Test::Unit::TestCase
7
+ def test_pack
8
+ ROS::Package.read_cache_or_find_all
9
+ end
10
+ end
@@ -0,0 +1,27 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'test/unit'
4
+ require 'ros'
5
+
6
+ class TestParam_Normal < Test::Unit::TestCase
7
+ def test_param_manager
8
+ remap = {'aa'=>1, 'bb'=>'xx'}
9
+ param = ROS::ParameterManager.new(ENV['ROS_MASTER_URI'], '/test_param', remap)
10
+ assert_equal(1, param.get_param('aa'))
11
+ assert(!param.get_param('cc'))
12
+
13
+ assert(param.set_param('cc', [1,2]))
14
+ assert_equal([1,2], param.get_param('cc'))
15
+ assert(param.delete_param('cc'))
16
+ assert(!param.get_param('cc'))
17
+
18
+ assert(param.set_param('aa', -1))
19
+ assert_equal('/aa', param.search_param('aa'))
20
+ assert_raise(RuntimeError) {param.search_param('xx')}
21
+ assert(!param.has_param('a'))
22
+ assert(param.has_param('aa'))
23
+ assert(param.get_param_names)
24
+
25
+ assert(param.delete_param('aa'))
26
+ end
27
+ end
@@ -0,0 +1,154 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'ros'
4
+ require 'test/unit'
5
+ require 'std_msgs/String'
6
+
7
+ class TestPubSubNormal < Test::Unit::TestCase
8
+ TEST_STRING1 = 'TEST1'
9
+ TEST_STRING2 = 'TEST2'
10
+
11
+ def test_double_pubsub
12
+ node1 = ROS::Node.new('/test_pubsub1')
13
+ node2 = ROS::Node.new('/test_pubsub2')
14
+ pub1 = node1.advertise('/chatter', Std_msgs::String)
15
+
16
+ pub2 = node2.advertise('/chatter', Std_msgs::String)
17
+
18
+ pub_msg1 = Std_msgs::String.new
19
+ pub_msg1.data = TEST_STRING1
20
+
21
+ pub_msg2 = Std_msgs::String.new
22
+ pub_msg2.data = TEST_STRING2
23
+
24
+ message_has_come1 = [nil, nil]
25
+ message_has_come2 = [nil, nil]
26
+
27
+ sub1 = node1.subscribe('/chatter', Std_msgs::String) do |msg|
28
+ if msg.data == TEST_STRING1
29
+ message_has_come1[0] = true
30
+ end
31
+ if msg.data == TEST_STRING2
32
+ message_has_come1[1] = true
33
+ end
34
+ end
35
+
36
+ sub2 = node2.subscribe('/chatter', Std_msgs::String) do |msg|
37
+ if msg.data == TEST_STRING1
38
+ message_has_come2[0] = true
39
+ end
40
+ if msg.data == TEST_STRING2
41
+ message_has_come2[1] = true
42
+ end
43
+ end
44
+ sleep(1) # wait for registration and update
45
+
46
+ pub1.publish(pub_msg1)
47
+ pub2.publish(pub_msg2)
48
+
49
+ sleep(1)
50
+ node1.spin_once
51
+ node2.spin_once
52
+
53
+ assert(message_has_come1[0])
54
+ assert(message_has_come1[1])
55
+ assert(message_has_come2[0])
56
+ assert(message_has_come2[1])
57
+
58
+ topics = node1.get_published_topics
59
+ assert_equal(2, topics.length)
60
+ assert(topics.include?('/chatter'))
61
+ assert(topics.include?('/rosout'))
62
+
63
+ node1.shutdown
64
+ node2.shutdown
65
+ end
66
+
67
+ def test_single_pubsub
68
+ node = ROS::Node.new('/test3')
69
+ pub1 = node.advertise('/chatter', Std_msgs::String)
70
+
71
+ pub_msg1 = Std_msgs::String.new
72
+ pub_msg1.data = TEST_STRING1
73
+
74
+ message_has_come1 = nil
75
+
76
+ sub1 = node.subscribe('/chatter', Std_msgs::String) do |msg|
77
+ if msg.data == TEST_STRING1
78
+ message_has_come1 = true
79
+ end
80
+ end
81
+
82
+ sleep(1) # wait for registration and update
83
+
84
+ pub1.publish(pub_msg1)
85
+ sleep(1)
86
+ node.spin_once
87
+ assert(message_has_come1)
88
+
89
+ assert_equal([["/chatter_out_0", 13, 1, 1]], pub1.get_connection_data)
90
+ assert_equal([["/chatter_in_0", 9, 1]], sub1.get_connection_data)
91
+
92
+ pub_info = pub1.get_connection_info[0]
93
+ assert_equal("/chatter_out_0", pub_info[0])
94
+ # incomplete
95
+ # assert(/^http:.*:[0-9]+/=~, pub_info[1])
96
+ assert_equal("o", pub_info[2])
97
+ assert_equal("TCPROS", pub_info[3])
98
+ assert_equal("/chatter", pub_info[4])
99
+
100
+ sub_info = sub1.get_connection_info[0]
101
+ assert_equal("/chatter_in_0", sub_info[0])
102
+ assert(/^http:.*[0-9]+/=~ sub_info[1])
103
+ assert_equal("i", sub_info[2])
104
+ assert_equal("TCPROS", sub_info[3])
105
+ assert_equal("/chatter", sub_info[4])
106
+
107
+ node.shutdown
108
+ end
109
+
110
+ def test_shutdown_by_publisher_or_subscriber_directly
111
+ node = ROS::Node.new('/test4')
112
+ pub = node.advertise('/hoge', Std_msgs::String)
113
+ proxy = ROS::MasterProxy.new('/test_node', ENV['ROS_MASTER_URI'], 'http://dummy:11111')
114
+ assert(proxy.get_published_topics.include?(["/hoge", "std_msgs/String"]))
115
+ pub.shutdown
116
+ assert(!proxy.get_published_topics.include?(["/hoge", "std_msgs/String"]))
117
+
118
+ sub1 = node.subscribe('/hoge', Std_msgs::String)
119
+ pub, sub, ser = proxy.get_system_state
120
+ assert(sub.include?(["/hoge", ["/test4"]]))
121
+ sub1.shutdown
122
+ pub, sub, ser = proxy.get_system_state
123
+ assert(!sub.include?(["/hoge", ["/test4"]]))
124
+
125
+ node.shutdown
126
+ end
127
+
128
+
129
+ def test_latched
130
+ node = ROS::Node.new('/test5')
131
+ pub1 = node.advertise('/chatter', Std_msgs::String, :latched=>true)
132
+
133
+ pub_msg1 = Std_msgs::String.new
134
+ pub_msg1.data = TEST_STRING1
135
+
136
+ sleep(1) # wait for registration and update
137
+
138
+ pub1.publish(pub_msg1)
139
+
140
+ sleep(1) # wait for registration and update
141
+ message_has_come1 = nil
142
+
143
+ sub1 = node.subscribe('/chatter', Std_msgs::String) do |msg|
144
+ if msg.data == TEST_STRING1
145
+ message_has_come1 = true
146
+ end
147
+ end
148
+
149
+ sleep(1)
150
+ node.spin_once
151
+ assert(message_has_come1)
152
+ node.shutdown
153
+ end
154
+ end
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'ros/rate'
4
+ require 'test/unit'
5
+
6
+ class TestRate_rate < Test::Unit::TestCase
7
+ def test_sleep
8
+ r = ROS::Rate.new(10)
9
+ (1..10).each do |i|
10
+ start = ::Time.now
11
+ r.sleep
12
+ stop = ::Time.now
13
+ assert_in_delta(0.1, (stop - start), 0.05, "rating #{i}")
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,34 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'ros'
4
+ require 'test/unit'
5
+ require 'roscpp_tutorials/TwoInts'
6
+
7
+ class TestService < Test::Unit::TestCase
8
+ def test_service
9
+ node = ROS::Node.new('/test_service1')
10
+ server = node.advertise_service('/add_two_ints', Roscpp_tutorials::TwoInts) do |req, res|
11
+ res.sum = req.a + req.b
12
+ node.loginfo("a=#{req.a}, b=#{req.b}")
13
+ node.loginfo(" sum = #{res.sum}")
14
+ if req.a == -1
15
+ false
16
+ else
17
+ true
18
+ end
19
+ end
20
+ assert(node.wait_for_service('/add_two_ints', 1))
21
+ service = node.service('/add_two_ints', Roscpp_tutorials::TwoInts)
22
+ req = Roscpp_tutorials::TwoInts.request_class.new
23
+ res = Roscpp_tutorials::TwoInts.response_class.new
24
+ req.a = 15
25
+ req.b = -50
26
+ assert(service.call(req, res))
27
+ assert_equal(-35, res.sum)
28
+ # fails
29
+ req.a = -1
30
+ assert(!service.call(req, res))
31
+ assert(!node.wait_for_service('/xxxxxxx', 0.1))
32
+ node.shutdown
33
+ end
34
+ end
@@ -0,0 +1,49 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'ros'
4
+ require 'test/unit'
5
+ require 'std_msgs/String'
6
+
7
+ class TestSlaveProxy < Test::Unit::TestCase
8
+ TEST_STRING1 = 'TEST1'
9
+ TEST_STRING2 = 'TEST2'
10
+
11
+ def test_slave1
12
+ node = ROS::Node.new('/test_slave1')
13
+ pub1 = node.advertise('/chatter', Std_msgs::String)
14
+
15
+ pub_msg1 = Std_msgs::String.new
16
+ pub_msg1.data = TEST_STRING1
17
+
18
+ message_has_come1 = nil
19
+
20
+ sub1 = node.subscribe('/chatter', Std_msgs::String) do |msg|
21
+ if msg.data == TEST_STRING1
22
+ message_has_come1 = true
23
+ end
24
+ end
25
+
26
+ sleep(1) # wait for registration and update
27
+
28
+ pub1.publish(pub_msg1)
29
+ sleep(1)
30
+ node.spin_once
31
+ sub1.get_connection_info
32
+ slave_uri = sub1.get_connection_info[0][1]
33
+ slave = ROS::SlaveProxy.new('/slave1', slave_uri)
34
+
35
+ assert(slave.get_bus_stats)
36
+ assert(slave.get_bus_info)
37
+
38
+ assert(/^http:.+:[0-9]+/ =~ slave.get_master_uri)
39
+ assert(/[0-9]+/ =~ slave.get_pid.to_s)
40
+ assert_equal([["/chatter", "std_msgs/String"]], slave.get_subscriptions)
41
+ assert_equal(2, slave.get_publications.size)
42
+ assert(slave.param_update('/hoge', 1))
43
+ assert(slave.publisher_update('/hoge', ['http://aaa:111']))
44
+ assert_equal(3, slave.request_topic('/chatter', [["TCPROS"]]).size)
45
+
46
+ assert(slave.shutdown('test kill'))
47
+ node.shutdown
48
+ end
49
+ end
@@ -0,0 +1,39 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'test/unit'
4
+ require 'ros/time'
5
+ require 'ros/duration'
6
+
7
+ class TestTime < Test::Unit::TestCase
8
+ def test_time
9
+ t1 = ROS::Time.new
10
+ assert_equal(0, t1.secs)
11
+ assert_equal(0, t1.nsecs)
12
+
13
+ t2 = ROS::Time.now
14
+ d0 = ROS::Duration.new(1.0)
15
+ d0.sleep
16
+ t3 = ROS::Time.now
17
+ assert_in_delta(1.0, (t3 - t2).to_sec, 0.1)
18
+ assert(t3 > t2)
19
+
20
+ d1 = ROS::Duration.new(1.0)
21
+ assert_equal(1, d1.secs)
22
+ assert_equal(0, d1.nsecs)
23
+
24
+ d2 = ROS::Duration.new(1.1)
25
+ assert_equal(1, d2.secs)
26
+ assert_equal(100000000, d2.nsecs)
27
+
28
+ d3 = d1 + d2
29
+ assert_equal(2, d3.secs)
30
+ assert_equal(100000000, d3.nsecs)
31
+
32
+ d4 = d2 - d1
33
+ assert_equal(0, d4.secs)
34
+ assert_equal(100000000, d4.nsecs)
35
+ assert(d2 > d1)
36
+ assert(d1 < d2)
37
+
38
+ end
39
+ end
metadata ADDED
@@ -0,0 +1,170 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rosruby
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Takashi Ogura
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-06-02 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rake
16
+ requirement: &72472620 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: *72472620
25
+ description: ! "ROS Ruby Client: rosruby\n=======\n[ROS](http://ros.org) is Robot
26
+ Operating System developed by [Willow Garage](http://www.willowgarage.com/) and
27
+ open source communities.\n\nThis project supports ruby ROS client. You can program
28
+ robots by ruby, very easily.\n\n**Homepage**: http://otl.github.com/rosruby\n**Git**:
29
+ \ http://github.com/OTL/rosruby\n**Author**: Takashi Ogura\n**Copyright**:
30
+ \ 2012\n**License**: new BSD License\n**Latest Version**: 0.2.0\n\nRequirements\n----------\n-
31
+ ruby (1.8.x/1.9.x)\n- ROS (electric/fuerte)\n - ROS requires python2.7 or more
32
+ libraries\n\n\nLet's start\n---------------\nInstall ROS and ruby first. ROS document
33
+ is [http://ros.org/wiki/ROS/Installation](http://ros.org/wiki/ROS/Installation)
34
+ .\n\nYou can install ruby by apt.\n\n```bash\n$ sudo apt-get install ruby\n```\n\nDownload
35
+ rosruby into your ROS_PACKAGE_PATH.\n\n````bash\n$ git clone git://github.com/OTL/rosruby.git\n```\n\nplease
36
+ add RUBYLIB environment variable, like below (if you are using bash).\n\n```bash\n$
37
+ echo \"export RUBYLIB=`rospack find rosruby`/lib\" >> ~/.bashrc\n$ source ~/.bashrc\n```\n\nTo
38
+ use with precompiled electric release\n-----------------------\nIf you are using
39
+ precompiled ROS distro, use the msg/srv generation script\n(rosruby_genmsg.py)\nIf
40
+ you are using ROS from source, it requires just recompile the msg/srv\npackages
41
+ by rosmake rosruby.\n\n```bash\n$ rosrun rosruby rosruby_genmsg.py\n```\n\nThis
42
+ converts msg/srv to .rb which is needed by sample programs.\nIf you want to make
43
+ other packages, add package names for args.\n\nFor example,\n\n```bash\n$ rosrun
44
+ rosruby rosruby_genmsg.py geometry_msgs nav_msgs\n```\n\n\nSample Source\n--------------\n##
45
+ Subscriber\n\n```ruby\n#!/usr/bin/env ruby\n\nrequire 'ros'\nrequire 'std_msgs/String'\n\nnode
46
+ = ROS::Node.new('/rosruby/sample_subscriber')\nnode.subscribe('/chatter', Std_msgs::String)
47
+ do |msg|\n puts \"message come! = \\'#{msg.data}\\'\"\nend\n\nwhile node.ok?\n
48
+ \ node.spin_once\n sleep(1)\nend\n\n```\n\n## Publisher\n\n```ruby\n#!/usr/bin/env
49
+ ruby\n\nrequire 'ros'\nrequire 'std_msgs/String'\n\nnode = ROS::Node.new('/rosruby/sample_publisher')\npublisher
50
+ = node.advertise('/chatter', Std_msgs::String)\n\nmsg = Std_msgs::String.new\n\ni
51
+ = 0\nwhile node.ok?\n msg.data = \"Hello, rosruby!: #{i}\"\n publisher.publish(msg)\n
52
+ \ sleep(1.0)\n i += 1\nend\n```\n\nNote\n----------------\nRuby requires 'Start
53
+ with Capital letter' for class or module names.\nSo please use **S**td_msgs::String
54
+ class instead of **s**td_msgs::String.\n\nTry Publish and Subscribe\n----------------------\nYou
55
+ needs three terminal as it is often for ROS users.\nThen you run roscore if is not
56
+ running.\n\n```bash\n$ roscore\n```\n\nrun publisher sample\n\n```bash\n$ rosrun
57
+ rosruby sample_publisher.rb\n```\n\nrun subscription sample\n\n```bash\n$ rosrun
58
+ rosruby sample_subscriber.rb\n```\n\nyou can check publication by using rostopic.\n\n```bash\n$
59
+ rostopic list\n$ rostopic echo /chatter\n```\n\n\nTry Service?\n----------------------\n\n```bash\n$
60
+ rosrun rosruby add_two_ints_server.rb\n```\n\nrun client with args ('a' and 'b'
61
+ for roscpp_tutorials/TwoInts)\n\n```bash\n$ rosrun rosruby add_two_ints_client.rb
62
+ 10 20\n```\n\nand more...\n----------------------\nYou need more tools for testing,
63
+ generating documentations.\n\n```bash\n$ sudo apt-get install rake gem\n$ sudo gem
64
+ install yard redcarpet simplecov\n```\n\ndo all tests\n-------------------------\nrun
65
+ roscore if is not running.\n\n```bash\n$ roscore\n```\n\nand run the unit tests.\n\n```bash\n$
66
+ roscd rosruby\n$ rake test\n```\n\n\ndocuments\n--------------------------\nyou
67
+ can generate API documents using yard.\nDocument generation needs yard and redcarpet.\nYou
68
+ can install these by gem command like this.\n\n```bash\n$ gem install yard redcarpet\n```\n\nThen
69
+ try to generate documentds.\n\n```bash\n$ rake yard\n```\n\nYou can access to the
70
+ generated documents from [here](http://otl.github.com/rosruby/doc/).\n"
71
+ email: t.ogura@gmail.com
72
+ executables:
73
+ - rubyroscore
74
+ extensions: []
75
+ extra_rdoc_files: []
76
+ files:
77
+ - lib/ros.rb
78
+ - lib/ros/master.rb
79
+ - lib/ros/ros.rb
80
+ - lib/ros/duration.rb
81
+ - lib/ros/parameter_subscriber.rb
82
+ - lib/ros/subscriber.rb
83
+ - lib/ros/service.rb
84
+ - lib/ros/parameter_manager.rb
85
+ - lib/ros/rate.rb
86
+ - lib/ros/master_proxy.rb
87
+ - lib/ros/log.rb
88
+ - lib/ros/slave_proxy.rb
89
+ - lib/ros/publisher.rb
90
+ - lib/ros/graph_manager.rb
91
+ - lib/ros/topic.rb
92
+ - lib/ros/package.rb
93
+ - lib/ros/service_server.rb
94
+ - lib/ros/node.rb
95
+ - lib/ros/name.rb
96
+ - lib/ros/xmlrpcserver.rb
97
+ - lib/ros/message.rb
98
+ - lib/ros/time.rb
99
+ - lib/ros/roscore.rb
100
+ - lib/ros/service_client.rb
101
+ - lib/ros/tcpros/client.rb
102
+ - lib/ros/tcpros/header.rb
103
+ - lib/ros/tcpros/service_server.rb
104
+ - lib/ros/tcpros/server.rb
105
+ - lib/ros/tcpros/message.rb
106
+ - lib/ros/tcpros/service_client.rb
107
+ - samples/gui.rb
108
+ - samples/sample_publisher.rb
109
+ - samples/sample_log.rb
110
+ - samples/sample_subscriber.rb
111
+ - samples/add_two_ints_client.rb
112
+ - samples/sample_param.rb
113
+ - samples/add_two_ints_server.rb
114
+ - scripts/genmsg_ruby.pyc
115
+ - scripts/gensrv_ruby.pyc
116
+ - scripts/run-test.rb
117
+ - scripts/genmsg_ruby.py
118
+ - scripts/rosruby_genmsg.py
119
+ - scripts/gensrv_ruby.py
120
+ - test/test_message.rb
121
+ - test/test_pubsub.rb
122
+ - test/test_master_proxy.rb
123
+ - test/test_time.rb
124
+ - test/test_slave_proxy.rb
125
+ - test/test_log.rb
126
+ - test/test_package.rb
127
+ - test/test_rate.rb
128
+ - test/test_service.rb
129
+ - test/test_node.rb
130
+ - test/test_param.rb
131
+ - test/test_header.rb
132
+ - bin/rubyroscore
133
+ homepage: http://github.com/OTL/rosruby
134
+ licenses: []
135
+ post_install_message:
136
+ rdoc_options: []
137
+ require_paths:
138
+ - lib
139
+ required_ruby_version: !ruby/object:Gem::Requirement
140
+ none: false
141
+ requirements:
142
+ - - ! '>='
143
+ - !ruby/object:Gem::Version
144
+ version: '0'
145
+ required_rubygems_version: !ruby/object:Gem::Requirement
146
+ none: false
147
+ requirements:
148
+ - - ! '>='
149
+ - !ruby/object:Gem::Version
150
+ version: '0'
151
+ requirements:
152
+ - none
153
+ rubyforge_project:
154
+ rubygems_version: 1.8.11
155
+ signing_key:
156
+ specification_version: 3
157
+ summary: ROS ruby client
158
+ test_files:
159
+ - test/test_message.rb
160
+ - test/test_pubsub.rb
161
+ - test/test_master_proxy.rb
162
+ - test/test_time.rb
163
+ - test/test_slave_proxy.rb
164
+ - test/test_log.rb
165
+ - test/test_package.rb
166
+ - test/test_rate.rb
167
+ - test/test_service.rb
168
+ - test/test_node.rb
169
+ - test/test_param.rb
170
+ - test/test_header.rb