bluer-ugv 7.235.1__py3-none-any.whl → 7.262.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.
@@ -1,6 +1,6 @@
1
1
  from bluer_ugv.README.arzhang.items import items
2
2
  from bluer_ugv.README.arzhang import design, algo, flag
3
- from bluer_ugv.README.arzhang.validations import docs as validations
3
+ from bluer_ugv.README.validations import docs as validations
4
4
 
5
5
  docs = (
6
6
  [
@@ -1,5 +1,8 @@
1
1
  from bluer_objects.README.consts import assets_url, designs_url
2
2
 
3
+ arzhang_assets = assets_url(
4
+ suffix="arzhang",
5
+ )
3
6
 
4
7
  arzhang_assets2 = assets_url(
5
8
  suffix="arzhang",
@@ -16,7 +16,7 @@ items = ImageItems(
16
16
  f"{arzhang_assets2}/VID-20250830-WA0000~3_1.gif": "",
17
17
  f"{arzhang_assets2}/20250901_105247.jpg": "",
18
18
  f"{arzhang_assets2}/20250905_120625.jpg": "",
19
- f"{arzhang_assets2}/VID-20250905-WA0014_1.gif": "./validation/village-1.md",
19
+ f"{arzhang_assets2}/VID-20250905-WA0014_1.gif": "../validations/village-1.md",
20
20
  f"{swallow_assets2}/20251001_185852.jpg": "",
21
21
  f"{swallow_assets2}/20251003_113240-2.jpg": "",
22
22
  f"{swallow_assets2}/20251003_121114-2.jpg": "",
bluer_ugv/README/build.py CHANGED
@@ -16,8 +16,8 @@ from bluer_ugv.README import (
16
16
  arzhang,
17
17
  rangin,
18
18
  swallow,
19
- UGVs,
20
19
  )
20
+ from bluer_ugv.README.ugvs import docs as ugvs
21
21
 
22
22
 
23
23
  def build() -> bool:
@@ -46,6 +46,6 @@ def build() -> bool:
46
46
  + arzhang.docs
47
47
  + swallow.docs
48
48
  + alias.docs
49
- + UGVs.docs
49
+ + ugvs.docs
50
50
  + rangin.docs
51
51
  )
@@ -26,8 +26,8 @@ items = markdown.generate_table(
26
26
  "marquee": f"{swallow_assets2}/20250611_100917.jpg?raw=true",
27
27
  },
28
28
  {
29
- "name": "arzhang validations",
30
- "url": "./bluer_ugv/docs/arzhang/validation",
29
+ "name": "validations",
30
+ "url": "./bluer_ugv/docs/validations",
31
31
  "marquee": assets_url(
32
32
  suffix="{object_name}/{object_name}.gif".format(
33
33
  object_name="swallow-debug-2025-09-25-13-16-59-rnm7jd"
File without changes
File without changes
@@ -0,0 +1,15 @@
1
+ from bluer_ugv.README.ugvs.comparison.features import UGV_Size, UGV_Cost, UGV_Control
2
+ from bluer_ugv.README.ugvs.comparison.ugvs import List_of_UGVs
3
+
4
+ list_of_ugvs = List_of_UGVs()
5
+
6
+
7
+ list_of_ugvs.add(
8
+ name="ربات موشک‌انداز نذیر",
9
+ control=UGV_Control.RC,
10
+ size=UGV_Size.MEDIUM,
11
+ payload=700,
12
+ range=4,
13
+ cost=UGV_Cost.MEDIUM,
14
+ DYI=False,
15
+ )
@@ -0,0 +1,55 @@
1
+ from typing import Dict, Callable
2
+
3
+ from enum import Enum
4
+
5
+
6
+ class UGV_Control(Enum):
7
+ RC_AI = 3
8
+ AI = 2
9
+ RC = 1
10
+
11
+
12
+ class UGV_Cost(Enum):
13
+ LOW = 100 # < 50 mT ~= $500
14
+ MEDIUM = 10 # < 500 mT ~= $5k
15
+ HIGHT = 1 # < 5 MT ~= $50k
16
+
17
+
18
+ class UGV_Size(Enum):
19
+ SMALL = 100
20
+ MEDIUM = 10
21
+ LARGE = 1
22
+
23
+
24
+ class Feature:
25
+ def __init__(
26
+ self,
27
+ name,
28
+ score: int = -1,
29
+ better_func: Callable = lambda score_1, score_2: score_1 > score_2,
30
+ ):
31
+ self.name = name
32
+ self.score = score
33
+ self.better_func = better_func
34
+
35
+
36
+ class FeatureList:
37
+ def __init__(self):
38
+ self.db: Dict[Feature] = {}
39
+
40
+ def add(self, feature: Feature):
41
+ self.db[feature] = False
42
+
43
+
44
+ list_of_features: FeatureList = FeatureList()
45
+
46
+ for feature_name in [
47
+ "سامانه‌ی هوش مصنوعی",
48
+ "سامانه‌ی مکان‌یابی",
49
+ "فعالیت گروهی",
50
+ "شعاع عملکرد عملیاتی نامحدود",
51
+ "قابلیت استتار و کمین درازمدت",
52
+ "حمل پهپاد و رهپاد",
53
+ "تحریم گریزی",
54
+ ]:
55
+ FeatureList.add(Feature(feature_name))
@@ -0,0 +1,43 @@
1
+ from typing import List
2
+ import copy
3
+
4
+ from bluer_ugv.README.ugvs.comparison.features import (
5
+ list_of_features,
6
+ UGV_Control,
7
+ UGV_Cost,
8
+ UGV_Size,
9
+ )
10
+
11
+
12
+ class UGV:
13
+ def __init__(
14
+ self,
15
+ name: str,
16
+ control: UGV_Control,
17
+ size: UGV_Size,
18
+ payload: float, # kg
19
+ range: float, # km
20
+ cost: UGV_Cost,
21
+ DYI: bool,
22
+ ):
23
+ self.name = name
24
+ self.control = control
25
+ self.size = size
26
+ self.payload = payload
27
+ self.range = range
28
+ self.cost = cost
29
+ self.DYI = DYI
30
+
31
+ self.features = copy.deepcopy(list_of_features)
32
+
33
+
34
+ class List_of_UGVs:
35
+ def __init__(self):
36
+ self.db: List[UGV] = []
37
+
38
+ def add(
39
+ self,
40
+ **kw_args,
41
+ ):
42
+ ugv = UGV(**kw_args)
43
+ self.db.append(ugv)
@@ -0,0 +1,32 @@
1
+ from bluer_ugv.README.swallow.consts import swallow_assets2
2
+ from bluer_ugv.README.arzhang.consts import arzhang_assets, arzhang_assets2
3
+ from bluer_ugv.README.rangin.consts import rangin_assets2
4
+
5
+ dict_of_ugvs = {
6
+ "swallow": {
7
+ "items": [
8
+ f"{swallow_assets2}/20250701_2206342_1.gif",
9
+ f"{swallow_assets2}/20250913_203635~2_1.gif",
10
+ ]
11
+ },
12
+ "arzhang": {
13
+ "items": [
14
+ f"{arzhang_assets2}/20251106_111750.jpg",
15
+ ],
16
+ },
17
+ "arzhang2": {
18
+ "items": [
19
+ f"{arzhang_assets2}/20251106_111750.jpg",
20
+ ],
21
+ },
22
+ "arzhang3": {
23
+ "items": [
24
+ f"{arzhang_assets}/20251107_175506.jpg",
25
+ ],
26
+ },
27
+ "rangin": {
28
+ "items": [
29
+ f"{rangin_assets2}/rangin.png",
30
+ ]
31
+ },
32
+ }
@@ -0,0 +1,30 @@
1
+ from bluer_objects.README.items import ImageItems
2
+
3
+ from bluer_ugv.README.ugvs.db import dict_of_ugvs
4
+ from bluer_ugv.README.validations.db import dict_of_validations
5
+
6
+ docs = [
7
+ {
8
+ "path": f"../docs/UGVs/{ugv_name}.md",
9
+ "items": ImageItems({item: "" for item in info.get("items", [])}),
10
+ "macros": {
11
+ "validations:::": [
12
+ "validations: {}".format(
13
+ ", ".join(
14
+ sorted(
15
+ [
16
+ f"[`{validation_name}`](../validations/{validation_name}.md)"
17
+ for validation_name, info in dict_of_validations.items()
18
+ if any(
19
+ ugv_name_.startswith(f"{ugv_name}:")
20
+ for ugv_name_ in info["ugv_name"]
21
+ )
22
+ ]
23
+ )
24
+ )
25
+ ),
26
+ ]
27
+ },
28
+ }
29
+ for ugv_name, info in dict_of_ugvs.items()
30
+ ]
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.235.1"
7
+ VERSION = "7.262.1"
8
8
 
9
9
  REPO_NAME = "bluer-ugv"
10
10
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bluer_ugv
3
- Version: 7.235.1
3
+ Version: 7.262.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
  | [`shield`](https://github.com/kamangir/bluer-ugv/blob/main/bluer_ugv/docs/swallow/digital/design/shield.md) [![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/shield.md) | [`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
- | [`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) | [`arzhang validations`](https://github.com/kamangir/bluer-ugv/blob/main/bluer_ugv/docs/arzhang/validation) [![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/arzhang/validation) |
51
+ | [`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) |
52
52
 
53
53
  ## aliases
54
54
 
@@ -64,7 +64,7 @@ pip install bluer_ugv
64
64
 
65
65
  [![pylint](https://github.com/kamangir/bluer-ugv/actions/workflows/pylint.yml/badge.svg)](https://github.com/kamangir/bluer-ugv/actions/workflows/pylint.yml) [![pytest](https://github.com/kamangir/bluer-ugv/actions/workflows/pytest.yml/badge.svg)](https://github.com/kamangir/bluer-ugv/actions/workflows/pytest.yml) [![bashtest](https://github.com/kamangir/bluer-ugv/actions/workflows/bashtest.yml/badge.svg)](https://github.com/kamangir/bluer-ugv/actions/workflows/bashtest.yml) [![PyPI version](https://img.shields.io/pypi/v/bluer-ugv.svg)](https://pypi.org/project/bluer-ugv/) [![PyPI - Downloads](https://img.shields.io/pypi/dd/bluer-ugv)](https://pypistats.org/packages/bluer-ugv)
66
66
 
67
- built by 🌀 [`bluer README`](https://github.com/kamangir/bluer-objects/tree/main/bluer_objects/README), based on 🐬 [`bluer_ugv-7.235.1`](https://github.com/kamangir/bluer-ugv).
67
+ built by 🌀 [`bluer README`](https://github.com/kamangir/bluer-objects/tree/main/bluer_objects/README), based on 🐬 [`bluer_ugv-7.262.1`](https://github.com/kamangir/bluer-ugv).
68
68
 
69
69
 
70
70
  built by 🌀 [`blueness-3.118.1`](https://github.com/kamangir/blueness).
@@ -1,4 +1,4 @@
1
- bluer_ugv/__init__.py,sha256=zrU8USVDfnsYRUS4mD5zJdXDIk7bnN1ocyFDvIUbP2s,288
1
+ bluer_ugv/__init__.py,sha256=lyjScJ1YWudsnHcbxo7La8IYNCy3Ej7nlTHWLLBs-_w,288
2
2
  bluer_ugv/__main__.py,sha256=77TquqyMca7qHk0XtCixGVyzfW3_9ywnl5oXEPERlls,374
3
3
  bluer_ugv/config.env,sha256=psiLmasSe300nOPkLqMurFalZTvNE43zAsBQLEEDp-k,949
4
4
  bluer_ugv/env.py,sha256=asv-2OByZzf1c4ta3CHMZQDEcY8cd2WDUOa-_OCNYvU,1757
@@ -41,22 +41,21 @@ bluer_ugv/.abcli/tests/swallow_dataset_list.sh,sha256=DPjikrMLMl0oJTHBV4EyYmkMZn
41
41
  bluer_ugv/.abcli/tests/ultrasonic_sensor_review.sh,sha256=4LxfOGRAUJsZ5dnxrkwXCjWmkgQWSeqck-UYyza3aw8,243
42
42
  bluer_ugv/.abcli/tests/version.sh,sha256=7nVT4lERxIe-GkuDn86nfur9E_WGbvWtet_AJtr2S48,147
43
43
  bluer_ugv/.abcli/ugv/git.sh,sha256=U5p_5qrNwLw8O7HfHu7QZgLblbDc6Z6lIumgKwu3mzY,299
44
- bluer_ugv/README/UGVs.py,sha256=VGPXFX_0SWDgb73fWCrKygSZ5x-QeeA5a9Sx3sa9dqU,1221
45
44
  bluer_ugv/README/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
46
45
  bluer_ugv/README/alias.py,sha256=MdTRUMg3rLbWS_AQz1WXwbkEjKEjBx5uM_fDwYmMGFY,173
47
46
  bluer_ugv/README/beast.py,sha256=6sOpm4vNXxNtNMZszgiuqqJaBBWG02WaSgKfbdt7J4E,57
48
- bluer_ugv/README/build.py,sha256=1mvmd2bIN-M4HC5gv7_HeXHlG1acHdRe3KGZovg_JkU,1139
47
+ bluer_ugv/README/build.py,sha256=BDj0RT0iB2Xqv3aGPUeV2F7PcgpuDCFSXQID3pzyS2Q,1176
49
48
  bluer_ugv/README/consts.py,sha256=bQ98yk28E8-EBh2wUgMNr-sZ90IC3q7BmTzJe5XCS3g,257
50
49
  bluer_ugv/README/items.py,sha256=NVnBa-H9XqVnQR75kbrWvdKZHlgITYYS0DTqdvjgMvc,2221
51
50
  bluer_ugv/README/root.py,sha256=h1piDAmlkdfbKZeZTW3HWzsW4VpKG6L776oYK7hC-J0,296
52
51
  bluer_ugv/README/shield.py,sha256=iHH7U4_Yq9WWaK87giVtqNl03I23y7jXsFpoOQc0E7Y,2053
53
- bluer_ugv/README/shortcuts.py,sha256=PO0NNEMOsH8OoUiDMOzmNF0wEQQm7dliAxWH7UVqf7s,1330
54
- bluer_ugv/README/arzhang/__init__.py,sha256=AKHkt16Nmyd_srcn-spd0gwf5ceqqfpey9a6QvYecZI,358
52
+ bluer_ugv/README/shortcuts.py,sha256=fY-pt04LcBAk3ENlD_JFnKU-ucAfV6Q_QWN7I0sRAqA,1315
53
+ bluer_ugv/README/arzhang/__init__.py,sha256=va9n90xUAEkO1-161yciOdmqOTJ2RaBOi-5yTA6IEPs,350
55
54
  bluer_ugv/README/arzhang/algo.py,sha256=om7gokRGJ5X_yMi40r9SgoNav3C4Pcd7S7TuQv58ccs,134
56
- bluer_ugv/README/arzhang/consts.py,sha256=8inKJdH18H5ZLX95Doy2FH90RaYSGGtIaU4JISj0TM8,186
55
+ bluer_ugv/README/arzhang/consts.py,sha256=o7IDyn7hCXFsHQuAX_qM196R1vEkTcxyC9K5TOaB4G4,239
57
56
  bluer_ugv/README/arzhang/design.py,sha256=Co-zUE-sykOjPAf8oAQ1TM1Aj3y3JM6rdBDe7rEwmx4,1736
58
57
  bluer_ugv/README/arzhang/flag.py,sha256=aTSQXk_sK09Wj7UCtAFkqruA0jwTvySHycG5pMu6Kp0,553
59
- bluer_ugv/README/arzhang/items.py,sha256=1e01WCIcw5RpSp6ert6TuS_CTjKaGImDRLCsuYGBg9s,1331
58
+ bluer_ugv/README/arzhang/items.py,sha256=roaCCdYqea6cwPxdn8ahyDilu8ePhGGOc2er1aCWM7k,1333
60
59
  bluer_ugv/README/eagle/__init__.py,sha256=jDRkrWZL4ZNOS3jwTs3uHKAbrXQjbVimYSjC4ShX8ww,647
61
60
  bluer_ugv/README/eagle/consts.py,sha256=u92JMMAWnB8ayWxKNTiqz_leAAszv427m4nZjJYJq4Y,116
62
61
  bluer_ugv/README/eagle/items.py,sha256=ombp026VFK_w1oP7p9X6jcRskr4jTDOXqoxD0UB5Rvo,320
@@ -80,6 +79,13 @@ bluer_ugv/README/swallow/digital/algo/yolo.py,sha256=NlDISZ9LOUmMAzdEYzVYOrIwbDG
80
79
  bluer_ugv/README/swallow/digital/design/__init__.py,sha256=RwH9vIDnocrKVt5WaBZq3Nxh2DygOLWelOsrvyEl1Aw,2324
81
80
  bluer_ugv/README/swallow/digital/design/mechanical.py,sha256=OwgMrFIpRA-RR9CwurXaif09GCd6_i3zGuAfkH0jtsM,983
82
81
  bluer_ugv/README/swallow/digital/design/ultrasonic_sensor.py,sha256=VefIdTUXnsxVj3rmjsguV7N2BD9tPRiiaHjjRl84QUM,1517
82
+ bluer_ugv/README/ugvs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
83
+ bluer_ugv/README/ugvs/db.py,sha256=f97aN0aeYEbQ7aCPfRAYDEKCpy56w9MrR-8dNGwPaO0,803
84
+ bluer_ugv/README/ugvs/docs.py,sha256=WDdt404j-ZIlwfgHRd34nIN2DaQXO6Uw7EaV3S87zSA,1067
85
+ bluer_ugv/README/ugvs/comparison/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
86
+ bluer_ugv/README/ugvs/comparison/db.py,sha256=2lDOmb_XjGsoWNHgHjI8f1n82x3k9tCcEzrwI9FiSCI,379
87
+ bluer_ugv/README/ugvs/comparison/features.py,sha256=6Woz98FiA7wV3f9o_h7ncUTyD7mvI0Nba8p6U6r1-a4,1153
88
+ bluer_ugv/README/ugvs/comparison/ugvs.py,sha256=uHkaWyOfjvxEzM_uOSuWlrxhDC0b4RsfYzos5sOsnn0,821
83
89
  bluer_ugv/designs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
84
90
  bluer_ugv/designs/arzhang/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
85
91
  bluer_ugv/designs/arzhang/parts.py,sha256=x3AL4oGtjODOQPYg-2P7zGXzqWjYZ9BXUXPsNf8o8Ho,80
@@ -151,8 +157,8 @@ bluer_ugv/swallow/session/classical/ultrasonic_sensor/pack.py,sha256=vMvmay2Gxg8
151
157
  bluer_ugv/swallow/session/classical/ultrasonic_sensor/review.py,sha256=_iQmec2VSq-ORkTVpXSNJg08hrSz2M1O8LzNZEtoT9U,959
152
158
  bluer_ugv/swallow/session/classical/ultrasonic_sensor/sensor.py,sha256=En-J8BRTiR8k9p2CBbW0cOUuw8nctD5DOXDm5uhCNO4,3987
153
159
  bluer_ugv/swallow/session/classical/ultrasonic_sensor/testing.py,sha256=RIMHXmLXe1zXLvCNU163ymLI8XM6te9LXuCMnLuulbA,1515
154
- bluer_ugv-7.235.1.dist-info/licenses/LICENSE,sha256=ogEPNDSH0_dhiv_lT3ifVIdgIzHAqNA_SemnxUfPBJk,7048
155
- bluer_ugv-7.235.1.dist-info/METADATA,sha256=rl_6Km73ubYVIPtNjgPbEk4IQlZozWjsgUS-R7sAfoY,5601
156
- bluer_ugv-7.235.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
157
- bluer_ugv-7.235.1.dist-info/top_level.txt,sha256=_MlDhFvIPpher9Zs7xyJTHgO2xJJTbfR1dzncz3LQnk,10
158
- bluer_ugv-7.235.1.dist-info/RECORD,,
160
+ bluer_ugv-7.262.1.dist-info/licenses/LICENSE,sha256=ogEPNDSH0_dhiv_lT3ifVIdgIzHAqNA_SemnxUfPBJk,7048
161
+ bluer_ugv-7.262.1.dist-info/METADATA,sha256=98onEJ6yCf3w4zChubbn4UVUkrmDZz_U-STGKq-uG_4,5579
162
+ bluer_ugv-7.262.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
163
+ bluer_ugv-7.262.1.dist-info/top_level.txt,sha256=_MlDhFvIPpher9Zs7xyJTHgO2xJJTbfR1dzncz3LQnk,10
164
+ bluer_ugv-7.262.1.dist-info/RECORD,,
bluer_ugv/README/UGVs.py DELETED
@@ -1,46 +0,0 @@
1
- from bluer_objects.README.items import ImageItems
2
-
3
- from bluer_ugv.README.consts import bluer_ugv_assets
4
- from bluer_ugv.README.arzhang.consts import arzhang_assets2
5
- from bluer_ugv.README.rangin.consts import rangin_assets2
6
- from bluer_ugv.README.swallow.consts import swallow_assets2
7
-
8
-
9
- docs = [
10
- {
11
- "path": "../docs/UGVs",
12
- },
13
- {
14
- "path": "../docs/UGVs/swallow.md",
15
- "items": ImageItems(
16
- {
17
- f"{swallow_assets2}/20250701_2206342_1.gif": "",
18
- f"{swallow_assets2}/20250913_203635~2_1.gif": "",
19
- }
20
- ),
21
- },
22
- {
23
- "path": "../docs/UGVs/arzhang.md",
24
- "items": ImageItems(
25
- {
26
- f"{arzhang_assets2}/20251005_112530.jpg": "",
27
- }
28
- ),
29
- },
30
- {
31
- "path": "../docs/UGVs/arzhang2.md",
32
- "items": ImageItems(
33
- {
34
- f"{arzhang_assets2}/20251005_112530.jpg": "",
35
- }
36
- ),
37
- },
38
- {
39
- "path": "../docs/UGVs/arzhang3.md",
40
- "items": ImageItems({f"{bluer_ugv_assets}/bluer-light.png": ""}),
41
- },
42
- {
43
- "path": "../docs/UGVs/rangin.md",
44
- "items": ImageItems({f"{rangin_assets2}/rangin.png": ""}),
45
- },
46
- ]