bluer-ugv 7.713.1__tar.gz → 7.771.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.

Files changed (251) hide show
  1. {bluer_ugv-7.713.1/bluer_ugv.egg-info → bluer_ugv-7.771.1}/PKG-INFO +3 -3
  2. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/README.md +2 -2
  3. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/.abcli/tests/help.sh +3 -1
  4. bluer_ugv-7.771.1/bluer_ugv/.abcli/tests/ugv_get.sh +20 -0
  5. bluer_ugv-7.771.1/bluer_ugv/.abcli/ugv/get.sh +9 -0
  6. bluer_ugv-7.771.1/bluer_ugv/.abcli/ugv/ssh.sh +21 -0
  7. bluer_ugv-7.771.1/bluer_ugv/.abcli/ugv/watch.sh +21 -0
  8. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/README/arzhang/consts.py +5 -0
  9. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/README/build.py +2 -26
  10. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/README/computer/box.py +1 -0
  11. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/README/computer/shield/docs.py +2 -1
  12. bluer_ugv-7.771.1/bluer_ugv/README/computer/shield/parts.py +22 -0
  13. bluer_ugv-7.771.1/bluer_ugv/README/docs.py +31 -0
  14. bluer_ugv-7.713.1/bluer_ugv/README/ravin/__init__.py → bluer_ugv-7.771.1/bluer_ugv/README/ravin/docs.py +4 -3
  15. bluer_ugv-7.771.1/bluer_ugv/README/ugvs/__main__.py +47 -0
  16. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/README/ugvs/db.py +52 -1
  17. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/README/ugvs/docs.py +47 -3
  18. bluer_ugv-7.771.1/bluer_ugv/README/ugvs/get.py +23 -0
  19. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/__init__.py +1 -1
  20. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/designs/rangin/parts.py +9 -7
  21. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/help/functions.py +6 -0
  22. bluer_ugv-7.771.1/bluer_ugv/help/get.py +24 -0
  23. bluer_ugv-7.771.1/bluer_ugv/help/ssh.py +19 -0
  24. bluer_ugv-7.771.1/bluer_ugv/help/watch.py +19 -0
  25. bluer_ugv-7.771.1/bluer_ugv/swallow/session/classical/keyboard/__init__.py +0 -0
  26. bluer_ugv-7.771.1/bluer_ugv/swallow/session/classical/screen/__init__.py +0 -0
  27. bluer_ugv-7.771.1/bluer_ugv/swallow/session/classical/screen/video/__init__.py +0 -0
  28. bluer_ugv-7.771.1/bluer_ugv/swallow/session/classical/setpoint/__init__.py +0 -0
  29. bluer_ugv-7.771.1/bluer_ugv/swallow/session/classical/ultrasonic_sensor/__init__.py +0 -0
  30. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1/bluer_ugv.egg-info}/PKG-INFO +3 -3
  31. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv.egg-info/SOURCES.txt +16 -0
  32. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/LICENSE +0 -0
  33. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/MANIFEST.in +0 -0
  34. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/.abcli/abcli.sh +0 -0
  35. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/.abcli/actions.sh +0 -0
  36. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/.abcli/aka.sh +0 -0
  37. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/.abcli/alias.sh +0 -0
  38. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/.abcli/bluer_ugv.sh +0 -0
  39. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/.abcli/swallow/dataset/combine.sh +0 -0
  40. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/.abcli/swallow/dataset/download.sh +0 -0
  41. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/.abcli/swallow/dataset/edit.sh +0 -0
  42. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/.abcli/swallow/dataset/list.sh +0 -0
  43. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/.abcli/swallow/dataset/upload.sh +0 -0
  44. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/.abcli/swallow/dataset.sh +0 -0
  45. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/.abcli/swallow/debug.sh +0 -0
  46. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/.abcli/swallow/env/cp.sh +0 -0
  47. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/.abcli/swallow/env/list.sh +0 -0
  48. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/.abcli/swallow/env/set.sh +0 -0
  49. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/.abcli/swallow/env.sh +0 -0
  50. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/.abcli/swallow/git/rm_keys.sh +0 -0
  51. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/.abcli/swallow/git.sh +0 -0
  52. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/.abcli/swallow/keyboard/test.sh +0 -0
  53. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/.abcli/swallow/keyboard.sh +0 -0
  54. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/.abcli/swallow/select_target.sh +0 -0
  55. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/.abcli/swallow/session.sh +0 -0
  56. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/.abcli/swallow/ultrasonic/review.sh +0 -0
  57. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/.abcli/swallow/ultrasonic/test.sh +0 -0
  58. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/.abcli/swallow/ultrasonic.sh +0 -0
  59. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/.abcli/swallow/video/play.sh +0 -0
  60. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/.abcli/swallow/video/playlist/cat.sh +0 -0
  61. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/.abcli/swallow/video/playlist/download.sh +0 -0
  62. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/.abcli/swallow/video/playlist/edit.sh +0 -0
  63. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/.abcli/swallow/video/playlist/upload.sh +0 -0
  64. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/.abcli/swallow/video/playlist.sh +0 -0
  65. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/.abcli/swallow/video.sh +0 -0
  66. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/.abcli/swallow.sh +0 -0
  67. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/.abcli/tests/README.sh +0 -0
  68. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/.abcli/tests/swallow_dataset_combine.sh +0 -0
  69. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/.abcli/tests/swallow_dataset_combine_explicit.sh +0 -0
  70. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/.abcli/tests/swallow_dataset_combine_sequence.sh +0 -0
  71. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/.abcli/tests/swallow_dataset_download_upload.sh +0 -0
  72. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/.abcli/tests/swallow_dataset_edit.sh +0 -0
  73. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/.abcli/tests/swallow_dataset_list.sh +0 -0
  74. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/.abcli/tests/swallow_video_play.sh +0 -0
  75. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/.abcli/tests/swallow_video_playlist.sh +0 -0
  76. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/.abcli/tests/ultrasonic_sensor_review.sh +0 -0
  77. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/.abcli/tests/version.sh +0 -0
  78. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/.abcli/ugv/git.sh +0 -0
  79. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/README/__init__.py +0 -0
  80. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/README/alias.py +0 -0
  81. {bluer_ugv-7.713.1/bluer_ugv/README/computer → bluer_ugv-7.771.1/bluer_ugv/README/arzhang}/__init__.py +0 -0
  82. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/README/arzhang/algo.py +0 -0
  83. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/README/arzhang/design.py +0 -0
  84. /bluer_ugv-7.713.1/bluer_ugv/README/arzhang/__init__.py → /bluer_ugv-7.771.1/bluer_ugv/README/arzhang/docs.py +0 -0
  85. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/README/arzhang/flag.py +0 -0
  86. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/README/arzhang/items.py +0 -0
  87. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/README/beast.py +0 -0
  88. {bluer_ugv-7.713.1/bluer_ugv/README/computer/shield → bluer_ugv-7.771.1/bluer_ugv/README/computer}/__init__.py +0 -0
  89. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/README/computer/docs.py +0 -0
  90. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/README/computer/power.py +0 -0
  91. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/README/computer/schematics.py +0 -0
  92. {bluer_ugv-7.713.1/bluer_ugv/README/ugvs → bluer_ugv-7.771.1/bluer_ugv/README/computer/shield}/__init__.py +0 -0
  93. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/README/computer/shield/testing.py +0 -0
  94. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/README/computer/shield/v1.py +0 -0
  95. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/README/computer/shield/v2.py +0 -0
  96. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/README/computer/testing.py +0 -0
  97. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/README/consts.py +0 -0
  98. {bluer_ugv-7.713.1/bluer_ugv/README/ugvs/comparison → bluer_ugv-7.771.1/bluer_ugv/README/eagle}/__init__.py +0 -0
  99. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/README/eagle/consts.py +0 -0
  100. /bluer_ugv-7.713.1/bluer_ugv/README/eagle/__init__.py → /bluer_ugv-7.771.1/bluer_ugv/README/eagle/docs.py +0 -0
  101. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/README/eagle/items.py +0 -0
  102. {bluer_ugv-7.713.1/bluer_ugv/README/ugvs/comparison/features → bluer_ugv-7.771.1/bluer_ugv/README/fire}/__init__.py +0 -0
  103. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/README/fire/consts.py +0 -0
  104. /bluer_ugv-7.713.1/bluer_ugv/README/fire/__init__.py → /bluer_ugv-7.771.1/bluer_ugv/README/fire/docs.py +0 -0
  105. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/README/fire/items.py +0 -0
  106. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/README/items.py +0 -0
  107. {bluer_ugv-7.713.1/bluer_ugv/README/ugvs/comparison/ugvs → bluer_ugv-7.771.1/bluer_ugv/README/rangin}/__init__.py +0 -0
  108. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/README/rangin/consts.py +0 -0
  109. /bluer_ugv-7.713.1/bluer_ugv/README/rangin/__init__.py → /bluer_ugv-7.771.1/bluer_ugv/README/rangin/docs.py +0 -0
  110. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/README/rangin/items.py +0 -0
  111. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/README/rangin/mechanical.py +0 -0
  112. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/README/rangin/parts.py +0 -0
  113. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/README/rangin/power.py +0 -0
  114. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/README/rangin/root.py +0 -0
  115. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/README/rangin/schematics.py +0 -0
  116. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/README/rangin/specs.py +0 -0
  117. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/README/rangin/terraform.py +0 -0
  118. {bluer_ugv-7.713.1/bluer_ugv/designs → bluer_ugv-7.771.1/bluer_ugv/README/ravin}/__init__.py +0 -0
  119. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/README/ravin/consts.py +0 -0
  120. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/README/ravin/items.py +0 -0
  121. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/README/releases.py +0 -0
  122. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/README/root.py +0 -0
  123. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/README/shortcuts.py +0 -0
  124. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/README/swallow/__init__.py +0 -0
  125. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/README/swallow/analog.py +0 -0
  126. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/README/swallow/consts.py +0 -0
  127. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/README/swallow/digital/__init__.py +0 -0
  128. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/README/swallow/digital/algo/__init__.py +0 -0
  129. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/README/swallow/digital/algo/driving.py +0 -0
  130. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/README/swallow/digital/algo/navigation.py +0 -0
  131. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/README/swallow/digital/algo/tracking.py +0 -0
  132. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/README/swallow/digital/algo/yolo.py +0 -0
  133. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/README/swallow/digital/design/__init__.py +0 -0
  134. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/README/swallow/digital/design/mechanical.py +0 -0
  135. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/README/swallow/digital/design/parts.py +0 -0
  136. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/README/swallow/digital/design/ultrasonic_sensor.py +0 -0
  137. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/README/swallow/items.py +0 -0
  138. {bluer_ugv-7.713.1/bluer_ugv/designs/eagle → bluer_ugv-7.771.1/bluer_ugv/README/ugvs}/__init__.py +0 -0
  139. {bluer_ugv-7.713.1/bluer_ugv/designs/fire → bluer_ugv-7.771.1/bluer_ugv/README/ugvs/comparison}/__init__.py +0 -0
  140. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/README/ugvs/comparison/build.py +0 -0
  141. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/README/ugvs/comparison/features/DYI.py +0 -0
  142. {bluer_ugv-7.713.1/bluer_ugv/designs/rangin → bluer_ugv-7.771.1/bluer_ugv/README/ugvs/comparison/features}/__init__.py +0 -0
  143. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/README/ugvs/comparison/features/classes.py +0 -0
  144. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/README/ugvs/comparison/features/concealment.py +0 -0
  145. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/README/ugvs/comparison/features/control.py +0 -0
  146. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/README/ugvs/comparison/features/cost.py +0 -0
  147. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/README/ugvs/comparison/features/db.py +0 -0
  148. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/README/ugvs/comparison/features/payload.py +0 -0
  149. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/README/ugvs/comparison/features/ps.py +0 -0
  150. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/README/ugvs/comparison/features/range.py +0 -0
  151. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/README/ugvs/comparison/features/sanction_proof.py +0 -0
  152. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/README/ugvs/comparison/features/size.py +0 -0
  153. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/README/ugvs/comparison/features/speed.py +0 -0
  154. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/README/ugvs/comparison/features/swarm.py +0 -0
  155. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/README/ugvs/comparison/features/uv_delivery.py +0 -0
  156. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/README/ugvs/comparison/references/__init__.py +0 -0
  157. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/README/ugvs/comparison/references/classes.py +0 -0
  158. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/README/ugvs/comparison/references/db.py +0 -0
  159. {bluer_ugv-7.713.1/bluer_ugv/designs/ravin → bluer_ugv-7.771.1/bluer_ugv/README/ugvs/comparison/ugvs}/__init__.py +0 -0
  160. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/README/ugvs/comparison/ugvs/classes.py +0 -0
  161. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/README/ugvs/comparison/ugvs/db.py +0 -0
  162. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/__main__.py +0 -0
  163. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/assets/comparison.html +0 -0
  164. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/config.env +0 -0
  165. {bluer_ugv-7.713.1/bluer_ugv/designs/ravin/ravin3 → bluer_ugv-7.771.1/bluer_ugv/designs}/__init__.py +0 -0
  166. {bluer_ugv-7.713.1/bluer_ugv/designs/ravin/ravin4 → bluer_ugv-7.771.1/bluer_ugv/designs/eagle}/__init__.py +0 -0
  167. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/designs/eagle/parts.py +0 -0
  168. {bluer_ugv-7.713.1/bluer_ugv/help/swallow/video → bluer_ugv-7.771.1/bluer_ugv/designs/fire}/__init__.py +0 -0
  169. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/designs/fire/parts.py +0 -0
  170. {bluer_ugv-7.713.1/bluer_ugv/swallow → bluer_ugv-7.771.1/bluer_ugv/designs/rangin}/__init__.py +0 -0
  171. {bluer_ugv-7.713.1/bluer_ugv/swallow/dataset → bluer_ugv-7.771.1/bluer_ugv/designs/ravin}/__init__.py +0 -0
  172. {bluer_ugv-7.713.1/bluer_ugv/swallow/session → bluer_ugv-7.771.1/bluer_ugv/designs/ravin/ravin3}/__init__.py +0 -0
  173. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/designs/ravin/ravin3/parts.py +0 -0
  174. {bluer_ugv-7.713.1/bluer_ugv/swallow/session/classical → bluer_ugv-7.771.1/bluer_ugv/designs/ravin/ravin4}/__init__.py +0 -0
  175. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/designs/ravin/ravin4/parts.py +0 -0
  176. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/env.py +0 -0
  177. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/help/__init__.py +0 -0
  178. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/help/__main__.py +0 -0
  179. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/help/git.py +0 -0
  180. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/help/swallow/__init__.py +0 -0
  181. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/help/swallow/dataset.py +0 -0
  182. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/help/swallow/debug.py +0 -0
  183. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/help/swallow/env.py +0 -0
  184. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/help/swallow/git.py +0 -0
  185. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/help/swallow/keyboard.py +0 -0
  186. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/help/swallow/select_target.py +0 -0
  187. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/help/swallow/ultrasonic_sensor.py +0 -0
  188. {bluer_ugv-7.713.1/bluer_ugv/swallow/session/classical/keyboard → bluer_ugv-7.771.1/bluer_ugv/help/swallow/video}/__init__.py +0 -0
  189. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/help/swallow/video/functions.py +0 -0
  190. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/help/swallow/video/playlist.py +0 -0
  191. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/host.py +0 -0
  192. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/logger.py +0 -0
  193. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/sample.env +0 -0
  194. {bluer_ugv-7.713.1/bluer_ugv/swallow/session/classical/screen → bluer_ugv-7.771.1/bluer_ugv/swallow}/__init__.py +0 -0
  195. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/swallow/__main__.py +0 -0
  196. {bluer_ugv-7.713.1/bluer_ugv/swallow/session/classical/screen/video → bluer_ugv-7.771.1/bluer_ugv/swallow/dataset}/__init__.py +0 -0
  197. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/swallow/dataset/__main__.py +0 -0
  198. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/swallow/dataset/combination.py +0 -0
  199. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/swallow/debug.py +0 -0
  200. {bluer_ugv-7.713.1/bluer_ugv/swallow/session/classical/setpoint → bluer_ugv-7.771.1/bluer_ugv/swallow/session}/__init__.py +0 -0
  201. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/swallow/session/__main__.py +0 -0
  202. {bluer_ugv-7.713.1/bluer_ugv/swallow/session/classical/ultrasonic_sensor → bluer_ugv-7.771.1/bluer_ugv/swallow/session/classical}/__init__.py +0 -0
  203. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/swallow/session/classical/camera/__init__.py +0 -0
  204. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/swallow/session/classical/camera/generic.py +0 -0
  205. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/swallow/session/classical/camera/navigation.py +0 -0
  206. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/swallow/session/classical/camera/tracking.py +0 -0
  207. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/swallow/session/classical/camera/void.py +0 -0
  208. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/swallow/session/classical/camera/yolo.py +0 -0
  209. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/swallow/session/classical/keyboard/__main__.py +0 -0
  210. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/swallow/session/classical/keyboard/classes.py +0 -0
  211. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/swallow/session/classical/keyboard/keys.py +0 -0
  212. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/swallow/session/classical/keyboard/testing.py +0 -0
  213. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/swallow/session/classical/leds.py +0 -0
  214. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/swallow/session/classical/mode.py +0 -0
  215. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/swallow/session/classical/motor/__init__.py +0 -0
  216. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/swallow/session/classical/motor/generic.py +0 -0
  217. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/swallow/session/classical/motor/left.py +0 -0
  218. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/swallow/session/classical/motor/rear.py +0 -0
  219. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/swallow/session/classical/motor/right.py +0 -0
  220. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/swallow/session/classical/motor/steering.py +0 -0
  221. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/swallow/session/classical/mousepad.py +0 -0
  222. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/swallow/session/classical/position.py +0 -0
  223. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/swallow/session/classical/push_button.py +0 -0
  224. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/swallow/session/classical/screen/classes.py +0 -0
  225. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/swallow/session/classical/screen/video/__main__.py +0 -0
  226. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/swallow/session/classical/screen/video/engine.py +0 -0
  227. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/swallow/session/classical/screen/video/player.py +0 -0
  228. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/swallow/session/classical/screen/video/playlist.py +0 -0
  229. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/swallow/session/classical/session.py +0 -0
  230. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/swallow/session/classical/setpoint/classes.py +0 -0
  231. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/swallow/session/classical/setpoint/steering.py +0 -0
  232. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/swallow/session/classical/ultrasonic_sensor/__main__.py +0 -0
  233. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/swallow/session/classical/ultrasonic_sensor/classes.py +0 -0
  234. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/swallow/session/classical/ultrasonic_sensor/consts.py +0 -0
  235. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/swallow/session/classical/ultrasonic_sensor/detection.py +0 -0
  236. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/swallow/session/classical/ultrasonic_sensor/detection_list.py +0 -0
  237. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/swallow/session/classical/ultrasonic_sensor/log.py +0 -0
  238. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/swallow/session/classical/ultrasonic_sensor/pack.py +0 -0
  239. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/swallow/session/classical/ultrasonic_sensor/review.py +0 -0
  240. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/swallow/session/classical/ultrasonic_sensor/sensor.py +0 -0
  241. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/swallow/session/classical/ultrasonic_sensor/testing.py +0 -0
  242. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/swallow/session/functions.py +0 -0
  243. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/swallow/targeting.py +0 -0
  244. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv/urls.py +0 -0
  245. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv.egg-info/dependency_links.txt +0 -0
  246. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv.egg-info/requires.txt +0 -0
  247. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/bluer_ugv.egg-info/top_level.txt +0 -0
  248. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/pyproject.toml +0 -0
  249. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/requirements.txt +0 -0
  250. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/setup.cfg +0 -0
  251. {bluer_ugv-7.713.1 → bluer_ugv-7.771.1}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bluer_ugv
