bluer-ugv 7.340.1__tar.gz → 7.359.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.
Files changed (199) hide show
  1. {bluer_ugv-7.340.1/bluer_ugv.egg-info → bluer_ugv-7.359.1}/PKG-INFO +2 -2
  2. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/README.md +1 -1
  3. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/README/arzhang/items.py +6 -0
  4. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/README/build.py +1 -1
  5. bluer_ugv-7.359.1/bluer_ugv/README/shield/box.py +25 -0
  6. bluer_ugv-7.359.1/bluer_ugv/README/shield/docs.py +17 -0
  7. bluer_ugv-7.359.1/bluer_ugv/README/shield/pcb.py +49 -0
  8. bluer_ugv-7.359.1/bluer_ugv/README/shield/schematics.py +17 -0
  9. bluer_ugv-7.359.1/bluer_ugv/README/shield/testing.py +18 -0
  10. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/__init__.py +1 -1
  11. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/config.env +1 -1
  12. bluer_ugv-7.359.1/bluer_ugv/swallow/session/classical/screen.py +11 -0
  13. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/swallow/session/classical/session.py +1 -0
  14. bluer_ugv-7.359.1/bluer_ugv/swallow/session/classical/ultrasonic_sensor/__init__.py +0 -0
  15. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/swallow/session/classical/ultrasonic_sensor/classes.py +11 -16
  16. bluer_ugv-7.359.1/bluer_ugv/swallow/session/classical/ultrasonic_sensor/detection_list.py +45 -0
  17. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/swallow/session/classical/ultrasonic_sensor/log.py +19 -16
  18. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/swallow/session/classical/ultrasonic_sensor/pack.py +16 -4
  19. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/swallow/session/classical/ultrasonic_sensor/testing.py +2 -2
  20. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1/bluer_ugv.egg-info}/PKG-INFO +2 -2
  21. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv.egg-info/SOURCES.txt +8 -1
  22. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/setup.py +1 -0
  23. bluer_ugv-7.340.1/bluer_ugv/README/shield.py +0 -62
  24. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/LICENSE +0 -0
  25. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/MANIFEST.in +0 -0
  26. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/.abcli/abcli.sh +0 -0
  27. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/.abcli/actions.sh +0 -0
  28. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/.abcli/aka.sh +0 -0
  29. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/.abcli/alias.sh +0 -0
  30. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/.abcli/bluer_ugv.sh +0 -0
  31. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/.abcli/swallow/dataset/combine.sh +0 -0
  32. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/.abcli/swallow/dataset/download.sh +0 -0
  33. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/.abcli/swallow/dataset/edit.sh +0 -0
  34. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/.abcli/swallow/dataset/list.sh +0 -0
  35. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/.abcli/swallow/dataset/upload.sh +0 -0
  36. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/.abcli/swallow/dataset.sh +0 -0
  37. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/.abcli/swallow/debug.sh +0 -0
  38. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/.abcli/swallow/env/cp.sh +0 -0
  39. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/.abcli/swallow/env/list.sh +0 -0
  40. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/.abcli/swallow/env/set.sh +0 -0
  41. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/.abcli/swallow/env.sh +0 -0
  42. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/.abcli/swallow/keyboard/test.sh +0 -0
  43. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/.abcli/swallow/keyboard.sh +0 -0
  44. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/.abcli/swallow/select_target.sh +0 -0
  45. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/.abcli/swallow/session.sh +0 -0
  46. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/.abcli/swallow/ultrasonic/review.sh +0 -0
  47. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/.abcli/swallow/ultrasonic/test.sh +0 -0
  48. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/.abcli/swallow/ultrasonic.sh +0 -0
  49. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/.abcli/swallow.sh +0 -0
  50. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/.abcli/tests/README.sh +0 -0
  51. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/.abcli/tests/help.sh +0 -0
  52. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/.abcli/tests/swallow_dataset_combine.sh +0 -0
  53. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/.abcli/tests/swallow_dataset_combine_explicit.sh +0 -0
  54. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/.abcli/tests/swallow_dataset_combine_sequence.sh +0 -0
  55. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/.abcli/tests/swallow_dataset_download_upload.sh +0 -0
  56. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/.abcli/tests/swallow_dataset_edit.sh +0 -0
  57. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/.abcli/tests/swallow_dataset_list.sh +0 -0
  58. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/.abcli/tests/ultrasonic_sensor_review.sh +0 -0
  59. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/.abcli/tests/version.sh +0 -0
  60. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/.abcli/ugv/git.sh +0 -0
  61. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/README/__init__.py +0 -0
  62. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/README/alias.py +0 -0
  63. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/README/arzhang/__init__.py +0 -0
  64. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/README/arzhang/algo.py +0 -0
  65. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/README/arzhang/consts.py +0 -0
  66. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/README/arzhang/design.py +0 -0
  67. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/README/arzhang/flag.py +0 -0
  68. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/README/beast.py +0 -0
  69. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/README/consts.py +0 -0
  70. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/README/eagle/__init__.py +0 -0
  71. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/README/eagle/consts.py +0 -0
  72. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/README/eagle/items.py +0 -0
  73. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/README/fire/__init__.py +0 -0
  74. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/README/fire/consts.py +0 -0
  75. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/README/fire/items.py +0 -0
  76. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/README/items.py +0 -0
  77. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/README/rangin/__init__.py +0 -0
  78. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/README/rangin/consts.py +0 -0
  79. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/README/rangin/items.py +0 -0
  80. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/README/ravin/__init__.py +0 -0
  81. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/README/ravin/consts.py +0 -0
  82. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/README/ravin/items.py +0 -0
  83. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/README/releases.py +0 -0
  84. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/README/root.py +0 -0
  85. {bluer_ugv-7.340.1/bluer_ugv/README/ugvs → bluer_ugv-7.359.1/bluer_ugv/README/shield}/__init__.py +0 -0
  86. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/README/shortcuts.py +0 -0
  87. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/README/swallow/__init__.py +0 -0
  88. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/README/swallow/analog.py +0 -0
  89. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/README/swallow/consts.py +0 -0
  90. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/README/swallow/digital/__init__.py +0 -0
  91. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/README/swallow/digital/algo/__init__.py +0 -0
  92. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/README/swallow/digital/algo/navigation.py +0 -0
  93. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/README/swallow/digital/algo/yolo.py +0 -0
  94. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/README/swallow/digital/design/__init__.py +0 -0
  95. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/README/swallow/digital/design/mechanical.py +0 -0
  96. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/README/swallow/digital/design/ultrasonic_sensor.py +0 -0
  97. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/README/swallow/items.py +0 -0
  98. {bluer_ugv-7.340.1/bluer_ugv/README/ugvs/comparison → bluer_ugv-7.359.1/bluer_ugv/README/ugvs}/__init__.py +0 -0
  99. {bluer_ugv-7.340.1/bluer_ugv/README/ugvs/comparison/features → bluer_ugv-7.359.1/bluer_ugv/README/ugvs/comparison}/__init__.py +0 -0
  100. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/README/ugvs/comparison/build.py +0 -0
  101. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/README/ugvs/comparison/features/DYI.py +0 -0
  102. {bluer_ugv-7.340.1/bluer_ugv/README/ugvs/comparison/ugvs → bluer_ugv-7.359.1/bluer_ugv/README/ugvs/comparison/features}/__init__.py +0 -0
  103. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/README/ugvs/comparison/features/classes.py +0 -0
  104. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/README/ugvs/comparison/features/concealment.py +0 -0
  105. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/README/ugvs/comparison/features/control.py +0 -0
  106. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/README/ugvs/comparison/features/cost.py +0 -0
  107. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/README/ugvs/comparison/features/db.py +0 -0
  108. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/README/ugvs/comparison/features/payload.py +0 -0
  109. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/README/ugvs/comparison/features/ps.py +0 -0
  110. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/README/ugvs/comparison/features/range.py +0 -0
  111. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/README/ugvs/comparison/features/sanction_proof.py +0 -0
  112. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/README/ugvs/comparison/features/size.py +0 -0
  113. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/README/ugvs/comparison/features/speed.py +0 -0
  114. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/README/ugvs/comparison/features/swarm.py +0 -0
  115. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/README/ugvs/comparison/features/uv_delivery.py +0 -0
  116. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/README/ugvs/comparison/references/__init__.py +0 -0
  117. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/README/ugvs/comparison/references/classes.py +0 -0
  118. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/README/ugvs/comparison/references/db.py +0 -0
  119. {bluer_ugv-7.340.1/bluer_ugv/designs → bluer_ugv-7.359.1/bluer_ugv/README/ugvs/comparison/ugvs}/__init__.py +0 -0
  120. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/README/ugvs/comparison/ugvs/classes.py +0 -0
  121. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/README/ugvs/comparison/ugvs/db.py +0 -0
  122. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/README/ugvs/db.py +0 -0
  123. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/README/ugvs/docs.py +0 -0
  124. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/__main__.py +0 -0
  125. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/assets/comparison.html +0 -0
  126. {bluer_ugv-7.340.1/bluer_ugv/designs/eagle → bluer_ugv-7.359.1/bluer_ugv/designs}/__init__.py +0 -0
  127. {bluer_ugv-7.340.1/bluer_ugv/designs/fire → bluer_ugv-7.359.1/bluer_ugv/designs/eagle}/__init__.py +0 -0
  128. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/designs/eagle/parts.py +0 -0
  129. {bluer_ugv-7.340.1/bluer_ugv/designs/rangin → bluer_ugv-7.359.1/bluer_ugv/designs/fire}/__init__.py +0 -0
  130. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/designs/fire/parts.py +0 -0
  131. {bluer_ugv-7.340.1/bluer_ugv/designs/ravin → bluer_ugv-7.359.1/bluer_ugv/designs/rangin}/__init__.py +0 -0
  132. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/designs/rangin/parts.py +0 -0
  133. {bluer_ugv-7.340.1/bluer_ugv/designs/ravin/ravin3 → bluer_ugv-7.359.1/bluer_ugv/designs/ravin}/__init__.py +0 -0
  134. {bluer_ugv-7.340.1/bluer_ugv/designs/ravin/ravin4 → bluer_ugv-7.359.1/bluer_ugv/designs/ravin/ravin3}/__init__.py +0 -0
  135. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/designs/ravin/ravin3/parts.py +0 -0
  136. {bluer_ugv-7.340.1/bluer_ugv/swallow → bluer_ugv-7.359.1/bluer_ugv/designs/ravin/ravin4}/__init__.py +0 -0
  137. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/designs/ravin/ravin4/parts.py +0 -0
  138. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/env.py +0 -0
  139. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/help/__init__.py +0 -0
  140. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/help/__main__.py +0 -0
  141. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/help/functions.py +0 -0
  142. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/help/git.py +0 -0
  143. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/help/swallow/__init__.py +0 -0
  144. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/help/swallow/dataset.py +0 -0
  145. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/help/swallow/debug.py +0 -0
  146. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/help/swallow/env.py +0 -0
  147. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/help/swallow/keyboard.py +0 -0
  148. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/help/swallow/select_target.py +0 -0
  149. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/help/swallow/ultrasonic_sensor.py +0 -0
  150. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/host.py +0 -0
  151. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/logger.py +0 -0
  152. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/sample.env +0 -0
  153. {bluer_ugv-7.340.1/bluer_ugv/swallow/dataset → bluer_ugv-7.359.1/bluer_ugv/swallow}/__init__.py +0 -0
  154. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/swallow/__main__.py +0 -0
  155. {bluer_ugv-7.340.1/bluer_ugv/swallow/session → bluer_ugv-7.359.1/bluer_ugv/swallow/dataset}/__init__.py +0 -0
  156. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/swallow/dataset/__main__.py +0 -0
  157. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/swallow/dataset/combination.py +0 -0
  158. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/swallow/debug.py +0 -0
  159. {bluer_ugv-7.340.1/bluer_ugv/swallow/session/classical → bluer_ugv-7.359.1/bluer_ugv/swallow/session}/__init__.py +0 -0
  160. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/swallow/session/__main__.py +0 -0
  161. {bluer_ugv-7.340.1/bluer_ugv/swallow/session/classical/keyboard → bluer_ugv-7.359.1/bluer_ugv/swallow/session/classical}/__init__.py +0 -0
  162. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/swallow/session/classical/camera/__init__.py +0 -0
  163. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/swallow/session/classical/camera/generic.py +0 -0
  164. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/swallow/session/classical/camera/navigation.py +0 -0
  165. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/swallow/session/classical/camera/tracking.py +0 -0
  166. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/swallow/session/classical/camera/yolo.py +0 -0
  167. {bluer_ugv-7.340.1/bluer_ugv/swallow/session/classical/setpoint → bluer_ugv-7.359.1/bluer_ugv/swallow/session/classical/keyboard}/__init__.py +0 -0
  168. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/swallow/session/classical/keyboard/__main__.py +0 -0
  169. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/swallow/session/classical/keyboard/classes.py +0 -0
  170. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/swallow/session/classical/keyboard/keys.py +0 -0
  171. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/swallow/session/classical/keyboard/testing.py +0 -0
  172. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/swallow/session/classical/leds.py +0 -0
  173. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/swallow/session/classical/mode.py +0 -0
  174. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/swallow/session/classical/motor/__init__.py +0 -0
  175. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/swallow/session/classical/motor/generic.py +0 -0
  176. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/swallow/session/classical/motor/left.py +0 -0
  177. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/swallow/session/classical/motor/rear.py +0 -0
  178. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/swallow/session/classical/motor/right.py +0 -0
  179. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/swallow/session/classical/motor/steering.py +0 -0
  180. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/swallow/session/classical/mousepad.py +0 -0
  181. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/swallow/session/classical/position.py +0 -0
  182. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/swallow/session/classical/push_button.py +0 -0
  183. {bluer_ugv-7.340.1/bluer_ugv/swallow/session/classical/ultrasonic_sensor → bluer_ugv-7.359.1/bluer_ugv/swallow/session/classical/setpoint}/__init__.py +0 -0
  184. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/swallow/session/classical/setpoint/classes.py +0 -0
  185. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/swallow/session/classical/setpoint/steering.py +0 -0
  186. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/swallow/session/classical/ultrasonic_sensor/__main__.py +0 -0
  187. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/swallow/session/classical/ultrasonic_sensor/consts.py +0 -0
  188. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/swallow/session/classical/ultrasonic_sensor/detection.py +0 -0
  189. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/swallow/session/classical/ultrasonic_sensor/review.py +0 -0
  190. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/swallow/session/classical/ultrasonic_sensor/sensor.py +0 -0
  191. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/swallow/session/functions.py +0 -0
  192. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/swallow/targeting.py +0 -0
  193. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv/urls.py +0 -0
  194. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv.egg-info/dependency_links.txt +0 -0
  195. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv.egg-info/requires.txt +0 -0
  196. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/bluer_ugv.egg-info/top_level.txt +0 -0
  197. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/pyproject.toml +0 -0
  198. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/requirements.txt +0 -0
  199. {bluer_ugv-7.340.1 → bluer_ugv-7.359.1}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bluer_ugv
