Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
98 commits
Select commit Hold shift + click to select a range
a948f09
add biomek.py demo implementation
TablewareBox May 30, 2025
055d120
更新LiquidHandlerBiomek类,添加资源创建功能,优化协议创建方法,修复部分代码格式问题,更新YAML配置以支持新功能。
TablewareBox May 30, 2025
90a0f3d
merge
Xuwznln May 30, 2025
0452a68
Test
ElijahChang929 May 30, 2025
ea2e9c3
fix biomek success type
Xuwznln May 30, 2025
cb7c56a
Convert LH action to biomek.
ElijahChang929 May 30, 2025
208540b
Update biomek.py
ElijahChang929 May 30, 2025
d2dda6e
Merge branch '37-biomek-i5i7' of https://github.com/dptech-corp/Uni-L…
ElijahChang929 May 30, 2025
0f2555c
注册表上报handle和schema (param input)
Xuwznln May 30, 2025
478a859
修复biomek缺少的字段
Xuwznln May 30, 2025
6f6c70e
delete 's'
ElijahChang929 Jun 4, 2025
8a29bc5
Remove warnings
ElijahChang929 Jun 4, 2025
807dcdd
Update biomek.py
ElijahChang929 Jun 4, 2025
6d2489a
Merge branch '37-biomek-i5i7' of https://github.com/dptech-corp/Uni-L…
ElijahChang929 Jun 4, 2025
147b8f4
Biomek test
ElijahChang929 Jun 4, 2025
5b240cb
Update biomek.py
ElijahChang929 Jun 4, 2025
c5a495f
新增transfer_biomek的msg
Xuwznln Jun 4, 2025
e63c159
New transfer_biomek
ElijahChang929 Jun 4, 2025
e1a7c3a
Updated transfer_biomek
ElijahChang929 Jun 4, 2025
b957ad2
Merge branch '37-biomek-i5i7' of https://github.com/dptech-corp/Uni-L…
ElijahChang929 Jun 4, 2025
b999692
更新transfer_biomek的msg
Xuwznln Jun 5, 2025
39de3ac
更新transfer_biomek的msg
Xuwznln Jun 5, 2025
dd5a7ca
支持Biomek创建
Xuwznln Jun 5, 2025
a62112a
new action
qxw138 Jun 5, 2025
101c1bc
fix key name typo
Xuwznln Jun 5, 2025
46da42d
Merge branch '37-biomek-i5i7' of https://github.com/dptech-corp/Uni-L…
qxw138 Jun 5, 2025
1e00a66
New parameter for biomek to run.
ElijahChang929 Jun 6, 2025
3c2a4a6
Merge branch '37-biomek-i5i7' of https://github.com/dptech-corp/Uni-L…
ElijahChang929 Jun 6, 2025
106d71e
Refine
ElijahChang929 Jun 6, 2025
2573d34
Merge branch '37-biomek-i5i7' of https://github.com/dptech-corp/Uni-L…
qxw138 Jun 6, 2025
24ecb13
Update
ElijahChang929 Jun 6, 2025
5e86112
Merge branch '37-biomek-i5i7' of https://github.com/dptech-corp/Uni-L…
ElijahChang929 Jun 6, 2025
5bec899
new actions
qxw138 Jun 6, 2025
097114d
new actions
qxw138 Jun 6, 2025
1b9f3c6
1
qxw138 Jun 6, 2025
55be5e8
registry
Xuwznln Jun 6, 2025
48c43d3
fix biomek startup
Xuwznln Jun 6, 2025
c7b9c6a
fix handles not as default entry
Xuwznln Jun 6, 2025
6573c9e
biomek_test.py
qxw138 Jun 6, 2025
146d8c5
Merge branch '37-biomek-i5i7' of https://github.com/dptech-corp/Uni-L…
qxw138 Jun 6, 2025
e840516
Update biomek.py
qxw138 Jun 6, 2025
3f53f88
biomek_test.py
qxw138 Jun 7, 2025
8698821
fix liquid_handler.biomek handles
TablewareBox Jun 7, 2025
b6c9530
Merge branch '37-biomek-i5i7' of https://github.com/dptech-corp/Uni-L…
TablewareBox Jun 7, 2025
c0b7f2d
host node新增resource add时间统计
Xuwznln Jun 8, 2025
ab0c4b7
修正物料上传时间
Xuwznln Jun 8, 2025
6a14104
正确发送return_info结果
Xuwznln Jun 8, 2025
aaa8631
同步执行状态信息
Xuwznln Jun 8, 2025
5263277
取消raiseValueError提示
Xuwznln Jun 8, 2025
9b3377a
Update biomek_test.py
qxw138 Jun 8, 2025
f1fee5f
Merge branch '37-biomek-i5i7' of https://github.com/dptech-corp/Uni-L…
qxw138 Jun 8, 2025
6577fe1
0608 DONE
ElijahChang929 Jun 8, 2025
12c17ec
同步了Biomek.py 现在应可用
ElijahChang929 Jun 8, 2025
bab4b1d
biomek switch back to non-test
Xuwznln Jun 8, 2025
6ae77e0
temp disable initialize resource
Xuwznln Jun 8, 2025
729a0fc
37-biomek-i5i7 (#40)
Xuwznln Jun 9, 2025
133ffaa
Device visualization (#39)
q434343 Jun 9, 2025
d8a0c5e
Device visualization (#41)
Xuwznln Jun 9, 2025
4c7aa8a
fix move it
Xuwznln Jun 9, 2025
2e9a0a4
fix move it
Xuwznln Jun 9, 2025
ea5e7a5
Merge branch '37-biomek-i5i7' into dev
Xuwznln Jun 9, 2025
9c515a2
create_resource
Xuwznln Jun 9, 2025
d297abf
bump ver
Xuwznln Jun 9, 2025
9016998
增加modbus支持
Xuwznln Jun 10, 2025
369a21b
调整protocol node以更好支持多种类型的read和write
Xuwznln Jun 10, 2025
34151f5
补充日志
Xuwznln Jun 10, 2025
d7d0a27
Device visualization (#42)
Xuwznln Jun 12, 2025
96f37b3
Add Mock Device for Organic Synthesis\添加有机合成的虚拟仪器和Protocol (#43)
KCFeng425 Jun 12, 2025
11e4f05
bump version & protocol fix
Xuwznln Jun 12, 2025
ae3c65c
Merge remote-tracking branch 'origin/main' into dev
Xuwznln Jun 12, 2025
66af337
hotfix: Add macos_sdk_config (#46)
Mile-Away Jun 12, 2025
75ea45f
include device_mesh when pip install
Xuwznln Jun 12, 2025
30d143e
Merge branch 'dev' of https://github.com/dptech-corp/Uni-Lab-OS into dev
Xuwznln Jun 13, 2025
4471fed
测试自动构建
Xuwznln Jun 13, 2025
d5d516f
try build fix
Xuwznln Jun 13, 2025
49f1aa9
try build
Xuwznln Jun 13, 2025
5478ba3
test artifacts
Xuwznln Jun 13, 2025
8038094
hotfix: Add .certs in .gitignore
HaohuiQue Jun 15, 2025
934276d
create container
Xuwznln Jun 15, 2025
a354965
Merge branch 'dev' of https://github.com/dptech-corp/Uni-Lab-OS into dev
Xuwznln Jun 15, 2025
f7db8d1
container 添加和更新完成
Xuwznln Jun 15, 2025
46cec82
Device registry port (#49)
KCFeng425 Jun 22, 2025
6faa19a
Merge branch 'main' into dev
Xuwznln Jun 22, 2025
06b7962
更新workstation注册表
Xuwznln Jun 22, 2025
96e9c76
添加了两个protocol的检索功能 (#51)
KCFeng425 Jun 22, 2025
f9a9e91
Merge remote-tracking branch 'origin/main' into dev
Xuwznln Jun 22, 2025
bbc49e9
新增注册表补全功能,修复Protocol执行失败
Xuwznln Jun 27, 2025
15f3f85
支持通过导入方式补全注册表,新增工作流unilabos_device_id字段
Xuwznln Jun 27, 2025
817e88c
修复不启用注册表补充就无法启动的bug
Xuwznln Jun 27, 2025
9be6e10
修复部分识别error
Xuwznln Jun 28, 2025
be0a73e
修复静态方法识别get status,注册表支持python类型
Xuwznln Jun 28, 2025
157da17
status types对于嵌套类型返回的对象,暂时处理成字符串,无法直接进行转换
Xuwznln Jun 29, 2025
498b3ca
支持通过list[int],list[float]进行Int64MultiArray,Float64MultiArray的替换
Xuwznln Jun 29, 2025
6887135
成功动态导入的不再需要使用静态导入
Xuwznln Jun 29, 2025
6483271
Fix handle names (#55)
TablewareBox Jun 29, 2025
7714c71
add camera and dependency (#56)
TablewareBox Jun 29, 2025
09ad905
修复auto-的Action在protocol node下错误注册
Xuwznln Jun 29, 2025
f2753fc
Merge branch 'main' into dev
Xuwznln Jun 29, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 45 additions & 0 deletions test/experiments/camera.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
{
"nodes": [
{
"id": "Camera",
"name": "摄像头",
"children": [
],
"parent": null,
"type": "device",
"class": "camera",
"position": {
"x": 0,
"y": 0,
"z": 0
},
"config": {
"camera_index": 0,
"period": 0.05
},
"data": {
}
},
{
"id": "Gripper1",
"name": "假夹爪",
"children": [
],
"parent": null,
"type": "device",
"class": "gripper.mock",
"position": {
"x": 0,
"y": 0,
"z": 0
},
"config": {
},
"data": {
}
}
],
"links": [

]
}
Original file line number Diff line number Diff line change
Expand Up @@ -680,7 +680,7 @@
"type": "fluid",
"port": {
"multiway_valve_1": "5",
"rotavap_1": "sample_in"
"rotavap_1": "samplein"
}
},
{
Expand Down Expand Up @@ -770,7 +770,7 @@
"type": "transport",
"port": {
"multiway_valve_2": "4",
"filter_1": "filter_in"
"filter_1": "filterin"
}
},
{
Expand Down Expand Up @@ -800,7 +800,7 @@
"type": "fluid",
"port": {
"multiway_valve_2": "6",
"separator_1": "separator_in"
"separator_1": "separatorin"
}
},
{
Expand All @@ -809,7 +809,7 @@
"target": "collection_bottle_3",
"type": "fluid",
"port": {
"separator_1": "bottom_phase_out",
"separator_1": "bottomphaseout",
"collection_bottle_3": "top"
}
},
Expand Down Expand Up @@ -859,7 +859,7 @@
"target": "waste_bottle_2",
"type": "fluid",
"port": {
"separator_1": "top_phase_out",
"separator_1": "topphaseout",
"waste_bottle_2": "top"
}
},
Expand All @@ -879,7 +879,7 @@
"target": "collection_bottle_1",
"type": "transport",
"port": {
"filter_1": "filtrate_out",
"filter_1": "filtrateout",
"collection_bottle_1": "top"
}
},
Expand All @@ -889,7 +889,7 @@
"target": "waste_bottle_1",
"type": "transport",
"port": {
"filter_1": "retentate_out",
"filter_1": "retentateout",
"waste_bottle_1": "top"
}
}
Expand Down
3 changes: 2 additions & 1 deletion unilabos-linux-64.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,9 @@ dependencies:
- ros-humble-ros2-control
- ros-humble-robot-state-publisher
- ros-humble-joint-state-publisher
# web
# web and visualization
- ros-humble-rosbridge-server
- ros-humble-cv-bridge
# geometry & motion planning
- ros-humble-tf2
- ros-humble-moveit
Expand Down
3 changes: 2 additions & 1 deletion unilabos-osx-arm64.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,9 @@ dependencies:
- ros-humble-ros2-control
- ros-humble-robot-state-publisher
- ros-humble-joint-state-publisher
# web
# web and visualization
- ros-humble-rosbridge-server
- ros-humble-cv-bridge
# geometry & motion planning
- ros-humble-tf2
- ros-humble-moveit
Expand Down
26 changes: 17 additions & 9 deletions unilabos-win64.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,12 @@ channels:
dependencies:
# Basics
- python=3.11.11
- compilers
- cmake
- make
- ninja
- sphinx
- sphinx_rtd_theme
# - compilers
# - cmake
# - make
# - ninja
# - sphinx
# - sphinx_rtd_theme
# Data Visualization
- numpy
- scipy
Expand All @@ -23,7 +23,7 @@ dependencies:
- pyserial
- pyusb
- pylibftdi
- pymodbus
- pymodbus==3.6.9
- python-can
- pyvisa
- opencv
Expand All @@ -48,8 +48,9 @@ dependencies:
- ros-humble-ros2-control
- ros-humble-robot-state-publisher
- ros-humble-joint-state-publisher
# web
# web and visualization
- ros-humble-rosbridge-server
- ros-humble-cv-bridge
# geometry & motion planning
- ros-humble-tf2
- ros-humble-moveit
Expand All @@ -61,5 +62,12 @@ dependencies:
# ros-humble-gazebo-ros // ignored because of the conflict with ign-gazebo
# ilab equipments
# ros-humble-unilabos-msgs
# driver
#- crcmod
- pip:
- paho-mqtt
- paho-mqtt
# driver
#- ur-rtde # set PYTHONUTF8=1
#- pyautogui
#- pywinauto
#- pywinauto_recorder
15 changes: 8 additions & 7 deletions unilabos/app/controler.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,12 +25,13 @@ def job_add(req: JobAddReq) -> JobData:
if req.job_id is None:
req.job_id = str(uuid.uuid4())
action_name = req.data["action"]
action_kwargs = req.data["action_kwargs"]
req.data['action'] = action_name
if action_name == "execute_command_from_outer":
action_kwargs = {"command": json.dumps(action_kwargs)}
elif "command" in action_kwargs:
action_kwargs = action_kwargs["command"]
action_type = req.data.get("action_type", "LocalUnknown")
action_args = req.data.get("action_kwargs", None) # 兼容老版本,后续删除
if action_args is None:
action_args = req.data.get("action_args")
else:
if "command" in action_args:
action_args = action_args["command"]
# print(f"job_add:{req.device_id} {action_name} {action_kwargs}")
HostNode.get_instance().send_goal(req.device_id, action_name=action_name, action_kwargs=action_kwargs, goal_uuid=req.job_id, server_info=req.server_info)
HostNode.get_instance().send_goal(req.device_id, action_type=action_type, action_name=action_name, action_kwargs=action_args, goal_uuid=req.job_id, server_info=req.server_info)
return JobData(jobId=req.job_id)
10 changes: 8 additions & 2 deletions unilabos/app/register.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ def main():
"""
parser = argparse.ArgumentParser(description="注册设备和资源到 MQTT")
parser.add_argument(
"--registry_path",
"--registry",
type=str,
default=None,
action="append",
Expand All @@ -46,10 +46,16 @@ def main():
default=None,
help="配置文件路径,支持.py格式的Python配置文件",
)
parser.add_argument(
"--complete_registry",
action="store_true",
default=False,
help="是否补全注册表",
)
args = parser.parse_args()

# 构建注册表
build_registry(args.registry_path)
build_registry(args.registry, args.complete_registry)
load_config_from_file(args.config)

from unilabos.app.mq import mqtt_client
Expand Down
4 changes: 3 additions & 1 deletion unilabos/app/web/pages.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import json
import os
import sys
import traceback
from pathlib import Path
from typing import Dict

Expand All @@ -17,7 +18,7 @@
from unilabos.config.config import BasicConfig
from unilabos.registry.registry import lab_registry
from unilabos.ros.msgs.message_converter import msg_converter_manager
from unilabos.utils.log import error
from unilabos.utils.log import error, debug
from unilabos.utils.type_check import TypeEncoder
from unilabos.app.web.utils.device_utils import get_registry_info
from unilabos.app.web.utils.host_utils import get_host_node_info
Expand Down Expand Up @@ -123,6 +124,7 @@ async def status_page() -> str:

return html
except Exception as e:
debug(traceback.format_exc())
error(f"生成状态页面时出错: {str(e)}")
raise HTTPException(status_code=500, detail=f"Error generating status page: {str(e)}")

Expand Down
2 changes: 2 additions & 0 deletions unilabos/app/web/utils/action_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,8 @@ def get_yaml_from_goal_type(goal_type) -> str:
Returns:
str: 默认Goal参数的YAML格式字符串
"""
if isinstance(goal_type, str):
return "{}"
if not goal_type:
return "{}"

Expand Down
Loading
Loading