ruby-player 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.
data/README.md ADDED
@@ -0,0 +1,54 @@
1
+ Ruby Player - Ruby client library for Player (tools for robots)
2
+
3
+ Summary
4
+ -------------------------------------
5
+ Ruby Player provide high level client library to access to Player server.
6
+ It are using the FFI for binding with playerc C client library.
7
+
8
+ API coverage
9
+ -------------------------------------
10
+ The list of support objects and devices of Player.
11
+
12
+ * Client object
13
+ * Position2d
14
+
15
+ Install
16
+ -------------------------------------
17
+ Currently (2012-01-07) the Ruby Player are developing and testing with Player 3.1.0 latest svn version
18
+ and Stage v4.1.0. See them user guides for installation.
19
+
20
+ After installation Player/Stage run:
21
+
22
+ `gem install ruby-player`
23
+
24
+ For testing library in root dir library:
25
+
26
+ player spec/world/test.cfg
27
+ bundle exec rake spec
28
+
29
+ Example
30
+ -------------------------------------
31
+
32
+ require 'ruby-player'
33
+ Player::Client.connect("localhost") do |robot|
34
+ pos2d = robot[:position2d, 0]
35
+ pos2d.set_vel(1, 0, 0.2)
36
+ robot.loop do
37
+ puts "Position: x=#{pos2d.px}, y=#{pos2d.py}, a=#{pos2d.pa}
38
+ end
39
+ end
40
+
41
+ References
42
+ -------------------------------------
43
+
44
+ [Home page](http://www.github.com/flipback/ruby-player)
45
+
46
+ [Player project](http://playerstage.sourceforge.net/)
47
+
48
+ [Stage project](https://github.com/rtv/Stage)
49
+
50
+ [C API Player](http://playerstage.sourceforge.net/doc/Player-3.0.2/player/group__player__clientlib__libplayerc.html)
51
+
52
+ Authors
53
+ -------------------------------------
54
+ Aleksey Timin <atimin@gmail.com>
data/Rakefile ADDED
@@ -0,0 +1,21 @@
1
+ # encoding: utf-8
2
+
3
+ require 'rubygems'
4
+ require 'bundler'
5
+ begin
6
+ Bundler.setup(:default, :development)
7
+ rescue Bundler::BundlerError => e
8
+ $stderr.puts e.message
9
+ $stderr.puts "Run `bundle install` to install missing gems"
10
+ exit e.status_code
11
+ end
12
+
13
+
14
+ require 'rspec/core/rake_task'
15
+
16
+ RSpec::Core::RakeTask.new(:spec)
17
+
18
+ task :default => :spec
19
+
20
+ require 'yard'
21
+ YARD::Rake::YardocTask.new
data/TODO.md ADDED
@@ -0,0 +1,91 @@
1
+
2
+ For supported devices
3
+ -------------------------------------
4
+ **ranger** - The ranger proxy provides an interface to ranger sensor devices.
5
+
6
+ 1. Get geometry of device and sensors
7
+ 2. Get 3d scan points (x,y,z)
8
+
9
+ **position2d** - The position2d proxy provides an interface to a mobile robot base, such as the ActiveMedia Pioneer series.
10
+ 1. Set speed and heading - wrap C `func playerc_position2d_set_cmd_vel_head`
11
+ 2. Move to point - wrap C funcs `playerc_position2d_set_cmd_pose_with_vel` and `playerc_position2d_set_cmd_pose`
12
+
13
+ Candidates for support
14
+ --------------------------------------
15
+
16
+ **actarray** - The actarray proxy provides an interface to actuator arrays such as the ActivMedia Pioneer Arm.
17
+
18
+ **blobfinder** - The blobfinder proxy provides an interface to color blob detectors such as the ACTS vision system.
19
+
20
+ **graphics2d** - The graphics2d proxy provides an interface to the graphics2d.
21
+
22
+ **graphics3d** - The graphics3d proxy provides an interface to the graphics3d.
23
+
24
+ **gripper** - The gripper proxy provides an interface to the gripper.
25
+
26
+ **simulation** - The simulation proxy is used to interact with objects in a simulation.
27
+
28
+ Device proxies are not started to develop
29
+ --------------------------------------
30
+
31
+ **aio** - The aio proxy provides an interface to the analog input/output sensors.
32
+
33
+ **audio** - The audio proxy provides access to drivers supporting the audio_interface.
34
+
35
+ **blinkenlight** - The blinkenlight proxy provides an interface to a (possibly colored and/or blinking) indicator light.
36
+
37
+ **bumper** - The bumper proxy provides an interface to the bumper sensors built into robots such as the RWI B21R.
38
+
39
+ **camera** - The camera proxy can be used to get images from a camera.
40
+
41
+ **dio** - The dio proxy provides an interface to the digital input/output sensors.
42
+
43
+ **fiducial** - The fiducial proxy provides an interface to a fiducial detector.
44
+
45
+ **health** - The health proxy provides an interface to the HEALTH Module.
46
+
47
+ **ir** - The ir proxy provides an interface to the ir sensors built into robots such as the RWI B21R.
48
+
49
+ **joystick** - The joystick proxy can be used to get images from a joystick.
50
+
51
+ **laser** - The laser proxy provides an interface to scanning laser range finders such as the sicklms200.
52
+
53
+ **limb** - The limb proxy provides an interface to limbs using forward/inverse kinematics, such as the ActivMedia Pioneer Arm.
54
+
55
+ **localize** - The localize proxy provides an interface to localization drivers.
56
+
57
+ **log** - The log proxy provides start/stop control of data logging.
58
+
59
+ **map** - The map proxy provides an interface to a map.
60
+
61
+ **vectormap** - The vectormap proxy provides an interface to a map of geometric features.
62
+
63
+ **opaque** - The opaque proxy provides an interface for generic messages to drivers.
64
+
65
+ **planner** - The planner proxy provides an interface to a 2D motion planner.
66
+
67
+ **position1d** - The position1d proxy provides an interface to 1 DOF actuator such as a linear or rotational actuator.
68
+
69
+ **position3d** - The position3d proxy provides an interface to a mobile robot base, such as the Segway RMP series.
70
+
71
+ **power** - The power proxy provides an interface through which battery levels can be monitored.
72
+
73
+ **ptz** - The ptz proxy provides an interface to pan-tilt units such as the Sony PTZ camera.
74
+
75
+ **sonar** - The sonar proxy provides an interface to the sonar range sensors built into robots such as the ActiveMedia Pioneer series.
76
+
77
+ **wifi** - The wifi proxy is used to query the state of a wireless network.
78
+
79
+ **speech** - The speech proxy provides an interface to a speech synthesis system.
80
+
81
+ **speech recognition** - The speech recognition proxy provides an interface to a speech recognition system.
82
+
83
+ **rfid** - The rfid proxy provides an interface to a RFID reader.
84
+
85
+ **pointcloud3d** - The pointcloud3d proxy provides an interface to a pointcloud3d device.
86
+
87
+ **stereo** - The stereo proxy provides an interface to a stereo device.
88
+
89
+ **imu** - The imu proxy provides an interface to an Inertial Measurement Unit.
90
+
91
+ **wsn** - The wsn proxy provides an interface to a Wireless Sensor Network.
@@ -0,0 +1,24 @@
1
+ # Ruby Player - Ruby client library for Player (tools for robots)
2
+ #
3
+ # Copyright (C) 2012 Timin Aleksey
4
+ #
5
+ # This program is free software: you can redistribute it and/or modify
6
+ # it under the terms of the GNU General Public License as published by
7
+ # the Free Software Foundation, either version 3 of the License, or
8
+ # (at your option) any later version.
9
+ #
10
+ # This program is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ # GNU General Public License for more details.
14
+
15
+ module Player
16
+ module CType
17
+ class BBox3dStruct < FFI::Struct
18
+ layout :sw, :double,
19
+ :sl, :double,
20
+ :sh, :double
21
+ end
22
+ end
23
+ end
24
+
@@ -0,0 +1,36 @@
1
+ # Ruby Player - Ruby client library for Player (tools for robots)
2
+ #
3
+ # Copyright (C) 2012 Timin Aleksey
4
+ #
5
+ # This program is free software: you can redistribute it and/or modify
6
+ # it under the terms of the GNU General Public License as published by
7
+ # the Free Software Foundation, either version 3 of the License, or
8
+ # (at your option) any later version.
9
+ #
10
+ # This program is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ # GNU General Public License for more details.
14
+
15
+ module Player
16
+ module CType
17
+ class ClientStruct < FFI::Struct
18
+ layout :id, :pointer,
19
+ :host, :string,
20
+ :port, :int,
21
+ :transport, :int,
22
+ :server, SockaddrInStruct,
23
+ :connected, :int,
24
+ :retry_limit, :int,
25
+ :retry_time, :double,
26
+ :mode, :uint8,
27
+ :data_requested, :int,
28
+ :data_received, :int
29
+ #TODO Added devinfo, devicem, qitems
30
+ #:data, :string,
31
+ #:write_xdrdata, :string,
32
+ #:read_xdrdata, :string,
33
+ #:read_xdrdata_len, :size_t
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,24 @@
1
+ # Ruby Player - Ruby client library for Player (tools for robots)
2
+ #
3
+ # Copyright (C) 2012 Timin Aleksey
4
+ #
5
+ # This program is free software: you can redistribute it and/or modify
6
+ # it under the terms of the GNU General Public License as published by
7
+ # the Free Software Foundation, either version 3 of the License, or
8
+ # (at your option) any later version.
9
+ #
10
+ # This program is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ # GNU General Public License for more details.
14
+
15
+ module Player
16
+ module CType
17
+ class DevAddrStruct < FFI::Struct
18
+ layout :host, :uint32,
19
+ :robot, :uint32,
20
+ :interf, :uint16,
21
+ :index, :uint16
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,35 @@
1
+ # Ruby Player - Ruby client library for Player (tools for robots)
2
+ #
3
+ # Copyright (C) 2012 Timin Aleksey
4
+ #
5
+ # This program is free software: you can redistribute it and/or modify
6
+ # it under the terms of the GNU General Public License as published by
7
+ # the Free Software Foundation, either version 3 of the License, or
8
+ # (at your option) any later version.
9
+ #
10
+ # This program is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ # GNU General Public License for more details.
14
+
15
+ module Player
16
+ module CType
17
+ class DeviceStruct < FFI::Struct
18
+ layout :id, :pointer,
19
+ :client, :pointer,
20
+ :addr, DevAddrStruct,
21
+ :drivername, [:char, PLAYER_MAX_DRIVER_STRING_LEN],
22
+ :subcribed, :int,
23
+ :datatime, :double,
24
+ :lasttime, :double,
25
+ :fresh, :int,
26
+ :freshdgeom, :int,
27
+ :freshconfig, :int,
28
+ :putmsg, :pointer,
29
+ :user_data, :pointer,
30
+ :callback_count, :int,
31
+ :calback, [:pointer, 4],
32
+ :calback_data, [:pointer, 4]
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,22 @@
1
+ # Ruby Player - Ruby client library for Player (tools for robots)
2
+ #
3
+ # Copyright (C) 2012 Timin Aleksey
4
+ #
5
+ # This program is free software: you can redistribute it and/or modify
6
+ # it under the terms of the GNU General Public License as published by
7
+ # the Free Software Foundation, either version 3 of the License, or
8
+ # (at your option) any later version.
9
+ #
10
+ # This program is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ # GNU General Public License for more details.
14
+
15
+ require "ffi"
16
+
17
+ module Player
18
+ module Binding
19
+ module Diagnostic
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,27 @@
1
+ # Ruby Player - Ruby client library for Player (tools for robots)
2
+ #
3
+ # Copyright (C) 2012 Timin Aleksey
4
+ #
5
+ # This program is free software: you can redistribute it and/or modify
6
+ # it under the terms of the GNU General Public License as published by
7
+ # the Free Software Foundation, either version 3 of the License, or
8
+ # (at your option) any later version.
9
+ #
10
+ # This program is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ # GNU General Public License for more details.
14
+
15
+ module Player
16
+ module CType
17
+ class Pose3dStruct < FFI::Struct
18
+ layout :px, :double,
19
+ :py, :double,
20
+ :pz, :double,
21
+ :proll, :double,
22
+ :ppitch, :double,
23
+ :pyaw, :double
24
+ end
25
+ end
26
+ end
27
+
@@ -0,0 +1,32 @@
1
+ # Ruby Player - Ruby client library for Player (tools for robots)
2
+ #
3
+ # Copyright (C) 2012 Timin Aleksey
4
+ #
5
+ # This program is free software: you can redistribute it and/or modify
6
+ # it under the terms of the GNU General Public License as published by
7
+ # the Free Software Foundation, either version 3 of the License, or
8
+ # (at your option) any later version.
9
+ #
10
+ # This program is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ # GNU General Public License for more details.
14
+
15
+ module Player
16
+ module CType
17
+ class Position2dStruct < FFI::Struct
18
+ layout :info, DeviceStruct,
19
+ :pose, [:double, 3],
20
+ :size, [:double, 2],
21
+
22
+ :px, :double,
23
+ :py, :double,
24
+ :pa, :double,
25
+
26
+ :vx, :double,
27
+ :vy, :double,
28
+ :va, :double,
29
+ :stall, :int
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,42 @@
1
+ # Ruby Player - Ruby client library for Player (tools for robots)
2
+ #
3
+ # Copyright (C) 2012 Timin Aleksey
4
+ #
5
+ # This program is free software: you can redistribute it and/or modify
6
+ # it under the terms of the GNU General Public License as published by
7
+ # the Free Software Foundation, either version 3 of the License, or
8
+ # (at your option) any later version.
9
+ #
10
+ # This program is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ # GNU General Public License for more details.
14
+
15
+ module Player
16
+ module CType
17
+ class RangerStruct < FFI::Struct
18
+ layout :info, DeviceStruct,
19
+ :element_count, :uint32,
20
+ :min_angle, :double,
21
+ :max_angle, :double,
22
+ :angular_res, :double,
23
+ :min_range, :double,
24
+ :max_range, :double,
25
+ :range_res, :double,
26
+ :frequecy, :double,
27
+ :device_pose, Pose3dStruct,
28
+ :device_size, BBox3dStruct,
29
+ :element_poses, :pointer,
30
+ :element_sizes, :pointer,
31
+ :ranges_count, :uint32,
32
+ :ranges, :pointer,
33
+ :intensities_count, :uint32,
34
+ :intensities, :pointer,
35
+ :bearings_count, :uint32,
36
+ :bearings, :pointer,
37
+ :points_count, :uint32,
38
+ :points, :pointer
39
+ end
40
+ end
41
+ end
42
+
@@ -0,0 +1,24 @@
1
+ # Ruby Player - Ruby client library for Player (tools for robots)
2
+ #
3
+ # Copyright (C) 2012 Timin Aleksey
4
+ #
5
+ # This program is free software: you can redistribute it and/or modify
6
+ # it under the terms of the GNU General Public License as published by
7
+ # the Free Software Foundation, either version 3 of the License, or
8
+ # (at your option) any later version.
9
+ #
10
+ # This program is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ # GNU General Public License for more details.
14
+
15
+ module Player
16
+ module CType
17
+ class SockaddrInStruct < FFI::Struct
18
+ layout :sin_family, :short,
19
+ :sin_port, :short,
20
+ :sin_addr, :int32,
21
+ :sin_zero, [:char, 8]
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,36 @@
1
+ # Ruby Player - Ruby client library for Player (tools for robots)
2
+ #
3
+ # Copyright (C) 2012 Timin Aleksey
4
+ #
5
+ # This program is free software: you can redistribute it and/or modify
6
+ # it under the terms of the GNU General Public License as published by
7
+ # the Free Software Foundation, either version 3 of the License, or
8
+ # (at your option) any later version.
9
+ #
10
+ # This program is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ # GNU General Public License for more details.
14
+ require "ffi"
15
+
16
+ module Player
17
+ module CType
18
+ PLAYER_MAX_DRIVER_STRING_LEN = 64
19
+ # Device access mode: open
20
+ PLAYER_OPEN_MODE = 1
21
+ #Device access mode: close
22
+ PLAYER_CLOSE_MODE = 2
23
+ #Device access mode: error
24
+ PLAYER_ERROR_MODE = 3
25
+ end
26
+ end
27
+
28
+ #structs
29
+ require File.dirname(__FILE__) + "/c_type/sockaddr_in_t"
30
+ require File.dirname(__FILE__) + "/c_type/devaddr"
31
+ require File.dirname(__FILE__) + "/c_type/device_t"
32
+ require File.dirname(__FILE__) + "/c_type/pose3d_t"
33
+ require File.dirname(__FILE__) + "/c_type/bbox3d_t"
34
+ require File.dirname(__FILE__) + "/c_type/position2d_t"
35
+ require File.dirname(__FILE__) + "/c_type/ranger_t"
36
+ require File.dirname(__FILE__) + "/c_type/client_t"
@@ -0,0 +1,116 @@
1
+ # Ruby Player - Ruby client library for Player (tools for robots)
2
+ #
3
+ # Copyright (C) 2012 Timin Aleksey
4
+ #
5
+ # This program is free software: you can redistribute it and/or modify
6
+ # it under the terms of the GNU General Public License as published by
7
+ # the Free Software Foundation, either version 3 of the License, or
8
+ # (at your option) any later version.
9
+ #
10
+ # This program is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ # GNU General Public License for more details.
14
+
15
+ module Player
16
+ # The client object manages the connection with the Player server
17
+ #
18
+ # @example
19
+ #
20
+ # Player::Client.connect("localhost") do |cl|
21
+ # pos2d = cl[:position2d, 0]
22
+ # pos2d.set_vel(1, 0, 0.2)
23
+ # cl.loop do
24
+ # puts "Position: x=#{pos2d.px}, y=#{pos2d.py}, a=#{pos2d.pa}
25
+ # end
26
+ # end
27
+ class Client
28
+ include CType
29
+ include Common
30
+
31
+ module C
32
+ extend FFI::Library
33
+ ffi_lib "playerc"
34
+
35
+ attach_function :playerc_client_create, [:pointer, :string, :int], :pointer
36
+ attach_function :playerc_client_destroy, [:pointer], :void
37
+ attach_function :playerc_client_connect, [:pointer], :int
38
+ attach_function :playerc_client_disconnect, [:pointer], :int
39
+
40
+
41
+ attach_function :playerc_client_read, [:pointer], :void
42
+ end
43
+
44
+ # Initialize client
45
+ # @param [String] host host address
46
+ # @param port number of port default 6665
47
+ def initialize(host, port=6665)
48
+ @client = ClientStruct.new(C.playerc_client_create(nil, host, port.to_i))
49
+
50
+ try_with_error C.playerc_client_connect(@client)
51
+
52
+ ObjectSpace.define_finalizer(self, Client.finilazer(@client))
53
+ if block_given?
54
+ yield self
55
+ close
56
+ else
57
+ self
58
+ end
59
+ end
60
+
61
+ class << self
62
+ alias_method :connect, :new
63
+ end
64
+
65
+ # Read data from server and update all subscribed proxy objects
66
+ def read
67
+ C.playerc_client_read(@client)
68
+ end
69
+
70
+ # Get proxy object
71
+ #
72
+ # @example
73
+ # pos2d = client[:position2d, 0]
74
+ #
75
+ # @param type type name of proxy object
76
+ # @param index index of proxy object
77
+ # @return proxy object
78
+ def [](type, index)
79
+ type_name = type.to_s.capitalize
80
+ (eval type_name).send(:new, @client, index)
81
+ end
82
+
83
+ # Check connection
84
+ def closed?
85
+ @client[:connected] == 0
86
+ end
87
+
88
+ # Close connection
89
+ def close
90
+ try_with_error C.playerc_client_disconnect(@client)
91
+ end
92
+
93
+ # Loop for control code
94
+ #
95
+ # @example
96
+ # cl.loop(0.5) do
97
+ # #...you control code
98
+ # end
99
+ #
100
+ # @param period period cicles in seconds
101
+ def loop(period=1.0)
102
+ while(true) do
103
+ read
104
+ yield
105
+ sleep(period.to_f)
106
+ end
107
+ end
108
+
109
+ def Client.finilazer(client)
110
+ lambda do
111
+ C.playerc_client_disconnect(client) if client[:connected] > 0
112
+ C.playerc_client_destroy(client)
113
+ end
114
+ end
115
+ end
116
+ end
@@ -0,0 +1,29 @@
1
+ # Ruby Player - Ruby client library for Player (tools for robots)
2
+ #
3
+ # Copyright (C) 2012 Timin Aleksey
4
+ #
5
+ # This program is free software: you can redistribute it and/or modify
6
+ # it under the terms of the GNU General Public License as published by
7
+ # the Free Software Foundation, either version 3 of the License, or
8
+ # (at your option) any later version.
9
+ #
10
+ # This program is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ # GNU General Public License for more details.
14
+
15
+ module Player
16
+ module Common
17
+ module C
18
+ extend FFI::Library
19
+ ffi_lib "playerc"
20
+
21
+ attach_function :playerc_error_str, [], :string
22
+ end
23
+
24
+ private
25
+ def try_with_error(result)
26
+ raise StandardError.new(C.playerc_error_str) if result != 0
27
+ end
28
+ end
29
+ end