From af8ae994ed2e599e981753f82ce8b262db2f765e Mon Sep 17 00:00:00 2001 From: Hao Wu Date: Tue, 11 Dec 2018 20:53:28 -0800 Subject: [PATCH 01/27] Reconstruct --- __init__.py => robot-data-visualizer/__init__.py | 0 robot-data-visualizer/gui/__init__.py | 0 {gui => robot-data-visualizer/gui}/robot_data_visualizer.py | 0 robot-data-visualizer/misc/__init__.py | 0 .../misc}/iterative_closest_point.py | 0 {misc => robot-data-visualizer/misc}/lidar_viewer.py | 0 {misc => robot-data-visualizer/misc}/plot_lidar.py | 0 {misc => robot-data-visualizer/misc}/static_map_example.py | 0 {misc => robot-data-visualizer/misc}/test_data_manager.py | 0 .../misc}/test_static_map_base_layer.py | 0 .../misc}/test_staticmap_for_gps.py | 0 {misc => robot-data-visualizer/misc}/test_threshold_lidar.py | 0 {misc => robot-data-visualizer/misc}/test_time_convert.py | 0 {misc => robot-data-visualizer/misc}/threshold_lidar.py | 0 {misc => robot-data-visualizer/misc}/time_convert.py | 0 robot-data-visualizer/test/__init__.py | 0 {test => robot-data-visualizer/test}/run_tests.py | 0 {test => robot-data-visualizer/test}/test_data_loader.py | 0 {test => robot-data-visualizer/test}/test_data_manager.py | 0 {tools => robot-data-visualizer/tools}/__init__.py | 0 {tools => robot-data-visualizer/tools}/data_loader.py | 0 {tools => robot-data-visualizer/tools}/data_manager.py | 0 {tools => robot-data-visualizer/tools}/download_tar.py | 0 {tools => robot-data-visualizer/tools}/filter_nan.py | 0 {tools => robot-data-visualizer/tools}/get_dates_umich.py | 0 {tools => robot-data-visualizer/tools}/read_hokuyo_30m.py | 0 .../tools}/static_map_base_layer.py | 0 {tools => robot-data-visualizer/tools}/staticmap_for_gps.py | 0 {tools => robot-data-visualizer/tools}/tar_extract.py | 0 {tools => robot-data-visualizer/tools}/view_lidar.py | 0 setup.py | 4 +--- 31 files changed, 1 insertion(+), 3 deletions(-) rename __init__.py => robot-data-visualizer/__init__.py (100%) create mode 100644 robot-data-visualizer/gui/__init__.py rename {gui => robot-data-visualizer/gui}/robot_data_visualizer.py (100%) create mode 100644 robot-data-visualizer/misc/__init__.py rename {misc => robot-data-visualizer/misc}/iterative_closest_point.py (100%) rename {misc => robot-data-visualizer/misc}/lidar_viewer.py (100%) rename {misc => robot-data-visualizer/misc}/plot_lidar.py (100%) rename {misc => robot-data-visualizer/misc}/static_map_example.py (100%) rename {misc => robot-data-visualizer/misc}/test_data_manager.py (100%) rename {misc => robot-data-visualizer/misc}/test_static_map_base_layer.py (100%) rename {misc => robot-data-visualizer/misc}/test_staticmap_for_gps.py (100%) rename {misc => robot-data-visualizer/misc}/test_threshold_lidar.py (100%) rename {misc => robot-data-visualizer/misc}/test_time_convert.py (100%) rename {misc => robot-data-visualizer/misc}/threshold_lidar.py (100%) rename {misc => robot-data-visualizer/misc}/time_convert.py (100%) create mode 100644 robot-data-visualizer/test/__init__.py rename {test => robot-data-visualizer/test}/run_tests.py (100%) rename {test => robot-data-visualizer/test}/test_data_loader.py (100%) rename {test => robot-data-visualizer/test}/test_data_manager.py (100%) rename {tools => robot-data-visualizer/tools}/__init__.py (100%) rename {tools => robot-data-visualizer/tools}/data_loader.py (100%) rename {tools => robot-data-visualizer/tools}/data_manager.py (100%) rename {tools => robot-data-visualizer/tools}/download_tar.py (100%) rename {tools => robot-data-visualizer/tools}/filter_nan.py (100%) rename {tools => robot-data-visualizer/tools}/get_dates_umich.py (100%) rename {tools => robot-data-visualizer/tools}/read_hokuyo_30m.py (100%) rename {tools => robot-data-visualizer/tools}/static_map_base_layer.py (100%) rename {tools => robot-data-visualizer/tools}/staticmap_for_gps.py (100%) rename {tools => robot-data-visualizer/tools}/tar_extract.py (100%) rename {tools => robot-data-visualizer/tools}/view_lidar.py (100%) diff --git a/__init__.py b/robot-data-visualizer/__init__.py similarity index 100% rename from __init__.py rename to robot-data-visualizer/__init__.py diff --git a/robot-data-visualizer/gui/__init__.py b/robot-data-visualizer/gui/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/gui/robot_data_visualizer.py b/robot-data-visualizer/gui/robot_data_visualizer.py similarity index 100% rename from gui/robot_data_visualizer.py rename to robot-data-visualizer/gui/robot_data_visualizer.py diff --git a/robot-data-visualizer/misc/__init__.py b/robot-data-visualizer/misc/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/misc/iterative_closest_point.py b/robot-data-visualizer/misc/iterative_closest_point.py similarity index 100% rename from misc/iterative_closest_point.py rename to robot-data-visualizer/misc/iterative_closest_point.py diff --git a/misc/lidar_viewer.py b/robot-data-visualizer/misc/lidar_viewer.py similarity index 100% rename from misc/lidar_viewer.py rename to robot-data-visualizer/misc/lidar_viewer.py diff --git a/misc/plot_lidar.py b/robot-data-visualizer/misc/plot_lidar.py similarity index 100% rename from misc/plot_lidar.py rename to robot-data-visualizer/misc/plot_lidar.py diff --git a/misc/static_map_example.py b/robot-data-visualizer/misc/static_map_example.py similarity index 100% rename from misc/static_map_example.py rename to robot-data-visualizer/misc/static_map_example.py diff --git a/misc/test_data_manager.py b/robot-data-visualizer/misc/test_data_manager.py similarity index 100% rename from misc/test_data_manager.py rename to robot-data-visualizer/misc/test_data_manager.py diff --git a/misc/test_static_map_base_layer.py b/robot-data-visualizer/misc/test_static_map_base_layer.py similarity index 100% rename from misc/test_static_map_base_layer.py rename to robot-data-visualizer/misc/test_static_map_base_layer.py diff --git a/misc/test_staticmap_for_gps.py b/robot-data-visualizer/misc/test_staticmap_for_gps.py similarity index 100% rename from misc/test_staticmap_for_gps.py rename to robot-data-visualizer/misc/test_staticmap_for_gps.py diff --git a/misc/test_threshold_lidar.py b/robot-data-visualizer/misc/test_threshold_lidar.py similarity index 100% rename from misc/test_threshold_lidar.py rename to robot-data-visualizer/misc/test_threshold_lidar.py diff --git a/misc/test_time_convert.py b/robot-data-visualizer/misc/test_time_convert.py similarity index 100% rename from misc/test_time_convert.py rename to robot-data-visualizer/misc/test_time_convert.py diff --git a/misc/threshold_lidar.py b/robot-data-visualizer/misc/threshold_lidar.py similarity index 100% rename from misc/threshold_lidar.py rename to robot-data-visualizer/misc/threshold_lidar.py diff --git a/misc/time_convert.py b/robot-data-visualizer/misc/time_convert.py similarity index 100% rename from misc/time_convert.py rename to robot-data-visualizer/misc/time_convert.py diff --git a/robot-data-visualizer/test/__init__.py b/robot-data-visualizer/test/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/test/run_tests.py b/robot-data-visualizer/test/run_tests.py similarity index 100% rename from test/run_tests.py rename to robot-data-visualizer/test/run_tests.py diff --git a/test/test_data_loader.py b/robot-data-visualizer/test/test_data_loader.py similarity index 100% rename from test/test_data_loader.py rename to robot-data-visualizer/test/test_data_loader.py diff --git a/test/test_data_manager.py b/robot-data-visualizer/test/test_data_manager.py similarity index 100% rename from test/test_data_manager.py rename to robot-data-visualizer/test/test_data_manager.py diff --git a/tools/__init__.py b/robot-data-visualizer/tools/__init__.py similarity index 100% rename from tools/__init__.py rename to robot-data-visualizer/tools/__init__.py diff --git a/tools/data_loader.py b/robot-data-visualizer/tools/data_loader.py similarity index 100% rename from tools/data_loader.py rename to robot-data-visualizer/tools/data_loader.py diff --git a/tools/data_manager.py b/robot-data-visualizer/tools/data_manager.py similarity index 100% rename from tools/data_manager.py rename to robot-data-visualizer/tools/data_manager.py diff --git a/tools/download_tar.py b/robot-data-visualizer/tools/download_tar.py similarity index 100% rename from tools/download_tar.py rename to robot-data-visualizer/tools/download_tar.py diff --git a/tools/filter_nan.py b/robot-data-visualizer/tools/filter_nan.py similarity index 100% rename from tools/filter_nan.py rename to robot-data-visualizer/tools/filter_nan.py diff --git a/tools/get_dates_umich.py b/robot-data-visualizer/tools/get_dates_umich.py similarity index 100% rename from tools/get_dates_umich.py rename to robot-data-visualizer/tools/get_dates_umich.py diff --git a/tools/read_hokuyo_30m.py b/robot-data-visualizer/tools/read_hokuyo_30m.py similarity index 100% rename from tools/read_hokuyo_30m.py rename to robot-data-visualizer/tools/read_hokuyo_30m.py diff --git a/tools/static_map_base_layer.py b/robot-data-visualizer/tools/static_map_base_layer.py similarity index 100% rename from tools/static_map_base_layer.py rename to robot-data-visualizer/tools/static_map_base_layer.py diff --git a/tools/staticmap_for_gps.py b/robot-data-visualizer/tools/staticmap_for_gps.py similarity index 100% rename from tools/staticmap_for_gps.py rename to robot-data-visualizer/tools/staticmap_for_gps.py diff --git a/tools/tar_extract.py b/robot-data-visualizer/tools/tar_extract.py similarity index 100% rename from tools/tar_extract.py rename to robot-data-visualizer/tools/tar_extract.py diff --git a/tools/view_lidar.py b/robot-data-visualizer/tools/view_lidar.py similarity index 100% rename from tools/view_lidar.py rename to robot-data-visualizer/tools/view_lidar.py diff --git a/setup.py b/setup.py index 0ffe5b6..0ae7213 100644 --- a/setup.py +++ b/setup.py @@ -2,12 +2,10 @@ from setuptools import setup, find_packages PACKAGES = find_packages() -PACKAGES.append('gui') -PACKAGES.append('misc') setup( name = "robot-data-visualizer", - version = "0.3", + version = "0.4", url='https://github.com/klatimer/robot-data-visualizer', license='MIT', packages=PACKAGES, From 8a36ad3bc0b4fd588c295c7549cd56516a1c25f0 Mon Sep 17 00:00:00 2001 From: Hao Wu Date: Tue, 11 Dec 2018 21:16:54 -0800 Subject: [PATCH 02/27] Modify .travis.yml --- .travis.yml | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/.travis.yml b/.travis.yml index 4d9eaff..5e5f9d2 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,16 +4,14 @@ python: - '3.5' cache: pip before_install: - - chmod +x test/run_tests.py - - chmod +x test/test_data_loader.py - - chmod +x test/test_data_manager.py + - chmod +x robot-data-visualizer/test/run_tests.py + - chmod +x robot-data-visualizer/test/test_data_loader.py + - chmod +x robot-data-visualizer/test/test_data_manager.py install: - pip install -r requirements.txt script: - - python test/run_tests.py + - python robot-data-visualizer/test/run_tests.py branches: only: - master - dev - - ken-dev - - hao-dev \ No newline at end of file From 4cb8aadb63b43e1e90003f248ad0cb30b3ebe820 Mon Sep 17 00:00:00 2001 From: Hao Wu Date: Tue, 11 Dec 2018 21:22:09 -0800 Subject: [PATCH 03/27] travis work for only master --- .travis.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 5e5f9d2..3bab978 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,4 +14,3 @@ script: branches: only: - master - - dev From cbcd547874ab3498fd9dddb58fd9674251770430 Mon Sep 17 00:00:00 2001 From: Hao Wu Date: Tue, 11 Dec 2018 21:26:06 -0800 Subject: [PATCH 04/27] optim the test files --- robot-data-visualizer/test/test_data_loader.py | 1 - robot-data-visualizer/test/test_data_manager.py | 1 - 2 files changed, 2 deletions(-) diff --git a/robot-data-visualizer/test/test_data_loader.py b/robot-data-visualizer/test/test_data_loader.py index 844771c..a545604 100644 --- a/robot-data-visualizer/test/test_data_loader.py +++ b/robot-data-visualizer/test/test_data_loader.py @@ -1,7 +1,6 @@ import unittest import numpy as np import sys -sys.path.append('.') sys.path.append('..') import tools.data_manager as DM diff --git a/robot-data-visualizer/test/test_data_manager.py b/robot-data-visualizer/test/test_data_manager.py index f343fc9..5681b5b 100644 --- a/robot-data-visualizer/test/test_data_manager.py +++ b/robot-data-visualizer/test/test_data_manager.py @@ -1,7 +1,6 @@ import unittest import sys import os -sys.path.append('.') sys.path.append('..') from tools.data_manager import DataManager From ccf827d9a58d34600f8c1689b67238148bd1db11 Mon Sep 17 00:00:00 2001 From: Hao Wu Date: Tue, 11 Dec 2018 21:54:31 -0800 Subject: [PATCH 05/27] package change in test --- .travis.yml | 8 ++++---- robot-data-visualizer/{ => tools}/test/__init__.py | 0 robot-data-visualizer/{ => tools}/test/run_tests.py | 0 .../{ => tools}/test/test_data_loader.py | 0 .../{ => tools}/test/test_data_manager.py | 1 + 5 files changed, 5 insertions(+), 4 deletions(-) rename robot-data-visualizer/{ => tools}/test/__init__.py (100%) rename robot-data-visualizer/{ => tools}/test/run_tests.py (100%) rename robot-data-visualizer/{ => tools}/test/test_data_loader.py (100%) rename robot-data-visualizer/{ => tools}/test/test_data_manager.py (99%) diff --git a/.travis.yml b/.travis.yml index 3bab978..9a6a67e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,13 +4,13 @@ python: - '3.5' cache: pip before_install: - - chmod +x robot-data-visualizer/test/run_tests.py - - chmod +x robot-data-visualizer/test/test_data_loader.py - - chmod +x robot-data-visualizer/test/test_data_manager.py + - chmod +x robot-data-visualizer/tools/test/run_tests.py + - chmod +x robot-data-visualizer/tools/test/test_data_loader.py + - chmod +x robot-data-visualizer/tools/test/test_data_manager.py install: - pip install -r requirements.txt script: - - python robot-data-visualizer/test/run_tests.py + - python robot-data-visualizer/tools/test/run_tests.py branches: only: - master diff --git a/robot-data-visualizer/test/__init__.py b/robot-data-visualizer/tools/test/__init__.py similarity index 100% rename from robot-data-visualizer/test/__init__.py rename to robot-data-visualizer/tools/test/__init__.py diff --git a/robot-data-visualizer/test/run_tests.py b/robot-data-visualizer/tools/test/run_tests.py similarity index 100% rename from robot-data-visualizer/test/run_tests.py rename to robot-data-visualizer/tools/test/run_tests.py diff --git a/robot-data-visualizer/test/test_data_loader.py b/robot-data-visualizer/tools/test/test_data_loader.py similarity index 100% rename from robot-data-visualizer/test/test_data_loader.py rename to robot-data-visualizer/tools/test/test_data_loader.py diff --git a/robot-data-visualizer/test/test_data_manager.py b/robot-data-visualizer/tools/test/test_data_manager.py similarity index 99% rename from robot-data-visualizer/test/test_data_manager.py rename to robot-data-visualizer/tools/test/test_data_manager.py index 5681b5b..af3ef5c 100644 --- a/robot-data-visualizer/test/test_data_manager.py +++ b/robot-data-visualizer/tools/test/test_data_manager.py @@ -1,5 +1,6 @@ import unittest import sys + import os sys.path.append('..') from tools.data_manager import DataManager From 1c6304bf0f3ffe23d775eef4593c15b4acae4119 Mon Sep 17 00:00:00 2001 From: Hao Wu Date: Tue, 11 Dec 2018 22:24:42 -0800 Subject: [PATCH 06/27] A big reconstruct --- .travis.yml | 10 +++---- robot-data-visualizer/gui/__init__.py | 0 robot-data-visualizer/misc/__init__.py | 0 .../misc/test_data_manager.py | 28 ------------------- robot-data-visualizer/tools/test/__init__.py | 0 .../__init__.py | 2 +- .../data_loader.py | 0 .../data_manager.py | 8 +++--- .../download_tar.py | 0 .../filter_nan.py | 0 .../get_dates_umich.py | 0 .../iterative_closest_point.py | 4 +-- .../lidar_viewer.py | 11 +++----- .../plot_lidar.py | 0 .../read_hokuyo_30m.py | 0 .../robot_data_visualizer.py | 10 +++---- .../static_map_base_layer.py | 0 .../staticmap_for_gps.py | 4 +-- .../tar_extract.py | 0 .../test}/__init__.py | 0 .../test/run_tests.py | 0 .../test}/static_map_example.py | 2 +- .../test/test_data_loader.py | 6 ++-- .../test/test_data_manager.py | 4 +-- .../test}/test_static_map_base_layer.py | 0 .../test}/test_staticmap_for_gps.py | 0 .../test}/test_threshold_lidar.py | 0 .../test}/test_time_convert.py | 0 .../threshold_lidar.py | 0 .../time_convert.py | 0 .../view_lidar.py | 0 setup.py | 4 +-- 32 files changed, 29 insertions(+), 64 deletions(-) delete mode 100644 robot-data-visualizer/gui/__init__.py delete mode 100644 robot-data-visualizer/misc/__init__.py delete mode 100644 robot-data-visualizer/misc/test_data_manager.py delete mode 100644 robot-data-visualizer/tools/test/__init__.py rename {robot-data-visualizer/tools => robot_data_visualizer}/__init__.py (91%) rename {robot-data-visualizer/tools => robot_data_visualizer}/data_loader.py (100%) rename {robot-data-visualizer/tools => robot_data_visualizer}/data_manager.py (94%) rename {robot-data-visualizer/tools => robot_data_visualizer}/download_tar.py (100%) rename {robot-data-visualizer/tools => robot_data_visualizer}/filter_nan.py (100%) rename {robot-data-visualizer/tools => robot_data_visualizer}/get_dates_umich.py (100%) rename {robot-data-visualizer/misc => robot_data_visualizer}/iterative_closest_point.py (99%) rename {robot-data-visualizer/misc => robot_data_visualizer}/lidar_viewer.py (88%) rename {robot-data-visualizer/misc => robot_data_visualizer}/plot_lidar.py (100%) rename {robot-data-visualizer/tools => robot_data_visualizer}/read_hokuyo_30m.py (100%) rename {robot-data-visualizer/gui => robot_data_visualizer}/robot_data_visualizer.py (98%) rename {robot-data-visualizer/tools => robot_data_visualizer}/static_map_base_layer.py (100%) rename {robot-data-visualizer/tools => robot_data_visualizer}/staticmap_for_gps.py (96%) rename {robot-data-visualizer/tools => robot_data_visualizer}/tar_extract.py (100%) rename {robot-data-visualizer => robot_data_visualizer/test}/__init__.py (100%) rename {robot-data-visualizer/tools => robot_data_visualizer}/test/run_tests.py (100%) rename {robot-data-visualizer/misc => robot_data_visualizer/test}/static_map_example.py (89%) rename {robot-data-visualizer/tools => robot_data_visualizer}/test/test_data_loader.py (87%) rename {robot-data-visualizer/tools => robot_data_visualizer}/test/test_data_manager.py (94%) rename {robot-data-visualizer/misc => robot_data_visualizer/test}/test_static_map_base_layer.py (100%) rename {robot-data-visualizer/misc => robot_data_visualizer/test}/test_staticmap_for_gps.py (100%) rename {robot-data-visualizer/misc => robot_data_visualizer/test}/test_threshold_lidar.py (100%) rename {robot-data-visualizer/misc => robot_data_visualizer/test}/test_time_convert.py (100%) rename {robot-data-visualizer/misc => robot_data_visualizer}/threshold_lidar.py (100%) rename {robot-data-visualizer/misc => robot_data_visualizer}/time_convert.py (100%) rename {robot-data-visualizer/tools => robot_data_visualizer}/view_lidar.py (100%) diff --git a/.travis.yml b/.travis.yml index 9a6a67e..d3caa54 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,16 +1,16 @@ sudo: required language: python python: - - '3.5' + - '3.7' cache: pip before_install: - - chmod +x robot-data-visualizer/tools/test/run_tests.py - - chmod +x robot-data-visualizer/tools/test/test_data_loader.py - - chmod +x robot-data-visualizer/tools/test/test_data_manager.py + - chmod +x robot_data_visualizer/test/run_tests.py + - chmod +x robot_data_visualizer/test/test_data_loader.py + - chmod +x robot_data_visualizer/test/test_data_manager.py install: - pip install -r requirements.txt script: - - python robot-data-visualizer/tools/test/run_tests.py + - python robot_data_visualizer/test/run_tests.py branches: only: - master diff --git a/robot-data-visualizer/gui/__init__.py b/robot-data-visualizer/gui/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/robot-data-visualizer/misc/__init__.py b/robot-data-visualizer/misc/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/robot-data-visualizer/misc/test_data_manager.py b/robot-data-visualizer/misc/test_data_manager.py deleted file mode 100644 index a9e42a7..0000000 --- a/robot-data-visualizer/misc/test_data_manager.py +++ /dev/null @@ -1,28 +0,0 @@ -# Test an import of the DataManager class - -import sys -sys.path.append('..') - -import traceback -from tools.data_manager import DataManager - - -def main(): - try: - # Initialize with desired date from the UMich dataset - dm = DataManager('2013-01-10') - # Download and extract sensor data - dm.setup_data_files('sensor_data') - # Download and extract data for the hokuyo lidar scanner - dm.setup_data_files('hokuyo') - # load gps - dm.load_gps() - # load first 100 scans of lidar - dm.load_lidar(100) - print('Successful load of data') - except Exception as ex: - print(ex) - traceback.print_exc() - -if __name__ == '__main__': - main() \ No newline at end of file diff --git a/robot-data-visualizer/tools/test/__init__.py b/robot-data-visualizer/tools/test/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/robot-data-visualizer/tools/__init__.py b/robot_data_visualizer/__init__.py similarity index 91% rename from robot-data-visualizer/tools/__init__.py rename to robot_data_visualizer/__init__.py index 4e48082..81e3032 100644 --- a/robot-data-visualizer/tools/__init__.py +++ b/robot_data_visualizer/__init__.py @@ -9,4 +9,4 @@ from .read_hokuyo_30m import read_hokuyo from .tar_extract import tar_extract -__all__ = ['DataLoader', 'DataManager', 'download_tar', 'get_dates_umich', 'map_for_gps', 'read_hokuyo', 'StaticMapBaseLayer', 'tar_extract', 'hokuyo_plot', 'threshold_lidar_pts'] \ No newline at end of file +__all__ = ['DataLoader', 'DataManager', 'download_tar', 'get_dates_umich', 'map_for_gps', 'read_hokuyo', 'StaticMapBaseLayer', 'tar_extract', 'hokuyo_plot', 'threshold_lidar_pts'] diff --git a/robot-data-visualizer/tools/data_loader.py b/robot_data_visualizer/data_loader.py similarity index 100% rename from robot-data-visualizer/tools/data_loader.py rename to robot_data_visualizer/data_loader.py diff --git a/robot-data-visualizer/tools/data_manager.py b/robot_data_visualizer/data_manager.py similarity index 94% rename from robot-data-visualizer/tools/data_manager.py rename to robot_data_visualizer/data_manager.py index 1327b6d..76d4741 100644 --- a/robot-data-visualizer/tools/data_manager.py +++ b/robot_data_visualizer/data_manager.py @@ -1,9 +1,9 @@ import os import pickle -from tools.data_loader import DataLoader -from tools.read_hokuyo_30m import read_hokuyo -from tools.tar_extract import tar_extract -from tools.download_tar import download_tar +from .data_loader import DataLoader +from .read_hokuyo_30m import read_hokuyo +from .tar_extract import tar_extract +from .download_tar import download_tar class DataManager: diff --git a/robot-data-visualizer/tools/download_tar.py b/robot_data_visualizer/download_tar.py similarity index 100% rename from robot-data-visualizer/tools/download_tar.py rename to robot_data_visualizer/download_tar.py diff --git a/robot-data-visualizer/tools/filter_nan.py b/robot_data_visualizer/filter_nan.py similarity index 100% rename from robot-data-visualizer/tools/filter_nan.py rename to robot_data_visualizer/filter_nan.py diff --git a/robot-data-visualizer/tools/get_dates_umich.py b/robot_data_visualizer/get_dates_umich.py similarity index 100% rename from robot-data-visualizer/tools/get_dates_umich.py rename to robot_data_visualizer/get_dates_umich.py diff --git a/robot-data-visualizer/misc/iterative_closest_point.py b/robot_data_visualizer/iterative_closest_point.py similarity index 99% rename from robot-data-visualizer/misc/iterative_closest_point.py rename to robot_data_visualizer/iterative_closest_point.py index d76feb4..471692b 100644 --- a/robot-data-visualizer/misc/iterative_closest_point.py +++ b/robot_data_visualizer/iterative_closest_point.py @@ -13,11 +13,9 @@ import numpy as np import matplotlib.pyplot as plt import datetime -import sys -sys.path.append('..') import traceback -from tools.data_manager import DataManager +from .data_manager import DataManager # ICP parameters EPS = 0.0001 diff --git a/robot-data-visualizer/misc/lidar_viewer.py b/robot_data_visualizer/lidar_viewer.py similarity index 88% rename from robot-data-visualizer/misc/lidar_viewer.py rename to robot_data_visualizer/lidar_viewer.py index c7fe3b2..54e51f5 100644 --- a/robot-data-visualizer/misc/lidar_viewer.py +++ b/robot_data_visualizer/lidar_viewer.py @@ -1,12 +1,9 @@ """lidar_viewer visualizes lidar data by ploting it in matplotlib window.""" +from .data_manager import DataManager +from .time_convert import epoch_to_date_time +from .plot_lidar import hokuyo_plot +from .threshold_lidar import threshold_lidar_pts -import sys - -from tools.data_manager import DataManager -from time_convert import epoch_to_date_time -from plot_lidar import hokuyo_plot -from threshold_lidar import threshold_lidar_pts -sys.path.append('..') def lidar_viewer(date, num_samples, step_size=40, pickled=False, delete_pickle=False): """ lidar_viewer visualizes lidar data by ploting it in matplotlib window. diff --git a/robot-data-visualizer/misc/plot_lidar.py b/robot_data_visualizer/plot_lidar.py similarity index 100% rename from robot-data-visualizer/misc/plot_lidar.py rename to robot_data_visualizer/plot_lidar.py diff --git a/robot-data-visualizer/tools/read_hokuyo_30m.py b/robot_data_visualizer/read_hokuyo_30m.py similarity index 100% rename from robot-data-visualizer/tools/read_hokuyo_30m.py rename to robot_data_visualizer/read_hokuyo_30m.py diff --git a/robot-data-visualizer/gui/robot_data_visualizer.py b/robot_data_visualizer/robot_data_visualizer.py similarity index 98% rename from robot-data-visualizer/gui/robot_data_visualizer.py rename to robot_data_visualizer/robot_data_visualizer.py index c8f9b47..36dcd25 100644 --- a/robot-data-visualizer/gui/robot_data_visualizer.py +++ b/robot_data_visualizer/robot_data_visualizer.py @@ -17,11 +17,11 @@ import tkinter as tk -from tools.get_dates_umich import get_dates_umich -from tools.staticmap_for_gps import map_for_gps -from tools.data_manager import DataManager -from tools.view_lidar import hokuyo_plot -from tools.view_lidar import threshold_lidar_pts +from .get_dates_umich import get_dates_umich +from .staticmap_for_gps import map_for_gps +from .data_manager import DataManager +from .view_lidar import hokuyo_plot +from .view_lidar import threshold_lidar_pts class VisualizerFrame(tk.Frame): diff --git a/robot-data-visualizer/tools/static_map_base_layer.py b/robot_data_visualizer/static_map_base_layer.py similarity index 100% rename from robot-data-visualizer/tools/static_map_base_layer.py rename to robot_data_visualizer/static_map_base_layer.py diff --git a/robot-data-visualizer/tools/staticmap_for_gps.py b/robot_data_visualizer/staticmap_for_gps.py similarity index 96% rename from robot-data-visualizer/tools/staticmap_for_gps.py rename to robot_data_visualizer/staticmap_for_gps.py index 54fd019..d68ba77 100644 --- a/robot-data-visualizer/tools/staticmap_for_gps.py +++ b/robot_data_visualizer/staticmap_for_gps.py @@ -2,8 +2,8 @@ import os from staticmap import Line -from tools.static_map_base_layer import StaticMapBaseLayer -from tools.data_manager import DataManager +from .static_map_base_layer import StaticMapBaseLayer +from .data_manager import DataManager def generate_coordinates(data_dict): ''' diff --git a/robot-data-visualizer/tools/tar_extract.py b/robot_data_visualizer/tar_extract.py similarity index 100% rename from robot-data-visualizer/tools/tar_extract.py rename to robot_data_visualizer/tar_extract.py diff --git a/robot-data-visualizer/__init__.py b/robot_data_visualizer/test/__init__.py similarity index 100% rename from robot-data-visualizer/__init__.py rename to robot_data_visualizer/test/__init__.py diff --git a/robot-data-visualizer/tools/test/run_tests.py b/robot_data_visualizer/test/run_tests.py similarity index 100% rename from robot-data-visualizer/tools/test/run_tests.py rename to robot_data_visualizer/test/run_tests.py diff --git a/robot-data-visualizer/misc/static_map_example.py b/robot_data_visualizer/test/static_map_example.py similarity index 89% rename from robot-data-visualizer/misc/static_map_example.py rename to robot_data_visualizer/test/static_map_example.py index c928667..72c574d 100644 --- a/robot-data-visualizer/misc/static_map_example.py +++ b/robot_data_visualizer/test/static_map_example.py @@ -2,7 +2,7 @@ A smoke test to use staticmap to generate northseatte.png without line features. ''' from staticmap import Line -from tools.static_map_base_layer import StaticMap +from ..static_map_base_layer import StaticMap m = StaticMap(600, 600, 80) diff --git a/robot-data-visualizer/tools/test/test_data_loader.py b/robot_data_visualizer/test/test_data_loader.py similarity index 87% rename from robot-data-visualizer/tools/test/test_data_loader.py rename to robot_data_visualizer/test/test_data_loader.py index a545604..9b3c621 100644 --- a/robot-data-visualizer/tools/test/test_data_loader.py +++ b/robot_data_visualizer/test/test_data_loader.py @@ -1,12 +1,10 @@ import unittest import numpy as np -import sys -sys.path.append('..') -import tools.data_manager as DM +from robot_data_visualizer import DataManager class BasicTest(unittest.TestCase): def setUp(self): - self.Datamanager = DM.DataManager('2013-01-10') + self.Datamanager = DataManager('2013-01-10') self.Datamanager.setup_data_files('sensor_data') self.Datamanager.load_gps() diff --git a/robot-data-visualizer/tools/test/test_data_manager.py b/robot_data_visualizer/test/test_data_manager.py similarity index 94% rename from robot-data-visualizer/tools/test/test_data_manager.py rename to robot_data_visualizer/test/test_data_manager.py index af3ef5c..61a417a 100644 --- a/robot-data-visualizer/tools/test/test_data_manager.py +++ b/robot_data_visualizer/test/test_data_manager.py @@ -2,8 +2,8 @@ import sys import os -sys.path.append('..') -from tools.data_manager import DataManager +# sys.path.append('..') +from robot_data_visualizer import DataManager class TestDataManager(unittest.TestCase): diff --git a/robot-data-visualizer/misc/test_static_map_base_layer.py b/robot_data_visualizer/test/test_static_map_base_layer.py similarity index 100% rename from robot-data-visualizer/misc/test_static_map_base_layer.py rename to robot_data_visualizer/test/test_static_map_base_layer.py diff --git a/robot-data-visualizer/misc/test_staticmap_for_gps.py b/robot_data_visualizer/test/test_staticmap_for_gps.py similarity index 100% rename from robot-data-visualizer/misc/test_staticmap_for_gps.py rename to robot_data_visualizer/test/test_staticmap_for_gps.py diff --git a/robot-data-visualizer/misc/test_threshold_lidar.py b/robot_data_visualizer/test/test_threshold_lidar.py similarity index 100% rename from robot-data-visualizer/misc/test_threshold_lidar.py rename to robot_data_visualizer/test/test_threshold_lidar.py diff --git a/robot-data-visualizer/misc/test_time_convert.py b/robot_data_visualizer/test/test_time_convert.py similarity index 100% rename from robot-data-visualizer/misc/test_time_convert.py rename to robot_data_visualizer/test/test_time_convert.py diff --git a/robot-data-visualizer/misc/threshold_lidar.py b/robot_data_visualizer/threshold_lidar.py similarity index 100% rename from robot-data-visualizer/misc/threshold_lidar.py rename to robot_data_visualizer/threshold_lidar.py diff --git a/robot-data-visualizer/misc/time_convert.py b/robot_data_visualizer/time_convert.py similarity index 100% rename from robot-data-visualizer/misc/time_convert.py rename to robot_data_visualizer/time_convert.py diff --git a/robot-data-visualizer/tools/view_lidar.py b/robot_data_visualizer/view_lidar.py similarity index 100% rename from robot-data-visualizer/tools/view_lidar.py rename to robot_data_visualizer/view_lidar.py diff --git a/setup.py b/setup.py index 0ae7213..d28f7f1 100644 --- a/setup.py +++ b/setup.py @@ -4,9 +4,9 @@ PACKAGES = find_packages() setup( - name = "robot-data-visualizer", + name = "robot_data_visualizer", version = "0.4", - url='https://github.com/klatimer/robot-data-visualizer', + url='https://github.com/klatimer/robot_data_visualizer', license='MIT', packages=PACKAGES, author='Ray Adler, Ken Latimer, Hao Wu, Robin Li', From ed206484d3b3352ec4ec940de69388ceab4c3332 Mon Sep 17 00:00:00 2001 From: Hao Wu Date: Tue, 11 Dec 2018 22:27:51 -0800 Subject: [PATCH 07/27] change python version --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index d3caa54..7144dbd 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,7 @@ sudo: required language: python python: - - '3.7' + - '3.5' cache: pip before_install: - chmod +x robot_data_visualizer/test/run_tests.py From 24316125b0c5b62664261219c9c1c37b05019cdb Mon Sep 17 00:00:00 2001 From: Hao Wu Date: Tue, 11 Dec 2018 22:38:45 -0800 Subject: [PATCH 08/27] change test package --- robot_data_visualizer/test/static_map_example.py | 2 +- robot_data_visualizer/test/test_data_loader.py | 2 ++ robot_data_visualizer/test/test_data_manager.py | 2 +- robot_data_visualizer/test/test_static_map_base_layer.py | 2 +- robot_data_visualizer/test/test_staticmap_for_gps.py | 6 +++--- robot_data_visualizer/test/test_threshold_lidar.py | 6 ++++-- robot_data_visualizer/test/test_time_convert.py | 3 ++- 7 files changed, 14 insertions(+), 9 deletions(-) diff --git a/robot_data_visualizer/test/static_map_example.py b/robot_data_visualizer/test/static_map_example.py index 72c574d..15b0d12 100644 --- a/robot_data_visualizer/test/static_map_example.py +++ b/robot_data_visualizer/test/static_map_example.py @@ -2,7 +2,7 @@ A smoke test to use staticmap to generate northseatte.png without line features. ''' from staticmap import Line -from ..static_map_base_layer import StaticMap +from robot_data_visualizer.static_map_base_layer import StaticMap m = StaticMap(600, 600, 80) diff --git a/robot_data_visualizer/test/test_data_loader.py b/robot_data_visualizer/test/test_data_loader.py index 9b3c621..6fb3083 100644 --- a/robot_data_visualizer/test/test_data_loader.py +++ b/robot_data_visualizer/test/test_data_loader.py @@ -1,5 +1,7 @@ import unittest import numpy as np +import sys +sys.path.append('..') from robot_data_visualizer import DataManager class BasicTest(unittest.TestCase): diff --git a/robot_data_visualizer/test/test_data_manager.py b/robot_data_visualizer/test/test_data_manager.py index 61a417a..1185a87 100644 --- a/robot_data_visualizer/test/test_data_manager.py +++ b/robot_data_visualizer/test/test_data_manager.py @@ -2,7 +2,7 @@ import sys import os -# sys.path.append('..') +sys.path.append('..') from robot_data_visualizer import DataManager class TestDataManager(unittest.TestCase): diff --git a/robot_data_visualizer/test/test_static_map_base_layer.py b/robot_data_visualizer/test/test_static_map_base_layer.py index 7ea0b01..47818af 100644 --- a/robot_data_visualizer/test/test_static_map_base_layer.py +++ b/robot_data_visualizer/test/test_static_map_base_layer.py @@ -5,7 +5,7 @@ sys.path.append('..') from staticmap import Line -from tools.static_map_base_layer import StaticMapBaseLayer +from robot_data_visualizer.static_map_base_layer import StaticMapBaseLayer m = StaticMapBaseLayer(600, 600, 80) diff --git a/robot_data_visualizer/test/test_staticmap_for_gps.py b/robot_data_visualizer/test/test_staticmap_for_gps.py index 8aefa9b..abc6d91 100644 --- a/robot_data_visualizer/test/test_staticmap_for_gps.py +++ b/robot_data_visualizer/test/test_staticmap_for_gps.py @@ -7,9 +7,9 @@ import sys sys.path.append('..') -from tools.data_manager import DataManager -from tools.static_map_base_layer import StaticMapBaseLayer -from tools.staticmap_for_gps import generate_coordinates +from robot_data_visualizer.data_manager import DataManager +from robot_data_visualizer.static_map_base_layer import StaticMapBaseLayer +from robot_data_visualizer.staticmap_for_gps import generate_coordinates def plot_gps_on_map(): ''' diff --git a/robot_data_visualizer/test/test_threshold_lidar.py b/robot_data_visualizer/test/test_threshold_lidar.py index be38ea6..dc63c0b 100644 --- a/robot_data_visualizer/test/test_threshold_lidar.py +++ b/robot_data_visualizer/test/test_threshold_lidar.py @@ -1,9 +1,11 @@ import sys import unittest import numpy as np -from threshold_lidar import threshold_lidar_pts sys.path.append('..') -from tools.data_manager import DataManager + +from robot_data_visualizer.threshold_lidar import threshold_lidar_pts + +from robot_data_visualizer.data_manager import DataManager class BasicTest(unittest.TestCase): """setup for unittests.""" diff --git a/robot_data_visualizer/test/test_time_convert.py b/robot_data_visualizer/test/test_time_convert.py index bd6c369..7da64bf 100644 --- a/robot_data_visualizer/test/test_time_convert.py +++ b/robot_data_visualizer/test/test_time_convert.py @@ -1,6 +1,7 @@ import sys +sys.path.append('..') import unittest -from time_convert import epoch_to_date_time +from robot_data_visualizer.time_convert import epoch_to_date_time class BasicTest(unittest.TestCase): """setup for unittests.""" From 759cd3ebc0b86de7212585a7b2fc658f3afe2b91 Mon Sep 17 00:00:00 2001 From: Hao Wu Date: Tue, 11 Dec 2018 23:21:07 -0800 Subject: [PATCH 09/27] change package imports --- robot_data_visualizer/__init__.py | 28 +++++++++++-------- robot_data_visualizer/data_manager.py | 8 +++--- robot_data_visualizer/lidar_viewer.py | 8 +++--- .../robot_data_visualizer.py | 17 +++++------ robot_data_visualizer/staticmap_for_gps.py | 4 +-- 5 files changed, 33 insertions(+), 32 deletions(-) diff --git a/robot_data_visualizer/__init__.py b/robot_data_visualizer/__init__.py index 81e3032..e30c717 100644 --- a/robot_data_visualizer/__init__.py +++ b/robot_data_visualizer/__init__.py @@ -1,12 +1,16 @@ -from .get_dates_umich import get_dates_umich -from .view_lidar import hokuyo_plot -from .view_lidar import threshold_lidar_pts -from .static_map_base_layer import StaticMapBaseLayer -from .staticmap_for_gps import map_for_gps -from .data_loader import DataLoader -from .data_manager import DataManager -from .download_tar import download_tar -from .read_hokuyo_30m import read_hokuyo -from .tar_extract import tar_extract - -__all__ = ['DataLoader', 'DataManager', 'download_tar', 'get_dates_umich', 'map_for_gps', 'read_hokuyo', 'StaticMapBaseLayer', 'tar_extract', 'hokuyo_plot', 'threshold_lidar_pts'] +# from .get_dates_umich import get_dates_umich +# from .view_lidar import hokuyo_plot +# from .view_lidar import threshold_lidar_pts +# from .static_map_base_layer import StaticMapBaseLayer +# from .staticmap_for_gps import map_for_gps +# from .data_loader import DataLoader +# from .data_manager import DataManager +# from .download_tar import download_tar +# from .read_hokuyo_30m import read_hokuyo +# from .tar_extract import tar_extract +# from .robot_data_visualizer import MainWindow +# from .get_dates_umich import get_dates_umich +# from .lidar_viewer import hokuyo_plot +# from .lidar_viewer import threshold_lidar_pts +# +# __all__ = ['MainWindow', 'DataLoader', 'DataManager', 'download_tar', 'get_dates_umich', 'map_for_gps', 'read_hokuyo', 'StaticMapBaseLayer', 'tar_extract', 'hokuyo_plot', 'threshold_lidar_pts'] diff --git a/robot_data_visualizer/data_manager.py b/robot_data_visualizer/data_manager.py index 76d4741..47c89cc 100644 --- a/robot_data_visualizer/data_manager.py +++ b/robot_data_visualizer/data_manager.py @@ -1,9 +1,9 @@ import os import pickle -from .data_loader import DataLoader -from .read_hokuyo_30m import read_hokuyo -from .tar_extract import tar_extract -from .download_tar import download_tar +from robot_data_visualizer.data_loader import DataLoader +from robot_data_visualizer.read_hokuyo_30m import read_hokuyo +from robot_data_visualizer.tar_extract import tar_extract +from robot_data_visualizer.download_tar import download_tar class DataManager: diff --git a/robot_data_visualizer/lidar_viewer.py b/robot_data_visualizer/lidar_viewer.py index 54e51f5..6a8eaee 100644 --- a/robot_data_visualizer/lidar_viewer.py +++ b/robot_data_visualizer/lidar_viewer.py @@ -1,8 +1,8 @@ """lidar_viewer visualizes lidar data by ploting it in matplotlib window.""" -from .data_manager import DataManager -from .time_convert import epoch_to_date_time -from .plot_lidar import hokuyo_plot -from .threshold_lidar import threshold_lidar_pts +from robot_data_visualizer.data_manager import DataManager +from robot_data_visualizer.time_convert import epoch_to_date_time +from robot_data_visualizer.plot_lidar import hokuyo_plot +from robot_data_visualizer.threshold_lidar import threshold_lidar_pts def lidar_viewer(date, num_samples, step_size=40, pickled=False, delete_pickle=False): """ diff --git a/robot_data_visualizer/robot_data_visualizer.py b/robot_data_visualizer/robot_data_visualizer.py index 36dcd25..af8893e 100644 --- a/robot_data_visualizer/robot_data_visualizer.py +++ b/robot_data_visualizer/robot_data_visualizer.py @@ -1,11 +1,8 @@ import os -import sys -sys.path.append('.') -sys.path.append('..') - import warnings warnings.filterwarnings("ignore") - +import sys +sys.path.append('..') from datetime import datetime import matplotlib @@ -17,11 +14,11 @@ import tkinter as tk -from .get_dates_umich import get_dates_umich -from .staticmap_for_gps import map_for_gps -from .data_manager import DataManager -from .view_lidar import hokuyo_plot -from .view_lidar import threshold_lidar_pts +from robot_data_visualizer.get_dates_umich import get_dates_umich +from robot_data_visualizer.staticmap_for_gps import map_for_gps +from robot_data_visualizer.data_manager import DataManager +from robot_data_visualizer.plot_lidar import hokuyo_plot +from robot_data_visualizer.lidar_viewer import threshold_lidar_pts class VisualizerFrame(tk.Frame): diff --git a/robot_data_visualizer/staticmap_for_gps.py b/robot_data_visualizer/staticmap_for_gps.py index d68ba77..03055f8 100644 --- a/robot_data_visualizer/staticmap_for_gps.py +++ b/robot_data_visualizer/staticmap_for_gps.py @@ -2,8 +2,8 @@ import os from staticmap import Line -from .static_map_base_layer import StaticMapBaseLayer -from .data_manager import DataManager +from robot_data_visualizer.static_map_base_layer import StaticMapBaseLayer +from robot_data_visualizer.data_manager import DataManager def generate_coordinates(data_dict): ''' From 619eca2c5d07472841d801e2db54ea221c68f955 Mon Sep 17 00:00:00 2001 From: Hao Wu Date: Tue, 11 Dec 2018 23:25:48 -0800 Subject: [PATCH 10/27] some other changes in packages --- robot_data_visualizer/test/test_data_loader.py | 6 +++--- robot_data_visualizer/test/test_data_manager.py | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/robot_data_visualizer/test/test_data_loader.py b/robot_data_visualizer/test/test_data_loader.py index 6fb3083..758ba0b 100644 --- a/robot_data_visualizer/test/test_data_loader.py +++ b/robot_data_visualizer/test/test_data_loader.py @@ -1,8 +1,8 @@ import unittest import numpy as np -import sys -sys.path.append('..') -from robot_data_visualizer import DataManager +# import sys +# sys.path.append('..') +from robot_data_visualizer.data_manager import DataManager class BasicTest(unittest.TestCase): def setUp(self): diff --git a/robot_data_visualizer/test/test_data_manager.py b/robot_data_visualizer/test/test_data_manager.py index 1185a87..89a0cb0 100644 --- a/robot_data_visualizer/test/test_data_manager.py +++ b/robot_data_visualizer/test/test_data_manager.py @@ -2,8 +2,8 @@ import sys import os -sys.path.append('..') -from robot_data_visualizer import DataManager +# sys.path.append('..') +from robot_data_visualizer.data_manager import DataManager class TestDataManager(unittest.TestCase): From 903f2907e32c3b8e4372acd10d3da985a27cb6e9 Mon Sep 17 00:00:00 2001 From: Ken Latimer Date: Wed, 12 Dec 2018 18:20:34 -0800 Subject: [PATCH 11/27] added hao_reconstruct branch to travis --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 7144dbd..fe3b86e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,3 +14,4 @@ script: branches: only: - master + - hao_reconstruct From 2074a9ddf9f71efdd417c82e9fc62769c61126a5 Mon Sep 17 00:00:00 2001 From: Ken Latimer Date: Wed, 12 Dec 2018 18:43:44 -0800 Subject: [PATCH 12/27] updated tests --- robot_data_visualizer/__init__.py | 30 +++++++-------- robot_data_visualizer/test/run_tests.py | 2 +- .../test/test_data_loader.py | 5 ++- .../test/test_data_manager.py | 4 +- .../test/test_download_tar.py | 38 +++++++++++++++++++ .../test/test_get_dates_umich.py | 20 ++++++++++ .../test/test_tar_extract.py | 28 ++++++++++++++ .../test/test_threshold_lidar.py | 2 +- .../test/test_time_convert.py | 1 + 9 files changed, 109 insertions(+), 21 deletions(-) create mode 100644 robot_data_visualizer/test/test_download_tar.py create mode 100644 robot_data_visualizer/test/test_get_dates_umich.py create mode 100644 robot_data_visualizer/test/test_tar_extract.py diff --git a/robot_data_visualizer/__init__.py b/robot_data_visualizer/__init__.py index e30c717..a12f114 100644 --- a/robot_data_visualizer/__init__.py +++ b/robot_data_visualizer/__init__.py @@ -1,16 +1,16 @@ -# from .get_dates_umich import get_dates_umich -# from .view_lidar import hokuyo_plot -# from .view_lidar import threshold_lidar_pts -# from .static_map_base_layer import StaticMapBaseLayer -# from .staticmap_for_gps import map_for_gps -# from .data_loader import DataLoader -# from .data_manager import DataManager -# from .download_tar import download_tar -# from .read_hokuyo_30m import read_hokuyo -# from .tar_extract import tar_extract +from .get_dates_umich import get_dates_umich +from .view_lidar import hokuyo_plot +from .view_lidar import threshold_lidar_pts +from .static_map_base_layer import StaticMapBaseLayer +from .staticmap_for_gps import map_for_gps +from .data_loader import DataLoader +from .data_manager import DataManager +from .download_tar import download_tar +from .read_hokuyo_30m import read_hokuyo +from .tar_extract import tar_extract # from .robot_data_visualizer import MainWindow -# from .get_dates_umich import get_dates_umich -# from .lidar_viewer import hokuyo_plot -# from .lidar_viewer import threshold_lidar_pts -# -# __all__ = ['MainWindow', 'DataLoader', 'DataManager', 'download_tar', 'get_dates_umich', 'map_for_gps', 'read_hokuyo', 'StaticMapBaseLayer', 'tar_extract', 'hokuyo_plot', 'threshold_lidar_pts'] +from .get_dates_umich import get_dates_umich +from .lidar_viewer import hokuyo_plot +from .lidar_viewer import threshold_lidar_pts + +__all__ = ['DataLoader', 'DataManager', 'download_tar', 'get_dates_umich', 'map_for_gps', 'read_hokuyo', 'StaticMapBaseLayer', 'tar_extract', 'hokuyo_plot', 'threshold_lidar_pts'] diff --git a/robot_data_visualizer/test/run_tests.py b/robot_data_visualizer/test/run_tests.py index d2fdb22..4089d9b 100644 --- a/robot_data_visualizer/test/run_tests.py +++ b/robot_data_visualizer/test/run_tests.py @@ -1,7 +1,7 @@ import sys import unittest -test_modules = ["test_data_loader", "test_data_manager"] +test_modules = ["test_data_loader", "test_data_manager", "test_download_tar", "test_get_dates_umich", "test_tar_extract", "test_time_convert", "test_threshold_lidar"] suite = unittest.TestSuite() diff --git a/robot_data_visualizer/test/test_data_loader.py b/robot_data_visualizer/test/test_data_loader.py index 758ba0b..1c7d9a9 100644 --- a/robot_data_visualizer/test/test_data_loader.py +++ b/robot_data_visualizer/test/test_data_loader.py @@ -1,7 +1,8 @@ import unittest import numpy as np -# import sys -# sys.path.append('..') +import sys +sys.path.append('.') +sys.path.append('..') from robot_data_visualizer.data_manager import DataManager class BasicTest(unittest.TestCase): diff --git a/robot_data_visualizer/test/test_data_manager.py b/robot_data_visualizer/test/test_data_manager.py index 89a0cb0..912461f 100644 --- a/robot_data_visualizer/test/test_data_manager.py +++ b/robot_data_visualizer/test/test_data_manager.py @@ -1,8 +1,8 @@ import unittest import sys - import os -# sys.path.append('..') +sys.path.append('.') +sys.path.append('..') from robot_data_visualizer.data_manager import DataManager class TestDataManager(unittest.TestCase): diff --git a/robot_data_visualizer/test/test_download_tar.py b/robot_data_visualizer/test/test_download_tar.py new file mode 100644 index 0000000..cf0e436 --- /dev/null +++ b/robot_data_visualizer/test/test_download_tar.py @@ -0,0 +1,38 @@ +import unittest +import os +import sys +sys.path.append('.') +sys.path.append('..') +from robot_data_visualizer.download_tar import download_tar +from robot_data_visualizer.download_tar import ensure_data_dir_exists + +class TestDownloadTar(unittest.TestCase): + + def setUp(self): + self.data_dir_name = 'data' + self.base_name = 'http://robots.engin.umich.edu/nclt' + self.date = '2013-01-10' + self.root_path = os.path.abspath('.') + self.data_dir_root = os.path.join(self.root_path, self.data_dir_name) + self.curr_data_dir = os.path.join(self.data_dir_root, self.date) + + def test_ensure_data_dir_exists(self): + ensure_data_dir_exists() + self.assertTrue(os.path.exists(self.data_dir_root)) + + def test_download_sensor_data(self): + download_tar(self.base_name, self.date, 'sensor_data') + tmp = os.path.exists(self.curr_data_dir) + self.assertTrue(os.path.exists(self.curr_data_dir)) + + def test_download_lidar_data(self): + download_tar(self.base_name, self.date, 'hokuyo') + file_name = self.date + '_hokuyo.tar.gz' + tmp = os.path.join(self.data_dir_root, file_name) + self.assertTrue(os.path.isfile(os.path.join(self.data_dir_root, file_name))) + + def tearDown(self): + os.chdir(self.root_path) + +if __name__ == '__main__': + unittest.main() \ No newline at end of file diff --git a/robot_data_visualizer/test/test_get_dates_umich.py b/robot_data_visualizer/test/test_get_dates_umich.py new file mode 100644 index 0000000..e319b75 --- /dev/null +++ b/robot_data_visualizer/test/test_get_dates_umich.py @@ -0,0 +1,20 @@ +import unittest +import sys +sys.path.append('.') +sys.path.append('..') +from robot_data_visualizer.get_dates_umich import get_dates_umich + +class TestGetDatesUmich(unittest.TestCase): + + def setUp(self): + self.dates = get_dates_umich() + + def test_returns_list(self): + self.assertTrue(type(self.dates) is list) + + def test_element_type(self): + for date in self.dates: + self.assertTrue(type(date) is str) + +if __name__ == '__main__': + unittest.main() \ No newline at end of file diff --git a/robot_data_visualizer/test/test_tar_extract.py b/robot_data_visualizer/test/test_tar_extract.py new file mode 100644 index 0000000..4d80cde --- /dev/null +++ b/robot_data_visualizer/test/test_tar_extract.py @@ -0,0 +1,28 @@ +import unittest +import os +import sys +sys.path.append('.') +sys.path.append('..') +from robot_data_visualizer.download_tar import download_tar +from robot_data_visualizer.tar_extract import tar_extract + +class TestTarExtract(unittest.TestCase): + + def setUp(self): + self.data_dir_name = 'data' + self.base_name = 'http://robots.engin.umich.edu/nclt' + self.date = '2013-01-10' + self.root_path = os.path.abspath('.') + self.data_dir_root = os.path.join(self.root_path, self.data_dir_name) + self.curr_data_dir = os.path.join(self.data_dir_root, self.date) + + def test_tar_extract_sensor_data(self): + filename = download_tar(self.base_name, self.date, 'sensor_data') + tar_extract(filename) + self.assertTrue(not (os.listdir(self.curr_data_dir) is 0)) # directory should not be empty + + def tearDown(self): + os.chdir(self.root_path) + +if __name__ == '__main__': + unittest.main() \ No newline at end of file diff --git a/robot_data_visualizer/test/test_threshold_lidar.py b/robot_data_visualizer/test/test_threshold_lidar.py index dc63c0b..7b73960 100644 --- a/robot_data_visualizer/test/test_threshold_lidar.py +++ b/robot_data_visualizer/test/test_threshold_lidar.py @@ -1,6 +1,6 @@ import sys import unittest -import numpy as np +sys.path.append('.') sys.path.append('..') from robot_data_visualizer.threshold_lidar import threshold_lidar_pts diff --git a/robot_data_visualizer/test/test_time_convert.py b/robot_data_visualizer/test/test_time_convert.py index 7da64bf..f326c31 100644 --- a/robot_data_visualizer/test/test_time_convert.py +++ b/robot_data_visualizer/test/test_time_convert.py @@ -1,4 +1,5 @@ import sys +sys.path.append('.') sys.path.append('..') import unittest from robot_data_visualizer.time_convert import epoch_to_date_time From 0158ff55d46a96c23545693507d5b7856a7cea79 Mon Sep 17 00:00:00 2001 From: Ken Latimer Date: Wed, 12 Dec 2018 19:32:56 -0800 Subject: [PATCH 13/27] change tests --- robot_data_visualizer/__init__.py | 3 ++- robot_data_visualizer/test/run_tests.py | 2 +- .../test/test_data_loader.py | 26 ------------------- 3 files changed, 3 insertions(+), 28 deletions(-) delete mode 100644 robot_data_visualizer/test/test_data_loader.py diff --git a/robot_data_visualizer/__init__.py b/robot_data_visualizer/__init__.py index a12f114..c2c7fd3 100644 --- a/robot_data_visualizer/__init__.py +++ b/robot_data_visualizer/__init__.py @@ -12,5 +12,6 @@ from .get_dates_umich import get_dates_umich from .lidar_viewer import hokuyo_plot from .lidar_viewer import threshold_lidar_pts +from .time_convert import epoch_to_date_time -__all__ = ['DataLoader', 'DataManager', 'download_tar', 'get_dates_umich', 'map_for_gps', 'read_hokuyo', 'StaticMapBaseLayer', 'tar_extract', 'hokuyo_plot', 'threshold_lidar_pts'] +__all__ = ['DataLoader', 'DataManager', 'download_tar', 'get_dates_umich', 'map_for_gps', 'read_hokuyo', 'StaticMapBaseLayer', 'tar_extract', 'hokuyo_plot', 'threshold_lidar_pts', 'epoch_to_date_time'] diff --git a/robot_data_visualizer/test/run_tests.py b/robot_data_visualizer/test/run_tests.py index 4089d9b..4e7f93b 100644 --- a/robot_data_visualizer/test/run_tests.py +++ b/robot_data_visualizer/test/run_tests.py @@ -1,7 +1,7 @@ import sys import unittest -test_modules = ["test_data_loader", "test_data_manager", "test_download_tar", "test_get_dates_umich", "test_tar_extract", "test_time_convert", "test_threshold_lidar"] +test_modules = ["test_data_manager", "test_download_tar", "test_get_dates_umich", "test_tar_extract", "test_time_convert", "test_threshold_lidar"] suite = unittest.TestSuite() diff --git a/robot_data_visualizer/test/test_data_loader.py b/robot_data_visualizer/test/test_data_loader.py deleted file mode 100644 index 1c7d9a9..0000000 --- a/robot_data_visualizer/test/test_data_loader.py +++ /dev/null @@ -1,26 +0,0 @@ -import unittest -import numpy as np -import sys -sys.path.append('.') -sys.path.append('..') -from robot_data_visualizer.data_manager import DataManager - -class BasicTest(unittest.TestCase): - def setUp(self): - self.Datamanager = DataManager('2013-01-10') - self.Datamanager.setup_data_files('sensor_data') - self.Datamanager.load_gps() - - def test_length(self): - self.assertEqual(len(self.Datamanager.data_dict['gps']['lat']), 7186) - self.assertEqual(len(self.Datamanager.data_dict['gps']['lng']), 7186) - self.assertEqual(len(self.Datamanager.data_dict['gps']['alt']), 7186) - - def test_specific_value(self): - self.assertEqual(self.Datamanager.data_dict['gps']['lat'][6552], 0.738168689900502 * 180 / np.pi) - self.assertEqual(self.Datamanager.data_dict['gps']['lng'][6552], -1.4610748478234 * 180 / np.pi) - self.assertEqual(self.Datamanager.data_dict['gps']['alt'][6552], 284.2) - -if __name__ == '__main__': - unittest.main() - From ecbb1546c1ca0f1a49d1e875b86875dadd809099 Mon Sep 17 00:00:00 2001 From: Ken Latimer Date: Wed, 12 Dec 2018 19:39:10 -0800 Subject: [PATCH 14/27] make more tests executable --- .travis.yml | 6 ++- .../test/static_map_example.py | 20 -------- .../test/test_static_map_base_layer.py | 23 --------- .../test/test_staticmap_for_gps.py | 48 ------------------- 4 files changed, 5 insertions(+), 92 deletions(-) delete mode 100644 robot_data_visualizer/test/static_map_example.py delete mode 100644 robot_data_visualizer/test/test_static_map_base_layer.py delete mode 100644 robot_data_visualizer/test/test_staticmap_for_gps.py diff --git a/.travis.yml b/.travis.yml index fe3b86e..d0e9c76 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,8 +5,12 @@ python: cache: pip before_install: - chmod +x robot_data_visualizer/test/run_tests.py - - chmod +x robot_data_visualizer/test/test_data_loader.py - chmod +x robot_data_visualizer/test/test_data_manager.py + - chmod +x robot_data_visualizer/test/test_download_tar.py + - chmod +x robot_data_visualizer/test/test_tar_extract.py + - chmod +x robot_data_visualizer/test/test_get_dates_umich.py + - chmod +x robot_data_visualizer/test/test_threshold_lidar.py + - chmod +x robot_data_visualizer/test/test_time_convert.py install: - pip install -r requirements.txt script: diff --git a/robot_data_visualizer/test/static_map_example.py b/robot_data_visualizer/test/static_map_example.py deleted file mode 100644 index 15b0d12..0000000 --- a/robot_data_visualizer/test/static_map_example.py +++ /dev/null @@ -1,20 +0,0 @@ -''' -A smoke test to use staticmap to generate northseatte.png without line features. -''' -from staticmap import Line -from robot_data_visualizer.static_map_base_layer import StaticMap - -m = StaticMap(600, 600, 80) - -greenlake = [-122.3296, 47.6786] -udub = [-122.3066, 47.6562] - -coordinates = [greenlake, udub] -line_outline = Line(coordinates, 'white', 6) -line = Line(coordinates, '#D2322D', 4) - -m.add_line(line_outline) -m.add_line(line) - -image = m.render() -image.save('northseattle.png') \ No newline at end of file diff --git a/robot_data_visualizer/test/test_static_map_base_layer.py b/robot_data_visualizer/test/test_static_map_base_layer.py deleted file mode 100644 index 47818af..0000000 --- a/robot_data_visualizer/test/test_static_map_base_layer.py +++ /dev/null @@ -1,23 +0,0 @@ -''' -A smoke test for showing map without line features. -''' -import sys -sys.path.append('..') - -from staticmap import Line -from robot_data_visualizer.static_map_base_layer import StaticMapBaseLayer - -m = StaticMapBaseLayer(600, 600, 80) - -southwest = [-83.721154, 42.287215] -northeast = [-83.710182, 42.293970] - -coordinates = [southwest, northeast] -line_outline = Line(coordinates, 'white', 6) -line = Line(coordinates, '#D2322D', 4) - -m.add_line(line_outline) -m.add_line(line) - -image = m.render_without_features() # *** THIS METHOD IS NEW *** -image.save('umich_no_features.png') \ No newline at end of file diff --git a/robot_data_visualizer/test/test_staticmap_for_gps.py b/robot_data_visualizer/test/test_staticmap_for_gps.py deleted file mode 100644 index abc6d91..0000000 --- a/robot_data_visualizer/test/test_staticmap_for_gps.py +++ /dev/null @@ -1,48 +0,0 @@ -''' -This is a smoke test for tools.staticmap_for_gps. -''' -from staticmap import Line -import matplotlib.pyplot as plt -import os -import sys -sys.path.append('..') - -from robot_data_visualizer.data_manager import DataManager -from robot_data_visualizer.static_map_base_layer import StaticMapBaseLayer -from robot_data_visualizer.staticmap_for_gps import generate_coordinates - -def plot_gps_on_map(): - ''' - This functions is used to plot gps points on map - :return: (px, py)coordinates of every gps data - ''' - data_manager = DataManager('2013-01-10') - # Download and extract sensor data - data_manager.setup_data_files('sensor_data') - # load gps - data_manager.load_gps() - - map = StaticMapBaseLayer(1000, 1000, 80) - - coordinates = generate_coordinates(data_manager.data_dict) - # Put image in the corresponding data directory - os.chdir(data_manager.data_dir) - - line = Line(coordinates, 'red', 4) - map.add_line(line) - - image = map.render_without_features() - image.save('umich_empty.png') - - points = map.extract_line_points() - x_coords = [item[0] for item in points] - y_coords = [item[1] for item in points] - - plt.imshow(image) - plt.plot(x_coords, y_coords) - plt.show(block=True) # block program until window is closed - - return points - -if __name__ == '__main__': - plot_gps_on_map() From 5fd3797ac77235f0c1f036116e11349b50f19ea0 Mon Sep 17 00:00:00 2001 From: Ken Latimer Date: Wed, 12 Dec 2018 19:43:30 -0800 Subject: [PATCH 15/27] added extra append to sys path --- robot_data_visualizer/__init__.py | 1 - robot_data_visualizer/test/test_data_manager.py | 1 + robot_data_visualizer/test/test_download_tar.py | 1 + robot_data_visualizer/test/test_get_dates_umich.py | 1 + robot_data_visualizer/test/test_tar_extract.py | 1 + robot_data_visualizer/test/test_threshold_lidar.py | 1 + robot_data_visualizer/test/test_time_convert.py | 1 + 7 files changed, 6 insertions(+), 1 deletion(-) diff --git a/robot_data_visualizer/__init__.py b/robot_data_visualizer/__init__.py index c2c7fd3..f7b8413 100644 --- a/robot_data_visualizer/__init__.py +++ b/robot_data_visualizer/__init__.py @@ -8,7 +8,6 @@ from .download_tar import download_tar from .read_hokuyo_30m import read_hokuyo from .tar_extract import tar_extract -# from .robot_data_visualizer import MainWindow from .get_dates_umich import get_dates_umich from .lidar_viewer import hokuyo_plot from .lidar_viewer import threshold_lidar_pts diff --git a/robot_data_visualizer/test/test_data_manager.py b/robot_data_visualizer/test/test_data_manager.py index 912461f..5df4a1c 100644 --- a/robot_data_visualizer/test/test_data_manager.py +++ b/robot_data_visualizer/test/test_data_manager.py @@ -3,6 +3,7 @@ import os sys.path.append('.') sys.path.append('..') +sys.path.append('../..') from robot_data_visualizer.data_manager import DataManager class TestDataManager(unittest.TestCase): diff --git a/robot_data_visualizer/test/test_download_tar.py b/robot_data_visualizer/test/test_download_tar.py index cf0e436..76c7497 100644 --- a/robot_data_visualizer/test/test_download_tar.py +++ b/robot_data_visualizer/test/test_download_tar.py @@ -3,6 +3,7 @@ import sys sys.path.append('.') sys.path.append('..') +sys.path.append('../..') from robot_data_visualizer.download_tar import download_tar from robot_data_visualizer.download_tar import ensure_data_dir_exists diff --git a/robot_data_visualizer/test/test_get_dates_umich.py b/robot_data_visualizer/test/test_get_dates_umich.py index e319b75..b0d6e67 100644 --- a/robot_data_visualizer/test/test_get_dates_umich.py +++ b/robot_data_visualizer/test/test_get_dates_umich.py @@ -2,6 +2,7 @@ import sys sys.path.append('.') sys.path.append('..') +sys.path.append('../..') from robot_data_visualizer.get_dates_umich import get_dates_umich class TestGetDatesUmich(unittest.TestCase): diff --git a/robot_data_visualizer/test/test_tar_extract.py b/robot_data_visualizer/test/test_tar_extract.py index 4d80cde..9647148 100644 --- a/robot_data_visualizer/test/test_tar_extract.py +++ b/robot_data_visualizer/test/test_tar_extract.py @@ -3,6 +3,7 @@ import sys sys.path.append('.') sys.path.append('..') +sys.path.append('../..') from robot_data_visualizer.download_tar import download_tar from robot_data_visualizer.tar_extract import tar_extract diff --git a/robot_data_visualizer/test/test_threshold_lidar.py b/robot_data_visualizer/test/test_threshold_lidar.py index 7b73960..c2fb074 100644 --- a/robot_data_visualizer/test/test_threshold_lidar.py +++ b/robot_data_visualizer/test/test_threshold_lidar.py @@ -2,6 +2,7 @@ import unittest sys.path.append('.') sys.path.append('..') +sys.path.append('../..') from robot_data_visualizer.threshold_lidar import threshold_lidar_pts diff --git a/robot_data_visualizer/test/test_time_convert.py b/robot_data_visualizer/test/test_time_convert.py index f326c31..9850774 100644 --- a/robot_data_visualizer/test/test_time_convert.py +++ b/robot_data_visualizer/test/test_time_convert.py @@ -1,6 +1,7 @@ import sys sys.path.append('.') sys.path.append('..') +sys.path.append('../..') import unittest from robot_data_visualizer.time_convert import epoch_to_date_time From 2f5e6c29b3333e8254b7c87e96258fb904fe2f90 Mon Sep 17 00:00:00 2001 From: Ken Latimer Date: Wed, 12 Dec 2018 19:47:36 -0800 Subject: [PATCH 16/27] added lidar viewer to init --- robot_data_visualizer/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/robot_data_visualizer/__init__.py b/robot_data_visualizer/__init__.py index f7b8413..e9419e7 100644 --- a/robot_data_visualizer/__init__.py +++ b/robot_data_visualizer/__init__.py @@ -13,4 +13,4 @@ from .lidar_viewer import threshold_lidar_pts from .time_convert import epoch_to_date_time -__all__ = ['DataLoader', 'DataManager', 'download_tar', 'get_dates_umich', 'map_for_gps', 'read_hokuyo', 'StaticMapBaseLayer', 'tar_extract', 'hokuyo_plot', 'threshold_lidar_pts', 'epoch_to_date_time'] +__all__ = ['DataLoader', 'DataManager', 'download_tar', 'get_dates_umich', 'map_for_gps', 'read_hokuyo', 'StaticMapBaseLayer', 'tar_extract', 'hokuyo_plot', 'lidar_viewer', 'threshold_lidar_pts', 'epoch_to_date_time'] From 0e63a5227d5bded310a4e22f30d7056e4b1cf538 Mon Sep 17 00:00:00 2001 From: Ken Latimer Date: Wed, 12 Dec 2018 19:51:51 -0800 Subject: [PATCH 17/27] only append two levels up --- robot_data_visualizer/test/test_data_manager.py | 1 - robot_data_visualizer/test/test_download_tar.py | 1 - robot_data_visualizer/test/test_get_dates_umich.py | 1 - robot_data_visualizer/test/test_threshold_lidar.py | 2 -- robot_data_visualizer/test/test_time_convert.py | 1 - 5 files changed, 6 deletions(-) diff --git a/robot_data_visualizer/test/test_data_manager.py b/robot_data_visualizer/test/test_data_manager.py index 5df4a1c..912461f 100644 --- a/robot_data_visualizer/test/test_data_manager.py +++ b/robot_data_visualizer/test/test_data_manager.py @@ -3,7 +3,6 @@ import os sys.path.append('.') sys.path.append('..') -sys.path.append('../..') from robot_data_visualizer.data_manager import DataManager class TestDataManager(unittest.TestCase): diff --git a/robot_data_visualizer/test/test_download_tar.py b/robot_data_visualizer/test/test_download_tar.py index 76c7497..cf0e436 100644 --- a/robot_data_visualizer/test/test_download_tar.py +++ b/robot_data_visualizer/test/test_download_tar.py @@ -3,7 +3,6 @@ import sys sys.path.append('.') sys.path.append('..') -sys.path.append('../..') from robot_data_visualizer.download_tar import download_tar from robot_data_visualizer.download_tar import ensure_data_dir_exists diff --git a/robot_data_visualizer/test/test_get_dates_umich.py b/robot_data_visualizer/test/test_get_dates_umich.py index b0d6e67..e319b75 100644 --- a/robot_data_visualizer/test/test_get_dates_umich.py +++ b/robot_data_visualizer/test/test_get_dates_umich.py @@ -2,7 +2,6 @@ import sys sys.path.append('.') sys.path.append('..') -sys.path.append('../..') from robot_data_visualizer.get_dates_umich import get_dates_umich class TestGetDatesUmich(unittest.TestCase): diff --git a/robot_data_visualizer/test/test_threshold_lidar.py b/robot_data_visualizer/test/test_threshold_lidar.py index c2fb074..6bd0770 100644 --- a/robot_data_visualizer/test/test_threshold_lidar.py +++ b/robot_data_visualizer/test/test_threshold_lidar.py @@ -2,8 +2,6 @@ import unittest sys.path.append('.') sys.path.append('..') -sys.path.append('../..') - from robot_data_visualizer.threshold_lidar import threshold_lidar_pts from robot_data_visualizer.data_manager import DataManager diff --git a/robot_data_visualizer/test/test_time_convert.py b/robot_data_visualizer/test/test_time_convert.py index 9850774..f326c31 100644 --- a/robot_data_visualizer/test/test_time_convert.py +++ b/robot_data_visualizer/test/test_time_convert.py @@ -1,7 +1,6 @@ import sys sys.path.append('.') sys.path.append('..') -sys.path.append('../..') import unittest from robot_data_visualizer.time_convert import epoch_to_date_time From e2719acc2cacc98ab1c2f08f7d08380cdb4dd0d1 Mon Sep 17 00:00:00 2001 From: Ken Latimer Date: Wed, 12 Dec 2018 19:58:25 -0800 Subject: [PATCH 18/27] replaced bad import in init --- robot_data_visualizer/__init__.py | 6 +- robot_data_visualizer/lidar_viewer.py | 38 -- robot_data_visualizer/main_window.py | 631 ++++++++++++++++++++++++++ 3 files changed, 634 insertions(+), 41 deletions(-) delete mode 100644 robot_data_visualizer/lidar_viewer.py create mode 100644 robot_data_visualizer/main_window.py diff --git a/robot_data_visualizer/__init__.py b/robot_data_visualizer/__init__.py index e9419e7..a5184f1 100644 --- a/robot_data_visualizer/__init__.py +++ b/robot_data_visualizer/__init__.py @@ -9,8 +9,8 @@ from .read_hokuyo_30m import read_hokuyo from .tar_extract import tar_extract from .get_dates_umich import get_dates_umich -from .lidar_viewer import hokuyo_plot -from .lidar_viewer import threshold_lidar_pts +from .view_lidar import hokuyo_plot +from .view_lidar import threshold_lidar_pts from .time_convert import epoch_to_date_time -__all__ = ['DataLoader', 'DataManager', 'download_tar', 'get_dates_umich', 'map_for_gps', 'read_hokuyo', 'StaticMapBaseLayer', 'tar_extract', 'hokuyo_plot', 'lidar_viewer', 'threshold_lidar_pts', 'epoch_to_date_time'] +__all__ = ['DataLoader', 'DataManager', 'download_tar', 'get_dates_umich', 'map_for_gps', 'read_hokuyo', 'StaticMapBaseLayer', 'tar_extract', 'hokuyo_plot', 'threshold_lidar_pts', 'epoch_to_date_time'] diff --git a/robot_data_visualizer/lidar_viewer.py b/robot_data_visualizer/lidar_viewer.py deleted file mode 100644 index 6a8eaee..0000000 --- a/robot_data_visualizer/lidar_viewer.py +++ /dev/null @@ -1,38 +0,0 @@ -"""lidar_viewer visualizes lidar data by ploting it in matplotlib window.""" -from robot_data_visualizer.data_manager import DataManager -from robot_data_visualizer.time_convert import epoch_to_date_time -from robot_data_visualizer.plot_lidar import hokuyo_plot -from robot_data_visualizer.threshold_lidar import threshold_lidar_pts - -def lidar_viewer(date, num_samples, step_size=40, pickled=False, delete_pickle=False): - """ - lidar_viewer visualizes lidar data by ploting it in matplotlib window. - - :param date: A 'Session' date from http://robots.engin.umich.edu/nclt/ (string) - :param num_samples: The number of lidar frames to view (int) - :param step_size: The amount of frames to skip between plots (data recorded at 40Hz) - :param pickled: Set to True if you want to save a pickle imported lidar data. - :param delete_pickle: Set to True if you want to delete any existing pickles of data. - """ - # initialize datamanager - data_manager = DataManager(date) - print('DataManager initialized') - # Download and extract sensor data - data_manager.setup_data_files('sensor_data') - print('sensor data downloaded') - # Download and extract data for the hokuyo lidar scanner - data_manager.setup_data_files('hokuyo') - - # load scans of lidar - - print('hokuyo data loading...') - data_manager.load_lidar(num_samples, pickled, delete_pickle) - lidar = data_manager.data_dict['lidar'] - print('plotting lidar') - for i in range(0, int(num_samples/step_size)*step_size, step_size): - lidar_i = lidar[i] - x_lidar, y_lidar, time = threshold_lidar_pts(lidar_i) - x_not_equal_time = str(x_lidar) != str(time) - if x_not_equal_time: - time = epoch_to_date_time(time) - hokuyo_plot(x_lidar, y_lidar, time) diff --git a/robot_data_visualizer/main_window.py b/robot_data_visualizer/main_window.py new file mode 100644 index 0000000..8c012b7 --- /dev/null +++ b/robot_data_visualizer/main_window.py @@ -0,0 +1,631 @@ +import os +import sys +sys.path.append('.') +sys.path.append('..') + +import warnings +warnings.filterwarnings("ignore") + +from datetime import datetime + +import matplotlib +matplotlib.use("TkAgg") +import matplotlib.lines as lines +import matplotlib.image as mpimg +from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg +from matplotlib.figure import Figure + +import tkinter as tk + +from robot_data_visualizer.get_dates_umich import get_dates_umich +from robot_data_visualizer.staticmap_for_gps import map_for_gps +from robot_data_visualizer.data_manager import DataManager +from robot_data_visualizer.view_lidar import hokuyo_plot +from robot_data_visualizer.view_lidar import threshold_lidar_pts + + +class VisualizerFrame(tk.Frame): + """ + This is the main window where the robot data is seen by the user. + """ + + def __init__(self, parent): + tk.Frame.__init__(self, parent) + self.parent = parent + self.label = None + self.ax_map = None + self.ax_gps = None + self.ax_lidar = None + self.map_plot = None + self.gps_plot = None + self.lidar_plot = None + self.canvas = None + self.data_manager = None + self.gps_data = None + self.lidar_data = None + self.gps_on = False + self.map_on = False + self.lidar_on = False + self.map_image = None + self.widgets() + + def widgets(self): + """ + Set up widgets for the frame. + + :return: None + """ + self.label = tk.Label(self, text="Viewer") + self.label.pack(side=tk.TOP) + + self.fig = Figure(figsize=(5, 4), dpi=100) + self.ax_map = self.fig.add_subplot(111) + self.ax_gps = self.fig.add_subplot(111) + self.ax_lidar = self.fig.add_subplot(111) + + self.canvas = FigureCanvasTkAgg(self.fig, master=self.master) + self.canvas.draw() + self.canvas.get_tk_widget().pack(fill=tk.BOTH, expand=True) + + def callback_initialize_data_manager(self): + """ + This callback responds to the *Load Data* button. + + :return: None + """ + date = self.parent.toolbar.date.get() + if self.data_manager is None: + self.setup_data(date) + else: + if self.data_manager.date is not date: + os.chdir('../..') # TODO patched here - add this to end of load_gps() / load_lidar() functions + self.setup_data(date) + else: + pass + + def setup_data(self, date): + """ + This function sets up all of the data (except lidar) needed by the application. + + :param date: Determines which date from the robotics dataset to use. + :type date: str. + :return: None + """ + if self.data_manager is not None: + os.chdir(self.data_manager.owd) + self.ax_gps.clear() + self.ax_map.clear() + self.ax_lidar.clear() + self.canvas.draw() + self.gps_on = False + self.map_on = False + self.lidar_on = False + self.parent.set_status('DM_START', hold=True) + self.data_manager = DataManager(date) + self.data_manager.setup_data_files('sensor_data') + self.data_manager.load_gps() + x_coords, y_coords = map_for_gps(self.data_manager.data_dict, self.data_manager.data_dir) + self.lidar_data = None + self.gps_data = [x_coords, y_coords] # in image coords + self.map_image = mpimg.imread(os.path.join(self.data_manager.data_dir, 'map.png')) + self.label.config(text='Viewer') + self.parent.set_status('DM_READY') + + def callback_gps_on(self): + """ + This callback responds to the *On* button under the *GPS Control* menu. + + :return: None + """ + if not self.lidar_on: + if not self.gps_on: + self.gps_on = True + self.parent.set_status('GPS_START') + idx = self.get_idx_for_gps_update() + self.update_timestamp(idx) + self.gps_plot = self.ax_gps.plot(self.gps_data[0][:idx], self.gps_data[1][:idx], 'r')[0] + self.canvas.show() + self.parent.set_status('GPS_READY') + else: + pass + else: + self.callback_lidar_off() + self.callback_gps_on() + + def callback_gps_off(self): + """ + This callback responds to the *Off* button under the *GPS Control* menu. + + :return: None + """ + if self.gps_on: + self.gps_on = False + self.update_gps(0) + self.label.config(text='Viewer') + self.parent.set_status('GPS_REMOVE') + else: + pass + + def callback_gps_slider_changed(self, event): + """ + This callback responds to the scale position changing under the *GPS Control* menu. + + :return: None + """ + self.gps_on = True + idx = self.get_idx_for_gps_update() + self.update_gps(idx) + self.update_timestamp(idx) + self.parent.set_status('GPS_UPDATE') + + def update_gps(self, idx): + """ + This function updates the GPS data that is displayed in the main viewing window. + + :param idx: Index into the array of GPS data that is to be displayed. + :type idx: int. + :return: None + """ + if self.gps_data is not None: + self.gps_plot.set_xdata(self.gps_data[0][:idx]) + self.gps_plot.set_ydata(self.gps_data[1][:idx]) + self.canvas.draw() + else: + pass + + def update_timestamp(self, idx): + """ + This function updates the timestamp in the main viewing window. + + :param idx: Index into the array of GPS data to be used for retrieval of the time stamp. + :type idx: int. + :return: None + """ + curr_tstamp = self.get_timestamp_for_gps_update(idx) + self.label.config(text=str('time stamp: ' + curr_tstamp)) + + def get_idx_for_gps_update(self): + """ + This function returns the index to be used for updating the GPS data. + :return: int -- the index to be used for the GPS update + """ + slider_val = self.parent.control.gps_control.selection_scale.get() + idx_ratio = len(self.gps_data[0]) / 100 + return int(slider_val * idx_ratio) + + def get_timestamp_for_gps_update(self, gps_data_idx): + """ + This function returns the timestamp in a readable format for the given GPS data index. + + :param gps_data_idx: Index into the array of GPS data to be used for retrieval of the time stamp. + :return: str -- the timestamp + """ + idx_ratio = len(self.data_manager.data_dict['gps']['tstamp']) / len(self.gps_data[0]) + idx = int(gps_data_idx * idx_ratio) - 1 + ts = int(self.data_manager.data_dict['gps']['tstamp'][idx] / 1000000) + return datetime.fromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S') + + def callback_map_on(self): + """ + This callback responds to the *On* button under the *Map Control* menu. + + :return: None + """ + if not self.lidar_on: + if not self.map_on: + self.map_on = True + if self.map_image is not None: + self.ax_map.imshow(self.map_image) + # draw scale on the map + map_scale = self.get_map_scale() + line = lines.Line2D([0, 200], [0, 0], linewidth=4, color='b') + self.ax_map.add_line(line) + distance = map_scale * 200 + if distance > 1000: + scale_str = "scale = " + str(float("%.2f" % (distance / 1000))) + " kilometers" + else: + scale_str = "scale = " + str(float("%.2f" % (distance))) + " meters" + self.ax_map.text(0, -10, scale_str, fontsize=8) + self.canvas.draw() + self.parent.set_status('MAP_READY') + else: + self.parent.set_status('MAP_ERROR') + else: + pass + else: + self.callback_lidar_off() + self.callback_map_on() + + def callback_map_off(self): + """ + This callback responds to the *Off* button under the *Map Control* menu. + + :return: None + """ + if self.map_on: + self.map_on = False + self.ax_map.clear() + if self.gps_on: + self.gps_on = False + self.callback_gps_on() # because the previous line clears both map and gps + self.canvas.draw() + else: + pass + + def callback_date_changed(self): + """ + This callback responds to a change in the date selection menu in the toolbar. + + :return: None + """ + new_date = self.parent.toolbar.date.get() # Need to call get() because this is a StringVar object + if self.parent.toolbar.date is not new_date: + self.parent.toolbar.date.set(new_date) + else: + pass + + def get_map_scale(self): + """ + This function calculates the map scale in units of meters per pixel. + + :return: float64 -- map scale (m/px) + """ + k = 111000 # meters per degree of latitude (approx.) + lat_range = self.data_manager.data_dict['gps_range'][0] + d_lat_range = abs(lat_range[0] - lat_range[1]) + d_x_pixels = abs(max(self.gps_data[0]) - min(self.gps_data[0])) + map_scale = d_lat_range * k / d_x_pixels + return map_scale # units of meters per pixel + + def callback_lidar_slider_changed(self, event): + """ + This callback responds to the scale position changing under the *Lidar Control* menu. + + :return: None + """ + self.lidar_on = True + idx = self.get_idx_for_lidar_update() + self.update_lidar(idx) + # self.update_timestamp(idx) + self.parent.set_status('Lidar updated') + + def get_idx_for_lidar_update(self): + """ + This function returns the index to be used for updating the Lidar data. + + :return: int -- the index to be used for the Lidar update + """ + slider_val = self.parent.control.lidar_control.selection_scale.get() + idx_ratio = len(self.lidar_data) / 100 + return max(int(slider_val * idx_ratio) - 1, 0) + + def update_lidar(self, idx): + """ + This function updates the Lidar data that is displayed in the main viewing window. + + :param idx: Index into the array of Lidar data that is to be displayed. + :type idx: int. + :return: None + """ + if self.lidar_data is not None: + yt, xt, _ = threshold_lidar_pts(self.lidar_data[idx]) + self.lidar_plot.set_xdata(xt) + self.lidar_plot.set_ydata(yt) + self.canvas.draw() + else: + pass + + def callback_lidar_on(self): + """ + This callback responds to the *On* button under the *Lidar Control* menu. + + :return: None + """ + if not self.lidar_on: + self.lidar_on = True + self.callback_map_off() + self.callback_gps_off() + if self.data_manager is None: + self.callback_initialize_data_manager() + if not 'lidar' in self.data_manager.data_dict.keys(): + self.data_manager.setup_data_files('hokuyo') + pickled = True + delete_pickle = False + self.data_manager.load_lidar(4000, pickled, delete_pickle) # TODO - global constant for lidar samples + self.lidar_data = self.data_manager.data_dict['lidar'] + + xlimits, ylimits = [-32, 32], [-32, 32] + self.ax_lidar.set_xlim(xlimits) + self.ax_lidar.set_ylim(ylimits) + hokuyo_plot(self.ax_lidar) + yt, xt, _ = threshold_lidar_pts(self.lidar_data[0]) + self.lidar_plot = self.ax_lidar.plot(xt, yt, 'r.')[0] + self.canvas.show() + else: + pass + + + def callback_lidar_off(self): + """ + This callback responds to the *Off* button under the *Lidar Control* menu. + + :return: None + """ + if self.lidar_on: + self.lidar_on = False + self.ax_lidar.clear() + self.canvas.draw() + else: + pass + + +class ToolbarFrame(tk.Frame): + """ + This class represents the toolbar at the top of the window. + """ + + def __init__(self, parent): + tk.Frame.__init__(self, parent) + self.parent = parent + self.date = None + self.dates = get_dates_umich() + self.load_button = None + self.option_menu = None + self.widgets() + + def widgets(self): + """ + Set up widgets for the frame. + + :return: None + """ + self.dates = get_dates_umich() + self.load_button = tk.Button(self, text="Load Data") + self.load_button.pack(side=tk.LEFT, padx=2, pady=2) + + self.date = tk.StringVar(self) + self.date.set(self.dates[24]) + self.option_menu = tk.OptionMenu(self, self.date, *self.dates, command=self.callback_date_changed) + self.option_menu.pack(side=tk.LEFT, padx=2, pady=2) + + def bind_widgets(self): + """ + Bind widgets to their callback functions. + + :return: None + """ + self.load_button.config(command=self.parent.window.callback_initialize_data_manager) + + def callback_date_changed(self, event): + self.parent.window.callback_date_changed() + +class ControlFrame(tk.Frame): + """ + This class represents the controls on the right hand side of the main + window. There are two nested classes for the slam and map controls. + """ + + def __init__(self, parent): + tk.Frame.__init__(self, parent, width=400) + self.parent = parent + self.root = parent + self.map_control = None + self.lidar_control = None + self.widgets() + + class GpsControlFrame(tk.Frame): + + def __init__(self, parent, root): + tk.Frame.__init__(self, parent, width=400) + self.parent = parent + self.root = root + self.selection_scale = None + self.scale_val = None + self.on_button = None + self.off_button = None + self.widgets() + + def widgets(self): + """ + Set up widgets for the frame. + + :return: None + """ + label = tk.Label(self, text="GPS Control", bg="blue", fg="white") + label.pack(side=tk.TOP, fill=tk.X) + + self.selection_scale = tk.Scale(self, orient=tk.HORIZONTAL, to=100, variable=self.scale_val) + self.selection_scale.set(100) + self.selection_scale.pack(side=tk.TOP) + + self.on_button = tk.Button(self, text="On", bg="green", fg="white") + self.on_button.pack(side=tk.LEFT) + + self.off_button = tk.Button(self, text="Off", bg="red", fg="white") + self.off_button.pack(side=tk.RIGHT) + + def bind_widgets(self): + """ + Bind widgets to their callback functions. + + :return: None + """ + self.on_button.config(command=self.root.window.callback_gps_on) + self.off_button.config(command=self.root.window.callback_gps_off) + self.selection_scale.bind("", self.root.window.callback_gps_slider_changed) + + + class MapControlFrame(tk.Frame): + + def __init__(self, parent, root): + tk.Frame.__init__(self, parent, width=400) + self.parent = parent + self.root = root + self.on_button = None + self.off_button = None + self.widgets() + + def widgets(self): + """ + Set up widgets for the frame. + + :return: None + """ + label = tk.Label(self, text="Map Control", bg="blue", fg="white") + label.pack(fill=tk.X) + + self.on_button = tk.Button(self, text="On", bg="green", fg="white") + self.on_button.pack(side=tk.LEFT) + + self.off_button = tk.Button(self, text="Off", bg="red", fg="white") + self.off_button.pack(side=tk.RIGHT) + + def bind_widgets(self): + """ + Bind widgets to their callback functions. + + :return: None + """ + self.on_button.config(command=self.root.window.callback_map_on) + self.off_button.config(command=self.root.window.callback_map_off) + + class LidarControlFrame(tk.Frame): + + def __init__(self, parent, root): + tk.Frame.__init__(self, parent, width=400) + self.parent = parent + self.root = root + self.scale_val = None + self.on_button = None + self.off_button = None + self.widgets() + + def widgets(self): + """ + Set up widgets for the frame. + + :return: None + """ + label = tk.Label(self, text="Lidar Control", bg="blue", fg="white") + label.pack(side=tk.TOP, fill=tk.X) + + self.selection_scale = tk.Scale(self, orient=tk.HORIZONTAL, to=100, variable=self.scale_val) + self.selection_scale.set(100) + self.selection_scale.pack(side=tk.TOP) + + self.on_button = tk.Button(self, text="On", bg="green", fg="white") + self.on_button.pack(side=tk.LEFT) + + self.off_button = tk.Button(self, text="Off", bg="red", fg="white") + self.off_button.pack(side=tk.RIGHT) + + def bind_widgets(self): + """ + Bind widgets to their callback functions. + + :return: None + """ + self.on_button.config(command=self.root.window.callback_lidar_on) + self.off_button.config(command=self.root.window.callback_lidar_off) + self.selection_scale.bind("", self.root.window.callback_lidar_slider_changed) + + def widgets(self): + """ + Set up widgets for the frame. + + :return: None + """ + self.gps_control = self.GpsControlFrame(self, self.root) + self.gps_control.pack(fill=tk.X) + self.map_control = self.MapControlFrame(self, self.root) + self.map_control.pack(fill=tk.X) + self.lidar_control = self.LidarControlFrame(self, self.root) + self.lidar_control.pack(fill=tk.X) + + def bind_widgets(self): + """ + Bind widgets to their callback functions. + + :return: None + """ + self.gps_control.bind_widgets() + self.map_control.bind_widgets() + self.lidar_control.bind_widgets() + + +class MainWindow(tk.Tk): + """ + This is the main window for the application. Here the main layout is + established using a combination of the above classes and individual + tkinter widgets. + """ + + def __init__(self, parent): + tk.Tk.__init__(self, parent) + self.parent = parent + self.status_text = dict(READY="Ready", + DM_START="Initializing data manager ...", + DM_READY="Data is ready", + DM_NOT_READY="Data not loaded", + GPS_START="GPS loading ...", + GPS_READY="GPS is ready", + GPS_REMOVE="GPS removed", + GPS_UPDATE="GPS updated", + MAP_START="Map loading ...", + MAP_READY="Map is ready", + MAP_REMOVE="Map removed", + MAP_ERROR="Must load data before map can be displayed") + self.STATUS_DELAY = 2000 # (ms) delay between status changes + self.title("Robot Data Visualizer") + self.mainWidgets() + + + def mainWidgets(self): + """ + Set up widgets for the main window frame. + + :return: None + """ + # Toolbar + self.toolbar = ToolbarFrame(self) + self.toolbar.pack(side=tk.TOP, fill=tk.X) + + # Status bar + self.status = tk.Label(self, text=self.status_text['READY'], bd=1, relief=tk.SUNKEN, anchor=tk.W) + self.status.pack(side=tk.BOTTOM, fill=tk.X) + + # Controls - GPS and Map + self.control = ControlFrame(self) + self.control.pack(side=tk.RIGHT, fill=tk.Y) + + # Main viewing window + self.window = VisualizerFrame(self) + self.window.pack(side=tk.LEFT, padx=2, pady=2) + + # Bind widgets to their callback functions + self.toolbar.bind_widgets() + self.control.bind_widgets() + + + def set_status(self, status, hold=False): + """ + This function sets the status bar at the bottom of the window (with a time delay). + + :param status: Key to look up status message in the status_text dictionary. + :type status: str. + :param hold: When *hold=True*, the status update will not time out. + :type hold: bool. + :return: None + """ + if status in self.status_text.keys(): + self.status.config(text=self.status_text[status]) + if not hold: + self.status.after(self.STATUS_DELAY, lambda: self.status.config(text=self.status_text['READY'])) + else: + self.status.config(text=str(status)) + if not hold: + self.status.after(self.STATUS_DELAY, lambda: self.status.config(text=self.status_text['READY'])) + +if __name__ == '__main__': + app = MainWindow(None) + app.mainloop() From a729b07a1fbe6addd125faabe68f2f660b0a1a08 Mon Sep 17 00:00:00 2001 From: Ken Latimer Date: Wed, 12 Dec 2018 20:05:58 -0800 Subject: [PATCH 19/27] dir patch --- robot_data_visualizer/test/test_time_convert.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/robot_data_visualizer/test/test_time_convert.py b/robot_data_visualizer/test/test_time_convert.py index f326c31..1e8c058 100644 --- a/robot_data_visualizer/test/test_time_convert.py +++ b/robot_data_visualizer/test/test_time_convert.py @@ -1,4 +1,6 @@ import sys +import os +os.chdir(os.path.abspath('.')) sys.path.append('.') sys.path.append('..') import unittest From 110a18faf5b906bd1041709bff8effeb574023df Mon Sep 17 00:00:00 2001 From: Ken Latimer Date: Wed, 12 Dec 2018 20:09:07 -0800 Subject: [PATCH 20/27] change init import order --- robot_data_visualizer/__init__.py | 2 +- robot_data_visualizer/test/test_threshold_lidar.py | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/robot_data_visualizer/__init__.py b/robot_data_visualizer/__init__.py index a5184f1..4d681f6 100644 --- a/robot_data_visualizer/__init__.py +++ b/robot_data_visualizer/__init__.py @@ -1,3 +1,4 @@ +from .time_convert import epoch_to_date_time from .get_dates_umich import get_dates_umich from .view_lidar import hokuyo_plot from .view_lidar import threshold_lidar_pts @@ -11,6 +12,5 @@ from .get_dates_umich import get_dates_umich from .view_lidar import hokuyo_plot from .view_lidar import threshold_lidar_pts -from .time_convert import epoch_to_date_time __all__ = ['DataLoader', 'DataManager', 'download_tar', 'get_dates_umich', 'map_for_gps', 'read_hokuyo', 'StaticMapBaseLayer', 'tar_extract', 'hokuyo_plot', 'threshold_lidar_pts', 'epoch_to_date_time'] diff --git a/robot_data_visualizer/test/test_threshold_lidar.py b/robot_data_visualizer/test/test_threshold_lidar.py index 6bd0770..edc1abd 100644 --- a/robot_data_visualizer/test/test_threshold_lidar.py +++ b/robot_data_visualizer/test/test_threshold_lidar.py @@ -2,8 +2,7 @@ import unittest sys.path.append('.') sys.path.append('..') -from robot_data_visualizer.threshold_lidar import threshold_lidar_pts - +from robot_data_visualizer.view_lidar import threshold_lidar_pts from robot_data_visualizer.data_manager import DataManager class BasicTest(unittest.TestCase): From d032a6aa5f3117d10633b56e2e37627a00f31319 Mon Sep 17 00:00:00 2001 From: Ken Latimer Date: Wed, 12 Dec 2018 20:13:25 -0800 Subject: [PATCH 21/27] removed a test --- .travis.yml | 1 - robot_data_visualizer/test/run_tests.py | 2 +- .../test/test_time_convert.py | 31 ------------------- 3 files changed, 1 insertion(+), 33 deletions(-) delete mode 100644 robot_data_visualizer/test/test_time_convert.py diff --git a/.travis.yml b/.travis.yml index d0e9c76..3420db5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,7 +10,6 @@ before_install: - chmod +x robot_data_visualizer/test/test_tar_extract.py - chmod +x robot_data_visualizer/test/test_get_dates_umich.py - chmod +x robot_data_visualizer/test/test_threshold_lidar.py - - chmod +x robot_data_visualizer/test/test_time_convert.py install: - pip install -r requirements.txt script: diff --git a/robot_data_visualizer/test/run_tests.py b/robot_data_visualizer/test/run_tests.py index 4e7f93b..ffd8555 100644 --- a/robot_data_visualizer/test/run_tests.py +++ b/robot_data_visualizer/test/run_tests.py @@ -1,7 +1,7 @@ import sys import unittest -test_modules = ["test_data_manager", "test_download_tar", "test_get_dates_umich", "test_tar_extract", "test_time_convert", "test_threshold_lidar"] +test_modules = ["test_data_manager", "test_download_tar", "test_get_dates_umich", "test_tar_extract", "test_threshold_lidar"] suite = unittest.TestSuite() diff --git a/robot_data_visualizer/test/test_time_convert.py b/robot_data_visualizer/test/test_time_convert.py deleted file mode 100644 index 1e8c058..0000000 --- a/robot_data_visualizer/test/test_time_convert.py +++ /dev/null @@ -1,31 +0,0 @@ -import sys -import os -os.chdir(os.path.abspath('.')) -sys.path.append('.') -sys.path.append('..') -import unittest -from robot_data_visualizer.time_convert import epoch_to_date_time - -class BasicTest(unittest.TestCase): - """setup for unittests.""" - def setUp(self): - time0 = 1347517370 - time1 = 1347517370111111 - time2 = 12 - self.convert_time0 = epoch_to_date_time(time0) - self.convert_time1 = epoch_to_date_time(time1) - self.convert_time2 = epoch_to_date_time(time2) - def test_specific_value(self): - """Checks for correct output of 10 digit epoch (no slicing by function needed).""" - self.assertEqual(self.convert_time0, 'Wed Sep 12 23:22:50 2012') - - def test_specific_value_plus_subseconds(self): - """Checks for correct output of 10+ digit epoch (slicing by function needed).""" - self.assertEqual(self.convert_time1, 'Wed Sep 12 23:22:50 2012') - def test_short_time(self): - """Checks for correct output of <10 digit epoch (no slicing by function needed).""" - self.assertEqual(self.convert_time2, 'Wed Dec 31 16:00:12 1969') - - -if __name__ == '__main__': - unittest.main() \ No newline at end of file From 75982c6a86814b0d14e62c02073f29b6792bba99 Mon Sep 17 00:00:00 2001 From: Ken Latimer Date: Wed, 12 Dec 2018 20:53:16 -0800 Subject: [PATCH 22/27] added main_window and changed init --- robot_data_visualizer/__init__.py | 6 +- robot_data_visualizer/main_window.py | 3 - .../robot_data_visualizer.py | 629 ------------------ 3 files changed, 3 insertions(+), 635 deletions(-) delete mode 100644 robot_data_visualizer/robot_data_visualizer.py diff --git a/robot_data_visualizer/__init__.py b/robot_data_visualizer/__init__.py index 4d681f6..21aebba 100644 --- a/robot_data_visualizer/__init__.py +++ b/robot_data_visualizer/__init__.py @@ -1,5 +1,7 @@ -from .time_convert import epoch_to_date_time +__all__ = ['data_loader', 'data_manager', 'download_tar', 'get_dates_umich', 'map_for_gps', 'read_hokuyo', 'static_map_base_layer', 'tar_extract', 'hokuyo_plot', 'threshold_lidar_pts', 'epoch_to_date_time'] + from .get_dates_umich import get_dates_umich +from .time_convert import epoch_to_date_time from .view_lidar import hokuyo_plot from .view_lidar import threshold_lidar_pts from .static_map_base_layer import StaticMapBaseLayer @@ -12,5 +14,3 @@ from .get_dates_umich import get_dates_umich from .view_lidar import hokuyo_plot from .view_lidar import threshold_lidar_pts - -__all__ = ['DataLoader', 'DataManager', 'download_tar', 'get_dates_umich', 'map_for_gps', 'read_hokuyo', 'StaticMapBaseLayer', 'tar_extract', 'hokuyo_plot', 'threshold_lidar_pts', 'epoch_to_date_time'] diff --git a/robot_data_visualizer/main_window.py b/robot_data_visualizer/main_window.py index 8c012b7..d07eadc 100644 --- a/robot_data_visualizer/main_window.py +++ b/robot_data_visualizer/main_window.py @@ -1,7 +1,4 @@ import os -import sys -sys.path.append('.') -sys.path.append('..') import warnings warnings.filterwarnings("ignore") diff --git a/robot_data_visualizer/robot_data_visualizer.py b/robot_data_visualizer/robot_data_visualizer.py deleted file mode 100644 index af8893e..0000000 --- a/robot_data_visualizer/robot_data_visualizer.py +++ /dev/null @@ -1,629 +0,0 @@ -import os -import warnings -warnings.filterwarnings("ignore") -import sys -sys.path.append('..') -from datetime import datetime - -import matplotlib -matplotlib.use("TkAgg") -import matplotlib.lines as lines -import matplotlib.image as mpimg -from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg -from matplotlib.figure import Figure - -import tkinter as tk - -from robot_data_visualizer.get_dates_umich import get_dates_umich -from robot_data_visualizer.staticmap_for_gps import map_for_gps -from robot_data_visualizer.data_manager import DataManager -from robot_data_visualizer.plot_lidar import hokuyo_plot -from robot_data_visualizer.lidar_viewer import threshold_lidar_pts - - -class VisualizerFrame(tk.Frame): - """ - This is the main window where the robot data is seen by the user. - """ - - def __init__(self, parent): - tk.Frame.__init__(self, parent) - self.parent = parent - self.label = None - self.ax_map = None - self.ax_gps = None - self.ax_lidar = None - self.map_plot = None - self.gps_plot = None - self.lidar_plot = None - self.canvas = None - self.data_manager = None - self.gps_data = None - self.lidar_data = None - self.gps_on = False - self.map_on = False - self.lidar_on = False - self.map_image = None - self.widgets() - - def widgets(self): - """ - Set up widgets for the frame. - - :return: None - """ - self.label = tk.Label(self, text="Viewer") - self.label.pack(side=tk.TOP) - - self.fig = Figure(figsize=(5, 4), dpi=100) - self.ax_map = self.fig.add_subplot(111) - self.ax_gps = self.fig.add_subplot(111) - self.ax_lidar = self.fig.add_subplot(111) - - self.canvas = FigureCanvasTkAgg(self.fig, master=self.master) - self.canvas.draw() - self.canvas.get_tk_widget().pack(fill=tk.BOTH, expand=True) - - def callback_initialize_data_manager(self): - """ - This callback responds to the *Load Data* button. - - :return: None - """ - date = self.parent.toolbar.date.get() - if self.data_manager is None: - self.setup_data(date) - else: - if self.data_manager.date is not date: - os.chdir('../..') # TODO patched here - add this to end of load_gps() / load_lidar() functions - self.setup_data(date) - else: - pass - - def setup_data(self, date): - """ - This function sets up all of the data (except lidar) needed by the application. - - :param date: Determines which date from the robotics dataset to use. - :type date: str. - :return: None - """ - if self.data_manager is not None: - os.chdir(self.data_manager.owd) - self.ax_gps.clear() - self.ax_map.clear() - self.ax_lidar.clear() - self.canvas.draw() - self.gps_on = False - self.map_on = False - self.lidar_on = False - self.parent.set_status('DM_START', hold=True) - self.data_manager = DataManager(date) - self.data_manager.setup_data_files('sensor_data') - self.data_manager.load_gps() - x_coords, y_coords = map_for_gps(self.data_manager.data_dict, self.data_manager.data_dir) - self.lidar_data = None - self.gps_data = [x_coords, y_coords] # in image coords - self.map_image = mpimg.imread(os.path.join(self.data_manager.data_dir, 'map.png')) - self.label.config(text='Viewer') - self.parent.set_status('DM_READY') - - def callback_gps_on(self): - """ - This callback responds to the *On* button under the *GPS Control* menu. - - :return: None - """ - if not self.lidar_on: - if not self.gps_on: - self.gps_on = True - self.parent.set_status('GPS_START') - idx = self.get_idx_for_gps_update() - self.update_timestamp(idx) - self.gps_plot = self.ax_gps.plot(self.gps_data[0][:idx], self.gps_data[1][:idx], 'r')[0] - self.canvas.show() - self.parent.set_status('GPS_READY') - else: - pass - else: - self.callback_lidar_off() - self.callback_gps_on() - - def callback_gps_off(self): - """ - This callback responds to the *Off* button under the *GPS Control* menu. - - :return: None - """ - if self.gps_on: - self.gps_on = False - self.update_gps(0) - self.label.config(text='Viewer') - self.parent.set_status('GPS_REMOVE') - else: - pass - - def callback_gps_slider_changed(self, event): - """ - This callback responds to the scale position changing under the *GPS Control* menu. - - :return: None - """ - self.gps_on = True - idx = self.get_idx_for_gps_update() - self.update_gps(idx) - self.update_timestamp(idx) - self.parent.set_status('GPS_UPDATE') - - def update_gps(self, idx): - """ - This function updates the GPS data that is displayed in the main viewing window. - - :param idx: Index into the array of GPS data that is to be displayed. - :type idx: int. - :return: None - """ - if self.gps_data is not None: - self.gps_plot.set_xdata(self.gps_data[0][:idx]) - self.gps_plot.set_ydata(self.gps_data[1][:idx]) - self.canvas.draw() - else: - pass - - def update_timestamp(self, idx): - """ - This function updates the timestamp in the main viewing window. - - :param idx: Index into the array of GPS data to be used for retrieval of the time stamp. - :type idx: int. - :return: None - """ - curr_tstamp = self.get_timestamp_for_gps_update(idx) - self.label.config(text=str('time stamp: ' + curr_tstamp)) - - def get_idx_for_gps_update(self): - """ - This function returns the index to be used for updating the GPS data. - :return: int -- the index to be used for the GPS update - """ - slider_val = self.parent.control.gps_control.selection_scale.get() - idx_ratio = len(self.gps_data[0]) / 100 - return int(slider_val * idx_ratio) - - def get_timestamp_for_gps_update(self, gps_data_idx): - """ - This function returns the timestamp in a readable format for the given GPS data index. - - :param gps_data_idx: Index into the array of GPS data to be used for retrieval of the time stamp. - :return: str -- the timestamp - """ - idx_ratio = len(self.data_manager.data_dict['gps']['tstamp']) / len(self.gps_data[0]) - idx = int(gps_data_idx * idx_ratio) - 1 - ts = int(self.data_manager.data_dict['gps']['tstamp'][idx] / 1000000) - return datetime.fromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S') - - def callback_map_on(self): - """ - This callback responds to the *On* button under the *Map Control* menu. - - :return: None - """ - if not self.lidar_on: - if not self.map_on: - self.map_on = True - if self.map_image is not None: - self.ax_map.imshow(self.map_image) - # draw scale on the map - map_scale = self.get_map_scale() - line = lines.Line2D([0, 200], [0, 0], linewidth=4, color='b') - self.ax_map.add_line(line) - distance = map_scale * 200 - if distance > 1000: - scale_str = "scale = " + str(float("%.2f" % (distance / 1000))) + " kilometers" - else: - scale_str = "scale = " + str(float("%.2f" % (distance))) + " meters" - self.ax_map.text(0, -10, scale_str, fontsize=8) - self.canvas.draw() - self.parent.set_status('MAP_READY') - else: - self.parent.set_status('MAP_ERROR') - else: - pass - else: - self.callback_lidar_off() - self.callback_map_on() - - def callback_map_off(self): - """ - This callback responds to the *Off* button under the *Map Control* menu. - - :return: None - """ - if self.map_on: - self.map_on = False - self.ax_map.clear() - if self.gps_on: - self.gps_on = False - self.callback_gps_on() # because the previous line clears both map and gps - self.canvas.draw() - else: - pass - - def callback_date_changed(self): - """ - This callback responds to a change in the date selection menu in the toolbar. - - :return: None - """ - new_date = self.parent.toolbar.date.get() # Need to call get() because this is a StringVar object - if self.parent.toolbar.date is not new_date: - self.parent.toolbar.date.set(new_date) - else: - pass - - def get_map_scale(self): - """ - This function calculates the map scale in units of meters per pixel. - - :return: float64 -- map scale (m/px) - """ - k = 111000 # meters per degree of latitude (approx.) - lat_range = self.data_manager.data_dict['gps_range'][0] - d_lat_range = abs(lat_range[0] - lat_range[1]) - d_x_pixels = abs(max(self.gps_data[0]) - min(self.gps_data[0])) - map_scale = d_lat_range * k / d_x_pixels - return map_scale # units of meters per pixel - - def callback_lidar_slider_changed(self, event): - """ - This callback responds to the scale position changing under the *Lidar Control* menu. - - :return: None - """ - self.lidar_on = True - idx = self.get_idx_for_lidar_update() - self.update_lidar(idx) - # self.update_timestamp(idx) - self.parent.set_status('Lidar updated') - - def get_idx_for_lidar_update(self): - """ - This function returns the index to be used for updating the Lidar data. - - :return: int -- the index to be used for the Lidar update - """ - slider_val = self.parent.control.lidar_control.selection_scale.get() - idx_ratio = len(self.lidar_data) / 100 - return max(int(slider_val * idx_ratio) - 1, 0) - - def update_lidar(self, idx): - """ - This function updates the Lidar data that is displayed in the main viewing window. - - :param idx: Index into the array of Lidar data that is to be displayed. - :type idx: int. - :return: None - """ - if self.lidar_data is not None: - yt, xt, _ = threshold_lidar_pts(self.lidar_data[idx]) - self.lidar_plot.set_xdata(xt) - self.lidar_plot.set_ydata(yt) - self.canvas.draw() - else: - pass - - def callback_lidar_on(self): - """ - This callback responds to the *On* button under the *Lidar Control* menu. - - :return: None - """ - if not self.lidar_on: - self.lidar_on = True - self.callback_map_off() - self.callback_gps_off() - if self.data_manager is None: - self.callback_initialize_data_manager() - if not 'lidar' in self.data_manager.data_dict.keys(): - self.data_manager.setup_data_files('hokuyo') - pickled = True - delete_pickle = False - self.data_manager.load_lidar(4000, pickled, delete_pickle) # TODO - global constant for lidar samples - self.lidar_data = self.data_manager.data_dict['lidar'] - - xlimits, ylimits = [-32, 32], [-32, 32] - self.ax_lidar.set_xlim(xlimits) - self.ax_lidar.set_ylim(ylimits) - hokuyo_plot(self.ax_lidar) - yt, xt, _ = threshold_lidar_pts(self.lidar_data[0]) - self.lidar_plot = self.ax_lidar.plot(xt, yt, 'r.')[0] - self.canvas.show() - else: - pass - - - def callback_lidar_off(self): - """ - This callback responds to the *Off* button under the *Lidar Control* menu. - - :return: None - """ - if self.lidar_on: - self.lidar_on = False - self.ax_lidar.clear() - self.canvas.draw() - else: - pass - - -class ToolbarFrame(tk.Frame): - """ - This class represents the toolbar at the top of the window. - """ - - def __init__(self, parent): - tk.Frame.__init__(self, parent) - self.parent = parent - self.date = None - self.dates = get_dates_umich() - self.load_button = None - self.option_menu = None - self.widgets() - - def widgets(self): - """ - Set up widgets for the frame. - - :return: None - """ - self.dates = get_dates_umich() - self.load_button = tk.Button(self, text="Load Data") - self.load_button.pack(side=tk.LEFT, padx=2, pady=2) - - self.date = tk.StringVar(self) - self.date.set(self.dates[24]) - self.option_menu = tk.OptionMenu(self, self.date, *self.dates, command=self.callback_date_changed) - self.option_menu.pack(side=tk.LEFT, padx=2, pady=2) - - def bind_widgets(self): - """ - Bind widgets to their callback functions. - - :return: None - """ - self.load_button.config(command=self.parent.window.callback_initialize_data_manager) - - def callback_date_changed(self, event): - self.parent.window.callback_date_changed() - -class ControlFrame(tk.Frame): - """ - This class represents the controls on the right hand side of the main - window. There are two nested classes for the slam and map controls. - """ - - def __init__(self, parent): - tk.Frame.__init__(self, parent, width=400) - self.parent = parent - self.root = parent - self.slam_control = None - self.map_control = None - self.lidar_control = None - self.widgets() - - class GpsControlFrame(tk.Frame): - - def __init__(self, parent, root): - tk.Frame.__init__(self, parent, width=400) - self.parent = parent - self.root = root - self.selection_scale = None - self.scale_val = None - self.on_button = None - self.off_button = None - self.widgets() - - def widgets(self): - """ - Set up widgets for the frame. - - :return: None - """ - label = tk.Label(self, text="GPS Control", bg="blue", fg="white") - label.pack(side=tk.TOP, fill=tk.X) - - self.selection_scale = tk.Scale(self, orient=tk.HORIZONTAL, to=100, variable=self.scale_val) - self.selection_scale.set(100) - self.selection_scale.pack(side=tk.TOP) - - self.on_button = tk.Button(self, text="On", bg="green", fg="white") - self.on_button.pack(side=tk.LEFT) - - self.off_button = tk.Button(self, text="Off", bg="red", fg="white") - self.off_button.pack(side=tk.RIGHT) - - def bind_widgets(self): - """ - Bind widgets to their callback functions. - - :return: None - """ - self.on_button.config(command=self.root.window.callback_gps_on) - self.off_button.config(command=self.root.window.callback_gps_off) - self.selection_scale.bind("", self.root.window.callback_gps_slider_changed) - - - class MapControlFrame(tk.Frame): - - def __init__(self, parent, root): - tk.Frame.__init__(self, parent, width=400) - self.parent = parent - self.root = root - self.on_button = None - self.off_button = None - self.widgets() - - def widgets(self): - """ - Set up widgets for the frame. - - :return: None - """ - label = tk.Label(self, text="Map Control", bg="blue", fg="white") - label.pack(fill=tk.X) - - self.on_button = tk.Button(self, text="On", bg="green", fg="white") - self.on_button.pack(side=tk.LEFT) - - self.off_button = tk.Button(self, text="Off", bg="red", fg="white") - self.off_button.pack(side=tk.RIGHT) - - def bind_widgets(self): - """ - Bind widgets to their callback functions. - - :return: None - """ - self.on_button.config(command=self.root.window.callback_map_on) - self.off_button.config(command=self.root.window.callback_map_off) - - class LidarControlFrame(tk.Frame): - - def __init__(self, parent, root): - tk.Frame.__init__(self, parent, width=400) - self.parent = parent - self.root = root - self.scale_val = None - self.on_button = None - self.off_button = None - self.widgets() - - def widgets(self): - """ - Set up widgets for the frame. - - :return: None - """ - label = tk.Label(self, text="Lidar Control", bg="blue", fg="white") - label.pack(side=tk.TOP, fill=tk.X) - - self.selection_scale = tk.Scale(self, orient=tk.HORIZONTAL, to=100, variable=self.scale_val) - self.selection_scale.set(100) - self.selection_scale.pack(side=tk.TOP) - - self.on_button = tk.Button(self, text="On", bg="green", fg="white") - self.on_button.pack(side=tk.LEFT) - - self.off_button = tk.Button(self, text="Off", bg="red", fg="white") - self.off_button.pack(side=tk.RIGHT) - - def bind_widgets(self): - """ - Bind widgets to their callback functions. - - :return: None - """ - self.on_button.config(command=self.root.window.callback_lidar_on) - self.off_button.config(command=self.root.window.callback_lidar_off) - self.selection_scale.bind("", self.root.window.callback_lidar_slider_changed) - - def widgets(self): - """ - Set up widgets for the frame. - - :return: None - """ - self.gps_control = self.GpsControlFrame(self, self.root) - self.gps_control.pack(fill=tk.X) - self.map_control = self.MapControlFrame(self, self.root) - self.map_control.pack(fill=tk.X) - self.lidar_control = self.LidarControlFrame(self, self.root) - self.lidar_control.pack(fill=tk.X) - - def bind_widgets(self): - """ - Bind widgets to their callback functions. - - :return: None - """ - self.gps_control.bind_widgets() - self.map_control.bind_widgets() - self.lidar_control.bind_widgets() - - -class MainWindow(tk.Tk): - """ - This is the main window for the application. Here the main layout is - established using a combination of the above classes and individual - tkinter widgets. - """ - - def __init__(self, parent): - tk.Tk.__init__(self, parent) - self.parent = parent - self.status_text = dict(READY="Ready", - DM_START="Initializing data manager ...", - DM_READY="Data is ready", - DM_NOT_READY="Data not loaded", - GPS_START="GPS loading ...", - GPS_READY="GPS is ready", - GPS_REMOVE="GPS removed", - GPS_UPDATE="GPS updated", - MAP_START="Map loading ...", - MAP_READY="Map is ready", - MAP_REMOVE="Map removed", - MAP_ERROR="Must load data before map can be displayed") - self.STATUS_DELAY = 2000 # (ms) delay between status changes - self.title("Robot Data Visualizer") - self.mainWidgets() - - - def mainWidgets(self): - """ - Set up widgets for the main window frame. - - :return: None - """ - # Toolbar - self.toolbar = ToolbarFrame(self) - self.toolbar.pack(side=tk.TOP, fill=tk.X) - - # Status bar - self.status = tk.Label(self, text=self.status_text['READY'], bd=1, relief=tk.SUNKEN, anchor=tk.W) - self.status.pack(side=tk.BOTTOM, fill=tk.X) - - # Controls - GPS and Map - self.control = ControlFrame(self) - self.control.pack(side=tk.RIGHT, fill=tk.Y) - - # Main viewing window - self.window = VisualizerFrame(self) - self.window.pack(side=tk.LEFT, padx=2, pady=2) - - # Bind widgets to their callback functions - self.toolbar.bind_widgets() - self.control.bind_widgets() - - - def set_status(self, status, hold=False): - """ - This function sets the status bar at the bottom of the window (with a time delay). - - :param status: Key to look up status message in the status_text dictionary. - :type status: str. - :param hold: When *hold=True*, the status update will not time out. - :type hold: bool. - :return: None - """ - if status in self.status_text.keys(): - self.status.config(text=self.status_text[status]) - if not hold: - self.status.after(self.STATUS_DELAY, lambda: self.status.config(text=self.status_text['READY'])) - else: - self.status.config(text=str(status)) - if not hold: - self.status.after(self.STATUS_DELAY, lambda: self.status.config(text=self.status_text['READY'])) - -if __name__ == '__main__': - app = MainWindow(None) - app.mainloop() From 00f88165919d46fba95c6b68b25c3d3e2f908801 Mon Sep 17 00:00:00 2001 From: Ken Latimer Date: Wed, 12 Dec 2018 21:06:58 -0800 Subject: [PATCH 23/27] main window runs in pycharm and terminal --- robot_data_visualizer/data_manager.py | 8 ++++---- robot_data_visualizer/main_window.py | 14 +++++++++----- robot_data_visualizer/staticmap_for_gps.py | 4 ++-- 3 files changed, 15 insertions(+), 11 deletions(-) diff --git a/robot_data_visualizer/data_manager.py b/robot_data_visualizer/data_manager.py index 47c89cc..892b7a1 100644 --- a/robot_data_visualizer/data_manager.py +++ b/robot_data_visualizer/data_manager.py @@ -1,9 +1,9 @@ import os import pickle -from robot_data_visualizer.data_loader import DataLoader -from robot_data_visualizer.read_hokuyo_30m import read_hokuyo -from robot_data_visualizer.tar_extract import tar_extract -from robot_data_visualizer.download_tar import download_tar +from data_loader import DataLoader +from read_hokuyo_30m import read_hokuyo +from tar_extract import tar_extract +from download_tar import download_tar class DataManager: diff --git a/robot_data_visualizer/main_window.py b/robot_data_visualizer/main_window.py index d07eadc..5898775 100644 --- a/robot_data_visualizer/main_window.py +++ b/robot_data_visualizer/main_window.py @@ -1,4 +1,8 @@ import os +import sys +#sys.path.append('.') +#sys.path.append('..') +#sys.path.append('../..') import warnings warnings.filterwarnings("ignore") @@ -14,11 +18,11 @@ import tkinter as tk -from robot_data_visualizer.get_dates_umich import get_dates_umich -from robot_data_visualizer.staticmap_for_gps import map_for_gps -from robot_data_visualizer.data_manager import DataManager -from robot_data_visualizer.view_lidar import hokuyo_plot -from robot_data_visualizer.view_lidar import threshold_lidar_pts +from get_dates_umich import get_dates_umich +from staticmap_for_gps import map_for_gps +from data_manager import DataManager +from view_lidar import hokuyo_plot +from view_lidar import threshold_lidar_pts class VisualizerFrame(tk.Frame): diff --git a/robot_data_visualizer/staticmap_for_gps.py b/robot_data_visualizer/staticmap_for_gps.py index 03055f8..0926d4c 100644 --- a/robot_data_visualizer/staticmap_for_gps.py +++ b/robot_data_visualizer/staticmap_for_gps.py @@ -2,8 +2,8 @@ import os from staticmap import Line -from robot_data_visualizer.static_map_base_layer import StaticMapBaseLayer -from robot_data_visualizer.data_manager import DataManager +from static_map_base_layer import StaticMapBaseLayer +from data_manager import DataManager def generate_coordinates(data_dict): ''' From 4f560e24d757c98b6566d3dad0578f312bd6afcf Mon Sep 17 00:00:00 2001 From: Ken Latimer Date: Wed, 12 Dec 2018 21:12:40 -0800 Subject: [PATCH 24/27] modified init --- robot_data_visualizer/__init__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/robot_data_visualizer/__init__.py b/robot_data_visualizer/__init__.py index 21aebba..b97bde5 100644 --- a/robot_data_visualizer/__init__.py +++ b/robot_data_visualizer/__init__.py @@ -1,10 +1,10 @@ -__all__ = ['data_loader', 'data_manager', 'download_tar', 'get_dates_umich', 'map_for_gps', 'read_hokuyo', 'static_map_base_layer', 'tar_extract', 'hokuyo_plot', 'threshold_lidar_pts', 'epoch_to_date_time'] +__all__ = ['data_loader', 'data_manager', 'download_tar', 'get_dates_umich', 'map_for_gps', 'read_hokuyo', 'static_map_base_layer', 'staticmap_for_gps', 'tar_extract', 'hokuyo_plot', 'threshold_lidar_pts', 'epoch_to_date_time'] +from .static_map_base_layer import StaticMapBaseLayer from .get_dates_umich import get_dates_umich from .time_convert import epoch_to_date_time from .view_lidar import hokuyo_plot from .view_lidar import threshold_lidar_pts -from .static_map_base_layer import StaticMapBaseLayer from .staticmap_for_gps import map_for_gps from .data_loader import DataLoader from .data_manager import DataManager From 470d2c9c4f1037cd01c310dcd4048a397b519cc5 Mon Sep 17 00:00:00 2001 From: Ken Latimer Date: Wed, 12 Dec 2018 21:27:28 -0800 Subject: [PATCH 25/27] added append --- robot_data_visualizer/staticmap_for_gps.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/robot_data_visualizer/staticmap_for_gps.py b/robot_data_visualizer/staticmap_for_gps.py index 0926d4c..d1c67bd 100644 --- a/robot_data_visualizer/staticmap_for_gps.py +++ b/robot_data_visualizer/staticmap_for_gps.py @@ -1,9 +1,11 @@ '''This file is used to generate all points needed for plot in real-time.''' import os +import sys from staticmap import Line -from static_map_base_layer import StaticMapBaseLayer from data_manager import DataManager +sys.path.append('..') +from static_map_base_layer import StaticMapBaseLayer def generate_coordinates(data_dict): ''' From de5945f2dfe50a81ec148bf3870af5172bdd8df1 Mon Sep 17 00:00:00 2001 From: Ken Latimer Date: Wed, 12 Dec 2018 21:59:45 -0800 Subject: [PATCH 26/27] moved imports in init --- robot_data_visualizer/__init__.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/robot_data_visualizer/__init__.py b/robot_data_visualizer/__init__.py index b97bde5..f33d24c 100644 --- a/robot_data_visualizer/__init__.py +++ b/robot_data_visualizer/__init__.py @@ -1,11 +1,6 @@ __all__ = ['data_loader', 'data_manager', 'download_tar', 'get_dates_umich', 'map_for_gps', 'read_hokuyo', 'static_map_base_layer', 'staticmap_for_gps', 'tar_extract', 'hokuyo_plot', 'threshold_lidar_pts', 'epoch_to_date_time'] -from .static_map_base_layer import StaticMapBaseLayer from .get_dates_umich import get_dates_umich -from .time_convert import epoch_to_date_time -from .view_lidar import hokuyo_plot -from .view_lidar import threshold_lidar_pts -from .staticmap_for_gps import map_for_gps from .data_loader import DataLoader from .data_manager import DataManager from .download_tar import download_tar @@ -14,3 +9,8 @@ from .get_dates_umich import get_dates_umich from .view_lidar import hokuyo_plot from .view_lidar import threshold_lidar_pts +from .time_convert import epoch_to_date_time +from .view_lidar import hokuyo_plot +from .view_lidar import threshold_lidar_pts +from .static_map_base_layer import StaticMapBaseLayer +from .staticmap_for_gps import map_for_gps \ No newline at end of file From 9b3c8d4b74a9572f40367ddb43931a01a57510a7 Mon Sep 17 00:00:00 2001 From: Ken Latimer Date: Wed, 12 Dec 2018 22:04:16 -0800 Subject: [PATCH 27/27] dir change in data manager --- robot_data_visualizer/data_manager.py | 1 + 1 file changed, 1 insertion(+) diff --git a/robot_data_visualizer/data_manager.py b/robot_data_visualizer/data_manager.py index 892b7a1..8f41a0b 100644 --- a/robot_data_visualizer/data_manager.py +++ b/robot_data_visualizer/data_manager.py @@ -1,4 +1,5 @@ import os +os.chdir(os.path.abspath('.')) import pickle from data_loader import DataLoader from read_hokuyo_30m import read_hokuyo