sgslib 0.4.0 → 1.5.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.
- 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
|