3
- Version: 7.340.1
3
+ Version: 7.359.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
  [![pylint](https://github.com/kamangir/bluer-ugv/actions/workflows/pylint.yml/badge.svg)](https://github.com/kamangir/bluer-ugv/actions/workflows/pylint.yml) [![pytest](https://github.com/kamangir/bluer-ugv/actions/workflows/pytest.yml/badge.svg)](https://github.com/kamangir/bluer-ugv/actions/workflows/pytest.yml) [![bashtest](https://github.com/kamangir/bluer-ugv/actions/workflows/bashtest.yml/badge.svg)](https://github.com/kamangir/bluer-ugv/actions/workflows/bashtest.yml) [![PyPI version](https://img.shields.io/pypi/v/bluer-ugv.svg)](https://pypi.org/project/bluer-ugv/) [![PyPI - Downloads](https://img.shields.io/pypi/dd/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.340.1`](https://github.com/kamangir/bluer-ugv).
67
+ built by 🌀 [`bluer README`](https://github.com/kamangir/bluer-objects/tree/main/bluer_objects/README), based on 🐬 [`bluer_ugv-7.359.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
  [![pylint](https://github.com/kamangir/bluer-ugv/actions/workflows/pylint.yml/badge.svg)](https://github.com/kamangir/bluer-ugv/actions/workflows/pylint.yml) [![pytest](https://github.com/kamangir/bluer-ugv/actions/workflows/pytest.yml/badge.svg)](https://github.com/kamangir/bluer-ugv/actions/workflows/pytest.yml) [![bashtest](https://github.com/kamangir/bluer-ugv/actions/workflows/bashtest.yml/badge.svg)](https://github.com/kamangir/bluer-ugv/actions/workflows/bashtest.yml) [![PyPI version](https://img.shields.io/pypi/v/bluer-ugv.svg)](https://pypi.org/project/bluer-ugv/) [![PyPI - Downloads](https://img.shields.io/pypi/dd/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.340.1`](https://github.com/kamangir/bluer-ugv).
38
+ built by 🌀 [`bluer README`](https://github.com/kamangir/bluer-objects/tree/main/bluer_objects/README), based on 🐬 [`bluer_ugv-7.359.1`](https://github.com/kamangir/bluer-ugv).
39
39
 
@@ -25,5 +25,11 @@ items = ImageItems(
25
25
  f"{arzhang_assets2}/20251005_112332.jpg": "",
26
26
  f"{arzhang_assets2}/20251005_112530.jpg": "",
27
27
  f"{arzhang_assets2}/20251018_213230.jpg": "",
28
+ f"{swallow_assets2}/20251117_112301.jpg": "",
29
+ f"{swallow_assets2}/20251117_120134.jpg": "",
30
+ f"{swallow_assets2}/20251117_125503.jpg": "",
31
+ f"{swallow_assets2}/20251117_125515.jpg": "",
32
+ f"{swallow_assets2}/20251117_125544.jpg": "",
33
+ f"{swallow_assets2}/20251117_160851.jpg": "",
28
34
  }
29
35
  )
@@ -12,12 +12,12 @@ from bluer_ugv.README import (
12
12
  fire,
13
13
  ravin,
14
14
  root,
15
- shield,
16
15
  arzhang,
17
16
  rangin,
18
17
  releases,
19
18
  swallow,
20
19
  )
20
+ from bluer_ugv.README.shield import docs as shield
21
21
  from bluer_ugv.README.ugvs import docs as ugvs
22
22
  from bluer_ugv.README.ugvs.comparison.build import build as build_comparison
23
23
 
@@ -0,0 +1,25 @@
1
+ from bluer_objects.README.items import ImageItems
2
+
3
+ from bluer_ugv.README.swallow.consts import (
4
+ swallow_assets2,
5
+ swallow_electrical_designs,
6
+ )
7
+
8
+ items = ImageItems(
9
+ {
10
+ f"{swallow_electrical_designs}/nuts-bolts-spacers.png": f"{swallow_electrical_designs}/nuts-bolts-spacers.svg",
11
+ f"{swallow_assets2}/20251018_133202.jpg": "",
12
+ f"{swallow_assets2}/20251018_133349.jpg": "",
13
+ f"{swallow_assets2}/20251008_114557.jpg": "",
14
+ f"{swallow_assets2}/20251008_133418.jpg": "",
15
+ f"{swallow_assets2}/20251008_124129.jpg": "",
16
+ f"{swallow_assets2}/20251008_124932.jpg": "",
17
+ }
18
+ )
19
+
20
+ docs = [
21
+ {
22
+ "path": "../docs/swallow/digital/design/shield/box.md",
23
+ "items": items,
24
+ }
25
+ ]
@@ -0,0 +1,17 @@
1
+ from bluer_ugv.README.shield import box, pcb, schematics, testing
2
+
3
+
4
+ docs = (
5
+ [
6
+ {
7
+ "path": "../docs/swallow/digital/design/shield",
8
+ },
9
+ {
10
+ "path": "../docs/swallow/digital/design/shield/connectors-v1.md",
11
+ },
12
+ ]
13
+ + box.docs
14
+ + pcb.docs
15
+ + schematics.docs
16
+ + testing.docs
17
+ )
@@ -0,0 +1,49 @@
1
+ from bluer_objects.README.items import ImageItems
2
+
3
+ from bluer_ugv.README.swallow.consts import swallow_assets2, swallow_designs
4
+
5
+
6
+ items = ImageItems(
7
+ {
8
+ f"{swallow_designs}/kicad/swallow/exports/swallow.png": f"{swallow_designs}/kicad/swallow/exports/swallow.pdf",
9
+ f"{swallow_designs}/kicad/swallow/exports/swallow-3d.png": "",
10
+ f"{swallow_designs}/kicad/swallow/exports/swallow-3d-back.png": "",
11
+ f"{swallow_designs}/kicad/swallow/exports/swallow-pcb.png": "",
12
+ f"{swallow_assets2}/20251112_085331.jpg": "",
13
+ f"{swallow_assets2}/20251112_181047.jpg": "",
14
+ f"{swallow_assets2}/20251112_181053.jpg": "",
15
+ }
16
+ )
17
+
18
+ v1_items = ImageItems(
19
+ {
20
+ f"{swallow_assets2}/20250614_102301.jpg": "",
21
+ }
22
+ )
23
+
24
+ v2_items = ImageItems(
25
+ {
26
+ f"{swallow_assets2}/20250703_153834.jpg": "",
27
+ f"{swallow_assets2}/20250925_213013.jpg": "",
28
+ f"{swallow_assets2}/20250925_214017.jpg": "",
29
+ f"{swallow_assets2}/20250928_160425.jpg": "",
30
+ f"{swallow_assets2}/20250928_160449.jpg": "",
31
+ f"{swallow_assets2}/20251002_103712.jpg": "",
32
+ f"{swallow_assets2}/20251002_103720.jpg": "",
33
+ }
34
+ )
35
+
36
+ docs = [
37
+ {
38
+ "path": "../docs/swallow/digital/design/shield/pcb.md",
39
+ "items": items,
40
+ },
41
+ {
42
+ "path": "../docs/swallow/digital/design/shield/v1.md",
43
+ "items": v1_items,
44
+ },
45
+ {
46
+ "path": "../docs/swallow/digital/design/shield/v2.md",
47
+ "items": v2_items,
48
+ },
49
+ ]
@@ -0,0 +1,17 @@
1
+ from bluer_objects.README.items import ImageItems
2
+
3
+ from bluer_ugv.README.swallow.consts import swallow_electrical_designs
4
+
5
+
6
+ items = ImageItems(
7
+ {
8
+ f"{swallow_electrical_designs}/digital.png": f"{swallow_electrical_designs}/digital.svg",
9
+ }
10
+ )
11
+
12
+ docs = [
13
+ {
14
+ "path": "../docs/swallow/digital/design/shield/schematics.md",
15
+ "items": items,
16
+ },
17
+ ]
@@ -0,0 +1,18 @@
1
+ from bluer_objects.README.items import ImageItems
2
+
3
+ from bluer_ugv.README.swallow.consts import swallow_assets2
4
+
5
+ items = ImageItems(
6
+ {
7
+ f"{swallow_assets2}/20251113_205142.jpg": "",
8
+ f"{swallow_assets2}/20251113_210730.jpg": "",
9
+ f"{swallow_assets2}/20251113_210706.jpg": "",
10
+ },
11
+ )
12
+
13
+ docs = [
14
+ {
15
+ "path": "../docs/swallow/digital/design/shield/testing.md",
16
+ "items": items,
17
+ },
18
+ ]
@@ -4,7 +4,7 @@ ICON = "🐬"
4
4
 
5
5
  DESCRIPTION = f"{ICON} AI x UGV."
6
6
 
7
- VERSION = "7.340.1"
7
+ VERSION = "7.359.1"
8
8
 
9
9
  REPO_NAME = "bluer-ugv"
10
10
 
@@ -18,7 +18,7 @@ BLUER_UGV_SWALLOW_YOLO_MODEL=coco128-model-2025-09-16-meb4if
18
18
 
19
19
  BLUER_UGV_SWALLOW_YOLO_DATASET_LIST=swallow-yolo-dataset-list-v1
20
20
 
21
- BLUER_UGV_ULTRASONIC_SENSOR_TEST_OBJECT=ultrasonic-test-2025-09-30-17-54-43-96l9ps
21
+ BLUER_UGV_ULTRASONIC_SENSOR_TEST_OBJECT=ultrasonic-test-2025-11-18-12-38-22-j4t7wl
22
22
 
23
23
  BLUER_UGV_ULTRASONIC_SENSOR_WARNING_THRESHOLD=400
24
24
  BLUER_UGV_ULTRASONIC_SENSOR_DANGER_THRESHOLD=200
@@ -0,0 +1,11 @@
1
+ from bluer_options.host.functions import is_headless
2
+
3
+ from bluer_ugv.logger import logger
4
+
5
+
6
+ class ClassicalScreen:
7
+ def __init__(self):
8
+ if is_headless():
9
+ return
10
+
11
+ logger.info(f"{self.__class__.__name__} created.")
@@ -24,6 +24,7 @@ from bluer_ugv.swallow.session.classical.motor import (
24
24
  )
25
25
  from bluer_ugv.swallow.session.classical.setpoint.classes import ClassicalSetPoint
26
26
  from bluer_ugv.swallow.session.classical.position import ClassicalPosition
27
+ from bluer_ugv.swallow.session.classical.screen import ClassicalScreen
27
28
  from bluer_ugv.swallow.session.classical.ultrasonic_sensor.classes import (
28
29
  ClassicalUltrasonicSensor,
29
30
  )
@@ -10,6 +10,9 @@ from bluer_ugv.swallow.session.classical.ultrasonic_sensor.pack import (
10
10
  from bluer_ugv.swallow.session.classical.ultrasonic_sensor.detection import (
11
11
  DetectionState,
12
12
  )
13
+ from bluer_ugv.swallow.session.classical.ultrasonic_sensor.detection_list import (
14
+ DetectionList,
15
+ )
13
16
  from bluer_ugv.swallow.session.classical.ultrasonic_sensor.log import (
14
17
  UltrasonicSensorDetectionLog,
15
18
  )
@@ -42,6 +45,8 @@ class ClassicalUltrasonicSensor:
42
45
  self.setpoint = setpoint
43
46
  self.keyboard = keyboard
44
47
 
48
+ self.detection_list = DetectionList()
49
+
45
50
  self.pack = None
46
51
  self.log = None
47
52
  self.running = False
@@ -85,30 +90,22 @@ class ClassicalUltrasonicSensor:
85
90
  time.sleep(0.01)
86
91
  continue
87
92
 
88
- success, detections = self.pack.detect(
89
- log=env.BLUER_UGV_ULTRASONIC_SENSOR_LOG == 1
93
+ success, self.detection_list = self.pack.detect(
94
+ log=env.BLUER_UGV_ULTRASONIC_SENSOR_LOG == 1,
90
95
  )
91
96
  if not success:
92
97
  raise NameError("failed to detect ultrasonic sensor.")
93
98
 
94
99
  if self.log is not None:
95
- self.log.append(detections)
100
+ self.log.append(self.detection_list)
96
101
 
97
102
  log_detections: bool = False
98
103
  speed = self.setpoint.get(what="speed")
99
- if any(
100
- detection.state == DetectionState.DANGER for detection in detections
101
- ):
104
+ if self.detection_list.state == DetectionState.DANGER:
102
105
  self.setpoint.stop()
103
106
  log_detections = True
104
107
  logger.info("⛔️ danger detected, stopping.")
105
- elif (
106
- any(
107
- detection.state == DetectionState.WARNING
108
- for detection in detections
109
- )
110
- and speed > 0
111
- ):
108
+ elif self.detection_list.state == DetectionState.WARNING and speed > 0:
112
109
  self.setpoint.put(
113
110
  what="speed",
114
111
  value=speed // 2,
@@ -123,8 +120,6 @@ class ClassicalUltrasonicSensor:
123
120
  logger.info(
124
121
  "{}: {}".format(
125
122
  self.__class__.__name__,
126
- ", ".join(
127
- [detection.as_str(short=True) for detection in detections]
128
- ),
123
+ ", ".join(self.detection_list.as_str(short=True)),
129
124
  )
130
125
  )
@@ -0,0 +1,45 @@
1
+ from typing import List, Iterable, Iterator
2
+ from bluer_ugv.swallow.session.classical.ultrasonic_sensor.detection import (
3
+ Detection,
4
+ DetectionState,
5
+ )
6
+
7
+
8
+ class DetectionList:
9
+ def __init__(
10
+ self,
11
+ list_of_detections: Iterable[Detection] | None = None,
12
+ ):
13
+ self._content: List[Detection] = (
14
+ list(list_of_detections) if list_of_detections else []
15
+ )
16
+
17
+ def __iter__(self) -> Iterator[Detection]:
18
+ return iter(self._content)
19
+
20
+ def __len__(self) -> int:
21
+ return len(self._content)
22
+
23
+ def __getitem__(self, index: int) -> Detection:
24
+ return self._content[index]
25
+
26
+ def append(self, detection: Detection) -> None:
27
+ self._content.append(detection)
28
+
29
+ def as_str(
30
+ self,
31
+ short: bool = False,
32
+ ) -> List[str]:
33
+ return [detection.as_str(short=short) for detection in self._content]
34
+
35
+ @property
36
+ def state(self) -> DetectionState:
37
+ if any(detection.state == DetectionState.DANGER for detection in self._content):
38
+ return DetectionState.DANGER
39
+
40
+ if any(
41
+ detection.state == DetectionState.WARNING for detection in self._content
42
+ ):
43
+ return DetectionState.WARNING
44
+
45
+ return DetectionState.CLEAR
@@ -12,16 +12,19 @@ from bluer_objects.graphics.signature import add_signature
12
12
 
13
13
  from bluer_ugv import env
14
14
  from bluer_ugv.swallow.session.classical.ultrasonic_sensor.detection import Detection
15
+ from bluer_ugv.swallow.session.classical.ultrasonic_sensor.detection_list import (
16
+ DetectionList,
17
+ )
15
18
  from bluer_ugv.host import signature
16
19
  from bluer_ugv.logger import logger
17
20
 
18
21
 
19
22
  class UltrasonicSensorDetectionLog:
20
23
  def __init__(self):
21
- self.log: List[List[Detection]] = []
24
+ self.log: List[DetectionList] = []
22
25
 
23
- def append(self, detection: List[Detection]):
24
- self.log.append(detection)
26
+ def append(self, detection_list: DetectionList):
27
+ self.log.append(detection_list)
25
28
 
26
29
  def export(
27
30
  self,
@@ -72,12 +75,12 @@ class UltrasonicSensorDetectionLog:
72
75
  )
73
76
 
74
77
  plt.plot(
75
- [func(list_of_detections[0]) for list_of_detections in self.log],
78
+ [func(detection_list[0]) for detection_list in self.log],
76
79
  color="green",
77
80
  label="left sensor",
78
81
  )
79
82
  plt.plot(
80
- [func(list_of_detections[1]) for list_of_detections in self.log],
83
+ [func(detection_list[1]) for detection_list in self.log],
81
84
  color="blue",
82
85
  label="right sensor",
83
86
  )
@@ -150,8 +153,8 @@ class UltrasonicSensorDetectionLog:
150
153
  ) -> bool:
151
154
  image = np.zeros((len(self.log[0]), len(self.log), 3), dtype=np.uint8)
152
155
 
153
- for detection_index, list_of_detections in enumerate(self.log):
154
- for sensor_index, detection in enumerate(list_of_detections):
156
+ for detection_index, detection_list in enumerate(self.log):
157
+ for sensor_index, detection in enumerate(detection_list):
155
158
  assert isinstance(detection, Detection)
156
159
 
157
160
  for channel in range(3):
@@ -213,12 +216,12 @@ class UltrasonicSensorDetectionLog:
213
216
  if not path.create(temp_folder):
214
217
  return False
215
218
 
216
- for index, detections in tqdm(enumerate(self.log)):
219
+ for index, detection_list in tqdm(enumerate(self.log)):
217
220
  if frame_count != -1 and len(image_list) >= frame_count:
218
221
  rm_blank_count += 1
219
222
  break
220
223
 
221
- if rm_blank and all(detection.is_blank for detection in detections):
224
+ if rm_blank and all(detection.is_blank for detection in detection_list):
222
225
  continue
223
226
 
224
227
  filename = objects.path_of(
@@ -230,12 +233,12 @@ class UltrasonicSensorDetectionLog:
230
233
  [
231
234
  detection.as_image(
232
235
  height=height,
233
- width=int(width / len(detections)),
236
+ width=int(width / len(detection_list)),
234
237
  max_m=max_m,
235
- line_width=int(line_width / len(detections)),
238
+ line_width=int(line_width / len(detection_list)),
236
239
  sign=False,
237
240
  )
238
- for detection in detections
241
+ for detection in detection_list
239
242
  ],
240
243
  axis=1,
241
244
  )
@@ -254,14 +257,14 @@ class UltrasonicSensorDetectionLog:
254
257
  env.BLUER_UGV_ULTRASONIC_SENSOR_DANGER_THRESHOLD
255
258
  ),
256
259
  ]
257
- + [detection.as_str(short=True) for detection in detections]
260
+ + detection_list.as_str(short=True)
258
261
  + objects.signature(
259
262
  "frame #{:04d}/{}".format(
260
263
  index,
261
264
  len(self.log),
262
265
  ),
263
266
  object_name,
264
- )
267
+ ),
265
268
  )
266
269
  ],
267
270
  footer=[" | ".join(signature())],
@@ -316,8 +319,8 @@ class UltrasonicSensorDetectionLog:
316
319
  ),
317
320
  {
318
321
  "detections": [
319
- [detection.as_dict() for detection in list_of_detections]
320
- for list_of_detections in self.log
322
+ [detection.as_dict() for detection in detection_list]
323
+ for detection_list in self.log
321
324
  ]
322
325
  },
323
326
  log=log,
@@ -4,7 +4,9 @@ from bluer_ugv import env
4
4
  from bluer_ugv.swallow.session.classical.ultrasonic_sensor.sensor import (
5
5
  lUltrasonicSensor,
6
6
  )
7
- from bluer_ugv.swallow.session.classical.ultrasonic_sensor.detection import Detection
7
+ from bluer_ugv.swallow.session.classical.ultrasonic_sensor.detection_list import (
8
+ DetectionList,
9
+ )
8
10
  from bluer_ugv.logger import logger
9
11
 
10
12
 
@@ -30,7 +32,7 @@ class UltrasonicSensorPack:
30
32
  def detect(
31
33
  self,
32
34
  log: bool = True,
33
- ) -> Tuple[bool, List[Detection]]:
35
+ ) -> Tuple[bool, DetectionList]:
34
36
  success_left, detection_left = self.left.detect(log=False)