3
- Version: 7.713.1
3
+ Version: 7.771.1
4
4
  Summary: 🐬 AI x UGV.
5
5
  Home-page: https://github.com/kamangir/bluer-ugv
6
6
  Author: Arash Abadpour (Kamangir)
@@ -48,7 +48,7 @@ pip install bluer_ugv
48
48
 
49
49
  | | |
50
50
  | --- | --- |
51
- | [`computer`](https://github.com/kamangir/bluer-ugv/blob/main/bluer_ugv/docs/swallow/digital/design/computer) [![image](https://github.com/kamangir/bluer-designs//blob/main/swallow/electrical/digital.png?raw=true)](https://github.com/kamangir/bluer-ugv/blob/main/bluer_ugv/docs/swallow/digital/design/computer) | [`UGVs`](https://github.com/kamangir/bluer-ugv/blob/main/bluer_ugv/docs/UGVs) [![image](https://github.com/kamangir/assets2/raw/main/swallow/20250912_211652.jpg?raw=true)](https://github.com/kamangir/bluer-ugv/blob/main/bluer_ugv/docs/UGVs) |
51
+ | [`computer`](https://github.com/kamangir/bluer-ugv/blob/main/bluer_ugv/docs/swallow/digital/design/computer) [![image](https://github.com/kamangir/bluer-designs/blob/main/swallow/electrical/digital.png?raw=true)](https://github.com/kamangir/bluer-ugv/blob/main/bluer_ugv/docs/swallow/digital/design/computer) | [`UGVs`](https://github.com/kamangir/bluer-ugv/blob/main/bluer_ugv/docs/UGVs) [![image](https://github.com/kamangir/assets2/raw/main/swallow/20250912_211652.jpg?raw=true)](https://github.com/kamangir/bluer-ugv/blob/main/bluer_ugv/docs/UGVs) |
52
52
  | [`terraform`](https://github.com/kamangir/bluer-ugv/blob/main/bluer_ugv/docs/swallow/digital/design/terraform.md) [![image](https://github.com/kamangir/assets2/raw/main/swallow/20250611_100917.jpg?raw=true)](https://github.com/kamangir/bluer-ugv/blob/main/bluer_ugv/docs/swallow/digital/design/terraform.md) | [`validations`](https://github.com/kamangir/bluer-ugv/blob/main/bluer_ugv/docs/validations) [![image](https://github.com/kamangir/assets/raw/main/swallow-debug-2025-09-25-13-16-59-rnm7jd/swallow-debug-2025-09-25-13-16-59-rnm7jd.gif)](https://github.com/kamangir/bluer-ugv/blob/main/bluer_ugv/docs/validations) |
53
53
 
54
54
  ## aliases
@@ -66,7 +66,7 @@ pip install bluer_ugv
66
66
 
67
67
  [![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)
68
68
 
69
- built by 🌀 [`bluer README`](https://github.com/kamangir/bluer-objects/tree/main/bluer_objects/README), based on 🐬 [`bluer_ugv-7.713.1`](https://github.com/kamangir/bluer-ugv).
69
+ built by 🌀 [`bluer README`](https://github.com/kamangir/bluer-objects/tree/main/bluer_objects/README), based on 🐬 [`bluer_ugv-7.771.1`](https://github.com/kamangir/bluer-ugv).
70
70
 
71
71
 
72
72
  built by 🌀 [`blueness-3.118.1`](https://github.com/kamangir/blueness).
@@ -18,7 +18,7 @@ pip install bluer_ugv
18
18
 
19
19
  | | |
20
20
  | --- | --- |
21
- | [`computer`](./bluer_ugv/docs/swallow/digital/design/computer) [![image](https://github.com/kamangir/bluer-designs//blob/main/swallow/electrical/digital.png?raw=true)](./bluer_ugv/docs/swallow/digital/design/computer) | [`UGVs`](./bluer_ugv/docs/UGVs) [![image](https://github.com/kamangir/assets2/raw/main/swallow/20250912_211652.jpg?raw=true)](./bluer_ugv/docs/UGVs) |
21
+ | [`computer`](./bluer_ugv/docs/swallow/digital/design/computer) [![image](https://github.com/kamangir/bluer-designs/blob/main/swallow/electrical/digital.png?raw=true)](./bluer_ugv/docs/swallow/digital/design/computer) | [`UGVs`](./bluer_ugv/docs/UGVs) [![image](https://github.com/kamangir/assets2/raw/main/swallow/20250912_211652.jpg?raw=true)](./bluer_ugv/docs/UGVs) |
22
22
  | [`terraform`](./bluer_ugv/docs/swallow/digital/design/terraform.md) [![image](https://github.com/kamangir/assets2/raw/main/swallow/20250611_100917.jpg?raw=true)](./bluer_ugv/docs/swallow/digital/design/terraform.md) | [`validations`](./bluer_ugv/docs/validations) [![image](https://github.com/kamangir/assets/raw/main/swallow-debug-2025-09-25-13-16-59-rnm7jd/swallow-debug-2025-09-25-13-16-59-rnm7jd.gif)](./bluer_ugv/docs/validations) |
23
23
 
24
24
  ## aliases
@@ -36,5 +36,5 @@ pip install bluer_ugv
36
36
 
37
37
  [![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)
38
38
 
39
- built by 🌀 [`bluer README`](https://github.com/kamangir/bluer-objects/tree/main/bluer_objects/README), based on 🐬 [`bluer_ugv-7.713.1`](https://github.com/kamangir/bluer-ugv).
39
+ built by 🌀 [`bluer README`](https://github.com/kamangir/bluer-objects/tree/main/bluer_objects/README), based on 🐬 [`bluer_ugv-7.771.1`](https://github.com/kamangir/bluer-ugv).
40
40
 
@@ -41,8 +41,10 @@ function test_bluer_ugv_help() {
41
41
  "@swallow video playlist upload" \
42
42
  \
43
43
  "@ugv" \
44
- \
44
+ "@ugv get" \
45
45
  "@ugv git" \
46
+ "@ugv ssh" \
47
+ "@ugv watch" \
46
48
  \
47
49
  "@ugv pypi" \
48
50
  "@ugv pypi browse" \
@@ -0,0 +1,20 @@
1
+ #! /usr/bin/env bash
2
+
3
+ function test_bluer_ugv_get() {
4
+ bluer_ai_assert $(bluer_ugv_get) not-found
5
+ [[ $? -ne 0 ]] && return 1
6
+
7
+ bluer_ai_hr
8
+
9
+ bluer_ai_assert $(bluer_ugv_get arzhang) not-found
10
+ [[ $? -ne 0 ]] && return 1
11
+
12
+ bluer_ai_hr
13
+
14
+ bluer_ai_assert $(bluer_ugv_get arzhang computer.front) not-found
15
+ [[ $? -ne 0 ]] && return 1
16
+
17
+ bluer_ai_hr
18
+
19
+ bluer_ai_assert $(bluer_ugv_get swallow computers.front) swallow2
20
+ }
@@ -0,0 +1,9 @@
1
+ #! /usr/bin/env bash
2
+
3
+ function bluer_ugv_get() {
4
+ python3 -m bluer_ugv.README.ugvs \
5
+ get \
6
+ --ugv_name "$1" \
7
+ --what "$2" \
8
+ "${@:3}"
9
+ }
@@ -0,0 +1,21 @@
1
+ #! /usr/bin/env bash
2
+
3
+ function bluer_ugv_ssh() {
4
+ local ugv_name=$1
5
+ if [[ -z "$ugv_name" ]]; then
6
+ bluer_ai_log_error "ugv name not found."
7
+ return 1
8
+ fi
9
+
10
+ local node=${2:-front}
11
+
12
+ local computer_name=$(bluer_ugv_get "$ugv_name" computers.$node)
13
+ if [[ "$computer_name" == "not-found" ]]; then
14
+ bluer_ai_log_error "$ugv_name.$node not found."
15
+ return 1
16
+ fi
17
+
18
+ bluer_ai_log "ssh $ugv_name.$node ($computer_name)..."
19
+
20
+ bluer_ai_ssh rpi $computer_name
21
+ }
@@ -0,0 +1,21 @@
1
+ #! /usr/bin/env bash
2
+
3
+ function bluer_ugv_watch() {
4
+ local ugv_name=$1
5
+ if [[ -z "$ugv_name" ]]; then
6
+ bluer_ai_log_error "ugv name not found."
7
+ return 1
8
+ fi
9
+
10
+ local node=${2:-front}
11
+
12
+ local computer_name=$(bluer_ugv_get "$ugv_name" computers.$node)
13
+ if [[ "$computer_name" == "not-found" ]]; then
14
+ bluer_ai_log_error "$ugv_name.$node not found."
15
+ return 1
16
+ fi
17
+
18
+ bluer_ai_log "ssh $ugv_name.$node ($computer_name)..."
19
+
20
+ bluer_ai_log watch rpi $computer_name
21
+ }
@@ -9,4 +9,9 @@ arzhang_assets2 = assets_url(
9
9
  volume=2,
10
10
  )
11
11
 
12
+ arzhang2_assets2 = assets_url(
13
+ suffix="arzhang2",
14
+ volume=2,
15
+ )
16
+
12
17
  arzhang_mechanical_design = designs_url("arzhang")
@@ -5,21 +5,8 @@ from bluer_objects import file, README
5
5
 
6
6
  from bluer_ugv import NAME, VERSION, ICON, REPO_NAME
7
7
  from bluer_ugv.help.functions import help_functions
8
- from bluer_ugv.README import (
9
- alias,
10
- beast,
11
- eagle,
12
- fire,
13
- ravin,
14
- root,
15
- arzhang,
16
- rangin,
17
- releases,
18
- swallow,
19
- )
20
- from bluer_ugv.README.computer import docs as computer
21
- from bluer_ugv.README.ugvs import docs as ugvs
22
8
  from bluer_ugv.README.ugvs.comparison.build import build as build_comparison
9
+ from bluer_ugv.README.docs import docs
23
10
 
24
11
 
25
12
  def build() -> bool:
@@ -40,18 +27,7 @@ def build() -> bool:
40
27
  ),
41
28
  macros=readme.get("macros", {}),
42
29
  )
43
- for readme in root.docs
44
- + alias.docs
45
- + arzhang.docs
46
- + beast.docs
47
- + eagle.docs
48
- + fire.docs
49
- + rangin.docs
50
- + ravin.docs
51
- + releases.docs
52
- + computer.docs
53
- + ugvs.docs
54
- + swallow.docs
30
+ for readme in docs
55
31
  )
56
32
  and build_comparison()
57
33
  )
@@ -14,6 +14,7 @@ items = ImageItems(
14
14
  f"{swallow_assets2}/20251008_133418.jpg": "",
15
15
  f"{swallow_assets2}/20251008_124129.jpg": "",
16
16
  f"{swallow_assets2}/20251008_124932.jpg": "",
17
+ f"{swallow_assets2}/20260113_172208.jpg": "",
17
18
  }
18
19
  )
19
20
 
@@ -1,7 +1,7 @@
1
1
  from bluer_objects.README.items import ImageItems
2
2
 
3
3
  from bluer_ugv.README.swallow.consts import swallow_assets2, swallow_designs
4
- from bluer_ugv.README.computer.shield import testing, v1, v2
4
+ from bluer_ugv.README.computer.shield import parts, testing, v1, v2
5
5
 
6
6
  items = ImageItems(
7
7
  {
@@ -24,6 +24,7 @@ docs = (
24
24
  "items": items,
25
25
  },
26
26
  ]
27
+ + parts.docs
27
28
  + testing.docs
28
29
  + v1.docs
29
30
  + v2.docs
@@ -0,0 +1,22 @@
1
+ from bluer_sbc.README.design import design_doc_parts
2
+
3
+ parts = {
4
+ "470-mF": "",
5
+ "green-terminal": "2 x",
6
+ "LED": "green + red + yellow + 4 x blue",
7
+ "pin-headers": "1 x (female, 2 x 40) -> 2 x 20 + 2 x (male, 1 x 40) -> 4 x 1 + 2 x 20 + 1 x (male, 2 x 40) -> 2 x 2 x 6",
8
+ "Polyfuse": "optional",
9
+ "pushbutton": "",
10
+ "resistor": "7 x 330-470 Ω + 4 x 2.2 kΩ + 4 x 3.3 kΩ",
11
+ "TVS-diode": "",
12
+ }
13
+
14
+ docs = [
15
+ {
16
+ "path": "../docs/swallow/digital/design/computer/shield/parts.md",
17
+ "macros": design_doc_parts(
18
+ dict_of_parts=parts,
19
+ parts_reference="https://github.com/kamangir/bluer-sbc/tree/main/bluer_sbc/docs/parts",
20
+ ),
21
+ }
22
+ ]
@@ -0,0 +1,31 @@
1
+ from bluer_ugv.README.arzhang import docs as arzhang_docs
2
+ from bluer_ugv.README.eagle import docs as eagle_docs
3
+ from bluer_ugv.README.fire import docs as fire_docs
4
+ from bluer_ugv.README.rangin import docs as rangin_docs
5
+ from bluer_ugv.README.ravin import docs as ravin_docs
6
+ from bluer_ugv.README import (
7
+ alias,
8
+ beast,
9
+ root,
10
+ releases,
11
+ swallow,
12
+ )
13
+ from bluer_ugv.README.computer import docs as computer
14
+ from bluer_ugv.README.ugvs import docs as ugvs
15
+ from bluer_ugv.README.validations import docs as validations
16
+
17
+ docs = (
18
+ root.docs
19
+ + alias.docs
20
+ + arzhang_docs.docs
21
+ + beast.docs
22
+ + eagle_docs.docs
23
+ + fire_docs.docs
24
+ + rangin_docs.docs
25
+ + ravin_docs.docs
26
+ + releases.docs
27
+ + computer.docs
28
+ + ugvs.docs
29
+ + swallow.docs
30
+ + validations.docs
31
+ )
@@ -1,5 +1,6 @@
1
- from bluer_ugv.README.ravin import ravin3, ravin4
1
+ from bluer_ugv.README.ravin.ravin3 import docs
2
2
  from bluer_ugv.README.ravin.items import items
3
+ from bluer_ugv.README.ravin.ravin4 import docs
3
4
 
4
5
  docs = (
5
6
  [
@@ -8,6 +9,6 @@ docs = (
8
9
  "path": "../docs/ravin",
9
10
  },
10
11
  ]
11
- + ravin3.docs
12
- + ravin4.docs
12
+ + docs.docs
13
+ + docs.docs
13
14
  )
@@ -0,0 +1,47 @@
1
+ import argparse
2
+
3
+ from blueness import module
4
+ from blueness.argparse.generic import sys_exit
5
+
6
+ from bluer_ugv import NAME
7
+ from bluer_ugv.README.ugvs.get import get
8
+ from bluer_ugv.logger import logger
9
+
10
+ NAME = module.name(__file__, NAME)
11
+
12
+ parser = argparse.ArgumentParser(NAME)
13
+ parser.add_argument(
14
+ "task",
15
+ type=str,
16
+ help="get",
17
+ )
18
+ parser.add_argument(
19
+ "--ugv_name",
20
+ type=str,
21
+ )
22
+ parser.add_argument(
23
+ "--what",
24
+ type=str,
25
+ )
26
+ parser.add_argument(
27
+ "--include_comments",
28
+ type=int,
29
+ default=0,
30
+ help="0 | 1",
31
+ )
32
+ args = parser.parse_args()
33
+
34
+ success = False
35
+ if args.task == "get":
36
+ success = True
37
+ print(
38
+ get(
39
+ ugv_name=args.ugv_name,
40
+ what=args.what,
41
+ include_comments=args.include_comments == 1,
42
+ )
43
+ )
44
+ else:
45
+ success = None
46
+
47
+ sys_exit(logger, NAME, args.task, success)
@@ -1,6 +1,10 @@
1
1
  from bluer_ugv.README.consts import assets_url
2
2
  from bluer_ugv.README.swallow.consts import swallow_assets2
3
- from bluer_ugv.README.arzhang.consts import arzhang_assets, arzhang_assets2
3
+ from bluer_ugv.README.arzhang.consts import (
4
+ arzhang_assets,
5
+ arzhang_assets2,
6
+ arzhang2_assets2,
7
+ )
4
8
  from bluer_ugv.README.rangin.consts import rangin_assets2, rangin_mechanical_design
5
9
 
6
10
  dict_of_ugvs = {
@@ -12,18 +16,39 @@ dict_of_ugvs = {
12
16
  f"{swallow_assets2}/20250913_203635~2_1.gif",
13
17
  f"{swallow_assets2}/20251216_205015.jpg",
14
18
  ],
19
+ "tagline": "the first one.",
20
+ "class": "swallow",
21
+ "computers": {
22
+ "front": "swallow2 (`swallow` was used for Ubuntu experiments)",
23
+ },
15
24
  },
16
25
  "arzhang": {
17
26
  "order": 2,
18
27
  "items": [
19
28
  f"{arzhang_assets2}/20251209_111322.jpg",
20
29
  ],
30
+ "tagline": "the first [arzhang](../arzhang).",
31
+ "class": "arzhang",
32
+ "computers": {
33
+ "front": "sparrow",
34
+ },
35
+ "comments": [
36
+ "disassembled 🛑",
37
+ ],
21
38
  },
22
39
  "arzhang2": {
23
40
  "order": 3,
24
41
  "items": [
25
42
  f"{arzhang_assets2}/20251210_154513.jpg",
43
+ f"{arzhang2_assets2}/20260108_175635.jpg",
44
+ f"{arzhang2_assets2}/20260109_133216.jpg",
26
45
  ],
46
+ "tagline": "an [arzhang](../arzhang) with updated body design.",
47
+ "class": "arzhang",
48
+ "computers": {
49
+ "front": "sparrow2",
50
+ "back": "sparrow3-back",
51
+ },
27
52
  },
28
53
  "arzhang3": {
29
54
  "order": 4,
@@ -41,6 +66,15 @@ dict_of_ugvs = {
41
66
  f"{arzhang_assets2}/20251210_154654.jpg",
42
67
  ]
43
68
  ),
69
+ "tagline": "the first [arzhang](../arzhang) with two computers.",
70
+ "class": "arzhang",
71
+ "computers": {
72
+ "front": "arzhang3-front",
73
+ "back": "sparrow3-back",
74
+ },
75
+ "comments": [
76
+ "-> [rangin](./rangin.md) 🛑",
77
+ ],
44
78
  },
45
79
  "rangin": {
46
80
  "order": 5,
@@ -69,6 +103,15 @@ dict_of_ugvs = {
69
103
  f"{rangin_assets2}/20251231_111923.jpg",
70
104
  f"{rangin_assets2}/20251231_112447.jpg",
71
105
  ],
106
+ "tagline": "an ad robot.",
107
+ "class": "rangin",
108
+ "computers": {
109
+ "front": "arzhang3-front",
110
+ "top": "rangin-top2",
111
+ },
112
+ "comments": [
113
+ "built on [arzhang3](./arzhang3.md).",
114
+ ],
72
115
  },
73
116
  "arzhang4": {
74
117
  "order": 6,
@@ -78,5 +121,13 @@ dict_of_ugvs = {
78
121
  volume=2,
79
122
  ),
80
123
  ],
124
+ "tagline": "the first [arzhang](../arzhang) with [external motors](https://github.com/kamangir/bluer-sbc/blob/main/bluer_sbc/docs/parts/DC-gearboxed-motor-12V-120RPM.md).",
125
+ "class": [
126
+ "arzhang",
127
+ "with external motors.",
128
+ ],
129
+ "comments": [
130
+ "build is ongoing. 🔥",
131
+ ],
81
132
  },
82
133
  }
@@ -7,8 +7,52 @@ docs = [
7
7
  {
8
8
  "path": f"../docs/UGVs/{ugv_name}.md",
9
9
  "cols": info.get("cols", 3),
10
- "items": ImageItems({item: "" for item in info.get("items", [])}),
10
+ "items": ImageItems(
11
+ {
12
+ item: ""
13
+ for item in info.get(
14
+ "items",
15
+ [],
16
+ )
17
+ }
18
+ ),
11
19
  "macros": {
20
+ "class:::": "[{class_name}](../{class_name}){info}".format(
21
+ class_name=(
22
+ info["class"][0]
23
+ if isinstance(info["class"], list)
24
+ else info["class"]
25
+ ),
26
+ info=(
27
+ " ".join([""] + info["class"][1:])
28
+ if isinstance(info["class"], list)
29
+ else ""
30
+ ),
31
+ ),
32
+ "computers:::": (
33
+ (
34
+ [
35
+ "- computer(s):",
36
+ ]
37
+ + [
38
+ " - {}: `{}`".format(
39
+ location,
40
+ computer_name,
41
+ )
42
+ for location, computer_name in info["computers"].items()
43
+ ]
44
+ )
45
+ if "computers" in info
46
+ else []
47
+ ),
48
+ "comments:::": [
49
+ f"- {comment}"
50
+ for comment in info.get(
51
+ "comments",
52
+ [],
53
+ )
54
+ ],
55
+ "tagline:::": info.get("tagline", ""),
12
56
  "validations:::": [
13
57
  (lambda thing: f"validations: {thing}" if thing else "")(
14
58
  ", ".join(
@@ -24,7 +68,7 @@ docs = [
24
68
  )
25
69
  )
26
70
  ),
27
- ]
71
+ ],
28
72
  },
29
73
  }
30
74
  for ugv_name, info in dict_of_ugvs.items()
@@ -50,7 +94,7 @@ docs = [
50
94
  ]
51
95
  ),
52
96
  "macros": {
53
- "list": [
97
+ "list:::": [
54
98
  f"- [{ugv_name}](./{ugv_name}.md)"
55
99
  for ugv_name in sorted(
56
100
  dict_of_ugvs.keys(),
@@ -0,0 +1,23 @@
1
+ from bluer_ugv.README.ugvs.db import dict_of_ugvs
2
+
3
+
4
+ def get(
5
+ ugv_name: str,
6
+ what: str,
7
+ include_comments: bool = False,
8
+ ) -> str:
9
+ list_of_what = what.split(".")
10
+ info = dict_of_ugvs.get(ugv_name, {})
11
+ for what_ in list_of_what:
12
+ info = info.get(what_, {})
13
+
14
+ if isinstance(info, dict) and not info:
15
+ info = ""
16
+
17
+ if not info:
18
+ info = "not-found"
19
+
20
+ if not include_comments and info:
21
+ info = info.split(" ")[0]
22
+
23
+ return str(info)
@@ -4,7 +4,7 @@ ICON = "🐬"
4
4
 
5
5
  DESCRIPTION = f"{ICON} AI x UGV."
6
6
 
7
- VERSION = "7.713.1"
7
+ VERSION = "7.771.1"
8
8
 
9
9
  REPO_NAME = "bluer-ugv"
10
10
 
@@ -1,13 +1,15 @@
1
1
  dict_of_parts = {
2
- "SLA-Battery": "12 V, 42 Ah, 185 mm x 150 mm x 175 mm",
2
+ "ac-volt-meter": "220 V, 5 A",
3
3
  "dc-circuit-breaker": "40 A",
4
- "TV": "2 x 40 inch",
5
- "power-inverter": "continuous output ≥ 400-500 W, surge output ≥ 800 W",
6
- "power-adapter": "12V DC, 10 A",
7
- "TV-bracket": "2 x",
8
4
  "dsn-vc288": "with 50 A shunt",
5
+ "hdmi-cable": "",
9
6
  "mcb": "2 - 3 A @ 220 V AC",
10
- "ac-volt-meter": "220 V, 5 A",
11
- "safety-fuse": "30 mA trip",
7
+ "micro-hdmi-adapter": "",
8
+ "power-adapter": "12V DC, 10 A",
9
+ "power-inverter": "continuous output ≥ 400-500 W, surge output ≥ 800 W",
12
10
  "relay": "12 V DC, 25 A",
11
+ "safety-fuse": "30 mA trip",
12
+ "SLA-Battery": "12 V, 42 Ah, 185 mm x 150 mm x 175 mm",
13
+ "TV-bracket": "2 x",
14
+ "TV": "2 x 40 inch",
13
15
  }
@@ -1,15 +1,21 @@
1
1
  from bluer_ai.help.generic import help_functions as generic_help_functions
2
2
 
3
3
  from bluer_ugv import ALIAS
4
+ from bluer_ugv.help.get import help_get
4
5
  from bluer_ugv.help.git import help_git
6
+ from bluer_ugv.help.ssh import help_ssh
5
7
  from bluer_ugv.help.swallow import help_functions as help_swallow
8
+ from bluer_ugv.help.watch import help_watch
6
9
 
7
10
 
8
11
  help_functions = generic_help_functions(plugin_name=ALIAS)
9
12
 
10
13
  help_functions.update(
11
14
  {
15
+ "get": help_get,
12
16
  "git": help_git,
17
+ "ssh": help_ssh,
13
18
  "swallow": help_swallow,
19
+ "watch": help_watch,
14
20
  }
15
21
  )
@@ -0,0 +1,24 @@
1
+ from typing import List
2
+
3
+ from bluer_options.terminal import show_usage
4
+
5
+
6
+ def help_get(
7
+ tokens: List[str],
8
+ mono: bool,
9
+ ) -> str:
10
+ args = [
11
+ "[--include_comments 1]",
12
+ ]
13
+
14
+ return show_usage(
15
+ [
16
+ "@ugv",
17
+ "get",
18
+ "<ugv-name>",
19
+ "computers.back | computers.front | computers.top | <what>",
20
+ ]
21
+ + args,
22
+ "get ugv info.",
23
+ mono=mono,
24
+ )
@@ -0,0 +1,19 @@
1
+ from typing import List
2
+
3
+ from bluer_options.terminal import show_usage
4
+
5
+
6
+ def help_ssh(
7
+ tokens: List[str],
8
+ mono: bool,
9
+ ) -> str:
10
+ return show_usage(
11
+ [
12
+ "@ugv",
13
+ "ssh",
14
+ "<ugv-name>",
15
+ "[back | front | top | <node>]",
16
+ ],
17
+ "ssh to <ugv-name>.<node>",
18
+ mono=mono,
19
+ )
@@ -0,0 +1,19 @@
1
+ from typing import List
2
+
3
+ from bluer_options.terminal import show_usage
4
+
5
+
6
+ def help_watch(
7
+ tokens: List[str],
8
+ mono: bool,
9
+ ) -> str:
10
+ return show_usage(
11
+ [
12
+ "@ugv",
13
+ "watch",
14
+ "<ugv-name>",
15
+ "[back | front | top | <node>]",
16
+ ],
17
+ "watch <ugv-name>.<node>.",
18
+ mono=mono,
19
+ )