#!/usr/bin/ruby $: << File::dirname(__FILE__) $: << File::join([File::dirname(__FILE__), "..", "SylphideCAM"]) $: << File::join([File::dirname(__FILE__), "..", "..", "common", "ruby"]) require 'log2ad' require 'log2ubx' require 'log2bmp' $stderr.puts "Usage #{__FILE__} log.dat" if ARGV.size < 1 then exit end file_name = ARGV.shift bmp_extractor = BitMapExtractor::new ad_extractor = ADExtractor::new ubx_extractor = UBXExtractor::new # 優先順位があるので順番に注意 extractors = [ bmp_extractor, ad_extractor, ubx_extractor] open(file_name){|io| io.binmode page_count = -1 while !io.eof? page_count += 1 page = io.read(32) extractors.each{|extractor| break if extractor.process(page) } end } base_name = File.basename(file_name, ".*") # 位置の出力(GPS) open("#{base_name}_pos.csv", "w"){|io| ubx_extractor.fetch_llh.each{|itow, llh| lat, long, height = llh io.puts "#{itow}, #{lat}, #{long}, #{height}" } } # 速度の出力(GPS) open("#{base_name}_vel.csv", "w"){|io| ubx_extractor.fetch_velned.each{|itow, velned| v_north, v_east, v_down = velned io.puts "#{itow}, #{v_north}, #{v_east}, #{v_down}" } } # 画像の出力(カメラ) bmp_extractor.bitmaps.each{|time, bitmap| open("#{base_name}_#{sprintf('%09d', time)}.bmp", "w"){|io_bitmap| io_bitmap.print bitmap } } # 加速度の出力(加速度計) open("#{base_name}_ad.csv", "w"){|io| ad_extractor.time_xyz.to_a.sort{|a, b| a[0] <=> b[0]}.each{|item| io.puts item.flatten.join(',') } }