bluer-ugv 7.824.1__tar.gz → 7.838.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 (267) hide show
  1. {bluer_ugv-7.824.1/bluer_ugv.egg-info → bluer_ugv-7.838.1}/PKG-INFO +2 -2
  2. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/README.md +1 -1
  3. bluer_ugv-7.838.1/bluer_ugv/.abcli/swallow/env/cat.sh +5 -0
  4. bluer_ugv-7.838.1/bluer_ugv/.abcli/swallow/env/cd.sh +5 -0
  5. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/.abcli/tests/help.sh +2 -0
  6. bluer_ugv-7.838.1/bluer_ugv/README/ugvs/location.py +22 -0
  7. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/__init__.py +1 -1
  8. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/help/swallow/env.py +34 -1
  9. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/swallow/session/classical/ethernet/classes.py +0 -3
  10. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/swallow/session/classical/ethernet/client.py +2 -8
  11. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/swallow/session/classical/motor/__init__.py +1 -0
  12. bluer_ugv-7.838.1/bluer_ugv/swallow/session/classical/motor/void.py +20 -0
  13. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/swallow/session/classical/session.py +55 -11
  14. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/swallow/session/classical/setpoint/classes.py +6 -0
  15. bluer_ugv-7.838.1/bluer_ugv/swallow/session/classical/setpoint/ethernet.py +31 -0
  16. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1/bluer_ugv.egg-info}/PKG-INFO +2 -2
  17. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv.egg-info/SOURCES.txt +5 -0
  18. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/LICENSE +0 -0
  19. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/MANIFEST.in +0 -0
  20. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/.abcli/abcli.sh +0 -0
  21. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/.abcli/actions.sh +0 -0
  22. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/.abcli/aka.sh +0 -0
  23. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/.abcli/alias.sh +0 -0
  24. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/.abcli/bluer_ugv.sh +0 -0
  25. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/.abcli/swallow/dataset/combine.sh +0 -0
  26. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/.abcli/swallow/dataset/download.sh +0 -0
  27. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/.abcli/swallow/dataset/edit.sh +0 -0
  28. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/.abcli/swallow/dataset/list.sh +0 -0
  29. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/.abcli/swallow/dataset/upload.sh +0 -0
  30. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/.abcli/swallow/dataset.sh +0 -0
  31. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/.abcli/swallow/debug.sh +0 -0
  32. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/.abcli/swallow/env/cp.sh +0 -0
  33. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/.abcli/swallow/env/list.sh +0 -0
  34. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/.abcli/swallow/env/set.sh +0 -0
  35. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/.abcli/swallow/env.sh +0 -0
  36. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/.abcli/swallow/ethernet/test.sh +0 -0
  37. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/.abcli/swallow/ethernet.sh +0 -0
  38. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/.abcli/swallow/git/rm_keys.sh +0 -0
  39. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/.abcli/swallow/git.sh +0 -0
  40. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/.abcli/swallow/keyboard/test.sh +0 -0
  41. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/.abcli/swallow/keyboard.sh +0 -0
  42. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/.abcli/swallow/select_target.sh +0 -0
  43. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/.abcli/swallow/session.sh +0 -0
  44. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/.abcli/swallow/ultrasonic/review.sh +0 -0
  45. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/.abcli/swallow/ultrasonic/test.sh +0 -0
  46. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/.abcli/swallow/ultrasonic.sh +0 -0
  47. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/.abcli/swallow/video/play.sh +0 -0
  48. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/.abcli/swallow/video/playlist/cat.sh +0 -0
  49. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/.abcli/swallow/video/playlist/download.sh +0 -0
  50. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/.abcli/swallow/video/playlist/edit.sh +0 -0
  51. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/.abcli/swallow/video/playlist/upload.sh +0 -0
  52. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/.abcli/swallow/video/playlist.sh +0 -0
  53. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/.abcli/swallow/video.sh +0 -0
  54. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/.abcli/swallow.sh +0 -0
  55. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/.abcli/tests/README.sh +0 -0
  56. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/.abcli/tests/swallow_dataset_combine.sh +0 -0
  57. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/.abcli/tests/swallow_dataset_combine_explicit.sh +0 -0
  58. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/.abcli/tests/swallow_dataset_combine_sequence.sh +0 -0
  59. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/.abcli/tests/swallow_dataset_download_upload.sh +0 -0
  60. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/.abcli/tests/swallow_dataset_edit.sh +0 -0
  61. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/.abcli/tests/swallow_dataset_list.sh +0 -0
  62. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/.abcli/tests/swallow_video_play.sh +0 -0
  63. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/.abcli/tests/swallow_video_playlist.sh +0 -0
  64. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/.abcli/tests/ugv_get.sh +0 -0
  65. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/.abcli/tests/ultrasonic_sensor_review.sh +0 -0
  66. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/.abcli/tests/version.sh +0 -0
  67. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/.abcli/ugv/get.sh +0 -0
  68. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/.abcli/ugv/git.sh +0 -0
  69. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/.abcli/ugv/ssh.sh +0 -0
  70. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/.abcli/ugv/watch.sh +0 -0
  71. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/__init__.py +0 -0
  72. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/aliases.py +0 -0
  73. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/arzhang/__init__.py +0 -0
  74. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/arzhang/algo.py +0 -0
  75. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/arzhang/consts.py +0 -0
  76. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/arzhang/design.py +0 -0
  77. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/arzhang/docs.py +0 -0
  78. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/arzhang/flag.py +0 -0
  79. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/arzhang/items.py +0 -0
  80. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/beast.py +0 -0
  81. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/build.py +0 -0
  82. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/computer/__init__.py +0 -0
  83. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/computer/box.py +0 -0
  84. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/computer/docs.py +0 -0
  85. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/computer/power.py +0 -0
  86. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/computer/schematics.py +0 -0
  87. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/computer/shield/__init__.py +0 -0
  88. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/computer/shield/docs.py +0 -0
  89. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/computer/shield/parts.py +0 -0
  90. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/computer/shield/testing.py +0 -0
  91. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/computer/shield/v1.py +0 -0
  92. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/computer/shield/v2.py +0 -0
  93. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/computer/testing.py +0 -0
  94. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/consts.py +0 -0
  95. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/docs.py +0 -0
  96. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/eagle/__init__.py +0 -0
  97. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/eagle/consts.py +0 -0
  98. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/eagle/docs.py +0 -0
  99. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/eagle/items.py +0 -0
  100. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/fire/__init__.py +0 -0
  101. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/fire/consts.py +0 -0
  102. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/fire/docs.py +0 -0
  103. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/fire/items.py +0 -0
  104. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/items.py +0 -0
  105. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/rangin/__init__.py +0 -0
  106. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/rangin/consts.py +0 -0
  107. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/rangin/docs.py +0 -0
  108. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/rangin/items.py +0 -0
  109. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/rangin/mechanical.py +0 -0
  110. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/rangin/parts.py +0 -0
  111. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/rangin/power.py +0 -0
  112. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/rangin/root.py +0 -0
  113. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/rangin/schematics.py +0 -0
  114. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/rangin/specs.py +0 -0
  115. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/rangin/terraform.py +0 -0
  116. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/ravin/__init__.py +0 -0
  117. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/ravin/consts.py +0 -0
  118. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/ravin/docs.py +0 -0
  119. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/ravin/items.py +0 -0
  120. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/releases.py +0 -0
  121. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/root.py +0 -0
  122. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/shortcuts.py +0 -0
  123. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/swallow/__init__.py +0 -0
  124. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/swallow/analog.py +0 -0
  125. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/swallow/consts.py +0 -0
  126. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/swallow/digital/__init__.py +0 -0
  127. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/swallow/digital/algo/__init__.py +0 -0
  128. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/swallow/digital/algo/driving.py +0 -0
  129. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/swallow/digital/algo/navigation.py +0 -0
  130. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/swallow/digital/algo/tracking.py +0 -0
  131. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/swallow/digital/algo/yolo.py +0 -0
  132. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/swallow/digital/design/__init__.py +0 -0
  133. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/swallow/digital/design/ethernet.py +0 -0
  134. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/swallow/digital/design/mechanical.py +0 -0
  135. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/swallow/digital/design/parts.py +0 -0
  136. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/swallow/digital/design/ultrasonic_sensor.py +0 -0
  137. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/swallow/items.py +0 -0
  138. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/ugvs/__init__.py +0 -0
  139. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/ugvs/__main__.py +0 -0
  140. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/ugvs/comparison/__init__.py +0 -0
  141. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/ugvs/comparison/build.py +0 -0
  142. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/ugvs/comparison/features/DYI.py +0 -0
  143. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/ugvs/comparison/features/__init__.py +0 -0
  144. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/ugvs/comparison/features/classes.py +0 -0
  145. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/ugvs/comparison/features/concealment.py +0 -0
  146. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/ugvs/comparison/features/control.py +0 -0
  147. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/ugvs/comparison/features/cost.py +0 -0
  148. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/ugvs/comparison/features/db.py +0 -0
  149. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/ugvs/comparison/features/payload.py +0 -0
  150. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/ugvs/comparison/features/ps.py +0 -0
  151. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/ugvs/comparison/features/range.py +0 -0
  152. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/ugvs/comparison/features/sanction_proof.py +0 -0
  153. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/ugvs/comparison/features/size.py +0 -0
  154. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/ugvs/comparison/features/speed.py +0 -0
  155. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/ugvs/comparison/features/swarm.py +0 -0
  156. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/ugvs/comparison/features/uv_delivery.py +0 -0
  157. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/ugvs/comparison/references/__init__.py +0 -0
  158. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/ugvs/comparison/references/classes.py +0 -0
  159. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/ugvs/comparison/references/db.py +0 -0
  160. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/ugvs/comparison/ugvs/__init__.py +0 -0
  161. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/ugvs/comparison/ugvs/classes.py +0 -0
  162. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/ugvs/comparison/ugvs/db.py +0 -0
  163. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/ugvs/db.py +0 -0
  164. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/ugvs/docs.py +0 -0
  165. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/ugvs/ethernet.py +0 -0
  166. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/README/ugvs/get.py +0 -0
  167. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/__main__.py +0 -0
  168. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/assets/comparison.html +0 -0
  169. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/config.env +0 -0
  170. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/designs/__init__.py +0 -0
  171. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/designs/eagle/__init__.py +0 -0
  172. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/designs/eagle/parts.py +0 -0
  173. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/designs/fire/__init__.py +0 -0
  174. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/designs/fire/parts.py +0 -0
  175. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/designs/rangin/__init__.py +0 -0
  176. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/designs/rangin/parts.py +0 -0
  177. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/designs/ravin/__init__.py +0 -0
  178. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/designs/ravin/ravin3/__init__.py +0 -0
  179. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/designs/ravin/ravin3/parts.py +0 -0
  180. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/designs/ravin/ravin4/__init__.py +0 -0
  181. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/designs/ravin/ravin4/parts.py +0 -0
  182. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/env.py +0 -0
  183. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/help/__init__.py +0 -0
  184. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/help/__main__.py +0 -0
  185. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/help/functions.py +0 -0
  186. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/help/get.py +0 -0
  187. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/help/git.py +0 -0
  188. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/help/ssh.py +0 -0
  189. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/help/swallow/__init__.py +0 -0
  190. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/help/swallow/dataset.py +0 -0
  191. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/help/swallow/debug.py +0 -0
  192. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/help/swallow/ethernet.py +0 -0
  193. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/help/swallow/git.py +0 -0
  194. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/help/swallow/keyboard.py +0 -0
  195. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/help/swallow/select_target.py +0 -0
  196. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/help/swallow/ultrasonic_sensor.py +0 -0
  197. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/help/swallow/video/__init__.py +0 -0
  198. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/help/swallow/video/functions.py +0 -0
  199. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/help/swallow/video/playlist.py +0 -0
  200. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/help/watch.py +0 -0
  201. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/host.py +0 -0
  202. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/logger.py +0 -0
  203. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/sample.env +0 -0
  204. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/swallow/__init__.py +0 -0
  205. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/swallow/__main__.py +0 -0
  206. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/swallow/dataset/__init__.py +0 -0
  207. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/swallow/dataset/__main__.py +0 -0
  208. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/swallow/dataset/combination.py +0 -0
  209. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/swallow/debug.py +0 -0
  210. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/swallow/session/__init__.py +0 -0
  211. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/swallow/session/__main__.py +0 -0
  212. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/swallow/session/classical/__init__.py +0 -0
  213. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/swallow/session/classical/camera/__init__.py +0 -0
  214. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/swallow/session/classical/camera/generic.py +0 -0
  215. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/swallow/session/classical/camera/navigation.py +0 -0
  216. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/swallow/session/classical/camera/tracking.py +0 -0
  217. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/swallow/session/classical/camera/void.py +0 -0
  218. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/swallow/session/classical/camera/yolo.py +0 -0
  219. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/swallow/session/classical/ethernet/__init__.py +0 -0
  220. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/swallow/session/classical/ethernet/__main__.py +0 -0
  221. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/swallow/session/classical/ethernet/command.py +0 -0
  222. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/swallow/session/classical/ethernet/testing.py +0 -0
  223. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/swallow/session/classical/keyboard/__init__.py +0 -0
  224. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/swallow/session/classical/keyboard/__main__.py +0 -0
  225. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/swallow/session/classical/keyboard/classes.py +0 -0
  226. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/swallow/session/classical/keyboard/keys.py +0 -0
  227. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/swallow/session/classical/keyboard/testing.py +0 -0
  228. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/swallow/session/classical/leds.py +0 -0
  229. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/swallow/session/classical/mode.py +0 -0
  230. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/swallow/session/classical/motor/generic.py +0 -0
  231. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/swallow/session/classical/motor/left.py +0 -0
  232. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/swallow/session/classical/motor/rear.py +0 -0
  233. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/swallow/session/classical/motor/right.py +0 -0
  234. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/swallow/session/classical/motor/steering.py +0 -0
  235. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/swallow/session/classical/mousepad.py +0 -0
  236. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/swallow/session/classical/position.py +0 -0
  237. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/swallow/session/classical/push_button.py +0 -0
  238. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/swallow/session/classical/screen/__init__.py +0 -0
  239. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/swallow/session/classical/screen/classes.py +0 -0
  240. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/swallow/session/classical/screen/video/__init__.py +0 -0
  241. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/swallow/session/classical/screen/video/__main__.py +0 -0
  242. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/swallow/session/classical/screen/video/engine.py +0 -0
  243. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/swallow/session/classical/screen/video/player.py +0 -0
  244. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/swallow/session/classical/screen/video/playlist.py +0 -0
  245. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/swallow/session/classical/setpoint/__init__.py +0 -0
  246. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/swallow/session/classical/setpoint/steering.py +0 -0
  247. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/swallow/session/classical/ultrasonic_sensor/__init__.py +0 -0
  248. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/swallow/session/classical/ultrasonic_sensor/__main__.py +0 -0
  249. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/swallow/session/classical/ultrasonic_sensor/classes.py +0 -0
  250. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/swallow/session/classical/ultrasonic_sensor/consts.py +0 -0
  251. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/swallow/session/classical/ultrasonic_sensor/detection.py +0 -0
  252. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/swallow/session/classical/ultrasonic_sensor/detection_list.py +0 -0
  253. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/swallow/session/classical/ultrasonic_sensor/log.py +0 -0
  254. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/swallow/session/classical/ultrasonic_sensor/pack.py +0 -0
  255. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/swallow/session/classical/ultrasonic_sensor/review.py +0 -0
  256. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/swallow/session/classical/ultrasonic_sensor/sensor.py +0 -0
  257. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/swallow/session/classical/ultrasonic_sensor/testing.py +0 -0
  258. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/swallow/session/functions.py +0 -0
  259. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/swallow/targeting.py +0 -0
  260. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv/urls.py +0 -0
  261. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv.egg-info/dependency_links.txt +0 -0
  262. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv.egg-info/requires.txt +0 -0
  263. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/bluer_ugv.egg-info/top_level.txt +0 -0
  264. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/pyproject.toml +0 -0
  265. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/requirements.txt +0 -0
  266. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/setup.cfg +0 -0
  267. {bluer_ugv-7.824.1 → bluer_ugv-7.838.1}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bluer_ugv
