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>
This commit is contained in:
q434343
2025-05-06 09:37:57 +08:00
committed by GitHub
parent 752442cb37
commit a52133b7d0
53 changed files with 2654 additions and 25 deletions

View File

@@ -0,0 +1,18 @@
{
"first_joint": {
"child":"first_link",
"axis" : "-y"
},
"second_joint": {
"child":"second_link",
"axis" : "-x"
},
"third_joint": {
"child":"third_link",
"axis" : "-z"
},
"fourth_joint": {
"child":"fourth_link",
"axis" : "-z"
}
}

View File

@@ -0,0 +1,210 @@
<?xml version="1.0" ?>
<robot xmlns:xacro="http://ros.org/wiki/xacro">
<xacro:macro name="opentrons_liquid_handler"
params="parent_link:='' station_name:='' device_name:='' x:=0 y:=0 z:=0 r:=0 mesh_path:=''">
<joint name="${station_name}${device_name}base_link_joint" type="fixed">
<origin xyz="${x} ${y} ${z}" rpy="0 0 ${r}" />
<parent link="${parent_link}"/>
<child link="${station_name}${device_name}device_link"/>
<axis xyz="0 0 0"/>
</joint>
<link name="${station_name}${device_name}device_link"/>
<joint name="${station_name}${device_name}device_link_joint" type="fixed">
<origin xyz="-0.11565 0.496 0" rpy="0 0 0" />
<parent link="${station_name}${device_name}device_link"/>
<child link="${station_name}${device_name}main_link"/>
<axis xyz="0 0 0"/>
</joint>
<link name='${station_name}${device_name}main_link'>
<visual>
<geometry>
<mesh filename="file://${mesh_path}/devices/opentrons_liquid_handler/meshes/ot2-0.stl"/>
</geometry>
<material name="">
<color rgba="0.756862745098039 0.768627450980392 0.752941176470588 1"/>
</material>
</visual>
<collision>
<origin rpy="0 0 0" xyz="0 0 0"/>
<geometry>
<mesh filename="file://${mesh_path}/devices/opentrons_liquid_handler/meshes/ot2-0.stl"/>
</geometry>
</collision>
</link>
<link name='${station_name}${device_name}first_link'>
<visual>
<geometry>
<mesh filename="file://${mesh_path}/devices/opentrons_liquid_handler/meshes/ot2-1.stl"/>
</geometry>
<material name="">
<color rgba="0.756862745098039 0.768627450980392 0.752941176470588 1"/>
</material>
</visual>
<collision>
<origin rpy="0 0 0" xyz="0 0 0"/>
<geometry>
<mesh filename="file://${mesh_path}/devices/opentrons_liquid_handler/meshes/ot2-1.stl"/>
</geometry>
</collision>
</link>
<link name='${station_name}${device_name}second_link'>
<visual>
<geometry>
<mesh filename="file://${mesh_path}/devices/opentrons_liquid_handler/meshes/ot2-2.stl"/>
</geometry>
<material name="">
<color rgba="0.756862745098039 0.768627450980392 0.752941176470588 1"/>
</material>
</visual>
<collision>
<origin rpy="0 0 0" xyz="0 0 0"/>
<geometry>
<mesh filename="file://${mesh_path}/devices/opentrons_liquid_handler/meshes/ot2-2.stl"/>
</geometry>
</collision>
</link>
<link name='${station_name}${device_name}third_link'>
<visual>
<geometry>
<mesh filename="file://${mesh_path}/devices/opentrons_liquid_handler/meshes/ot2-3a.stl"/>
</geometry>
<material name="">
<color rgba="0.756862745098039 0.768627450980392 0.752941176470588 1"/>
</material>
</visual>
<collision>
<origin rpy="0 0 0" xyz="0 0 0"/>
<geometry>
<mesh filename="file://${mesh_path}/devices/opentrons_liquid_handler/meshes/ot2-3a.stl"/>
</geometry>
</collision>
</link>
<link name='${station_name}${device_name}fourth_link'>
<visual>
<geometry>
<mesh filename="file://${mesh_path}/devices/opentrons_liquid_handler/meshes/ot2-3b.stl"/>
</geometry>
<material name="">
<color rgba="0.756862745098039 0.768627450980392 0.752941176470588 1"/>
</material>
</visual>
<collision>
<origin rpy="0 0 0" xyz="0 0 0"/>
<geometry>
<mesh filename="file://${mesh_path}/devices/opentrons_liquid_handler/meshes/ot2-3b.stl"/>
</geometry>
</collision>
</link>
<joint name='${station_name}${device_name}first_joint' type='prismatic'>
<parent link="${station_name}${device_name}main_link"/>
<child link="${station_name}${device_name}first_link"/>
<origin rpy="0 0 0" xyz="0 0 0"/>
<axis xyz="0 -1 0"/>
<limit effort="-1" lower="-0.2" upper="0.13" velocity="-1"/>
<dynamics damping="0.1"/>
</joint>
<joint name='${station_name}${device_name}second_joint' type='prismatic'>
<parent link="${station_name}${device_name}first_link"/>
<child link="${station_name}${device_name}second_link"/>
<origin rpy="0 0 0" xyz="0 0 0"/>
<axis xyz="-1 0 0"/>
<limit effort="-1" lower="-0.15" upper="0.15" velocity="-1"/>
<dynamics damping="0.1"/>
</joint>
<joint name='${station_name}${device_name}third_joint' type='prismatic'>
<parent link="${station_name}${device_name}second_link"/>
<child link="${station_name}${device_name}third_link"/>
<origin rpy="0 0 0" xyz="0 0 0"/>
<axis xyz="0 0 -1"/>
<limit effort="-1" lower="0" upper="0.22" velocity="-1"/>
<dynamics damping="0.1"/>
</joint>
<joint name='${station_name}${device_name}fourth_joint' type='prismatic'>
<parent link="${station_name}${device_name}second_link"/>
<child link="${station_name}${device_name}fourth_link"/>
<origin rpy="0 0 0" xyz="0 0 0"/>
<axis xyz="0 0 -1"/>
<limit effort="-1" lower="0" upper="0.22" velocity="-1"/>
<dynamics damping="0.1"/>
</joint>
<link name='${station_name}${device_name}socketTypeGenericSbsFootprint'/>
<joint name='${station_name}${device_name}socketTypeGenericSbsFootprint_10_60_1' type='fixed'>
<parent link="${station_name}${device_name}main_link"/>
<child link="${station_name}${device_name}socketTypeGenericSbsFootprint"/>
<origin rpy="0 0 -1.57" xyz="0.1795 -0.1825 0.07"/>
</joint>
<joint name='${station_name}${device_name}socketTypeGenericSbsFootprint_7_60_1' type='fixed'>
<parent link="${station_name}${device_name}main_link"/>
<child link="${station_name}${device_name}socketTypeGenericSbsFootprint"/>
<origin rpy="0 0 -1.57" xyz="0.1795 -0.273 0.07"/>
</joint>
<joint name='${station_name}${device_name}socketTypeGenericSbsFootprint_4_60_1' type='fixed'>
<parent link="${station_name}${device_name}main_link"/>
<child link="${station_name}${device_name}socketTypeGenericSbsFootprint"/>
<origin rpy="0 0 -1.57" xyz="0.1795 -0.3635 0.07"/>
</joint>
<joint name='${station_name}${device_name}socketTypeGenericSbsFootprint_1_60_1' type='fixed'>
<parent link="${station_name}${device_name}main_link"/>
<child link="${station_name}${device_name}socketTypeGenericSbsFootprint"/>
<origin rpy="0 0 -1.57" xyz="0.1795 -0.454 0.07"/>
</joint>
<joint name='${station_name}${device_name}socketTypeGenericSbsFootprint_11_60_1' type='fixed'>
<parent link="${station_name}${device_name}main_link"/>
<child link="${station_name}${device_name}socketTypeGenericSbsFootprint"/>
<origin rpy="0 0 -1.57" xyz="0.312 -0.1825 0.07"/>
</joint>
<joint name='${station_name}${device_name}socketTypeGenericSbsFootprint_8_60_1' type='fixed'>
<parent link="${station_name}${device_name}main_link"/>
<child link="${station_name}${device_name}socketTypeGenericSbsFootprint"/>
<origin rpy="0 0 -1.57" xyz="0.312 -0.273 0.07"/>
</joint>
<joint name='${station_name}${device_name}socketTypeGenericSbsFootprint_5_60_1' type='fixed'>
<parent link="${station_name}${device_name}main_link"/>
<child link="${station_name}${device_name}socketTypeGenericSbsFootprint"/>
<origin rpy="0 0 -1.57" xyz="0.312 -0.3635 0.07"/>
</joint>
<joint name='${station_name}${device_name}socketTypeGenericSbsFootprint_2_60_1' type='fixed'>
<parent link="${station_name}${device_name}main_link"/>
<child link="${station_name}${device_name}socketTypeGenericSbsFootprint"/>
<origin rpy="0 0 -1.57" xyz="0.312 -0.454 0.07"/>
</joint>
<joint name='${station_name}${device_name}socketTypeGenericSbsFootprint_9_60_1' type='fixed'>
<parent link="${station_name}${device_name}main_link"/>
<child link="${station_name}${device_name}socketTypeGenericSbsFootprint"/>
<origin rpy="0 0 -1.57" xyz="0.4445 -0.273 0.07"/>
</joint>
<joint name='${station_name}${device_name}socketTypeGenericSbsFootprint_6_60_1' type='fixed'>
<parent link="${station_name}${device_name}main_link"/>
<child link="${station_name}${device_name}socketTypeGenericSbsFootprint"/>
<origin rpy="0 0 -1.57" xyz="0.4445 -0.3635 0.07"/>
</joint>
<joint name='${station_name}${device_name}socketTypeGenericSbsFootprint_3_60_1' type='fixed'>
<parent link="${station_name}${device_name}main_link"/>
<child link="${station_name}${device_name}socketTypeGenericSbsFootprint"/>
<origin rpy="0 0 -1.57" xyz="0.4445 -0.454 0.07"/>
</joint>
<link name='${station_name}${device_name}socketTypeHEPAModule'/>
<joint name='${station_name}${device_name}socketTypeHEPAModule' type='fixed'>
<parent link="${station_name}${device_name}main_link"/>
<child link="${station_name}${device_name}socketTypeHEPAModule"/>
<origin rpy="0 0 0" xyz="0.31 -0.26 0.66"/>
</joint>
</xacro:macro>
</robot>

View File

@@ -0,0 +1,10 @@
{
"private_param":
{
},
"public_param":
{
}
}