Compare commits

...

91 Commits

Author SHA1 Message Date
wznln
4decd9a174 Merge branch '24-high-level-liquidhandler' into dev
# Conflicts:
#	unilabos/app/main.py
#	unilabos/registry/devices/liquid_handler.yaml
#	unilabos_msgs/CMakeLists.txt
2025-05-14 22:35:56 +08:00
Junhan Chang
83c765f0ab unify liquid_handler definition 2025-05-14 22:14:14 +08:00
wznln
3600b6f934 mq client id 2025-05-13 19:17:21 +08:00
wznln
f0576e5666 identify debug msg 2025-05-13 19:03:39 +08:00
wznln
8e1dbb56b1 add resource creat easy action 2025-05-13 18:36:02 +08:00
wznln
013c25f3aa Merge remote-tracking branch 'origin/dev' into fork/q434343/device_visualization 2025-05-07 04:10:25 +08:00
zhangshixiang
3d71c8bc78 Merge branch 'dev' into device_visualization 2025-05-07 04:05:12 +08:00
zhangshixiang
42f0994147 tijiao 2025-05-07 04:04:42 +08:00
wznln
4223f9b72c fix: msg converter 2025-05-07 04:04:02 +08:00
wznln
bec58e1301 fix: jobadd 2025-05-07 03:33:13 +08:00
wznln
6f9773157c fix: jobadd 2025-05-07 03:26:22 +08:00
zhangshixiang
da50e435c1 提交 2025-05-07 03:19:30 +08:00
wznln
34e03bbd6e fix: aspirate 2025-05-07 03:09:46 +08:00
zhangshixiang
ad5168c3eb Merge branch 'dev' into device_visualization 2025-05-07 03:06:41 +08:00
wznln
2dde5b6aae fix: aspirate 2025-05-07 03:02:35 +08:00
wznln
45a73e2f6d fix: aspirate 2025-05-07 02:51:56 +08:00
wznln
fbff27a52d fix: aspirate 2025-05-07 02:46:33 +08:00
zhangshixiang
1b190ee62f Merge remote-tracking branch 'upstream/dev' into device_visualization 2025-05-07 02:38:32 +08:00
wznln
83abf877b5 fix: multi channel 2025-05-07 02:36:53 +08:00
q434343
f3637d4043 Device visualization (#22)
* add 3d visualization

* 完成在main中启动设备可视化

完成在main中启动设备可视化,并输出物料ID:mesh的对应关系resource_model

添加物料模型管理类,遍历物料与resource_model,完成TF数据收集

* 完成TF发布

* 修改模型方向,在yaml中添加变换属性

* 添加物料tf变化时,发送topic到前端

另外修改了物料初始化的方法,防止在tf还未发布时提前建立物料模型与发布话题

* 添加关节发布节点与物料可视化节点进入unilab

* 使用json启动plr与3D模型仿真

* 完成启动OT并联动rviz

* add 3d visualization

* 完成在main中启动设备可视化

完成在main中启动设备可视化,并输出物料ID:mesh的对应关系resource_model

添加物料模型管理类,遍历物料与resource_model,完成TF数据收集

* 完成TF发布

* 修改模型方向,在yaml中添加变换属性

* 添加物料tf变化时,发送topic到前端

另外修改了物料初始化的方法,防止在tf还未发布时提前建立物料模型与发布话题

* 添加关节发布节点与物料可视化节点进入unilab

* 使用json启动plr与3D模型仿真

* 完成启动OT并联动rviz

* 修复rviz位置问题,

修复rviz位置问题,
在无tf变动时减缓发送频率
在backend中添加物料跟随方法

* fix: running logic

* fix: running logic

* fix: missing ot

* 在main中直接初始化republisher和物料的mesh节点

* 将joint_republisher和resource_mesh_manager添加进 main_slave_run.py中

* 编写mesh添加action

* add action

* fix

* fix: browser on rviz

* fix: cloud bridge error fallback to local

* fix: salve auto run rviz

* 初始化两个plate

---------

Co-authored-by: zhangshixiang <@zhangshixiang>
Co-authored-by: wznln <18435084+Xuwznln@users.noreply.github.com>
2025-05-07 02:12:29 +08:00
zhangshixiang
c12c2a876c 初始化两个plate 2025-05-07 02:06:01 +08:00
wznln
6cdd8c18e8 fix: salve auto run rviz 2025-05-07 00:45:37 +08:00
wznln
3d60cb36b8 fix: cloud bridge error fallback to local 2025-05-07 00:31:05 +08:00
wznln
5df304bc64 fix: browser on rviz 2025-05-07 00:11:29 +08:00
wznln
6d5ada06de Merge remote-tracking branch 'q434343/device_visualization' into device_visualization 2025-05-07 00:06:56 +08:00
zhangshixiang
aad23596b6 fix 2025-05-07 00:01:59 +08:00
wznln
b43f2321cd Merge remote-tracking branch 'origin/dev' into device_visualization 2025-05-06 23:58:56 +08:00
zhangshixiang
8617b1284f Merge remote-tracking branch 'upstream/dev' into device_visualization 2025-05-06 23:39:22 +08:00
wznln
cd1e9a9f7d feat: vis 2d for plr 2025-05-06 23:32:54 +08:00
zhangshixiang
3d607db49a add action 2025-05-06 23:27:42 +08:00
wznln
3dc62e3e99 feat: append resource 2025-05-06 23:13:29 +08:00
zhangshixiang
d199fda9a5 编写mesh添加action 2025-05-06 22:01:23 +08:00
wznln
ed2858a610 feat: add outer resource 2025-05-06 21:57:34 +08:00
wznln
de28c50d8b feat: fix boolean null in registry action data 2025-05-06 20:33:32 +08:00
wznln
e373220ce3 feat: add more necessary params 2025-05-06 20:18:49 +08:00
wznln
b6a3f17e9b feat: resource tracker support dict 2025-05-06 17:28:06 +08:00
wznln
49a9f05c51 fix: host node should not be re_discovered 2025-05-06 16:26:55 +08:00
wznln
32e370a562 add: bind_parent_ids to resource create action
fix: message convert string
2025-05-06 16:24:19 +08:00
wznln
852d10d751 pass device config to device class 2025-05-06 14:44:42 +08:00
wznln
b47f67d129 host node add_resource_from_outer
fix cmake list
2025-05-06 13:28:24 +08:00
wznln
194985222e update actions 2025-05-06 12:55:24 +08:00
wznln
948f590b47 update actions 2025-05-06 12:30:48 +08:00
wznln
164417e1cf Merge remote-tracking branch 'origin/main' into dev 2025-05-06 11:15:47 +08:00
wznln
1a107cfd18 fix type hint 2025-05-06 11:15:36 +08:00
wznln
65d0cbe28a Merge remote-tracking branch 'origin/main' into dev
# Conflicts:
#	unilabos/app/main.py
#	unilabos/ros/main_slave_run.py
2025-05-06 11:04:34 +08:00
wznln
3c98c77cab fix startup
add ResourceCreateFromOuter.action
2025-05-06 10:39:54 +08:00
wznln
d6b8104824 fix: missing paho-mqtt package
bump version to 0.9.0
2025-05-06 09:43:29 +08:00
wznln
1223e05dcc fix: missing hostname in devices_names
fix: upload_file for model file
2025-05-06 09:40:33 +08:00
q434343
a52133b7d0 Device visualization (#14)
* add 3d visualization

* 完成在main中启动设备可视化

完成在main中启动设备可视化,并输出物料ID:mesh的对应关系resource_model

添加物料模型管理类,遍历物料与resource_model,完成TF数据收集

* 完成TF发布

* 修改模型方向,在yaml中添加变换属性

* 添加物料tf变化时,发送topic到前端

另外修改了物料初始化的方法,防止在tf还未发布时提前建立物料模型与发布话题

* 添加关节发布节点与物料可视化节点进入unilab

* 使用json启动plr与3D模型仿真

* 完成启动OT并联动rviz

* add 3d visualization

* 完成在main中启动设备可视化

完成在main中启动设备可视化,并输出物料ID:mesh的对应关系resource_model

添加物料模型管理类,遍历物料与resource_model,完成TF数据收集

* 完成TF发布

* 修改模型方向,在yaml中添加变换属性

* 添加物料tf变化时,发送topic到前端

另外修改了物料初始化的方法,防止在tf还未发布时提前建立物料模型与发布话题

* 添加关节发布节点与物料可视化节点进入unilab

* 使用json启动plr与3D模型仿真

* 完成启动OT并联动rviz

* 修复rviz位置问题,

修复rviz位置问题,
在无tf变动时减缓发送频率
在backend中添加物料跟随方法

* fix: running logic

* fix: running logic

* fix: missing ot

* 在main中直接初始化republisher和物料的mesh节点

* 将joint_republisher和resource_mesh_manager添加进 main_slave_run.py中

---------

Co-authored-by: zhangshixiang <@zhangshixiang>
Co-authored-by: wznln <18435084+Xuwznln@users.noreply.github.com>
2025-05-06 09:37:57 +08:00
zhangshixiang
80380d1f4b 将joint_republisher和resource_mesh_manager添加进 main_slave_run.py中 2025-05-02 23:45:43 +08:00
zhangshixiang
5668310401 在main中直接初始化republisher和物料的mesh节点 2025-05-02 07:40:28 +08:00
wznln
78239ab1a3 fix: missing ot 2025-05-01 17:53:47 +08:00
wznln
fa5db06347 fix: running logic 2025-05-01 17:46:53 +08:00
wznln
2b428080e7 fix: running logic 2025-05-01 17:42:46 +08:00
wznln
9eb271f64e Merge remote-tracking branch 'origin/dev' into fork/q434343/device_visualization 2025-05-01 16:33:51 +08:00
wznln
752442cb37 feat: 支持env设置config 2025-05-01 14:52:50 +08:00
wznln
9d2bfec1dd feat: 多ProtocolNode 允许子设备ID相同
feat: 上报发现的ActionClient
feat: Host重启动,通过discover机制要求slaveNode重新注册,实现信息及时上报
2025-05-01 14:36:15 +08:00
zhangshixiang
5212d2d8eb 修复rviz位置问题,
修复rviz位置问题,
在无tf变动时减缓发送频率
在backend中添加物料跟随方法
2025-04-30 22:18:29 +08:00
zhangshixiang
44c191fe90 Merge branch 'device_visualization' of https://github.com/q434343/Uni-Lab-OS into device_visualization 2025-04-30 16:47:31 +08:00
wznln
7a51b2adc1 fix: slave mode spin not working 2025-04-30 15:48:33 +08:00
wznln
2d034f728a fix: slave mode spin not working 2025-04-30 15:21:29 +08:00
wznln
8ab108c489 fix: HPLC additions with online service 2025-04-30 11:53:10 +08:00
wznln
4dbb6649b4 fix: device.class possible null 2025-04-29 22:48:25 +08:00
zhangshixiang
dc197bffe8 完成启动OT并联动rviz 2025-04-29 22:15:39 +08:00
zhangshixiang
49bb11b2a3 使用json启动plr与3D模型仿真 2025-04-29 22:15:39 +08:00
zhangshixiang
d407423aaa 添加关节发布节点与物料可视化节点进入unilab 2025-04-29 22:15:39 +08:00
zhangshixiang
111c3f42e4 添加物料tf变化时,发送topic到前端
另外修改了物料初始化的方法,防止在tf还未发布时提前建立物料模型与发布话题
2025-04-29 22:15:02 +08:00
zhangshixiang
2990e70c25 修改模型方向,在yaml中添加变换属性 2025-04-29 22:15:02 +08:00
zhangshixiang
0d24606d46 完成TF发布 2025-04-29 22:15:02 +08:00
zhangshixiang
2baa232b86 完成在main中启动设备可视化
完成在main中启动设备可视化,并输出物料ID:mesh的对应关系resource_model

添加物料模型管理类,遍历物料与resource_model,完成TF数据收集
2025-04-29 22:15:02 +08:00
zhangshixiang
b7a16cdfc8 add 3d visualization 2025-04-29 22:14:18 +08:00
zhangshixiang
8921bcd9fb 完成启动OT并联动rviz 2025-04-29 22:13:34 +08:00
wznln
5038219fe6 fix: devices/ 2025-04-29 16:08:45 +08:00
wznln
0d2f1be37a fix: hplc status typo 2025-04-29 14:56:37 +08:00
wznln
6b649bfdec feat: add hplc registry 2025-04-29 14:52:02 +08:00
wznln
ba6a43c594 feat: add hplc registry 2025-04-29 14:50:33 +08:00
wznln
ea6f25d1ce feat: show machine name
fix: host node registry not uploaded
2025-04-29 14:39:14 +08:00
wznln
e5749a8058 close #12
feat: slave node registry
2025-04-29 13:42:30 +08:00
wznln
09fc17429e feat: node_info_update srv
fix: OTDeck cant create
2025-04-29 11:29:25 +08:00
zhangshixiang
bdf97be256 使用json启动plr与3D模型仿真 2025-04-29 10:08:34 +08:00
wznln
dbd1557095 Merge branch 'refs/heads/main' into dev 2025-04-29 10:04:56 +08:00
zhangshixiang
ff8b75bf1f 添加关节发布节点与物料可视化节点进入unilab 2025-04-27 19:07:39 +08:00
zhangshixiang
bed9720de3 添加物料tf变化时,发送topic到前端
另外修改了物料初始化的方法,防止在tf还未发布时提前建立物料模型与发布话题
2025-04-25 19:20:18 +08:00
zhangshixiang
1e01eae896 修改模型方向,在yaml中添加变换属性 2025-04-25 10:47:46 +08:00
zhangshixiang
6155ec2798 完成TF发布 2025-04-24 01:51:26 +08:00
zhangshixiang
279c5ed519 完成在main中启动设备可视化
完成在main中启动设备可视化,并输出物料ID:mesh的对应关系resource_model

添加物料模型管理类,遍历物料与resource_model,完成TF数据收集
2025-04-24 00:59:43 +08:00
zhangshixiang
5b4f580a6f add 3d visualization 2025-04-23 11:01:58 +08:00
wznln
e971424220 add: registry description 2025-04-20 18:21:35 +08:00
wznln
82881f5882 feat: 支持local_config启动
add: 增加对crt path的说明,为传入config.py的相对路径
move: web component
2025-04-20 18:11:35 +08:00
wznln
bb1cac0dbd Merge remote-tracking branch 'origin/main' into dev 2025-04-20 18:10:42 +08:00
Harvey Que
275e3a36f7 Update README and MQTTClient for installation instructions and code improvements 2025-04-18 15:32:49 +08:00
12 changed files with 182 additions and 124 deletions

View File

@@ -18,7 +18,6 @@ if unilabos_dir not in sys.path:
from unilabos.config.config import load_config, BasicConfig, _update_config_from_env
from unilabos.utils.banner_print import print_status, print_unilab_banner
from unilabos.device_mesh.resource_visalization import ResourceVisualization
def parse_args():
@@ -188,6 +187,7 @@ def main():
if args_dict["visual"] != "disable":
enable_rviz = args_dict["visual"] == "rviz"
if devices_and_resources is not None:
from unilabos.device_mesh.resource_visalization import ResourceVisualization # 此处开启后logger会变更为INFO有需要请调整
resource_visualization = ResourceVisualization(devices_and_resources, args_dict["resources_config"] ,enable_rviz=enable_rviz)
args_dict["resources_mesh_config"] = resource_visualization.resource_model
start_backend(**args_dict)

View File

@@ -26,6 +26,7 @@ class MQTTClient:
def __init__(self):
self.mqtt_disable = not MQConfig.lab_id
self.client_id = f"{MQConfig.group_id}@@@{MQConfig.lab_id}{uuid.uuid4()}"
logger.info("[MQTT] Client_id: " + self.client_id)
self.client = mqtt.Client(CallbackAPIVersion.VERSION2, client_id=self.client_id, protocol=mqtt.MQTTv5)
self._setup_callbacks()

View File

@@ -14,7 +14,7 @@ from pylabrobot.resources import (
Well
)
class DPLiquidHandler(LiquidHandler):
class LiquidHandlerAbstract(LiquidHandler):
"""Extended LiquidHandler with additional operations."""
# ---------------------------------------------------------------

View File

@@ -1,11 +1,96 @@
liquid_handler:
description: Liquid handler device controlled by pylabrobot
class:
module: pylabrobot.liquid_handling:LiquidHandler
module: unilabos.devices.liquid_handling.liquid_handler_abstract:LiquidHandlerAbstract
type: python
status_types:
name: String
action_value_mappings:
remove:
type: LiquidHandlerRemove
goal:
vols: vols
sources: sources
waste_liquid: waste_liquid
use_channels: use_channels
flow_rates: flow_rates
offsets: offsets
liquid_height: liquid_height
blow_out_air_volume: blow_out_air_volume
spread: spread
delays: delays
is_96_well: is_96_well
top: top
none_keys: none_keys
feedback: { }
result: { }
add_liquid:
type: LiquidHandlerAdd
goal:
asp_vols: asp_vols
dis_vols: dis_vols
reagent_sources: reagent_sources
targets: targets
use_channels: use_channels
flow_rates: flow_rates
offsets: offsets
liquid_height: liquid_height
blow_out_air_volume: blow_out_air_volume
spread: spread
is_96_well: is_96_well
mix_time: mix_time
mix_vol: mix_vol
mix_rate: mix_rate
mix_liquid_height: mix_liquid_height
none_keys: none_keys
feedback: { }
result: { }
transfer_liquid:
type: LiquidHandlerTransfer
goal:
asp_vols: asp_vols
dis_vols: dis_vols
sources: sources
targets: targets
tip_racks: tip_racks
use_channels: use_channels
asp_flow_rates: asp_flow_rates
dis_flow_rates: dis_flow_rates
offsets: offsets
touch_tip: touch_tip
liquid_height: liquid_height
blow_out_air_volume: blow_out_air_volume
spread: spread
is_96_well: is_96_well
mix_stage: mix_stage
mix_times: mix_times
mix_vol: mix_vol
mix_rate: mix_rate
mix_liquid_height: mix_liquid_height
delays: delays
none_keys: none_keys
feedback: { }
result: { }
mix:
type: DPLiquidHandlerMix
goal:
targets: targets
mix_time: mix_time
mix_vol: mix_vol
height_to_bottom: height_to_bottom
offsets: offsets
mix_rate: mix_rate
none_keys: none_keys
feedback: { }
result: { }
move_to:
type: LiquidHandlerMoveTo
goal:
well: well
dis_to_top: dis_to_top
channel: channel
feedback: { }
result: { }
aspirate:
type: LiquidHandlerAspirate
goal:
@@ -178,110 +263,7 @@ dp_liquid_handler:
status_types:
status: String
action_value_mappings:
remove_liquid:
type: DPLiquidHandlerRemoveLiquid
goal:
vols: vols
sources: sources
waste_liquid: waste_liquid
use_channels: use_channels
flow_rates: flow_rates
offsets: offsets
liquid_height: liquid_height
blow_out_air_volume: blow_out_air_volume
spread: spread
delays: delays
is_96_well: is_96_well
top: top
none_keys: none_keys
feedback: {}
result: {}
add_liquid:
type: DPLiquidHandlerAddLiquid
goal:
asp_vols: asp_vols
dis_vols: dis_vols
reagent_sources: reagent_sources
targets: targets
use_channels: use_channels
flow_rates: flow_rates
offsets: offsets
liquid_height: liquid_height
blow_out_air_volume: blow_out_air_volume
spread: spread
is_96_well: is_96_well
mix_time: mix_time
mix_vol: mix_vol
mix_rate: mix_rate
mix_liquid_height: mix_liquid_height
none_keys: none_keys
feedback: {}
result: {}
transfer_liquid:
type: DPLiquidHandlerTransferLiquid
goal:
asp_vols: asp_vols
dis_vols: dis_vols
sources: sources
targets: targets
tip_racks: tip_racks
use_channels: use_channels
asp_flow_rates: asp_flow_rates
dis_flow_rates: dis_flow_rates
offsets: offsets
touch_tip: touch_tip
liquid_height: liquid_height
blow_out_air_volume: blow_out_air_volume
spread: spread
is_96_well: is_96_well
mix_stage: mix_stage
mix_times: mix_times
mix_vol: mix_vol
mix_rate: mix_rate
mix_liquid_height: mix_liquid_height
delays: delays
none_keys: none_keys
feedback: {}
result: {}
custom_delay:
type: DPLiquidHandlerCustomDelay
goal:
seconds: seconds
msg: msg
feedback: {}
result: {}
touch_tip:
type: DPLiquidHandlerTouchTip
goal:
targets: targets
feedback: {}
result: {}
mix:
type: DPLiquidHandlerMix
goal:
targets: targets
mix_time: mix_time
mix_vol: mix_vol
height_to_bottom: height_to_bottom
offsets: offsets
mix_rate: mix_rate
none_keys: none_keys
feedback: {}
result: {}
set_tiprack:
type: DPLiquidHandlerSetTiprack
goal:
tip_racks: tip_racks
feedback: {}
result: {}
move_to:
type: DPLiquidHandlerMoveTo
goal:
well: well
dis_to_top: dis_to_top
channel: channel
feedback: {}
result: {}
schema:
type: object
properties:

View File

@@ -43,14 +43,10 @@ set(action_files
"action/LiquidHandlerStamp.action"
"action/LiquidHandlerTransfer.action"
"action/DPLiquidHandlerAddLiquid.action"
"action/DPLiquidHandlerCustomDelay.action"
"action/DPLiquidHandlerMix.action"
"action/DPLiquidHandlerMoveTo.action"
"action/DPLiquidHandlerRemoveLiquid.action"
"action/DPLiquidHandlerSetTiprack.action"
"action/DPLiquidHandlerTouchTip.action"
"action/DPLiquidHandlerTransferLiquid.action"
"action/LiquidHandlerAdd.action"
"action/LiquidHandlerMix.action"
"action/LiquidHandlerMoveTo.action"
"action/LiquidHandlerRemove.action"
"action/EmptyIn.action"
"action/FloatSingleInput.action"
@@ -61,7 +57,7 @@ set(action_files
"action/ResourceCreateFromOuter.action"
"action/SolidDispenseAddPowderTube.action"
"action/PumpTransfer.action"
"action/Clean.action"
"action/Separate.action"

View File

@@ -0,0 +1,20 @@
float64[] asp_vols
float64[] dis_vols
Resource[] reagent_sources
Resource[] targets
int32[] use_channels
float64[] flow_rates
geometry_msgs/Point[] offsets
float64[] liquid_height
float64[] blow_out_air_volume
string spread
bool is_96_well
int32 mix_time
int32 mix_vol
int32 mix_rate
float64 mix_liquid_height
string[] none_keys
---
bool success
---
# 反馈

View File

@@ -0,0 +1,11 @@
Resource[] targets
int32 mix_time
int32 mix_vol
float64 height_to_bottom
geometry_msgs/Point[] offsets
float64 mix_rate
string[] none_keys
---
bool success
---
# 反馈

View File

@@ -0,0 +1,7 @@
Resource well
float64 dis_to_top
int32 channel
---
bool success
---
# 反馈

View File

@@ -0,0 +1,17 @@
float64[] vols
Resource[] sources
Resource waste_liquid
int32[] use_channels
float64[] flow_rates
geometry_msgs/Point[] offsets
float64[] liquid_height
float64[] blow_out_air_volume
string spread
int32[] delays
bool is_96_well
float64[] top
string[] none_keys
---
bool success
---
# 反馈

View File

@@ -1,11 +1,25 @@
# Bio
Resource source
float64[] asp_vols
float64[] dis_vols
Resource[] sources
Resource[] targets
float64 source_vol
float64[] ratios
float64[] target_vols
float64 aspiration_flow_rate
float64[] dispense_flow_rates
Resource[] tip_racks
int32[] use_channels
float64[] asp_flow_rates
float64[] dis_flow_rates
geometry_msgs/Point[] offsets
bool touch_tip
float64[] liquid_height
float64[] blow_out_air_volume
string spread
bool is_96_well
string mix_stage
int32[] mix_times
int32 mix_vol
int32 mix_rate
float64 mix_liquid_height
int32[] delays
string[] none_keys
---
bool success
---
---
# 反馈

View File

@@ -0,0 +1,10 @@
string id
string class
string parent
geometry_msgs/Point bind_locations
int32[] liquid_input_slot
string[] liquid_type
float32[] liquid_volume
---
bool success
---