35
37
  success_right, detection_right = self.right.detect(log=False)
36
38
 
@@ -45,6 +47,16 @@ class UltrasonicSensorPack:
45
47
  )
46
48
 
47
49
  return (
48
- success_left and success_right,
49
- [detection_left, detection_right],
50
+ all(
51
+ [
52
+ success_left,
53
+ success_right,
54
+ ]
55
+ ),
56
+ DetectionList(
57
+ [
58
+ detection_left,
59
+ detection_right,
60
+ ],
61
+ ),
50
62
  )
@@ -32,12 +32,12 @@ def test(
32
32
  success = True
33
33
  try:
34
34
  while True:
35
- success, detection = ultrasonic_sensor_pack.detect(log=log)
35
+ success, detection_list = ultrasonic_sensor_pack.detect(log=log)
36
36
  if not success:
37
37
  break
38
38
 
39
39
  if export:
40
- detection_log.append(detection)
40
+ detection_log.append(detection_list)
41
41
  except KeyboardInterrupt:
42
42
  logger.info("^C detected.")
43
43
  finally:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bluer_ugv
3
- Version: 7.340.1
3
+ Version: 7.359.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
  [![pylint](https://github.com/kamangir/bluer-ugv/actions/workflows/pylint.yml/badge.svg)](https://github.com/kamangir/bluer-ugv/actions/workflows/pylint.yml) [![pytest](https://github.com/kamangir/bluer-ugv/actions/workflows/pytest.yml/badge.svg)](https://github.com/kamangir/bluer-ugv/actions/workflows/pytest.yml) [![bashtest](https://github.com/kamangir/bluer-ugv/actions/workflows/bashtest.yml/badge.svg)](https://github.com/kamangir/bluer-ugv/actions/workflows/bashtest.yml) [![PyPI version](https://img.shields.io/pypi/v/bluer-ugv.svg)](https://pypi.org/project/bluer-ugv/) [![PyPI - Downloads](https://img.shields.io/pypi/dd/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.340.1`](https://github.com/kamangir/bluer-ugv).
67
+ built by 🌀 [`bluer README`](https://github.com/kamangir/bluer-objects/tree/main/bluer_objects/README), based on 🐬 [`bluer_ugv-7.359.1`](https://github.com/kamangir/bluer-ugv).
68
68
 
69
69
 
70
70
  built by 🌀 [`blueness-3.118.1`](https://github.com/kamangir/blueness).
@@ -61,7 +61,6 @@ bluer_ugv/README/consts.py
61
61
  bluer_ugv/README/items.py
62
62
  bluer_ugv/README/releases.py
63
63
  bluer_ugv/README/root.py
64
- bluer_ugv/README/shield.py
65
64
  bluer_ugv/README/shortcuts.py
66
65
  bluer_ugv/README/arzhang/__init__.py
67
66
  bluer_ugv/README/arzhang/algo.py
@@ -81,6 +80,12 @@ bluer_ugv/README/rangin/items.py
81
80
  bluer_ugv/README/ravin/__init__.py
82
81
  bluer_ugv/README/ravin/consts.py
83
82
  bluer_ugv/README/ravin/items.py
83
+ bluer_ugv/README/shield/__init__.py
84
+ bluer_ugv/README/shield/box.py
85
+ bluer_ugv/README/shield/docs.py
86
+ bluer_ugv/README/shield/pcb.py
87
+ bluer_ugv/README/shield/schematics.py
88
+ bluer_ugv/README/shield/testing.py
84
89
  bluer_ugv/README/swallow/__init__.py
85
90
  bluer_ugv/README/swallow/analog.py
86
91
  bluer_ugv/README/swallow/consts.py
@@ -158,6 +163,7 @@ bluer_ugv/swallow/session/classical/mode.py
158
163
  bluer_ugv/swallow/session/classical/mousepad.py
159
164
  bluer_ugv/swallow/session/classical/position.py
160
165
  bluer_ugv/swallow/session/classical/push_button.py
166
+ bluer_ugv/swallow/session/classical/screen.py
161
167
  bluer_ugv/swallow/session/classical/session.py
162
168
  bluer_ugv/swallow/session/classical/camera/__init__.py
163
169
  bluer_ugv/swallow/session/classical/camera/generic.py
@@ -183,6 +189,7 @@ bluer_ugv/swallow/session/classical/ultrasonic_sensor/__main__.py
183
189
  bluer_ugv/swallow/session/classical/ultrasonic_sensor/classes.py
184
190
  bluer_ugv/swallow/session/classical/ultrasonic_sensor/consts.py
185
191
  bluer_ugv/swallow/session/classical/ultrasonic_sensor/detection.py
192
+ bluer_ugv/swallow/session/classical/ultrasonic_sensor/detection_list.py
186
193
  bluer_ugv/swallow/session/classical/ultrasonic_sensor/log.py
187
194
  bluer_ugv/swallow/session/classical/ultrasonic_sensor/pack.py
188
195
  bluer_ugv/swallow/session/classical/ultrasonic_sensor/review.py
@@ -18,6 +18,7 @@ setup(
18
18
  f"{NAME}.README.fire",
19
19
  f"{NAME}.README.rangin",
20
20
  f"{NAME}.README.ravin",
21
+ f"{NAME}.README.shield",
21
22
  f"{NAME}.README.swallow",
22
23
  f"{NAME}.README.swallow.digital",
23
24
  f"{NAME}.README.swallow.digital.algo",
@@ -1,62 +0,0 @@
1
- from bluer_objects.README.items import ImageItems
2
-
3
- from bluer_ugv.README.swallow.consts import (
4
- swallow_assets2,
5
- swallow_designs,
6
- swallow_electrical_designs,
7
- )
8
-
9
- items = ImageItems(
10
- {
11
- f"{swallow_electrical_designs}/digital.png": f"{swallow_electrical_designs}/digital.svg",
12
- f"{swallow_assets2}/20250609_164433.jpg": "",
13
- f"{swallow_assets2}/20250614_102301.jpg": "",
14
- f"{swallow_assets2}/20250614_114954.jpg": "",
15
- f"{swallow_assets2}/20250615_192339.jpg": "",
16
- f"{swallow_assets2}/20250703_153834.jpg": "",
17
- f"{swallow_assets2}/design/v2/01.jpg": "",
18
- f"{swallow_assets2}/design/v3/01.jpg": "",
19
- f"{swallow_assets2}/design/v4/01.jpg": "",
20
- f"{swallow_assets2}/20250925_213013.jpg": "",
21
- f"{swallow_assets2}/20250925_214017.jpg": "",
22
- f"{swallow_assets2}/20250928_160425.jpg": "",
23
- f"{swallow_assets2}/20250928_160449.jpg": "",
24
- f"{swallow_assets2}/design/head-v1/01.jpg": "",
25
- f"{swallow_assets2}/20251002_103712.jpg": "",
26
- f"{swallow_assets2}/20251002_103720.jpg": "",
27
- f"{swallow_assets2}/design/v5/01.jpg": "",
28
- f"{swallow_electrical_designs}/nuts-bolts-spacers.png": f"{swallow_electrical_designs}/nuts-bolts-spacers.svg",
29
- f"{swallow_assets2}/20251018_133202.jpg": "",
30
- f"{swallow_assets2}/20251018_133349.jpg": "",
31
- f"{swallow_assets2}/20251008_114557.jpg": "",
32
- f"{swallow_assets2}/20251008_133418.jpg": "",
33
- f"{swallow_assets2}/20251008_124129.jpg": "",
34
- f"{swallow_assets2}/20251008_124932.jpg": "",
35
- f"{swallow_designs}/kicad/swallow/exports/swallow.png": f"{swallow_designs}/kicad/swallow/exports/swallow.pdf",
36
- f"{swallow_designs}/kicad/swallow/exports/swallow-3d.png": "",
37
- f"{swallow_designs}/kicad/swallow/exports/swallow-3d-back.png": "",
38
- f"{swallow_designs}/kicad/swallow/exports/swallow-pcb.png": "",
39
- f"{swallow_assets2}/20250609_164433.jpg": "",
40
- f"{swallow_assets2}/20251112_085331.jpg": "",
41
- f"{swallow_assets2}/20251112_181047.jpg": "",
42
- f"{swallow_assets2}/20251112_181053.jpg": "",
43
- }
44
- )
45
-
46
-
47
- docs = [
48
- {
49
- "path": "../docs/swallow/digital/design/shield",
50
- "items": items,
51
- },
52
- {
53
- "path": "../docs/swallow/digital/design/shield/testing.md",
54
- "items": ImageItems(
55
- {
56
- f"{swallow_assets2}/20251113_205142.jpg": "",
57
- f"{swallow_assets2}/20251113_210730.jpg": "",
58
- f"{swallow_assets2}/20251113_210706.jpg": "",
59
- },
60
- ),
61
- },
62
- ]
File without changes
File without changes