rosruby 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/bin/rubyroscore +5 -0
- data/lib/ros.rb +25 -0
- data/lib/ros/duration.rb +63 -0
- data/lib/ros/graph_manager.rb +408 -0
- data/lib/ros/log.rb +72 -0
- data/lib/ros/master.rb +408 -0
- data/lib/ros/master_proxy.rb +256 -0
- data/lib/ros/message.rb +65 -0
- data/lib/ros/name.rb +88 -0
- data/lib/ros/node.rb +442 -0
- data/lib/ros/package.rb +144 -0
- data/lib/ros/parameter_manager.rb +127 -0
- data/lib/ros/parameter_subscriber.rb +47 -0
- data/lib/ros/publisher.rb +96 -0
- data/lib/ros/rate.rb +41 -0
- data/lib/ros/ros.rb +10 -0
- data/lib/ros/roscore.rb +29 -0
- data/lib/ros/service.rb +37 -0
- data/lib/ros/service_client.rb +83 -0
- data/lib/ros/service_server.rb +92 -0
- data/lib/ros/slave_proxy.rb +153 -0
- data/lib/ros/subscriber.rb +119 -0
- data/lib/ros/tcpros/client.rb +108 -0
- data/lib/ros/tcpros/header.rb +89 -0
- data/lib/ros/tcpros/message.rb +74 -0
- data/lib/ros/tcpros/server.rb +137 -0
- data/lib/ros/tcpros/service_client.rb +104 -0
- data/lib/ros/tcpros/service_server.rb +132 -0
- data/lib/ros/time.rb +109 -0
- data/lib/ros/topic.rb +47 -0
- data/lib/ros/xmlrpcserver.rb +40 -0
- data/samples/add_two_ints_client.rb +25 -0
- data/samples/add_two_ints_server.rb +20 -0
- data/samples/gui.rb +126 -0
- data/samples/sample_log.rb +16 -0
- data/samples/sample_param.rb +20 -0
- data/samples/sample_publisher.rb +20 -0
- data/samples/sample_subscriber.rb +19 -0
- data/scripts/genmsg_ruby.py +1135 -0
- data/scripts/genmsg_ruby.pyc +0 -0
- data/scripts/gensrv_ruby.py +105 -0
- data/scripts/gensrv_ruby.pyc +0 -0
- data/scripts/rosruby_genmsg.py +67 -0
- data/scripts/run-test.rb +21 -0
- data/test/test_header.rb +36 -0
- data/test/test_log.rb +45 -0
- data/test/test_master_proxy.rb +73 -0
- data/test/test_message.rb +13 -0
- data/test/test_node.rb +166 -0
- data/test/test_package.rb +10 -0
- data/test/test_param.rb +27 -0
- data/test/test_pubsub.rb +154 -0
- data/test/test_rate.rb +16 -0
- data/test/test_service.rb +34 -0
- data/test/test_slave_proxy.rb +49 -0
- data/test/test_time.rb +39 -0
- metadata +170 -0
Binary file
|
@@ -0,0 +1,105 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
# Software License Agreement (BSD License)
|
3
|
+
#
|
4
|
+
# Copyright (c) 2012, Takashi Ogura
|
5
|
+
#
|
6
|
+
# based on
|
7
|
+
#
|
8
|
+
# Copyright (c) 2008, Willow Garage, Inc.
|
9
|
+
# All rights reserved.
|
10
|
+
#
|
11
|
+
# Redistribution and use in source and binary forms, with or without
|
12
|
+
# modification, are permitted provided that the following conditions
|
13
|
+
# are met:
|
14
|
+
#
|
15
|
+
# * Redistributions of source code must retain the above copyright
|
16
|
+
# notice, this list of conditions and the following disclaimer.
|
17
|
+
# * Redistributions in binary form must reproduce the above
|
18
|
+
# copyright notice, this list of conditions and the following
|
19
|
+
# disclaimer in the documentation and/or other materials provided
|
20
|
+
# with the distribution.
|
21
|
+
# * Neither the name of Willow Garage, Inc. nor the names of its
|
22
|
+
# contributors may be used to endorse or promote products derived
|
23
|
+
# from this software without specific prior written permission.
|
24
|
+
#
|
25
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
26
|
+
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
27
|
+
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
28
|
+
# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
29
|
+
# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
30
|
+
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
31
|
+
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
32
|
+
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
33
|
+
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
34
|
+
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
35
|
+
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
36
|
+
# POSSIBILITY OF SUCH DAMAGE.
|
37
|
+
#
|
38
|
+
# Revision $Id:$
|
39
|
+
|
40
|
+
|
41
|
+
"""
|
42
|
+
ROS message source code generation for rospy.
|
43
|
+
|
44
|
+
Converts ROS .srv files into Python source code implementations.
|
45
|
+
"""
|
46
|
+
import roslib
|
47
|
+
|
48
|
+
import roslib.srvs
|
49
|
+
|
50
|
+
import genmsg_ruby
|
51
|
+
|
52
|
+
REQUEST ='Request'
|
53
|
+
RESPONSE='Response'
|
54
|
+
|
55
|
+
import sys
|
56
|
+
import os
|
57
|
+
|
58
|
+
def srv_generator(package, name, spec):
|
59
|
+
req, resp = ["%s%s"%(name, suff) for suff in [REQUEST, RESPONSE]]
|
60
|
+
|
61
|
+
fulltype = '%s%s%s'%(package, roslib.srvs.SEP, name)
|
62
|
+
|
63
|
+
gendeps_dict = roslib.gentools.get_dependencies(spec, package)
|
64
|
+
md5 = roslib.gentools.compute_md5(gendeps_dict)
|
65
|
+
yield "module %s\n"%package.capitalize()
|
66
|
+
yield "class %s\n"%name
|
67
|
+
yield """ def self.type
|
68
|
+
'%s'
|
69
|
+
end
|
70
|
+
"""%fulltype
|
71
|
+
yield """ def self.md5sum
|
72
|
+
'%s'
|
73
|
+
end
|
74
|
+
"""%md5
|
75
|
+
yield """ def self.request_class
|
76
|
+
%s
|
77
|
+
end
|
78
|
+
"""%req
|
79
|
+
yield """ def self.response_class
|
80
|
+
%s
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end"""%resp
|
84
|
+
|
85
|
+
def gen_srv(path, output_dir_prefix=None):
|
86
|
+
f = os.path.abspath(path)
|
87
|
+
(package_dir, package) = roslib.packages.get_dir_pkg(f)
|
88
|
+
(name, spec) = roslib.srvs.load_from_file(f, package)
|
89
|
+
base_name = roslib.names.resource_name_base(name)
|
90
|
+
if not output_dir_prefix:
|
91
|
+
output_dir_prefix = '%s/srv_gen/ruby'%package_dir
|
92
|
+
output_dir = '%s/%s'%(output_dir_prefix, package)
|
93
|
+
if not os.path.exists(output_dir):
|
94
|
+
os.makedirs(output_dir)
|
95
|
+
out = open('%s/%s.rb'%(output_dir, base_name), 'w')
|
96
|
+
for mspec, suffix in ((spec.request, REQUEST), (spec.response, RESPONSE)):
|
97
|
+
out.write(genmsg_ruby.msg_generator(package, base_name+suffix, mspec))
|
98
|
+
for l in srv_generator(package, base_name, spec):
|
99
|
+
out.write(l)
|
100
|
+
out.close()
|
101
|
+
|
102
|
+
if __name__ == "__main__":
|
103
|
+
for arg in sys.argv[1:]:
|
104
|
+
gen_srv(arg)
|
105
|
+
|
Binary file
|
@@ -0,0 +1,67 @@
|
|
1
|
+
#! /usr/bin/env python
|
2
|
+
|
3
|
+
# msg/srv generator for precompiled system
|
4
|
+
# It is useful if you are using precompiled ROS system,
|
5
|
+
# because it needs root access and there are ROS_NOBUILD file in the packages.
|
6
|
+
# This script generates *.rb files in the rosruby dir.
|
7
|
+
|
8
|
+
import genmsg_ruby
|
9
|
+
import gensrv_ruby
|
10
|
+
from roslib.packages import get_pkg_dir
|
11
|
+
|
12
|
+
# for electirc
|
13
|
+
try:
|
14
|
+
from roslib.packages import ROSPackages
|
15
|
+
def get_all_deps(packages):
|
16
|
+
rp = ROSPackages()
|
17
|
+
depends = rp.depends(packages)
|
18
|
+
all_deps = set()
|
19
|
+
for packs in depends.values():
|
20
|
+
for pack in packs:
|
21
|
+
all_deps.add(pack)
|
22
|
+
for pack in packages:
|
23
|
+
all_deps.add(pack)
|
24
|
+
return all_deps
|
25
|
+
# for fuerte
|
26
|
+
except ImportError:
|
27
|
+
from rospkg import RosPack
|
28
|
+
def get_all_deps(packages):
|
29
|
+
rp = RosPack()
|
30
|
+
all_deps = set()
|
31
|
+
for pack in packages:
|
32
|
+
depends = rp.get_depends(pack)
|
33
|
+
for dep in depends:
|
34
|
+
all_deps.add(dep)
|
35
|
+
for pack in packages:
|
36
|
+
all_deps.add(pack)
|
37
|
+
return all_deps
|
38
|
+
import sys
|
39
|
+
import os
|
40
|
+
|
41
|
+
|
42
|
+
|
43
|
+
if __name__ == "__main__":
|
44
|
+
if len(sys.argv) == 1:
|
45
|
+
packages = ['std_msgs', 'rosgraph_msgs', 'roscpp_tutorials']
|
46
|
+
else:
|
47
|
+
packages = sys.argv[1:]
|
48
|
+
|
49
|
+
for pack in get_all_deps(packages):
|
50
|
+
msg_dir = "%s/msg/"%get_pkg_dir(pack)
|
51
|
+
base_dir = os.environ.get("HOME") + "/.ros/rosruby"
|
52
|
+
msg_output_prefix = "%s/msg_gen/ruby"%base_dir
|
53
|
+
if os.path.exists(msg_dir):
|
54
|
+
for file in os.listdir(msg_dir):
|
55
|
+
base, ext = os.path.splitext(file)
|
56
|
+
if ext == '.msg':
|
57
|
+
print "generating " + file
|
58
|
+
genmsg_ruby.gen_msg(msg_dir+file, msg_output_prefix)
|
59
|
+
|
60
|
+
srv_dir = "%s/srv/"%get_pkg_dir(pack)
|
61
|
+
srv_output_prefix = "%s/srv_gen/ruby"%base_dir
|
62
|
+
if os.path.exists(srv_dir):
|
63
|
+
for file in os.listdir(srv_dir):
|
64
|
+
base, ext = os.path.splitext(file)
|
65
|
+
if ext == '.srv':
|
66
|
+
print "generating " + file
|
67
|
+
gensrv_ruby.gen_srv(srv_dir+file, srv_output_prefix)
|
data/scripts/run-test.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'test/unit'
|
4
|
+
|
5
|
+
test_file = "test/test_*.rb"
|
6
|
+
|
7
|
+
$:.push("#{File.dirname(__FILE__)}/..")
|
8
|
+
$:.unshift(File.join(File.expand_path("."), "lib"))
|
9
|
+
$:.unshift(File.join(File.expand_path("."), "test"))
|
10
|
+
|
11
|
+
require 'rubygems'
|
12
|
+
gem 'simplecov', :require => false, :group => :test
|
13
|
+
|
14
|
+
require 'simplecov'
|
15
|
+
SimpleCov.start do
|
16
|
+
add_filter "/test/"
|
17
|
+
end
|
18
|
+
|
19
|
+
Dir.glob(test_file) do |file|
|
20
|
+
require file.sub(/\.rb$/, '')
|
21
|
+
end
|
data/test/test_header.rb
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'test/unit'
|
4
|
+
require 'stringio'
|
5
|
+
require 'ros/tcpros/header'
|
6
|
+
|
7
|
+
class TestParam_Normal < Test::Unit::TestCase
|
8
|
+
def test_serialize
|
9
|
+
header = ROS::TCPROS::Header.new
|
10
|
+
header['aa'] = '5'
|
11
|
+
assert_equal('5', header['aa'])
|
12
|
+
sio = StringIO.new
|
13
|
+
header.serialize(sio)
|
14
|
+
sio.rewind
|
15
|
+
data = sio.read
|
16
|
+
assert_equal("\b\000\000\000\004\000\000\000aa=5", data)
|
17
|
+
|
18
|
+
header2 = ROS::TCPROS::Header.new
|
19
|
+
assert_equal(header2, header2.deserialize("\b\000\000\000\004\000\000\000aa=5"[4..-1]))
|
20
|
+
assert_equal('5', header2['aa'])
|
21
|
+
|
22
|
+
header3 = ROS::TCPROS::Header.new
|
23
|
+
header3['hoge'] = '1'
|
24
|
+
|
25
|
+
# wild_card
|
26
|
+
assert(header3.valid?('hoge', '*'))
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_check_string
|
30
|
+
header = ROS::TCPROS::Header.new
|
31
|
+
assert_raise(ArgumentError) { header['aa'] = 1}
|
32
|
+
assert_raise(ArgumentError) { header[5] = '1'}
|
33
|
+
assert_raise(ArgumentError) { header[:symbol] = '1'}
|
34
|
+
assert_raise(ArgumentError) { header[String] = '1'}
|
35
|
+
end
|
36
|
+
end
|
data/test/test_log.rb
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'ros'
|
4
|
+
require 'test/unit'
|
5
|
+
|
6
|
+
class TestLog < Test::Unit::TestCase
|
7
|
+
def test_output
|
8
|
+
node1 = ROS::Node.new('/test_log')
|
9
|
+
check_msg = nil
|
10
|
+
sub = node1.subscribe('/rosout', Rosgraph_msgs::Log) do |msg|
|
11
|
+
check_msg = msg
|
12
|
+
end
|
13
|
+
node1.loginfo('msg1')
|
14
|
+
sleep(0.5)
|
15
|
+
node1.spin_once
|
16
|
+
assert_equal('msg1', check_msg.msg)
|
17
|
+
assert_equal(Rosgraph_msgs::Log::INFO, check_msg.level)
|
18
|
+
|
19
|
+
node1.logerror('msg2')
|
20
|
+
sleep(0.1)
|
21
|
+
node1.spin_once
|
22
|
+
assert_equal('msg2', check_msg.msg)
|
23
|
+
assert_equal(Rosgraph_msgs::Log::ERROR, check_msg.level)
|
24
|
+
|
25
|
+
node1.logfatal('msg3')
|
26
|
+
sleep(0.1)
|
27
|
+
node1.spin_once
|
28
|
+
assert_equal('msg3', check_msg.msg)
|
29
|
+
assert_equal(Rosgraph_msgs::Log::FATAL, check_msg.level)
|
30
|
+
|
31
|
+
node1.logfatal('msg4')
|
32
|
+
sleep(0.1)
|
33
|
+
node1.spin_once
|
34
|
+
assert_equal('msg4', check_msg.msg)
|
35
|
+
assert_equal(Rosgraph_msgs::Log::FATAL, check_msg.level)
|
36
|
+
|
37
|
+
node1.logwarn('msg5')
|
38
|
+
sleep(0.1)
|
39
|
+
node1.spin_once
|
40
|
+
assert_equal('msg5', check_msg.msg)
|
41
|
+
assert_equal(Rosgraph_msgs::Log::WARN, check_msg.level)
|
42
|
+
|
43
|
+
node1.shutdown
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'ros/master_proxy'
|
4
|
+
require 'test/unit'
|
5
|
+
|
6
|
+
class TestRegister < Test::Unit::TestCase
|
7
|
+
DUMMY_SERVICE_URI = 'rosrpc://dummy:1234'
|
8
|
+
DUMMY_SERVICE_NAME = '/dummy_service'
|
9
|
+
|
10
|
+
DUMMY_TOPIC_NAME = '/dummy_service'
|
11
|
+
|
12
|
+
def test_service
|
13
|
+
proxy = ROS::MasterProxy.new('/test_node', ENV['ROS_MASTER_URI'], 'http://dummy:11111')
|
14
|
+
proxy.register_service(DUMMY_SERVICE_NAME, DUMMY_SERVICE_URI)
|
15
|
+
uri = proxy.lookup_service(DUMMY_SERVICE_NAME)
|
16
|
+
assert_equal(DUMMY_SERVICE_URI, uri)
|
17
|
+
proxy.unregister_service(DUMMY_SERVICE_NAME, DUMMY_SERVICE_URI)
|
18
|
+
result = proxy.lookup_service(DUMMY_SERVICE_NAME)
|
19
|
+
assert(!result)
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_subscriber
|
23
|
+
proxy = ROS::MasterProxy.new('/test_node2', ENV['ROS_MASTER_URI'], 'http://dummy:11111')
|
24
|
+
pub = proxy.register_subscriber('/rosout_agg', 'rosgraph_msgs/Log')
|
25
|
+
assert(pub.length > 0)
|
26
|
+
proxy.unregister_subscriber('/rosout_agg')
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_publisher
|
30
|
+
proxy = ROS::MasterProxy.new('/test_node3', ENV['ROS_MASTER_URI'], 'http://dummy:11111')
|
31
|
+
sub = proxy.register_publisher('/rosout', 'rosgraph_msgs/Log')
|
32
|
+
assert(sub.length > 0)
|
33
|
+
num = proxy.unregister_publisher('/rosout')
|
34
|
+
assert_equal(1, num)
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_param_subscriber
|
38
|
+
proxy = ROS::MasterProxy.new('/test_node4', ENV['ROS_MASTER_URI'], 'http://dummy:11111')
|
39
|
+
assert(proxy.subscribe_param('/rosversion'))
|
40
|
+
assert(proxy.unsubscribe_param('/rosversion'))
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
|
45
|
+
class TestSystem < Test::Unit::TestCase
|
46
|
+
|
47
|
+
def test_lookup
|
48
|
+
proxy = ROS::MasterProxy.new('/test_node', ENV['ROS_MASTER_URI'], 'http://dummy:11111')
|
49
|
+
uri = proxy.lookup_node('/rosout')
|
50
|
+
assert(/^http:.*:[0-9]+/ =~ uri)
|
51
|
+
assert(!proxy.lookup_node('/THIS_NODE_DOES_NOT_EXIST'))
|
52
|
+
assert(proxy.get_published_topics('').length > 0)
|
53
|
+
assert(proxy.get_published_topics('/NO_EXIST_NS').length == 0)
|
54
|
+
pub, sub, ser = proxy.get_system_state
|
55
|
+
assert_equal(1, pub.length)
|
56
|
+
assert_equal(1, sub.length)
|
57
|
+
# assert_equal(2, ser.length) # ruby logger has no service
|
58
|
+
assert(/^http:.*:11311/ =~ proxy.get_uri)
|
59
|
+
end
|
60
|
+
|
61
|
+
def test_accessor
|
62
|
+
proxy = ROS::MasterProxy.new('/test_node', ENV['ROS_MASTER_URI'], 'http://dummy:11111')
|
63
|
+
assert_equal(ENV['ROS_MASTER_URI'], proxy.master_uri)
|
64
|
+
assert_equal('http://dummy:11111', proxy.slave_uri)
|
65
|
+
proxy.slave_uri = 'http://dummy2:12345'
|
66
|
+
assert_equal('http://dummy2:12345', proxy.slave_uri)
|
67
|
+
proxy.master_uri = 'http://fail'
|
68
|
+
assert_equal('/test_node', proxy.caller_id)
|
69
|
+
proxy.caller_id = '/changed'
|
70
|
+
assert_equal('/changed', proxy.caller_id)
|
71
|
+
assert_raise(SocketError) {proxy.get_uri}
|
72
|
+
end
|
73
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'ros/message'
|
4
|
+
require 'test/unit'
|
5
|
+
|
6
|
+
class TestMessage < Test::Unit::TestCase
|
7
|
+
def test_message
|
8
|
+
s = ROS::Struct.new('V')
|
9
|
+
packed = s.pack(4)
|
10
|
+
assert_equal("\004\000\000\000", packed)
|
11
|
+
assert_equal(4, s.unpack(packed)[0])
|
12
|
+
end
|
13
|
+
end
|
data/test/test_node.rb
ADDED
@@ -0,0 +1,166 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'ros'
|
4
|
+
require 'test/unit'
|
5
|
+
|
6
|
+
class TestNode < Test::Unit::TestCase
|
7
|
+
def test_up_down
|
8
|
+
node1 = ROS::Node.new('/test_up_down')
|
9
|
+
assert_equal('/test_up_down', node1.node_name)
|
10
|
+
assert(node1.ok?)
|
11
|
+
node1.shutdown
|
12
|
+
assert(!node1.ok?)
|
13
|
+
node2 = ROS::Node.new('/test2')
|
14
|
+
assert(node2.ok?)
|
15
|
+
node2.shutdown
|
16
|
+
assert(!node2.ok?)
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_multi_up_down
|
20
|
+
node1 = ROS::Node.new('/test_multi_1')
|
21
|
+
node2 = ROS::Node.new('/test_multi_2')
|
22
|
+
assert(node1.ok?)
|
23
|
+
assert(node2.ok?)
|
24
|
+
node1.shutdown
|
25
|
+
node2.shutdown
|
26
|
+
assert(!node1.ok?)
|
27
|
+
assert(!node2.ok?)
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_anonymous
|
31
|
+
node1 = ROS::Node.new('/test_anonymous1', :anonymous=>true)
|
32
|
+
assert_not_equal('/test_anonymous1', node1.node_name)
|
33
|
+
node2 = ROS::Node.new('/test_anonymous1', :anonymous=>true)
|
34
|
+
assert_not_equal('/test_anonymous1', node2.node_name)
|
35
|
+
sleep(0.5)
|
36
|
+
assert(node1.ok?)
|
37
|
+
assert(node2.ok?)
|
38
|
+
node1.shutdown
|
39
|
+
node2.shutdown
|
40
|
+
assert(!node1.ok?)
|
41
|
+
assert(!node2.ok?)
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_not_anonymous
|
45
|
+
node1 = ROS::Node.new('/test_not_anonymous1')
|
46
|
+
node2 = ROS::Node.new('/test_not_anonymous1')
|
47
|
+
sleep(0.5)
|
48
|
+
assert(!node1.ok?) # killed by master
|
49
|
+
assert(node2.ok?)
|
50
|
+
node1.shutdown
|
51
|
+
node2.shutdown
|
52
|
+
assert(!node2.ok?)
|
53
|
+
end
|
54
|
+
|
55
|
+
def test_signal
|
56
|
+
node1 = ROS::Node.new('/test_signal1')
|
57
|
+
Process.kill("INT", Process.pid)
|
58
|
+
sleep(0.5)
|
59
|
+
assert(!node1.ok?)
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_master_uri
|
63
|
+
node1 = ROS::Node.new('/test_master_uri1')
|
64
|
+
assert_equal(node1.master_uri, ENV['ROS_MASTER_URI'])
|
65
|
+
|
66
|
+
node1.shutdown
|
67
|
+
end
|
68
|
+
|
69
|
+
def test_ros_env
|
70
|
+
# check ROS_IP
|
71
|
+
ENV['ROS_IP']='127.0.0.1'
|
72
|
+
node1 = ROS::Node.new('/test_ros_env')
|
73
|
+
assert_equal('127.0.0.1', node1.host)
|
74
|
+
node1.shutdown
|
75
|
+
ENV.delete('ROS_IP')
|
76
|
+
|
77
|
+
# check ROS_HOSTNAME
|
78
|
+
ENV['ROS_HOSTNAME']='localhost'
|
79
|
+
node2 = ROS::Node.new('/test_ros_env2')
|
80
|
+
assert_equal('localhost', node2.host)
|
81
|
+
node2.shutdown
|
82
|
+
|
83
|
+
ENV['ROS_HOSTNAME']='127.0.0.1'
|
84
|
+
node2 = ROS::Node.new('/test_ros_env2')
|
85
|
+
assert_equal('127.0.0.1', node2.host)
|
86
|
+
node2.shutdown
|
87
|
+
ENV.delete('ROS_HOSTNAME')
|
88
|
+
end
|
89
|
+
|
90
|
+
def test_param_set_get
|
91
|
+
node = ROS::Node.new('hoge')
|
92
|
+
# integer
|
93
|
+
assert(node.set_param('/test1', 1))
|
94
|
+
assert_equal(1, node.get_param('/test1'))
|
95
|
+
# float
|
96
|
+
assert(node.set_param('/test_f', 0.1))
|
97
|
+
assert_equal(0.1, node.get_param('/test_f'))
|
98
|
+
assert(node.delete_param('/test_f'))
|
99
|
+
# list
|
100
|
+
assert(node.set_param('/test2', [1,2,3]))
|
101
|
+
assert_equal([1,2,3], node.get_param('/test2'))
|
102
|
+
# string
|
103
|
+
assert(node.set_param('/test_s', 'hoge'))
|
104
|
+
assert_equal('hoge', node.get_param('/test_s'))
|
105
|
+
|
106
|
+
# default param
|
107
|
+
assert_equal('hoge', node.get_param('/test_xxxx', 'hoge'))
|
108
|
+
|
109
|
+
# delete not exist
|
110
|
+
assert(!node.delete_param('/xxxxx'))
|
111
|
+
|
112
|
+
assert(node.has_param('/test_s'))
|
113
|
+
assert(node.delete_param('/test_s'))
|
114
|
+
assert(!node.has_param('/test_s'))
|
115
|
+
|
116
|
+
# clean
|
117
|
+
assert(node.delete_param('/test1'))
|
118
|
+
assert(node.delete_param('/test2'))
|
119
|
+
|
120
|
+
node.shutdown
|
121
|
+
end
|
122
|
+
|
123
|
+
def test_param_private
|
124
|
+
node = ROS::Node.new('/hoge')
|
125
|
+
node.set_param('/hoge/param1', 100)
|
126
|
+
assert_equal(100, node.get_param('~param1'))
|
127
|
+
|
128
|
+
node.set_param('~param2', 10)
|
129
|
+
assert_equal(10, node.get_param('/hoge/param2'))
|
130
|
+
assert(node.delete_param('~param2'))
|
131
|
+
node.shutdown
|
132
|
+
end
|
133
|
+
|
134
|
+
def test_fail
|
135
|
+
node = ROS::Node.new('hoge')
|
136
|
+
assert(!node.get_param('/test_no_exists'))
|
137
|
+
node.shutdown
|
138
|
+
end
|
139
|
+
|
140
|
+
def test_resolve_name
|
141
|
+
node = ROS::Node.new('hoge')
|
142
|
+
|
143
|
+
assert_equal('/aaa', node.resolve_name('aaa'))
|
144
|
+
assert_equal('/aaa/b/c', node.resolve_name('aaa/b////c'))
|
145
|
+
assert_equal('/hoge/private', node.resolve_name('~private'))
|
146
|
+
node.shutdown
|
147
|
+
end
|
148
|
+
|
149
|
+
def test_param_subscribe
|
150
|
+
node = ROS::Node.new('/test_param_sub')
|
151
|
+
called = false
|
152
|
+
subscriber = node.subscribe_parameter('/test_param1') do |param|
|
153
|
+
called = param
|
154
|
+
end
|
155
|
+
node.set_param('/test_param1', 1)
|
156
|
+
sleep(0.5)
|
157
|
+
assert_equal(1, called)
|
158
|
+
subscriber.shutdown
|
159
|
+
node.set_param('/test_param1', 2)
|
160
|
+
sleep(0.5)
|
161
|
+
assert_equal(1, called)
|
162
|
+
assert(node.delete_param('/test_param1'))
|
163
|
+
|
164
|
+
node.shutdown
|
165
|
+
end
|
166
|
+
end
|