3
- Version: 7.824.1
3
+ Version: 7.838.1
4
4
  Summary: 🐬 AI x UGV.
5
5
  Home-page: https://github.com/kamangir/bluer-ugv
6
6
  Author: Arash Abadpour (Kamangir)
@@ -65,7 +65,7 @@ pip install bluer_ugv
65
65
 
66
66
  [![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)
67
67
 
68
- built by 🌀 [`bluer README`](https://github.com/kamangir/bluer-objects/tree/main/bluer_objects/README), based on 🐬 [`bluer_ugv-7.824.1`](https://github.com/kamangir/bluer-ugv).
68
+ built by 🌀 [`bluer README`](https://github.com/kamangir/bluer-objects/tree/main/bluer_objects/README), based on 🐬 [`bluer_ugv-7.838.1`](https://github.com/kamangir/bluer-ugv).
69
69
 
70
70
 
71
71
  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.824.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.838.1`](https://github.com/kamangir/bluer-ugv).
39
39
 
@@ -0,0 +1,5 @@
1
+ #! /usr/bin/env bash
2
+
3
+ function bluer_ugv_swallow_env_cat() {
4
+ bluer_ai_cat $abcli_path_assets/env/swallow-raspbian-${1:-driving}
5
+ }
@@ -0,0 +1,5 @@
1
+ #! /usr/bin/env bash
2
+
3
+ function bluer_ugv_swallow_env_cd() {
4
+ cd $abcli_path_assets/env/
5
+ }
@@ -16,6 +16,8 @@ function test_bluer_ugv_help() {
16
16
  "@swallow debug" \
17
17
  \
18
18
  "@swallow env" \
19
+ "@swallow env cat" \
20
+ "@swallow env cd" \
19
21
  "@swallow env cp" \
20
22
  "@swallow env list" \
21
23
  "@swallow env set" \
@@ -0,0 +1,22 @@
1
+ from typing import Tuple
2
+
3
+ from bluer_ugv.README.ugvs.db import dict_of_ugvs
4
+ from bluer_ugv.logger import logger
5
+
6
+
7
+ def get_location(
8
+ hostname: str,
9
+ log: bool = True,
10
+ ) -> Tuple[bool, str]:
11
+ for info in dict_of_ugvs.values():
12
+ dict_of_computers = info.get("computers", {})
13
+ assert isinstance(dict_of_computers, dict)
14
+
15
+ for location, hostname_ in dict_of_computers.items():
16
+ if hostname == hostname_:
17
+ if log:
18
+ logger.info(f"{hostname}.location={location}")
19
+ return True, location
20
+
21
+ logger.error(f"{hostname}.location not found.")
22
+ return False, ""
@@ -4,7 +4,7 @@ ICON = "🐬"
4
4
 
5
5
  DESCRIPTION = f"{ICON} AI x UGV."
6
6
 
7
- VERSION = "7.824.1"
7
+ VERSION = "7.838.1"
8
8
 
9
9
  REPO_NAME = "bluer-ugv"
10
10
 
@@ -4,6 +4,37 @@ from bluer_options.terminal import show_usage
4
4
  from bluer_sbc import env
5
5
 
6
6
 
7
+ def help_cat(
8
+ tokens: List[str],
9
+ mono: bool,
10
+ ) -> str:
11
+ return show_usage(
12
+ [
13
+ "@swallow",
14
+ "env",
15
+ "cat",
16
+ "[<env-name>]",
17
+ ],
18
+ "cat swallow-raspbian-<env-name>.env.",
19
+ mono=mono,
20
+ )
21
+
22
+
23
+ def help_cd(
24
+ tokens: List[str],
25
+ mono: bool,
26
+ ) -> str:
27
+ return show_usage(
28
+ [
29
+ "@swallow",
30
+ "env",
31
+ "cd",
32
+ ],
33
+ "cd env folder.",
34
+ mono=mono,
35
+ )
36
+
37
+
7
38
  def help_cp(
8
39
  tokens: List[str],
9
40
  mono: bool,
@@ -52,7 +83,7 @@ def help_set(
52
83
  f"bps: BLUER_SBC_SWALLOW_HAS_BPS (currently: {env.BLUER_SBC_SWALLOW_HAS_BPS})": "",
53
84
  f"camera: BLUER_SBC_SWALLOW_HAS_CAMERA (currently: {env.BLUER_SBC_SWALLOW_HAS_CAMERA})": "",
54
85
  f"full_keyboard: BLUER_SBC_SWALLOW_HAS_FULL_KEYBOARD (currently: {env.BLUER_SBC_SWALLOW_HAS_FULL_KEYBOARD})": "",
55
- f" screen: BLUER_SBC_ENABLE_SCREEN (currently: {env.BLUER_SBC_ENABLE_SCREEN})"
86
+ f" screen: BLUER_SBC_ENABLE_SCREEN (currently: {env.BLUER_SBC_ENABLE_SCREEN})": "",
56
87
  f"steering: BLUER_SBC_SWALLOW_HAS_STEERING (currently: {env.BLUER_SBC_SWALLOW_HAS_STEERING})": "",
57
88
  },
58
89
  mono=mono,
@@ -60,6 +91,8 @@ def help_set(
60
91
 
61
92
 
62
93
  help_functions = {
94
+ "cat": help_cat,
95
+ "cd": help_cd,
63
96
  "cp": help_cp,
64
97
  "list": help_list,
65
98
  "set": help_set,
@@ -47,6 +47,3 @@ class ClassicalEthernet:
47
47
 
48
48
  while self.running:
49
49
  self.client.process()
50
-
51
- def update(self):
52
- return not self.client.stop_received
@@ -6,8 +6,6 @@ import struct
6
6
  import threading
7
7
  import time
8
8
 
9
- from bluer_sbc.session.functions import reply_to_bash
10
-
11
9
  from bluer_ugv.logger import logger
12
10
  from bluer_ugv.swallow.session.classical.ethernet.command import EthernetCommand
13
11
  from bluer_ugv.logger import logger
@@ -21,14 +19,13 @@ class EthernetClient:
21
19
  is_server: bool = False,
22
20
  reconnect_sec: float = 1.0,
23
21
  ):
24
- self.stop_received: bool = False
25
-
26
22
  self.host = host
27
23
  self.port = port
28
24
  self.is_server = is_server
29
25
  self.reconnect_sec = reconnect_sec
30
26
 
31
27
  self._send_queue: SimpleQueue[EthernetCommand] = SimpleQueue()
28
+ self._receive_queue: SimpleQueue[EthernetCommand] = SimpleQueue()
32
29
 
33
30
  self._lock = threading.Lock()
34
31
  self._sock: Optional[socket.socket] = None
@@ -250,10 +247,7 @@ class EthernetClient:
250
247
  )
251
248
  )
252
249
 
253
- if command.action == "keyboard":
254
- reply_to_bash(command.data.get("event", "unknown"))
255
- self.stop_received = True
256
- logger.info("stop received.")
250
+ self._receive_queue.put(command)
257
251
 
258
252
  # 2) drain outbound queue
259
253
  self._drain_send_queue()
@@ -2,3 +2,4 @@ from bluer_ugv.swallow.session.classical.motor.left import ClassicalLeftMotor
2
2
  from bluer_ugv.swallow.session.classical.motor.right import ClassicalRightMotor
3
3
  from bluer_ugv.swallow.session.classical.motor.rear import ClassicalRearMotors
4
4
  from bluer_ugv.swallow.session.classical.motor.steering import ClassicalSteeringMotor
5
+ from bluer_ugv.swallow.session.classical.motor.void import ClassicalVoidMotor
@@ -0,0 +1,20 @@
1
+ from bluer_ugv.swallow.session.classical.leds import ClassicalLeds
2
+ from bluer_ugv.swallow.session.classical.setpoint.classes import ClassicalSetPoint
3
+
4
+
5
+ class ClassicalVoidMotor:
6
+ def __init__(
7
+ self,
8
+ setpoint: ClassicalSetPoint,
9
+ leds: ClassicalLeds,
10
+ ):
11
+ pass
12
+
13
+ def cleanup(self):
14
+ pass
15
+
16
+ def initialize(self) -> bool:
17
+ return True
18
+
19
+ def update(self) -> bool:
20
+ return True
@@ -1,11 +1,15 @@
1
1
  from RPi import GPIO # type: ignore
2
+ from queue import Empty
2
3
 
3
4
  from bluer_options import string
5
+ from bluer_options.env import abcli_hostname
4
6
  from bluer_options.timing.classes import Timing
5
7
  from bluer_objects.env import abcli_object_name
6
8
  from bluer_objects.metadata import post_to_object
7
9
  from bluer_sbc.env import BLUER_SBC_CAMERA_KIND, BLUER_SBC_SWALLOW_HAS_STEERING
10
+ from bluer_sbc.session.functions import reply_to_bash
8
11
 
12
+ from bluer_ugv.README.ugvs.location import get_location
9
13
  from bluer_ugv.swallow.session.classical.ethernet.classes import ClassicalEthernet
10
14
  from bluer_ugv.swallow.session.classical.camera import (
11
15
  ClassicalCamera,
@@ -23,8 +27,12 @@ from bluer_ugv.swallow.session.classical.motor import (
23
27
  ClassicalRightMotor,
24
28
  ClassicalRearMotors,
25
29
  ClassicalSteeringMotor,
30
+ ClassicalVoidMotor,
26
31
  )
27
32
  from bluer_ugv.swallow.session.classical.setpoint.classes import ClassicalSetPoint
33
+ from bluer_ugv.swallow.session.classical.setpoint.ethernet import (
34
+ ClassicalEthernetSetPoint,
35
+ )
28
36
  from bluer_ugv.swallow.session.classical.position import ClassicalPosition
29
37
  from bluer_ugv.swallow.session.classical.screen.classes import ClassicalScreen
30
38
  from bluer_ugv.swallow.session.classical.ultrasonic_sensor.classes import (
@@ -42,6 +50,8 @@ class ClassicalSession:
42
50
  ):
43
51
  self.object_name = object_name
44
52
 
53
+ _, self.location = get_location(abcli_hostname)
54
+
45
55
  GPIO.setmode(GPIO.BCM)
46
56
 
47
57
  self.ethernet = ClassicalEthernet()
@@ -52,7 +62,10 @@ class ClassicalSession:
52
62
  leds=self.leds,
53
63
  )
54
64
 
55
- self.setpoint = ClassicalSetPoint(
65
+ self.setpoint = (
66
+ ClassicalSetPoint if self.location == "front" else ClassicalEthernetSetPoint
67
+ )(
68
+ ethernet=self.ethernet,
56
69
  leds=self.leds,
57
70
  )
58
71
 
@@ -81,27 +94,34 @@ class ClassicalSession:
81
94
  logger.info("has_steering: {}".format(self.has_steering))
82
95
 
83
96
  self.motor1 = (
84
- ClassicalSteeringMotor if self.has_steering else ClassicalRightMotor
97
+ ClassicalVoidMotor
98
+ if self.location != "front"
99
+ else ClassicalSteeringMotor if self.has_steering else ClassicalRightMotor
85
100
  )(
86
101
  setpoint=self.setpoint,
87
102
  leds=self.leds,
88
103
  )
89
104
 
90
105
  self.motor2 = (
91
- ClassicalRearMotors if self.has_steering else ClassicalLeftMotor
106
+ ClassicalVoidMotor
107
+ if self.location != "front"
108
+ else ClassicalRearMotors if self.has_steering else ClassicalLeftMotor
92
109
  )(
93
110
  setpoint=self.setpoint,
94
111
  leds=self.leds,
95
112
  )
96
113
 
97
- self.position = ClassicalPosition(object_name)
98
-
99
- logger.info(
100
- "wheel arrangement: {} + {}".format(
101
- self.motor1.role,
102
- self.motor2.role,
114
+ if self.location == "front":
115
+ logger.info(
116
+ "wheel arrangement: {} + {}".format(
117
+ self.motor1.role,
118
+ self.motor2.role,
119
+ )
103
120
  )
104
- )
121
+ else:
122
+ logger.info("no wheels.")
123
+
124
+ self.position = ClassicalPosition(object_name)
105
125
 
106
126
  camera_class = (
107
127
  ClassicalVoidCamera
@@ -199,7 +219,6 @@ class ClassicalSession:
199
219
  self.timing.start("session.update")
200
220
 
201
221
  for thing in [
202
- self.ethernet,
203
222
  self.keyboard,
204
223
  self.push_button,
205
224
  self.camera,
@@ -218,4 +237,29 @@ class ClassicalSession:
218
237
  self.timing.stop(thing.__class__.__name__)
219
238
 
220
239
  self.timing.stop("session.update")
240
+ if self.location != "front":
241
+ return True
242
+
243
+ while True:
244
+ try:
245
+ # pylint: disable=protected-access
246
+ command = self.ethernet.client._receive_queue.get_nowait()
247
+ except Empty:
248
+ break
249
+
250
+ if command.action == "keyboard":
251
+ reply_to_bash(command.data.get("event", "unknown"))
252
+ logger.info("stop received.")
253
+ return False
254
+
255
+ if command.action == "setpoint.put":
256
+ self.setpoint.put(
257
+ value=command.data.get("value", 0),
258
+ what=command.data.get("what", "void"),
259
+ log=True,
260
+ steering_expires_in=command.data.get("steering_expires_in", 0),
261
+ )
262
+ else:
263
+ logger.warning(f"unknown command: {command.as_str()}")
264
+
221
265
  return True
@@ -2,9 +2,11 @@ import threading
2
2
  from typing import Union, Dict
3
3
  import time
4
4
 
5
+
5
6
  from bluer_options import string
6
7
 
7
8
  from bluer_ugv.swallow.session.classical.leds import ClassicalLeds
9
+ from bluer_ugv.swallow.session.classical.ethernet.classes import ClassicalEthernet
8
10
  from bluer_ugv.swallow.session.classical.setpoint.steering import (
9
11
  generate_left_and_right,
10
12
  )
@@ -14,6 +16,7 @@ from bluer_ugv.logger import logger
14
16
  class ClassicalSetPoint:
15
17
  def __init__(
16
18
  self,
19
+ ethernet: ClassicalEthernet,
17
20
  leds: ClassicalLeds,
18
21
  ):
19
22
  self.speed = 0
@@ -23,10 +26,13 @@ class ClassicalSetPoint:
23
26
 
24
27
  self.started = False
25
28
 
29
+ self.ethernet = ethernet
26
30
  self.leds = leds
27
31
 
28
32
  self._lock = threading.Lock()
29
33
 
34
+ logger.info(f"{self.__class__.__name__} created.")
35
+
30
36
  def get(
31
37
  self,
32
38
  what: str = "all",
@@ -0,0 +1,31 @@
1
+ from typing import Union, Dict
2
+
3
+ from bluer_ugv.swallow.session.classical.ethernet.command import EthernetCommand
4
+ from bluer_ugv.swallow.session.classical.setpoint.classes import ClassicalSetPoint
5
+
6
+
7
+ class ClassicalEthernetSetPoint(ClassicalSetPoint):
8
+ def put(
9
+ self,
10
+ value: Union[int, bool, Dict[str, Union[int, bool]]],
11
+ what: str = "all",
12
+ log: bool = True,
13
+ steering_expires_in: float = 0,
14
+ ):
15
+ super().put(
16
+ value=value,
17
+ what=what,
18
+ log=log,
19
+ steering_expires_in=steering_expires_in,
20
+ )
21
+
22
+ self.ethernet.client.send(
23
+ EthernetCommand(
24
+ action="setpoint.put",
25
+ data={
26
+ "value": value,
27
+ "what": what,
28
+ "steering_expires_in": steering_expires_in,
29
+ },
30
+ )
31
+ )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bluer_ugv
3
- Version: 7.824.1
3
+ Version: 7.838.1
4
4
  Summary: 🐬 AI x UGV.
5
5
  Home-page: https://github.com/kamangir/bluer-ugv
6
6
  Author: Arash Abadpour (Kamangir)
@@ -65,7 +65,7 @@ pip install bluer_ugv
65
65
 
66
66
  [![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)
67
67
 
68
- built by 🌀 [`bluer README`](https://github.com/kamangir/bluer-objects/tree/main/bluer_objects/README), based on 🐬 [`bluer_ugv-7.824.1`](https://github.com/kamangir/bluer-ugv).
68
+ built by 🌀 [`bluer README`](https://github.com/kamangir/bluer-objects/tree/main/bluer_objects/README), based on 🐬 [`bluer_ugv-7.838.1`](https://github.com/kamangir/bluer-ugv).
69
69
 
70
70
 
71
71
  built by 🌀 [`blueness-3.118.1`](https://github.com/kamangir/blueness).
@@ -39,6 +39,8 @@ bluer_ugv/.abcli/swallow/dataset/download.sh
39
39
  bluer_ugv/.abcli/swallow/dataset/edit.sh
40
40
  bluer_ugv/.abcli/swallow/dataset/list.sh
41
41
  bluer_ugv/.abcli/swallow/dataset/upload.sh
42
+ bluer_ugv/.abcli/swallow/env/cat.sh
43
+ bluer_ugv/.abcli/swallow/env/cd.sh
42
44
  bluer_ugv/.abcli/swallow/env/cp.sh
43
45
  bluer_ugv/.abcli/swallow/env/list.sh
44
46
  bluer_ugv/.abcli/swallow/env/set.sh
@@ -143,6 +145,7 @@ bluer_ugv/README/ugvs/db.py
143
145
  bluer_ugv/README/ugvs/docs.py
144
146
  bluer_ugv/README/ugvs/ethernet.py
145
147
  bluer_ugv/README/ugvs/get.py
148
+ bluer_ugv/README/ugvs/location.py
146
149
  bluer_ugv/README/ugvs/comparison/__init__.py
147
150
  bluer_ugv/README/ugvs/comparison/build.py
148
151
  bluer_ugv/README/ugvs/comparison/features/DYI.py
@@ -238,6 +241,7 @@ bluer_ugv/swallow/session/classical/motor/left.py
238
241
  bluer_ugv/swallow/session/classical/motor/rear.py
239
242
  bluer_ugv/swallow/session/classical/motor/right.py
240
243
  bluer_ugv/swallow/session/classical/motor/steering.py
244
+ bluer_ugv/swallow/session/classical/motor/void.py
241
245
  bluer_ugv/swallow/session/classical/screen/__init__.py
242
246
  bluer_ugv/swallow/session/classical/screen/classes.py
243
247
  bluer_ugv/swallow/session/classical/screen/video/__init__.py
@@ -247,6 +251,7 @@ bluer_ugv/swallow/session/classical/screen/video/player.py
247
251
  bluer_ugv/swallow/session/classical/screen/video/playlist.py
248
252
  bluer_ugv/swallow/session/classical/setpoint/__init__.py
249
253
  bluer_ugv/swallow/session/classical/setpoint/classes.py
254
+ bluer_ugv/swallow/session/classical/setpoint/ethernet.py
250
255
  bluer_ugv/swallow/session/classical/setpoint/steering.py
251
256
  bluer_ugv/swallow/session/classical/ultrasonic_sensor/__init__.py
252
257
  bluer_ugv/swallow/session/classical/ultrasonic_sensor/__main__.py
File without changes
File without changes