GPSHowTo

On the node with the car we need to install gpsd daemon with a simple atp-get install gpsd.

Then on the node you start the daemon with:

gpsd -F /root/pipe_out_gpsd /dev/ttyUSB0

then on Norbit you run the following script

require 'net/http'
require 'rexml/document'
require 'oml'
require 'socket'
include REXML

require 'optparse'

op = OptionParser.new

op.banner = "Simple web server \n\n" +
                "Usage: #{ARGV} experiment_id\n" 

o_opts = {:port => 3000, :exp_id => 'bt', :app_name => 'gpsd_client'}

opts = {:port => 2947, :address => '10.40.55.22'}
op.on_tail("-h", "--help", "Show this message") { puts opts; exit }

op.on('--oml-exp-id ID', "OML experiment id [#{o_opts[:exp_id]}]") { |v|
  o_opts[:exp_id] = v
}
op.on('--oml-node-id ID', 'OML node identifier') { |v| o_opts[:node_id] = v }
op.on('--oml-file FILE', 'OML local file to store measurements') { |v|
  o_opts[:file] = v
}
op.on('--oml-server IP', 'OML measurement server address') { |v| o_opts[:server_name] = v }
op.on('--oml-port PORT', 'OML measurement server port [#{o_opts[:server_port]}]') {
  |v| o_opts[:server_port] = v
}
op.on('--gpsd-server SERVER', "GPSD server IP address [#{opts[:address]}]"){ |v| opts[:address] = v}
op.on('--gpsd-server-port PORT', "GPSD server port number #{opts[:port]}]"){ |v| opts[:port] = v.to_i}
db_name = op.parse(ARGV)

class GPSD < OML::MPBase
  name "test" 
  param :lat, :type => :double
  param :long, :type => :double
end

#puts "OOPT: #{o_opts.inspect}" 
#OML::init(o_opts)

#while 1
puts opts[:address]
puts opts[:port]
#ml = run(opts[:address], opts[:port])
 # sleep 1
#end

s = TCPSocket.open(opts[:address], opts[:port])
i = 0
while true 
  s.print("p \n" )
  response = s.gets
  puts response
  left, right = response.split('=')
  puts right.length
  if right.length == 3 
    sleep 1
  else 
    lat, long = right.split
    #puts long
    #puts "inject" 
    Net::HTTP.post_form(URI.parse('http://203.143.174.96/gpsorbit/path.cgi'),
                                        {'time'=>i, 'lat'=>lat, 'lng'=>long})
    #GPSD.inject(lat.to_f, long.to_f)
    sleep 1
    i = i + 1
  end
end

Furthermore to restart the visualisation, we can clean the server at http://ireel.npc.nicta.com.au/gpsorbit/path.cgi