bluer-ugv 7.824.1__py3-none-any.whl → 7.838.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of bluer-ugv might be problematic. Click here for more details.

@@ -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, ""
bluer_ugv/__init__.py CHANGED
@@ -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).
@@ -1,4 +1,4 @@
1
- bluer_ugv/__init__.py,sha256=neFQJReXJeVsk-81qoLMoqCJjTsV4jsHRQnLb0k5pzw,288
1
+ bluer_ugv/__init__.py,sha256=W8I9OWp7ro5ND3e2gok7EJfS5ny2UtZzt5u3VoM0XcA,288
2
2
  bluer_ugv/__main__.py,sha256=77TquqyMca7qHk0XtCixGVyzfW3_9ywnl5oXEPERlls,374
3
3
  bluer_ugv/config.env,sha256=29E09ffL9mJQr3J9J_Xi5KoIiOxqDF1akquddhz4zrE,1237
4
4
  bluer_ugv/env.py,sha256=dxTqlES0xLLooYDWcJDM7oOEJsOBE9LScHNtVjInvWQ,2366
@@ -27,6 +27,8 @@ bluer_ugv/.abcli/swallow/dataset/download.sh,sha256=4Br0hYqENIEYm15yTJGJeHFNfVNF
27
27
  bluer_ugv/.abcli/swallow/dataset/edit.sh,sha256=ujhKhv3XIpkqcahnp01JkL4WXaOgRp9gNu7eZpZSYaA,595
28
28
  bluer_ugv/.abcli/swallow/dataset/list.sh,sha256=-hqgmThG2JfheFSYIe6Z3UH05X5hrSuIovZxCCYcqN0,609
29
29
  bluer_ugv/.abcli/swallow/dataset/upload.sh,sha256=KM33QM4rIQpltbd_V49wPWear9Wi8cJNo0bBBeCEENU,577
30
+ bluer_ugv/.abcli/swallow/env/cat.sh,sha256=4WKKVcut5LuLIXqiuUIIczrfJj1TC5SrUxeuf3bp-ro,134
31
+ bluer_ugv/.abcli/swallow/env/cd.sh,sha256=kJZvmel0ECQa2_FLP1umPBX97RX9IssP3Zcok3Z7wiY,93
30
32
  bluer_ugv/.abcli/swallow/env/cp.sh,sha256=vWBlG9n4Q6m_lBWcot9nyN6kc7-uil5skCjfJWHCfrY,168
31
33
  bluer_ugv/.abcli/swallow/env/list.sh,sha256=pT-hRS0ZfmogAfAMfm-hh0raGoUAnl66U5VuqgyeIwE,173
32
34
  bluer_ugv/.abcli/swallow/env/set.sh,sha256=ed6NCkhYK9LNhSYU_iJUNYXuyQFzmH9mydQ5agihhvA,817
@@ -42,7 +44,7 @@ bluer_ugv/.abcli/swallow/video/playlist/download.sh,sha256=_HsWoW3rtLWMZpAxd2iem
42
44
  bluer_ugv/.abcli/swallow/video/playlist/edit.sh,sha256=_l-XpJOybxIkfcE797DBXwlcBcWSZqzTwIEGxk14-BY,403
43
45
  bluer_ugv/.abcli/swallow/video/playlist/upload.sh,sha256=8yGQtenNTNPQvifffED0FCP4Rjz0jHHvaDdcTv-vn9M,206
44
46
  bluer_ugv/.abcli/tests/README.sh,sha256=w1xjPWgCfWbLtON_LEn2cvSmPLulzm7kTBPEC3LJixs,142
45
- bluer_ugv/.abcli/tests/help.sh,sha256=T99APdWB491sx1SVQjKCuNK8vvKuFBEu8Kvq2YZKuhc,1630
47
+ bluer_ugv/.abcli/tests/help.sh,sha256=AgZxTvwWUcC05E1PRT73N2yPW7lY5IiSNkyRbEaQaAA,1687
46
48
  bluer_ugv/.abcli/tests/swallow_dataset_combine.sh,sha256=tXjZj5iOOmCz3ito9lBDYjaAvR2odNzs2LRXsrM6d6c,291
47
49
  bluer_ugv/.abcli/tests/swallow_dataset_combine_explicit.sh,sha256=Ff4V7fi-h1myRT9ajjaKXesNrpaxLZMGDidBT8G31Kw,360
48
50
  bluer_ugv/.abcli/tests/swallow_dataset_combine_sequence.sh,sha256=N3Iq-zJV2OfEoft44D1BBLOlrkAbUDN_Rp_sAmjCEVk,311
