rosruby 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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