sgslib 0.4.0 → 1.5.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/LICENSE +24 -17
- data/README.md +43 -7
- data/Rakefile +2 -2
- data/bin/console +34 -1
- data/exe/sgs_alarm +41 -0
- data/exe/sgs_diag +41 -0
- data/exe/sgs_gpsread +42 -0
- data/exe/sgs_logger +45 -0
- data/exe/sgs_mission +45 -0
- data/exe/sgs_nav +43 -0
- data/exe/sgs_otto +46 -0
- data/exe/sgs_report +44 -0
- data/lib/sgs/alarm.rb +74 -32
- data/lib/sgs/bearing.rb +151 -0
- data/lib/sgs/config.rb +35 -24
- data/lib/sgs/course.rb +29 -24
- data/lib/sgs/diagnostics.rb +50 -0
- data/lib/sgs/gps.rb +50 -21
- data/lib/sgs/location.rb +58 -159
- data/lib/sgs/logger.rb +30 -84
- data/lib/sgs/mission.rb +97 -173
- data/lib/sgs/mission_status.rb +127 -0
- data/lib/sgs/navigate.rb +56 -21
- data/lib/sgs/nmea.rb +32 -22
- data/lib/sgs/otto.rb +207 -22
- data/lib/sgs/redis_base.rb +32 -24
- data/lib/sgs/report.rb +54 -0
- data/lib/sgs/rpc.rb +29 -21
- data/lib/sgs/timing.rb +32 -24
- data/lib/sgs/version.rb +35 -1
- data/lib/sgs/waypoint.rb +69 -33
- data/lib/sgslib.rb +34 -21
- data/sgslib.gemspec +16 -6
- metadata +91 -21
- data/.gitignore +0 -9
- data/.rspec +0 -2
- data/.travis.yml +0 -4
- data/CODE_OF_CONDUCT.md +0 -49
- data/bin/setup +0 -8
data/lib/sgs/otto.rb
CHANGED
@@ -1,29 +1,39 @@
|
|
1
1
|
#
|
2
|
-
# Copyright (c) 2013, Kalopa
|
3
|
-
#
|
4
|
-
# GNU General Public License as published by the Free Software Foundation;
|
5
|
-
# either version 2, or (at your option) any later version.
|
2
|
+
# Copyright (c) 2013-2023, Kalopa Robotics Limited. All rights
|
3
|
+
# reserved.
|
6
4
|
#
|
7
|
-
#
|
8
|
-
#
|
9
|
-
#
|
10
|
-
#
|
5
|
+
# This program is free software; you can redistribute it and/or
|
6
|
+
# modify it under the terms of the GNU General Public License as
|
7
|
+
# published by the Free Software Foundation; either version 2 of
|
8
|
+
# the License, or (at your option) any later version.
|
11
9
|
#
|
12
|
-
#
|
13
|
-
#
|
14
|
-
#
|
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.
|
15
14
|
#
|
16
|
-
#
|
17
|
-
#
|
18
|
-
#
|
19
|
-
#
|
20
|
-
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
21
|
-
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
|
22
|
-
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
23
|
-
# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
24
|
-
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
25
|
-
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
15
|
+
# You should have received a copy of the GNU General Public License
|
16
|
+
# along with this program; if not, write to the Free Software
|
17
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
18
|
+
# 02110-1301, USA.
|
26
19
|
#
|
20
|
+
# THIS SOFTWARE IS PROVIDED BY KALOPA ROBOTICS LIMITED "AS IS" AND
|
21
|
+
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
22
|
+
# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
23
|
+
# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL KALOPA
|
24
|
+
# ROBOTICS LIMITED BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
25
|
+
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
26
|
+
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
27
|
+
# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
28
|
+
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
29
|
+
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
30
|
+
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
31
|
+
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
32
|
+
#
|
33
|
+
# ABSTRACT
|
34
|
+
#
|
35
|
+
require 'serialport'
|
36
|
+
require 'msgpack'
|
27
37
|
|
28
38
|
##
|
29
39
|
# Routines for interfacing with the low-level microcontroller.
|
@@ -33,6 +43,9 @@ module SGS
|
|
33
43
|
attr_accessor :raw_rudder, :raw_sail, :raw_compass, :raw_awa, :raw_tc, :raw_ta
|
34
44
|
attr_accessor :mode, :rudder_m, :rudder_c, :sail_m, :sail_c
|
35
45
|
attr_accessor :bv_m, :bv_c, :bi_m, :bi_c, :bt_m, :bt_c, :sv_m, :sv_c
|
46
|
+
attr_accessor :serial_port
|
47
|
+
attr_reader :alarm_status, :wind, :compass, :actual_rudder, :actual_sail
|
48
|
+
attr_reader :otto_mode, :otto_timestamp, :telemetry
|
36
49
|
|
37
50
|
MODE_INERT = 0
|
38
51
|
MODE_DIAGNOSTICS = 1
|
@@ -49,8 +62,9 @@ module SGS
|
|
49
62
|
# Set up some useful defaults. We assume rudder goes from 0 to 200 as does
|
50
63
|
# the sail angle.
|
51
64
|
def initialize
|
65
|
+
serial_port = nil
|
52
66
|
#
|
53
|
-
|
67
|
+
# Configure the Mx + C values for sail and rudder
|
54
68
|
@rudder_m = 2.5
|
55
69
|
@rudder_c = 100.0
|
56
70
|
@sail_m = 2.0
|
@@ -60,12 +74,183 @@ module SGS
|
|
60
74
|
rudder = 0.0
|
61
75
|
sail = 0.0
|
62
76
|
#
|
77
|
+
# Set some defaults for the read-back parameters
|
78
|
+
@alarm_status = @wind = @compass = @actual_rudder = @actual_sail = 0
|
79
|
+
@otto_mode = 0
|
80
|
+
@otto_timestamp = 1000
|
81
|
+
@telemetry = Array.new(16)
|
82
|
+
#
|
63
83
|
# Set up some basic parameters for battery/solar readings
|
64
84
|
@bv_m = @bi_m = @bt_m = @sv_m = 1.0
|
65
85
|
@bv_c = @bi_c = @bt_c = @sv_c = 0.0
|
66
86
|
super
|
67
87
|
end
|
68
88
|
|
89
|
+
#
|
90
|
+
# Main daemon function (called from executable). The job of
|
91
|
+
# this daemon is to accept commands from the Redis pub/sub
|
92
|
+
# stream and send them to the low-level device, recording the
|
93
|
+
# response and sending it back to the caller. Note that we need
|
94
|
+
# to do an initial sync with the device as it will ignore the
|
95
|
+
# usual serial console boot-up gumph awaiting our sync message.
|
96
|
+
def self.daemon
|
97
|
+
puts "Low-level (Otto) communication subsystem starting up..."
|
98
|
+
otto = new
|
99
|
+
config = SGS::Config.load
|
100
|
+
otto.serial_port = SerialPort.new config.otto_device, config.otto_speed
|
101
|
+
otto.serial_port.read_timeout = 10000
|
102
|
+
#
|
103
|
+
# Start by getting a sync message from Otto.
|
104
|
+
otto.synchronize()
|
105
|
+
#
|
106
|
+
# Run the communications service with Otto. Two threads are used, one for
|
107
|
+
# reading and one for writing. Don't let the command stack get too big.
|
108
|
+
t1 = Thread.new { otto.reader_thread }
|
109
|
+
t2 = Thread.new { otto.writer_thread }
|
110
|
+
t1.join
|
111
|
+
t2.join
|
112
|
+
end
|
113
|
+
|
114
|
+
#
|
115
|
+
# Synchronize with the low-level board by sending CQ messages until
|
116
|
+
# they respond.
|
117
|
+
def synchronize
|
118
|
+
index = 0
|
119
|
+
backoffs = [1, 1, 1, 1, 2, 2, 3, 5, 10, 10, 20, 30, 60]
|
120
|
+
puts "Attempting to synchronize with Otto..."
|
121
|
+
while true do
|
122
|
+
begin
|
123
|
+
@serial_port.puts "@@CQ!"
|
124
|
+
resp = read_data
|
125
|
+
break if resp =~ /^\+CQOK/ or resp =~ /^\+OK/
|
126
|
+
sleep backoffs[index]
|
127
|
+
index += 1 if index < (backoffs.count - 1)
|
128
|
+
end
|
129
|
+
end
|
130
|
+
puts "Synchronization complete!"
|
131
|
+
end
|
132
|
+
|
133
|
+
#
|
134
|
+
# Thread to read status messages from Otto and handle them
|
135
|
+
def reader_thread
|
136
|
+
puts "Starting OTTO reader thread..."
|
137
|
+
while true
|
138
|
+
data = read_data
|
139
|
+
next if data.nil? or data.length == 0
|
140
|
+
case data[0]
|
141
|
+
when '$'
|
142
|
+
#
|
143
|
+
# Status message (every second)
|
144
|
+
parse_status(data[1..])
|
145
|
+
when '@'
|
146
|
+
#
|
147
|
+
# Otto elapsed time (every four seconds)
|
148
|
+
parse_tstamp(data[1..])
|
149
|
+
when '!'
|
150
|
+
#
|
151
|
+
# Otto mode state (every four seconds)
|
152
|
+
parse_mode(data[1..])
|
153
|
+
when '>'
|
154
|
+
#
|
155
|
+
# Telemetry data (every two seconds)
|
156
|
+
parse_telemetry(data[1..])
|
157
|
+
end
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
161
|
+
#
|
162
|
+
# Thread to write commands direct to Otto.
|
163
|
+
def writer_thread
|
164
|
+
puts "Starting OTTO writer thread..."
|
165
|
+
#
|
166
|
+
# Now listen for Redis PUB/SUB requests and act on each one.
|
167
|
+
while true
|
168
|
+
channel, request = SGS::RedisBase.redis.brpop("otto")
|
169
|
+
request = MessagePack.unpack(request)
|
170
|
+
puts "Req:[#{request.inspect}]"
|
171
|
+
cmd = {
|
172
|
+
id: request['id'],
|
173
|
+
args: request['params'].unshift(request['method'])
|
174
|
+
}
|
175
|
+
puts "CMD:#{cmd.inspect}"
|
176
|
+
#
|
177
|
+
# Don't let the command stack get too big.
|
178
|
+
while @command_stack.length > 5
|
179
|
+
sleep 5
|
180
|
+
end
|
181
|
+
|
182
|
+
puts "> Sending command: #{str}"
|
183
|
+
@serial_port.puts "#{str}"
|
184
|
+
|
185
|
+
reply = {
|
186
|
+
'id' => id,
|
187
|
+
'jsonrpc' => '2.0',
|
188
|
+
'result' => result
|
189
|
+
}
|
190
|
+
SGS::RedisBase.redis.rpush(id, MessagePack.pack(reply))
|
191
|
+
SGS::RedisBase.redis.expire(id, 30)
|
192
|
+
end
|
193
|
+
end
|
194
|
+
|
195
|
+
#
|
196
|
+
# Read data from the serial port
|
197
|
+
def read_data
|
198
|
+
begin
|
199
|
+
data = @serial_port.readline.chomp
|
200
|
+
rescue EOFError => error
|
201
|
+
puts "Otto Read Timeout!"
|
202
|
+
data = nil
|
203
|
+
end
|
204
|
+
data
|
205
|
+
end
|
206
|
+
|
207
|
+
#
|
208
|
+
# Parse a status message from Otto. In the form:
|
209
|
+
# 0001:C000:0000
|
210
|
+
def parse_status(status)
|
211
|
+
puts "Parse status: #{status}"
|
212
|
+
args = status.split /:/
|
213
|
+
@alarm_status = args[0].to_i(16)
|
214
|
+
wc = args[1].to_i(16)
|
215
|
+
rs = args[2].to_i(16)
|
216
|
+
@wind = (wc >> 8) & 0xff
|
217
|
+
@compass = (wc & 0xff)
|
218
|
+
@actual_rudder = (rs >> 8) & 0xff
|
219
|
+
@actual_sail = (rs & 0xff)
|
220
|
+
p self
|
221
|
+
self.save_and_publish
|
222
|
+
end
|
223
|
+
|
224
|
+
#
|
225
|
+
# Parse a timestamp message from Otto. In the form: "000FE2" 24 bits
|
226
|
+
# representing the elapsed seconds since Otto restarted.
|
227
|
+
def parse_tstamp(tstamp)
|
228
|
+
puts "Parse timestamp: #{tstamp}"
|
229
|
+
newval = tstamp.to_i(16)
|
230
|
+
if newval < @otto_timestamp
|
231
|
+
puts "ALARM! Otto rebooted (or something)..."
|
232
|
+
end
|
233
|
+
@otto_timestamp = newval
|
234
|
+
end
|
235
|
+
|
236
|
+
#
|
237
|
+
# Parse a mode state message from Otto. In the form: "00". An eight bit
|
238
|
+
# quantity.
|
239
|
+
def parse_mode(mode)
|
240
|
+
puts "Parse Otto Mode State: #{mode}"
|
241
|
+
@otto_mode = mode.to_i(16)
|
242
|
+
end
|
243
|
+
|
244
|
+
#
|
245
|
+
# Parse a telemetry message from Otto. In the form: "7327" where the first
|
246
|
+
# character is the channel (0->9) and the remaining 12 bits are the value.
|
247
|
+
def parse_telemetry(telemetry)
|
248
|
+
puts "Parse Otto Telemetry Data: #{telemetry}"
|
249
|
+
data = telemetry.to_i(16)
|
250
|
+
chan = (data >> 12) & 0xf
|
251
|
+
@telemetry[chan] = data & 0xff
|
252
|
+
end
|
253
|
+
|
69
254
|
#
|
70
255
|
# Set the required rudder angle. Input values range from +/- 40.0 degrees
|
71
256
|
def rudder=(val)
|
data/lib/sgs/redis_base.rb
CHANGED
@@ -1,28 +1,36 @@
|
|
1
1
|
#
|
2
|
-
# Copyright (c) 2013, Kalopa
|
3
|
-
#
|
4
|
-
# GNU General Public License as published by the Free Software Foundation;
|
5
|
-
# either version 2, or (at your option) any later version.
|
2
|
+
# Copyright (c) 2013-2023, Kalopa Robotics Limited. All rights
|
3
|
+
# reserved.
|
6
4
|
#
|
7
|
-
#
|
8
|
-
#
|
9
|
-
#
|
10
|
-
#
|
5
|
+
# This program is free software; you can redistribute it and/or
|
6
|
+
# modify it under the terms of the GNU General Public License as
|
7
|
+
# published by the Free Software Foundation; either version 2 of
|
8
|
+
# the License, or (at your option) any later version.
|
11
9
|
#
|
12
|
-
#
|
13
|
-
#
|
14
|
-
#
|
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.
|
15
14
|
#
|
16
|
-
#
|
17
|
-
#
|
18
|
-
#
|
19
|
-
#
|
20
|
-
#
|
21
|
-
#
|
22
|
-
#
|
23
|
-
#
|
24
|
-
#
|
25
|
-
#
|
15
|
+
# You should have received a copy of the GNU General Public License
|
16
|
+
# along with this program; if not, write to the Free Software
|
17
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
18
|
+
# 02110-1301, USA.
|
19
|
+
#
|
20
|
+
# THIS SOFTWARE IS PROVIDED BY KALOPA ROBOTICS LIMITED "AS IS" AND
|
21
|
+
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
22
|
+
# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
23
|
+
# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL KALOPA
|
24
|
+
# ROBOTICS LIMITED BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
25
|
+
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
26
|
+
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
27
|
+
# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
28
|
+
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
29
|
+
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
30
|
+
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
31
|
+
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
32
|
+
#
|
33
|
+
# ABSTRACT
|
26
34
|
#
|
27
35
|
|
28
36
|
##
|
@@ -133,11 +141,11 @@ module SGS
|
|
133
141
|
#
|
134
142
|
# Inside a multi-block, set all the variables and increment
|
135
143
|
# the count.
|
136
|
-
SGS::RedisBase.redis.multi do
|
144
|
+
SGS::RedisBase.redis.multi do |pipeline|
|
137
145
|
var_list.each do |key, value|
|
138
|
-
|
146
|
+
pipeline.set key, value
|
139
147
|
end
|
140
|
-
|
148
|
+
pipeline.incr count_name
|
141
149
|
end
|
142
150
|
true
|
143
151
|
end
|
data/lib/sgs/report.rb
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (c) 2013-2023, Kalopa Robotics Limited. All rights
|
3
|
+
# reserved.
|
4
|
+
#
|
5
|
+
# This program is free software; you can redistribute it and/or
|
6
|
+
# modify it under the terms of the GNU General Public License as
|
7
|
+
# published by the Free Software Foundation; either version 2 of
|
8
|
+
# the License, or (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
|
+
# You should have received a copy of the GNU General Public License
|
16
|
+
# along with this program; if not, write to the Free Software
|
17
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
18
|
+
# 02110-1301, USA.
|
19
|
+
#
|
20
|
+
# THIS SOFTWARE IS PROVIDED BY KALOPA ROBOTICS LIMITED "AS IS" AND
|
21
|
+
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
22
|
+
# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
23
|
+
# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL KALOPA
|
24
|
+
# ROBOTICS LIMITED BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
25
|
+
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
26
|
+
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
27
|
+
# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
28
|
+
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
29
|
+
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
30
|
+
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
31
|
+
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
32
|
+
#
|
33
|
+
# ABSTRACT
|
34
|
+
#
|
35
|
+
require 'serialport'
|
36
|
+
|
37
|
+
##
|
38
|
+
# Routines for handling sailboat navigation and route planning.
|
39
|
+
#
|
40
|
+
module SGS
|
41
|
+
class Report < RedisBase
|
42
|
+
#
|
43
|
+
# Main daemon function (called from executable)
|
44
|
+
def self.daemon
|
45
|
+
puts "Reporting subsystem starting up..."
|
46
|
+
config = SGS::Config.load
|
47
|
+
sp = SerialPort.new config.comm_device, config.comm_speed
|
48
|
+
sp.read_timeout = 10000
|
49
|
+
loop do
|
50
|
+
sleep 300
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
data/lib/sgs/rpc.rb
CHANGED
@@ -1,28 +1,36 @@
|
|
1
1
|
#
|
2
|
-
# Copyright (c) 2018, Kalopa
|
3
|
-
#
|
4
|
-
# GNU General Public License as published by the Free Software Foundation;
|
5
|
-
# either version 2, or (at your option) any later version.
|
2
|
+
# Copyright (c) 2018-2023, Kalopa Robotics Limited. All rights
|
3
|
+
# reserved.
|
6
4
|
#
|
7
|
-
#
|
8
|
-
#
|
9
|
-
#
|
10
|
-
#
|
5
|
+
# This program is free software; you can redistribute it and/or
|
6
|
+
# modify it under the terms of the GNU General Public License as
|
7
|
+
# published by the Free Software Foundation; either version 2 of
|
8
|
+
# the License, or (at your option) any later version.
|
11
9
|
#
|
12
|
-
#
|
13
|
-
#
|
14
|
-
#
|
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.
|
15
14
|
#
|
16
|
-
#
|
17
|
-
#
|
18
|
-
#
|
19
|
-
#
|
20
|
-
#
|
21
|
-
#
|
22
|
-
#
|
23
|
-
#
|
24
|
-
#
|
25
|
-
#
|
15
|
+
# You should have received a copy of the GNU General Public License
|
16
|
+
# along with this program; if not, write to the Free Software
|
17
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
18
|
+
# 02110-1301, USA.
|
19
|
+
#
|
20
|
+
# THIS SOFTWARE IS PROVIDED BY KALOPA ROBOTICS LIMITED "AS IS" AND
|
21
|
+
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
22
|
+
# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
23
|
+
# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL KALOPA
|
24
|
+
# ROBOTICS LIMITED BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
25
|
+
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
26
|
+
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
27
|
+
# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
28
|
+
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
29
|
+
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
30
|
+
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
31
|
+
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
32
|
+
#
|
33
|
+
# ABSTRACT
|
26
34
|
#
|
27
35
|
|
28
36
|
##
|
data/lib/sgs/timing.rb
CHANGED
@@ -1,28 +1,36 @@
|
|
1
1
|
#
|
2
|
-
# Copyright (c) 2013, Kalopa
|
3
|
-
#
|
4
|
-
#
|
5
|
-
#
|
6
|
-
#
|
7
|
-
#
|
8
|
-
#
|
9
|
-
#
|
10
|
-
#
|
11
|
-
#
|
12
|
-
#
|
13
|
-
#
|
14
|
-
#
|
15
|
-
#
|
16
|
-
#
|
17
|
-
#
|
18
|
-
#
|
19
|
-
#
|
20
|
-
#
|
21
|
-
#
|
22
|
-
#
|
23
|
-
#
|
24
|
-
#
|
25
|
-
#
|
2
|
+
# Copyright (c) 2013-2023, Kalopa Robotics Limited. All rights
|
3
|
+
# reserved.
|
4
|
+
#
|
5
|
+
# This program is free software; you can redistribute it and/or
|
6
|
+
# modify it under the terms of the GNU General Public License as
|
7
|
+
# published by the Free Software Foundation; either version 2 of
|
8
|
+
# the License, or (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
|
+
# You should have received a copy of the GNU General Public License
|
16
|
+
# along with this program; if not, write to the Free Software
|
17
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
18
|
+
# 02110-1301, USA.
|
19
|
+
#
|
20
|
+
# THIS SOFTWARE IS PROVIDED BY KALOPA ROBOTICS LIMITED "AS IS" AND
|
21
|
+
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
22
|
+
# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
23
|
+
# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL KALOPA
|
24
|
+
# ROBOTICS LIMITED BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
25
|
+
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
26
|
+
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
27
|
+
# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
28
|
+
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
29
|
+
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
30
|
+
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
31
|
+
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
32
|
+
#
|
33
|
+
# ABSTRACT
|
26
34
|
#
|
27
35
|
|
28
36
|
##
|
data/lib/sgs/version.rb
CHANGED
@@ -1,3 +1,37 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (c) 2013-2023, Kalopa Robotics Limited. All rights
|
3
|
+
# reserved.
|
4
|
+
#
|
5
|
+
# This program is free software; you can redistribute it and/or
|
6
|
+
# modify it under the terms of the GNU General Public License as
|
7
|
+
# published by the Free Software Foundation; either version 2 of
|
8
|
+
# the License, or (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
|
+
# You should have received a copy of the GNU General Public License
|
16
|
+
# along with this program; if not, write to the Free Software
|
17
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
18
|
+
# 02110-1301, USA.
|
19
|
+
#
|
20
|
+
# THIS SOFTWARE IS PROVIDED BY KALOPA ROBOTICS LIMITED "AS IS" AND
|
21
|
+
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
22
|
+
# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
23
|
+
# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL KALOPA
|
24
|
+
# ROBOTICS LIMITED BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
25
|
+
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
26
|
+
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
27
|
+
# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
28
|
+
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
29
|
+
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
30
|
+
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
31
|
+
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
32
|
+
#
|
33
|
+
# ABSTRACT
|
34
|
+
#
|
1
35
|
module SGS
|
2
|
-
VERSION = "
|
36
|
+
VERSION = "1.5.1"
|
3
37
|
end
|