├── README.md
├── ROS nodes
├── .gitignore
├── CMakeLists.txt
├── actuator
│ ├── CMakeLists.txt
│ ├── package.xml
│ └── scripts
│ │ ├── _
│ │ ├── __pycache__
│ │ ├── pca9685.cpython-35.pyc
│ │ └── pca9685.cpython-36.pyc
│ │ ├── actuator_node.py
│ │ ├── pca9685.py
│ │ ├── pca9685.pyc
│ │ └── test.py
├── common_code
│ ├── CMakeLists.txt
│ ├── camerav2_160x120.launch
│ ├── camerav2_320x240.launch
│ ├── raspi_param_config-night.yaml
│ └── raspi_param_config.yaml
├── image_processing_node
│ ├── CMakeLists.txt
│ ├── package.xml
│ └── scripts
│ │ └── image_processing_node.py
├── shell_scripts
│ ├── launch_laptop_image_uncompress_node.sh
│ ├── launch_laptop_image_view_node.sh
│ ├── launch_laptop_joystick_node.sh
│ ├── launch_laptop_selfdriving_node.sh
│ ├── launch_laptop_training_node.sh
│ ├── launch_raspi_autopilot_node_deleted.sh
│ ├── launch_raspi_camera_node.sh
│ ├── launch_raspi_joystick_node.sh
│ ├── launch_raspi_training_node.sh
│ ├── setup_cond_env_image__processing_node.txt
│ ├── setup_cond_env_image__processing_node_gpu.txt
│ ├── setup_cond_env_training_node.txt
│ ├── setup_laptop_camera_node_config.sh
│ ├── setup_laptop_rosmaster_variables.sh
│ ├── setup_parameters.sh
│ └── setup_raspi_ros_variables.sh
└── training_node
│ ├── CMakeLists.txt
│ ├── bin
│ ├── activate
│ ├── conda
│ └── deactivate
│ ├── package.xml
│ └── scripts
│ ├── __pycache__
│ └── config.cpython-36.pyc
│ ├── log.csv
│ ├── training_node.py
│ └── training_node_raspi.py
├── images
└── Architecture.png
└── model
├── .gitignore
├── Image_to_video.ipynb
├── advanced_lane_helper_functions.py
├── camera_cal
├── calibration1.jpg
├── calibration10.jpg
├── calibration11.jpg
├── calibration12.jpg
├── calibration13.jpg
├── calibration14.jpg
├── calibration15.jpg
├── calibration16.jpg
├── calibration17.jpg
├── calibration18.jpg
├── calibration19.jpg
├── calibration2.jpg
├── calibration20.jpg
├── calibration3.jpg
├── calibration4.jpg
├── calibration5.jpg
├── calibration6.jpg
├── calibration7.jpg
├── calibration8.jpg
└── calibration9.jpg
├── data_prep.py
├── data_prep_raspi_nodes.py
├── explore_training_windows.py
├── expore_training.py
├── model.ipynb
├── model.py
├── model_test.py
├── requirement.yml
├── test.py
├── test_gpu.py
├── test_model_images1
├── image_1519959033420.jpg
├── image_1519959033468.jpg
├── image_1519959033515.jpg
├── image_1519959033551.jpg
├── image_1519959033557.jpg
├── image_1519959033615.jpg
├── image_1519959033648.jpg
├── image_1519959033698.jpg
├── image_1519959033732.jpg
├── image_1519959033759.jpg
├── image_1519959033776.jpg
├── image_1519959033792.jpg
├── image_1519959033814.jpg
├── image_1519959033846.jpg
├── image_1519959033875.jpg
├── image_1519959033916.jpg
├── image_1519959033967.jpg
├── image_1519959034002.jpg
├── image_1519959034018.jpg
├── image_1519959034041.jpg
├── image_1519959034090.jpg
├── image_1519959034110.jpg
├── image_1519959034149.jpg
├── image_1519959034177.jpg
├── image_1519959034216.jpg
├── image_1519959034259.jpg
├── image_1519959034298.jpg
├── image_1519959034332.jpg
├── image_1519959034365.jpg
├── image_1519959034440.jpg
├── image_1519959034447.jpg
├── image_1519959034514.jpg
├── image_1519959034578.jpg
├── image_1519959034600.jpg
├── image_1519959034612.jpg
├── image_1519959034632.jpg
├── image_1519959034666.jpg
├── image_1519959034675.jpg
├── image_1519959034697.jpg
├── image_1519959034713.jpg
├── image_1519959034761.jpg
├── image_1519959034796.jpg
├── image_1519959034883.jpg
├── image_1519959034912.jpg
├── image_1519959034934.jpg
├── image_1519959034941.jpg
├── image_1519959034968.jpg
├── image_1519959035000.jpg
├── image_1519959035058.jpg
├── image_1519959035067.jpg
├── image_1519959035085.jpg
├── image_1519959035112.jpg
├── image_1519959035147.jpg
├── image_1519959035182.jpg
├── image_1519959035206.jpg
├── image_1519959035242.jpg
├── image_1519959035282.jpg
├── image_1519959035309.jpg
├── image_1519959035335.jpg
├── image_1519959035368.jpg
├── image_1519959035406.jpg
├── image_1519959035474.jpg
├── image_1519959035507.jpg
├── image_1519959035559.jpg
├── image_1519959035572.jpg
├── image_1519959035582.jpg
├── image_1519959035611.jpg
├── image_1519959035641.jpg
├── image_1519959035690.jpg
├── image_1519959035739.jpg
├── image_1519959035775.jpg
├── image_1519959035828.jpg
├── image_1519959035862.jpg
├── image_1519959035891.jpg
├── image_1519959035903.jpg
├── image_1519959035925.jpg
├── image_1519959035940.jpg
├── image_1519959035974.jpg
├── image_1519959036008.jpg
├── image_1519959036040.jpg
├── image_1519959036073.jpg
├── image_1519959036114.jpg
├── image_1519959036142.jpg
├── image_1519959036176.jpg
├── image_1519959036217.jpg
├── image_1519959036250.jpg
├── image_1519959036275.jpg
├── image_1519959036317.jpg
├── image_1519959036339.jpg
├── image_1519959036371.jpg
├── image_1519959036425.jpg
├── image_1519959036449.jpg
├── image_1519959036498.jpg
├── image_1519959036549.jpg
├── image_1519959036577.jpg
├── image_1519959036603.jpg
├── image_1519959036626.jpg
├── image_1519959036654.jpg
├── image_1519959036681.jpg
├── image_1519959036722.jpg
├── image_1519959036751.jpg
├── image_1519959036797.jpg
├── image_1519959036830.jpg
├── image_1519959036843.jpg
├── image_1519959036908.jpg
├── image_1519959036916.jpg
├── image_1519959036961.jpg
├── image_1519959036983.jpg
├── image_1519959037014.jpg
├── image_1519959037124.jpg
├── image_1519959037195.jpg
├── image_1519959037205.jpg
├── image_1519959037235.jpg
├── image_1519959037265.jpg
├── image_1519959037315.jpg
├── image_1519959037346.jpg
├── image_1519959037393.jpg
├── image_1519959037448.jpg
├── image_1519959037488.jpg
├── image_1519959037543.jpg
├── image_1519959037565.jpg
├── image_1519959037606.jpg
├── image_1519959037642.jpg
├── image_1519959037672.jpg
├── image_1519959037700.jpg
├── image_1519959037755.jpg
├── image_1519959037775.jpg
├── image_1519959037812.jpg
├── image_1519959037865.jpg
├── image_1519959037919.jpg
├── image_1519959037952.jpg
├── image_1519959037968.jpg
├── image_1519959038003.jpg
├── image_1519959038034.jpg
├── image_1519959038052.jpg
├── image_1519959038169.jpg
├── image_1519959038176.jpg
├── image_1519959038203.jpg
├── image_1519959038223.jpg
├── image_1519959038257.jpg
├── image_1519959038360.jpg
├── image_1519959038389.jpg
├── image_1519959038416.jpg
├── image_1519959038438.jpg
├── image_1519959038468.jpg
├── image_1519959038484.jpg
├── image_1519959038507.jpg
├── image_1519959038535.jpg
├── image_1519959038563.jpg
├── image_1519959038589.jpg
├── image_1519959038619.jpg
├── image_1519959038639.jpg
├── image_1519959038668.jpg
├── image_1519959038695.jpg
├── image_1519959038718.jpg
├── image_1519959038745.jpg
├── image_1519959038768.jpg
├── image_1519959038783.jpg
├── image_1519959038807.jpg
├── image_1519959038840.jpg
├── image_1519959038905.jpg
├── image_1519959038913.jpg
├── image_1519959038947.jpg
├── image_1519959039024.jpg
├── image_1519959039037.jpg
├── image_1519959039052.jpg
├── image_1519959039108.jpg
├── image_1519959039136.jpg
├── image_1519959039160.jpg
├── image_1519959039179.jpg
├── image_1519959039215.jpg
├── image_1519959039246.jpg
├── image_1519959039283.jpg
├── image_1519959039315.jpg
├── image_1519959039348.jpg
├── image_1519959039376.jpg
├── image_1519959039412.jpg
├── image_1519959039450.jpg
├── image_1519959039485.jpg
├── image_1519959039521.jpg
├── image_1519959039543.jpg
├── image_1519959039573.jpg
├── image_1519959039655.jpg
├── image_1519959039672.jpg
├── image_1519959039722.jpg
├── image_1519959039736.jpg
├── image_1519959039767.jpg
├── image_1519959039793.jpg
├── image_1519959039833.jpg
├── image_1519959039861.jpg
├── image_1519959039885.jpg
├── image_1519959039913.jpg
├── image_1519959039939.jpg
├── image_1519959039978.jpg
├── image_1519959040012.jpg
├── image_1519959040038.jpg
├── image_1519959040068.jpg
└── image_1519959040111.jpg
├── test_model_images2
├── image_1518829402848.jpg
├── image_1518829403029.jpg
├── image_1518829403188.jpg
├── image_1518829403360.jpg
├── image_1518829403527.jpg
├── image_1518829403721.jpg
├── image_1518829403885.jpg
├── image_1518829404075.jpg
├── image_1518829404332.jpg
├── image_1518829404546.jpg
├── image_1518829404769.jpg
├── image_1518829404955.jpg
├── image_1518829405160.jpg
├── image_1518829405358.jpg
├── image_1518829405543.jpg
├── image_1518829405764.jpg
├── image_1518829405959.jpg
├── image_1518829406250.jpg
├── image_1518829406524.jpg
├── image_1518829406719.jpg
├── image_1518829406880.jpg
├── image_1518829407178.jpg
├── image_1518829407390.jpg
├── image_1518829407586.jpg
├── image_1518829407764.jpg
├── image_1518829407959.jpg
├── image_1518829408151.jpg
├── image_1518829408381.jpg
├── image_1518829408546.jpg
├── image_1518829408689.jpg
├── image_1518829408816.jpg
├── image_1518829409043.jpg
├── image_1518829409227.jpg
└── image_1518829409445.jpg
├── test_model_images3
├── image_1518841305890.jpg
├── image_1518841306005.jpg
├── image_1518841306129.jpg
├── image_1518841306291.jpg
├── image_1518841306453.jpg
├── image_1518841306582.jpg
├── image_1518841306731.jpg
├── image_1518841306869.jpg
├── image_1518841307011.jpg
├── image_1518841307134.jpg
├── image_1518841307278.jpg
├── image_1518841307427.jpg
├── image_1518841307563.jpg
├── image_1518841307698.jpg
├── image_1518841307843.jpg
├── image_1518841307978.jpg
├── image_1518841308107.jpg
├── image_1518841308261.jpg
├── image_1518841308408.jpg
├── image_1518841308544.jpg
├── image_1518841308689.jpg
├── image_1518841308829.jpg
├── image_1518841308977.jpg
├── image_1518841309112.jpg
├── image_1518841309231.jpg
├── image_1518841309360.jpg
├── image_1518841309505.jpg
├── image_1518841309649.jpg
├── image_1518841309783.jpg
├── image_1518841309934.jpg
├── image_1518841310076.jpg
├── image_1518841310231.jpg
├── image_1518841310364.jpg
├── image_1518841310493.jpg
├── image_1518841310630.jpg
├── image_1518841310750.jpg
├── image_1518841310879.jpg
├── image_1518841311014.jpg
├── image_1518841311141.jpg
├── image_1518841311267.jpg
├── image_1518841311398.jpg
├── image_1518841311543.jpg
├── image_1518841311669.jpg
├── image_1518841311789.jpg
├── image_1518841311916.jpg
├── image_1518841312045.jpg
├── image_1518841312213.jpg
├── image_1518841312313.jpg
├── image_1518841312430.jpg
├── image_1518841312546.jpg
├── image_1518841312674.jpg
├── image_1518841312804.jpg
├── image_1518841312941.jpg
├── image_1518841313079.jpg
├── image_1518841313203.jpg
├── image_1518841313327.jpg
├── image_1518841313454.jpg
└── image_1518841313571.jpg
└── use_model
├── model_home.h5
└── model_home_track1.h5
/README.md:
--------------------------------------------------------------------------------
1 | # Robocar
2 |
3 | This contains codebase of the earlier efforts using raspberry pi to create the autonomous capability. This runs on a framework called Robotic Operating System(ROS). The codebase contains ROS nodes that control the individual componets of the project and deep learning code for training the model.
4 |
5 | Architecture:
6 |
7 |
8 | This version is trying to make use of [NVIDIA's End to End Deep Learning](https://devblogs.nvidia.com/deep-learning-self-driving-cars/) concept.
9 |
10 | Please read the [medium post](https://medium.com/intro-to-artificial-intelligence/self-driving-rc-car-using-robotic-operating-system-ros-c63a6d102c08) to understand the structure of the project further.
11 |
--------------------------------------------------------------------------------
/ROS nodes/.gitignore:
--------------------------------------------------------------------------------
1 | image_processing_node/scripts/model.h5
2 |
--------------------------------------------------------------------------------
/ROS nodes/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | # toplevel CMakeLists.txt for a catkin workspace
2 | # catkin/cmake/toplevel.cmake
3 |
4 | cmake_minimum_required(VERSION 2.8.3)
5 |
6 | set(CATKIN_TOPLEVEL TRUE)
7 |
8 | # search for catkin within the workspace
9 | set(_cmd "catkin_find_pkg" "catkin" "${CMAKE_SOURCE_DIR}")
10 | execute_process(COMMAND ${_cmd}
11 | RESULT_VARIABLE _res
12 | OUTPUT_VARIABLE _out
13 | ERROR_VARIABLE _err
14 | OUTPUT_STRIP_TRAILING_WHITESPACE
15 | ERROR_STRIP_TRAILING_WHITESPACE
16 | )
17 | if(NOT _res EQUAL 0 AND NOT _res EQUAL 2)
18 | # searching fot catkin resulted in an error
19 | string(REPLACE ";" " " _cmd_str "${_cmd}")
20 | message(FATAL_ERROR "Search for 'catkin' in workspace failed (${_cmd_str}): ${_err}")
21 | endif()
22 |
23 | # include catkin from workspace or via find_package()
24 | if(_res EQUAL 0)
25 | set(catkin_EXTRAS_DIR "${CMAKE_SOURCE_DIR}/${_out}/cmake")
26 | # include all.cmake without add_subdirectory to let it operate in same scope
27 | include(${catkin_EXTRAS_DIR}/all.cmake NO_POLICY_SCOPE)
28 | add_subdirectory("${_out}")
29 |
30 | else()
31 | # use either CMAKE_PREFIX_PATH explicitly passed to CMake as a command line argument
32 | # or CMAKE_PREFIX_PATH from the environment
33 | if(NOT DEFINED CMAKE_PREFIX_PATH)
34 | if(NOT "$ENV{CMAKE_PREFIX_PATH}" STREQUAL "")
35 | string(REPLACE ":" ";" CMAKE_PREFIX_PATH $ENV{CMAKE_PREFIX_PATH})
36 | endif()
37 | endif()
38 |
39 | # list of catkin workspaces
40 | set(catkin_search_path "")
41 | foreach(path ${CMAKE_PREFIX_PATH})
42 | if(EXISTS "${path}/.catkin")
43 | list(FIND catkin_search_path ${path} _index)
44 | if(_index EQUAL -1)
45 | list(APPEND catkin_search_path ${path})
46 | endif()
47 | endif()
48 | endforeach()
49 |
50 | # search for catkin in all workspaces
51 | set(CATKIN_TOPLEVEL_FIND_PACKAGE TRUE)
52 | find_package(catkin QUIET
53 | NO_POLICY_SCOPE
54 | PATHS ${catkin_search_path}
55 | NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
56 | unset(CATKIN_TOPLEVEL_FIND_PACKAGE)
57 |
58 | if(NOT catkin_FOUND)
59 | message(FATAL_ERROR "find_package(catkin) failed. catkin was neither found in the workspace nor in the CMAKE_PREFIX_PATH. One reason may be that no ROS setup.sh was sourced before.")
60 | endif()
61 | endif()
62 |
63 | catkin_workspace()
64 |
--------------------------------------------------------------------------------
/ROS nodes/actuator/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | cmake_minimum_required(VERSION 2.8.3)
2 | project(actuator)
3 |
4 | ## Compile as C++11, supported in ROS Kinetic and newer
5 | # add_compile_options(-std=c++11)
6 |
7 | ## Find catkin macros and libraries
8 | ## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz)
9 | ## is used, also find other catkin packages
10 | find_package(catkin REQUIRED COMPONENTS
11 | roscpp
12 | rospy
13 | std_msgs
14 | )
15 |
16 | ## System dependencies are found with CMake's conventions
17 | # find_package(Boost REQUIRED COMPONENTS system)
18 |
19 |
20 | ## Uncomment this if the package has a setup.py. This macro ensures
21 | ## modules and global scripts declared therein get installed
22 | ## See http://ros.org/doc/api/catkin/html/user_guide/setup_dot_py.html
23 | # catkin_python_setup()
24 |
25 | ################################################
26 | ## Declare ROS messages, services and actions ##
27 | ################################################
28 |
29 | ## To declare and build messages, services or actions from within this
30 | ## package, follow these steps:
31 | ## * Let MSG_DEP_SET be the set of packages whose message types you use in
32 | ## your messages/services/actions (e.g. std_msgs, actionlib_msgs, ...).
33 | ## * In the file package.xml:
34 | ## * add a build_depend tag for "message_generation"
35 | ## * add a build_depend and a run_depend tag for each package in MSG_DEP_SET
36 | ## * If MSG_DEP_SET isn't empty the following dependency has been pulled in
37 | ## but can be declared for certainty nonetheless:
38 | ## * add a run_depend tag for "message_runtime"
39 | ## * In this file (CMakeLists.txt):
40 | ## * add "message_generation" and every package in MSG_DEP_SET to
41 | ## find_package(catkin REQUIRED COMPONENTS ...)
42 | ## * add "message_runtime" and every package in MSG_DEP_SET to
43 | ## catkin_package(CATKIN_DEPENDS ...)
44 | ## * uncomment the add_*_files sections below as needed
45 | ## and list every .msg/.srv/.action file to be processed
46 | ## * uncomment the generate_messages entry below
47 | ## * add every package in MSG_DEP_SET to generate_messages(DEPENDENCIES ...)
48 |
49 | ## Generate messages in the 'msg' folder
50 | # add_message_files(
51 | # FILES
52 | # Message1.msg
53 | # Message2.msg
54 | # )
55 |
56 | ## Generate services in the 'srv' folder
57 | # add_service_files(
58 | # FILES
59 | # Service1.srv
60 | # Service2.srv
61 | # )
62 |
63 | ## Generate actions in the 'action' folder
64 | # add_action_files(
65 | # FILES
66 | # Action1.action
67 | # Action2.action
68 | # )
69 |
70 | ## Generate added messages and services with any dependencies listed here
71 | # generate_messages(
72 | # DEPENDENCIES
73 | # std_msgs
74 | # )
75 |
76 | ################################################
77 | ## Declare ROS dynamic reconfigure parameters ##
78 | ################################################
79 |
80 | ## To declare and build dynamic reconfigure parameters within this
81 | ## package, follow these steps:
82 | ## * In the file package.xml:
83 | ## * add a build_depend and a run_depend tag for "dynamic_reconfigure"
84 | ## * In this file (CMakeLists.txt):
85 | ## * add "dynamic_reconfigure" to
86 | ## find_package(catkin REQUIRED COMPONENTS ...)
87 | ## * uncomment the "generate_dynamic_reconfigure_options" section below
88 | ## and list every .cfg file to be processed
89 |
90 | ## Generate dynamic reconfigure parameters in the 'cfg' folder
91 | # generate_dynamic_reconfigure_options(
92 | # cfg/DynReconf1.cfg
93 | # cfg/DynReconf2.cfg
94 | # )
95 |
96 | ###################################
97 | ## catkin specific configuration ##
98 | ###################################
99 | ## The catkin_package macro generates cmake config files for your package
100 | ## Declare things to be passed to dependent projects
101 | ## INCLUDE_DIRS: uncomment this if your package contains header files
102 | ## LIBRARIES: libraries you create in this project that dependent projects also need
103 | ## CATKIN_DEPENDS: catkin_packages dependent projects also need
104 | ## DEPENDS: system dependencies of this project that dependent projects also need
105 | catkin_package(
106 | # INCLUDE_DIRS include
107 | # LIBRARIES actuator
108 | # CATKIN_DEPENDS roscpp rospy std_msgs
109 | # DEPENDS system_lib
110 | )
111 |
112 | ###########
113 | ## Build ##
114 | ###########
115 |
116 | ## Specify additional locations of header files
117 | ## Your package locations should be listed before other locations
118 | include_directories(
119 | # include
120 | ${catkin_INCLUDE_DIRS}
121 | )
122 |
123 | ## Declare a C++ library
124 | # add_library(${PROJECT_NAME}
125 | # src/${PROJECT_NAME}/actuator.cpp
126 | # )
127 |
128 | ## Add cmake target dependencies of the library
129 | ## as an example, code may need to be generated before libraries
130 | ## either from message generation or dynamic reconfigure
131 | # add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
132 |
133 | ## Declare a C++ executable
134 | ## With catkin_make all packages are built within a single CMake context
135 | ## The recommended prefix ensures that target names across packages don't collide
136 | # add_executable(${PROJECT_NAME}_node src/actuator_node.cpp)
137 |
138 | ## Rename C++ executable without prefix
139 | ## The above recommended prefix causes long target names, the following renames the
140 | ## target back to the shorter version for ease of user use
141 | ## e.g. "rosrun someones_pkg node" instead of "rosrun someones_pkg someones_pkg_node"
142 | # set_target_properties(${PROJECT_NAME}_node PROPERTIES OUTPUT_NAME node PREFIX "")
143 |
144 | ## Add cmake target dependencies of the executable
145 | ## same as for the library above
146 | # add_dependencies(${PROJECT_NAME}_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
147 |
148 | ## Specify libraries to link a library or executable target against
149 | # target_link_libraries(${PROJECT_NAME}_node
150 | # ${catkin_LIBRARIES}
151 | # )
152 |
153 | #############
154 | ## Install ##
155 | #############
156 |
157 | # all install targets should use catkin DESTINATION variables
158 | # See http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html
159 |
160 | ## Mark executable scripts (Python etc.) for installation
161 | ## in contrast to setup.py, you can choose the destination
162 | # install(PROGRAMS
163 | # scripts/my_python_script
164 | # DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
165 | # )
166 |
167 | ## Mark executables and/or libraries for installation
168 | # install(TARGETS ${PROJECT_NAME} ${PROJECT_NAME}_node
169 | # ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
170 | # LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
171 | # RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
172 | # )
173 |
174 | ## Mark cpp header files for installation
175 | # install(DIRECTORY include/${PROJECT_NAME}/
176 | # DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
177 | # FILES_MATCHING PATTERN "*.h"
178 | # PATTERN ".svn" EXCLUDE
179 | # )
180 |
181 | ## Mark other files for installation (e.g. launch and bag files, etc.)
182 | # install(FILES
183 | # # myfile1
184 | # # myfile2
185 | # DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
186 | # )
187 |
188 | #############
189 | ## Testing ##
190 | #############
191 |
192 | ## Add gtest based cpp test target and link libraries
193 | # catkin_add_gtest(${PROJECT_NAME}-test test/test_actuator.cpp)
194 | # if(TARGET ${PROJECT_NAME}-test)
195 | # target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME})
196 | # endif()
197 |
198 | ## Add folders to be run by python nosetests
199 | # catkin_add_nosetests(test)
200 |
--------------------------------------------------------------------------------
/ROS nodes/actuator/package.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | actuator
4 | 0.0.0
5 | The actuator package
6 |
7 |
8 |
9 |
10 | dhanoop
11 |
12 |
13 |
14 |
15 |
16 | TODO
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 | catkin
52 | roscpp
53 | rospy
54 | std_msgs
55 | roscpp
56 | rospy
57 | std_msgs
58 | roscpp
59 | rospy
60 | std_msgs
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
--------------------------------------------------------------------------------
/ROS nodes/actuator/scripts/_:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 |
3 | from pca9685 import PCA9685
4 |
5 | pca9685 = PCA9685()
6 | pca9685.set_pwm_value(0, pulse=450)
7 |
--------------------------------------------------------------------------------
/ROS nodes/actuator/scripts/__pycache__/pca9685.cpython-35.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/ROS nodes/actuator/scripts/__pycache__/pca9685.cpython-35.pyc
--------------------------------------------------------------------------------
/ROS nodes/actuator/scripts/__pycache__/pca9685.cpython-36.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/ROS nodes/actuator/scripts/__pycache__/pca9685.cpython-36.pyc
--------------------------------------------------------------------------------
/ROS nodes/actuator/scripts/actuator_node.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 |
3 | import rospy
4 | from std_msgs.msg import String
5 | from sensor_msgs.msg import Joy
6 | from pca9685 import PCA9685
7 |
8 | class ActuatorNode:
9 |
10 | pca9685 = None
11 | const_throttle = 0
12 | #Steering constants
13 | MAX_LEFT_ANGLE = rospy.get_param("/MAX_LEFT_ANGLE")
14 | MIN_RIGHT_ANGLE = rospy.get_param("/MIN_RIGHT_ANGLE")
15 | MAX_STEERING_PULSE = rospy.get_param("/MAX_STEERING_PULSE")
16 | MIN_STEERING_PULSE = rospy.get_param("/MIN_STEERING_PULSE")
17 | START_RECORDING = rospy.get_param("/START_RECORDING")
18 | STEERING_CHANNEL = rospy.get_param("/STEERING_CHANNEL")
19 |
20 | #Throttle constants
21 | MIN_THROTTLE = rospy.get_param("/MIN_THROTTLE")
22 | MAX_THROTTLE = rospy.get_param("/MAX_THROTTLE")
23 | ZERO_PULSE = rospy.get_param("/ZERO_PULSE")
24 | MIN_THROTTLE_PULSE = rospy.get_param("/MIN_THROTTLE_PULSE")
25 | MAX_THROTTLE_PULSE = rospy.get_param("/MAX_THROTTLE_PULSE")
26 | THROTTLE_CHANNEL = rospy.get_param("/THROTTLE_CHANNEL")
27 | MAX_REVERSE_THROTTLE = rospy.get_param("/MAX_REVERSE_THROTTLE")
28 | CONST_THROTTLE_STEP = rospy.get_param("/CONST_THROTTLE_STEP")
29 | JOYSTIC_DRIVE = None
30 | AUTO_DRIVE = None
31 |
32 | def __init__(self):
33 | self.pca9685 = PCA9685()
34 | self.const_throttle = rospy.get_param("/CONST_THROTTLE")
35 |
36 | def autodrive(self, data):
37 | commands = data.data
38 | command = commands.split(":")
39 | rospy.loginfo('Autodrive is on')
40 | steering_pulse = self.getActuatorPulseValue(float(command[0]), self.MIN_RIGHT_ANGLE, self.MAX_LEFT_ANGLE, self.MIN_STEERING_PULSE, self.MAX_STEERING_PULSE, channel_type='steering')
41 | throttle_pulse = self.getActuatorPulseValue(float(command[1]), self.MIN_THROTTLE, self.MAX_THROTTLE, self.MIN_THROTTLE_PULSE, self.MAX_THROTTLE_PULSE, channel_type='throttle')
42 | self.pca9685.set_pwm_value(self.STEERING_CHANNEL, pulse=steering_pulse)
43 | self.pca9685.set_pwm_value(self.THROTTLE_CHANNEL, pulse=throttle_pulse)
44 | rospy.loginfo('Steering value: %s', steering_pulse)
45 | rospy.loginfo('Throttle value: %s', throttle_pulse)
46 |
47 |
48 | def joystick_node(self, data):
49 | steering_pulse = self.getActuatorPulseValue(data.axes[0], self.MIN_RIGHT_ANGLE, self.MAX_LEFT_ANGLE, self.MIN_STEERING_PULSE, self.MAX_STEERING_PULSE, channel_type='steering')
50 | throttle_pulse = self.find_max_throttle(data.axes[3])
51 | throttle_pulse = self.getActuatorPulseValue(throttle_pulse, self.MIN_THROTTLE, self.MAX_THROTTLE, self.MIN_THROTTLE_PULSE, self.MAX_THROTTLE_PULSE, channel_type='throttle')
52 | self.pca9685.set_pwm_value(self.STEERING_CHANNEL, pulse=steering_pulse)
53 | self.pca9685.set_pwm_value(self.THROTTLE_CHANNEL, pulse=throttle_pulse)
54 | if data.buttons[12] == 1:
55 | if self.const_throttle <= self.MAX_THROTTLE:
56 | self.const_throttle += self.CONST_THROTTLE_STEP
57 | rospy.set_param('/CONST_THROTTLE', self.const_throttle)
58 | if data.buttons[14] == 1:
59 | if self.const_throttle > 0:
60 | self.const_throttle -= self.CONST_THROTTLE_STEP
61 | rospy.set_param('/CONST_THROTTLE', self.const_throttle)
62 | if data.buttons[13] == 1:
63 | if rospy.get_param("/START_RECORDING") == True:
64 | rospy.set_param('/START_RECORDING', False)
65 | rospy.loginfo('Recording turned off')
66 | else:
67 | rospy.set_param('/START_RECORDING', True)
68 | rospy.loginfo('Recording turned on')
69 | rospy.loginfo('Steering value: %s', steering_pulse)
70 | rospy.loginfo('Throttle value: %s', throttle_pulse)
71 | #rospy.loginfo('Maximum throttle value: %s', self.const_throttle)
72 | #rospy.loginfo('Joystic throttle value: %s', data.axes[3])
73 |
74 | def find_max_throttle(self, throttle_pulse):
75 | throttle = self.const_throttle
76 | if throttle_pulse <= self.const_throttle:
77 | throttle = throttle_pulse
78 | if throttle_pulse < self.MAX_REVERSE_THROTTLE:
79 | throttle = self.MAX_REVERSE_THROTTLE
80 |
81 | return throttle
82 |
83 |
84 | def getActuatorPulseValue(self, joystickValue, joystickMin, joystickMax, actuatorMin, actuatorMax, channel_type='steering'):
85 |
86 | #Linear mapping between two ranges of values
87 | joystickRange = joystickMax - joystickMin
88 | actuatorRange = actuatorMax - actuatorMin
89 |
90 | joystickActuatorRatio = float(joystickRange)/float(actuatorRange)
91 | actuatorValue = int((joystickValue - joystickMin) / joystickActuatorRatio + actuatorMin)
92 | if channel_type == 'steering':
93 | actuatorValue +=18
94 |
95 | return actuatorValue
96 |
97 |
98 |
99 | def listener(actuatorNode):
100 |
101 | # In ROS, nodes are uniquely named. If two nodes with the same
102 | # name are launched, the previous one is kicked off. The
103 | # anonymous=True flag means that rospy will choose a unique
104 | # name for our 'listener' node so that multiple listeners can
105 | # run simultaneously.
106 | rospy.init_node('actuator_node', anonymous=True)
107 | rospy.Subscriber('autodrive', String, actuatorNode.autodrive, queue_size=1)
108 | rospy.Subscriber("joy", Joy, actuatorNode.joystick_node, queue_size=1)
109 |
110 | # spin() simply keeps python from exiting until this node is stopped
111 | rospy.spin()
112 |
113 | if __name__ == '__main__':
114 | actuatorNode = ActuatorNode()
115 | listener(actuatorNode)
116 |
--------------------------------------------------------------------------------
/ROS nodes/actuator/scripts/pca9685.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 |
3 | from __future__ import division
4 | import time
5 |
6 | # Import the PCA9685 module.
7 | import Adafruit_PCA9685
8 |
9 | class PCA9685:
10 | pwm = None
11 |
12 | def __init__(self, freq=60):
13 | self.pwm = Adafruit_PCA9685.PCA9685()
14 | self.pwm.set_pwm_freq(freq)
15 |
16 | def set_pwm_value(self, channel=1, pulse=420):
17 | self.pwm.set_pwm(channel, 0, pulse)
18 |
--------------------------------------------------------------------------------
/ROS nodes/actuator/scripts/pca9685.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/ROS nodes/actuator/scripts/pca9685.pyc
--------------------------------------------------------------------------------
/ROS nodes/actuator/scripts/test.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 |
3 | from pca9685 import PCA9685
4 |
5 | pca9685 = PCA9685()
6 | pca9685.set_pwm_value(1, pulse=430)
7 |
--------------------------------------------------------------------------------
/ROS nodes/common_code/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | /opt/ros/kinetic/share/catkin/cmake/toplevel.cmake
--------------------------------------------------------------------------------
/ROS nodes/common_code/camerav2_160x120.launch:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/ROS nodes/common_code/camerav2_320x240.launch:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/ROS nodes/common_code/raspi_param_config-night.yaml:
--------------------------------------------------------------------------------
1 | !!python/object/new:dynamic_reconfigure.encoding.Config
2 | dictitems:
3 | ISO: 800
4 | awb_mode: auto
5 | brightness: 70
6 | contrast: 40
7 | exposureCompensation: 0
8 | exposure_mode: auto
9 | groups: !!python/object/new:dynamic_reconfigure.encoding.Config
10 | dictitems:
11 | ISO: 800
12 | awb_mode: auto
13 | brightness: 70
14 | contrast: 40
15 | exposureCompensation: 0
16 | exposure_mode: auto
17 | groups: !!python/object/new:dynamic_reconfigure.encoding.Config
18 | state: []
19 | hFlip: false
20 | id: 0
21 | name: Default
22 | parameters: !!python/object/new:dynamic_reconfigure.encoding.Config
23 | state: []
24 | parent: 0
25 | saturation: 0
26 | sharpness: 20
27 | shutterSpeed: 10000
28 | state: true
29 | type: ''
30 | vFlip: false
31 | videoStabilisation: false
32 | zoom: 1.0
33 | state: []
34 | hFlip: false
35 | saturation: 0
36 | sharpness: 20
37 | shutterSpeed: 10000
38 | vFlip: false
39 | videoStabilisation: false
40 | zoom: 1.0
41 | state: []
42 |
--------------------------------------------------------------------------------
/ROS nodes/common_code/raspi_param_config.yaml:
--------------------------------------------------------------------------------
1 | !!python/object/new:dynamic_reconfigure.encoding.Config
2 | dictitems:
3 | ISO: 400
4 | awb_mode: auto
5 | brightness: 70
6 | contrast: 40
7 | exposureCompensation: 0
8 | exposure_mode: auto
9 | groups: !!python/object/new:dynamic_reconfigure.encoding.Config
10 | dictitems:
11 | ISO: 400
12 | awb_mode: auto
13 | brightness: 70
14 | contrast: 40
15 | exposureCompensation: 0
16 | exposure_mode: auto
17 | groups: !!python/object/new:dynamic_reconfigure.encoding.Config
18 | state: []
19 | hFlip: false
20 | id: 0
21 | name: Default
22 | parameters: !!python/object/new:dynamic_reconfigure.encoding.Config
23 | state: []
24 | parent: 0
25 | saturation: 0
26 | sharpness: 20
27 | shutterSpeed: 10000
28 | state: true
29 | type: ''
30 | vFlip: false
31 | videoStabilisation: false
32 | zoom: 1.0
33 | state: []
34 | hFlip: false
35 | saturation: 0
36 | sharpness: 20
37 | shutterSpeed: 10000
38 | vFlip: false
39 | videoStabilisation: false
40 | zoom: 1.0
41 | state: []
42 |
--------------------------------------------------------------------------------
/ROS nodes/image_processing_node/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | cmake_minimum_required(VERSION 2.8.3)
2 | project(image_processing_node)
3 |
4 | ## Compile as C++11, supported in ROS Kinetic and newer
5 | # add_compile_options(-std=c++11)
6 |
7 | ## Find catkin macros and libraries
8 | ## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz)
9 | ## is used, also find other catkin packages
10 | find_package(catkin REQUIRED COMPONENTS
11 | rospy
12 | std_msgs
13 | )
14 |
15 | ## System dependencies are found with CMake's conventions
16 | # find_package(Boost REQUIRED COMPONENTS system)
17 |
18 |
19 | ## Uncomment this if the package has a setup.py. This macro ensures
20 | ## modules and global scripts declared therein get installed
21 | ## See http://ros.org/doc/api/catkin/html/user_guide/setup_dot_py.html
22 | # catkin_python_setup()
23 |
24 | ################################################
25 | ## Declare ROS messages, services and actions ##
26 | ################################################
27 |
28 | ## To declare and build messages, services or actions from within this
29 | ## package, follow these steps:
30 | ## * Let MSG_DEP_SET be the set of packages whose message types you use in
31 | ## your messages/services/actions (e.g. std_msgs, actionlib_msgs, ...).
32 | ## * In the file package.xml:
33 | ## * add a build_depend tag for "message_generation"
34 | ## * add a build_depend and a run_depend tag for each package in MSG_DEP_SET
35 | ## * If MSG_DEP_SET isn't empty the following dependency has been pulled in
36 | ## but can be declared for certainty nonetheless:
37 | ## * add a run_depend tag for "message_runtime"
38 | ## * In this file (CMakeLists.txt):
39 | ## * add "message_generation" and every package in MSG_DEP_SET to
40 | ## find_package(catkin REQUIRED COMPONENTS ...)
41 | ## * add "message_runtime" and every package in MSG_DEP_SET to
42 | ## catkin_package(CATKIN_DEPENDS ...)
43 | ## * uncomment the add_*_files sections below as needed
44 | ## and list every .msg/.srv/.action file to be processed
45 | ## * uncomment the generate_messages entry below
46 | ## * add every package in MSG_DEP_SET to generate_messages(DEPENDENCIES ...)
47 |
48 | ## Generate messages in the 'msg' folder
49 | # add_message_files(
50 | # FILES
51 | # Message1.msg
52 | # Message2.msg
53 | # )
54 |
55 | ## Generate services in the 'srv' folder
56 | # add_service_files(
57 | # FILES
58 | # Service1.srv
59 | # Service2.srv
60 | # )
61 |
62 | ## Generate actions in the 'action' folder
63 | # add_action_files(
64 | # FILES
65 | # Action1.action
66 | # Action2.action
67 | # )
68 |
69 | ## Generate added messages and services with any dependencies listed here
70 | # generate_messages(
71 | # DEPENDENCIES
72 | # std_msgs
73 | # )
74 |
75 | ################################################
76 | ## Declare ROS dynamic reconfigure parameters ##
77 | ################################################
78 |
79 | ## To declare and build dynamic reconfigure parameters within this
80 | ## package, follow these steps:
81 | ## * In the file package.xml:
82 | ## * add a build_depend and a run_depend tag for "dynamic_reconfigure"
83 | ## * In this file (CMakeLists.txt):
84 | ## * add "dynamic_reconfigure" to
85 | ## find_package(catkin REQUIRED COMPONENTS ...)
86 | ## * uncomment the "generate_dynamic_reconfigure_options" section below
87 | ## and list every .cfg file to be processed
88 |
89 | ## Generate dynamic reconfigure parameters in the 'cfg' folder
90 | # generate_dynamic_reconfigure_options(
91 | # cfg/DynReconf1.cfg
92 | # cfg/DynReconf2.cfg
93 | # )
94 |
95 | ###################################
96 | ## catkin specific configuration ##
97 | ###################################
98 | ## The catkin_package macro generates cmake config files for your package
99 | ## Declare things to be passed to dependent projects
100 | ## INCLUDE_DIRS: uncomment this if your package contains header files
101 | ## LIBRARIES: libraries you create in this project that dependent projects also need
102 | ## CATKIN_DEPENDS: catkin_packages dependent projects also need
103 | ## DEPENDS: system dependencies of this project that dependent projects also need
104 | catkin_package(
105 | # INCLUDE_DIRS include
106 | # LIBRARIES image_processing_node
107 | # CATKIN_DEPENDS roscpp rospy std_msgs
108 | # DEPENDS system_lib
109 | )
110 |
111 | ###########
112 | ## Build ##
113 | ###########
114 |
115 | ## Specify additional locations of header files
116 | ## Your package locations should be listed before other locations
117 | include_directories(
118 | # include
119 | ${catkin_INCLUDE_DIRS}
120 | )
121 |
122 | ## Declare a C++ library
123 | # add_library(${PROJECT_NAME}
124 | # src/${PROJECT_NAME}/image_processing_node.cpp
125 | # )
126 |
127 | ## Add cmake target dependencies of the library
128 | ## as an example, code may need to be generated before libraries
129 | ## either from message generation or dynamic reconfigure
130 | # add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
131 |
132 | ## Declare a C++ executable
133 | ## With catkin_make all packages are built within a single CMake context
134 | ## The recommended prefix ensures that target names across packages don't collide
135 | # add_executable(${PROJECT_NAME}_node src/image_processing_node_node.cpp)
136 |
137 | ## Rename C++ executable without prefix
138 | ## The above recommended prefix causes long target names, the following renames the
139 | ## target back to the shorter version for ease of user use
140 | ## e.g. "rosrun someones_pkg node" instead of "rosrun someones_pkg someones_pkg_node"
141 | # set_target_properties(${PROJECT_NAME}_node PROPERTIES OUTPUT_NAME node PREFIX "")
142 |
143 | ## Add cmake target dependencies of the executable
144 | ## same as for the library above
145 | # add_dependencies(${PROJECT_NAME}_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
146 |
147 | ## Specify libraries to link a library or executable target against
148 | # target_link_libraries(${PROJECT_NAME}_node
149 | # ${catkin_LIBRARIES}
150 | # )
151 |
152 | #############
153 | ## Install ##
154 | #############
155 |
156 | # all install targets should use catkin DESTINATION variables
157 | # See http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html
158 |
159 | ## Mark executable scripts (Python etc.) for installation
160 | ## in contrast to setup.py, you can choose the destination
161 | install(PROGRAMS
162 | scripts/image_processing_node.py
163 | DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
164 | )
165 |
166 | ## Mark executables and/or libraries for installation
167 | # install(TARGETS ${PROJECT_NAME} ${PROJECT_NAME}_node
168 | # ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
169 | # LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
170 | # RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
171 | # )
172 |
173 | ## Mark cpp header files for installation
174 | # install(DIRECTORY include/${PROJECT_NAME}/
175 | # DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
176 | # FILES_MATCHING PATTERN "*.h"
177 | # PATTERN ".svn" EXCLUDE
178 | # )
179 |
180 | ## Mark other files for installation (e.g. launch and bag files, etc.)
181 | # install(FILES
182 | # # myfile1
183 | # # myfile2
184 | # DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
185 | # )
186 |
187 | #############
188 | ## Testing ##
189 | #############
190 |
191 | ## Add gtest based cpp test target and link libraries
192 | # catkin_add_gtest(${PROJECT_NAME}-test test/test_image_processing_node.cpp)
193 | # if(TARGET ${PROJECT_NAME}-test)
194 | # target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME})
195 | # endif()
196 |
197 | ## Add folders to be run by python nosetests
198 | # catkin_add_nosetests(test)
199 |
--------------------------------------------------------------------------------
/ROS nodes/image_processing_node/package.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | image_processing_node
4 | 0.0.0
5 | The image_processing_node package
6 |
7 |
8 |
9 |
10 | dhanoop
11 |
12 |
13 |
14 |
15 |
16 | TODO
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 | catkin
52 | rospy
53 | std_msgs
54 | rospy
55 | std_msgs
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
--------------------------------------------------------------------------------
/ROS nodes/image_processing_node/scripts/image_processing_node.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 |
3 | import rospy
4 | import cv2
5 | import numpy as np
6 | import tensorflow as tf
7 | import h5py
8 | from std_msgs.msg import String
9 | from sensor_msgs.msg import CompressedImage
10 | from keras.models import load_model
11 | from random import uniform
12 | import sys
13 |
14 | class ImageProcessingNode:
15 |
16 | IMAGE_SCALE = 4
17 | model = None
18 | autodrive_publisher = None
19 | graph = None
20 | terminate = False
21 |
22 | def __init__(self):
23 | self.model = load_model("model.h5")
24 | self.graph = tf.get_default_graph()
25 | self.terminate = False
26 |
27 | def linear_unbin1(self, arr):
28 | b = np.argmax(arr)
29 | a = b *(2/14) - 1
30 | return a
31 |
32 | def linear_unbin(self, value_to_unbin):
33 | unbinned_value = value_to_unbin * (2.0 / 14.0) - 1
34 |
35 | return unbinned_value
36 |
37 | def unbin_matrix(self, matrix_to_unbin):
38 | unbinned_matrix=[]
39 |
40 | for value_to_unbin in matrix_to_unbin:
41 | unbinned_value = np.argmax(value_to_unbin)
42 | unbinned_value = self.linear_unbin(unbinned_value)
43 | unbinned_matrix.append(unbinned_value)
44 |
45 | return np.array(unbinned_matrix)
46 |
47 | def image_process(self, message):
48 | np_arr = np.fromstring(message.data, np.uint8)
49 | image = cv2.imdecode(np_arr, cv2.IMREAD_COLOR)
50 | image = cv2.resize(image, (160,120), interpolation=cv2.INTER_AREA)
51 | #image = image[120:,:]
52 | image = np.asarray(image)
53 | images = []
54 | images.append(image)
55 | with self.graph.as_default():
56 | prediction = self.model.predict(np.array(images), batch_size=1)
57 | #steering_angle = prediction[0][0]
58 | steering_angle = self.linear_unbin1(prediction)
59 | throttle = rospy.get_param("/THROTTLE_AUTO_DRIVE")
60 | #throttle = prediction[1][0][0]
61 | command = str(steering_angle) + ":" + str(throttle)
62 | if self.terminate == False:
63 | rospy.loginfo("Autopilot command: " + command)
64 | self.autodrive_publisher.publish(command)
65 |
66 | def shutdown(self):
67 | self.terminate = True
68 | rospy.loginfo("Setting steering angle and throttle to 0")
69 | self.autodrive_publisher.publish("0:0")
70 | self.autodrive_publisher.publish("0:0")
71 | self.autodrive_publisher.publish("0:0")
72 |
73 |
74 | def listener(imageProcessingNode):
75 |
76 | rospy.init_node("self_driving_node", log_level=rospy.DEBUG)
77 | imageProcessingNode.autodrive_publisher = rospy.Publisher("autodrive", String, queue_size=1)
78 |
79 | #initialising
80 | rospy.Subscriber("/raspicam_node/image/compressed", CompressedImage, imageProcessingNode.image_process, queue_size=1)
81 | rospy.on_shutdown(imageProcessingNode.shutdown)
82 |
83 | # spin() simply keeps python from exiting until this node is stopped
84 | rospy.spin()
85 |
86 | if __name__ == '__main__':
87 | imageProcessingNode = ImageProcessingNode()
88 | listener(imageProcessingNode)
--------------------------------------------------------------------------------
/ROS nodes/shell_scripts/launch_laptop_image_uncompress_node.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | source activate image_processing_node
4 | export PYTHONPATH="/home/dhanoop/anaconda3/envs/image_processing_node/lib/python3.4/site-packages:$PYTHONPATH"
5 |
6 | rosrun image_transport republish compressed in:=/raspicam_node/image raw out:=/raspicam_node/image
7 |
--------------------------------------------------------------------------------
/ROS nodes/shell_scripts/launch_laptop_image_view_node.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | rosrun image_view image_view image:=/raspicam_node/image
4 |
--------------------------------------------------------------------------------
/ROS nodes/shell_scripts/launch_laptop_joystick_node.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | rosparam set joy_node/dev "/dev/input/js2"
4 | rosparam set joy_node/autorepeat_rate 1.0
5 | rosrun joy joy_node
6 |
--------------------------------------------------------------------------------
/ROS nodes/shell_scripts/launch_laptop_selfdriving_node.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | export PATH=/home/dhanoop/anaconda3/bin:$PATH
3 | unset PYTHONPATH
4 | source activate image_processing_node
5 | export PYTHONPATH="/home/dhanoop/anaconda3/envs/image_processing_node/lib/python3.5/site-packages:/opt/ros/kinetic/lib/python2.7/dist-packages:/usr/lib/python2.7/site-packages"
6 |
7 | cd /home/dhanoop/catkin_ws/src/image_processing_node/scripts
8 | rosrun image_processing_node image_processing_node.py
9 |
--------------------------------------------------------------------------------
/ROS nodes/shell_scripts/launch_laptop_training_node.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | export PATH=/home/dhanoop/anaconda3/bin:$PATH
3 | unset PYTHONPATH
4 | source activate training_node
5 | export PYTHONPATH="/home/dhanoop/anaconda3/envs/training_node/lib/python3.5/site-packages:/opt/ros/kinetic/lib/python2.7/dist-packages:/usr/lib/python2.7/site-packages"
6 | cd /home/dhanoop/catkin_ws/src/training_node/scripts
7 | rosrun training_node training_node.py
8 |
--------------------------------------------------------------------------------
/ROS nodes/shell_scripts/launch_raspi_autopilot_node_deleted.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | source /home/dhanoop/catkin_ws/devel/setup.bash
4 |
5 | export PATH=/home/dhanoop/miniconda3/bin:$PATH
6 | source activate auto_pilot
7 | export PYTHONPATH="/home/dhanoop/miniconda3/envs/auto_pilot/lib/python3.4/site-packages:$PYTHONPATH"
8 |
9 | cd /home/dhanoop/miniconda3/envs/auto_pilot/lib/python3.4/site-packages
10 | sudo ln -s /usr/local/lib/python3.4/site-packages/tensorflow tensorflow
11 |
12 | cd /home/dhanoop/catkin_ws/src/auto_pilot/scripts
13 | rosrun auto_pilot auto_pilot.py
14 |
--------------------------------------------------------------------------------
/ROS nodes/shell_scripts/launch_raspi_camera_node.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | #roslaunch raspicam_node camerav2_1280x960.launch
4 | #roslaunch raspicam_node camerav2_320x240.launch
5 | roslaunch raspicam_node camerav2_160x120.launch
6 |
--------------------------------------------------------------------------------
/ROS nodes/shell_scripts/launch_raspi_joystick_node.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | rosparam set joy_node/dev "/dev/input/js0"
4 |
5 | rosparam set joy_node/autorepeat_rate 1.0
6 | rosrun joy joy_node
7 |
--------------------------------------------------------------------------------
/ROS nodes/shell_scripts/launch_raspi_training_node.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | export PATH=/home/dhanoop/miniconda3/bin:$PATH
3 | source activate training_node
4 | export PYTHONPATH="/home/dhanoop/miniconda3/envs/training_node/lib/python3.4/site-packages:$PYTHONPATH"
5 | cd /home/dhanoop/catkin_ws/src/training_node/scripts
6 | rosrun training_node training_node_raspi.py
7 |
--------------------------------------------------------------------------------
/ROS nodes/shell_scripts/setup_cond_env_image__processing_node.txt:
--------------------------------------------------------------------------------
1 | export PATH=/home/dhanoop/anaconda3/bin:$PATH
2 | conda create -n image_processing_node python=3.4
3 | source activate image_processing_node
4 | export PYTHONPATH="/home/dhanoop/anaconda3/envs/image_processing_node/lib/python3.4/site-packages:$PYTHONPATH"
5 | pip install pyyaml
6 | pip install rospkg
7 | pip install catkin_pkg
8 | conda install -c menpo opencv3
9 | #Install tensorflow for python 3.4
10 | #Other tensorflow versions - https://www.tensorflow.org/install/install_linux
11 | pip install https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-1.4.0-cp34-cp34m-linux_x86_64.whl
12 | pip install keras==2.1.2
13 | pip install h5py
14 |
15 |
16 |
--------------------------------------------------------------------------------
/ROS nodes/shell_scripts/setup_cond_env_image__processing_node_gpu.txt:
--------------------------------------------------------------------------------
1 | export PATH=/home/dhanoop/anaconda3/bin:$PATH
2 | unset PYTHONPATH
3 | conda create -n image_processing_node python=3.5
4 | source activate image_processing_node
5 | export PYTHONPATH="/home/dhanoop/anaconda3/envs/image_processing_node/lib/python3.5/site-packages:$PYTHONPATH"
6 | pip install pyyaml
7 | pip install rospkg
8 | pip install catkin_pkg
9 | conda install -c conda-forge opencv
10 | #For python 3.5
11 | pip install --ignore-installed --upgrade https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-1.4.0-cp35-cp35m-linux_x86_64.whl
12 | pip install keras
13 | pip install h5py
14 |
15 |
--------------------------------------------------------------------------------
/ROS nodes/shell_scripts/setup_cond_env_training_node.txt:
--------------------------------------------------------------------------------
1 | export PATH=/home/dhanoop/anaconda3/bin:$PATH
2 | unset PYTHONPATH
3 | conda create -n training_node python=3.5
4 | source activate training_node
5 | export PYTHONPATH="/home/dhanoop/anaconda3/envs/training_node/lib/python3.5/site-packages"
6 | pip install pyyaml
7 | pip install rospkg
8 | pip install catkin_pkg
9 | conda install -c conda-forge opencv
10 |
11 |
--------------------------------------------------------------------------------
/ROS nodes/shell_scripts/setup_laptop_camera_node_config.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | rosrun rqt_gui rqt_gui
4 |
--------------------------------------------------------------------------------
/ROS nodes/shell_scripts/setup_laptop_rosmaster_variables.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | echo
4 | echo Setting up ROS master environment variables:
5 | echo
6 | echo Run below commands on the terminal
7 | echo
8 |
9 | # IP address for ROS master
10 | echo "export ROS_IP=192.168.1.4"
11 |
12 | echo "export ROS_MASTER_URI=http://192.168.1.4:11311"
13 |
14 |
--------------------------------------------------------------------------------
/ROS nodes/shell_scripts/setup_parameters.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 |
4 | rosparam set /START_RECORDING false
5 |
6 | #Steering constants
7 | rosparam set /MAX_LEFT_ANGLE 1 #Joystic value
8 | rosparam set /MIN_RIGHT_ANGLE -1 #Joystic value
9 | rosparam set /MAX_STEERING_PULSE 540 #Actuator value
10 | rosparam set /MIN_STEERING_PULSE 280 #Actuator value
11 | rosparam set /STEERING_CHANNEL 1 #Actuator value
12 |
13 | #Throttle constants
14 | rosparam set /MIN_THROTTLE -1 #Joystic value
15 | rosparam set /MAX_THROTTLE 1 #Joystic value
16 | rosparam set /ZERO_PULSE 370 #Actuator value
17 | rosparam set /MIN_THROTTLE_PULSE 220 #Actuator value
18 | rosparam set /MAX_THROTTLE_PULSE 520 #Actuator value
19 | rosparam set /THROTTLE_CHANNEL 0 #Actuator value
20 | rosparam set /CONST_THROTTLE 0.22 #Joystic value
21 | rosparam set /MAX_REVERSE_THROTTLE -0.20 #Joystic value
22 | rosparam set /THROTTLE_AUTO_DRIVE 0.24 ##Joystic value
23 | rosparam set /CONST_THROTTLE_STEP 0.001 #Joystic value
24 |
25 | rosparam set /SHOW_DEBUG false
26 |
27 |
--------------------------------------------------------------------------------
/ROS nodes/shell_scripts/setup_raspi_ros_variables.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | echo
4 | echo Setting up ROS environment variables:
5 | echo Run below command on tht terminal
6 | echo
7 |
8 | # IP address for the robot car
9 | echo "export ROS_IP=192.168.1.10"
10 |
11 | # IP address for the machine which does training and inference
12 | echo "export ROS_MASTER_URI=http://192.168.1.4:11311"
13 |
14 | echo "Setup the host if that is not set"
15 | echo "sudo nano /etc/hosts"
16 | echo "add: "
17 | echo "Eg: 192.168.1.4 dhanoop-virtualbox"
18 |
--------------------------------------------------------------------------------
/ROS nodes/training_node/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | cmake_minimum_required(VERSION 2.8.3)
2 | project(training_node)
3 |
4 | ## Compile as C++11, supported in ROS Kinetic and newer
5 | # add_compile_options(-std=c++11)
6 |
7 | ## Find catkin macros and libraries
8 | ## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz)
9 | ## is used, also find other catkin packages
10 | find_package(catkin REQUIRED COMPONENTS
11 | rospy
12 | sensor_msgs
13 | std_msgs
14 | )
15 |
16 | ## System dependencies are found with CMake's conventions
17 | # find_package(Boost REQUIRED COMPONENTS system)
18 |
19 |
20 | ## Uncomment this if the package has a setup.py. This macro ensures
21 | ## modules and global scripts declared therein get installed
22 | ## See http://ros.org/doc/api/catkin/html/user_guide/setup_dot_py.html
23 | # catkin_python_setup()
24 |
25 | ################################################
26 | ## Declare ROS messages, services and actions ##
27 | ################################################
28 |
29 | ## To declare and build messages, services or actions from within this
30 | ## package, follow these steps:
31 | ## * Let MSG_DEP_SET be the set of packages whose message types you use in
32 | ## your messages/services/actions (e.g. std_msgs, actionlib_msgs, ...).
33 | ## * In the file package.xml:
34 | ## * add a build_depend tag for "message_generation"
35 | ## * add a build_depend and a run_depend tag for each package in MSG_DEP_SET
36 | ## * If MSG_DEP_SET isn't empty the following dependency has been pulled in
37 | ## but can be declared for certainty nonetheless:
38 | ## * add a run_depend tag for "message_runtime"
39 | ## * In this file (CMakeLists.txt):
40 | ## * add "message_generation" and every package in MSG_DEP_SET to
41 | ## find_package(catkin REQUIRED COMPONENTS ...)
42 | ## * add "message_runtime" and every package in MSG_DEP_SET to
43 | ## catkin_package(CATKIN_DEPENDS ...)
44 | ## * uncomment the add_*_files sections below as needed
45 | ## and list every .msg/.srv/.action file to be processed
46 | ## * uncomment the generate_messages entry below
47 | ## * add every package in MSG_DEP_SET to generate_messages(DEPENDENCIES ...)
48 |
49 | ## Generate messages in the 'msg' folder
50 | # add_message_files(
51 | # FILES
52 | # Message1.msg
53 | # Message2.msg
54 | # )
55 |
56 | ## Generate services in the 'srv' folder
57 | # add_service_files(
58 | # FILES
59 | # Service1.srv
60 | # Service2.srv
61 | # )
62 |
63 | ## Generate actions in the 'action' folder
64 | # add_action_files(
65 | # FILES
66 | # Action1.action
67 | # Action2.action
68 | # )
69 |
70 | ## Generate added messages and services with any dependencies listed here
71 | # generate_messages(
72 | # DEPENDENCIES
73 | # sensor_msgs# std_msgs
74 | # )
75 |
76 | ################################################
77 | ## Declare ROS dynamic reconfigure parameters ##
78 | ################################################
79 |
80 | ## To declare and build dynamic reconfigure parameters within this
81 | ## package, follow these steps:
82 | ## * In the file package.xml:
83 | ## * add a build_depend and a run_depend tag for "dynamic_reconfigure"
84 | ## * In this file (CMakeLists.txt):
85 | ## * add "dynamic_reconfigure" to
86 | ## find_package(catkin REQUIRED COMPONENTS ...)
87 | ## * uncomment the "generate_dynamic_reconfigure_options" section below
88 | ## and list every .cfg file to be processed
89 |
90 | ## Generate dynamic reconfigure parameters in the 'cfg' folder
91 | # generate_dynamic_reconfigure_options(
92 | # cfg/DynReconf1.cfg
93 | # cfg/DynReconf2.cfg
94 | # )
95 |
96 | ###################################
97 | ## catkin specific configuration ##
98 | ###################################
99 | ## The catkin_package macro generates cmake config files for your package
100 | ## Declare things to be passed to dependent projects
101 | ## INCLUDE_DIRS: uncomment this if your package contains header files
102 | ## LIBRARIES: libraries you create in this project that dependent projects also need
103 | ## CATKIN_DEPENDS: catkin_packages dependent projects also need
104 | ## DEPENDS: system dependencies of this project that dependent projects also need
105 | catkin_package(
106 | # INCLUDE_DIRS include
107 | # LIBRARIES training_node
108 | # CATKIN_DEPENDS cv_bridge opencv2 rospy sensor_msgs std_msgs
109 | # DEPENDS system_lib
110 | )
111 |
112 | ###########
113 | ## Build ##
114 | ###########
115 |
116 | ## Specify additional locations of header files
117 | ## Your package locations should be listed before other locations
118 | include_directories(
119 | # include
120 | ${catkin_INCLUDE_DIRS}
121 | )
122 |
123 | ## Declare a C++ library
124 | # add_library(${PROJECT_NAME}
125 | # src/${PROJECT_NAME}/training_node.cpp
126 | # )
127 |
128 | ## Add cmake target dependencies of the library
129 | ## as an example, code may need to be generated before libraries
130 | ## either from message generation or dynamic reconfigure
131 | # add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
132 |
133 | ## Declare a C++ executable
134 | ## With catkin_make all packages are built within a single CMake context
135 | ## The recommended prefix ensures that target names across packages don't collide
136 | # add_executable(${PROJECT_NAME}_node src/training_node_node.cpp)
137 |
138 | ## Rename C++ executable without prefix
139 | ## The above recommended prefix causes long target names, the following renames the
140 | ## target back to the shorter version for ease of user use
141 | ## e.g. "rosrun someones_pkg node" instead of "rosrun someones_pkg someones_pkg_node"
142 | # set_target_properties(${PROJECT_NAME}_node PROPERTIES OUTPUT_NAME node PREFIX "")
143 |
144 | ## Add cmake target dependencies of the executable
145 | ## same as for the library above
146 | # add_dependencies(${PROJECT_NAME}_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
147 |
148 | ## Specify libraries to link a library or executable target against
149 | # target_link_libraries(${PROJECT_NAME}_node
150 | # ${catkin_LIBRARIES}
151 | # )
152 |
153 | #############
154 | ## Install ##
155 | #############
156 |
157 | # all install targets should use catkin DESTINATION variables
158 | # See http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html
159 |
160 | ## Mark executable scripts (Python etc.) for installation
161 | ## in contrast to setup.py, you can choose the destination
162 | # install(PROGRAMS
163 | # scripts/my_python_script
164 | # DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
165 | # )
166 |
167 | ## Mark executables and/or libraries for installation
168 | # install(TARGETS ${PROJECT_NAME} ${PROJECT_NAME}_node
169 | # ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
170 | # LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
171 | # RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
172 | # )
173 |
174 | ## Mark cpp header files for installation
175 | # install(DIRECTORY include/${PROJECT_NAME}/
176 | # DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
177 | # FILES_MATCHING PATTERN "*.h"
178 | # PATTERN ".svn" EXCLUDE
179 | # )
180 |
181 | ## Mark other files for installation (e.g. launch and bag files, etc.)
182 | # install(FILES
183 | # # myfile1
184 | # # myfile2
185 | # DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
186 | # )
187 |
188 | #############
189 | ## Testing ##
190 | #############
191 |
192 | ## Add gtest based cpp test target and link libraries
193 | # catkin_add_gtest(${PROJECT_NAME}-test test/test_training_node.cpp)
194 | # if(TARGET ${PROJECT_NAME}-test)
195 | # target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME})
196 | # endif()
197 |
198 | ## Add folders to be run by python nosetests
199 | # catkin_add_nosetests(test)
200 |
--------------------------------------------------------------------------------
/ROS nodes/training_node/bin/activate:
--------------------------------------------------------------------------------
1 | /home/dhanoop/anaconda3/bin/activate
--------------------------------------------------------------------------------
/ROS nodes/training_node/bin/conda:
--------------------------------------------------------------------------------
1 | /home/dhanoop/anaconda3/bin/conda
--------------------------------------------------------------------------------
/ROS nodes/training_node/bin/deactivate:
--------------------------------------------------------------------------------
1 | /home/dhanoop/anaconda3/bin/deactivate
--------------------------------------------------------------------------------
/ROS nodes/training_node/package.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | training_node
4 | 0.0.0
5 | The training_node package
6 |
7 |
8 |
9 |
10 | dhanoop
11 |
12 |
13 |
14 |
15 |
16 | TODO
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 | catkin
52 | rospy
53 | sensor_msgs
54 | std_msgs
55 | rospy
56 | sensor_msgs
57 | std_msgs
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
--------------------------------------------------------------------------------
/ROS nodes/training_node/scripts/__pycache__/config.cpython-36.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/ROS nodes/training_node/scripts/__pycache__/config.cpython-36.pyc
--------------------------------------------------------------------------------
/ROS nodes/training_node/scripts/training_node.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 |
3 | import time
4 | import rospy
5 | from std_msgs.msg import String
6 | from sensor_msgs.msg import Joy
7 | from sensor_msgs.msg import CompressedImage
8 | import cv2
9 | import numpy as np
10 | import os
11 | import csv
12 |
13 | class TrainingNode:
14 |
15 | steering_pulse = None
16 | throttle_pulse = None
17 |
18 | #Steering constants
19 | MAX_LEFT_ANGLE = rospy.get_param("/MAX_LEFT_ANGLE")
20 | MIN_RIGHT_ANGLE = rospy.get_param("/MIN_RIGHT_ANGLE")
21 | MAX_STEERING_PULSE = rospy.get_param("/MAX_STEERING_PULSE")
22 | MIN_STEERING_PULSE = rospy.get_param("/MIN_STEERING_PULSE")
23 | START_RECORDING = None
24 |
25 | #Throttle constants
26 | MIN_THROTTLE = rospy.get_param("/MIN_THROTTLE")
27 | MAX_THROTTLE = rospy.get_param("/MAX_THROTTLE")
28 | MIN_THROTTLE_PULSE = rospy.get_param("/MIN_THROTTLE_PULSE")
29 | MAX_THROTTLE_PULSE = rospy.get_param("/MAX_THROTTLE_PULSE")
30 | TRAINING_DATA_DIRECTORY = '/home/dhanoop/catkin_ws/training_data'
31 |
32 | folder_name = None
33 | data_file = None
34 | data = []
35 | folder_location = None
36 |
37 | def __init__(self):
38 | self.folder_name = str(int(round(time.time() * 1000)))
39 | if not os.path.isdir(self.TRAINING_DATA_DIRECTORY):
40 | os.makedirs(self.TRAINING_DATA_DIRECTORY)
41 | if not os.path.isdir(self.TRAINING_DATA_DIRECTORY+"/"+self.folder_name):
42 | os.makedirs(self.TRAINING_DATA_DIRECTORY+"/"+self.folder_name)
43 | self.folder_location = self.TRAINING_DATA_DIRECTORY+"/"+self.folder_name
44 | self.data_file = open(self.TRAINING_DATA_DIRECTORY+'/'+self.folder_name+'/'+'data.csv', 'w')
45 |
46 |
47 | def camera_node(self, image):
48 | self.START_RECORDING = rospy.get_param("/START_RECORDING")
49 | if self.START_RECORDING == True:
50 | millis = int(round(time.time() * 1000))
51 | image = cv2.imdecode(np.fromstring(image.data, np.uint8), cv2.IMREAD_COLOR)
52 | #image = cv2.resize(image, (320,240), interpolation=cv2.INTER_AREA)
53 | image_name = "".join(['image_',str(millis),'.jpg'])
54 | full_path_name = ''.join([self.folder_location,'/',image_name])
55 | cv2.imwrite(full_path_name, image)
56 | self.data.append([image_name,self.steering_pulse, self.throttle_pulse])
57 |
58 | rospy.loginfo('Recording: %s', self.START_RECORDING)
59 |
60 | def joystick_node(self, data):
61 | self.steering_pulse = data.axes[0]
62 | self.throttle_pulse = self.find_max_throttle(data.axes[3])
63 |
64 | def find_max_throttle(self, throttle_pulse):
65 | throttle = rospy.get_param("/CONST_THROTTLE")
66 | if throttle_pulse <= throttle:
67 | throttle = throttle_pulse
68 |
69 | return throttle
70 |
71 | def shutdown(self):
72 | with self.data_file:
73 | writer = csv.writer(self.data_file, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)
74 | writer.writerow(['Image','Steering', 'Throttle'])
75 | writer.writerows(self.data)
76 | rospy.loginfo('Saving the data')
77 |
78 |
79 | def listener(trainingNode):
80 |
81 | # In ROS, nodes are uniquely named. If two nodes with the same
82 | # name are launched, the previous one is kicked off. The
83 | # anonymous=True flag means that rospy will choose a unique
84 | # name for our 'listener' node so that multiple listeners can
85 | # run simultaneously.
86 | rospy.init_node('training_node', anonymous=True)
87 | rospy.Subscriber('raspicam_node/image/compressed', CompressedImage, trainingNode.camera_node, queue_size=30)
88 | rospy.Subscriber("joy", Joy, trainingNode.joystick_node, queue_size=30)
89 | rospy.on_shutdown(trainingNode.shutdown)
90 | # spin() simply keeps python from exiting until this node is stopped
91 | rospy.spin()
92 |
93 | if __name__ == '__main__':
94 | trainingNode = TrainingNode()
95 | listener(trainingNode)
96 |
--------------------------------------------------------------------------------
/ROS nodes/training_node/scripts/training_node_raspi.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 |
3 | import time
4 | import rospy
5 | from std_msgs.msg import String
6 | from sensor_msgs.msg import Joy
7 | from sensor_msgs.msg import CompressedImage
8 | #import numpy as np
9 | import os
10 | import csv
11 |
12 | class TrainingNode:
13 |
14 | steering_pulse = None
15 | throttle_pulse = None
16 |
17 | #Steering constants
18 | MAX_LEFT_ANGLE = rospy.get_param("/MAX_LEFT_ANGLE")
19 | MIN_RIGHT_ANGLE = rospy.get_param("/MIN_RIGHT_ANGLE")
20 | MAX_STEERING_PULSE = rospy.get_param("/MAX_STEERING_PULSE")
21 | MIN_STEERING_PULSE = rospy.get_param("/MIN_STEERING_PULSE")
22 | START_RECORDING = None
23 |
24 | #Throttle constants
25 | MIN_THROTTLE = rospy.get_param("/MIN_THROTTLE")
26 | MAX_THROTTLE = rospy.get_param("/MAX_THROTTLE")
27 | MIN_THROTTLE_PULSE = rospy.get_param("/MIN_THROTTLE_PULSE")
28 | MAX_THROTTLE_PULSE = rospy.get_param("/MAX_THROTTLE_PULSE")
29 | TRAINING_DATA_DIRECTORY = '/home/dhanoop/catkin_ws/training_data'
30 |
31 | folder_name = None
32 | data_file = None
33 | data = []
34 | folder_location = None
35 | log = []
36 | log_file = []
37 |
38 | def __init__(self):
39 | self.folder_name = str(int(round(time.time() * 1000)))
40 | if not os.path.isdir(self.TRAINING_DATA_DIRECTORY):
41 | os.makedirs(self.TRAINING_DATA_DIRECTORY)
42 | if not os.path.isdir(self.TRAINING_DATA_DIRECTORY+"/"+self.folder_name):
43 | os.makedirs(self.TRAINING_DATA_DIRECTORY+"/"+self.folder_name)
44 | self.folder_location = self.TRAINING_DATA_DIRECTORY+"/"+self.folder_name
45 | self.data_file = open(self.TRAINING_DATA_DIRECTORY+'/'+self.folder_name+'/'+'data.csv', 'w')
46 | self.log_file = open('log.csv', 'w')
47 |
48 |
49 | def camera_node(self, image):
50 | self.log.append(['camera starts: '+str(time.time() * 1000)])
51 | self.START_RECORDING = rospy.get_param("/START_RECORDING")
52 | if self.START_RECORDING == True:
53 | millis = int(round(time.time() * 1000))
54 | image_name = "".join(['image_',str(millis)])
55 | full_path_name = ''.join([self.folder_location,'/',image_name])
56 | file = open(full_path_name,"wb")
57 | file.write(image.data)
58 | file.close()
59 | self.data.append([image_name+'.jpg',self.steering_pulse, self.throttle_pulse])
60 | self.log.append(['camera ends: '+ str(time.time() * 1000)])
61 | rospy.loginfo('Recording: %s', self.START_RECORDING)
62 |
63 | def joystick_node(self, data):
64 | self.log.append(['joystic starts: '+ str(time.time() * 1000)])
65 | self.steering_pulse = data.axes[0]
66 | self.throttle_pulse = self.find_max_throttle(data.axes[3])
67 | self.log.append(['joystic ends: '+ str(time.time() * 1000)])
68 |
69 | def find_max_throttle(self, throttle_pulse):
70 | throttle = rospy.get_param("/CONST_THROTTLE")
71 | if throttle_pulse <= throttle:
72 | throttle = throttle_pulse
73 |
74 | return throttle
75 |
76 | def shutdown(self):
77 | with self.data_file:
78 | writer = csv.writer(self.data_file, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)
79 | writer.writerow(['Image','Steering', 'Throttle'])
80 | writer.writerows(self.data)
81 |
82 | with self.log_file:
83 | writer = csv.writer(self.log_file, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)
84 | writer.writerow(['Log'])
85 | writer.writerows(self.log)
86 | rospy.loginfo('Saving the data')
87 |
88 |
89 | def listener(trainingNode):
90 |
91 | # In ROS, nodes are uniquely named. If two nodes with the same
92 | # name are launched, the previous one is kicked off. The
93 | # anonymous=True flag means that rospy will choose a unique
94 | # name for our 'listener' node so that multiple listeners can
95 | # run simultaneously.
96 | rospy.init_node('training_node', anonymous=True)
97 | rospy.Subscriber('raspicam_node/image/compressed', CompressedImage, trainingNode.camera_node, queue_size=30)
98 | rospy.Subscriber("joy", Joy, trainingNode.joystick_node, queue_size=30)
99 | rospy.on_shutdown(trainingNode.shutdown)
100 | # spin() simply keeps python from exiting until this node is stopped
101 | rospy.spin()
102 |
103 | if __name__ == '__main__':
104 | trainingNode = TrainingNode()
105 | listener(trainingNode)
106 |
--------------------------------------------------------------------------------
/images/Architecture.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/images/Architecture.png
--------------------------------------------------------------------------------
/model/.gitignore:
--------------------------------------------------------------------------------
1 | drive_data/*
2 | saved_models/*
3 | model.h5
4 | test_video.mp4
5 |
--------------------------------------------------------------------------------
/model/advanced_lane_helper_functions.py:
--------------------------------------------------------------------------------
1 | import pickle
2 | import cv2
3 | import numpy as np
4 | import matplotlib.pyplot as plt
5 | import matplotlib.image as mpimg
6 | from os import listdir
7 | from os.path import isfile, join
8 |
9 | def undistort_image(img, mtx, dist):
10 | return cv2.undistort(img, mtx, dist, None, mtx)
11 |
12 | def abs_sobel_thresh(img, orient='x', sobel_kernel=3, thresh=(0, 255)):
13 | img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
14 | gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
15 | scaled_sobel = None
16 |
17 | # Sobel x
18 | if orient == 'x':
19 | sobelx = cv2.Sobel(gray, cv2.CV_64F, 1, 0,ksize=sobel_kernel) # Take the derivative in x
20 | abs_sobelx = np.absolute(sobelx) # Absolute x derivative to accentuate lines away from horizontal
21 | scaled_sobel = np.uint8(255*abs_sobelx/np.max(abs_sobelx))
22 |
23 | # Sobel y
24 | else:
25 | sobely = cv2.Sobel(gray, cv2.CV_64F, 0, 1, ksize=sobel_kernel) # Take the derivative in y
26 | abs_sobely = np.absolute(sobely) # Absolute x derivative to accentuate lines away from horizontal
27 | scaled_sobel = np.uint8(255*abs_sobely/np.max(abs_sobely))
28 |
29 | # Threshold x gradient
30 | thresh_min = thresh[0]
31 | thresh_max = thresh[1]
32 | grad_binary = np.zeros_like(scaled_sobel)
33 | grad_binary[(scaled_sobel >= thresh_min) & (scaled_sobel <= thresh_max)] = 1
34 |
35 | return grad_binary
36 |
37 | def mag_thresh(img, sobel_kernel=3, mag_thresh=(0, 255)):
38 | img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
39 | gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
40 | sobelx = cv2.Sobel(gray, cv2.CV_64F, 1, 0,ksize=sobel_kernel)
41 | sobely = cv2.Sobel(gray, cv2.CV_64F, 0, 1,ksize=sobel_kernel)
42 | magnitude = np.sqrt(np.square(sobelx)+np.square(sobely))
43 | abs_magnitude = np.absolute(magnitude)
44 | scaled_magnitude = np.uint8(255*abs_magnitude/np.max(abs_magnitude))
45 | mag_binary = np.zeros_like(scaled_magnitude)
46 | mag_binary[(scaled_magnitude >= mag_thresh[0]) & (scaled_magnitude <= mag_thresh[1])] = 1
47 |
48 | return mag_binary
49 |
50 | def dir_threshold(img, sobel_kernel=3, thresh=(0, np.pi/2)):
51 | img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
52 | gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
53 | sobelx = cv2.Sobel(gray, cv2.CV_64F, 1, 0,ksize=sobel_kernel)
54 | sobely = cv2.Sobel(gray, cv2.CV_64F, 0, 1,ksize=sobel_kernel)
55 | abs_sobelx = np.absolute(sobelx)
56 | abs_sobely = np.absolute(sobely)
57 | arctan = np.arctan2(abs_sobely, abs_sobelx)
58 | dir_binary = np.zeros_like(arctan)
59 | dir_binary[(arctan >= thresh[0]) & (arctan <= thresh[1])] = 1
60 |
61 | return dir_binary
62 |
63 |
64 | def combined_s_gradient_thresholds(img, show=False):
65 |
66 | # Choose a Sobel kernel size
67 | ksize = 3 # Choose a larger odd number to smooth gradient measurements
68 |
69 | # Apply each of the thresholding functions
70 | gradx = abs_sobel_thresh(img, orient='x', sobel_kernel=ksize, thresh=(20, 100))
71 | grady = abs_sobel_thresh(img, orient='y', sobel_kernel=ksize, thresh=(20, 100))
72 | mag_binary = mag_thresh(img, sobel_kernel=ksize, mag_thresh=(20, 100))
73 | dir_binary = dir_threshold(img, sobel_kernel=ksize, thresh=(0.7, 1.4))
74 |
75 | combined = np.zeros_like(dir_binary)
76 | combined[((gradx == 1) & (grady == 1)) | ((mag_binary == 1) & (dir_binary == 1))] = 1
77 |
78 | img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
79 | hls = cv2.cvtColor(img, cv2.COLOR_RGB2HLS)
80 | s_channel = hls[:,:,2]
81 |
82 | # Threshold color channel
83 | s_thresh_min = 150
84 | s_thresh_max = 255
85 | s_binary = np.zeros_like(s_channel)
86 | s_binary[(s_channel >= s_thresh_min) & (s_channel <= s_thresh_max)] = 1
87 |
88 | # Combine the two binary thresholds
89 | combined_binary = np.zeros_like(combined)
90 |
91 | combined_binary[(s_binary == 1) | (combined == 1)] = 1
92 |
93 | if show == True:
94 | f, (ax1, ax2, ax3, ax4) = plt.subplots(1, 4, figsize=(20,10))
95 | ax1.set_title('Actual image')
96 | ax1.imshow(img)
97 | ax2.set_title('Combined gradx,grady,magnitude,direction')
98 | ax2.imshow(combined, cmap='gray')
99 | ax3.set_title('Color thresholding')
100 | ax3.imshow(s_binary, cmap='gray')
101 | ax4.set_title('Combined all')
102 | ax4.imshow(combined_binary, cmap='gray')
103 |
104 | return combined_binary
105 |
106 | def transform_image(img, nx, ny):
107 | offset = 100 # offset for dst points
108 |
109 | # Grab the image shape
110 | img_size = (img.shape[1], img.shape[0])
111 | print(img_size)
112 | (320, 240)
113 | leftupperpoint = [150,100]
114 | rightupperpoint = [300,220]
115 | leftlowerpoint = [300,240]
116 | rightlowerpoint = [340,240]
117 |
118 | src = np.float32([leftupperpoint, leftlowerpoint, rightupperpoint, rightlowerpoint])
119 | print(src)
120 | #dst = np.float32([[200,0], [200,680], [1000,0], [1000,680]])
121 | dst = np.float32([[100,0], [100,240], [340,0], [100,240]])
122 |
123 | # Given src and dst points, calculate the perspective transform matrix
124 | M = cv2.getPerspectiveTransform(src, dst)
125 |
126 | # Warp the image using OpenCV warpPerspective()
127 | warped = cv2.warpPerspective(img, M, img_size, flags=cv2.INTER_NEAREST)
128 |
129 | return warped, M
130 |
131 | def visualize_transorm_image(combined_binary, warped_img):
132 | f, (ax1, ax2) = plt.subplots(1, 2, figsize=(24, 9))
133 | f.tight_layout()
134 | ax1.imshow(combined_binary, cmap='gray')
135 | ax1.set_title('Original Image', fontsize=50)
136 | ax2.imshow(warped_img,cmap='gray')
137 | ax2.set_title('Warped Image', fontsize=50)
138 | plt.subplots_adjust(left=0., right=1, top=0.9, bottom=0.)
139 |
140 | def locate_lines(binary_warped, nwindows = 9, margin = 100, minpix = 50):
141 | # Assuming you have created a warped binary image called "binary_warped"
142 | # Take a histogram of the bottom half of the image
143 | histogram = np.sum(binary_warped[int(binary_warped.shape[0]/2):,:], axis=0)
144 |
145 | # Find the peak of the left and right halves of the histogram
146 | # These will be the starting point for the left and right lines
147 | midpoint = np.int(histogram.shape[0]/2)
148 | leftx_base = np.argmax(histogram[:midpoint])
149 | rightx_base = np.argmax(histogram[midpoint:]) + midpoint
150 |
151 | # Set height of windows
152 | window_height = np.int(binary_warped.shape[0]/nwindows)
153 | # Identify the x and y positions of all nonzero pixels in the image
154 | nonzero = binary_warped.nonzero()
155 | nonzeroy = np.array(nonzero[0])
156 | nonzerox = np.array(nonzero[1])
157 | # Current positions to be updated for each window
158 | leftx_current = leftx_base
159 | rightx_current = rightx_base
160 |
161 | # Create empty lists to receive left and right lane pixel indices
162 | left_lane_inds = []
163 | right_lane_inds = []
164 |
165 | # Create an image to draw on and an image to show the selection window
166 | out_img = np.dstack((binary_warped, binary_warped, binary_warped))*255
167 |
168 | # Step through the windows one by one
169 | for window in range(nwindows):
170 | # Identify window boundaries in x and y (and right and left)
171 | win_y_low = binary_warped.shape[0] - (window+1)*window_height
172 | win_y_high = binary_warped.shape[0] - window*window_height
173 | win_xleft_low = leftx_current - margin
174 | win_xleft_high = leftx_current + margin
175 | win_xright_low = rightx_current - margin
176 | win_xright_high = rightx_current + margin
177 | # Draw the windows on the visualization image
178 | cv2.rectangle(out_img,(win_xleft_low,win_y_low),(win_xleft_high,win_y_high),
179 | (0,255,0), 2)
180 | cv2.rectangle(out_img,(win_xright_low,win_y_low),(win_xright_high,win_y_high),
181 | (0,255,0), 2)
182 | # Identify the nonzero pixels in x and y within the window
183 | good_left_inds = ((nonzeroy >= win_y_low) & (nonzeroy < win_y_high) &
184 | (nonzerox >= win_xleft_low) & (nonzerox < win_xleft_high)).nonzero()[0]
185 | good_right_inds = ((nonzeroy >= win_y_low) & (nonzeroy < win_y_high) &
186 | (nonzerox >= win_xright_low) & (nonzerox < win_xright_high)).nonzero()[0]
187 | # Append these indices to the lists
188 | left_lane_inds.append(good_left_inds)
189 | right_lane_inds.append(good_right_inds)
190 | # If you found > minpix pixels, recenter next window on their mean position
191 | if len(good_left_inds) > minpix:
192 | leftx_current = np.int(np.mean(nonzerox[good_left_inds]))
193 | if len(good_right_inds) > minpix:
194 | rightx_current = np.int(np.mean(nonzerox[good_right_inds]))
195 |
196 | # Concatenate the arrays of indices
197 | left_lane_inds = np.concatenate(left_lane_inds)
198 | right_lane_inds = np.concatenate(right_lane_inds)
199 |
200 | # Extract left and right line pixel positions
201 | leftx = nonzerox[left_lane_inds]
202 | lefty = nonzeroy[left_lane_inds]
203 | rightx = nonzerox[right_lane_inds]
204 | righty = nonzeroy[right_lane_inds]
205 |
206 | # Fit a second order polynomial to each
207 | left_fit = np.polyfit(lefty, leftx, 2)
208 | right_fit = np.polyfit(righty, rightx, 2)
209 |
210 | return left_fit, right_fit,left_lane_inds, right_lane_inds, nonzerox, nonzeroy
211 |
212 | def locate_line_further(left_fit, right_fit, binary_warped):
213 |
214 | nonzero = binary_warped.nonzero()
215 | nonzeroy = np.array(nonzero[0])
216 | nonzerox = np.array(nonzero[1])
217 | margin = 50
218 | left_lane_inds = ((nonzerox > (left_fit[0]*(nonzeroy**2) + left_fit[1]*nonzeroy + left_fit[2] - margin))
219 | & (nonzerox < (left_fit[0]*(nonzeroy**2) + left_fit[1]*nonzeroy + left_fit[2] + margin)))
220 | right_lane_inds = ((nonzerox > (right_fit[0]*(nonzeroy**2) + right_fit[1]*nonzeroy + right_fit[2] - margin))
221 | & (nonzerox < (right_fit[0]*(nonzeroy**2) + right_fit[1]*nonzeroy + right_fit[2] + margin)))
222 |
223 | # Again, extract left and right line pixel positions
224 | leftx = nonzerox[left_lane_inds]
225 | lefty = nonzeroy[left_lane_inds]
226 | rightx = nonzerox[right_lane_inds]
227 | righty = nonzeroy[right_lane_inds]
228 |
229 | # Fit a second order polynomial to each
230 | if len(leftx) == 0:
231 | left_fit_new =[]
232 | else:
233 | left_fit_new = np.polyfit(lefty, leftx, 2)
234 |
235 | if len(rightx) == 0:
236 | right_fit_new =[]
237 | else:
238 | right_fit_new = np.polyfit(righty, rightx, 2)
239 |
240 | return left_fit_new, right_fit_new
241 |
242 | def visulizeLanes(left_fit, right_fit, left_lane_inds, right_lane_inds, binary_warped, nonzerox, nonzeroy, margin = 100):
243 |
244 | # Generate x and y values for plotting
245 | ploty = np.linspace(0, binary_warped.shape[0]-1, binary_warped.shape[0] )
246 | left_fitx = left_fit[0]*ploty**2 + left_fit[1]*ploty + left_fit[2]
247 | right_fitx = right_fit[0]*ploty**2 + right_fit[1]*ploty + right_fit[2]
248 |
249 | # Create an image to draw on and an image to show the selection window
250 | out_img = np.dstack((binary_warped, binary_warped, binary_warped))*255
251 | window_img = np.zeros_like(out_img)
252 | # Color in left and right line pixels
253 | out_img[nonzeroy[left_lane_inds], nonzerox[left_lane_inds]] = [255, 0, 0]
254 | out_img[nonzeroy[right_lane_inds], nonzerox[right_lane_inds]] = [0, 0, 255]
255 |
256 | # Generate a polygon to illustrate the search window area
257 | # And recast the x and y points into usable format for cv2.fillPoly()
258 | left_line_window1 = np.array([np.transpose(np.vstack([left_fitx-margin, ploty]))])
259 | left_line_window2 = np.array([np.flipud(np.transpose(np.vstack([left_fitx+margin,
260 | ploty])))])
261 | left_line_pts = np.hstack((left_line_window1, left_line_window2))
262 | right_line_window1 = np.array([np.transpose(np.vstack([right_fitx-margin, ploty]))])
263 | right_line_window2 = np.array([np.flipud(np.transpose(np.vstack([right_fitx+margin,
264 | ploty])))])
265 | right_line_pts = np.hstack((right_line_window1, right_line_window2))
266 |
267 | # Draw the lane onto the warped blank image
268 | cv2.fillPoly(window_img, np.int_([left_line_pts]), (0,255, 0))
269 | cv2.fillPoly(window_img, np.int_([right_line_pts]), (0,255, 0))
270 | result = cv2.addWeighted(out_img, 1, window_img, 0.3, 0)
271 | plt.imshow(result)
272 | plt.plot(left_fitx, ploty, color='yellow')
273 | plt.plot(right_fitx, ploty, color='yellow')
274 | plt.xlim(0, 1280)
275 | plt.ylim(720, 0)
276 |
277 |
278 | #Radius of Curvature
279 | def radius_curvature(binary_warped, left_fit, right_fit):
280 |
281 | ploty = np.linspace(0, binary_warped.shape[0]-1, binary_warped.shape[0] )
282 | left_fitx = left_fit[0]*ploty**2 + left_fit[1]*ploty + left_fit[2]
283 | right_fitx = right_fit[0]*ploty**2 + right_fit[1]*ploty + right_fit[2]
284 |
285 | # Define conversions in x and y from pixels space to meters
286 | ym_per_pix = 30/720 # meters per pixel in y dimension
287 | xm_per_pix = 3.7/700 # meters per pixel in x dimension
288 | y_eval = np.max(ploty)
289 |
290 | # Fit new polynomials to x,y in world space
291 | left_fit_cr = np.polyfit(ploty*ym_per_pix, left_fitx*xm_per_pix, 2)
292 | right_fit_cr = np.polyfit(ploty*ym_per_pix, right_fitx*xm_per_pix, 2)
293 |
294 | # Calculate the new radii of curvature
295 | left_curvature = ((1 + (2*left_fit_cr[0] *y_eval*ym_per_pix + left_fit_cr[1])**2) **1.5) / np.absolute(2*left_fit_cr[0])
296 | right_curvature = ((1 + (2*right_fit_cr[0]*y_eval*ym_per_pix + right_fit_cr[1])**2)**1.5) / np.absolute(2*right_fit_cr[0])
297 |
298 | # Calculate vehicle center
299 | #left_lane and right lane bottom in pixels
300 | left_lane_bottom = (left_fit[0]*y_eval)**2 + left_fit[0]*y_eval + left_fit[2]
301 | right_lane_bottom = (right_fit[0]*y_eval)**2 + right_fit[0]*y_eval + right_fit[2]
302 |
303 | # Lane center as mid of left and right lane bottom
304 | lane_center = (left_lane_bottom + right_lane_bottom)/2.
305 | center_image = 640
306 | center = (lane_center - center_image)*xm_per_pix #Convert to meters
307 | position = "left" if center < 0 else "right"
308 | center = "Vehicle is {:.2f}m {}".format(center, position)
309 |
310 | # Now our radius of curvature is in meters
311 | return left_curvature, right_curvature, center
312 |
313 |
314 | def draw_on_image(undist, warped_img, left_fit, right_fit, M, left_curvature, right_curvature, center, show_values = False):
315 | ploty = np.linspace(0, warped_img.shape[0]-1, warped_img.shape[0] )
316 | left_fitx = left_fit[0]*ploty**2 + left_fit[1]*ploty + left_fit[2]
317 | right_fitx = right_fit[0]*ploty**2 + right_fit[1]*ploty + right_fit[2]
318 |
319 | # Create an image to draw the lines on
320 | warp_zero = np.zeros_like(warped_img).astype(np.uint8)
321 | color_warp = np.dstack((warp_zero, warp_zero, warp_zero))
322 |
323 | # Recast the x and y points into usable format for cv2.fillPoly()
324 | pts_left = np.array([np.transpose(np.vstack([left_fitx, ploty]))])
325 | pts_right = np.array([np.flipud(np.transpose(np.vstack([right_fitx, ploty])))])
326 | pts = np.hstack((pts_left, pts_right))
327 |
328 | # Draw the lane onto the warped blank image
329 | cv2.fillPoly(color_warp, np.int_([pts]), (0,255, 0))
330 | Minv = np.linalg.inv(M)
331 | # Warp the blank back to original image space using inverse perspective matrix (Minv)
332 | newwarp = cv2.warpPerspective(color_warp, Minv, (undist.shape[1], undist.shape[0]))
333 | # Combine the result with the original image
334 | result = cv2.addWeighted(undist, 1, newwarp, 0.3, 0)
335 |
336 | cv2.putText(result, 'Left curvature: {:.0f} m'.format(left_curvature), (50, 50), cv2.FONT_HERSHEY_DUPLEX, 1, (255, 255, 255), 2)
337 | cv2.putText(result, 'Right curvature: {:.0f} m'.format(right_curvature), (50, 100), cv2.FONT_HERSHEY_DUPLEX, 1, (255, 255, 255), 2)
338 | cv2.putText(result, '{}'.format(center), (50, 150), cv2.FONT_HERSHEY_DUPLEX, 1, (255, 255, 255), 2)
339 | if show_values == True:
340 | fig, ax = plt.subplots(figsize=(20, 10))
341 | ax.imshow(result)
342 |
343 | return result
344 |
345 |
346 | def is_lane_valid(left_fit, right_fit):
347 |
348 | #Check if left and right fit returned a value
349 | if len(left_fit) ==0 or len(right_fit) == 0:
350 | status = False
351 |
352 | else:
353 | #Check distance b/w lines
354 | ploty = np.linspace(0, 20, num=10 )
355 | left_fitx = left_fit[0]*ploty**2 + left_fit[1]*ploty + left_fit[2]
356 | right_fitx = right_fit[0]*ploty**2 + right_fit[1]*ploty + right_fit[2]
357 | delta_lines = np.mean(right_fitx - left_fitx)
358 | if delta_lines >= 150 and delta_lines <=430:
359 | status = True
360 | else:
361 | status = False
362 |
363 | # Calculate slope of left and right lanes at midpoint of y (i.e. 360)
364 | left = 2*left_fit[0]*360+left_fit[1]
365 | right = 2*right_fit[0]*360+right_fit[1]
366 | delta_slope_mid = np.abs(left-right)
367 |
368 | #Check if lines are parallel at the middle
369 | if delta_slope_mid <= 0.1:
370 | status = True
371 | else:
372 | status = False
373 |
374 | return status
375 |
376 | def find_lanes(img, mtx, dist, lane, nx = 9, ny = 6):
377 | img = undistort_image(img, mtx, dist)
378 | combined_binary = combined_s_gradient_thresholds(img)
379 | warped_img, M = transform_image(combined_binary, nx, ny)
380 | if lane.counter == 0:
381 | lane.left_fit, lane.right_fit,left_lane_inds, right_lane_inds, nonzerox, nonzeroy = locate_lines(warped_img)
382 | else:
383 | lane.left_fit, lane.right_fit = locate_line_further(lane.left_fit, lane.right_fit, warped_img)
384 |
385 | #Sanity check
386 | status = is_lane_valid(lane.left_fit, lane.right_fit)
387 |
388 | if status == True:
389 | lane.last_left, lane.last_right = lane.left_fit, lane.right_fit
390 | lane.counter += 1
391 | lane.reset_counter = 0
392 | else:
393 | #Reset
394 | if lane.reset_counter > 4:
395 | lane.left_fit, lane.right_fit,left_lane_inds, right_lane_inds, nonzerox, nonzeroy = locate_lines(warped_img)
396 | lane.reset_counter = 0
397 | else:
398 | lane.left_fit, lane.right_fit = lane.last_left, lane.last_right
399 |
400 | lane.reset_counter += 1
401 |
402 | return warped_img, lane.left_fit, lane.right_fit, M
403 |
404 |
405 |
--------------------------------------------------------------------------------
/model/camera_cal/calibration1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/camera_cal/calibration1.jpg
--------------------------------------------------------------------------------
/model/camera_cal/calibration10.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/camera_cal/calibration10.jpg
--------------------------------------------------------------------------------
/model/camera_cal/calibration11.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/camera_cal/calibration11.jpg
--------------------------------------------------------------------------------
/model/camera_cal/calibration12.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/camera_cal/calibration12.jpg
--------------------------------------------------------------------------------
/model/camera_cal/calibration13.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/camera_cal/calibration13.jpg
--------------------------------------------------------------------------------
/model/camera_cal/calibration14.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/camera_cal/calibration14.jpg
--------------------------------------------------------------------------------
/model/camera_cal/calibration15.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/camera_cal/calibration15.jpg
--------------------------------------------------------------------------------
/model/camera_cal/calibration16.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/camera_cal/calibration16.jpg
--------------------------------------------------------------------------------
/model/camera_cal/calibration17.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/camera_cal/calibration17.jpg
--------------------------------------------------------------------------------
/model/camera_cal/calibration18.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/camera_cal/calibration18.jpg
--------------------------------------------------------------------------------
/model/camera_cal/calibration19.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/camera_cal/calibration19.jpg
--------------------------------------------------------------------------------
/model/camera_cal/calibration2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/camera_cal/calibration2.jpg
--------------------------------------------------------------------------------
/model/camera_cal/calibration20.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/camera_cal/calibration20.jpg
--------------------------------------------------------------------------------
/model/camera_cal/calibration3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/camera_cal/calibration3.jpg
--------------------------------------------------------------------------------
/model/camera_cal/calibration4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/camera_cal/calibration4.jpg
--------------------------------------------------------------------------------
/model/camera_cal/calibration5.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/camera_cal/calibration5.jpg
--------------------------------------------------------------------------------
/model/camera_cal/calibration6.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/camera_cal/calibration6.jpg
--------------------------------------------------------------------------------
/model/camera_cal/calibration7.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/camera_cal/calibration7.jpg
--------------------------------------------------------------------------------
/model/camera_cal/calibration8.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/camera_cal/calibration8.jpg
--------------------------------------------------------------------------------
/model/camera_cal/calibration9.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/camera_cal/calibration9.jpg
--------------------------------------------------------------------------------
/model/data_prep.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 |
3 | import os
4 | import csv
5 | for root, directories, filenames in os.walk('drive_data/training_data'):
6 | with open(root+"/"+"drive_data.csv", 'w') as drivecsv:
7 | filewriterfiles = csv.writer(drivecsv, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)
8 | filewriterfiles.writerow(['Image', 'Steering', 'Throttle'])
9 | for directory in directories:
10 | file_path = root+"/"+directory+"/"
11 | data_file_path = file_path+'data.csv'
12 | f = open(data_file_path, 'r')
13 | reader = csv.reader(f)
14 | count = 0
15 | for row in reader:
16 | if count != 0:
17 | image_path = file_path+row[0]
18 | steering = row[1]
19 | throttle = row[2]
20 | filewriterfiles.writerow([image_path, steering, throttle])
21 | print("{} {} {}".format(image_path, steering, throttle))
22 | print("")
23 | count +=1
24 |
--------------------------------------------------------------------------------
/model/data_prep_raspi_nodes.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 |
3 | import os
4 | import csv
5 | import cv2
6 | import numpy as np
7 |
8 | for root, directories, filenames in os.walk('drive_data/training_data'):
9 | with open(root+"/"+"drive_data.csv", 'w') as drivecsv:
10 | filewriterfiles = csv.writer(drivecsv, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)
11 | filewriterfiles.writerow(['Image', 'Steering', 'Throttle'])
12 | for directory in directories:
13 | file_path = root+"/"+directory+"/"
14 | data_file_path = file_path+'data.csv'
15 | f = open(data_file_path, 'r')
16 | reader = csv.reader(f)
17 | count = 0
18 | for row in reader:
19 | if count != 0:
20 | image_path = file_path+row[0]
21 | image_name = row[0].split('.')
22 | f = open(file_path+image_name[0], 'rb')
23 | image_data = f.read()
24 | image = cv2.imdecode(np.fromstring(image_data, np.uint8), cv2.IMREAD_COLOR)
25 | image = cv2.resize(image, (320,240), interpolation=cv2.INTER_AREA)
26 | cv2.imwrite(image_path, image)
27 | steering = row[1]
28 | throttle = row[2]
29 | filewriterfiles.writerow([image_path, steering, throttle])
30 | print("{} {} {}".format(image_path, steering, throttle))
31 | print("")
32 | count +=1
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/model/explore_training_windows.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 |
3 | import csv
4 | import cv2
5 | import numpy as np
6 | import matplotlib.pyplot as plt
7 |
8 |
9 | csv_lines = []
10 | csv_drive_data = 'drive_data/training_data/drive_data.csv'
11 | with open(csv_drive_data) as csvfile:
12 | reader = csv.reader(csvfile, delimiter=",", quotechar='|')
13 | for line in reader:
14 | csv_lines.append(line)
15 |
16 | print(csv_lines)
17 | steering_commands = []
18 |
19 | left_count = 0
20 | right_count = 0
21 | zero_count = 0
22 | count = 0
23 | for csv_line in csv_lines:
24 | if count != 0:
25 | steering_angle = float(csv_line[1])
26 |
27 | if steering_angle > 0:
28 | left_count += 1
29 | elif steering_angle < 0:
30 | right_count += 1
31 | else:
32 | zero_count +=1
33 | count += 1
34 |
35 | print("Left turns count: " + str(left_count))
36 | print("Right turns count: " + str(right_count))
37 | print("Zero count: " + str(zero_count))
38 |
--------------------------------------------------------------------------------
/model/expore_training.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 |
3 | import csv
4 | import cv2
5 | import numpy as np
6 | import matplotlib.pyplot as plt
7 |
8 |
9 | csv_lines = []
10 |
11 | with open("drive_data/training_data/drive_data.csv") as csvfile:
12 | reader = csv.reader(csvfile, delimiter=",", quotechar='|')
13 | for line in reader:
14 | csv_lines.append(line)
15 |
16 | steering_commands = []
17 |
18 | left_count = 0
19 | right_count = 0
20 | zero_count = 0
21 | count = 0
22 | for csv_line in csv_lines:
23 | if count != 0:
24 | steering_angle = float(csv_line[1])
25 |
26 | if steering_angle > 0:
27 | left_count += 1
28 | elif steering_angle < 0:
29 | right_count += 1
30 | else:
31 | zero_count +=1
32 | count += 1
33 |
34 | print("Left turns count: " + str(left_count))
35 | print("Right turns count: " + str(right_count))
36 | print("Zero count: " + str(zero_count))
37 |
--------------------------------------------------------------------------------
/model/model.py:
--------------------------------------------------------------------------------
1 | from keras.models import Sequential, Model
2 | from keras.layers import Lambda, Cropping2D, Conv2D, ELU, Flatten, Dense, Dropout, Activation, MaxPooling2D, Reshape, BatchNormalization, Input, Dense, merge
3 | from keras.preprocessing.image import ImageDataGenerator, random_shift
4 | from keras.optimizers import Adam, RMSprop
5 | from keras.callbacks import EarlyStopping, ModelCheckpoint
6 | import random
7 | import os
8 | import cv2
9 | import numpy as np
10 | import pandas as pd
11 | from sklearn.utils import shuffle
12 |
13 | class ModelClass:
14 |
15 | # Paths
16 | PATH_TO_CSV = 'drive_data/training_data/drive_data.csv'
17 |
18 | # Shape
19 | INPUT_SHAPE = (240, 320, 3) #(Height, Width, Depth)
20 | RESIZE_SHAPE = (160,120) #(Width, Height)
21 | NEW_SHAPE = (120, 160, 3) #(Height, Width, Depth)
22 | LEARNING_PARAMETER = 0.0001 #.001
23 |
24 | # Get data from csv
25 | def get_csv(self):
26 | df = pd.read_csv(self.PATH_TO_CSV, index_col=False)
27 | df.columns = ['Image', 'Steering', 'Throttle']
28 | df = df.sample(n=len(df))
29 |
30 | return df
31 |
32 | # Randomly selecting the let, right, and center images
33 | def random_select_image(self, data, i):
34 | path = data['Image'][i]
35 | image = cv2.imread(path)
36 | image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
37 | image = cv2.resize(image, self.RESIZE_SHAPE, interpolation=cv2.INTER_AREA)
38 | angle = float(data['Steering'][i])
39 |
40 | return image, angle
41 |
42 | # Flipping the images
43 | def flip_img_angle(self, image, angle):
44 | image = cv2.flip(image, 1)
45 | angle *= -1.0
46 |
47 | return image, angle
48 |
49 | def linear_bin(self, value_to_bin):
50 | value_to_bin = value_to_bin + 1
51 | binned_value = round(value_to_bin / (2.0 / 14.0))
52 |
53 | return int(binned_value)
54 |
55 | def bin_matrix(self, matrix_to_bin):
56 | binned_matrix = []
57 | for value_to_bin in matrix_to_bin:
58 | temp_bin = np.zeros(15)
59 | temp_bin[self.linear_bin(value_to_bin)] = 1
60 | binned_matrix.append(temp_bin)
61 |
62 | return np.array(binned_matrix)
63 |
64 | def crop_image(self, image):
65 | """
66 | Returns an image cropped 40 pixels from top and 20 pixels from bottom.
67 | :param image: Image represented as a numpy array.
68 | """
69 | return image[50:,:]
70 |
71 | # Getting brightnessed image
72 | def brightnessed_img(self, image):
73 | image = cv2.cvtColor(image, cv2.COLOR_RGB2HSV)
74 | random_bright = .25 + np.random.uniform()
75 | #random_bright = .50 + np.random.uniform(low=0.0, high=.50)
76 | image[:,:,2] = image[:,:,2] * random_bright
77 | image = cv2.cvtColor(image, cv2.COLOR_HSV2RGB)
78 |
79 | #Convert to YUV color space (as nVidia paper suggests)
80 | image = cv2.cvtColor(image, cv2.COLOR_RGB2YUV)
81 | return image
82 |
83 | def gaussian_blur(self, image):
84 | gaussianbandwidths = [1, 3, 1, 1]
85 | gaussianidx = np.random.randint(0, len(gaussianbandwidths))
86 | gaussianbandwidth = gaussianbandwidths[gaussianidx]
87 | return cv2.GaussianBlur(image, (gaussianbandwidth,gaussianbandwidth), 0)
88 |
89 | # Getting fetatures and lables from training and validation data
90 | def get_data(self, data, training=False):
91 | images = []
92 | angles = []
93 | straight_count = 0
94 | not_considered_straight_count = 0
95 | for i in data.index:
96 | image, angle = self.random_select_image(data, i)
97 | #image = self.crop_image(image)
98 | if abs(angle) < .1:
99 | straight_count += 1
100 | if straight_count > (len(data) * .5):
101 | if abs(angle) < .1:
102 | not_considered_straight_count +=1
103 | continue
104 |
105 | images.append(image)
106 | angles.append(angle)
107 |
108 | if abs(angle) >= 0:
109 | image1, angle1 = self.flip_img_angle(image, angle)
110 | images.append(image1)
111 | angles.append(angle1)
112 |
113 | if random.randrange(3) == 1 and abs(angle) == 0:
114 | image1, angle1 = self.flip_img_angle(image, angle)
115 | images.append(image1)
116 | angles.append(angle1)
117 |
118 | if training == True:
119 | '''
120 | if random.randrange(3) == 1:
121 | image1 = self.gaussian_blur(image)
122 | images.append(image1)
123 | angles.append(angle)'''
124 | image1 = self.brightnessed_img(image)
125 | images.append(image1)
126 | angles.append(angle)
127 |
128 |
129 | print("Toal files: "+str(len(data)))
130 | print("Total straight files: "+str(straight_count))
131 | print("Straight files not considered: "+str(not_considered_straight_count))
132 |
133 | angles = self.bin_matrix(angles)
134 | #angles = to_categorical(angles, 10)
135 |
136 | # Creating as numpy array
137 | X = np.array(images)
138 | y = np.array(angles)
139 |
140 | return X, y
141 |
142 | def normalize(self, image):
143 | """
144 | Returns a normalized image with feature values from -1.0 to 1.0.
145 | :param image: Image represented as a numpy array.
146 | """
147 | return image / 127.5 - 1.
148 |
149 | # Creating the model
150 | def get_model(self):
151 | img_in = Input(shape=self.NEW_SHAPE, name='img_in')
152 | x = img_in
153 | x = Lambda(lambda x: x/255.-0.5,input_shape=self.NEW_SHAPE)(x)
154 | x = Cropping2D(cropping=((40, 0), (0, 0)))(x)
155 | x = Conv2D(24, (5,5), strides=(2,2), activation='relu')(x)
156 | #x = Dropout(.1)(x)
157 | x = Conv2D(32, (5,5), strides=(2,2), activation='relu')(x)
158 | #x = Dropout(.1)(x)
159 | x = Conv2D(64, (5,5), strides=(2,2), activation='relu')(x)
160 | #x = Dropout(.1)(x)
161 | x = Conv2D(64, (3,3), strides=(2,2), activation='relu')(x)
162 | #x = Dropout(.1)(x)
163 | x = Conv2D(64, (3,3), strides=(1,1), activation='relu')(x)
164 |
165 | x = Flatten(name='flattened')(x)
166 | #x = Dropout(.1)(x)
167 | x = Dense(100, activation='relu')(x)
168 | x = Dropout(.1)(x)
169 | x = Dense(50, activation='relu')(x)
170 | x = Dropout(.1)(x)
171 |
172 | #categorical output of the angle
173 | angle_out = Dense(15, activation='softmax', name='angle_out')(x)
174 |
175 | #continous output of throttle
176 | #throttle_out = Dense(1, activation='relu', name='throttle_out')(x)
177 |
178 | model = Model(inputs=[img_in], outputs=[angle_out])
179 | #adam = Adam(lr=self.LEARNING_PARAMETER)
180 | rmsprop = RMSprop(lr=self.LEARNING_PARAMETER)
181 | model.compile(optimizer=rmsprop, loss={'angle_out': 'categorical_crossentropy'}, metrics=['accuracy'])
182 |
183 | return model
184 |
185 |
186 | # Hyperparameteres
187 | BATCH_SIZE = 128
188 | EPOCH = 100
189 |
190 | modelClass = ModelClass()
191 |
192 | # Getting data from CSV
193 | samples = modelClass.get_csv()
194 | samples = shuffle(samples, random_state=0)
195 |
196 | # Training and Validation data
197 | training_count = int(0.8 * len(samples))
198 | training_data = samples[:training_count].reset_index()
199 | validation_data = samples[training_count:].reset_index()
200 |
201 | #data = samples.reset_index()
202 | X_train, y_train = modelClass.get_data(training_data, training=True)
203 | X_val, y_val = modelClass.get_data(validation_data, training=False)
204 |
205 | print("Training sample: {}".format(len(X_train)))
206 | print("Validation sample: {}".format(len(X_val)))
207 |
208 | # Model using Keras
209 | model = modelClass.get_model()
210 |
211 | # Set callback functions to early stop training and save the best model so far
212 | callbacks = [EarlyStopping(monitor='val_loss', min_delta=.0001, patience=20, mode='auto'),
213 | ModelCheckpoint(filepath='./model.h5', monitor='val_loss', save_best_only=True, verbose=1, mode='min')]
214 |
215 | #checkpoint = ModelCheckpoint("./model.h5", monitor='val_loss', verbose=1, save_best_only=True, mode='auto')
216 | #callbacks_list = [checkpoint]
217 |
218 | # Training the model
219 | #model.fit(X, y, shuffle=True, verbose=1, batch_size=BATCH_SIZE, validation_split=0.2, callbacks=callbacks_list, epochs=EPOCH)
220 | model.fit(X_train, y_train, batch_size=BATCH_SIZE, epochs=EPOCH, verbose=1, callbacks=callbacks, validation_data=(X_val, y_val), shuffle=True,initial_epoch=0)
221 |
222 |
--------------------------------------------------------------------------------
/model/model_test.py:
--------------------------------------------------------------------------------
1 | from keras.models import Sequential, Model
2 | from keras.layers import Lambda, Cropping2D, Conv2D, ELU, Flatten, Dense, Dropout, Activation, MaxPooling2D, Reshape, BatchNormalization, Input, Dense, merge
3 | from keras.preprocessing.image import ImageDataGenerator, random_shift
4 | from keras.optimizers import Adam, RMSprop
5 | from keras.callbacks import EarlyStopping, ModelCheckpoint
6 | import random
7 | import os
8 | import cv2
9 | import numpy as np
10 | import pandas as pd
11 | from sklearn.utils import shuffle
12 | from sklearn.model_selection import train_test_split
13 | import csv
14 |
15 | class ModelClass:
16 |
17 | # Paths
18 | PATH_TO_CSV = 'drive_data/training_data/drive_data.csv'
19 |
20 | # Shape
21 | INPUT_SHAPE = (240, 320, 3) #(Height, Width, Depth)
22 | RESIZE_SHAPE = (160,120) #(Width, Height)
23 | NEW_SHAPE = (120, 160, 3) #(Height, Width, Depth)
24 | LEARNING_PARAMETER = 0.0001 #.001
25 |
26 | # Get data from csv
27 | def get_csv(self):
28 | image_paths = []
29 | angles = []
30 |
31 | # Import driving data from csv
32 | with open(self.PATH_TO_CSV, newline='') as f:
33 | driving_data = list(csv.reader(f, skipinitialspace=True, delimiter=',', quoting=csv.QUOTE_NONE))
34 | data = []
35 | for row in driving_data[1:]:
36 | if len(row) > 0:
37 | data.append(row)
38 | straight_count = 0
39 | not_considered_straight_count = 0
40 | for row in data:
41 | if abs(float(row[1])) < 0.01:
42 | straight_count += 1
43 | if straight_count > (len(data) * .5):
44 | if abs(float(row[1])) < 0.01:
45 | not_considered_straight_count +=1
46 | continue
47 | image_paths.append(row[0])
48 | angles.append(float(row[1]))
49 | print("Total files: {}".format(len(data)))
50 | print("Total straight count: {}".format(straight_count))
51 | print("Not considered stright count: {}".format(not_considered_straight_count))
52 |
53 | return image_paths, angles
54 |
55 |
56 | # Flipping the images
57 | def flip_img_angle(self, image, angle):
58 | image = cv2.flip(image, 1)
59 | angle *= -1.0
60 |
61 | return image, angle
62 |
63 | def linear_bin(self, value_to_bin):
64 | value_to_bin = value_to_bin + 1
65 | binned_value = round(value_to_bin / (2.0 / 14.0))
66 |
67 | return int(binned_value)
68 |
69 | def bin_matrix(self, matrix_to_bin):
70 | binned_matrix = []
71 | for value_to_bin in matrix_to_bin:
72 | temp_bin = np.zeros(15)
73 | temp_bin[self.linear_bin(value_to_bin)] = 1
74 | binned_matrix.append(temp_bin)
75 |
76 | return np.array(binned_matrix)
77 |
78 |
79 | # Getting brightnessed image
80 | def brightnessed_img(self, image):
81 | image = cv2.cvtColor(image, cv2.COLOR_RGB2HSV)
82 | random_bright = .25 + np.random.uniform()
83 | #random_bright = .50 + np.random.uniform(low=0.0, high=.50)
84 | image[:,:,2] = image[:,:,2] * random_bright
85 | image = cv2.cvtColor(image, cv2.COLOR_HSV2RGB)
86 |
87 | #Convert to YUV color space (as nVidia paper suggests)
88 | image = cv2.cvtColor(image, cv2.COLOR_RGB2YUV)
89 | return image
90 |
91 | def generate_training_data(self, image_paths, angles, batch_size=128, validation_flag=False):
92 | '''
93 | method for the model training data generator to load, process, and distort images, then yield them to the
94 | model. if 'validation_flag' is true the image is not distorted. also flips images with turning angle magnitudes of greater than 0.33, as to give more weight to them and mitigate bias toward low and zero turning angles
95 | '''
96 | image_paths, angles = shuffle(image_paths, angles)
97 | X,y = ([],[])
98 | while True:
99 | for i in range(len(angles)):
100 | image = cv2.imread(image_paths[i])
101 | image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
102 | image = cv2.resize(image, self.RESIZE_SHAPE, interpolation=cv2.INTER_AREA)
103 | angle = angles[i]
104 | if not validation_flag:
105 | if random.randrange(3) == 1 and abs(angle) > 0:
106 | image, angle = self.flip_img_angle(image, angle)
107 | image = self.brightnessed_img(image)
108 |
109 | X.append(image)
110 | y.append(angle)
111 |
112 | if len(X) == batch_size:
113 | y = self.bin_matrix(y)
114 | yield (np.array(X), np.array(y))
115 | X, y = ([],[])
116 | image_paths, angles = shuffle(image_paths, angles)
117 |
118 | # Creating the model
119 | def get_model(self):
120 | img_in = Input(shape=self.NEW_SHAPE, name='img_in')
121 | x = img_in
122 | x = Lambda(lambda x: x/255.-0.5,input_shape=self.NEW_SHAPE)(x)
123 | x = Cropping2D(cropping=((40, 0), (0, 0)))(x)
124 | x = Conv2D(24, (5,5), strides=(2,2), activation='relu')(x)
125 | #x = Dropout(.1)(x)
126 | x = Conv2D(32, (5,5), strides=(2,2), activation='relu')(x)
127 | #x = Dropout(.1)(x)
128 | x = Conv2D(64, (5,5), strides=(2,2), activation='relu')(x)
129 | #x = Dropout(.1)(x)
130 | x = Conv2D(64, (3,3), strides=(2,2), activation='relu')(x)
131 | #x = Dropout(.1)(x)
132 | x = Conv2D(64, (3,3), strides=(1,1), activation='relu')(x)
133 |
134 | x = Flatten(name='flattened')(x)
135 | #x = Dropout(.1)(x)
136 | x = Dense(100, activation='relu')(x)
137 | x = Dropout(.1)(x)
138 | x = Dense(50, activation='relu')(x)
139 | x = Dropout(.1)(x)
140 |
141 | #categorical output of the angle
142 | angle_out = Dense(15, activation='softmax', name='angle_out')(x)
143 |
144 | #continous output of throttle
145 | #throttle_out = Dense(1, activation='relu', name='throttle_out')(x)
146 |
147 | model = Model(inputs=[img_in], outputs=[angle_out])
148 | #adam = Adam(lr=self.LEARNING_PARAMETER)
149 | rmsprop = RMSprop(lr=self.LEARNING_PARAMETER)
150 | model.compile(optimizer=rmsprop, loss={'angle_out': 'categorical_crossentropy'}, metrics=['accuracy'])
151 |
152 | return model
153 |
154 |
155 | # Hyperparameteres
156 | BATCH_SIZE = 128
157 | EPOCH = 100
158 |
159 | modelClass = ModelClass()
160 |
161 | # Getting data from CSV
162 | image_paths, angles = modelClass.get_csv()
163 |
164 | # Training and Validation data
165 | X_train, X_val, y_train, y_val = train_test_split(image_paths, angles, test_size=0.2, shuffle=True)
166 |
167 | print("Training sample: {}".format(len(X_train)))
168 | print("Validation sample: {}".format(len(X_val)))
169 |
170 | # initialize generators
171 | train_gen = modelClass.generate_training_data(X_train, y_train, validation_flag=False, batch_size=BATCH_SIZE)
172 | val_gen = modelClass.generate_training_data(X_val, y_val, validation_flag=True, batch_size=BATCH_SIZE)
173 |
174 | steps_per_epoch = int(len(X_train)/BATCH_SIZE)
175 | validation_steps = int(len(X_val)/BATCH_SIZE)
176 |
177 | # Model using Keras
178 | model = modelClass.get_model()
179 |
180 | # Set callback functions to early stop training and save the best model so far
181 | callbacks = [EarlyStopping(monitor='val_loss', min_delta=.0001, patience=25, mode='auto'),
182 | ModelCheckpoint(filepath='./model.h5', monitor='val_loss', save_best_only=True, verbose=1, mode='min')]
183 |
184 | # Training the model
185 | #model.fit(X, y, shuffle=True, verbose=1, batch_size=BATCH_SIZE, validation_split=0.2, callbacks=callbacks_list, epochs=EPOCH)
186 | model.fit_generator(train_gen, steps_per_epoch=steps_per_epoch, epochs=EPOCH, verbose=1, callbacks=callbacks, validation_data=val_gen, validation_steps=validation_steps)
187 |
188 |
--------------------------------------------------------------------------------
/model/requirement.yml:
--------------------------------------------------------------------------------
1 | name: image_processing_node
2 | channels:
3 | - menpo
4 | - defaults
5 | dependencies:
6 | - ca-certificates=2017.08.26=h94faf87_0
7 | - certifi=2018.1.18=py35_0
8 | - colorama=0.3.9=py35h32a752f_0
9 | - decorator=4.2.1=py35_0
10 | - entrypoints=0.2.3=py35hb91ced9_2
11 | - h5py=2.7.1=py35hb2c3add_0
12 | - hdf5=1.10.1=h98b8871_1
13 | - html5lib=1.0.1=py35h047fa9f_0
14 | - icc_rt=2017.0.4=h97af966_0
15 | - icu=58.2=ha66f8fd_1
16 | - intel-openmp=2018.0.0=hd92c6cd_8
17 | - ipython_genutils=0.2.0=py35ha709e79_0
18 | - jedi=0.11.1=py35_0
19 | - jpeg=9b=hb83a4c4_2
20 | - libpng=1.6.34=h79bbb47_0
21 | - markupsafe=1.0=py35hc253e08_1
22 | - mistune=0.8.3=py35_0
23 | - mkl=2018.0.1=h2108138_4
24 | - numpy=1.14.0=py35h4a99626_1
25 | - openssl=1.0.2n=h74b6da3_0
26 | - pandoc=1.19.2.1=hb2460c7_1
27 | - pandocfilters=1.4.2=py35h978f723_1
28 | - parso=0.1.1=py35he39c48a_0
29 | - pickleshare=0.7.4=py35h2f9f535_0
30 | - pip=9.0.1=py35h691316f_4
31 | - python=3.5.2=0
32 | - python-dateutil=2.6.1=py35h6b299a3_1
33 | - pywinpty=0.5=py35h6538335_1
34 | - pyzmq=16.0.3=py35h1861011_0
35 | - qt=5.6.2=vc14h6f8c307_12
36 | - send2trash=1.4.2=py35_0
37 | - setuptools=38.4.0=py35_0
38 | - simplegeneric=0.8.1=py35h6406082_0
39 | - sip=4.18.1=py35h01cbaa7_2
40 | - six=1.11.0=py35hc1da2df_1
41 | - sqlite=3.22.0=h9d3ae62_0
42 | - terminado=0.8.1=py35_1
43 | - testpath=0.3.1=py35h06cf69e_0
44 | - tornado=4.5.3=py35_0
45 | - vc=14=h0510ff6_3
46 | - vs2015_runtime=14.0.25123=3
47 | - wcwidth=0.1.7=py35h6e80d8a_0
48 | - webencodings=0.5.1=py35h5d527fb_1
49 | - wheel=0.30.0=py35h38a90bc_1
50 | - win_unicode_console=0.5=py35h56988b5_0
51 | - wincertstore=0.2=py35hfebbdb8_0
52 | - winpty=0.4.3=4
53 | - zlib=1.2.11=h8395fce_2
54 | - opencv3=3.1.0=py35_0
55 | - pip:
56 | - absl-py==0.1.10
57 | - bleach==1.5.0
58 | - cycler==0.10.0
59 | - futures==3.1.1
60 | - ipykernel==4.8.0
61 | - ipython==6.2.1
62 | - ipython-genutils==0.2.0
63 | - ipywidgets==7.1.1
64 | - jinja2==2.10
65 | - jsonschema==2.6.0
66 | - jupyter==1.0.0
67 | - jupyter-client==5.2.2
68 | - jupyter-console==5.2.0
69 | - jupyter-core==4.4.0
70 | - keras==2.1.2
71 | - markdown==2.6.11
72 | - matplotlib==2.1.2
73 | - nbconvert==5.3.1
74 | - nbformat==4.4.0
75 | - notebook==5.4.0
76 | - pandas==0.22.0
77 | - prompt-toolkit==1.0.15
78 | - protobuf==3.5.1
79 | - pygments==2.2.0
80 | - pyparsing==2.2.0
81 | - pytz==2017.3
82 | - pyyaml==3.12
83 | - qtconsole==4.3.1
84 | - scikit-learn==0.19.1
85 | - scipy==1.0.0
86 | - sklearn==0.0
87 | - tensorflow-gpu==1.5.0
88 | - tensorflow-tensorboard==1.5.0
89 | - traitlets==4.3.2
90 | - werkzeug==0.14.1
91 | - widgetsnbextension==3.1.3
92 | - win-unicode-console==0.5
93 | prefix: C:\Users\Dhanoop\Miniconda3\envs\image_processing_node
94 |
95 |
--------------------------------------------------------------------------------
/model/test.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 |
3 | import cv2
4 | import numpy as np
5 | import tensorflow as tf
6 | import h5py
7 | from keras.models import load_model
8 | from random import uniform
9 | import sys
10 | import os
11 | from keras.utils import to_categorical
12 |
13 | def linear_unbin(value_to_unbin):
14 | unbinned_value = value_to_unbin * (2.0 / 14.0) - 1
15 |
16 | return unbinned_value
17 |
18 | def unbin_matrix(matrix_to_unbin):
19 | unbinned_matrix=[]
20 |
21 | for value_to_unbin in matrix_to_unbin:
22 | unbinned_value = np.argmax(value_to_unbin)
23 | unbinned_value = linear_unbin(unbinned_value)
24 | unbinned_matrix.append(unbinned_value)
25 |
26 | return np.array(unbinned_matrix)
27 |
28 | def linear_unbin1(arr):
29 | b = np.argmax(arr)
30 | a = b *(2/14) - 1
31 | return a
32 |
33 |
34 | def normalize(image):
35 | """
36 | Returns a normalized image with feature values from -1.0 to 1.0.
37 | :param image: Image represented as a numpy array.
38 | """
39 | return image / 127.5 - 1.
40 |
41 |
42 | '''
43 | images = []
44 | model = load_model("model.h5")
45 | print("image_1518037766438")
46 | last_image1 = cv2.imread('image_1518037766438.jpg',cv2.IMREAD_COLOR)
47 | last_image1 = cv2.resize(last_image1, (160, 120), interpolation=cv2.INTER_AREA)
48 | images.append(np.asarray(last_image1))
49 | value = model.predict(np.array(images), batch_size=1)
50 | print(value)
51 | print(unbin_matrix(value)[0])
52 | images = []
53 | print("image_1518074268596")
54 | last_image2 = cv2.imread('image_1518074268596.jpg',cv2.IMREAD_COLOR)
55 | last_image2 = cv2.resize(last_image2, (160,120), interpolation=cv2.INTER_AREA)
56 | images.append(np.asarray(last_image2))
57 | value = model.predict(np.array(images), batch_size=1)
58 | print(value)
59 | print(unbin_matrix(value)[0])
60 | images = []
61 | print("image_1518507584011")
62 | last_image3 = cv2.imread('image_1518507584011.jpg',cv2.IMREAD_COLOR)
63 | #last_image3 = last_image3[120:,:]
64 | last_image3 = cv2.resize(last_image3, (160,120), interpolation=cv2.INTER_AREA)
65 | images.append(np.asarray(last_image3))
66 | value = model.predict(np.array(images), batch_size=1)
67 | print(value)
68 | print(unbin_matrix(value)[0])
69 | images = []
70 | print("image_1518841302776")
71 | last_image4 = cv2.imread('image_1518841302776.jpg',cv2.IMREAD_COLOR)
72 | last_image4 = cv2.resize(last_image4, (160,120), interpolation=cv2.INTER_AREA)
73 | images.append(np.asarray(last_image4))
74 | value = model.predict(np.array(images), batch_size=1)
75 | print(value)
76 | print(unbin_matrix(value)[0])
77 | #last_image5 = cv2.imread('image_1518507584011.jpg',cv2.IMREAD_COLOR)
78 | #last_image5 = last_image5[120:,:]
79 | #last_image5 = cv2.resize(last_image5, (320,120), interpolation=cv2.INTER_AREA)
80 | #images.append(np.asarray(last_image5))
81 |
82 | #last_image6 = cv2.imread('image_1518507587784.jpg',cv2.IMREAD_COLOR)
83 | #last_image6 = last_image6[120:,:]
84 | #images.append(np.asarray(last_image6))
85 |
86 | #value = model.predict(np.array(images), batch_size=1)
87 | #steering_angle = linear_unbin(value)
88 | #print(steering_angle)
89 | #print(value)
90 |
91 | '''
92 | model = load_model("model.h5")
93 | path = 'test_model_images1'
94 | for filename in os.listdir(path):
95 | print(filename)
96 | images = []
97 | last_image1 = cv2.imread(path+'/'+filename,cv2.IMREAD_COLOR)
98 | last_image1 = cv2.resize(last_image1, (160, 120), interpolation=cv2.INTER_AREA)
99 | images.append(np.asarray(last_image1))
100 | value = model.predict(np.array(images), batch_size=1)
101 | #print(unbin_matrix(value)[0])
102 | print(linear_unbin1(value))
103 | #print(value.argmax(1))
104 |
105 | print("_______________________________________________")
106 |
107 | path = 'test_model_images2'
108 | for filename in os.listdir(path):
109 | print(filename)
110 | images = []
111 | last_image1 = cv2.imread(path+'/'+filename,cv2.IMREAD_COLOR)
112 | last_image1 = cv2.resize(last_image1, (160, 120), interpolation=cv2.INTER_AREA)
113 | images.append(np.asarray(last_image1))
114 | value = model.predict(np.array(images), batch_size=1)
115 | #print(unbin_matrix(value)[0])
116 | print(linear_unbin1(value))
117 | #print(value.argmax(1))
118 |
119 | print("_______________________________________________")
120 |
121 | path = 'test_model_images3'
122 | for filename in os.listdir(path):
123 | print(filename)
124 | images = []
125 | last_image1 = cv2.imread(path+'/'+filename,cv2.IMREAD_COLOR)
126 | last_image1 = cv2.resize(last_image1, (160, 120), interpolation=cv2.INTER_AREA)
127 | images.append(np.asarray(last_image1))
128 | value = model.predict(np.array(images), batch_size=1)
129 | print(linear_unbin1(value))
130 | #print(value)
131 | #print(value.argmax(1))
--------------------------------------------------------------------------------
/model/test_gpu.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 |
3 | import tensorflow as tf
4 |
5 | hello = tf.constant('Hello, TensorFlow!')
6 | sess = tf.Session()
7 | print(sess.run(hello))
8 | a = tf.constant(10)
9 | b = tf.constant(32)
10 | print(sess.run(a + b))
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959033420.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959033420.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959033468.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959033468.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959033515.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959033515.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959033551.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959033551.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959033557.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959033557.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959033615.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959033615.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959033648.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959033648.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959033698.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959033698.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959033732.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959033732.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959033759.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959033759.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959033776.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959033776.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959033792.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959033792.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959033814.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959033814.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959033846.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959033846.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959033875.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959033875.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959033916.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959033916.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959033967.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959033967.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959034002.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959034002.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959034018.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959034018.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959034041.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959034041.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959034090.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959034090.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959034110.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959034110.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959034149.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959034149.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959034177.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959034177.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959034216.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959034216.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959034259.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959034259.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959034298.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959034298.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959034332.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959034332.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959034365.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959034365.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959034440.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959034440.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959034447.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959034447.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959034514.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959034514.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959034578.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959034578.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959034600.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959034600.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959034612.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959034612.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959034632.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959034632.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959034666.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959034666.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959034675.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959034675.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959034697.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959034697.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959034713.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959034713.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959034761.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959034761.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959034796.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959034796.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959034883.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959034883.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959034912.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959034912.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959034934.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959034934.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959034941.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959034941.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959034968.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959034968.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959035000.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959035000.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959035058.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959035058.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959035067.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959035067.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959035085.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959035085.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959035112.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959035112.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959035147.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959035147.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959035182.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959035182.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959035206.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959035206.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959035242.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959035242.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959035282.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959035282.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959035309.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959035309.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959035335.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959035335.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959035368.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959035368.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959035406.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959035406.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959035474.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959035474.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959035507.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959035507.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959035559.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959035559.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959035572.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959035572.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959035582.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959035582.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959035611.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959035611.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959035641.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959035641.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959035690.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959035690.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959035739.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959035739.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959035775.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959035775.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959035828.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959035828.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959035862.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959035862.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959035891.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959035891.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959035903.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959035903.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959035925.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959035925.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959035940.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959035940.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959035974.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959035974.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959036008.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959036008.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959036040.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959036040.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959036073.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959036073.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959036114.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959036114.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959036142.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959036142.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959036176.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959036176.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959036217.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959036217.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959036250.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959036250.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959036275.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959036275.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959036317.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959036317.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959036339.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959036339.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959036371.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959036371.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959036425.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959036425.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959036449.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959036449.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959036498.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959036498.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959036549.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959036549.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959036577.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959036577.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959036603.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959036603.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959036626.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959036626.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959036654.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959036654.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959036681.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959036681.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959036722.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959036722.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959036751.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959036751.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959036797.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959036797.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959036830.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959036830.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959036843.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959036843.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959036908.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959036908.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959036916.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959036916.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959036961.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959036961.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959036983.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959036983.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959037014.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959037014.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959037124.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959037124.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959037195.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959037195.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959037205.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959037205.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959037235.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959037235.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959037265.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959037265.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959037315.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959037315.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959037346.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959037346.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959037393.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959037393.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959037448.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959037448.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959037488.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959037488.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959037543.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959037543.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959037565.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959037565.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959037606.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959037606.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959037642.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959037642.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959037672.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959037672.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959037700.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959037700.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959037755.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959037755.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959037775.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959037775.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959037812.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959037812.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959037865.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959037865.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959037919.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959037919.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959037952.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959037952.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959037968.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959037968.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959038003.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959038003.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959038034.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959038034.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959038052.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959038052.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959038169.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959038169.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959038176.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959038176.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959038203.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959038203.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959038223.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959038223.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959038257.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959038257.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959038360.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959038360.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959038389.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959038389.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959038416.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959038416.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959038438.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959038438.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959038468.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959038468.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959038484.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959038484.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959038507.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959038507.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959038535.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959038535.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959038563.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959038563.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959038589.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959038589.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959038619.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959038619.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959038639.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959038639.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959038668.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959038668.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959038695.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959038695.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959038718.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959038718.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959038745.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959038745.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959038768.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959038768.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959038783.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959038783.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959038807.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959038807.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959038840.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959038840.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959038905.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959038905.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959038913.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959038913.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959038947.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959038947.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959039024.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959039024.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959039037.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959039037.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959039052.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959039052.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959039108.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959039108.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959039136.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959039136.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959039160.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959039160.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959039179.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959039179.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959039215.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959039215.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959039246.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959039246.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959039283.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959039283.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959039315.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959039315.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959039348.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959039348.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959039376.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959039376.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959039412.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959039412.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959039450.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959039450.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959039485.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959039485.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959039521.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959039521.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959039543.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959039543.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959039573.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959039573.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959039655.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959039655.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959039672.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959039672.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959039722.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959039722.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959039736.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959039736.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959039767.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959039767.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959039793.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959039793.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959039833.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959039833.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959039861.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959039861.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959039885.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959039885.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959039913.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959039913.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959039939.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959039939.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959039978.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959039978.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959040012.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959040012.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959040038.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959040038.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959040068.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959040068.jpg
--------------------------------------------------------------------------------
/model/test_model_images1/image_1519959040111.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images1/image_1519959040111.jpg
--------------------------------------------------------------------------------
/model/test_model_images2/image_1518829402848.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images2/image_1518829402848.jpg
--------------------------------------------------------------------------------
/model/test_model_images2/image_1518829403029.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images2/image_1518829403029.jpg
--------------------------------------------------------------------------------
/model/test_model_images2/image_1518829403188.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images2/image_1518829403188.jpg
--------------------------------------------------------------------------------
/model/test_model_images2/image_1518829403360.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images2/image_1518829403360.jpg
--------------------------------------------------------------------------------
/model/test_model_images2/image_1518829403527.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images2/image_1518829403527.jpg
--------------------------------------------------------------------------------
/model/test_model_images2/image_1518829403721.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images2/image_1518829403721.jpg
--------------------------------------------------------------------------------
/model/test_model_images2/image_1518829403885.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images2/image_1518829403885.jpg
--------------------------------------------------------------------------------
/model/test_model_images2/image_1518829404075.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images2/image_1518829404075.jpg
--------------------------------------------------------------------------------
/model/test_model_images2/image_1518829404332.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images2/image_1518829404332.jpg
--------------------------------------------------------------------------------
/model/test_model_images2/image_1518829404546.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images2/image_1518829404546.jpg
--------------------------------------------------------------------------------
/model/test_model_images2/image_1518829404769.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images2/image_1518829404769.jpg
--------------------------------------------------------------------------------
/model/test_model_images2/image_1518829404955.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images2/image_1518829404955.jpg
--------------------------------------------------------------------------------
/model/test_model_images2/image_1518829405160.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images2/image_1518829405160.jpg
--------------------------------------------------------------------------------
/model/test_model_images2/image_1518829405358.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images2/image_1518829405358.jpg
--------------------------------------------------------------------------------
/model/test_model_images2/image_1518829405543.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images2/image_1518829405543.jpg
--------------------------------------------------------------------------------
/model/test_model_images2/image_1518829405764.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images2/image_1518829405764.jpg
--------------------------------------------------------------------------------
/model/test_model_images2/image_1518829405959.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images2/image_1518829405959.jpg
--------------------------------------------------------------------------------
/model/test_model_images2/image_1518829406250.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images2/image_1518829406250.jpg
--------------------------------------------------------------------------------
/model/test_model_images2/image_1518829406524.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images2/image_1518829406524.jpg
--------------------------------------------------------------------------------
/model/test_model_images2/image_1518829406719.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images2/image_1518829406719.jpg
--------------------------------------------------------------------------------
/model/test_model_images2/image_1518829406880.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images2/image_1518829406880.jpg
--------------------------------------------------------------------------------
/model/test_model_images2/image_1518829407178.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images2/image_1518829407178.jpg
--------------------------------------------------------------------------------
/model/test_model_images2/image_1518829407390.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images2/image_1518829407390.jpg
--------------------------------------------------------------------------------
/model/test_model_images2/image_1518829407586.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images2/image_1518829407586.jpg
--------------------------------------------------------------------------------
/model/test_model_images2/image_1518829407764.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images2/image_1518829407764.jpg
--------------------------------------------------------------------------------
/model/test_model_images2/image_1518829407959.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images2/image_1518829407959.jpg
--------------------------------------------------------------------------------
/model/test_model_images2/image_1518829408151.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images2/image_1518829408151.jpg
--------------------------------------------------------------------------------
/model/test_model_images2/image_1518829408381.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images2/image_1518829408381.jpg
--------------------------------------------------------------------------------
/model/test_model_images2/image_1518829408546.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images2/image_1518829408546.jpg
--------------------------------------------------------------------------------
/model/test_model_images2/image_1518829408689.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images2/image_1518829408689.jpg
--------------------------------------------------------------------------------
/model/test_model_images2/image_1518829408816.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images2/image_1518829408816.jpg
--------------------------------------------------------------------------------
/model/test_model_images2/image_1518829409043.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images2/image_1518829409043.jpg
--------------------------------------------------------------------------------
/model/test_model_images2/image_1518829409227.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images2/image_1518829409227.jpg
--------------------------------------------------------------------------------
/model/test_model_images2/image_1518829409445.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images2/image_1518829409445.jpg
--------------------------------------------------------------------------------
/model/test_model_images3/image_1518841305890.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images3/image_1518841305890.jpg
--------------------------------------------------------------------------------
/model/test_model_images3/image_1518841306005.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images3/image_1518841306005.jpg
--------------------------------------------------------------------------------
/model/test_model_images3/image_1518841306129.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images3/image_1518841306129.jpg
--------------------------------------------------------------------------------
/model/test_model_images3/image_1518841306291.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images3/image_1518841306291.jpg
--------------------------------------------------------------------------------
/model/test_model_images3/image_1518841306453.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images3/image_1518841306453.jpg
--------------------------------------------------------------------------------
/model/test_model_images3/image_1518841306582.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images3/image_1518841306582.jpg
--------------------------------------------------------------------------------
/model/test_model_images3/image_1518841306731.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images3/image_1518841306731.jpg
--------------------------------------------------------------------------------
/model/test_model_images3/image_1518841306869.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images3/image_1518841306869.jpg
--------------------------------------------------------------------------------
/model/test_model_images3/image_1518841307011.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images3/image_1518841307011.jpg
--------------------------------------------------------------------------------
/model/test_model_images3/image_1518841307134.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images3/image_1518841307134.jpg
--------------------------------------------------------------------------------
/model/test_model_images3/image_1518841307278.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images3/image_1518841307278.jpg
--------------------------------------------------------------------------------
/model/test_model_images3/image_1518841307427.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images3/image_1518841307427.jpg
--------------------------------------------------------------------------------
/model/test_model_images3/image_1518841307563.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images3/image_1518841307563.jpg
--------------------------------------------------------------------------------
/model/test_model_images3/image_1518841307698.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images3/image_1518841307698.jpg
--------------------------------------------------------------------------------
/model/test_model_images3/image_1518841307843.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images3/image_1518841307843.jpg
--------------------------------------------------------------------------------
/model/test_model_images3/image_1518841307978.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images3/image_1518841307978.jpg
--------------------------------------------------------------------------------
/model/test_model_images3/image_1518841308107.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images3/image_1518841308107.jpg
--------------------------------------------------------------------------------
/model/test_model_images3/image_1518841308261.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images3/image_1518841308261.jpg
--------------------------------------------------------------------------------
/model/test_model_images3/image_1518841308408.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images3/image_1518841308408.jpg
--------------------------------------------------------------------------------
/model/test_model_images3/image_1518841308544.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images3/image_1518841308544.jpg
--------------------------------------------------------------------------------
/model/test_model_images3/image_1518841308689.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images3/image_1518841308689.jpg
--------------------------------------------------------------------------------
/model/test_model_images3/image_1518841308829.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images3/image_1518841308829.jpg
--------------------------------------------------------------------------------
/model/test_model_images3/image_1518841308977.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images3/image_1518841308977.jpg
--------------------------------------------------------------------------------
/model/test_model_images3/image_1518841309112.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images3/image_1518841309112.jpg
--------------------------------------------------------------------------------
/model/test_model_images3/image_1518841309231.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images3/image_1518841309231.jpg
--------------------------------------------------------------------------------
/model/test_model_images3/image_1518841309360.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images3/image_1518841309360.jpg
--------------------------------------------------------------------------------
/model/test_model_images3/image_1518841309505.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images3/image_1518841309505.jpg
--------------------------------------------------------------------------------
/model/test_model_images3/image_1518841309649.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images3/image_1518841309649.jpg
--------------------------------------------------------------------------------
/model/test_model_images3/image_1518841309783.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images3/image_1518841309783.jpg
--------------------------------------------------------------------------------
/model/test_model_images3/image_1518841309934.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images3/image_1518841309934.jpg
--------------------------------------------------------------------------------
/model/test_model_images3/image_1518841310076.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images3/image_1518841310076.jpg
--------------------------------------------------------------------------------
/model/test_model_images3/image_1518841310231.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images3/image_1518841310231.jpg
--------------------------------------------------------------------------------
/model/test_model_images3/image_1518841310364.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images3/image_1518841310364.jpg
--------------------------------------------------------------------------------
/model/test_model_images3/image_1518841310493.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images3/image_1518841310493.jpg
--------------------------------------------------------------------------------
/model/test_model_images3/image_1518841310630.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images3/image_1518841310630.jpg
--------------------------------------------------------------------------------
/model/test_model_images3/image_1518841310750.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images3/image_1518841310750.jpg
--------------------------------------------------------------------------------
/model/test_model_images3/image_1518841310879.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images3/image_1518841310879.jpg
--------------------------------------------------------------------------------
/model/test_model_images3/image_1518841311014.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images3/image_1518841311014.jpg
--------------------------------------------------------------------------------
/model/test_model_images3/image_1518841311141.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images3/image_1518841311141.jpg
--------------------------------------------------------------------------------
/model/test_model_images3/image_1518841311267.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images3/image_1518841311267.jpg
--------------------------------------------------------------------------------
/model/test_model_images3/image_1518841311398.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images3/image_1518841311398.jpg
--------------------------------------------------------------------------------
/model/test_model_images3/image_1518841311543.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images3/image_1518841311543.jpg
--------------------------------------------------------------------------------
/model/test_model_images3/image_1518841311669.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images3/image_1518841311669.jpg
--------------------------------------------------------------------------------
/model/test_model_images3/image_1518841311789.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images3/image_1518841311789.jpg
--------------------------------------------------------------------------------
/model/test_model_images3/image_1518841311916.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images3/image_1518841311916.jpg
--------------------------------------------------------------------------------
/model/test_model_images3/image_1518841312045.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images3/image_1518841312045.jpg
--------------------------------------------------------------------------------
/model/test_model_images3/image_1518841312213.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images3/image_1518841312213.jpg
--------------------------------------------------------------------------------
/model/test_model_images3/image_1518841312313.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images3/image_1518841312313.jpg
--------------------------------------------------------------------------------
/model/test_model_images3/image_1518841312430.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images3/image_1518841312430.jpg
--------------------------------------------------------------------------------
/model/test_model_images3/image_1518841312546.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images3/image_1518841312546.jpg
--------------------------------------------------------------------------------
/model/test_model_images3/image_1518841312674.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images3/image_1518841312674.jpg
--------------------------------------------------------------------------------
/model/test_model_images3/image_1518841312804.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images3/image_1518841312804.jpg
--------------------------------------------------------------------------------
/model/test_model_images3/image_1518841312941.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images3/image_1518841312941.jpg
--------------------------------------------------------------------------------
/model/test_model_images3/image_1518841313079.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images3/image_1518841313079.jpg
--------------------------------------------------------------------------------
/model/test_model_images3/image_1518841313203.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images3/image_1518841313203.jpg
--------------------------------------------------------------------------------
/model/test_model_images3/image_1518841313327.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images3/image_1518841313327.jpg
--------------------------------------------------------------------------------
/model/test_model_images3/image_1518841313454.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images3/image_1518841313454.jpg
--------------------------------------------------------------------------------
/model/test_model_images3/image_1518841313571.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/test_model_images3/image_1518841313571.jpg
--------------------------------------------------------------------------------
/model/use_model/model_home.h5:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/use_model/model_home.h5
--------------------------------------------------------------------------------
/model/use_model/model_home_track1.h5:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dkarunakaran/robocar/74741ca07c8068d61dd05fe98600c6fd399eee4e/model/use_model/model_home_track1.h5
--------------------------------------------------------------------------------