@@ -131,6 +133,7 @@ bluer_ugv/README/ugvs/db.py,sha256=z-w4RhSZjrC_mgzRStN2K2amGnrfJWWSajJ6q65WZQE,4
131
133
  bluer_ugv/README/ugvs/docs.py,sha256=q0I1ZPUJITg0G7dW5Lv8dnNm0JEL4rdMkcaD4qU3XRk,3420
132
134
  bluer_ugv/README/ugvs/ethernet.py,sha256=6MGGWW-RWbx8-59EJKrA0Ncmje72-lYC4PUawrRdAkI,1584
133
135
  bluer_ugv/README/ugvs/get.py,sha256=WMeSYKFA-XKY_rYL2zGo4TiN503Kg_w-CyLeD5NyFZM,378
136
+ bluer_ugv/README/ugvs/location.py,sha256=KHeFBO8dlGNxBC32ox69234TRgju9UAwIeD-nEa6lMM,644
134
137
  bluer_ugv/README/ugvs/comparison/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
135
138
  bluer_ugv/README/ugvs/comparison/build.py,sha256=Dj86jYV0gGHZQrTRH0wZ_Q8eh3yREBx5bgQ1Sw2bahA,4634
136
139
  bluer_ugv/README/ugvs/comparison/features/DYI.py,sha256=ED5Tlc4KcEFpLPHjwfSNGE47guKCeBG7Q84TS0BPJgE,187
@@ -177,7 +180,7 @@ bluer_ugv/help/watch.py,sha256=1Xjet_lR7q1deEee7I0DZIS58HBn7AUoVAUpsE0l1Ns,355
177
180
  bluer_ugv/help/swallow/__init__.py,sha256=EeNSYD6q3eAbtFBncc4jgMfsBXWr_MBhF0hJE6gteoI,949
178
181
  bluer_ugv/help/swallow/dataset.py,sha256=59D5XLQG1PRWfPwfM73Jz1-f0qh_cO0q18qLtsxXtj0,2495
179
182
  bluer_ugv/help/swallow/debug.py,sha256=70krqg-YtjxPjPwWnx4J1Fxlvw46hHyAYq7pA7yPt50,481
180
- bluer_ugv/help/swallow/env.py,sha256=0CZyXIMWV2cpV_VbgdSEXigc63UNvQ-L2tjb-5Edwe8,1531
183
+ bluer_ugv/help/swallow/env.py,sha256=TdlZ73Vx6vB5bexUQ5Nefe4N6u0ugGpHTPphX2_thVc,2068
181
184
  bluer_ugv/help/swallow/ethernet.py,sha256=9ACYo8blwSNb0ZobU68h6oCfUu0vMRpsVHSH2Ddv4UE,571
182
185
  bluer_ugv/help/swallow/git.py,sha256=u_08uXk1OqL5oV9vdunldr_EWpxo_aA5LemvW-gp0cw,425
183
186
  bluer_ugv/help/swallow/keyboard.py,sha256=YNkGWvE7tN3agCaL2R30FSIF2zw6oXa5ZJdnTJQA3Hk,518
@@ -202,7 +205,7 @@ bluer_ugv/swallow/session/classical/mode.py,sha256=6rFe1IIpfijuI7Xd-wcGKhYQ7EdQx
202
205
  bluer_ugv/swallow/session/classical/mousepad.py,sha256=LI7yvmtrZZaGUgPGpxNU7zcPkW8D5ykHlY_O-4H2STs,1871
203
206
  bluer_ugv/swallow/session/classical/position.py,sha256=gNeNzNpUG8zkDrcwibxaYStPNKUN1_DV5RjHu_pHMIg,913
204
207
  bluer_ugv/swallow/session/classical/push_button.py,sha256=s8sPart_dECjLK-gfsJi0UorRYcFYf3ofLqjmG8PoA8,2397
205
- bluer_ugv/swallow/session/classical/session.py,sha256=tF0yj3KlJb_aeUjLAS_taVmzQu6ILqjYfOSP7mfHXKQ,6257
208
+ bluer_ugv/swallow/session/classical/session.py,sha256=QD3RfXychE_B0wSLQDhcfswtm-GdrB3Si35X5XLkFT4,7859
206
209
  bluer_ugv/swallow/session/classical/camera/__init__.py,sha256=2GchuT19_Ns0uYRS5aUMz4pBwbK3y5XoFxoAlAnJKh8,464
