bluer-ugv 7.579.1__tar.gz → 7.616.1__tar.gz
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.
Potentially problematic release.
This version of bluer-ugv might be problematic. Click here for more details.
- {bluer_ugv-7.579.1/bluer_ugv.egg-info → bluer_ugv-7.616.1}/PKG-INFO +2 -2
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/README.md +1 -1
- bluer_ugv-7.616.1/bluer_ugv/.abcli/swallow/git/rm_keys.sh +27 -0
- bluer_ugv-7.616.1/bluer_ugv/README/swallow/digital/algo/__init__.py +17 -0
- bluer_ugv-7.616.1/bluer_ugv/README/swallow/digital/algo/driving.py +5 -0
- bluer_ugv-7.616.1/bluer_ugv/README/swallow/digital/algo/tracking.py +53 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/__init__.py +1 -1
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/swallow/__main__.py +9 -2
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/swallow/debug.py +8 -4
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/swallow/session/classical/camera/generic.py +10 -3
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/swallow/session/classical/camera/tracking.py +26 -5
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/swallow/targeting.py +11 -4
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1/bluer_ugv.egg-info}/PKG-INFO +2 -2
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv.egg-info/SOURCES.txt +2 -0
- bluer_ugv-7.579.1/bluer_ugv/.abcli/swallow/git/rm_keys.sh +0 -29
- bluer_ugv-7.579.1/bluer_ugv/README/swallow/digital/algo/__init__.py +0 -28
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/LICENSE +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/MANIFEST.in +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/.abcli/abcli.sh +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/.abcli/actions.sh +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/.abcli/aka.sh +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/.abcli/alias.sh +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/.abcli/bluer_ugv.sh +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/.abcli/swallow/dataset/combine.sh +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/.abcli/swallow/dataset/download.sh +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/.abcli/swallow/dataset/edit.sh +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/.abcli/swallow/dataset/list.sh +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/.abcli/swallow/dataset/upload.sh +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/.abcli/swallow/dataset.sh +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/.abcli/swallow/debug.sh +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/.abcli/swallow/env/cp.sh +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/.abcli/swallow/env/list.sh +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/.abcli/swallow/env/set.sh +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/.abcli/swallow/env.sh +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/.abcli/swallow/git.sh +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/.abcli/swallow/keyboard/test.sh +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/.abcli/swallow/keyboard.sh +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/.abcli/swallow/select_target.sh +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/.abcli/swallow/session.sh +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/.abcli/swallow/ultrasonic/review.sh +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/.abcli/swallow/ultrasonic/test.sh +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/.abcli/swallow/ultrasonic.sh +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/.abcli/swallow/video/play.sh +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/.abcli/swallow/video/playlist/cat.sh +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/.abcli/swallow/video/playlist/download.sh +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/.abcli/swallow/video/playlist/edit.sh +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/.abcli/swallow/video/playlist/upload.sh +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/.abcli/swallow/video/playlist.sh +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/.abcli/swallow/video.sh +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/.abcli/swallow.sh +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/.abcli/tests/README.sh +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/.abcli/tests/help.sh +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/.abcli/tests/swallow_dataset_combine.sh +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/.abcli/tests/swallow_dataset_combine_explicit.sh +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/.abcli/tests/swallow_dataset_combine_sequence.sh +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/.abcli/tests/swallow_dataset_download_upload.sh +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/.abcli/tests/swallow_dataset_edit.sh +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/.abcli/tests/swallow_dataset_list.sh +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/.abcli/tests/swallow_video_play.sh +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/.abcli/tests/swallow_video_playlist.sh +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/.abcli/tests/ultrasonic_sensor_review.sh +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/.abcli/tests/version.sh +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/.abcli/ugv/git.sh +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/README/__init__.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/README/alias.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/README/arzhang/__init__.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/README/arzhang/algo.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/README/arzhang/consts.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/README/arzhang/design.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/README/arzhang/flag.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/README/arzhang/items.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/README/beast.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/README/build.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/README/computer/__init__.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/README/computer/box.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/README/computer/docs.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/README/computer/power.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/README/computer/schematics.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/README/computer/shield/__init__.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/README/computer/shield/docs.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/README/computer/shield/testing.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/README/computer/shield/v1.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/README/computer/shield/v2.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/README/computer/testing.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/README/consts.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/README/eagle/__init__.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/README/eagle/consts.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/README/eagle/items.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/README/fire/__init__.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/README/fire/consts.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/README/fire/items.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/README/items.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/README/rangin/__init__.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/README/rangin/consts.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/README/rangin/items.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/README/ravin/__init__.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/README/ravin/consts.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/README/ravin/items.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/README/releases.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/README/root.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/README/shortcuts.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/README/swallow/__init__.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/README/swallow/analog.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/README/swallow/consts.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/README/swallow/digital/__init__.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/README/swallow/digital/algo/navigation.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/README/swallow/digital/algo/yolo.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/README/swallow/digital/design/__init__.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/README/swallow/digital/design/mechanical.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/README/swallow/digital/design/parts.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/README/swallow/digital/design/ultrasonic_sensor.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/README/swallow/items.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/README/ugvs/__init__.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/README/ugvs/comparison/__init__.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/README/ugvs/comparison/build.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/README/ugvs/comparison/features/DYI.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/README/ugvs/comparison/features/__init__.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/README/ugvs/comparison/features/classes.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/README/ugvs/comparison/features/concealment.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/README/ugvs/comparison/features/control.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/README/ugvs/comparison/features/cost.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/README/ugvs/comparison/features/db.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/README/ugvs/comparison/features/payload.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/README/ugvs/comparison/features/ps.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/README/ugvs/comparison/features/range.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/README/ugvs/comparison/features/sanction_proof.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/README/ugvs/comparison/features/size.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/README/ugvs/comparison/features/speed.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/README/ugvs/comparison/features/swarm.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/README/ugvs/comparison/features/uv_delivery.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/README/ugvs/comparison/references/__init__.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/README/ugvs/comparison/references/classes.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/README/ugvs/comparison/references/db.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/README/ugvs/comparison/ugvs/__init__.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/README/ugvs/comparison/ugvs/classes.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/README/ugvs/comparison/ugvs/db.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/README/ugvs/db.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/README/ugvs/docs.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/__main__.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/assets/comparison.html +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/config.env +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/designs/__init__.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/designs/eagle/__init__.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/designs/eagle/parts.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/designs/fire/__init__.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/designs/fire/parts.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/designs/rangin/__init__.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/designs/rangin/parts.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/designs/ravin/__init__.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/designs/ravin/ravin3/__init__.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/designs/ravin/ravin3/parts.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/designs/ravin/ravin4/__init__.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/designs/ravin/ravin4/parts.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/env.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/help/__init__.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/help/__main__.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/help/functions.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/help/git.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/help/swallow/__init__.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/help/swallow/dataset.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/help/swallow/debug.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/help/swallow/env.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/help/swallow/git.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/help/swallow/keyboard.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/help/swallow/select_target.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/help/swallow/ultrasonic_sensor.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/help/swallow/video/__init__.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/help/swallow/video/functions.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/help/swallow/video/playlist.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/host.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/logger.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/sample.env +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/swallow/__init__.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/swallow/dataset/__init__.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/swallow/dataset/__main__.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/swallow/dataset/combination.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/swallow/session/__init__.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/swallow/session/__main__.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/swallow/session/classical/__init__.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/swallow/session/classical/camera/__init__.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/swallow/session/classical/camera/navigation.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/swallow/session/classical/camera/void.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/swallow/session/classical/camera/yolo.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/swallow/session/classical/keyboard/__init__.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/swallow/session/classical/keyboard/__main__.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/swallow/session/classical/keyboard/classes.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/swallow/session/classical/keyboard/keys.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/swallow/session/classical/keyboard/testing.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/swallow/session/classical/leds.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/swallow/session/classical/mode.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/swallow/session/classical/motor/__init__.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/swallow/session/classical/motor/generic.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/swallow/session/classical/motor/left.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/swallow/session/classical/motor/rear.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/swallow/session/classical/motor/right.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/swallow/session/classical/motor/steering.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/swallow/session/classical/mousepad.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/swallow/session/classical/position.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/swallow/session/classical/push_button.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/swallow/session/classical/screen/__init__.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/swallow/session/classical/screen/classes.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/swallow/session/classical/screen/video/__init__.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/swallow/session/classical/screen/video/__main__.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/swallow/session/classical/screen/video/engine.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/swallow/session/classical/screen/video/player.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/swallow/session/classical/screen/video/playlist.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/swallow/session/classical/session.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/swallow/session/classical/setpoint/__init__.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/swallow/session/classical/setpoint/classes.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/swallow/session/classical/setpoint/steering.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/swallow/session/classical/ultrasonic_sensor/__init__.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/swallow/session/classical/ultrasonic_sensor/__main__.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/swallow/session/classical/ultrasonic_sensor/classes.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/swallow/session/classical/ultrasonic_sensor/consts.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/swallow/session/classical/ultrasonic_sensor/detection.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/swallow/session/classical/ultrasonic_sensor/detection_list.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/swallow/session/classical/ultrasonic_sensor/log.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/swallow/session/classical/ultrasonic_sensor/pack.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/swallow/session/classical/ultrasonic_sensor/review.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/swallow/session/classical/ultrasonic_sensor/sensor.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/swallow/session/classical/ultrasonic_sensor/testing.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/swallow/session/functions.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/urls.py +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv.egg-info/dependency_links.txt +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv.egg-info/requires.txt +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv.egg-info/top_level.txt +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/pyproject.toml +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/requirements.txt +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/setup.cfg +0 -0
- {bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/setup.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: bluer_ugv
|
|
3
|
-
Version: 7.
|
|
3
|
+
Version: 7.616.1
|
|
4
4
|
Summary: 🐬 AI x UGV.
|
|
5
5
|
Home-page: https://github.com/kamangir/bluer-ugv
|
|
6
6
|
Author: Arash Abadpour (Kamangir)
|
|
@@ -64,7 +64,7 @@ pip install bluer_ugv
|
|
|
64
64
|
|
|
65
65
|
[](https://github.com/kamangir/bluer-ugv/actions/workflows/pylint.yml) [](https://github.com/kamangir/bluer-ugv/actions/workflows/pytest.yml) [](https://github.com/kamangir/bluer-ugv/actions/workflows/bashtest.yml) [](https://pypi.org/project/bluer-ugv/) [](https://pypistats.org/packages/bluer-ugv)
|
|
66
66
|
|
|
67
|
-
built by 🌀 [`bluer README`](https://github.com/kamangir/bluer-objects/tree/main/bluer_objects/README), based on 🐬 [`bluer_ugv-7.
|
|
67
|
+
built by 🌀 [`bluer README`](https://github.com/kamangir/bluer-objects/tree/main/bluer_objects/README), based on 🐬 [`bluer_ugv-7.616.1`](https://github.com/kamangir/bluer-ugv).
|
|
68
68
|
|
|
69
69
|
|
|
70
70
|
built by 🌀 [`blueness-3.118.1`](https://github.com/kamangir/blueness).
|
|
@@ -35,5 +35,5 @@ pip install bluer_ugv
|
|
|
35
35
|
|
|
36
36
|
[](https://github.com/kamangir/bluer-ugv/actions/workflows/pylint.yml) [](https://github.com/kamangir/bluer-ugv/actions/workflows/pytest.yml) [](https://github.com/kamangir/bluer-ugv/actions/workflows/bashtest.yml) [](https://pypi.org/project/bluer-ugv/) [](https://pypistats.org/packages/bluer-ugv)
|
|
37
37
|
|
|
38
|
-
built by 🌀 [`bluer README`](https://github.com/kamangir/bluer-objects/tree/main/bluer_objects/README), based on 🐬 [`bluer_ugv-7.
|
|
38
|
+
built by 🌀 [`bluer README`](https://github.com/kamangir/bluer-objects/tree/main/bluer_objects/README), based on 🐬 [`bluer_ugv-7.616.1`](https://github.com/kamangir/bluer-ugv).
|
|
39
39
|
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
#! /usr/bin/git bash
|
|
2
|
+
|
|
3
|
+
function bluer_ugv_swallow_git_rm_keys() {
|
|
4
|
+
local options=$1
|
|
5
|
+
local do_dryrun=$(bluer_ai_option_int "$options" dryrun 1)
|
|
6
|
+
|
|
7
|
+
if [[ "$abcli_is_rpi" == false ]]; then
|
|
8
|
+
bluer_ai_log_error "only works on rpi."
|
|
9
|
+
return 1
|
|
10
|
+
fi
|
|
11
|
+
|
|
12
|
+
sudo rm -v ~/.ssh/$BLUER_AI_GIT_SSH_KEY_NAME
|
|
13
|
+
|
|
14
|
+
sudo rm -v ~/.ssh/$BLUER_AI_GIT_SSH_KEY_NAME.pub
|
|
15
|
+
|
|
16
|
+
local repo_name
|
|
17
|
+
for repo_name in bluer-ai $(bluer_ai_plugins list_of_external \
|
|
18
|
+
--delim space \
|
|
19
|
+
--log 0 \
|
|
20
|
+
--repo_names 1); do
|
|
21
|
+
bluer_ai_git \
|
|
22
|
+
$repo_name \
|
|
23
|
+
set_remote \
|
|
24
|
+
dryrun=$do_dryrun,https
|
|
25
|
+
[[ $? -ne 0 ]] && return 1
|
|
26
|
+
done
|
|
27
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
from bluer_objects.README.items import ImageItems
|
|
2
|
+
|
|
3
|
+
from bluer_ugv.README.consts import algo_docs
|
|
4
|
+
from bluer_ugv.README.swallow.consts import swallow_assets2
|
|
5
|
+
from bluer_ugv.README.swallow.digital.algo import driving, navigation, tracking, yolo
|
|
6
|
+
|
|
7
|
+
docs = (
|
|
8
|
+
[
|
|
9
|
+
{
|
|
10
|
+
"path": "../docs/swallow/digital/algo",
|
|
11
|
+
},
|
|
12
|
+
]
|
|
13
|
+
+ driving.docs
|
|
14
|
+
+ navigation.docs
|
|
15
|
+
+ tracking.docs
|
|
16
|
+
+ yolo.docs
|
|
17
|
+
)
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
from bluer_objects.README.items import ImageItems
|
|
2
|
+
from bluer_objects.README.consts import assets
|
|
3
|
+
from bluer_objects.README.consts import assets_url
|
|
4
|
+
|
|
5
|
+
from bluer_ugv.README.consts import algo_docs
|
|
6
|
+
from bluer_ugv.README.swallow.consts import swallow_assets2
|
|
7
|
+
|
|
8
|
+
tracker_assets2 = assets_url(
|
|
9
|
+
"tracker",
|
|
10
|
+
volume=2,
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
docs = [
|
|
14
|
+
{
|
|
15
|
+
"path": "../docs/swallow/digital/algo/tracking",
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"path": "../docs/swallow/digital/algo/tracking/validations",
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"path": "../docs/swallow/digital/algo/tracking/validations/one.md",
|
|
22
|
+
"items": ImageItems(
|
|
23
|
+
{
|
|
24
|
+
f"{swallow_assets2}/target-selection.png": f"{algo_docs}/socket.md",
|
|
25
|
+
}
|
|
26
|
+
),
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"path": "../docs/swallow/digital/algo/tracking/validations/two.md",
|
|
30
|
+
"items": ImageItems(
|
|
31
|
+
{
|
|
32
|
+
f"{tracker_assets2}/validations/two/socket-3.png": f"{algo_docs}/socket.md",
|
|
33
|
+
"{}/{}/{}.gif".format(
|
|
34
|
+
assets,
|
|
35
|
+
"swallow-debug-2025-12-11-17-23-59-6bhm5n",
|
|
36
|
+
"swallow-debug-2025-12-11-17-23-59-6bhm5n",
|
|
37
|
+
): "",
|
|
38
|
+
}
|
|
39
|
+
),
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"path": "../docs/swallow/digital/algo/tracking/validations/three.md",
|
|
43
|
+
"items": ImageItems(
|
|
44
|
+
{
|
|
45
|
+
"{}/{}/{}.gif".format(
|
|
46
|
+
assets,
|
|
47
|
+
"swallow-debug-2025-12-12-14-46-34-m8ahlp",
|
|
48
|
+
"swallow-debug-2025-12-12-14-46-34-m8ahlp",
|
|
49
|
+
): "",
|
|
50
|
+
}
|
|
51
|
+
),
|
|
52
|
+
},
|
|
53
|
+
]
|
|
@@ -4,8 +4,8 @@ from blueness import module
|
|
|
4
4
|
from blueness.argparse.generic import sys_exit
|
|
5
5
|
|
|
6
6
|
from bluer_ugv import NAME
|
|
7
|
-
from bluer_ugv.swallow.targeting import select_target
|
|
8
|
-
from bluer_ugv.swallow.debug import debug
|
|
7
|
+
from bluer_ugv.swallow.targeting import select_target, DEFAULT_TARGETING_PORT
|
|
8
|
+
from bluer_ugv.swallow.debug import debug, DEFAULT_DEBUG_PORT
|
|
9
9
|
from bluer_ugv.logger import logger
|
|
10
10
|
|
|
11
11
|
NAME = module.name(__file__, NAME)
|
|
@@ -42,6 +42,11 @@ parser.add_argument(
|
|
|
42
42
|
default=1,
|
|
43
43
|
help="0 | 1",
|
|
44
44
|
)
|
|
45
|
+
parser.add_argument(
|
|
46
|
+
"--port",
|
|
47
|
+
type=int,
|
|
48
|
+
default=-1,
|
|
49
|
+
)
|
|
45
50
|
args = parser.parse_args()
|
|
46
51
|
|
|
47
52
|
success = False
|
|
@@ -50,11 +55,13 @@ if args.task == "debug":
|
|
|
50
55
|
object_name=args.object_name,
|
|
51
56
|
generate_gif=args.generate_gif == 1,
|
|
52
57
|
save_images=args.save_images == 1,
|
|
58
|
+
port=DEFAULT_DEBUG_PORT if args.port == -1 else args.port,
|
|
53
59
|
)
|
|
54
60
|
elif args.task == "select_target":
|
|
55
61
|
success = select_target(
|
|
56
62
|
host=args.host,
|
|
57
63
|
loop=args.loop == 1,
|
|
64
|
+
port=DEFAULT_TARGETING_PORT if args.port == -1 else args.port,
|
|
58
65
|
)
|
|
59
66
|
else:
|
|
60
67
|
success = None
|
|
@@ -8,7 +8,7 @@ from bluer_objects import file
|
|
|
8
8
|
from bluer_objects import objects
|
|
9
9
|
from bluer_objects.logger.stitch import stitch_images
|
|
10
10
|
from bluer_objects.graphics.gif import generate_animated_gif
|
|
11
|
-
from bluer_algo.socket.connection import SocketConnection
|
|
11
|
+
from bluer_algo.socket.connection import SocketConnection, DEFAULT_PORT
|
|
12
12
|
from bluer_algo.socket.message import SocketMessage
|
|
13
13
|
|
|
14
14
|
from bluer_ugv import NAME
|
|
@@ -17,24 +17,28 @@ from bluer_ugv.logger import logger
|
|
|
17
17
|
|
|
18
18
|
NAME = module.name(__file__, NAME)
|
|
19
19
|
|
|
20
|
+
DEFAULT_DEBUG_PORT = DEFAULT_PORT
|
|
21
|
+
|
|
20
22
|
|
|
21
23
|
def debug(
|
|
22
24
|
object_name: str,
|
|
23
25
|
generate_gif: bool = True,
|
|
24
26
|
save_images: bool = True,
|
|
27
|
+
port: int = DEFAULT_DEBUG_PORT,
|
|
25
28
|
) -> bool:
|
|
26
29
|
logger.info(
|
|
27
|
-
"{}.debug -{}{}> {}".format(
|
|
30
|
+
"{}.debug -{}{}{}> {}".format(
|
|
28
31
|
NAME,
|
|
32
|
+
f"port={port}-",
|
|
29
33
|
"images-" if save_images else "",
|
|
30
34
|
"gif-" if generate_gif else "",
|
|
31
35
|
object_name,
|
|
32
36
|
)
|
|
33
37
|
)
|
|
34
38
|
|
|
35
|
-
socket = SocketConnection.listen_on()
|
|
39
|
+
socket = SocketConnection.listen_on(port=port)
|
|
36
40
|
|
|
37
|
-
title = "debug..."
|
|
41
|
+
title = f"debug: port={port} -> {object_name} ..."
|
|
38
42
|
|
|
39
43
|
cv2.namedWindow(title)
|
|
40
44
|
logger.info("Ctrl+C to exit...")
|
{bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/swallow/session/classical/camera/generic.py
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from typing import Any
|
|
2
2
|
|
|
3
|
-
from bluer_algo.socket.connection import SocketConnection, DEV_HOST
|
|
3
|
+
from bluer_algo.socket.connection import SocketConnection, DEV_HOST, DEFAULT_PORT
|
|
4
4
|
from bluer_sbc.imager.camera import instance as camera
|
|
5
5
|
|
|
6
6
|
from bluer_ugv.swallow.session.classical.keyboard.classes import ClassicalKeyboard
|
|
@@ -29,8 +29,15 @@ class ClassicalCamera:
|
|
|
29
29
|
def cleanup(self):
|
|
30
30
|
camera.close(log=True)
|
|
31
31
|
|
|
32
|
-
def send_debug_data(
|
|
33
|
-
|
|
32
|
+
def send_debug_data(
|
|
33
|
+
self,
|
|
34
|
+
data: Any,
|
|
35
|
+
port: int = DEFAULT_PORT,
|
|
36
|
+
) -> bool:
|
|
37
|
+
socket = SocketConnection.connect_to(
|
|
38
|
+
target_host=DEV_HOST,
|
|
39
|
+
port=port,
|
|
40
|
+
)
|
|
34
41
|
return socket.send_data(data)
|
|
35
42
|
|
|
36
43
|
# multi-threaded support
|
{bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/swallow/session/classical/camera/tracking.py
RENAMED
|
@@ -2,9 +2,10 @@ from typing import Tuple
|
|
|
2
2
|
import numpy as np
|
|
3
3
|
|
|
4
4
|
from bluer_options.timer import Timer
|
|
5
|
-
from
|
|
5
|
+
from bluer_algo.env import BLUER_ALGO_TRACKER_DEFAULT_ALGO
|
|
6
6
|
from bluer_algo.tracker.classes.target import Target
|
|
7
|
-
from bluer_algo.tracker.
|
|
7
|
+
from bluer_algo.tracker.factory import get_tracker_class
|
|
8
|
+
from bluer_algo.socket.message import SocketMessage
|
|
8
9
|
from bluer_sbc.imager.camera import instance as camera
|
|
9
10
|
|
|
10
11
|
from bluer_ugv import env
|
|
@@ -14,6 +15,7 @@ from bluer_ugv.swallow.session.classical.keyboard.classes import ClassicalKeyboa
|
|
|
14
15
|
from bluer_ugv.swallow.session.classical.leds import ClassicalLeds
|
|
15
16
|
from bluer_ugv.swallow.session.classical.setpoint.classes import ClassicalSetPoint
|
|
16
17
|
from bluer_ugv.swallow.session.classical.mode import OperationMode
|
|
18
|
+
from bluer_ugv.swallow.targeting import DEFAULT_TARGETING_PORT
|
|
17
19
|
from bluer_ugv.logger import logger
|
|
18
20
|
|
|
19
21
|
|
|
@@ -35,7 +37,7 @@ class ClassicalTrackingCamera(ClassicalCamera):
|
|
|
35
37
|
log=True,
|
|
36
38
|
)
|
|
37
39
|
|
|
38
|
-
self.tracker =
|
|
40
|
+
self.tracker = get_tracker_class(BLUER_ALGO_TRACKER_DEFAULT_ALGO)[1]()
|
|
39
41
|
|
|
40
42
|
def initialize(self) -> bool:
|
|
41
43
|
if not super().initialize():
|
|
@@ -56,6 +58,7 @@ class ClassicalTrackingCamera(ClassicalCamera):
|
|
|
56
58
|
success, self.track_window = Target.select(
|
|
57
59
|
np.flip(image, axis=2),
|
|
58
60
|
local=False,
|
|
61
|
+
port=DEFAULT_TARGETING_PORT,
|
|
59
62
|
)
|
|
60
63
|
self.leds.set_all(False)
|
|
61
64
|
if not success:
|
|
@@ -100,10 +103,28 @@ class ClassicalTrackingCamera(ClassicalCamera):
|
|
|
100
103
|
if not success:
|
|
101
104
|
return success
|
|
102
105
|
|
|
103
|
-
|
|
106
|
+
debug_mode = self.keyboard.get("debug_mode", False)
|
|
107
|
+
_, self.track_window, output_image = self.tracker.track(
|
|
104
108
|
frame=image,
|
|
105
109
|
track_window=self.track_window,
|
|
110
|
+
log=debug_mode,
|
|
106
111
|
)
|
|
112
|
+
logger.info(f"🎯 {self.track_window}")
|
|
113
|
+
|
|
114
|
+
if debug_mode:
|
|
115
|
+
if not self.send_debug_data(
|
|
116
|
+
SocketMessage(
|
|
117
|
+
{
|
|
118
|
+
"image": output_image,
|
|
119
|
+
}
|
|
120
|
+
)
|
|
121
|
+
):
|
|
122
|
+
logger.warning("failed to send debug data.")
|
|
123
|
+
|
|
124
|
+
if not self.tracker.tracking:
|
|
125
|
+
logger.warning("🎯 lost target")
|
|
126
|
+
self.leds.flash_all()
|
|
127
|
+
return True
|
|
107
128
|
|
|
108
129
|
x, _, w, _ = self.track_window
|
|
109
130
|
if x + w // 2 > image.shape[1] * 2 / 3:
|
|
@@ -122,5 +143,5 @@ class ClassicalTrackingCamera(ClassicalCamera):
|
|
|
122
143
|
return True
|
|
123
144
|
|
|
124
145
|
def update_training(self) -> bool:
|
|
125
|
-
self.
|
|
146
|
+
self.keyboard.set("mode", OperationMode.NONE)
|
|
126
147
|
return self.select_target()
|
|
@@ -11,34 +11,41 @@ from bluer_ugv.logger import logger
|
|
|
11
11
|
|
|
12
12
|
NAME = module.name(__file__, NAME)
|
|
13
13
|
|
|
14
|
+
DEFAULT_TARGETING_PORT = 8002
|
|
15
|
+
|
|
14
16
|
|
|
15
17
|
def select_target(
|
|
16
18
|
host: str,
|
|
17
19
|
loop: bool = True,
|
|
20
|
+
port: int = DEFAULT_TARGETING_PORT,
|
|
18
21
|
) -> bool:
|
|
19
22
|
logger.info(
|
|
20
|
-
"{}.select_target on {}{}".format(
|
|
23
|
+
"{}.select_target on {} port={}{}".format(
|
|
21
24
|
NAME,
|
|
22
25
|
host,
|
|
26
|
+
port,
|
|
23
27
|
" on a loop." if loop else "",
|
|
24
28
|
)
|
|
25
29
|
)
|
|
26
30
|
|
|
27
31
|
try:
|
|
28
32
|
while loop:
|
|
29
|
-
socket = SocketConnection.listen_on()
|
|
33
|
+
socket = SocketConnection.listen_on(port=port)
|
|
30
34
|
success, image = socket.receive_data(np.ndarray)
|
|
31
35
|
if not success:
|
|
32
36
|
return success
|
|
33
37
|
|
|
34
38
|
success, track_window = Target.select(
|
|
35
39
|
image,
|
|
36
|
-
title=f"select target
|
|
40
|
+
title=f"select the target for {host} port={port}...",
|
|
37
41
|
)
|
|
38
42
|
if not success:
|
|
39
43
|
return success
|
|
40
44
|
|
|
41
|
-
socket = SocketConnection.connect_to(
|
|
45
|
+
socket = SocketConnection.connect_to(
|
|
46
|
+
host,
|
|
47
|
+
port=port,
|
|
48
|
+
)
|
|
42
49
|
if not socket.send_data(track_window):
|
|
43
50
|
return False
|
|
44
51
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: bluer_ugv
|
|
3
|
-
Version: 7.
|
|
3
|
+
Version: 7.616.1
|
|
4
4
|
Summary: 🐬 AI x UGV.
|
|
5
5
|
Home-page: https://github.com/kamangir/bluer-ugv
|
|
6
6
|
Author: Arash Abadpour (Kamangir)
|
|
@@ -64,7 +64,7 @@ pip install bluer_ugv
|
|
|
64
64
|
|
|
65
65
|
[](https://github.com/kamangir/bluer-ugv/actions/workflows/pylint.yml) [](https://github.com/kamangir/bluer-ugv/actions/workflows/pytest.yml) [](https://github.com/kamangir/bluer-ugv/actions/workflows/bashtest.yml) [](https://pypi.org/project/bluer-ugv/) [](https://pypistats.org/packages/bluer-ugv)
|
|
66
66
|
|
|
67
|
-
built by 🌀 [`bluer README`](https://github.com/kamangir/bluer-objects/tree/main/bluer_objects/README), based on 🐬 [`bluer_ugv-7.
|
|
67
|
+
built by 🌀 [`bluer README`](https://github.com/kamangir/bluer-objects/tree/main/bluer_objects/README), based on 🐬 [`bluer_ugv-7.616.1`](https://github.com/kamangir/bluer-ugv).
|
|
68
68
|
|
|
69
69
|
|
|
70
70
|
built by 🌀 [`blueness-3.118.1`](https://github.com/kamangir/blueness).
|
|
@@ -108,7 +108,9 @@ bluer_ugv/README/swallow/consts.py
|
|
|
108
108
|
bluer_ugv/README/swallow/items.py
|
|
109
109
|
bluer_ugv/README/swallow/digital/__init__.py
|
|
110
110
|
bluer_ugv/README/swallow/digital/algo/__init__.py
|
|
111
|
+
bluer_ugv/README/swallow/digital/algo/driving.py
|
|
111
112
|
bluer_ugv/README/swallow/digital/algo/navigation.py
|
|
113
|
+
bluer_ugv/README/swallow/digital/algo/tracking.py
|
|
112
114
|
bluer_ugv/README/swallow/digital/algo/yolo.py
|
|
113
115
|
bluer_ugv/README/swallow/digital/design/__init__.py
|
|
114
116
|
bluer_ugv/README/swallow/digital/design/mechanical.py
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
#! /usr/bin/git bash
|
|
2
|
-
|
|
3
|
-
function bluer_ugv_swallow_git_rm_keys() {
|
|
4
|
-
local options=$1
|
|
5
|
-
local do_dryrun=$(bluer_ai_option_int "$options" dryrun 1)
|
|
6
|
-
|
|
7
|
-
if [[ "$abcli_is_rpi" == false ]]; then
|
|
8
|
-
bluer_ai_log_error "only works on rpi."
|
|
9
|
-
return 1
|
|
10
|
-
fi
|
|
11
|
-
|
|
12
|
-
bluer_ai_eval dryrun=$do_dryrun \
|
|
13
|
-
sudo rm -v ~/.ssh/$BLUER_AI_GIT_SSH_KEY_NAME
|
|
14
|
-
|
|
15
|
-
bluer_ai_eval dryrun=$do_dryrun \
|
|
16
|
-
sudo rm -v ~/.ssh/$BLUER_AI_GIT_SSH_KEY_NAME.pub
|
|
17
|
-
|
|
18
|
-
local repo
|
|
19
|
-
for repo in $(bluer_ai_plugins list_of_external --delim space --log 0 --repo_names 1); do
|
|
20
|
-
bluer_ai_eval dryrun=$do_dryrun \
|
|
21
|
-
bluer_ai_git_set_remote \
|
|
22
|
-
$repo_name \
|
|
23
|
-
dryrun=$do_dryrun,https
|
|
24
|
-
[[ $? -ne 0 ]] && return 1
|
|
25
|
-
|
|
26
|
-
git pull
|
|
27
|
-
[[ $? -ne 0 ]] && return 1
|
|
28
|
-
done
|
|
29
|
-
}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
from bluer_objects.README.items import ImageItems
|
|
2
|
-
|
|
3
|
-
from bluer_ugv.README.consts import algo_docs
|
|
4
|
-
from bluer_ugv.README.swallow.consts import swallow_assets2
|
|
5
|
-
from bluer_ugv.README.swallow.digital.algo import navigation, yolo
|
|
6
|
-
|
|
7
|
-
docs = (
|
|
8
|
-
[
|
|
9
|
-
{
|
|
10
|
-
"path": "../docs/swallow/digital/algo",
|
|
11
|
-
},
|
|
12
|
-
{
|
|
13
|
-
"path": "../docs/swallow/digital/algo/driving.md",
|
|
14
|
-
},
|
|
15
|
-
]
|
|
16
|
-
+ navigation.docs
|
|
17
|
-
+ [
|
|
18
|
-
{
|
|
19
|
-
"path": "../docs/swallow/digital/algo/tracking",
|
|
20
|
-
"items": ImageItems(
|
|
21
|
-
{
|
|
22
|
-
f"{swallow_assets2}/target-selection.png": f"{algo_docs}/socket.md",
|
|
23
|
-
}
|
|
24
|
-
),
|
|
25
|
-
}
|
|
26
|
-
]
|
|
27
|
-
+ yolo.docs
|
|
28
|
-
)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/.abcli/tests/swallow_dataset_combine_explicit.sh
RENAMED
|
File without changes
|
{bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/.abcli/tests/swallow_dataset_combine_sequence.sh
RENAMED
|
File without changes
|
{bluer_ugv-7.579.1 → bluer_ugv-7.616.1}/bluer_ugv/.abcli/tests/swallow_dataset_download_upload.sh
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|