bluer-ugv 7.713.1__py3-none-any.whl → 7.771.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.
- bluer_ugv/.abcli/tests/help.sh +3 -1
- bluer_ugv/.abcli/tests/ugv_get.sh +20 -0
- bluer_ugv/.abcli/ugv/get.sh +9 -0
- bluer_ugv/.abcli/ugv/ssh.sh +21 -0
- bluer_ugv/.abcli/ugv/watch.sh +21 -0
- bluer_ugv/README/arzhang/__init__.py +0 -16
- bluer_ugv/README/arzhang/consts.py +5 -0
- bluer_ugv/README/arzhang/docs.py +16 -0
- bluer_ugv/README/build.py +2 -26
- bluer_ugv/README/computer/box.py +1 -0
- bluer_ugv/README/computer/shield/docs.py +2 -1
- bluer_ugv/README/computer/shield/parts.py +22 -0
- bluer_ugv/README/docs.py +31 -0
- bluer_ugv/README/eagle/__init__.py +0 -26
- bluer_ugv/README/eagle/docs.py +26 -0
- bluer_ugv/README/fire/__init__.py +0 -26
- bluer_ugv/README/fire/docs.py +26 -0
- bluer_ugv/README/rangin/__init__.py +0 -19
- bluer_ugv/README/rangin/docs.py +19 -0
- bluer_ugv/README/ravin/__init__.py +0 -13
- bluer_ugv/README/ravin/docs.py +14 -0
- bluer_ugv/README/ugvs/__main__.py +47 -0
- bluer_ugv/README/ugvs/db.py +52 -1
- bluer_ugv/README/ugvs/docs.py +47 -3
- bluer_ugv/README/ugvs/get.py +23 -0
- bluer_ugv/__init__.py +1 -1
- bluer_ugv/designs/rangin/parts.py +9 -7
- bluer_ugv/help/functions.py +6 -0
- bluer_ugv/help/get.py +24 -0
- bluer_ugv/help/ssh.py +19 -0
- bluer_ugv/help/watch.py +19 -0
- {bluer_ugv-7.713.1.dist-info → bluer_ugv-7.771.1.dist-info}/METADATA +3 -3
- {bluer_ugv-7.713.1.dist-info → bluer_ugv-7.771.1.dist-info}/RECORD +36 -20
- {bluer_ugv-7.713.1.dist-info → bluer_ugv-7.771.1.dist-info}/WHEEL +1 -1
- {bluer_ugv-7.713.1.dist-info → bluer_ugv-7.771.1.dist-info}/licenses/LICENSE +0 -0
- {bluer_ugv-7.713.1.dist-info → bluer_ugv-7.771.1.dist-info}/top_level.txt +0 -0
bluer_ugv/.abcli/tests/help.sh
CHANGED
|
@@ -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,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
|
+
}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
from bluer_ugv.README.arzhang.items import items
|
|
2
|
-
from bluer_ugv.README.arzhang import design, algo, flag
|
|
3
|
-
from bluer_ugv.README.validations import docs as validations
|
|
4
|
-
|
|
5
|
-
docs = (
|
|
6
|
-
[
|
|
7
|
-
{
|
|
8
|
-
"items": items,
|
|
9
|
-
"path": "../docs/arzhang",
|
|
10
|
-
}
|
|
11
|
-
]
|
|
12
|
-
+ algo.docs
|
|
13
|
-
+ design.docs
|
|
14
|
-
+ flag.docs
|
|
15
|
-
+ validations.docs
|
|
16
|
-
)
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
from bluer_ugv.README.arzhang.items import items
|
|
2
|
+
from bluer_ugv.README.arzhang import design, algo, flag
|
|
3
|
+
from bluer_ugv.README.validations import docs as validations
|
|
4
|
+
|
|
5
|
+
docs = (
|
|
6
|
+
[
|
|
7
|
+
{
|
|
8
|
+
"items": items,
|
|
9
|
+
"path": "../docs/arzhang",
|
|
10
|
+
}
|
|
11
|
+
]
|
|
12
|
+
+ algo.docs
|
|
13
|
+
+ design.docs
|
|
14
|
+
+ flag.docs
|
|
15
|
+
+ validations.docs
|
|
16
|
+
)
|
bluer_ugv/README/build.py
CHANGED
|
@@ -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
|
|
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
|
)
|
bluer_ugv/README/computer/box.py
CHANGED
|
@@ -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
|
+
]
|
bluer_ugv/README/docs.py
ADDED
|
@@ -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,26 +0,0 @@
|
|
|
1
|
-
from bluer_sbc.parts.db import db_of_parts
|
|
2
|
-
from bluer_sbc.parts.consts import parts_url_prefix
|
|
3
|
-
|
|
4
|
-
from bluer_ugv.README.eagle.items import items
|
|
5
|
-
from bluer_ugv.designs.eagle.parts import dict_of_parts
|
|
6
|
-
|
|
7
|
-
docs = [
|
|
8
|
-
{
|
|
9
|
-
"items": items,
|
|
10
|
-
"path": "../docs/eagle",
|
|
11
|
-
},
|
|
12
|
-
{
|
|
13
|
-
"path": "../docs/eagle/parts.md",
|
|
14
|
-
"items": db_of_parts.as_images(
|
|
15
|
-
dict_of_parts,
|
|
16
|
-
reference=parts_url_prefix,
|
|
17
|
-
),
|
|
18
|
-
"macros": {
|
|
19
|
-
"parts:::": db_of_parts.as_list(
|
|
20
|
-
dict_of_parts,
|
|
21
|
-
reference=parts_url_prefix,
|
|
22
|
-
log=False,
|
|
23
|
-
),
|
|
24
|
-
},
|
|
25
|
-
},
|
|
26
|
-
]
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
from bluer_sbc.parts.db import db_of_parts
|
|
2
|
+
from bluer_sbc.parts.consts import parts_url_prefix
|
|
3
|
+
|
|
4
|
+
from bluer_ugv.README.eagle.items import items
|
|
5
|
+
from bluer_ugv.designs.eagle.parts import dict_of_parts
|
|
6
|
+
|
|
7
|
+
docs = [
|
|
8
|
+
{
|
|
9
|
+
"items": items,
|
|
10
|
+
"path": "../docs/eagle",
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"path": "../docs/eagle/parts.md",
|
|
14
|
+
"items": db_of_parts.as_images(
|
|
15
|
+
dict_of_parts,
|
|
16
|
+
reference=parts_url_prefix,
|
|
17
|
+
),
|
|
18
|
+
"macros": {
|
|
19
|
+
"parts:::": db_of_parts.as_list(
|
|
20
|
+
dict_of_parts,
|
|
21
|
+
reference=parts_url_prefix,
|
|
22
|
+
log=False,
|
|
23
|
+
),
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
]
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
from bluer_sbc.parts.db import db_of_parts
|
|
2
|
-
from bluer_sbc.parts.consts import parts_url_prefix
|
|
3
|
-
|
|
4
|
-
from bluer_ugv.README.fire.items import items
|
|
5
|
-
from bluer_ugv.designs.fire.parts import dict_of_parts
|
|
6
|
-
|
|
7
|
-
docs = [
|
|
8
|
-
{
|
|
9
|
-
"path": "../docs/fire",
|
|
10
|
-
"items": items,
|
|
11
|
-
},
|
|
12
|
-
{
|
|
13
|
-
"path": "../docs/fire/parts.md",
|
|
14
|
-
"items": db_of_parts.as_images(
|
|
15
|
-
dict_of_parts,
|
|
16
|
-
reference=parts_url_prefix,
|
|
17
|
-
),
|
|
18
|
-
"macros": {
|
|
19
|
-
"parts:::": db_of_parts.as_list(
|
|
20
|
-
dict_of_parts,
|
|
21
|
-
reference=parts_url_prefix,
|
|
22
|
-
log=False,
|
|
23
|
-
),
|
|
24
|
-
},
|
|
25
|
-
},
|
|
26
|
-
]
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
from bluer_sbc.parts.db import db_of_parts
|
|
2
|
+
from bluer_sbc.parts.consts import parts_url_prefix
|
|
3
|
+
|
|
4
|
+
from bluer_ugv.README.fire.items import items
|
|
5
|
+
from bluer_ugv.designs.fire.parts import dict_of_parts
|
|
6
|
+
|
|
7
|
+
docs = [
|
|
8
|
+
{
|
|
9
|
+
"path": "../docs/fire",
|
|
10
|
+
"items": items,
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"path": "../docs/fire/parts.md",
|
|
14
|
+
"items": db_of_parts.as_images(
|
|
15
|
+
dict_of_parts,
|
|
16
|
+
reference=parts_url_prefix,
|
|
17
|
+
),
|
|
18
|
+
"macros": {
|
|
19
|
+
"parts:::": db_of_parts.as_list(
|
|
20
|
+
dict_of_parts,
|
|
21
|
+
reference=parts_url_prefix,
|
|
22
|
+
log=False,
|
|
23
|
+
),
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
]
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
from bluer_ugv.README.rangin import (
|
|
2
|
-
mechanical,
|
|
3
|
-
parts,
|
|
4
|
-
power,
|
|
5
|
-
root,
|
|
6
|
-
schematics,
|
|
7
|
-
specs,
|
|
8
|
-
terraform,
|
|
9
|
-
)
|
|
10
|
-
|
|
11
|
-
docs = (
|
|
12
|
-
mechanical.docs
|
|
13
|
-
+ parts.docs
|
|
14
|
-
+ power.docs
|
|
15
|
-
+ root.docs
|
|
16
|
-
+ schematics.docs
|
|
17
|
-
+ specs.docs
|
|
18
|
-
+ terraform.docs
|
|
19
|
-
)
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
from bluer_ugv.README.rangin import (
|
|
2
|
+
mechanical,
|
|
3
|
+
parts,
|
|
4
|
+
power,
|
|
5
|
+
root,
|
|
6
|
+
schematics,
|
|
7
|
+
specs,
|
|
8
|
+
terraform,
|
|
9
|
+
)
|
|
10
|
+
|
|
11
|
+
docs = (
|
|
12
|
+
mechanical.docs
|
|
13
|
+
+ parts.docs
|
|
14
|
+
+ power.docs
|
|
15
|
+
+ root.docs
|
|
16
|
+
+ schematics.docs
|
|
17
|
+
+ specs.docs
|
|
18
|
+
+ terraform.docs
|
|
19
|
+
)
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
from bluer_ugv.README.ravin.ravin3 import docs
|
|
2
|
+
from bluer_ugv.README.ravin.items import items
|
|
3
|
+
from bluer_ugv.README.ravin.ravin4 import docs
|
|
4
|
+
|
|
5
|
+
docs = (
|
|
6
|
+
[
|
|
7
|
+
{
|
|
8
|
+
"items": items,
|
|
9
|
+
"path": "../docs/ravin",
|
|
10
|
+
},
|
|
11
|
+
]
|
|
12
|
+
+ docs.docs
|
|
13
|
+
+ docs.docs
|
|
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)
|
bluer_ugv/README/ugvs/db.py
CHANGED
|
@@ -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
|
|
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
|
}
|
bluer_ugv/README/ugvs/docs.py
CHANGED
|
@@ -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(
|
|
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)
|
bluer_ugv/__init__.py
CHANGED
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
dict_of_parts = {
|
|
2
|
-
"
|
|
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
|
-
"
|
|
11
|
-
"
|
|
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
|
}
|
bluer_ugv/help/functions.py
CHANGED
|
@@ -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
|
)
|
bluer_ugv/help/get.py
ADDED
|
@@ -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
|
+
)
|
bluer_ugv/help/ssh.py
ADDED
|
@@ -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
|
+
)
|
bluer_ugv/help/watch.py
ADDED
|
@@ -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
|
+
)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: bluer_ugv
|
|
3
|
-
Version: 7.
|
|
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) [ [](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) [](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) [](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) [](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
|
[](https://github.com/kamangir/bluer-ugv/actions/workflows/pylint.yml) [](https://github.com/kamangir/bluer-ugv/actions/workflows/pytest.yml) [](https://github.com/kamangir/bluer-ugv/actions/workflows/bashtest.yml) [](https://pypi.org/project/bluer-ugv/) [](https://pypistats.org/packages/bluer-ugv)
|
|
68
68
|
|
|
69
|
-
built by 🌀 [`bluer README`](https://github.com/kamangir/bluer-objects/tree/main/bluer_objects/README), based on 🐬 [`bluer_ugv-7.
|
|
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).
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
bluer_ugv/__init__.py,sha256=
|
|
1
|
+
bluer_ugv/__init__.py,sha256=X9rcQfZQmAg3Bg-wkrm71AoMpcdtQUvmr5B7qGluDDQ,288
|
|
2
2
|
bluer_ugv/__main__.py,sha256=77TquqyMca7qHk0XtCixGVyzfW3_9ywnl5oXEPERlls,374
|
|
3
3
|
bluer_ugv/config.env,sha256=TODRtdZqUAYbVudsJgwu24IIJzOdd78FkYB59xjQNSo,1164
|
|
4
4
|
bluer_ugv/env.py,sha256=f5Wb4Fb6136bZBkUkZJGxnwtA9NIGyORZCsjV0I1hTg,2193
|
|
@@ -40,7 +40,7 @@ bluer_ugv/.abcli/swallow/video/playlist/download.sh,sha256=_HsWoW3rtLWMZpAxd2iem
|
|
|
40
40
|
bluer_ugv/.abcli/swallow/video/playlist/edit.sh,sha256=_l-XpJOybxIkfcE797DBXwlcBcWSZqzTwIEGxk14-BY,403
|
|
41
41
|
bluer_ugv/.abcli/swallow/video/playlist/upload.sh,sha256=8yGQtenNTNPQvifffED0FCP4Rjz0jHHvaDdcTv-vn9M,206
|
|
42
42
|
bluer_ugv/.abcli/tests/README.sh,sha256=w1xjPWgCfWbLtON_LEn2cvSmPLulzm7kTBPEC3LJixs,142
|
|
43
|
-
bluer_ugv/.abcli/tests/help.sh,sha256=
|
|
43
|
+
bluer_ugv/.abcli/tests/help.sh,sha256=uZ22au2-qHJMAIOLNT9ZYXNkjrJaCl9yxXM7BOJ98Bw,1590
|
|
44
44
|
bluer_ugv/.abcli/tests/swallow_dataset_combine.sh,sha256=tXjZj5iOOmCz3ito9lBDYjaAvR2odNzs2LRXsrM6d6c,291
|
|
45
45
|
bluer_ugv/.abcli/tests/swallow_dataset_combine_explicit.sh,sha256=Ff4V7fi-h1myRT9ajjaKXesNrpaxLZMGDidBT8G31Kw,360
|
|
46
46
|
bluer_ugv/.abcli/tests/swallow_dataset_combine_sequence.sh,sha256=N3Iq-zJV2OfEoft44D1BBLOlrkAbUDN_Rp_sAmjCEVk,311
|
|
@@ -49,43 +49,53 @@ bluer_ugv/.abcli/tests/swallow_dataset_edit.sh,sha256=01wLHLd35pPTUmMxFT_ugkwLOA
|
|
|
49
49
|
bluer_ugv/.abcli/tests/swallow_dataset_list.sh,sha256=DPjikrMLMl0oJTHBV4EyYmkMZnMjEmwosJRocLIJGz0,256
|
|
50
50
|
bluer_ugv/.abcli/tests/swallow_video_play.sh,sha256=38AHfA0zw4NYrAYFi2ypVk4eZ65k91DnlyQ4vWp1jOs,180
|
|
51
51
|
bluer_ugv/.abcli/tests/swallow_video_playlist.sh,sha256=SRJOtziqmh7Gnuaq1BQyyyqPoZDVq5-sy0tgWYnnfII,827
|
|
52
|
+
bluer_ugv/.abcli/tests/ugv_get.sh,sha256=MI-FO4z_cakBPKmYLwHLPCqy57GOzmKJpG7jPr1PH6o,445
|
|
52
53
|
bluer_ugv/.abcli/tests/ultrasonic_sensor_review.sh,sha256=4LxfOGRAUJsZ5dnxrkwXCjWmkgQWSeqck-UYyza3aw8,243
|
|
53
54
|
bluer_ugv/.abcli/tests/version.sh,sha256=7nVT4lERxIe-GkuDn86nfur9E_WGbvWtet_AJtr2S48,147
|
|
55
|
+
bluer_ugv/.abcli/ugv/get.sh,sha256=qTdryeNw6e95IaRBi4_GUjKmfK0UuSBYNtB6uuxJbqA,169
|
|
54
56
|
bluer_ugv/.abcli/ugv/git.sh,sha256=U5p_5qrNwLw8O7HfHu7QZgLblbDc6Z6lIumgKwu3mzY,299
|
|
57
|
+
bluer_ugv/.abcli/ugv/ssh.sh,sha256=G-pTQtMBcLmEJMhSoFKOE6a06tdylTd8c4eyB-lrnHY,506
|
|
58
|
+
bluer_ugv/.abcli/ugv/watch.sh,sha256=5N7LEVAWOmmWfPGSiOThkqO9uYTXIrfm30nZjSfy72I,514
|
|
55
59
|
bluer_ugv/README/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
56
60
|
bluer_ugv/README/alias.py,sha256=jVRedHJRsoiauqcsN_APP1XgdXHsQhAsTQcMV4mHqEw,144
|
|
57
61
|
bluer_ugv/README/beast.py,sha256=6sOpm4vNXxNtNMZszgiuqqJaBBWG02WaSgKfbdt7J4E,57
|
|
58
|
-
bluer_ugv/README/build.py,sha256=
|
|
62
|
+
bluer_ugv/README/build.py,sha256=xxUHeDMamCHLA33ZyGyowNGL2gVO0OJzAkNhIA9kdug,994
|
|
59
63
|
bluer_ugv/README/consts.py,sha256=bQ98yk28E8-EBh2wUgMNr-sZ90IC3q7BmTzJe5XCS3g,257
|
|
64
|
+
bluer_ugv/README/docs.py,sha256=kZKT5diLUFIzZqqP7do23v0ZA4hja1v5-L5LCL3UIxg,799
|
|
60
65
|
bluer_ugv/README/items.py,sha256=-CZroToMKNHuqU9QugCfZXxH9DldPoVxdKasQ8Ywfvg,2229
|
|
61
66
|
bluer_ugv/README/releases.py,sha256=T8SSJGq7kR902BspgcZlgEIlBa0tx3qNVfe9iRTcFOM,172
|
|
62
67
|
bluer_ugv/README/root.py,sha256=h1piDAmlkdfbKZeZTW3HWzsW4VpKG6L776oYK7hC-J0,296
|
|
63
68
|
bluer_ugv/README/shortcuts.py,sha256=vjE1QUdZg4omCoqy3BoTXQUbe6c5ERyq2Hjbl5TDw28,1316
|
|
64
|
-
bluer_ugv/README/arzhang/__init__.py,sha256=
|
|
69
|
+
bluer_ugv/README/arzhang/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
65
70
|
bluer_ugv/README/arzhang/algo.py,sha256=om7gokRGJ5X_yMi40r9SgoNav3C4Pcd7S7TuQv58ccs,134
|
|
66
|
-
bluer_ugv/README/arzhang/consts.py,sha256=
|
|
71
|
+
bluer_ugv/README/arzhang/consts.py,sha256=MAS5OGe1O8AmoCxBfWgAmeByBWxdg_9UiQ5paCn_uGw,310
|
|
67
72
|
bluer_ugv/README/arzhang/design.py,sha256=69P7xQ3Y1XfyIbnerilneuN_OJWzvsx_gw-9L4pyvT8,1705
|
|
73
|
+
bluer_ugv/README/arzhang/docs.py,sha256=va9n90xUAEkO1-161yciOdmqOTJ2RaBOi-5yTA6IEPs,350
|
|
68
74
|
bluer_ugv/README/arzhang/flag.py,sha256=aTSQXk_sK09Wj7UCtAFkqruA0jwTvySHycG5pMu6Kp0,553
|
|
69
75
|
bluer_ugv/README/arzhang/items.py,sha256=FRa_zAQr8ss3YXqZN3QyO9az_GmwNF4aZL7kMGx0cCw,1765
|
|
70
76
|
bluer_ugv/README/computer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
71
|
-
bluer_ugv/README/computer/box.py,sha256=
|
|
77
|
+
bluer_ugv/README/computer/box.py,sha256=u9uJ3rChUWltd_ZuIzDd62sst278cZx7rcC5CHVoE6Q,799
|
|
72
78
|
bluer_ugv/README/computer/docs.py,sha256=MKZ5xX-9J2jLncO3oL2W3KHbxE6--ZX32JaR-xfjNWk,883
|
|
73
79
|
bluer_ugv/README/computer/power.py,sha256=NDr3vWM4TGARlvRJuWg7DhkWAitBxnCorxrV73Xxn28,390
|
|
74
80
|
bluer_ugv/README/computer/schematics.py,sha256=1ZPKmuEBWwYb7_L1uzjK-14e-9qeBENpZCdgnbu6yeI,378
|
|
75
81
|
bluer_ugv/README/computer/testing.py,sha256=WLr6UmjG9bGXBVSUsV77OJw3pqW8o45wKdKBavjRlFQ,537
|
|
76
82
|
bluer_ugv/README/computer/shield/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
77
|
-
bluer_ugv/README/computer/shield/docs.py,sha256=
|
|
83
|
+
bluer_ugv/README/computer/shield/docs.py,sha256=I2PqQzLRn3Gf04WOQkesEu9SUNQqEzJAZTI7eHWMvaY,994
|
|
84
|
+
bluer_ugv/README/computer/shield/parts.py,sha256=GhR_BoLwxsxWOy6aj5NkhKCxjsJQMqTNHSsAP6pMqBE,697
|
|
78
85
|
bluer_ugv/README/computer/shield/testing.py,sha256=inXHfmNP4UYANpqFtaOCqgrrqZc-DuSySMPJ5MocSmM,443
|
|
79
86
|
bluer_ugv/README/computer/shield/v1.py,sha256=bdvXYj4ZXSQ3hoPkLaY16gGDk4vQY70bGPGzLA7ceaI,329
|
|
80
87
|
bluer_ugv/README/computer/shield/v2.py,sha256=5qIFnFbn_v-5wqnF7Itna4RIBZJryvxKPnWqOUf6pdE,653
|
|
81
|
-
bluer_ugv/README/eagle/__init__.py,sha256=
|
|
88
|
+
bluer_ugv/README/eagle/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
82
89
|
bluer_ugv/README/eagle/consts.py,sha256=u92JMMAWnB8ayWxKNTiqz_leAAszv427m4nZjJYJq4Y,116
|
|
90
|
+
bluer_ugv/README/eagle/docs.py,sha256=jDRkrWZL4ZNOS3jwTs3uHKAbrXQjbVimYSjC4ShX8ww,647
|
|
83
91
|
bluer_ugv/README/eagle/items.py,sha256=ombp026VFK_w1oP7p9X6jcRskr4jTDOXqoxD0UB5Rvo,320
|
|
84
|
-
bluer_ugv/README/fire/__init__.py,sha256=
|
|
92
|
+
bluer_ugv/README/fire/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
85
93
|
bluer_ugv/README/fire/consts.py,sha256=xM3UXPvQlyuxbqjhs3wrqAH7rMgebpW1KabBZJ3I-pI,114
|
|
94
|
+
bluer_ugv/README/fire/docs.py,sha256=JZcj-UQvUpDFOOW-uPVf63dvseGnEKVBeydHrQwIpnU,643
|
|
86
95
|
bluer_ugv/README/fire/items.py,sha256=1r7sUjj0SrrPfHCadFEBORw3x0l6mXwk1T9Eu-QDzZk,74
|
|
87
|
-
bluer_ugv/README/rangin/__init__.py,sha256=
|
|
96
|
+
bluer_ugv/README/rangin/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
88
97
|
bluer_ugv/README/rangin/consts.py,sha256=QOtHe3TL9XoVQk3KD8bxBCdnXXjjnyCtobsYqYVPJ7s,270
|
|
98
|
+
bluer_ugv/README/rangin/docs.py,sha256=6SODAsT_Z2zgE1TzjIo6Xeqcswah2BgmhUWFV1ds10g,272
|
|
89
99
|
bluer_ugv/README/rangin/items.py,sha256=15Yt6SR_vTy8JjLP6FdyiliN59kOejMIt0-wTcvI0Sk,387
|
|
90
100
|
bluer_ugv/README/rangin/mechanical.py,sha256=N2R3vWQViszKPdwFASb8odYmvj-aWiNSMrtmLdTPt3M,1206
|
|
91
101
|
bluer_ugv/README/rangin/parts.py,sha256=JZ_GPQEDxWnCiLHycLzddAz6Y_U4T5oFOXtZkjA12eA,532
|
|
@@ -94,8 +104,9 @@ bluer_ugv/README/rangin/root.py,sha256=WuUZaXZ4xoML5X6Rvmga758TLTUL4ZLadzdBERyWn
|
|
|
94
104
|
bluer_ugv/README/rangin/schematics.py,sha256=iQHcP8aR5y1S9vtIWzRpumBTYyJjBJ2TYg7sAAZ-ISs,378
|
|
95
105
|
bluer_ugv/README/rangin/specs.py,sha256=sIggtotyBzMxfJEBiGyCb_c4s2K5O3f0ngMsX-sBzSc,306
|
|
96
106
|
bluer_ugv/README/rangin/terraform.py,sha256=xNdRfW4atsow1pb-hrSis2bHesYsqshWKco3k41Ilo0,71
|
|
97
|
-
bluer_ugv/README/ravin/__init__.py,sha256=
|
|
107
|
+
bluer_ugv/README/ravin/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
98
108
|
bluer_ugv/README/ravin/consts.py,sha256=ofmtRHvct6qYK-MAc5clBI9sGFEIVhITx3PAxra61JA,54
|
|
109
|
+
bluer_ugv/README/ravin/docs.py,sha256=QaJ4ZFs7Spop1Y39MjVXG4F-eDUV_lLw-chTXSy6iNg,283
|
|
99
110
|
bluer_ugv/README/ravin/items.py,sha256=bTi0qAiY53fGmkO_uwGwstDzgARmcHxSc2a6Z0Zj9wo,583
|
|
100
111
|
bluer_ugv/README/swallow/__init__.py,sha256=X3GqLqS5VhbyUfw9sIT58MsTQ1aUnZqfRxI2sMQbYiQ,251
|
|
101
112
|
bluer_ugv/README/swallow/analog.py,sha256=NmFEukeKepYRtIc0UT_F96uRKKukFM585UA6mlaW9ZM,360
|
|
@@ -112,8 +123,10 @@ bluer_ugv/README/swallow/digital/design/mechanical.py,sha256=OwgMrFIpRA-RR9CwurX
|
|
|
112
123
|
bluer_ugv/README/swallow/digital/design/parts.py,sha256=R_CePkG5zF3qn1X4hvQyd8Iunc0u6yfWXyJJZi3fWBw,549
|
|
113
124
|
bluer_ugv/README/swallow/digital/design/ultrasonic_sensor.py,sha256=VefIdTUXnsxVj3rmjsguV7N2BD9tPRiiaHjjRl84QUM,1517
|
|
114
125
|
bluer_ugv/README/ugvs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
115
|
-
bluer_ugv/README/ugvs/
|
|
116
|
-
bluer_ugv/README/ugvs/
|
|
126
|
+
bluer_ugv/README/ugvs/__main__.py,sha256=4eIr40fS4QD0BkAMk_vo6dGYOUlbPjDs_cN-uoHlILs,857
|
|
127
|
+
bluer_ugv/README/ugvs/db.py,sha256=LdcR33I1cBV19zRQmc3guM65SIHtrOnZmtnPTNuF1ZU,4623
|
|
128
|
+
bluer_ugv/README/ugvs/docs.py,sha256=q0I1ZPUJITg0G7dW5Lv8dnNm0JEL4rdMkcaD4qU3XRk,3420
|
|
129
|
+
bluer_ugv/README/ugvs/get.py,sha256=fxxPlvr-A38iw6o_1izXdd82N0C5W6y45R7eODK_ujk,487
|
|
117
130
|
bluer_ugv/README/ugvs/comparison/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
118
131
|
bluer_ugv/README/ugvs/comparison/build.py,sha256=Dj86jYV0gGHZQrTRH0wZ_Q8eh3yREBx5bgQ1Sw2bahA,4634
|
|
119
132
|
bluer_ugv/README/ugvs/comparison/features/DYI.py,sha256=ED5Tlc4KcEFpLPHjwfSNGE47guKCeBG7Q84TS0BPJgE,187
|
|
@@ -144,7 +157,7 @@ bluer_ugv/designs/eagle/parts.py,sha256=ZnRBW7rNGVh-biRrgI-W9VwZB4-N_dTZpz-vd2Yu
|
|
|
144
157
|
bluer_ugv/designs/fire/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
145
158
|
bluer_ugv/designs/fire/parts.py,sha256=vm7rLl2sFtVeueYXkkPYrVvAx8zWrg-QzUIDCxhDJsY,84
|
|
146
159
|
bluer_ugv/designs/rangin/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
147
|
-
bluer_ugv/designs/rangin/parts.py,sha256=
|
|
160
|
+
bluer_ugv/designs/rangin/parts.py,sha256=9yP1bnI2vh9j3PHatimNjUoXx6w5J8_v5A6yJPBD4Wk,501
|
|
148
161
|
bluer_ugv/designs/ravin/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
149
162
|
bluer_ugv/designs/ravin/ravin3/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
150
163
|
bluer_ugv/designs/ravin/ravin3/parts.py,sha256=pgauuSwQ3ZhL2yikvgZjJwMpTaNV3t-lK4Icu3P0anE,307
|
|
@@ -152,8 +165,11 @@ bluer_ugv/designs/ravin/ravin4/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5
|
|
|
152
165
|
bluer_ugv/designs/ravin/ravin4/parts.py,sha256=Skgkut_OCRPUwtLX_gIe70A1n_r2-48aPW-f6K6zbmE,845
|
|
153
166
|
bluer_ugv/help/__init__.py,sha256=ajz1GSNU9xYVrFEDSz6Xwg7amWQ_yvW75tQa1ZvRIWc,3
|
|
154
167
|
bluer_ugv/help/__main__.py,sha256=ww3p0cIRZm-SDODZ_fYAzPV_-nucxtidjK1IP2idW8g,229
|
|
155
|
-
bluer_ugv/help/functions.py,sha256=
|
|
168
|
+
bluer_ugv/help/functions.py,sha256=Bx8Qv1yZRi0SOadfUkcaZdLY3oPbJBSX3Iyr9UZ66To,570
|
|
169
|
+
bluer_ugv/help/get.py,sha256=vpvdU27VppybdhfFjXJ-CDpkCwb3j0jfZuY7dxBOqSs,437
|
|
156
170
|
bluer_ugv/help/git.py,sha256=4CcaA8lHoplrrFgF5lolwVT79SLr3gE2iqXpAIfzH64,319
|
|
171
|
+
bluer_ugv/help/ssh.py,sha256=MpGHCgaCaOO_ALZ8UaFPlawg9CUngWe1rdA6xkcjbf0,351
|
|
172
|
+
bluer_ugv/help/watch.py,sha256=1Xjet_lR7q1deEee7I0DZIS58HBn7AUoVAUpsE0l1Ns,355
|
|
157
173
|
bluer_ugv/help/swallow/__init__.py,sha256=13rjEuN0KXX6PpYlKzG8Pf3H3TKS3U8f9AZBhqacfSA,842
|
|
158
174
|
bluer_ugv/help/swallow/dataset.py,sha256=59D5XLQG1PRWfPwfM73Jz1-f0qh_cO0q18qLtsxXtj0,2495
|
|
159
175
|
bluer_ugv/help/swallow/debug.py,sha256=70krqg-YtjxPjPwWnx4J1Fxlvw46hHyAYq7pA7yPt50,481
|
|
@@ -220,8 +236,8 @@ bluer_ugv/swallow/session/classical/ultrasonic_sensor/pack.py,sha256=bVcG8V0P6Sl
|
|
|
220
236
|
bluer_ugv/swallow/session/classical/ultrasonic_sensor/review.py,sha256=_iQmec2VSq-ORkTVpXSNJg08hrSz2M1O8LzNZEtoT9U,959
|
|
221
237
|
bluer_ugv/swallow/session/classical/ultrasonic_sensor/sensor.py,sha256=En-J8BRTiR8k9p2CBbW0cOUuw8nctD5DOXDm5uhCNO4,3987
|
|
222
238
|
bluer_ugv/swallow/session/classical/ultrasonic_sensor/testing.py,sha256=yj2MY_Jo1FzeXnR_JoFAXsb9eHEVhicDiHEsUa8z03U,1525
|
|
223
|
-
bluer_ugv-7.
|
|
224
|
-
bluer_ugv-7.
|
|
225
|
-
bluer_ugv-7.
|
|
226
|
-
bluer_ugv-7.
|
|
227
|
-
bluer_ugv-7.
|
|
239
|
+
bluer_ugv-7.771.1.dist-info/licenses/LICENSE,sha256=ogEPNDSH0_dhiv_lT3ifVIdgIzHAqNA_SemnxUfPBJk,7048
|
|
240
|
+
bluer_ugv-7.771.1.dist-info/METADATA,sha256=6twiUr9R3JKB19ZRS9-mWkiyfQD04rSZEtTiftA_wB8,5707
|
|
241
|
+
bluer_ugv-7.771.1.dist-info/WHEEL,sha256=qELbo2s1Yzl39ZmrAibXA2jjPLUYfnVhUNTlyF1rq0Y,92
|
|
242
|
+
bluer_ugv-7.771.1.dist-info/top_level.txt,sha256=_MlDhFvIPpher9Zs7xyJTHgO2xJJTbfR1dzncz3LQnk,10
|
|
243
|
+
bluer_ugv-7.771.1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|