207
210
  bluer_ugv/swallow/session/classical/camera/generic.py,sha256=tW7bQMzmBi9MV28cTlKlDhFdtnB-9mkpBzjaWzEJNec,1220
208
211
  bluer_ugv/swallow/session/classical/camera/navigation.py,sha256=HoeTlifGEfnedb6o8P-O0TcP1bNDRJ0M7vWupQh1pL4,6790
@@ -211,8 +214,8 @@ bluer_ugv/swallow/session/classical/camera/void.py,sha256=IJkJQgTgVucTYagFIwKEch
211
214
  bluer_ugv/swallow/session/classical/camera/yolo.py,sha256=vStqH-cQbi0Rij1OqETv60QfMgSHz_9X9DaqKDPHNcI,6592
212
215
  bluer_ugv/swallow/session/classical/ethernet/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
213
216
  bluer_ugv/swallow/session/classical/ethernet/__main__.py,sha256=7xSxV1qaxgOehQZn_lgVxemM43ZlJjKBmqPC-cQuXD4,846
214
- bluer_ugv/swallow/session/classical/ethernet/classes.py,sha256=v8u41aFlzbq6_SHpxCxRY6eBzwmTsTxQiNuXtTRz4oQ,1301
215
- bluer_ugv/swallow/session/classical/ethernet/client.py,sha256=jVf-JBrKt_r1k_GxhNOCYL-BjFVHASpKghLWglMQWBI,8593
217
+ bluer_ugv/swallow/session/classical/ethernet/classes.py,sha256=gUIBvZYiyH9bYvStsTCVsaiEMKsMxqknBxdPZ5Yeo8s,1233
218
+ bluer_ugv/swallow/session/classical/ethernet/client.py,sha256=G01PouwWLvd3-np1PQkFMfljoKOe8ZKbLk79or_KVQM,8414
216
219
  bluer_ugv/swallow/session/classical/ethernet/command.py,sha256=ppS4Tkks4yLNsycAKdmZX6EfUEMThaJ2Il42dwdF__c,597
217
220
  bluer_ugv/swallow/session/classical/ethernet/testing.py,sha256=SvLp12FqcJeph6z6jP1OR5h6cugcptTyP9t2AVHGTEs,1149
218
221
  bluer_ugv/swallow/session/classical/keyboard/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -220,12 +223,13 @@ bluer_ugv/swallow/session/classical/keyboard/__main__.py,sha256=tdX-a8MC9ix6aQ9i
220
223
  bluer_ugv/swallow/session/classical/keyboard/classes.py,sha256=l9kfV3sqBjlHNjoBsXDL0cOwHeNVD42KMzasoBUYd7w,5415
221
224
  bluer_ugv/swallow/session/classical/keyboard/keys.py,sha256=Z27XTC2agwC_uYmzBgRKP3hNy58KWnWUxHXeOChuooc,2348
222
225
  bluer_ugv/swallow/session/classical/keyboard/testing.py,sha256=GFh-6-HkT1sYlGt-Y2traBFD8lle3C-HcvVrdzsITEo,511
223
- bluer_ugv/swallow/session/classical/motor/__init__.py,sha256=Ja9pVS6h5wnZiDvJ2IaibLcleQl3inIF_YRJg9VGKlw,323
226
+ bluer_ugv/swallow/session/classical/motor/__init__.py,sha256=l7mSv4I1kLMGapINKX1va-OeYpqPAD_qRLNn9GbklcA,401
224
227
  bluer_ugv/swallow/session/classical/motor/generic.py,sha256=VzCEqkuil-7ncyv2TxI7NMofIiLhuZGl61Ck3Yog55s,2860
225
228
  bluer_ugv/swallow/session/classical/motor/left.py,sha256=eKyEI8CqQiUTTmpNlJrXro90x2_la5KejVLgj_pXkQM,537
226
229
  bluer_ugv/swallow/session/classical/motor/rear.py,sha256=mIBpUxBeiw1me5WY3jbtMyaG8SzyCA1_SzUu6ywdy50,539
227
230
  bluer_ugv/swallow/session/classical/motor/right.py,sha256=3BwCXA6VxxyRBG3rsnRXGviS5gIda14UCqaELGMOJNk,539
228
231
  bluer_ugv/swallow/session/classical/motor/steering.py,sha256=-_-6C9cGYFgt_WH3hwTSV8jL5I_qkxc2O45Ck8SlFCo,545
