├── 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 --------------------------------------------------------------------------------