donkeydrifter 0.1.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- LICENSES/MIT-donkeycar.txt +21 -0
- build/lib/LICENSES/MIT-donkeycar.txt +21 -0
- build/lib/build/lib/LICENSES/MIT-donkeycar.txt +21 -0
- build/lib/build/lib/build/lib/LICENSES/MIT-donkeycar.txt +21 -0
- build/lib/build/lib/build/lib/donkeycar/__init__.py +21 -0
- build/lib/build/lib/build/lib/donkeycar/_version.py +1 -0
- build/lib/build/lib/build/lib/donkeycar/benchmarks/tub.py +44 -0
- build/lib/build/lib/build/lib/donkeycar/benchmarks/tub_v2.py +40 -0
- build/lib/build/lib/build/lib/donkeycar/config.py +90 -0
- build/lib/build/lib/build/lib/donkeycar/contrib/__init__.py +0 -0
- build/lib/build/lib/build/lib/donkeycar/contrib/robohat/code-robocarstore.py +186 -0
- build/lib/build/lib/build/lib/donkeycar/contrib/robohat/code.py +188 -0
- build/lib/build/lib/build/lib/donkeycar/contrib/robohat/rear_light.py +44 -0
- build/lib/build/lib/build/lib/donkeycar/geom.py +37 -0
- build/lib/build/lib/build/lib/donkeycar/gym/__init__.py +0 -0
- build/lib/build/lib/build/lib/donkeycar/gym/gym_real.py +89 -0
- build/lib/build/lib/build/lib/donkeycar/gym/remote_controller.py +42 -0
- build/lib/build/lib/build/lib/donkeycar/la.py +623 -0
- build/lib/build/lib/build/lib/donkeycar/management/__init__.py +3 -0
- build/lib/build/lib/build/lib/donkeycar/management/base.py +1046 -0
- build/lib/build/lib/build/lib/donkeycar/management/data_migrator.py +160 -0
- build/lib/build/lib/build/lib/donkeycar/management/graph.py +189 -0
- build/lib/build/lib/build/lib/donkeycar/management/joystick_creator.py +584 -0
- build/lib/build/lib/build/lib/donkeycar/management/makemovie.py +321 -0
- build/lib/build/lib/build/lib/donkeycar/management/train_local.py +50 -0
- build/lib/build/lib/build/lib/donkeycar/management/train_online.py +887 -0
- build/lib/build/lib/build/lib/donkeycar/management/tub_web/base.html +44 -0
- build/lib/build/lib/build/lib/donkeycar/management/tub_web/tub.html +66 -0
- build/lib/build/lib/build/lib/donkeycar/management/tub_web/tubs.html +17 -0
- build/lib/build/lib/build/lib/donkeycar/management/tui.py +1420 -0
- build/lib/build/lib/build/lib/donkeycar/management/ui/__init__.py +0 -0
- build/lib/build/lib/build/lib/donkeycar/management/ui/car_screen.kv +154 -0
- build/lib/build/lib/build/lib/donkeycar/management/ui/car_screen.py +219 -0
- build/lib/build/lib/build/lib/donkeycar/management/ui/common.kv +303 -0
- build/lib/build/lib/build/lib/donkeycar/management/ui/common.py +376 -0
- build/lib/build/lib/build/lib/donkeycar/management/ui/pilot_screen.kv +240 -0
- build/lib/build/lib/build/lib/donkeycar/management/ui/pilot_screen.py +386 -0
- build/lib/build/lib/build/lib/donkeycar/management/ui/rc_file_handler.py +92 -0
- build/lib/build/lib/build/lib/donkeycar/management/ui/train_screen.kv +295 -0
- build/lib/build/lib/build/lib/donkeycar/management/ui/train_screen.py +325 -0
- build/lib/build/lib/build/lib/donkeycar/management/ui/tub_screen.kv +174 -0
- build/lib/build/lib/build/lib/donkeycar/management/ui/tub_screen.py +327 -0
- build/lib/build/lib/build/lib/donkeycar/management/ui/ui.kv +78 -0
- build/lib/build/lib/build/lib/donkeycar/management/ui/ui.py +68 -0
- build/lib/build/lib/build/lib/donkeycar/memory.py +61 -0
- build/lib/build/lib/build/lib/donkeycar/parts/__init__.py +0 -0
- build/lib/build/lib/build/lib/donkeycar/parts/actuator.py +1430 -0
- build/lib/build/lib/build/lib/donkeycar/parts/behavior.py +45 -0
- build/lib/build/lib/build/lib/donkeycar/parts/camera.py +387 -0
- build/lib/build/lib/build/lib/donkeycar/parts/controller.py +1750 -0
- build/lib/build/lib/build/lib/donkeycar/parts/coral.py +93 -0
- build/lib/build/lib/build/lib/donkeycar/parts/cv.py +891 -0
- build/lib/build/lib/build/lib/donkeycar/parts/datastore.py +572 -0
- build/lib/build/lib/build/lib/donkeycar/parts/datastore_v2.py +496 -0
- build/lib/build/lib/build/lib/donkeycar/parts/dgym.py +101 -0
- build/lib/build/lib/build/lib/donkeycar/parts/encoder.py +201 -0
- build/lib/build/lib/build/lib/donkeycar/parts/explode.py +26 -0
- build/lib/build/lib/build/lib/donkeycar/parts/fast_stretch.py +97 -0
- build/lib/build/lib/build/lib/donkeycar/parts/fastai.py +278 -0
- build/lib/build/lib/build/lib/donkeycar/parts/file_watcher.py +28 -0
- build/lib/build/lib/build/lib/donkeycar/parts/fps.py +46 -0
- build/lib/build/lib/build/lib/donkeycar/parts/gps.py +685 -0
- build/lib/build/lib/build/lib/donkeycar/parts/graph.py +43 -0
- build/lib/build/lib/build/lib/donkeycar/parts/image.py +110 -0
- build/lib/build/lib/build/lib/donkeycar/parts/image_transformations.py +574 -0
- build/lib/build/lib/build/lib/donkeycar/parts/imu.py +111 -0
- build/lib/build/lib/build/lib/donkeycar/parts/interpreter.py +365 -0
- build/lib/build/lib/build/lib/donkeycar/parts/keras.py +1133 -0
- build/lib/build/lib/build/lib/donkeycar/parts/kinematics.py +677 -0
- build/lib/build/lib/build/lib/donkeycar/parts/launch.py +48 -0
- build/lib/build/lib/build/lib/donkeycar/parts/led_status.py +145 -0
- build/lib/build/lib/build/lib/donkeycar/parts/leopard_imaging.py +57 -0
- build/lib/build/lib/build/lib/donkeycar/parts/lidar.py +922 -0
- build/lib/build/lib/build/lib/donkeycar/parts/line_follower.py +138 -0
- build/lib/build/lib/build/lib/donkeycar/parts/logger.py +34 -0
- build/lib/build/lib/build/lib/donkeycar/parts/network.py +492 -0
- build/lib/build/lib/build/lib/donkeycar/parts/oak_d.py +381 -0
- build/lib/build/lib/build/lib/donkeycar/parts/object_detector/stop_sign_detector.py +131 -0
- build/lib/build/lib/build/lib/donkeycar/parts/odometer.py +63 -0
- build/lib/build/lib/build/lib/donkeycar/parts/oled.py +161 -0
- build/lib/build/lib/build/lib/donkeycar/parts/path.py +458 -0
- build/lib/build/lib/build/lib/donkeycar/parts/perfmon.py +54 -0
- build/lib/build/lib/build/lib/donkeycar/parts/pigpio_enc.py +92 -0
- build/lib/build/lib/build/lib/donkeycar/parts/pins.py +1065 -0
- build/lib/build/lib/build/lib/donkeycar/parts/pipe.py +8 -0
- build/lib/build/lib/build/lib/donkeycar/parts/pose.py +262 -0
- build/lib/build/lib/build/lib/donkeycar/parts/pytorch/ResNet18.py +105 -0
- build/lib/build/lib/build/lib/donkeycar/parts/pytorch/torch_data.py +161 -0
- build/lib/build/lib/build/lib/donkeycar/parts/pytorch/torch_train.py +60 -0
- build/lib/build/lib/build/lib/donkeycar/parts/pytorch/torch_utils.py +31 -0
- build/lib/build/lib/build/lib/donkeycar/parts/realsense2.py +131 -0
- build/lib/build/lib/build/lib/donkeycar/parts/realsense435i.py +317 -0
- build/lib/build/lib/build/lib/donkeycar/parts/robohat.py +259 -0
- build/lib/build/lib/build/lib/donkeycar/parts/ros.py +44 -0
- build/lib/build/lib/build/lib/donkeycar/parts/salient.py +106 -0
- build/lib/build/lib/build/lib/donkeycar/parts/serial_controller.py +46 -0
- build/lib/build/lib/build/lib/donkeycar/parts/serial_port.py +330 -0
- build/lib/build/lib/build/lib/donkeycar/parts/simulation.py +73 -0
- build/lib/build/lib/build/lib/donkeycar/parts/sombrero.py +27 -0
- build/lib/build/lib/build/lib/donkeycar/parts/tachometer.py +732 -0
- build/lib/build/lib/build/lib/donkeycar/parts/teensy.py +85 -0
- build/lib/build/lib/build/lib/donkeycar/parts/telemetry.py +185 -0
- build/lib/build/lib/build/lib/donkeycar/parts/text_writer.py +125 -0
- build/lib/build/lib/build/lib/donkeycar/parts/tfmini.py +82 -0
- build/lib/build/lib/build/lib/donkeycar/parts/throttle_filter.py +28 -0
- build/lib/build/lib/build/lib/donkeycar/parts/transform.py +182 -0
- build/lib/build/lib/build/lib/donkeycar/parts/tub_v2.py +176 -0
- build/lib/build/lib/build/lib/donkeycar/parts/velocity.py +127 -0
- build/lib/build/lib/build/lib/donkeycar/parts/voice_control/alexa.py +77 -0
- build/lib/build/lib/build/lib/donkeycar/parts/web_controller/templates/base.html +78 -0
- build/lib/build/lib/build/lib/donkeycar/parts/web_controller/templates/base_fpv.html +76 -0
- build/lib/build/lib/build/lib/donkeycar/parts/web_controller/templates/calibrate.html +246 -0
- build/lib/build/lib/build/lib/donkeycar/parts/web_controller/templates/home.html +26 -0
- build/lib/build/lib/build/lib/donkeycar/parts/web_controller/templates/pilots_list.html +23 -0
- build/lib/build/lib/build/lib/donkeycar/parts/web_controller/templates/session.html +156 -0
- build/lib/build/lib/build/lib/donkeycar/parts/web_controller/templates/session_list.html +23 -0
- build/lib/build/lib/build/lib/donkeycar/parts/web_controller/templates/vehicle.html +284 -0
- build/lib/build/lib/build/lib/donkeycar/parts/web_controller/templates/vehicle_list.html +23 -0
- build/lib/build/lib/build/lib/donkeycar/parts/web_controller/templates/wsTest.html +65 -0
- build/lib/build/lib/build/lib/donkeycar/parts/web_controller/web.py +627 -0
- build/lib/build/lib/build/lib/donkeycar/pipeline/__init__.py +1 -0
- build/lib/build/lib/build/lib/donkeycar/pipeline/augmentations.py +48 -0
- build/lib/build/lib/build/lib/donkeycar/pipeline/database.py +149 -0
- build/lib/build/lib/build/lib/donkeycar/pipeline/sequence.py +174 -0
- build/lib/build/lib/build/lib/donkeycar/pipeline/training.py +229 -0
- build/lib/build/lib/build/lib/donkeycar/pipeline/types.py +229 -0
- build/lib/build/lib/build/lib/donkeycar/templates/arduino_drive.py +67 -0
- build/lib/build/lib/build/lib/donkeycar/templates/basic.py +247 -0
- build/lib/build/lib/build/lib/donkeycar/templates/calibrate.py +133 -0
- build/lib/build/lib/build/lib/donkeycar/templates/cfg_arduino_drive.py +48 -0
- build/lib/build/lib/build/lib/donkeycar/templates/cfg_basic.py +221 -0
- build/lib/build/lib/build/lib/donkeycar/templates/cfg_complete.py +815 -0
- build/lib/build/lib/build/lib/donkeycar/templates/cfg_cv_control.py +660 -0
- build/lib/build/lib/build/lib/donkeycar/templates/cfg_path_follow.py +719 -0
- build/lib/build/lib/build/lib/donkeycar/templates/cfg_simulator.py +329 -0
- build/lib/build/lib/build/lib/donkeycar/templates/cfg_square.py +83 -0
- build/lib/build/lib/build/lib/donkeycar/templates/complete.py +1358 -0
- build/lib/build/lib/build/lib/donkeycar/templates/cv_control.py +260 -0
- build/lib/build/lib/build/lib/donkeycar/templates/just_drive.py +71 -0
- build/lib/build/lib/build/lib/donkeycar/templates/myconfig.py +128 -0
- build/lib/build/lib/build/lib/donkeycar/templates/path_follow.py +494 -0
- build/lib/build/lib/build/lib/donkeycar/templates/simulator.py +438 -0
- build/lib/build/lib/build/lib/donkeycar/templates/square.py +168 -0
- build/lib/build/lib/build/lib/donkeycar/templates/train.py +77 -0
- build/lib/build/lib/build/lib/donkeycar/tests/__init__.py +1 -0
- build/lib/build/lib/build/lib/donkeycar/tests/pytest.ini +8 -0
- build/lib/build/lib/build/lib/donkeycar/tests/setup.py +84 -0
- build/lib/build/lib/build/lib/donkeycar/tests/test_actuator.py +53 -0
- build/lib/build/lib/build/lib/donkeycar/tests/test_catalog_v2.py +44 -0
- build/lib/build/lib/build/lib/donkeycar/tests/test_circular_buffer.py +124 -0
- build/lib/build/lib/build/lib/donkeycar/tests/test_cli_branding.py +31 -0
- build/lib/build/lib/build/lib/donkeycar/tests/test_controller.py +33 -0
- build/lib/build/lib/build/lib/donkeycar/tests/test_data_migrator.py +154 -0
- build/lib/build/lib/build/lib/donkeycar/tests/test_datastore_v2.py +94 -0
- build/lib/build/lib/build/lib/donkeycar/tests/test_import_side_effects.py +106 -0
- build/lib/build/lib/build/lib/donkeycar/tests/test_keras.py +85 -0
- build/lib/build/lib/build/lib/donkeycar/tests/test_kinematics.py +743 -0
- build/lib/build/lib/build/lib/donkeycar/tests/test_launch.py +91 -0
- build/lib/build/lib/build/lib/donkeycar/tests/test_lidar.py +97 -0
- build/lib/build/lib/build/lib/donkeycar/tests/test_memory.py +68 -0
- build/lib/build/lib/build/lib/donkeycar/tests/test_odometer.py +29 -0
- build/lib/build/lib/build/lib/donkeycar/tests/test_parts.py +1 -0
- build/lib/build/lib/build/lib/donkeycar/tests/test_path.py +290 -0
- build/lib/build/lib/build/lib/donkeycar/tests/test_pipeline.py +168 -0
- build/lib/build/lib/build/lib/donkeycar/tests/test_project_metadata.py +136 -0
- build/lib/build/lib/build/lib/donkeycar/tests/test_robohat.py +247 -0
- build/lib/build/lib/build/lib/donkeycar/tests/test_scripts.py +83 -0
- build/lib/build/lib/build/lib/donkeycar/tests/test_seekable_v2.py +79 -0
- build/lib/build/lib/build/lib/donkeycar/tests/test_tachometer.py +152 -0
- build/lib/build/lib/build/lib/donkeycar/tests/test_telemetry.py +99 -0
- build/lib/build/lib/build/lib/donkeycar/tests/test_template.py +80 -0
- build/lib/build/lib/build/lib/donkeycar/tests/test_torch.py +130 -0
- build/lib/build/lib/build/lib/donkeycar/tests/test_train.py +236 -0
- build/lib/build/lib/build/lib/donkeycar/tests/test_tub_v2.py +76 -0
- build/lib/build/lib/build/lib/donkeycar/tests/test_tubwriter.py +43 -0
- build/lib/build/lib/build/lib/donkeycar/tests/test_tui_backup_restore.py +54 -0
- build/lib/build/lib/build/lib/donkeycar/tests/test_tui_clear_data.py +63 -0
- build/lib/build/lib/build/lib/donkeycar/tests/test_tui_restore.py +76 -0
- build/lib/build/lib/build/lib/donkeycar/tests/test_util_data.py +160 -0
- build/lib/build/lib/build/lib/donkeycar/tests/test_vehicle.py +57 -0
- build/lib/build/lib/build/lib/donkeycar/tests/test_web_controller.py +32 -0
- build/lib/build/lib/build/lib/donkeycar/tests/test_web_socket.py +184 -0
- build/lib/build/lib/build/lib/donkeycar/tests/test_web_ui_branding.py +29 -0
- build/lib/build/lib/build/lib/donkeycar/utilities/TrackSpeedPlanner/static/index.html +734 -0
- build/lib/build/lib/build/lib/donkeycar/utilities/TrackSpeedPlanner/trackeditor.py +404 -0
- build/lib/build/lib/build/lib/donkeycar/utilities/__init__.py +0 -0
- build/lib/build/lib/build/lib/donkeycar/utilities/circular_buffer.py +143 -0
- build/lib/build/lib/build/lib/donkeycar/utilities/deprecated.py +80 -0
- build/lib/build/lib/build/lib/donkeycar/utilities/dk_platform.py +34 -0
- build/lib/build/lib/build/lib/donkeycar/utils.py +622 -0
- build/lib/build/lib/build/lib/donkeycar/vehicle.py +228 -0
- build/lib/build/lib/build/lib/donkeydrifter/__init__.py +57 -0
- build/lib/build/lib/build/lib/parts/drive_api_bridge.py +176 -0
- build/lib/build/lib/build/lib/scripts/convert_to_tflite.py +40 -0
- build/lib/build/lib/build/lib/scripts/convert_to_tub_v2.py +87 -0
- build/lib/build/lib/build/lib/scripts/freeze_model.py +52 -0
- build/lib/build/lib/build/lib/scripts/graph_listener.py +56 -0
- build/lib/build/lib/build/lib/scripts/hsv_picker.py +283 -0
- build/lib/build/lib/build/lib/scripts/migrate_model_names.py +94 -0
- build/lib/build/lib/build/lib/scripts/multi_train.py +59 -0
- build/lib/build/lib/build/lib/scripts/pigpio_donkey.py +74 -0
- build/lib/build/lib/build/lib/scripts/preview_augumentations.py +55 -0
- build/lib/build/lib/build/lib/scripts/profile.py +45 -0
- build/lib/build/lib/build/lib/scripts/profile_coral.py +27 -0
- build/lib/build/lib/build/lib/scripts/remote_cam_view.py +55 -0
- build/lib/build/lib/build/lib/scripts/remote_cam_view_tcp.py +45 -0
- build/lib/build/lib/build/lib/scripts/salient_vis_listener.py +45 -0
- build/lib/build/lib/build/lib/scripts/tflite_convert.py +19 -0
- build/lib/build/lib/build/lib/scripts/tflite_profile.py +48 -0
- build/lib/build/lib/build/lib/tests/test_migration_integration.py +64 -0
- build/lib/build/lib/build/lib/tests/test_model_naming_refactor.py +148 -0
- build/lib/build/lib/build/lib/tests/test_online_trainer_workspace.py +173 -0
- build/lib/build/lib/build/lib/tests/test_restore_logic.py +97 -0
- build/lib/build/lib/build/lib/web_ui/backend/connector_engine.py +230 -0
- build/lib/build/lib/build/lib/web_ui/backend/main.py +35 -0
- build/lib/build/lib/build/lib/web_ui/backend/remote_car_client.py +213 -0
- build/lib/build/lib/build/lib/web_ui/backend/requirements.txt +6 -0
- build/lib/build/lib/build/lib/web_ui/backend/routers/__init__.py +0 -0
- build/lib/build/lib/build/lib/web_ui/backend/routers/arena.py +447 -0
- build/lib/build/lib/build/lib/web_ui/backend/routers/config.py +198 -0
- build/lib/build/lib/build/lib/web_ui/backend/routers/connector.py +249 -0
- build/lib/build/lib/build/lib/web_ui/backend/routers/drive.py +361 -0
- build/lib/build/lib/build/lib/web_ui/backend/routers/trainer.py +341 -0
- build/lib/build/lib/build/lib/web_ui/backend/routers/tub.py +163 -0
- build/lib/build/lib/build/lib/web_ui/backend/tests/test_arena.py +384 -0
- build/lib/build/lib/build/lib/web_ui/backend/tests/test_branding.py +26 -0
- build/lib/build/lib/build/lib/web_ui/backend/tests/test_config.py +28 -0
- build/lib/build/lib/build/lib/web_ui/backend/tests/test_connector.py +371 -0
- build/lib/build/lib/build/lib/web_ui/backend/trainer_engine.py +312 -0
- build/lib/build/lib/build/lib/web_ui/backend/web_online_trainer.py +325 -0
- build/lib/build/lib/build/lib/web_ui/frontend/dist/index.html +358 -0
- build/lib/build/lib/build/lib/web_ui/frontend/index.html +24 -0
- build/lib/build/lib/build/lib/web_ui/frontend/node_modules/baseline-browser-mapping/LICENSE.txt +201 -0
- build/lib/build/lib/build/lib/web_ui/frontend/node_modules/cssesc/LICENSE-MIT.txt +20 -0
- build/lib/build/lib/build/lib/web_ui/frontend/node_modules/esquery/license.txt +24 -0
- build/lib/build/lib/build/lib/web_ui/frontend/node_modules/flatted/python/flatted.py +149 -0
- build/lib/build/lib/build/lib/web_ui/frontend/node_modules/jsesc/LICENSE-MIT.txt +20 -0
- build/lib/build/lib/build/lib/web_ui/frontend/node_modules/playwright/ThirdPartyNotices.txt +5042 -0
- build/lib/build/lib/build/lib/web_ui/frontend/node_modules/playwright-core/ThirdPartyNotices.txt +4076 -0
- build/lib/build/lib/build/lib/web_ui/frontend/node_modules/playwright-core/lib/vite/htmlReport/index.html +84 -0
- build/lib/build/lib/build/lib/web_ui/frontend/node_modules/playwright-core/lib/vite/recorder/index.html +29 -0
- build/lib/build/lib/build/lib/web_ui/frontend/node_modules/playwright-core/lib/vite/traceViewer/index.html +43 -0
- build/lib/build/lib/build/lib/web_ui/frontend/node_modules/playwright-core/lib/vite/traceViewer/snapshot.html +21 -0
- build/lib/build/lib/build/lib/web_ui/frontend/node_modules/playwright-core/lib/vite/traceViewer/uiMode.html +17 -0
- build/lib/build/lib/build/lib/web_ui/frontend/node_modules/punycode/LICENSE-MIT.txt +20 -0
- build/lib/build/lib/build/lib/web_ui/frontend/node_modules/tslib/CopyrightNotice.txt +15 -0
- build/lib/build/lib/build/lib/web_ui/frontend/node_modules/tslib/LICENSE.txt +12 -0
- build/lib/build/lib/build/lib/web_ui/frontend/node_modules/tslib/tslib.es6.html +1 -0
- build/lib/build/lib/build/lib/web_ui/frontend/node_modules/tslib/tslib.html +1 -0
- build/lib/build/lib/build/lib/web_ui/frontend/node_modules/typescript/LICENSE.txt +55 -0
- build/lib/build/lib/build/lib/web_ui/frontend/node_modules/typescript/ThirdPartyNoticeText.txt +193 -0
- build/lib/build/lib/build/lib/web_ui/frontend/testsprite_tests/TC001_Load_configuration_successfully_using_a_valid_path.py +52 -0
- build/lib/build/lib/build/lib/web_ui/frontend/testsprite_tests/TC002_Show_error_when_configuration_load_fails_for_an_invalid_path.py +52 -0
- build/lib/build/lib/build/lib/web_ui/frontend/testsprite_tests/TC003_Load_button_is_actionable_after_editing_the_config_path.py +63 -0
- build/lib/build/lib/build/lib/web_ui/frontend/testsprite_tests/TC004_Whitespace_trimmed_path_input_still_loads_successfully.py +63 -0
- build/lib/build/lib/build/lib/web_ui/frontend/testsprite_tests/TC005_Attempting_to_load_with_an_empty_config_path_shows_a_visible_failure_state.py +63 -0
- build/lib/build/lib/build/lib/web_ui/frontend/testsprite_tests/TC006_Status_bar_updates_from_previous_state_after_a_successful_load.py +62 -0
- build/lib/build/lib/build/lib/web_ui/frontend/testsprite_tests/TC007_Error_state_is_visible_after_switching_from_a_successful_load_to_an_invalid_path.py +52 -0
- build/lib/build/lib/build/lib/web_ui/frontend/testsprite_tests/TC008_Load_a_valid_tub_from_a_relative_path_and_verify_metadata_is_shown.py +65 -0
- build/lib/build/lib/build/lib/web_ui/frontend/testsprite_tests/TC009_Load_a_non_existent_tub_path_and_verify_error_state_and_status_bar.py +52 -0
- build/lib/build/lib/build/lib/web_ui/frontend/testsprite_tests/TC010_Attempt_to_load_with_an_empty_tub_path_and_verify_an_error_is_shown.py +52 -0
- build/lib/build/lib/build/lib/web_ui/frontend/testsprite_tests/TC011_Verify_loading_indicator_appears_when_starting_a_tub_load.py +68 -0
- build/lib/build/lib/build/lib/web_ui/frontend/testsprite_tests/TC012_Load_a_valid_tub_after_a_failed_load_and_verify_success_replaces_the_error_state.py +52 -0
- build/lib/build/lib/build/lib/web_ui/frontend/testsprite_tests/TC013_Load_a_second_tub_path_and_verify_the_status_bar_updates_to_the_new_record_count.py +53 -0
- build/lib/build/lib/build/lib/web_ui/frontend/testsprite_tests/TC014_Enter_a_tub_path_with_leadingtrailing_spaces_and_verify_load_behavior_is_handled.py +52 -0
- build/lib/build/lib/build/lib/web_ui/frontend/testsprite_tests/TC015_Load_main_page_and_display_current_tub_record_image_and_metadata.py +53 -0
- build/lib/build/lib/build/lib/web_ui/frontend/testsprite_tests/TC016_Next_advances_one_record_and_updates_the_displayed_image.py +58 -0
- build/lib/build/lib/build/lib/web_ui/frontend/testsprite_tests/TC017_Previous_navigates_back_one_record_and_updates_the_displayed_image.py +52 -0
- build/lib/build/lib/build/lib/web_ui/frontend/testsprite_tests/TC018_First_jumps_to_start_of_tub_and_Last_jumps_to_end.py +53 -0
- build/lib/build/lib/build/lib/web_ui/frontend/testsprite_tests/TC019_Render_steering_and_throttle_line_chart_when_tub_data_is_available.py +65 -0
- build/lib/build/lib/build/lib/web_ui/frontend/testsprite_tests/TC020_Empty_chart_placeholder_appears_when_chart_data_is_not_loaded.py +52 -0
- build/lib/build/lib/build/lib/web_ui/frontend/testsprite_tests/TC021_Error_message_is_shown_with_empty_chart_state_when_data_fails_to_load.py +52 -0
- build/lib/build/lib/build/lib/web_ui/frontend/testsprite_tests/TC022_Apply_valid_temporary_filter_and_verify_filtered_record_count_updates.py +52 -0
- build/lib/build/lib/build/lib/web_ui/frontend/testsprite_tests/TC023_Delete_records_by_index_range_with_confirmation_and_verify_success_feedback.py +51 -0
- build/lib/build/lib/build/lib/web_ui/frontend/testsprite_tests/TC024_End_to_end_Apply_filter_then_delete_index_range_and_verify_record_count_and_chart_update.py +52 -0
- build/lib/build/lib/build/lib/web_ui/frontend/testsprite_tests/TC025_Invalid_filter_expression_shows_validation_error_and_does_not_apply_filter.py +51 -0
- build/lib/build/lib/build/lib/web_ui/frontend/testsprite_tests/TC026_Fix_invalid_filter_to_valid_and_successfully_apply_after_seeing_error.py +51 -0
- build/lib/build/lib/build/lib/web_ui/frontend/testsprite_tests/TC027_Cancel_out_of_invalid_filter_state_without_applying_changes.py +51 -0
- build/lib/build/lib/build/lib/web_ui/frontend/testsprite_tests/TC028_Deletion_confirmation_modal_can_be_dismissed_without_deleting.py +51 -0
- build/lib/build/lib/build/lib/web_ui/frontend/testsprite_tests/TC029_Status_bar_remains_visible_while_navigating_within_the_main_console_sections.py +47 -0
- build/lib/build/lib/build/lib/web_ui/test_delete.py +11 -0
- build/lib/build/lib/build/lib/web_ui/test_records.py +16 -0
- build/lib/build/lib/build/lib/web_ui/test_records2.py +18 -0
- build/lib/build/lib/build/lib/web_ui/test_tub.py +18 -0
- build/lib/build/lib/donkeycar/__init__.py +21 -0
- build/lib/build/lib/donkeycar/_version.py +1 -0
- build/lib/build/lib/donkeycar/benchmarks/tub.py +44 -0
- build/lib/build/lib/donkeycar/benchmarks/tub_v2.py +40 -0
- build/lib/build/lib/donkeycar/config.py +90 -0
- build/lib/build/lib/donkeycar/contrib/__init__.py +0 -0
- build/lib/build/lib/donkeycar/contrib/robohat/code-robocarstore.py +186 -0
- build/lib/build/lib/donkeycar/contrib/robohat/code.py +188 -0
- build/lib/build/lib/donkeycar/contrib/robohat/rear_light.py +44 -0
- build/lib/build/lib/donkeycar/geom.py +37 -0
- build/lib/build/lib/donkeycar/gym/__init__.py +0 -0
- build/lib/build/lib/donkeycar/gym/gym_real.py +89 -0
- build/lib/build/lib/donkeycar/gym/remote_controller.py +42 -0
- build/lib/build/lib/donkeycar/la.py +623 -0
- build/lib/build/lib/donkeycar/management/__init__.py +3 -0
- build/lib/build/lib/donkeycar/management/base.py +1046 -0
- build/lib/build/lib/donkeycar/management/data_migrator.py +160 -0
- build/lib/build/lib/donkeycar/management/graph.py +189 -0
- build/lib/build/lib/donkeycar/management/joystick_creator.py +584 -0
- build/lib/build/lib/donkeycar/management/makemovie.py +321 -0
- build/lib/build/lib/donkeycar/management/train_local.py +50 -0
- build/lib/build/lib/donkeycar/management/train_online.py +887 -0
- build/lib/build/lib/donkeycar/management/tub_web/base.html +44 -0
- build/lib/build/lib/donkeycar/management/tub_web/tub.html +66 -0
- build/lib/build/lib/donkeycar/management/tub_web/tubs.html +17 -0
- build/lib/build/lib/donkeycar/management/tui.py +1422 -0
- build/lib/build/lib/donkeycar/management/ui/__init__.py +0 -0
- build/lib/build/lib/donkeycar/management/ui/car_screen.kv +154 -0
- build/lib/build/lib/donkeycar/management/ui/car_screen.py +219 -0
- build/lib/build/lib/donkeycar/management/ui/common.kv +303 -0
- build/lib/build/lib/donkeycar/management/ui/common.py +376 -0
- build/lib/build/lib/donkeycar/management/ui/pilot_screen.kv +240 -0
- build/lib/build/lib/donkeycar/management/ui/pilot_screen.py +386 -0
- build/lib/build/lib/donkeycar/management/ui/rc_file_handler.py +92 -0
- build/lib/build/lib/donkeycar/management/ui/train_screen.kv +295 -0
- build/lib/build/lib/donkeycar/management/ui/train_screen.py +325 -0
- build/lib/build/lib/donkeycar/management/ui/tub_screen.kv +174 -0
- build/lib/build/lib/donkeycar/management/ui/tub_screen.py +327 -0
- build/lib/build/lib/donkeycar/management/ui/ui.kv +78 -0
- build/lib/build/lib/donkeycar/management/ui/ui.py +68 -0
- build/lib/build/lib/donkeycar/memory.py +61 -0
- build/lib/build/lib/donkeycar/parts/__init__.py +0 -0
- build/lib/build/lib/donkeycar/parts/actuator.py +1430 -0
- build/lib/build/lib/donkeycar/parts/behavior.py +45 -0
- build/lib/build/lib/donkeycar/parts/camera.py +387 -0
- build/lib/build/lib/donkeycar/parts/controller.py +1750 -0
- build/lib/build/lib/donkeycar/parts/coral.py +93 -0
- build/lib/build/lib/donkeycar/parts/cv.py +891 -0
- build/lib/build/lib/donkeycar/parts/datastore.py +572 -0
- build/lib/build/lib/donkeycar/parts/datastore_v2.py +496 -0
- build/lib/build/lib/donkeycar/parts/dgym.py +101 -0
- build/lib/build/lib/donkeycar/parts/encoder.py +201 -0
- build/lib/build/lib/donkeycar/parts/explode.py +26 -0
- build/lib/build/lib/donkeycar/parts/fast_stretch.py +97 -0
- build/lib/build/lib/donkeycar/parts/fastai.py +278 -0
- build/lib/build/lib/donkeycar/parts/file_watcher.py +28 -0
- build/lib/build/lib/donkeycar/parts/fps.py +46 -0
- build/lib/build/lib/donkeycar/parts/gps.py +685 -0
- build/lib/build/lib/donkeycar/parts/graph.py +43 -0
- build/lib/build/lib/donkeycar/parts/image.py +110 -0
- build/lib/build/lib/donkeycar/parts/image_transformations.py +574 -0
- build/lib/build/lib/donkeycar/parts/imu.py +111 -0
- build/lib/build/lib/donkeycar/parts/interpreter.py +365 -0
- build/lib/build/lib/donkeycar/parts/keras.py +1133 -0
- build/lib/build/lib/donkeycar/parts/kinematics.py +677 -0
- build/lib/build/lib/donkeycar/parts/launch.py +48 -0
- build/lib/build/lib/donkeycar/parts/led_status.py +145 -0
- build/lib/build/lib/donkeycar/parts/leopard_imaging.py +57 -0
- build/lib/build/lib/donkeycar/parts/lidar.py +922 -0
- build/lib/build/lib/donkeycar/parts/line_follower.py +138 -0
- build/lib/build/lib/donkeycar/parts/logger.py +34 -0
- build/lib/build/lib/donkeycar/parts/network.py +492 -0
- build/lib/build/lib/donkeycar/parts/oak_d.py +381 -0
- build/lib/build/lib/donkeycar/parts/object_detector/stop_sign_detector.py +131 -0
- build/lib/build/lib/donkeycar/parts/odometer.py +63 -0
- build/lib/build/lib/donkeycar/parts/oled.py +161 -0
- build/lib/build/lib/donkeycar/parts/path.py +458 -0
- build/lib/build/lib/donkeycar/parts/perfmon.py +54 -0
- build/lib/build/lib/donkeycar/parts/pigpio_enc.py +92 -0
- build/lib/build/lib/donkeycar/parts/pins.py +1065 -0
- build/lib/build/lib/donkeycar/parts/pipe.py +8 -0
- build/lib/build/lib/donkeycar/parts/pose.py +262 -0
- build/lib/build/lib/donkeycar/parts/pytorch/ResNet18.py +105 -0
- build/lib/build/lib/donkeycar/parts/pytorch/torch_data.py +161 -0
- build/lib/build/lib/donkeycar/parts/pytorch/torch_train.py +60 -0
- build/lib/build/lib/donkeycar/parts/pytorch/torch_utils.py +31 -0
- build/lib/build/lib/donkeycar/parts/realsense2.py +131 -0
- build/lib/build/lib/donkeycar/parts/realsense435i.py +317 -0
- build/lib/build/lib/donkeycar/parts/robohat.py +259 -0
- build/lib/build/lib/donkeycar/parts/ros.py +44 -0
- build/lib/build/lib/donkeycar/parts/salient.py +106 -0
- build/lib/build/lib/donkeycar/parts/serial_controller.py +46 -0
- build/lib/build/lib/donkeycar/parts/serial_port.py +330 -0
- build/lib/build/lib/donkeycar/parts/simulation.py +73 -0
- build/lib/build/lib/donkeycar/parts/sombrero.py +27 -0
- build/lib/build/lib/donkeycar/parts/tachometer.py +732 -0
- build/lib/build/lib/donkeycar/parts/teensy.py +85 -0
- build/lib/build/lib/donkeycar/parts/telemetry.py +185 -0
- build/lib/build/lib/donkeycar/parts/text_writer.py +125 -0
- build/lib/build/lib/donkeycar/parts/tfmini.py +82 -0
- build/lib/build/lib/donkeycar/parts/throttle_filter.py +28 -0
- build/lib/build/lib/donkeycar/parts/transform.py +182 -0
- build/lib/build/lib/donkeycar/parts/tub_v2.py +176 -0
- build/lib/build/lib/donkeycar/parts/velocity.py +127 -0
- build/lib/build/lib/donkeycar/parts/voice_control/alexa.py +77 -0
- build/lib/build/lib/donkeycar/parts/web_controller/templates/base.html +78 -0
- build/lib/build/lib/donkeycar/parts/web_controller/templates/base_fpv.html +76 -0
- build/lib/build/lib/donkeycar/parts/web_controller/templates/calibrate.html +246 -0
- build/lib/build/lib/donkeycar/parts/web_controller/templates/home.html +26 -0
- build/lib/build/lib/donkeycar/parts/web_controller/templates/pilots_list.html +23 -0
- build/lib/build/lib/donkeycar/parts/web_controller/templates/session.html +156 -0
- build/lib/build/lib/donkeycar/parts/web_controller/templates/session_list.html +23 -0
- build/lib/build/lib/donkeycar/parts/web_controller/templates/vehicle.html +284 -0
- build/lib/build/lib/donkeycar/parts/web_controller/templates/vehicle_list.html +23 -0
- build/lib/build/lib/donkeycar/parts/web_controller/templates/wsTest.html +65 -0
- build/lib/build/lib/donkeycar/parts/web_controller/web.py +627 -0
- build/lib/build/lib/donkeycar/pipeline/__init__.py +1 -0
- build/lib/build/lib/donkeycar/pipeline/augmentations.py +48 -0
- build/lib/build/lib/donkeycar/pipeline/database.py +149 -0
- build/lib/build/lib/donkeycar/pipeline/sequence.py +174 -0
- build/lib/build/lib/donkeycar/pipeline/training.py +229 -0
- build/lib/build/lib/donkeycar/pipeline/types.py +229 -0
- build/lib/build/lib/donkeycar/templates/arduino_drive.py +67 -0
- build/lib/build/lib/donkeycar/templates/basic.py +247 -0
- build/lib/build/lib/donkeycar/templates/calibrate.py +133 -0
- build/lib/build/lib/donkeycar/templates/cfg_arduino_drive.py +48 -0
- build/lib/build/lib/donkeycar/templates/cfg_basic.py +221 -0
- build/lib/build/lib/donkeycar/templates/cfg_complete.py +815 -0
- build/lib/build/lib/donkeycar/templates/cfg_cv_control.py +660 -0
- build/lib/build/lib/donkeycar/templates/cfg_path_follow.py +719 -0
- build/lib/build/lib/donkeycar/templates/cfg_simulator.py +329 -0
- build/lib/build/lib/donkeycar/templates/cfg_square.py +83 -0
- build/lib/build/lib/donkeycar/templates/complete.py +1358 -0
- build/lib/build/lib/donkeycar/templates/cv_control.py +260 -0
- build/lib/build/lib/donkeycar/templates/just_drive.py +71 -0
- build/lib/build/lib/donkeycar/templates/myconfig.py +128 -0
- build/lib/build/lib/donkeycar/templates/path_follow.py +494 -0
- build/lib/build/lib/donkeycar/templates/simulator.py +438 -0
- build/lib/build/lib/donkeycar/templates/square.py +168 -0
- build/lib/build/lib/donkeycar/templates/train.py +77 -0
- build/lib/build/lib/donkeycar/tests/__init__.py +1 -0
- build/lib/build/lib/donkeycar/tests/pytest.ini +8 -0
- build/lib/build/lib/donkeycar/tests/setup.py +84 -0
- build/lib/build/lib/donkeycar/tests/test_actuator.py +53 -0
- build/lib/build/lib/donkeycar/tests/test_catalog_v2.py +44 -0
- build/lib/build/lib/donkeycar/tests/test_circular_buffer.py +124 -0
- build/lib/build/lib/donkeycar/tests/test_cli_branding.py +31 -0
- build/lib/build/lib/donkeycar/tests/test_controller.py +33 -0
- build/lib/build/lib/donkeycar/tests/test_data_migrator.py +154 -0
- build/lib/build/lib/donkeycar/tests/test_datastore_v2.py +94 -0
- build/lib/build/lib/donkeycar/tests/test_import_side_effects.py +106 -0
- build/lib/build/lib/donkeycar/tests/test_keras.py +86 -0
- build/lib/build/lib/donkeycar/tests/test_kinematics.py +743 -0
- build/lib/build/lib/donkeycar/tests/test_launch.py +91 -0
- build/lib/build/lib/donkeycar/tests/test_lidar.py +97 -0
- build/lib/build/lib/donkeycar/tests/test_memory.py +68 -0
- build/lib/build/lib/donkeycar/tests/test_odometer.py +29 -0
- build/lib/build/lib/donkeycar/tests/test_parts.py +1 -0
- build/lib/build/lib/donkeycar/tests/test_path.py +290 -0
- build/lib/build/lib/donkeycar/tests/test_pipeline.py +168 -0
- build/lib/build/lib/donkeycar/tests/test_project_metadata.py +145 -0
- build/lib/build/lib/donkeycar/tests/test_robohat.py +247 -0
- build/lib/build/lib/donkeycar/tests/test_scripts.py +83 -0
- build/lib/build/lib/donkeycar/tests/test_seekable_v2.py +79 -0
- build/lib/build/lib/donkeycar/tests/test_tachometer.py +152 -0
- build/lib/build/lib/donkeycar/tests/test_telemetry.py +99 -0
- build/lib/build/lib/donkeycar/tests/test_template.py +80 -0
- build/lib/build/lib/donkeycar/tests/test_torch.py +130 -0
- build/lib/build/lib/donkeycar/tests/test_train.py +236 -0
- build/lib/build/lib/donkeycar/tests/test_tub_v2.py +76 -0
- build/lib/build/lib/donkeycar/tests/test_tubwriter.py +43 -0
- build/lib/build/lib/donkeycar/tests/test_tui_backup_restore.py +54 -0
- build/lib/build/lib/donkeycar/tests/test_tui_clear_data.py +63 -0
- build/lib/build/lib/donkeycar/tests/test_tui_restore.py +76 -0
- build/lib/build/lib/donkeycar/tests/test_util_data.py +160 -0
- build/lib/build/lib/donkeycar/tests/test_vehicle.py +57 -0
- build/lib/build/lib/donkeycar/tests/test_web_controller.py +32 -0
- build/lib/build/lib/donkeycar/tests/test_web_socket.py +184 -0
- build/lib/build/lib/donkeycar/tests/test_web_ui_branding.py +29 -0
- build/lib/build/lib/donkeycar/utilities/TrackSpeedPlanner/static/index.html +734 -0
- build/lib/build/lib/donkeycar/utilities/TrackSpeedPlanner/trackeditor.py +404 -0
- build/lib/build/lib/donkeycar/utilities/__init__.py +0 -0
- build/lib/build/lib/donkeycar/utilities/circular_buffer.py +143 -0
- build/lib/build/lib/donkeycar/utilities/deprecated.py +80 -0
- build/lib/build/lib/donkeycar/utilities/dk_platform.py +34 -0
- build/lib/build/lib/donkeycar/utils.py +622 -0
- build/lib/build/lib/donkeycar/vehicle.py +228 -0
- build/lib/build/lib/donkeydrifter/__init__.py +57 -0
- build/lib/build/lib/parts/drive_api_bridge.py +176 -0
- build/lib/build/lib/scripts/convert_to_tflite.py +40 -0
- build/lib/build/lib/scripts/convert_to_tub_v2.py +87 -0
- build/lib/build/lib/scripts/freeze_model.py +52 -0
- build/lib/build/lib/scripts/graph_listener.py +56 -0
- build/lib/build/lib/scripts/hsv_picker.py +283 -0
- build/lib/build/lib/scripts/migrate_model_names.py +94 -0
- build/lib/build/lib/scripts/multi_train.py +59 -0
- build/lib/build/lib/scripts/pigpio_donkey.py +74 -0
- build/lib/build/lib/scripts/preview_augumentations.py +55 -0
- build/lib/build/lib/scripts/profile.py +45 -0
- build/lib/build/lib/scripts/profile_coral.py +27 -0
- build/lib/build/lib/scripts/remote_cam_view.py +55 -0
- build/lib/build/lib/scripts/remote_cam_view_tcp.py +45 -0
- build/lib/build/lib/scripts/salient_vis_listener.py +45 -0
- build/lib/build/lib/scripts/tflite_convert.py +19 -0
- build/lib/build/lib/scripts/tflite_profile.py +48 -0
- build/lib/build/lib/tests/test_migration_integration.py +64 -0
- build/lib/build/lib/tests/test_model_naming_refactor.py +148 -0
- build/lib/build/lib/tests/test_online_trainer_workspace.py +173 -0
- build/lib/build/lib/tests/test_restore_logic.py +97 -0
- build/lib/build/lib/web_ui/backend/connector_engine.py +230 -0
- build/lib/build/lib/web_ui/backend/main.py +35 -0
- build/lib/build/lib/web_ui/backend/remote_car_client.py +213 -0
- build/lib/build/lib/web_ui/backend/requirements.txt +6 -0
- build/lib/build/lib/web_ui/backend/routers/__init__.py +0 -0
- build/lib/build/lib/web_ui/backend/routers/arena.py +447 -0
- build/lib/build/lib/web_ui/backend/routers/config.py +198 -0
- build/lib/build/lib/web_ui/backend/routers/connector.py +249 -0
- build/lib/build/lib/web_ui/backend/routers/drive.py +361 -0
- build/lib/build/lib/web_ui/backend/routers/trainer.py +341 -0
- build/lib/build/lib/web_ui/backend/routers/tub.py +163 -0
- build/lib/build/lib/web_ui/backend/tests/test_arena.py +384 -0
- build/lib/build/lib/web_ui/backend/tests/test_branding.py +26 -0
- build/lib/build/lib/web_ui/backend/tests/test_config.py +28 -0
- build/lib/build/lib/web_ui/backend/tests/test_connector.py +371 -0
- build/lib/build/lib/web_ui/backend/trainer_engine.py +312 -0
- build/lib/build/lib/web_ui/backend/web_online_trainer.py +325 -0
- build/lib/build/lib/web_ui/frontend/dist/index.html +358 -0
- build/lib/build/lib/web_ui/frontend/index.html +24 -0
- build/lib/build/lib/web_ui/frontend/node_modules/baseline-browser-mapping/LICENSE.txt +201 -0
- build/lib/build/lib/web_ui/frontend/node_modules/cssesc/LICENSE-MIT.txt +20 -0
- build/lib/build/lib/web_ui/frontend/node_modules/esquery/license.txt +24 -0
- build/lib/build/lib/web_ui/frontend/node_modules/flatted/python/flatted.py +149 -0
- build/lib/build/lib/web_ui/frontend/node_modules/jsesc/LICENSE-MIT.txt +20 -0
- build/lib/build/lib/web_ui/frontend/node_modules/playwright/ThirdPartyNotices.txt +5042 -0
- build/lib/build/lib/web_ui/frontend/node_modules/playwright-core/ThirdPartyNotices.txt +4076 -0
- build/lib/build/lib/web_ui/frontend/node_modules/playwright-core/lib/vite/htmlReport/index.html +84 -0
- build/lib/build/lib/web_ui/frontend/node_modules/playwright-core/lib/vite/recorder/index.html +29 -0
- build/lib/build/lib/web_ui/frontend/node_modules/playwright-core/lib/vite/traceViewer/index.html +43 -0
- build/lib/build/lib/web_ui/frontend/node_modules/playwright-core/lib/vite/traceViewer/snapshot.html +21 -0
- build/lib/build/lib/web_ui/frontend/node_modules/playwright-core/lib/vite/traceViewer/uiMode.html +17 -0
- build/lib/build/lib/web_ui/frontend/node_modules/punycode/LICENSE-MIT.txt +20 -0
- build/lib/build/lib/web_ui/frontend/node_modules/tslib/CopyrightNotice.txt +15 -0
- build/lib/build/lib/web_ui/frontend/node_modules/tslib/LICENSE.txt +12 -0
- build/lib/build/lib/web_ui/frontend/node_modules/tslib/tslib.es6.html +1 -0
- build/lib/build/lib/web_ui/frontend/node_modules/tslib/tslib.html +1 -0
- build/lib/build/lib/web_ui/frontend/node_modules/typescript/LICENSE.txt +55 -0
- build/lib/build/lib/web_ui/frontend/node_modules/typescript/ThirdPartyNoticeText.txt +193 -0
- build/lib/build/lib/web_ui/frontend/testsprite_tests/TC001_Load_configuration_successfully_using_a_valid_path.py +52 -0
- build/lib/build/lib/web_ui/frontend/testsprite_tests/TC002_Show_error_when_configuration_load_fails_for_an_invalid_path.py +52 -0
- build/lib/build/lib/web_ui/frontend/testsprite_tests/TC003_Load_button_is_actionable_after_editing_the_config_path.py +63 -0
- build/lib/build/lib/web_ui/frontend/testsprite_tests/TC004_Whitespace_trimmed_path_input_still_loads_successfully.py +63 -0
- build/lib/build/lib/web_ui/frontend/testsprite_tests/TC005_Attempting_to_load_with_an_empty_config_path_shows_a_visible_failure_state.py +63 -0
- build/lib/build/lib/web_ui/frontend/testsprite_tests/TC006_Status_bar_updates_from_previous_state_after_a_successful_load.py +62 -0
- build/lib/build/lib/web_ui/frontend/testsprite_tests/TC007_Error_state_is_visible_after_switching_from_a_successful_load_to_an_invalid_path.py +52 -0
- build/lib/build/lib/web_ui/frontend/testsprite_tests/TC008_Load_a_valid_tub_from_a_relative_path_and_verify_metadata_is_shown.py +65 -0
- build/lib/build/lib/web_ui/frontend/testsprite_tests/TC009_Load_a_non_existent_tub_path_and_verify_error_state_and_status_bar.py +52 -0
- build/lib/build/lib/web_ui/frontend/testsprite_tests/TC010_Attempt_to_load_with_an_empty_tub_path_and_verify_an_error_is_shown.py +52 -0
- build/lib/build/lib/web_ui/frontend/testsprite_tests/TC011_Verify_loading_indicator_appears_when_starting_a_tub_load.py +68 -0
- build/lib/build/lib/web_ui/frontend/testsprite_tests/TC012_Load_a_valid_tub_after_a_failed_load_and_verify_success_replaces_the_error_state.py +52 -0
- build/lib/build/lib/web_ui/frontend/testsprite_tests/TC013_Load_a_second_tub_path_and_verify_the_status_bar_updates_to_the_new_record_count.py +53 -0
- build/lib/build/lib/web_ui/frontend/testsprite_tests/TC014_Enter_a_tub_path_with_leadingtrailing_spaces_and_verify_load_behavior_is_handled.py +52 -0
- build/lib/build/lib/web_ui/frontend/testsprite_tests/TC015_Load_main_page_and_display_current_tub_record_image_and_metadata.py +53 -0
- build/lib/build/lib/web_ui/frontend/testsprite_tests/TC016_Next_advances_one_record_and_updates_the_displayed_image.py +58 -0
- build/lib/build/lib/web_ui/frontend/testsprite_tests/TC017_Previous_navigates_back_one_record_and_updates_the_displayed_image.py +52 -0
- build/lib/build/lib/web_ui/frontend/testsprite_tests/TC018_First_jumps_to_start_of_tub_and_Last_jumps_to_end.py +53 -0
- build/lib/build/lib/web_ui/frontend/testsprite_tests/TC019_Render_steering_and_throttle_line_chart_when_tub_data_is_available.py +65 -0
- build/lib/build/lib/web_ui/frontend/testsprite_tests/TC020_Empty_chart_placeholder_appears_when_chart_data_is_not_loaded.py +52 -0
- build/lib/build/lib/web_ui/frontend/testsprite_tests/TC021_Error_message_is_shown_with_empty_chart_state_when_data_fails_to_load.py +52 -0
- build/lib/build/lib/web_ui/frontend/testsprite_tests/TC022_Apply_valid_temporary_filter_and_verify_filtered_record_count_updates.py +52 -0
- build/lib/build/lib/web_ui/frontend/testsprite_tests/TC023_Delete_records_by_index_range_with_confirmation_and_verify_success_feedback.py +51 -0
- build/lib/build/lib/web_ui/frontend/testsprite_tests/TC024_End_to_end_Apply_filter_then_delete_index_range_and_verify_record_count_and_chart_update.py +52 -0
- build/lib/build/lib/web_ui/frontend/testsprite_tests/TC025_Invalid_filter_expression_shows_validation_error_and_does_not_apply_filter.py +51 -0
- build/lib/build/lib/web_ui/frontend/testsprite_tests/TC026_Fix_invalid_filter_to_valid_and_successfully_apply_after_seeing_error.py +51 -0
- build/lib/build/lib/web_ui/frontend/testsprite_tests/TC027_Cancel_out_of_invalid_filter_state_without_applying_changes.py +51 -0
- build/lib/build/lib/web_ui/frontend/testsprite_tests/TC028_Deletion_confirmation_modal_can_be_dismissed_without_deleting.py +51 -0
- build/lib/build/lib/web_ui/frontend/testsprite_tests/TC029_Status_bar_remains_visible_while_navigating_within_the_main_console_sections.py +47 -0
- build/lib/build/lib/web_ui/test_delete.py +11 -0
- build/lib/build/lib/web_ui/test_records.py +16 -0
- build/lib/build/lib/web_ui/test_records2.py +18 -0
- build/lib/build/lib/web_ui/test_tub.py +18 -0
- build/lib/donkeycar/__init__.py +21 -0
- build/lib/donkeycar/_version.py +1 -0
- build/lib/donkeycar/benchmarks/tub.py +44 -0
- build/lib/donkeycar/benchmarks/tub_v2.py +40 -0
- build/lib/donkeycar/config.py +90 -0
- build/lib/donkeycar/contrib/__init__.py +0 -0
- build/lib/donkeycar/contrib/robohat/code-robocarstore.py +186 -0
- build/lib/donkeycar/contrib/robohat/code.py +188 -0
- build/lib/donkeycar/contrib/robohat/rear_light.py +44 -0
- build/lib/donkeycar/geom.py +37 -0
- build/lib/donkeycar/gym/__init__.py +0 -0
- build/lib/donkeycar/gym/gym_real.py +89 -0
- build/lib/donkeycar/gym/remote_controller.py +42 -0
- build/lib/donkeycar/la.py +623 -0
- build/lib/donkeycar/management/__init__.py +3 -0
- build/lib/donkeycar/management/base.py +1046 -0
- build/lib/donkeycar/management/data_migrator.py +160 -0
- build/lib/donkeycar/management/graph.py +189 -0
- build/lib/donkeycar/management/joystick_creator.py +584 -0
- build/lib/donkeycar/management/makemovie.py +321 -0
- build/lib/donkeycar/management/train_local.py +50 -0
- build/lib/donkeycar/management/train_online.py +887 -0
- build/lib/donkeycar/management/tub_web/base.html +44 -0
- build/lib/donkeycar/management/tub_web/tub.html +66 -0
- build/lib/donkeycar/management/tub_web/tubs.html +17 -0
- build/lib/donkeycar/management/tui.py +1422 -0
- build/lib/donkeycar/management/ui/__init__.py +0 -0
- build/lib/donkeycar/management/ui/car_screen.kv +154 -0
- build/lib/donkeycar/management/ui/car_screen.py +219 -0
- build/lib/donkeycar/management/ui/common.kv +303 -0
- build/lib/donkeycar/management/ui/common.py +376 -0
- build/lib/donkeycar/management/ui/pilot_screen.kv +240 -0
- build/lib/donkeycar/management/ui/pilot_screen.py +386 -0
- build/lib/donkeycar/management/ui/rc_file_handler.py +92 -0
- build/lib/donkeycar/management/ui/train_screen.kv +295 -0
- build/lib/donkeycar/management/ui/train_screen.py +325 -0
- build/lib/donkeycar/management/ui/tub_screen.kv +174 -0
- build/lib/donkeycar/management/ui/tub_screen.py +327 -0
- build/lib/donkeycar/management/ui/ui.kv +78 -0
- build/lib/donkeycar/management/ui/ui.py +68 -0
- build/lib/donkeycar/memory.py +61 -0
- build/lib/donkeycar/parts/__init__.py +0 -0
- build/lib/donkeycar/parts/actuator.py +1430 -0
- build/lib/donkeycar/parts/behavior.py +45 -0
- build/lib/donkeycar/parts/camera.py +387 -0
- build/lib/donkeycar/parts/controller.py +1750 -0
- build/lib/donkeycar/parts/coral.py +93 -0
- build/lib/donkeycar/parts/cv.py +891 -0
- build/lib/donkeycar/parts/datastore.py +572 -0
- build/lib/donkeycar/parts/datastore_v2.py +496 -0
- build/lib/donkeycar/parts/dgym.py +101 -0
- build/lib/donkeycar/parts/encoder.py +201 -0
- build/lib/donkeycar/parts/explode.py +26 -0
- build/lib/donkeycar/parts/fast_stretch.py +97 -0
- build/lib/donkeycar/parts/fastai.py +278 -0
- build/lib/donkeycar/parts/file_watcher.py +28 -0
- build/lib/donkeycar/parts/fps.py +46 -0
- build/lib/donkeycar/parts/gps.py +685 -0
- build/lib/donkeycar/parts/graph.py +43 -0
- build/lib/donkeycar/parts/image.py +110 -0
- build/lib/donkeycar/parts/image_transformations.py +574 -0
- build/lib/donkeycar/parts/imu.py +111 -0
- build/lib/donkeycar/parts/interpreter.py +365 -0
- build/lib/donkeycar/parts/keras.py +1133 -0
- build/lib/donkeycar/parts/kinematics.py +677 -0
- build/lib/donkeycar/parts/launch.py +48 -0
- build/lib/donkeycar/parts/led_status.py +145 -0
- build/lib/donkeycar/parts/leopard_imaging.py +57 -0
- build/lib/donkeycar/parts/lidar.py +922 -0
- build/lib/donkeycar/parts/line_follower.py +138 -0
- build/lib/donkeycar/parts/logger.py +34 -0
- build/lib/donkeycar/parts/network.py +492 -0
- build/lib/donkeycar/parts/oak_d.py +381 -0
- build/lib/donkeycar/parts/object_detector/stop_sign_detector.py +131 -0
- build/lib/donkeycar/parts/odometer.py +63 -0
- build/lib/donkeycar/parts/oled.py +161 -0
- build/lib/donkeycar/parts/path.py +458 -0
- build/lib/donkeycar/parts/perfmon.py +54 -0
- build/lib/donkeycar/parts/pigpio_enc.py +92 -0
- build/lib/donkeycar/parts/pins.py +1065 -0
- build/lib/donkeycar/parts/pipe.py +8 -0
- build/lib/donkeycar/parts/pose.py +262 -0
- build/lib/donkeycar/parts/pytorch/ResNet18.py +105 -0
- build/lib/donkeycar/parts/pytorch/torch_data.py +161 -0
- build/lib/donkeycar/parts/pytorch/torch_train.py +60 -0
- build/lib/donkeycar/parts/pytorch/torch_utils.py +31 -0
- build/lib/donkeycar/parts/realsense2.py +131 -0
- build/lib/donkeycar/parts/realsense435i.py +317 -0
- build/lib/donkeycar/parts/robohat.py +259 -0
- build/lib/donkeycar/parts/ros.py +44 -0
- build/lib/donkeycar/parts/salient.py +106 -0
- build/lib/donkeycar/parts/serial_controller.py +46 -0
- build/lib/donkeycar/parts/serial_port.py +330 -0
- build/lib/donkeycar/parts/simulation.py +73 -0
- build/lib/donkeycar/parts/sombrero.py +27 -0
- build/lib/donkeycar/parts/tachometer.py +732 -0
- build/lib/donkeycar/parts/teensy.py +85 -0
- build/lib/donkeycar/parts/telemetry.py +185 -0
- build/lib/donkeycar/parts/text_writer.py +125 -0
- build/lib/donkeycar/parts/tfmini.py +82 -0
- build/lib/donkeycar/parts/throttle_filter.py +28 -0
- build/lib/donkeycar/parts/transform.py +182 -0
- build/lib/donkeycar/parts/tub_v2.py +176 -0
- build/lib/donkeycar/parts/velocity.py +127 -0
- build/lib/donkeycar/parts/voice_control/alexa.py +77 -0
- build/lib/donkeycar/parts/web_controller/templates/base.html +78 -0
- build/lib/donkeycar/parts/web_controller/templates/base_fpv.html +76 -0
- build/lib/donkeycar/parts/web_controller/templates/calibrate.html +246 -0
- build/lib/donkeycar/parts/web_controller/templates/home.html +26 -0
- build/lib/donkeycar/parts/web_controller/templates/pilots_list.html +23 -0
- build/lib/donkeycar/parts/web_controller/templates/session.html +156 -0
- build/lib/donkeycar/parts/web_controller/templates/session_list.html +23 -0
- build/lib/donkeycar/parts/web_controller/templates/vehicle.html +284 -0
- build/lib/donkeycar/parts/web_controller/templates/vehicle_list.html +23 -0
- build/lib/donkeycar/parts/web_controller/templates/wsTest.html +65 -0
- build/lib/donkeycar/parts/web_controller/web.py +627 -0
- build/lib/donkeycar/pipeline/__init__.py +1 -0
- build/lib/donkeycar/pipeline/augmentations.py +48 -0
- build/lib/donkeycar/pipeline/database.py +149 -0
- build/lib/donkeycar/pipeline/sequence.py +174 -0
- build/lib/donkeycar/pipeline/training.py +229 -0
- build/lib/donkeycar/pipeline/types.py +229 -0
- build/lib/donkeycar/templates/arduino_drive.py +67 -0
- build/lib/donkeycar/templates/basic.py +247 -0
- build/lib/donkeycar/templates/calibrate.py +133 -0
- build/lib/donkeycar/templates/cfg_arduino_drive.py +48 -0
- build/lib/donkeycar/templates/cfg_basic.py +221 -0
- build/lib/donkeycar/templates/cfg_complete.py +815 -0
- build/lib/donkeycar/templates/cfg_cv_control.py +660 -0
- build/lib/donkeycar/templates/cfg_path_follow.py +719 -0
- build/lib/donkeycar/templates/cfg_simulator.py +329 -0
- build/lib/donkeycar/templates/cfg_square.py +83 -0
- build/lib/donkeycar/templates/complete.py +1358 -0
- build/lib/donkeycar/templates/cv_control.py +260 -0
- build/lib/donkeycar/templates/just_drive.py +71 -0
- build/lib/donkeycar/templates/myconfig.py +128 -0
- build/lib/donkeycar/templates/path_follow.py +494 -0
- build/lib/donkeycar/templates/simulator.py +438 -0
- build/lib/donkeycar/templates/square.py +168 -0
- build/lib/donkeycar/templates/train.py +77 -0
- build/lib/donkeycar/tests/__init__.py +1 -0
- build/lib/donkeycar/tests/pytest.ini +8 -0
- build/lib/donkeycar/tests/setup.py +84 -0
- build/lib/donkeycar/tests/test_actuator.py +53 -0
- build/lib/donkeycar/tests/test_catalog_v2.py +44 -0
- build/lib/donkeycar/tests/test_circular_buffer.py +124 -0
- build/lib/donkeycar/tests/test_cli_branding.py +31 -0
- build/lib/donkeycar/tests/test_controller.py +33 -0
- build/lib/donkeycar/tests/test_data_migrator.py +154 -0
- build/lib/donkeycar/tests/test_datastore_v2.py +94 -0
- build/lib/donkeycar/tests/test_import_side_effects.py +106 -0
- build/lib/donkeycar/tests/test_keras.py +86 -0
- build/lib/donkeycar/tests/test_kinematics.py +743 -0
- build/lib/donkeycar/tests/test_launch.py +91 -0
- build/lib/donkeycar/tests/test_lidar.py +97 -0
- build/lib/donkeycar/tests/test_memory.py +68 -0
- build/lib/donkeycar/tests/test_odometer.py +29 -0
- build/lib/donkeycar/tests/test_parts.py +1 -0
- build/lib/donkeycar/tests/test_path.py +290 -0
- build/lib/donkeycar/tests/test_pipeline.py +168 -0
- build/lib/donkeycar/tests/test_project_metadata.py +145 -0
- build/lib/donkeycar/tests/test_robohat.py +247 -0
- build/lib/donkeycar/tests/test_scripts.py +83 -0
- build/lib/donkeycar/tests/test_seekable_v2.py +79 -0
- build/lib/donkeycar/tests/test_tachometer.py +152 -0
- build/lib/donkeycar/tests/test_telemetry.py +99 -0
- build/lib/donkeycar/tests/test_template.py +80 -0
- build/lib/donkeycar/tests/test_torch.py +130 -0
- build/lib/donkeycar/tests/test_train.py +236 -0
- build/lib/donkeycar/tests/test_tub_v2.py +76 -0
- build/lib/donkeycar/tests/test_tubwriter.py +43 -0
- build/lib/donkeycar/tests/test_tui_backup_restore.py +54 -0
- build/lib/donkeycar/tests/test_tui_clear_data.py +63 -0
- build/lib/donkeycar/tests/test_tui_restore.py +76 -0
- build/lib/donkeycar/tests/test_util_data.py +160 -0
- build/lib/donkeycar/tests/test_vehicle.py +57 -0
- build/lib/donkeycar/tests/test_web_controller.py +32 -0
- build/lib/donkeycar/tests/test_web_socket.py +184 -0
- build/lib/donkeycar/tests/test_web_ui_branding.py +29 -0
- build/lib/donkeycar/utilities/TrackSpeedPlanner/static/index.html +734 -0
- build/lib/donkeycar/utilities/TrackSpeedPlanner/trackeditor.py +404 -0
- build/lib/donkeycar/utilities/__init__.py +0 -0
- build/lib/donkeycar/utilities/circular_buffer.py +143 -0
- build/lib/donkeycar/utilities/deprecated.py +80 -0
- build/lib/donkeycar/utilities/dk_platform.py +34 -0
- build/lib/donkeycar/utils.py +622 -0
- build/lib/donkeycar/vehicle.py +228 -0
- build/lib/donkeydrifter/__init__.py +57 -0
- build/lib/parts/drive_api_bridge.py +176 -0
- build/lib/scripts/convert_to_tflite.py +40 -0
- build/lib/scripts/convert_to_tub_v2.py +87 -0
- build/lib/scripts/freeze_model.py +52 -0
- build/lib/scripts/graph_listener.py +56 -0
- build/lib/scripts/hsv_picker.py +283 -0
- build/lib/scripts/migrate_model_names.py +94 -0
- build/lib/scripts/multi_train.py +59 -0
- build/lib/scripts/pigpio_donkey.py +74 -0
- build/lib/scripts/preview_augumentations.py +55 -0
- build/lib/scripts/profile.py +45 -0
- build/lib/scripts/profile_coral.py +27 -0
- build/lib/scripts/remote_cam_view.py +55 -0
- build/lib/scripts/remote_cam_view_tcp.py +45 -0
- build/lib/scripts/salient_vis_listener.py +45 -0
- build/lib/scripts/tflite_convert.py +19 -0
- build/lib/scripts/tflite_profile.py +48 -0
- build/lib/tests/test_migration_integration.py +64 -0
- build/lib/tests/test_model_naming_refactor.py +148 -0
- build/lib/tests/test_online_trainer_workspace.py +173 -0
- build/lib/tests/test_restore_logic.py +97 -0
- build/lib/web_ui/backend/connector_engine.py +230 -0
- build/lib/web_ui/backend/main.py +35 -0
- build/lib/web_ui/backend/remote_car_client.py +213 -0
- build/lib/web_ui/backend/requirements.txt +6 -0
- build/lib/web_ui/backend/routers/__init__.py +0 -0
- build/lib/web_ui/backend/routers/arena.py +447 -0
- build/lib/web_ui/backend/routers/config.py +198 -0
- build/lib/web_ui/backend/routers/connector.py +249 -0
- build/lib/web_ui/backend/routers/drive.py +361 -0
- build/lib/web_ui/backend/routers/trainer.py +341 -0
- build/lib/web_ui/backend/routers/tub.py +163 -0
- build/lib/web_ui/backend/tests/test_arena.py +384 -0
- build/lib/web_ui/backend/tests/test_branding.py +26 -0
- build/lib/web_ui/backend/tests/test_config.py +28 -0
- build/lib/web_ui/backend/tests/test_connector.py +371 -0
- build/lib/web_ui/backend/trainer_engine.py +312 -0
- build/lib/web_ui/backend/web_online_trainer.py +325 -0
- build/lib/web_ui/frontend/dist/index.html +358 -0
- build/lib/web_ui/frontend/index.html +24 -0
- build/lib/web_ui/frontend/node_modules/baseline-browser-mapping/LICENSE.txt +201 -0
- build/lib/web_ui/frontend/node_modules/cssesc/LICENSE-MIT.txt +20 -0
- build/lib/web_ui/frontend/node_modules/esquery/license.txt +24 -0
- build/lib/web_ui/frontend/node_modules/flatted/python/flatted.py +149 -0
- build/lib/web_ui/frontend/node_modules/jsesc/LICENSE-MIT.txt +20 -0
- build/lib/web_ui/frontend/node_modules/playwright/ThirdPartyNotices.txt +5042 -0
- build/lib/web_ui/frontend/node_modules/playwright-core/ThirdPartyNotices.txt +4076 -0
- build/lib/web_ui/frontend/node_modules/playwright-core/lib/vite/htmlReport/index.html +84 -0
- build/lib/web_ui/frontend/node_modules/playwright-core/lib/vite/recorder/index.html +29 -0
- build/lib/web_ui/frontend/node_modules/playwright-core/lib/vite/traceViewer/index.html +43 -0
- build/lib/web_ui/frontend/node_modules/playwright-core/lib/vite/traceViewer/snapshot.html +21 -0
- build/lib/web_ui/frontend/node_modules/playwright-core/lib/vite/traceViewer/uiMode.html +17 -0
- build/lib/web_ui/frontend/node_modules/punycode/LICENSE-MIT.txt +20 -0
- build/lib/web_ui/frontend/node_modules/tslib/CopyrightNotice.txt +15 -0
- build/lib/web_ui/frontend/node_modules/tslib/LICENSE.txt +12 -0
- build/lib/web_ui/frontend/node_modules/tslib/tslib.es6.html +1 -0
- build/lib/web_ui/frontend/node_modules/tslib/tslib.html +1 -0
- build/lib/web_ui/frontend/node_modules/typescript/LICENSE.txt +55 -0
- build/lib/web_ui/frontend/node_modules/typescript/ThirdPartyNoticeText.txt +193 -0
- build/lib/web_ui/frontend/testsprite_tests/TC001_Load_configuration_successfully_using_a_valid_path.py +52 -0
- build/lib/web_ui/frontend/testsprite_tests/TC002_Show_error_when_configuration_load_fails_for_an_invalid_path.py +52 -0
- build/lib/web_ui/frontend/testsprite_tests/TC003_Load_button_is_actionable_after_editing_the_config_path.py +63 -0
- build/lib/web_ui/frontend/testsprite_tests/TC004_Whitespace_trimmed_path_input_still_loads_successfully.py +63 -0
- build/lib/web_ui/frontend/testsprite_tests/TC005_Attempting_to_load_with_an_empty_config_path_shows_a_visible_failure_state.py +63 -0
- build/lib/web_ui/frontend/testsprite_tests/TC006_Status_bar_updates_from_previous_state_after_a_successful_load.py +62 -0
- build/lib/web_ui/frontend/testsprite_tests/TC007_Error_state_is_visible_after_switching_from_a_successful_load_to_an_invalid_path.py +52 -0
- build/lib/web_ui/frontend/testsprite_tests/TC008_Load_a_valid_tub_from_a_relative_path_and_verify_metadata_is_shown.py +65 -0
- build/lib/web_ui/frontend/testsprite_tests/TC009_Load_a_non_existent_tub_path_and_verify_error_state_and_status_bar.py +52 -0
- build/lib/web_ui/frontend/testsprite_tests/TC010_Attempt_to_load_with_an_empty_tub_path_and_verify_an_error_is_shown.py +52 -0
- build/lib/web_ui/frontend/testsprite_tests/TC011_Verify_loading_indicator_appears_when_starting_a_tub_load.py +68 -0
- build/lib/web_ui/frontend/testsprite_tests/TC012_Load_a_valid_tub_after_a_failed_load_and_verify_success_replaces_the_error_state.py +52 -0
- build/lib/web_ui/frontend/testsprite_tests/TC013_Load_a_second_tub_path_and_verify_the_status_bar_updates_to_the_new_record_count.py +53 -0
- build/lib/web_ui/frontend/testsprite_tests/TC014_Enter_a_tub_path_with_leadingtrailing_spaces_and_verify_load_behavior_is_handled.py +52 -0
- build/lib/web_ui/frontend/testsprite_tests/TC015_Load_main_page_and_display_current_tub_record_image_and_metadata.py +53 -0
- build/lib/web_ui/frontend/testsprite_tests/TC016_Next_advances_one_record_and_updates_the_displayed_image.py +58 -0
- build/lib/web_ui/frontend/testsprite_tests/TC017_Previous_navigates_back_one_record_and_updates_the_displayed_image.py +52 -0
- build/lib/web_ui/frontend/testsprite_tests/TC018_First_jumps_to_start_of_tub_and_Last_jumps_to_end.py +53 -0
- build/lib/web_ui/frontend/testsprite_tests/TC019_Render_steering_and_throttle_line_chart_when_tub_data_is_available.py +65 -0
- build/lib/web_ui/frontend/testsprite_tests/TC020_Empty_chart_placeholder_appears_when_chart_data_is_not_loaded.py +52 -0
- build/lib/web_ui/frontend/testsprite_tests/TC021_Error_message_is_shown_with_empty_chart_state_when_data_fails_to_load.py +52 -0
- build/lib/web_ui/frontend/testsprite_tests/TC022_Apply_valid_temporary_filter_and_verify_filtered_record_count_updates.py +52 -0
- build/lib/web_ui/frontend/testsprite_tests/TC023_Delete_records_by_index_range_with_confirmation_and_verify_success_feedback.py +51 -0
- build/lib/web_ui/frontend/testsprite_tests/TC024_End_to_end_Apply_filter_then_delete_index_range_and_verify_record_count_and_chart_update.py +52 -0
- build/lib/web_ui/frontend/testsprite_tests/TC025_Invalid_filter_expression_shows_validation_error_and_does_not_apply_filter.py +51 -0
- build/lib/web_ui/frontend/testsprite_tests/TC026_Fix_invalid_filter_to_valid_and_successfully_apply_after_seeing_error.py +51 -0
- build/lib/web_ui/frontend/testsprite_tests/TC027_Cancel_out_of_invalid_filter_state_without_applying_changes.py +51 -0
- build/lib/web_ui/frontend/testsprite_tests/TC028_Deletion_confirmation_modal_can_be_dismissed_without_deleting.py +51 -0
- build/lib/web_ui/frontend/testsprite_tests/TC029_Status_bar_remains_visible_while_navigating_within_the_main_console_sections.py +47 -0
- build/lib/web_ui/test_delete.py +11 -0
- build/lib/web_ui/test_records.py +16 -0
- build/lib/web_ui/test_records2.py +18 -0
- build/lib/web_ui/test_tub.py +18 -0
- donkeycar/__init__.py +21 -0
- donkeycar/_version.py +1 -0
- donkeycar/benchmarks/tub.py +44 -0
- donkeycar/benchmarks/tub_v2.py +40 -0
- donkeycar/config.py +90 -0
- donkeycar/contrib/__init__.py +0 -0
- donkeycar/contrib/robohat/code-robocarstore.py +186 -0
- donkeycar/contrib/robohat/code.py +188 -0
- donkeycar/contrib/robohat/rear_light.py +44 -0
- donkeycar/geom.py +37 -0
- donkeycar/gym/__init__.py +0 -0
- donkeycar/gym/gym_real.py +89 -0
- donkeycar/gym/remote_controller.py +42 -0
- donkeycar/la.py +623 -0
- donkeycar/management/__init__.py +3 -0
- donkeycar/management/base.py +1046 -0
- donkeycar/management/data_migrator.py +160 -0
- donkeycar/management/graph.py +189 -0
- donkeycar/management/joystick_creator.py +584 -0
- donkeycar/management/makemovie.py +321 -0
- donkeycar/management/train_local.py +50 -0
- donkeycar/management/train_online.py +887 -0
- donkeycar/management/tub_web/base.html +44 -0
- donkeycar/management/tub_web/tub.html +66 -0
- donkeycar/management/tub_web/tubs.html +17 -0
- donkeycar/management/tui.py +1422 -0
- donkeycar/management/ui/__init__.py +0 -0
- donkeycar/management/ui/car_screen.kv +154 -0
- donkeycar/management/ui/car_screen.py +219 -0
- donkeycar/management/ui/common.kv +303 -0
- donkeycar/management/ui/common.py +376 -0
- donkeycar/management/ui/pilot_screen.kv +240 -0
- donkeycar/management/ui/pilot_screen.py +386 -0
- donkeycar/management/ui/rc_file_handler.py +92 -0
- donkeycar/management/ui/train_screen.kv +295 -0
- donkeycar/management/ui/train_screen.py +325 -0
- donkeycar/management/ui/tub_screen.kv +174 -0
- donkeycar/management/ui/tub_screen.py +327 -0
- donkeycar/management/ui/ui.kv +78 -0
- donkeycar/management/ui/ui.py +68 -0
- donkeycar/memory.py +61 -0
- donkeycar/parts/__init__.py +0 -0
- donkeycar/parts/actuator.py +1430 -0
- donkeycar/parts/behavior.py +45 -0
- donkeycar/parts/camera.py +387 -0
- donkeycar/parts/controller.py +1750 -0
- donkeycar/parts/coral.py +93 -0
- donkeycar/parts/cv.py +891 -0
- donkeycar/parts/datastore.py +572 -0
- donkeycar/parts/datastore_v2.py +496 -0
- donkeycar/parts/dgym.py +101 -0
- donkeycar/parts/encoder.py +201 -0
- donkeycar/parts/explode.py +26 -0
- donkeycar/parts/fast_stretch.py +97 -0
- donkeycar/parts/fastai.py +278 -0
- donkeycar/parts/file_watcher.py +28 -0
- donkeycar/parts/fps.py +46 -0
- donkeycar/parts/gps.py +685 -0
- donkeycar/parts/graph.py +43 -0
- donkeycar/parts/image.py +110 -0
- donkeycar/parts/image_transformations.py +574 -0
- donkeycar/parts/imu.py +111 -0
- donkeycar/parts/interpreter.py +365 -0
- donkeycar/parts/keras.py +1133 -0
- donkeycar/parts/kinematics.py +677 -0
- donkeycar/parts/launch.py +48 -0
- donkeycar/parts/led_status.py +145 -0
- donkeycar/parts/leopard_imaging.py +57 -0
- donkeycar/parts/lidar.py +922 -0
- donkeycar/parts/line_follower.py +138 -0
- donkeycar/parts/logger.py +34 -0
- donkeycar/parts/network.py +492 -0
- donkeycar/parts/oak_d.py +381 -0
- donkeycar/parts/object_detector/stop_sign_detector.py +131 -0
- donkeycar/parts/odometer.py +63 -0
- donkeycar/parts/oled.py +161 -0
- donkeycar/parts/path.py +458 -0
- donkeycar/parts/perfmon.py +54 -0
- donkeycar/parts/pigpio_enc.py +92 -0
- donkeycar/parts/pins.py +1065 -0
- donkeycar/parts/pipe.py +8 -0
- donkeycar/parts/pose.py +262 -0
- donkeycar/parts/pytorch/ResNet18.py +105 -0
- donkeycar/parts/pytorch/torch_data.py +161 -0
- donkeycar/parts/pytorch/torch_train.py +60 -0
- donkeycar/parts/pytorch/torch_utils.py +31 -0
- donkeycar/parts/realsense2.py +131 -0
- donkeycar/parts/realsense435i.py +317 -0
- donkeycar/parts/robohat.py +259 -0
- donkeycar/parts/ros.py +44 -0
- donkeycar/parts/salient.py +106 -0
- donkeycar/parts/serial_controller.py +46 -0
- donkeycar/parts/serial_port.py +330 -0
- donkeycar/parts/simulation.py +73 -0
- donkeycar/parts/sombrero.py +27 -0
- donkeycar/parts/tachometer.py +732 -0
- donkeycar/parts/teensy.py +85 -0
- donkeycar/parts/telemetry.py +185 -0
- donkeycar/parts/text_writer.py +125 -0
- donkeycar/parts/tfmini.py +82 -0
- donkeycar/parts/throttle_filter.py +28 -0
- donkeycar/parts/transform.py +182 -0
- donkeycar/parts/tub_v2.py +176 -0
- donkeycar/parts/velocity.py +127 -0
- donkeycar/parts/voice_control/alexa.py +77 -0
- donkeycar/parts/web_controller/templates/base.html +78 -0
- donkeycar/parts/web_controller/templates/base_fpv.html +76 -0
- donkeycar/parts/web_controller/templates/calibrate.html +246 -0
- donkeycar/parts/web_controller/templates/home.html +26 -0
- donkeycar/parts/web_controller/templates/pilots_list.html +23 -0
- donkeycar/parts/web_controller/templates/session.html +156 -0
- donkeycar/parts/web_controller/templates/session_list.html +23 -0
- donkeycar/parts/web_controller/templates/static/bootstrap/3.3.7/css/bootstrap.min.css +6 -0
- donkeycar/parts/web_controller/templates/static/bootstrap/3.3.7/fonts/glyphicons-halflings-regular.ttf +0 -0
- donkeycar/parts/web_controller/templates/static/bootstrap/3.3.7/fonts/glyphicons-halflings-regular.woff +0 -0
- donkeycar/parts/web_controller/templates/static/bootstrap/3.3.7/fonts/glyphicons-halflings-regular.woff2 +0 -0
- donkeycar/parts/web_controller/templates/static/bootstrap/3.3.7/js/bootstrap.min.js +7 -0
- donkeycar/parts/web_controller/templates/static/donkeycar-logo-sideways.png +0 -0
- donkeycar/parts/web_controller/templates/static/img_placeholder.jpg +0 -0
- donkeycar/parts/web_controller/templates/static/jquery-3.1.1.min.js +4 -0
- donkeycar/parts/web_controller/templates/static/main.js +1254 -0
- donkeycar/parts/web_controller/templates/static/nipple.js +1412 -0
- donkeycar/parts/web_controller/templates/static/style.css +143 -0
- donkeycar/parts/web_controller/templates/static/ui/1.12.1/jquery-ui.min.js +13 -0
- donkeycar/parts/web_controller/templates/vehicle.html +284 -0
- donkeycar/parts/web_controller/templates/vehicle_list.html +23 -0
- donkeycar/parts/web_controller/templates/wsTest.html +65 -0
- donkeycar/parts/web_controller/web.py +627 -0
- donkeycar/pipeline/__init__.py +1 -0
- donkeycar/pipeline/augmentations.py +48 -0
- donkeycar/pipeline/database.py +149 -0
- donkeycar/pipeline/sequence.py +174 -0
- donkeycar/pipeline/training.py +229 -0
- donkeycar/pipeline/types.py +229 -0
- donkeycar/templates/arduino_drive.py +67 -0
- donkeycar/templates/basic.py +247 -0
- donkeycar/templates/calibrate.py +133 -0
- donkeycar/templates/calibration_odometry.json +40 -0
- donkeycar/templates/cfg_arduino_drive.py +48 -0
- donkeycar/templates/cfg_basic.py +221 -0
- donkeycar/templates/cfg_complete.py +815 -0
- donkeycar/templates/cfg_cv_control.py +660 -0
- donkeycar/templates/cfg_path_follow.py +719 -0
- donkeycar/templates/cfg_simulator.py +329 -0
- donkeycar/templates/cfg_square.py +83 -0
- donkeycar/templates/complete.py +1358 -0
- donkeycar/templates/cv_control.py +260 -0
- donkeycar/templates/just_drive.py +71 -0
- donkeycar/templates/myconfig.py +128 -0
- donkeycar/templates/path_follow.py +494 -0
- donkeycar/templates/simulator.py +438 -0
- donkeycar/templates/square.py +168 -0
- donkeycar/templates/train.py +77 -0
- donkeycar/tests/__init__.py +1 -0
- donkeycar/tests/pytest.ini +8 -0
- donkeycar/tests/setup.py +84 -0
- donkeycar/tests/test_actuator.py +53 -0
- donkeycar/tests/test_catalog_v2.py +44 -0
- donkeycar/tests/test_circular_buffer.py +124 -0
- donkeycar/tests/test_cli_branding.py +31 -0
- donkeycar/tests/test_controller.py +33 -0
- donkeycar/tests/test_data_migrator.py +154 -0
- donkeycar/tests/test_datastore_v2.py +94 -0
- donkeycar/tests/test_import_side_effects.py +106 -0
- donkeycar/tests/test_keras.py +86 -0
- donkeycar/tests/test_kinematics.py +743 -0
- donkeycar/tests/test_launch.py +91 -0
- donkeycar/tests/test_lidar.py +97 -0
- donkeycar/tests/test_memory.py +68 -0
- donkeycar/tests/test_odometer.py +29 -0
- donkeycar/tests/test_parts.py +1 -0
- donkeycar/tests/test_path.py +290 -0
- donkeycar/tests/test_pipeline.py +168 -0
- donkeycar/tests/test_project_metadata.py +145 -0
- donkeycar/tests/test_robohat.py +247 -0
- donkeycar/tests/test_scripts.py +83 -0
- donkeycar/tests/test_seekable_v2.py +79 -0
- donkeycar/tests/test_tachometer.py +152 -0
- donkeycar/tests/test_telemetry.py +99 -0
- donkeycar/tests/test_template.py +80 -0
- donkeycar/tests/test_torch.py +130 -0
- donkeycar/tests/test_train.py +236 -0
- donkeycar/tests/test_tub_v2.py +76 -0
- donkeycar/tests/test_tubwriter.py +43 -0
- donkeycar/tests/test_tui_backup_restore.py +54 -0
- donkeycar/tests/test_tui_clear_data.py +63 -0
- donkeycar/tests/test_tui_restore.py +76 -0
- donkeycar/tests/test_util_data.py +160 -0
- donkeycar/tests/test_vehicle.py +57 -0
- donkeycar/tests/test_web_controller.py +32 -0
- donkeycar/tests/test_web_socket.py +184 -0
- donkeycar/tests/test_web_ui_branding.py +29 -0
- donkeycar/utilities/TrackSpeedPlanner/static/index.html +734 -0
- donkeycar/utilities/TrackSpeedPlanner/trackeditor.py +404 -0
- donkeycar/utilities/__init__.py +0 -0
- donkeycar/utilities/circular_buffer.py +143 -0
- donkeycar/utilities/deprecated.py +80 -0
- donkeycar/utilities/dk_platform.py +34 -0
- donkeycar/utils.py +622 -0
- donkeycar/vehicle.py +228 -0
- donkeydrifter/__init__.py +57 -0
- donkeydrifter-0.1.0.dist-info/METADATA +214 -0
- donkeydrifter-0.1.0.dist-info/RECORD +1152 -0
- donkeydrifter-0.1.0.dist-info/WHEEL +5 -0
- donkeydrifter-0.1.0.dist-info/entry_points.txt +2 -0
- donkeydrifter-0.1.0.dist-info/licenses/LICENSE +201 -0
- donkeydrifter-0.1.0.dist-info/licenses/NOTICE +21 -0
- donkeydrifter-0.1.0.dist-info/top_level.txt +12 -0
- donkeydrifter-0.1.0.dist-info/zip-safe +1 -0
- parts/drive_api_bridge.py +176 -0
- scripts/convert_to_tflite.py +40 -0
- scripts/convert_to_tub_v2.py +87 -0
- scripts/freeze_model.py +52 -0
- scripts/graph_listener.py +56 -0
- scripts/hsv_picker.py +283 -0
- scripts/migrate_model_names.py +94 -0
- scripts/multi_train.py +59 -0
- scripts/pigpio_donkey.py +74 -0
- scripts/preview_augumentations.py +55 -0
- scripts/profile.py +45 -0
- scripts/profile_coral.py +27 -0
- scripts/remote_cam_view.py +55 -0
- scripts/remote_cam_view_tcp.py +45 -0
- scripts/salient_vis_listener.py +45 -0
- scripts/tflite_convert.py +19 -0
- scripts/tflite_profile.py +48 -0
- tests/test_migration_integration.py +64 -0
- tests/test_model_naming_refactor.py +148 -0
- tests/test_online_trainer_workspace.py +173 -0
- tests/test_restore_logic.py +97 -0
- web_ui/backend/connector_engine.py +230 -0
- web_ui/backend/main.py +35 -0
- web_ui/backend/remote_car_client.py +213 -0
- web_ui/backend/requirements.txt +6 -0
- web_ui/backend/routers/__init__.py +0 -0
- web_ui/backend/routers/arena.py +447 -0
- web_ui/backend/routers/config.py +198 -0
- web_ui/backend/routers/connector.py +249 -0
- web_ui/backend/routers/drive.py +361 -0
- web_ui/backend/routers/trainer.py +341 -0
- web_ui/backend/routers/tub.py +163 -0
- web_ui/backend/tests/test_arena.py +384 -0
- web_ui/backend/tests/test_branding.py +26 -0
- web_ui/backend/tests/test_config.py +28 -0
- web_ui/backend/tests/test_connector.py +371 -0
- web_ui/backend/trainer_engine.py +312 -0
- web_ui/backend/web_online_trainer.py +325 -0
- web_ui/frontend/dist/index.html +358 -0
- web_ui/frontend/eslint.config.js +28 -0
- web_ui/frontend/index.html +24 -0
- web_ui/frontend/node_modules/baseline-browser-mapping/LICENSE.txt +201 -0
- web_ui/frontend/node_modules/cssesc/LICENSE-MIT.txt +20 -0
- web_ui/frontend/node_modules/esquery/license.txt +24 -0
- web_ui/frontend/node_modules/flatted/python/flatted.py +149 -0
- web_ui/frontend/node_modules/jsesc/LICENSE-MIT.txt +20 -0
- web_ui/frontend/node_modules/playwright/ThirdPartyNotices.txt +5042 -0
- web_ui/frontend/node_modules/playwright-core/ThirdPartyNotices.txt +4076 -0
- web_ui/frontend/node_modules/playwright-core/lib/vite/htmlReport/index.html +84 -0
- web_ui/frontend/node_modules/playwright-core/lib/vite/recorder/index.html +29 -0
- web_ui/frontend/node_modules/playwright-core/lib/vite/traceViewer/index.html +43 -0
- web_ui/frontend/node_modules/playwright-core/lib/vite/traceViewer/snapshot.html +21 -0
- web_ui/frontend/node_modules/playwright-core/lib/vite/traceViewer/uiMode.html +17 -0
- web_ui/frontend/node_modules/punycode/LICENSE-MIT.txt +20 -0
- web_ui/frontend/node_modules/tslib/CopyrightNotice.txt +15 -0
- web_ui/frontend/node_modules/tslib/LICENSE.txt +12 -0
- web_ui/frontend/node_modules/tslib/tslib.es6.html +1 -0
- web_ui/frontend/node_modules/tslib/tslib.html +1 -0
- web_ui/frontend/node_modules/typescript/LICENSE.txt +55 -0
- web_ui/frontend/node_modules/typescript/ThirdPartyNoticeText.txt +193 -0
- web_ui/frontend/package-lock.json +4895 -0
- web_ui/frontend/package.json +46 -0
- web_ui/frontend/postcss.config.js +10 -0
- web_ui/frontend/tailwind.config.js +13 -0
- web_ui/frontend/testsprite_tests/TC001_Load_configuration_successfully_using_a_valid_path.py +52 -0
- web_ui/frontend/testsprite_tests/TC002_Show_error_when_configuration_load_fails_for_an_invalid_path.py +52 -0
- web_ui/frontend/testsprite_tests/TC003_Load_button_is_actionable_after_editing_the_config_path.py +63 -0
- web_ui/frontend/testsprite_tests/TC004_Whitespace_trimmed_path_input_still_loads_successfully.py +63 -0
- web_ui/frontend/testsprite_tests/TC005_Attempting_to_load_with_an_empty_config_path_shows_a_visible_failure_state.py +63 -0
- web_ui/frontend/testsprite_tests/TC006_Status_bar_updates_from_previous_state_after_a_successful_load.py +62 -0
- web_ui/frontend/testsprite_tests/TC007_Error_state_is_visible_after_switching_from_a_successful_load_to_an_invalid_path.py +52 -0
- web_ui/frontend/testsprite_tests/TC008_Load_a_valid_tub_from_a_relative_path_and_verify_metadata_is_shown.py +65 -0
- web_ui/frontend/testsprite_tests/TC009_Load_a_non_existent_tub_path_and_verify_error_state_and_status_bar.py +52 -0
- web_ui/frontend/testsprite_tests/TC010_Attempt_to_load_with_an_empty_tub_path_and_verify_an_error_is_shown.py +52 -0
- web_ui/frontend/testsprite_tests/TC011_Verify_loading_indicator_appears_when_starting_a_tub_load.py +68 -0
- web_ui/frontend/testsprite_tests/TC012_Load_a_valid_tub_after_a_failed_load_and_verify_success_replaces_the_error_state.py +52 -0
- web_ui/frontend/testsprite_tests/TC013_Load_a_second_tub_path_and_verify_the_status_bar_updates_to_the_new_record_count.py +53 -0
- web_ui/frontend/testsprite_tests/TC014_Enter_a_tub_path_with_leadingtrailing_spaces_and_verify_load_behavior_is_handled.py +52 -0
- web_ui/frontend/testsprite_tests/TC015_Load_main_page_and_display_current_tub_record_image_and_metadata.py +53 -0
- web_ui/frontend/testsprite_tests/TC016_Next_advances_one_record_and_updates_the_displayed_image.py +58 -0
- web_ui/frontend/testsprite_tests/TC017_Previous_navigates_back_one_record_and_updates_the_displayed_image.py +52 -0
- web_ui/frontend/testsprite_tests/TC018_First_jumps_to_start_of_tub_and_Last_jumps_to_end.py +53 -0
- web_ui/frontend/testsprite_tests/TC019_Render_steering_and_throttle_line_chart_when_tub_data_is_available.py +65 -0
- web_ui/frontend/testsprite_tests/TC020_Empty_chart_placeholder_appears_when_chart_data_is_not_loaded.py +52 -0
- web_ui/frontend/testsprite_tests/TC021_Error_message_is_shown_with_empty_chart_state_when_data_fails_to_load.py +52 -0
- web_ui/frontend/testsprite_tests/TC022_Apply_valid_temporary_filter_and_verify_filtered_record_count_updates.py +52 -0
- web_ui/frontend/testsprite_tests/TC023_Delete_records_by_index_range_with_confirmation_and_verify_success_feedback.py +51 -0
- web_ui/frontend/testsprite_tests/TC024_End_to_end_Apply_filter_then_delete_index_range_and_verify_record_count_and_chart_update.py +52 -0
- web_ui/frontend/testsprite_tests/TC025_Invalid_filter_expression_shows_validation_error_and_does_not_apply_filter.py +51 -0
- web_ui/frontend/testsprite_tests/TC026_Fix_invalid_filter_to_valid_and_successfully_apply_after_seeing_error.py +51 -0
- web_ui/frontend/testsprite_tests/TC027_Cancel_out_of_invalid_filter_state_without_applying_changes.py +51 -0
- web_ui/frontend/testsprite_tests/TC028_Deletion_confirmation_modal_can_be_dismissed_without_deleting.py +51 -0
- web_ui/frontend/testsprite_tests/TC029_Status_bar_remains_visible_while_navigating_within_the_main_console_sections.py +47 -0
- web_ui/frontend/tsconfig.json +36 -0
- web_ui/frontend/vite.config.ts +50 -0
- web_ui/test_delete.py +11 -0
- web_ui/test_records.py +16 -0
- web_ui/test_records2.py +18 -0
- web_ui/test_tub.py +18 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2017 Will Roscoe
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2017 Will Roscoe
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2017 Will Roscoe
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2017 Will Roscoe
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import sys
|
|
3
|
+
import logging
|
|
4
|
+
|
|
5
|
+
from ._version import __version__
|
|
6
|
+
|
|
7
|
+
logging.basicConfig(level=os.environ.get('LOGLEVEL', 'INFO').upper())
|
|
8
|
+
|
|
9
|
+
if sys.version_info.major < 3 or sys.version_info.minor < 11:
|
|
10
|
+
msg = f'Donkey Requires Python 3.11 or greater. You are using {sys.version}'
|
|
11
|
+
raise ValueError(msg)
|
|
12
|
+
|
|
13
|
+
# The default recursion limits in CPython are too small.
|
|
14
|
+
sys.setrecursionlimit(10**5)
|
|
15
|
+
|
|
16
|
+
from .vehicle import Vehicle
|
|
17
|
+
from .memory import Memory
|
|
18
|
+
from . import utils
|
|
19
|
+
from . import config
|
|
20
|
+
from . import contrib
|
|
21
|
+
from .config import load_config
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = '0.1.0'
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import json
|
|
2
|
+
import os
|
|
3
|
+
import shutil
|
|
4
|
+
import timeit
|
|
5
|
+
from pathlib import Path
|
|
6
|
+
|
|
7
|
+
import numpy as np
|
|
8
|
+
|
|
9
|
+
from donkeycar.parts.datastore import Tub
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def benchmark():
|
|
13
|
+
# Change with a non SSD storage path
|
|
14
|
+
path = Path('/media/rahulrav/Cruzer/tub')
|
|
15
|
+
if os.path.exists(path.absolute().as_posix()):
|
|
16
|
+
shutil.rmtree(path)
|
|
17
|
+
|
|
18
|
+
inputs = ['input']
|
|
19
|
+
types = ['int']
|
|
20
|
+
tub = Tub(path.absolute().as_posix(), inputs, types)
|
|
21
|
+
write_count = 1000
|
|
22
|
+
for i in range(write_count):
|
|
23
|
+
record = {'input': i}
|
|
24
|
+
tub.put_record(record)
|
|
25
|
+
|
|
26
|
+
# old tub starts counting at 1
|
|
27
|
+
deletions = set(np.random.randint(1, write_count + 1, 100))
|
|
28
|
+
for index in deletions:
|
|
29
|
+
index = int(index)
|
|
30
|
+
tub.remove_record(index)
|
|
31
|
+
|
|
32
|
+
files = path.glob('*.json')
|
|
33
|
+
for record_file in files:
|
|
34
|
+
contents = record_file.read_text()
|
|
35
|
+
if contents:
|
|
36
|
+
contents = json.loads(contents)
|
|
37
|
+
print('Record %s' % contents)
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
if __name__ == "__main__":
|
|
41
|
+
timer = timeit.Timer(benchmark)
|
|
42
|
+
time_taken = timer.timeit(number=1)
|
|
43
|
+
print('Time taken %s seconds' % time_taken)
|
|
44
|
+
print('\nDone.')
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import shutil
|
|
3
|
+
import timeit
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
|
|
6
|
+
import numpy as np
|
|
7
|
+
|
|
8
|
+
from donkeycar.parts.tub_v2 import Tub
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def benchmark():
|
|
12
|
+
# Change to a non SSD storage path
|
|
13
|
+
path = Path('/media/rahulrav/Cruzer/benchmark')
|
|
14
|
+
|
|
15
|
+
# Recreate paths
|
|
16
|
+
if os.path.exists(path.absolute().as_posix()):
|
|
17
|
+
shutil.rmtree(path)
|
|
18
|
+
|
|
19
|
+
inputs = ['input']
|
|
20
|
+
types = ['int']
|
|
21
|
+
tub = Tub(path.as_posix(), inputs, types, max_catalog_len=1000)
|
|
22
|
+
write_count = 1000
|
|
23
|
+
for i in range(write_count):
|
|
24
|
+
record = {'input': i}
|
|
25
|
+
tub.write_record(record)
|
|
26
|
+
|
|
27
|
+
deletions = np.random.randint(0, write_count, 100)
|
|
28
|
+
tub.delete_records(deletions)
|
|
29
|
+
|
|
30
|
+
for record in tub:
|
|
31
|
+
print('Record %s' % record)
|
|
32
|
+
|
|
33
|
+
tub.close()
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
if __name__ == "__main__":
|
|
37
|
+
timer = timeit.Timer(benchmark)
|
|
38
|
+
time_taken = timer.timeit(number=1)
|
|
39
|
+
print('Time taken %s seconds' % time_taken)
|
|
40
|
+
print('\nDone.')
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
"""
|
|
3
|
+
Created on Wed Sep 13 21:27:44 2017
|
|
4
|
+
|
|
5
|
+
@author: wroscoe
|
|
6
|
+
"""
|
|
7
|
+
import os
|
|
8
|
+
import types
|
|
9
|
+
import logging
|
|
10
|
+
|
|
11
|
+
logger = logging.getLogger(__name__)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class Config:
|
|
15
|
+
|
|
16
|
+
def from_pyfile(self, filename):
|
|
17
|
+
d = types.ModuleType('config')
|
|
18
|
+
d.__file__ = filename
|
|
19
|
+
try:
|
|
20
|
+
with open(filename, mode='rb') as config_file:
|
|
21
|
+
exec(compile(config_file.read(), filename, 'exec'), d.__dict__)
|
|
22
|
+
except IOError as e:
|
|
23
|
+
e.strerror = 'Unable to load configuration file (%s)' % e.strerror
|
|
24
|
+
raise
|
|
25
|
+
self.from_object(d)
|
|
26
|
+
return True
|
|
27
|
+
|
|
28
|
+
def from_object(self, obj):
|
|
29
|
+
for key in dir(obj):
|
|
30
|
+
if key.isupper():
|
|
31
|
+
setattr(self, key, getattr(obj, key))
|
|
32
|
+
|
|
33
|
+
def from_dict(self, d, keys=[]):
|
|
34
|
+
msg = 'Overwriting config with: '
|
|
35
|
+
for k, v in d.items():
|
|
36
|
+
if k.isupper():
|
|
37
|
+
if k in keys or not keys:
|
|
38
|
+
setattr(self, k, v)
|
|
39
|
+
msg += f'{k}:{v}, '
|
|
40
|
+
logger.info(msg)
|
|
41
|
+
|
|
42
|
+
def __str__(self):
|
|
43
|
+
result = []
|
|
44
|
+
for key in dir(self):
|
|
45
|
+
if key.isupper():
|
|
46
|
+
result.append((key, getattr(self, key)))
|
|
47
|
+
return str(result)
|
|
48
|
+
|
|
49
|
+
def show(self):
|
|
50
|
+
for attr in dir(self):
|
|
51
|
+
if attr.isupper():
|
|
52
|
+
print(attr, ":", getattr(self, attr))
|
|
53
|
+
|
|
54
|
+
def to_pyfile(self, path):
|
|
55
|
+
lines = []
|
|
56
|
+
for attr in dir(self):
|
|
57
|
+
if attr.isupper():
|
|
58
|
+
v = getattr(self, attr)
|
|
59
|
+
if isinstance(v, str):
|
|
60
|
+
v = f'"{v}"'
|
|
61
|
+
lines.append(f'{attr} = {v}{os.linesep}')
|
|
62
|
+
with open(path, 'w') as f:
|
|
63
|
+
f.writelines(lines)
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
def load_config(config_path=None, myconfig="myconfig.py"):
|
|
67
|
+
|
|
68
|
+
if config_path is None:
|
|
69
|
+
main_path = os.getcwd()
|
|
70
|
+
config_path = os.path.join(main_path, 'config.py')
|
|
71
|
+
if not os.path.exists(config_path):
|
|
72
|
+
local_config = os.path.join(os.path.curdir, 'config.py')
|
|
73
|
+
if os.path.exists(local_config):
|
|
74
|
+
config_path = local_config
|
|
75
|
+
|
|
76
|
+
logger.info(f'loading config file: {config_path}')
|
|
77
|
+
cfg = Config()
|
|
78
|
+
cfg.from_pyfile(config_path)
|
|
79
|
+
|
|
80
|
+
# look for the optional myconfig.py in the same path.
|
|
81
|
+
personal_cfg_path = config_path.replace("config.py", myconfig)
|
|
82
|
+
if os.path.exists(personal_cfg_path):
|
|
83
|
+
logger.info(f"loading personal config over-rides from {myconfig}")
|
|
84
|
+
personal_cfg = Config()
|
|
85
|
+
personal_cfg.from_pyfile(personal_cfg_path)
|
|
86
|
+
cfg.from_object(personal_cfg)
|
|
87
|
+
else:
|
|
88
|
+
logger.warning(f"personal config: file not found {personal_cfg_path}")
|
|
89
|
+
|
|
90
|
+
return cfg
|
|
File without changes
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
# Donkey Car Driver for Robotics Masters Robo HAT MM1
|
|
2
|
+
#
|
|
3
|
+
# Notes:
|
|
4
|
+
# This is to be run using CircuitPython 5.0
|
|
5
|
+
# Date: 15/05/2019
|
|
6
|
+
# Updated: 20/02/2020
|
|
7
|
+
#
|
|
8
|
+
#
|
|
9
|
+
|
|
10
|
+
import time
|
|
11
|
+
import board
|
|
12
|
+
import busio
|
|
13
|
+
from rear_light import RearLight
|
|
14
|
+
|
|
15
|
+
from digitalio import DigitalInOut, Direction
|
|
16
|
+
from pulseio import PWMOut, PulseIn, PulseOut
|
|
17
|
+
|
|
18
|
+
import adafruit_logging as logging
|
|
19
|
+
logger = logging.getLogger('code')
|
|
20
|
+
logger.setLevel(logging.INFO)
|
|
21
|
+
|
|
22
|
+
# Customisation these variables
|
|
23
|
+
SMOOTHING_INTERVAL_IN_S = 0.025
|
|
24
|
+
DEBUG = False
|
|
25
|
+
ACCEL_RATE = 10
|
|
26
|
+
|
|
27
|
+
def servo_duty_cycle(pulse_ms, frequency=60):
|
|
28
|
+
"""
|
|
29
|
+
Formula for working out the servo duty_cycle at 16 bit input
|
|
30
|
+
"""
|
|
31
|
+
period_ms = 1.0 / frequency * 1000.0
|
|
32
|
+
duty_cycle = int(pulse_ms / 1000 / (period_ms / 65535.0))
|
|
33
|
+
return duty_cycle
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def state_changed(control):
|
|
37
|
+
"""
|
|
38
|
+
Reads the RC channel and smooths value
|
|
39
|
+
"""
|
|
40
|
+
prev = control.value
|
|
41
|
+
control.channel.pause()
|
|
42
|
+
for i in range(0, len(control.channel)):
|
|
43
|
+
val = control.channel[i]
|
|
44
|
+
# prevent ranges outside of control space
|
|
45
|
+
if(val < 1000 or val > 2000):
|
|
46
|
+
continue
|
|
47
|
+
# set new value
|
|
48
|
+
control.value = (control.value + val) / 2
|
|
49
|
+
|
|
50
|
+
# if DEBUG:
|
|
51
|
+
# print("%f\t%s (%i): %i (%i)" % (time.monotonic(), control.name, len(
|
|
52
|
+
# control.channel), control.value, servo_duty_cycle(control.value)))
|
|
53
|
+
control.channel.clear()
|
|
54
|
+
control.channel.resume()
|
|
55
|
+
|
|
56
|
+
class Control:
|
|
57
|
+
"""
|
|
58
|
+
Class for a RC Control Channel
|
|
59
|
+
"""
|
|
60
|
+
|
|
61
|
+
def __init__(self, name, servo, channel, value):
|
|
62
|
+
self.name = name
|
|
63
|
+
self.servo = servo
|
|
64
|
+
self.channel = channel
|
|
65
|
+
self.value = value
|
|
66
|
+
self.servo.duty_cycle = servo_duty_cycle(value)
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
# set up on-board LED
|
|
70
|
+
led = DigitalInOut(board.LED)
|
|
71
|
+
led.direction = Direction.OUTPUT
|
|
72
|
+
|
|
73
|
+
# set up serial UART to Raspberry Pi
|
|
74
|
+
# note UART(TX, RX, baudrate)
|
|
75
|
+
uart = busio.UART(board.TX1, board.RX1, baudrate=115200, timeout=0.001)
|
|
76
|
+
|
|
77
|
+
# set up servos
|
|
78
|
+
steering_pwm = PWMOut(board.SERVO2, duty_cycle=2 ** 15, frequency=60)
|
|
79
|
+
throttle_pwm = PWMOut(board.SERVO1, duty_cycle=2 ** 15, frequency=60)
|
|
80
|
+
|
|
81
|
+
# set up RC channels. NOTE: input channels are RCC3 & RCC4 (not RCC1 & RCC2)
|
|
82
|
+
steering_channel = PulseIn(board.RCC4, maxlen=64, idle_state=0)
|
|
83
|
+
throttle_channel = PulseIn(board.RCC3, maxlen=64, idle_state=0)
|
|
84
|
+
|
|
85
|
+
# setup Control objects. 1500 pulse is off and center steering
|
|
86
|
+
steering = Control("Steering", steering_pwm, steering_channel, 1500)
|
|
87
|
+
throttle = Control("Throttle", throttle_pwm, throttle_channel, 1500)
|
|
88
|
+
|
|
89
|
+
# Setup Neopixels
|
|
90
|
+
rear_light = RearLight()
|
|
91
|
+
|
|
92
|
+
# Hardware Notification: starting
|
|
93
|
+
logger.info("preparing to start...")
|
|
94
|
+
for i in range(0, 2):
|
|
95
|
+
led.value = True
|
|
96
|
+
time.sleep(0.5)
|
|
97
|
+
led.value = False
|
|
98
|
+
time.sleep(0.5)
|
|
99
|
+
rear_light.turn_on_brake_light()
|
|
100
|
+
time.sleep(0.1)
|
|
101
|
+
rear_light.turn_off_brake_light()
|
|
102
|
+
time.sleep(0.1)
|
|
103
|
+
|
|
104
|
+
last_update = time.monotonic()
|
|
105
|
+
|
|
106
|
+
# GOTO: main()
|
|
107
|
+
def main():
|
|
108
|
+
global last_update
|
|
109
|
+
|
|
110
|
+
data = bytearray('')
|
|
111
|
+
datastr = ''
|
|
112
|
+
last_input = 0
|
|
113
|
+
steering_val = steering.value
|
|
114
|
+
throttle_val = throttle.value
|
|
115
|
+
|
|
116
|
+
while True:
|
|
117
|
+
# only update every smoothing interval (to avoid jumping)
|
|
118
|
+
if(last_update + SMOOTHING_INTERVAL_IN_S > time.monotonic()):
|
|
119
|
+
continue
|
|
120
|
+
last_update = time.monotonic()
|
|
121
|
+
|
|
122
|
+
# check for new RC values (channel will contain data)
|
|
123
|
+
if(len(throttle.channel) != 0):
|
|
124
|
+
# state_changed_throttle(throttle)
|
|
125
|
+
state_changed(throttle)
|
|
126
|
+
|
|
127
|
+
if(len(steering.channel) != 0):
|
|
128
|
+
state_changed(steering)
|
|
129
|
+
|
|
130
|
+
logger.info("Get: steering=%i, throttle=%i" % (int(steering.value), int(throttle.value)))
|
|
131
|
+
|
|
132
|
+
# write the RC values to the RPi Serial
|
|
133
|
+
uart.write(b"%i, %i\r\n" % (int(steering.value), int(throttle.value)))
|
|
134
|
+
|
|
135
|
+
while True:
|
|
136
|
+
# wait for data on the serial port and read 1 byte
|
|
137
|
+
byte = uart.read(1)
|
|
138
|
+
|
|
139
|
+
# if no data, break and continue with RC control
|
|
140
|
+
if(byte == None):
|
|
141
|
+
break
|
|
142
|
+
last_input = time.monotonic()
|
|
143
|
+
|
|
144
|
+
logger.debug("Read from UART: %s" % (byte))
|
|
145
|
+
|
|
146
|
+
# if data is recieved, check if it is the end of a stream
|
|
147
|
+
if(byte == b'\r'):
|
|
148
|
+
data = bytearray('')
|
|
149
|
+
# datastr = ''
|
|
150
|
+
break
|
|
151
|
+
|
|
152
|
+
data[len(data):len(data)] = byte
|
|
153
|
+
|
|
154
|
+
# convert bytearray to string
|
|
155
|
+
datastr = ''.join([chr(c) for c in data]).strip()
|
|
156
|
+
|
|
157
|
+
# if we make it here, there is serial data from the previous step
|
|
158
|
+
if(len(datastr) >= 10):
|
|
159
|
+
steering_val = steering.value
|
|
160
|
+
throttle_val = throttle.value
|
|
161
|
+
try:
|
|
162
|
+
steering_val= int(datastr[:4])
|
|
163
|
+
throttle_val = int(datastr[-4:])
|
|
164
|
+
except ValueError:
|
|
165
|
+
None
|
|
166
|
+
|
|
167
|
+
data = bytearray('')
|
|
168
|
+
datastr = ''
|
|
169
|
+
last_input = time.monotonic()
|
|
170
|
+
logger.info("Set: steering=%i, throttle=%i" % (steering_val, throttle_val))
|
|
171
|
+
|
|
172
|
+
if(last_input + 10 < time.monotonic()):
|
|
173
|
+
# set the servo for RC control
|
|
174
|
+
steering.servo.duty_cycle = servo_duty_cycle(steering.value)
|
|
175
|
+
throttle.servo.duty_cycle = servo_duty_cycle(throttle.value)
|
|
176
|
+
rear_light.run(steering.value, throttle.value)
|
|
177
|
+
else:
|
|
178
|
+
# set the servo for serial data (recieved)
|
|
179
|
+
steering.servo.duty_cycle = servo_duty_cycle(steering_val)
|
|
180
|
+
throttle.servo.duty_cycle = servo_duty_cycle(throttle_val)
|
|
181
|
+
rear_light.run(steering_val, throttle_val)
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
# Run
|
|
185
|
+
logger.info("Run!")
|
|
186
|
+
main()
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
# Donkey Car Driver for Robotics Masters Robo HAT MM1
|
|
2
|
+
#
|
|
3
|
+
# Notes:
|
|
4
|
+
# This is to be run using CircuitPython 5.3
|
|
5
|
+
# Date: 15/05/2019
|
|
6
|
+
# Updated: 20/02/2020
|
|
7
|
+
# Updated: 8/03/2020 (sctse999)
|
|
8
|
+
# Updated: 11/05/2020 (wallarug)
|
|
9
|
+
#
|
|
10
|
+
#
|
|
11
|
+
|
|
12
|
+
import time
|
|
13
|
+
import board
|
|
14
|
+
import busio
|
|
15
|
+
|
|
16
|
+
from digitalio import DigitalInOut, Direction
|
|
17
|
+
from pulseio import PWMOut, PulseIn, PulseOut
|
|
18
|
+
|
|
19
|
+
import adafruit_logging as logging
|
|
20
|
+
logger = logging.getLogger('code')
|
|
21
|
+
logger.setLevel(logging.INFO)
|
|
22
|
+
|
|
23
|
+
# Customisation these variables
|
|
24
|
+
DEBUG = False
|
|
25
|
+
USB_SERIAL = False
|
|
26
|
+
SMOOTHING_INTERVAL_IN_S = 0.025
|
|
27
|
+
ACCEL_RATE = 10
|
|
28
|
+
|
|
29
|
+
## cannot have DEBUG and USB_SERIAL
|
|
30
|
+
if USB_SERIAL:
|
|
31
|
+
DEBUG = False
|
|
32
|
+
|
|
33
|
+
## functions
|
|
34
|
+
def servo_duty_cycle(pulse_ms, frequency = 60):
|
|
35
|
+
"""
|
|
36
|
+
Formula for working out the servo duty_cycle at 16 bit input
|
|
37
|
+
"""
|
|
38
|
+
period_ms = 1.0 / frequency * 1000.0
|
|
39
|
+
duty_cycle = int(pulse_ms / 1000 / (period_ms / 65535.0))
|
|
40
|
+
return duty_cycle
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def state_changed(control):
|
|
44
|
+
"""
|
|
45
|
+
Reads the RC channel and smooths value
|
|
46
|
+
"""
|
|
47
|
+
control.channel.pause()
|
|
48
|
+
for i in range(0, len(control.channel)):
|
|
49
|
+
val = control.channel[i]
|
|
50
|
+
# prevent ranges outside of control space
|
|
51
|
+
if(val < 1000 or val > 2000):
|
|
52
|
+
continue
|
|
53
|
+
# set new value
|
|
54
|
+
control.value = (control.value + val) / 2
|
|
55
|
+
|
|
56
|
+
if DEBUG:
|
|
57
|
+
logger.debug("%f\t%s (%i): %i (%i)" % (time.monotonic(), control.name, len(
|
|
58
|
+
control.channel), control.value, servo_duty_cycle(control.value)))
|
|
59
|
+
control.channel.clear()
|
|
60
|
+
control.channel.resume()
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
class Control:
|
|
64
|
+
"""
|
|
65
|
+
Class for a RC Control Channel
|
|
66
|
+
"""
|
|
67
|
+
|
|
68
|
+
def __init__(self, name, servo, channel, value):
|
|
69
|
+
self.name = name
|
|
70
|
+
self.servo = servo
|
|
71
|
+
self.channel = channel
|
|
72
|
+
self.value = value
|
|
73
|
+
self.servo.duty_cycle = servo_duty_cycle(value)
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
# set up on-board LED
|
|
77
|
+
led = DigitalInOut(board.LED)
|
|
78
|
+
led.direction = Direction.OUTPUT
|
|
79
|
+
|
|
80
|
+
# set up serial UART to Raspberry Pi
|
|
81
|
+
# note UART(TX, RX, baudrate)
|
|
82
|
+
uart = busio.UART(board.TX1, board.RX1, baudrate=115200, timeout=0.001)
|
|
83
|
+
|
|
84
|
+
# set up servos
|
|
85
|
+
steering_pwm = PWMOut(board.SERVO2, duty_cycle=2 ** 15, frequency=60)
|
|
86
|
+
throttle_pwm = PWMOut(board.SERVO1, duty_cycle=2 ** 15, frequency=60)
|
|
87
|
+
|
|
88
|
+
# set up RC channels. NOTE: input channels are RCC3 & RCC4 (not RCC1 & RCC2)
|
|
89
|
+
steering_channel = PulseIn(board.RCC4, maxlen=64, idle_state=0)
|
|
90
|
+
throttle_channel = PulseIn(board.RCC3, maxlen=64, idle_state=0)
|
|
91
|
+
|
|
92
|
+
# setup Control objects. 1500 pulse is off and center steering
|
|
93
|
+
steering = Control("Steering", steering_pwm, steering_channel, 1500)
|
|
94
|
+
throttle = Control("Throttle", throttle_pwm, throttle_channel, 1500)
|
|
95
|
+
|
|
96
|
+
# Hardware Notification: starting
|
|
97
|
+
logger.info("preparing to start...")
|
|
98
|
+
for i in range(0, 2):
|
|
99
|
+
led.value = True
|
|
100
|
+
time.sleep(0.5)
|
|
101
|
+
led.value = False
|
|
102
|
+
time.sleep(0.5)
|
|
103
|
+
|
|
104
|
+
last_update = time.monotonic()
|
|
105
|
+
|
|
106
|
+
# GOTO: main()
|
|
107
|
+
def main():
|
|
108
|
+
global last_update
|
|
109
|
+
|
|
110
|
+
data = bytearray('')
|
|
111
|
+
datastr = ''
|
|
112
|
+
last_input = 0
|
|
113
|
+
steering_val = steering.value
|
|
114
|
+
throttle_val = throttle.value
|
|
115
|
+
|
|
116
|
+
while True:
|
|
117
|
+
# only update every smoothing interval (to avoid jumping)
|
|
118
|
+
if(last_update + SMOOTHING_INTERVAL_IN_S > time.monotonic()):
|
|
119
|
+
continue
|
|
120
|
+
last_update = time.monotonic()
|
|
121
|
+
|
|
122
|
+
# check for new RC values (channel will contain data)
|
|
123
|
+
if(len(throttle.channel) != 0):
|
|
124
|
+
state_changed(throttle)
|
|
125
|
+
|
|
126
|
+
if(len(steering.channel) != 0):
|
|
127
|
+
state_changed(steering)
|
|
128
|
+
|
|
129
|
+
if DEBUG:
|
|
130
|
+
logger.info("Get: steering=%i, throttle=%i" % (int(steering.value), int(throttle.value)))
|
|
131
|
+
|
|
132
|
+
if(USB_SERIAL):
|
|
133
|
+
# simulator USB
|
|
134
|
+
print("%i, %i" % (int(steering.value), int(throttle.value)))
|
|
135
|
+
else:
|
|
136
|
+
# write the RC values to the RPi Serial
|
|
137
|
+
uart.write(b"%i, %i\r\n" % (int(steering.value), int(throttle.value)))
|
|
138
|
+
|
|
139
|
+
while True:
|
|
140
|
+
# wait for data on the serial port and read 1 byte
|
|
141
|
+
byte = uart.read(1)
|
|
142
|
+
|
|
143
|
+
# if no data, break and continue with RC control
|
|
144
|
+
if(byte == None):
|
|
145
|
+
break
|
|
146
|
+
last_input = time.monotonic()
|
|
147
|
+
|
|
148
|
+
if (DEBUG):
|
|
149
|
+
logger.debug("Read from UART: %s" % (byte))
|
|
150
|
+
|
|
151
|
+
# if data is recieved, check if it is the end of a stream
|
|
152
|
+
if(byte == b'\r'):
|
|
153
|
+
data = bytearray('')
|
|
154
|
+
break
|
|
155
|
+
|
|
156
|
+
data[len(data):len(data)] = byte
|
|
157
|
+
|
|
158
|
+
# convert bytearray to string
|
|
159
|
+
datastr = ''.join([chr(c) for c in data]).strip()
|
|
160
|
+
|
|
161
|
+
# if we make it here, there is serial data from the previous step
|
|
162
|
+
if(len(datastr) >= 10):
|
|
163
|
+
steering_val = steering.value
|
|
164
|
+
throttle_val = throttle.value
|
|
165
|
+
try:
|
|
166
|
+
steering_val = int(datastr[:4])
|
|
167
|
+
throttle_val = int(datastr[-4:])
|
|
168
|
+
except ValueError:
|
|
169
|
+
None
|
|
170
|
+
|
|
171
|
+
data = bytearray('')
|
|
172
|
+
datastr = ''
|
|
173
|
+
last_input = time.monotonic()
|
|
174
|
+
logger.info("Set: steering=%i, throttle=%i" % (steering_val, throttle_val))
|
|
175
|
+
|
|
176
|
+
if(last_input + 10 < time.monotonic()):
|
|
177
|
+
# set the servo for RC control
|
|
178
|
+
steering.servo.duty_cycle = servo_duty_cycle(steering.value)
|
|
179
|
+
throttle.servo.duty_cycle = servo_duty_cycle(throttle.value)
|
|
180
|
+
else:
|
|
181
|
+
# set the servo for serial data (recieved)
|
|
182
|
+
steering.servo.duty_cycle = servo_duty_cycle(steering_val)
|
|
183
|
+
throttle.servo.duty_cycle = servo_duty_cycle(throttle_val)
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
# Run
|
|
187
|
+
logger.info("Run!")
|
|
188
|
+
main()
|