232
+ bluer_ugv/swallow/session/classical/motor/void.py,sha256=rJ3wsSd7EcF4_fX1hVHsiCLDWHrIYwwCvCGzN5LPGvc,439
229
233
  bluer_ugv/swallow/session/classical/screen/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
230
234
  bluer_ugv/swallow/session/classical/screen/classes.py,sha256=EzMJOcI5b153pHYAzTeNKU82CHc9AKyNS5ZfudoBvTo,1311
231
235
  bluer_ugv/swallow/session/classical/screen/video/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -234,7 +238,8 @@ bluer_ugv/swallow/session/classical/screen/video/engine.py,sha256=XDKGcR2SQyFM5F
234
238
  bluer_ugv/swallow/session/classical/screen/video/player.py,sha256=XLXYVHqseZKKD-CmyW2NXzuGarf91BJGSNP7t1nMJzM,3353
235
239
  bluer_ugv/swallow/session/classical/screen/video/playlist.py,sha256=OAqPz_eOlBdWKlYDmqtD3FaO9duAbA94kr02jSbSFIo,2934
236
240
  bluer_ugv/swallow/session/classical/setpoint/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
237
- bluer_ugv/swallow/session/classical/setpoint/classes.py,sha256=a2ACbE4oEdguuOjtrP2bIyuEpl97TK_JCTGir05KZkg,5054
241
+ bluer_ugv/swallow/session/classical/setpoint/classes.py,sha256=3Hpub9s5t1GN25eGhSINuIlCrT-C3sRmZu8FxiAsTes,5268
242
+ bluer_ugv/swallow/session/classical/setpoint/ethernet.py,sha256=F-O62lHzZYBWywzk9z2ZC8YqvSDfVKvabRrv-ZDnuVI,896
238
243
  bluer_ugv/swallow/session/classical/setpoint/steering.py,sha256=yuhW3u9YgZ756h4wyMWJYW9914d8oYRKLga67rTW-Tw,288
239
244
  bluer_ugv/swallow/session/classical/ultrasonic_sensor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
240
245
  bluer_ugv/swallow/session/classical/ultrasonic_sensor/__main__.py,sha256=SHCwEk_K9L0BG1X7W1JnnhTnQBGJ--TiN-QuH2Je28E,1732
@@ -247,8 +252,8 @@ bluer_ugv/swallow/session/classical/ultrasonic_sensor/pack.py,sha256=bVcG8V0P6Sl
247
252
  bluer_ugv/swallow/session/classical/ultrasonic_sensor/review.py,sha256=_iQmec2VSq-ORkTVpXSNJg08hrSz2M1O8LzNZEtoT9U,959
248
253
  bluer_ugv/swallow/session/classical/ultrasonic_sensor/sensor.py,sha256=En-J8BRTiR8k9p2CBbW0cOUuw8nctD5DOXDm5uhCNO4,3987
249
254
  bluer_ugv/swallow/session/classical/ultrasonic_sensor/testing.py,sha256=yj2MY_Jo1FzeXnR_JoFAXsb9eHEVhicDiHEsUa8z03U,1525
250
- bluer_ugv-7.824.1.dist-info/licenses/LICENSE,sha256=ogEPNDSH0_dhiv_lT3ifVIdgIzHAqNA_SemnxUfPBJk,7048
251
- bluer_ugv-7.824.1.dist-info/METADATA,sha256=ROcyERcqAkfCYA-ZSLFUr5J_zG0dPK6kBhLqA-Fw-rs,5612
252
- bluer_ugv-7.824.1.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
253
- bluer_ugv-7.824.1.dist-info/top_level.txt,sha256=_MlDhFvIPpher9Zs7xyJTHgO2xJJTbfR1dzncz3LQnk,10
254
- bluer_ugv-7.824.1.dist-info/RECORD,,
255
+ bluer_ugv-7.838.1.dist-info/licenses/LICENSE,sha256=ogEPNDSH0_dhiv_lT3ifVIdgIzHAqNA_SemnxUfPBJk,7048
256
+ bluer_ugv-7.838.1.dist-info/METADATA,sha256=4m7h2FxG6Z94QmFybwL5T7SP38bneIKOnVkP5IiJpmk,5612
257
+ bluer_ugv-7.838.1.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
258
+ bluer_ugv-7.838.1.dist-info/top_level.txt,sha256=_MlDhFvIPpher9Zs7xyJTHgO2xJJTbfR1dzncz3LQnk,10
259
+ bluer_ugv-7.838.1.dist-info/RECORD,,