mirror of
https://github.com/dptech-corp/Uni-Lab-OS.git
synced 2026-02-07 23:45:10 +00:00
Device visualization (#67)
* Update README and MQTTClient for installation instructions and code improvements * feat: 支持local_config启动 add: 增加对crt path的说明,为传入config.py的相对路径 move: web component * add: registry description * add 3d visualization * 完成在main中启动设备可视化 完成在main中启动设备可视化,并输出物料ID:mesh的对应关系resource_model 添加物料模型管理类,遍历物料与resource_model,完成TF数据收集 * 完成TF发布 * 修改模型方向,在yaml中添加变换属性 * 添加物料tf变化时,发送topic到前端 另外修改了物料初始化的方法,防止在tf还未发布时提前建立物料模型与发布话题 * 添加关节发布节点与物料可视化节点进入unilab * 使用json启动plr与3D模型仿真 * feat: node_info_update srv fix: OTDeck cant create * close #12 feat: slave node registry * feat: show machine name fix: host node registry not uploaded * feat: add hplc registry * feat: add hplc registry * fix: hplc status typo * fix: devices/ * 完成启动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 * fix: device.class possible null * fix: HPLC additions with online service * fix: slave mode spin not working * fix: slave mode spin not working * 修复rviz位置问题, 修复rviz位置问题, 在无tf变动时减缓发送频率 在backend中添加物料跟随方法 * feat: 多ProtocolNode 允许子设备ID相同 feat: 上报发现的ActionClient feat: Host重启动,通过discover机制要求slaveNode重新注册,实现信息及时上报 * feat: 支持env设置config * fix: running logic * fix: running logic * fix: missing ot * 在main中直接初始化republisher和物料的mesh节点 * 将joint_republisher和resource_mesh_manager添加进 main_slave_run.py中 * 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> * fix: missing hostname in devices_names fix: upload_file for model file * fix: missing paho-mqtt package bump version to 0.9.0 * fix startup add ResourceCreateFromOuter.action * fix type hint * update actions * update actions * host node add_resource_from_outer fix cmake list * pass device config to device class * add: bind_parent_ids to resource create action fix: message convert string * fix: host node should not be re_discovered * feat: resource tracker support dict * feat: add more necessary params * feat: fix boolean null in registry action data * feat: add outer resource * 编写mesh添加action * feat: append resource * add action * feat: vis 2d for plr * fix * fix: browser on rviz * fix: cloud bridge error fallback to local * fix: salve auto run rviz * 初始化两个plate * 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> * fix: multi channel * fix: aspirate * fix: aspirate * fix: aspirate * fix: aspirate * 提交 * fix: jobadd * fix: jobadd * fix: msg converter * tijiao * add resource creat easy action * identify debug msg * mq client id * 提取lh的joint发布 * unify liquid_handler definition * 修改物料跟随与物料添加逻辑 修改物料跟随与物料添加逻辑 将joint_publisher类移出lh的backends,但仍需要对lh的backends进行一些改写 * Revert "修改物料跟随与物料添加逻辑" This reverts commit498c997ad7. * Reapply "修改物料跟随与物料添加逻辑" This reverts commit3a60d2ae81. * Revert "Merge remote-tracking branch 'upstream/dev' into device_visualization" This reverts commitfa727220af, reversing changes made to498c997ad7. * 修改物料放下时的方法,如果选择 修改物料放下时的方法, 如果选择drop_trash,则删除物料显示 如果选择drop,则让其解除连接 * unilab添加moveit启动 1,整合所有moveit节点到一个move_group中,并整合所有的controller依次激活 2,添加pymoveit2的节点,使用json可直接启动 3,修改机械臂规划方式,添加约束,让冗余关节不会进行过多移动 * 修改物体attach时,多次赋值当前时间导致卡顿问题, * Revert "修改物体attach时,多次赋值当前时间导致卡顿问题," This reverts commit56d45b94f5. * Reapply "修改物体attach时,多次赋值当前时间导致卡顿问题," This reverts commit07d9db20c3. * 添加缺少物料:"plate_well_G12", * add * fix tip resource data * liquid states * change to debug level * Revert "change to debug level" This reverts commit5d9953c3e5. * Reapply "change to debug level" This reverts commit2487bb6ffc. * fix tip resource data * add full device * add moveit yaml * 修复moveit 增加post_init阶段,给予ros_node反向 * remove necessary node * fix moveit action client * remove necessary imports * Update moveit_interface.py * fix handler_key uppercase * json add liquids * fix setup * add * change to "sources" and "targets" for lh * bump version * remove parent's parent link * change arm's name * change name * fix ik error * 修改moveit_interface,并在mqtt上报时发送一个时间戳 * 添加机械臂和移液站 * 添加 * 添加硬件 * update * 添加 --------- Co-authored-by: Harvey Que <Q-Query@outlook.com> Co-authored-by: wznln <18435084+Xuwznln@users.noreply.github.com> Co-authored-by: zhangshixiang <@zhangshixiang> Co-authored-by: Junhan Chang <changjh@pku.edu.cn>
This commit is contained in:
@@ -0,0 +1,323 @@
|
||||
<?xml version="1.0"?>
|
||||
<robot xmlns:xacro="http://www.ros.org/wiki/xacro">
|
||||
|
||||
<xacro:macro name="cs_ros2_control" params="
|
||||
name
|
||||
use_fake_hardware:=false fake_sensor_commands:=false
|
||||
sim_gazebo:=false
|
||||
sim_ignition:=false
|
||||
headless_mode:=false
|
||||
initial_positions:=${dict(shoulder_pan_joint=0.0,shoulder_lift_joint=-1.57,elbow_joint=0.0,wrist_1_joint=-1.57,wrist_2_joint=0.0,wrist_3_joint=0.0)}
|
||||
use_tool_communication:=false
|
||||
script_filename
|
||||
output_recipe_filename
|
||||
input_recipe_filename
|
||||
tf_prefix
|
||||
robot_ip
|
||||
tool_voltage:=0
|
||||
tool_parity:=0 tool_baud_rate:=115200 tool_stop_bits:=1 tool_tcp_port:=54321
|
||||
reverse_port:=50001
|
||||
script_sender_port:=50002
|
||||
local_ip:=0.0.0.0
|
||||
script_command_port:=50004
|
||||
trajectory_port:=50003
|
||||
robot_receive_timeout:=0.2
|
||||
">
|
||||
|
||||
<ros2_control name="${name}" type="system">
|
||||
<hardware>
|
||||
<xacro:if value="${sim_gazebo}">
|
||||
<plugin>gazebo_ros2_control/GazeboSystem</plugin>
|
||||
</xacro:if>
|
||||
<xacro:if value="${sim_ignition}">
|
||||
<plugin>ign_ros2_control/IgnitionSystem</plugin>
|
||||
</xacro:if>
|
||||
<xacro:if value="${use_fake_hardware}">
|
||||
<plugin>mock_components/GenericSystem</plugin>
|
||||
<param name="fake_sensor_commands">${fake_sensor_commands}</param>
|
||||
<param name="state_following_offset">0.0</param>
|
||||
</xacro:if>
|
||||
<xacro:unless value="${use_fake_hardware or sim_gazebo or sim_ignition}">
|
||||
<plugin>ELITE_CS_ROBOT_ROS_DRIVER/EliteCSPositionHardwareInterface</plugin>
|
||||
<param name="robot_ip">${robot_ip}</param>
|
||||
<param name="script_filename">${script_filename}</param>
|
||||
<param name="output_recipe_filename">${output_recipe_filename}</param>
|
||||
<param name="input_recipe_filename">${input_recipe_filename}</param>
|
||||
<param name="headless_mode">${headless_mode}</param>
|
||||
<param name="reverse_port">${reverse_port}</param>
|
||||
<param name="script_sender_port">${script_sender_port}</param>
|
||||
<param name="local_ip">${local_ip}</param>
|
||||
<param name="script_command_port">${script_command_port}</param>
|
||||
<param name="trajectory_port">${trajectory_port}</param>
|
||||
<param name="tf_prefix">${tf_prefix}</param>
|
||||
<param name="servoj_gain">2000</param>
|
||||
<param name="servoj_lookahead_time">0.08</param>
|
||||
<param name="servoj_time">0.008</param>
|
||||
<param name="use_tool_communication">${use_tool_communication}</param>
|
||||
<param name="tool_voltage">${tool_voltage}</param>
|
||||
<param name="tool_parity">${tool_parity}</param>
|
||||
<param name="tool_baud_rate">${tool_baud_rate}</param>
|
||||
<param name="tool_stop_bits">${tool_stop_bits}</param>
|
||||
<param name="tool_tcp_port">${tool_tcp_port}</param>
|
||||
<param name="robot_receive_timeout">${robot_receive_timeout}</param>
|
||||
</xacro:unless>
|
||||
</hardware>
|
||||
<joint name="${tf_prefix}shoulder_pan_joint">
|
||||
<command_interface name="position"/>
|
||||
<command_interface name="velocity"/>
|
||||
<state_interface name="position">
|
||||
<!-- initial position for the FakeSystem and simulation -->
|
||||
<param name="initial_value">${initial_positions['shoulder_pan_joint']}</param>
|
||||
</state_interface>
|
||||
<state_interface name="velocity"/>
|
||||
<state_interface name="effort"/>
|
||||
</joint>
|
||||
<joint name="${tf_prefix}shoulder_lift_joint">
|
||||
<command_interface name="position"/>
|
||||
<command_interface name="velocity"/>
|
||||
<state_interface name="position">
|
||||
<!-- initial position for the FakeSystem and simulation -->
|
||||
<param name="initial_value">${initial_positions['shoulder_lift_joint']}</param>
|
||||
</state_interface>
|
||||
<state_interface name="velocity"/>
|
||||
<state_interface name="effort"/>
|
||||
</joint>
|
||||
<joint name="${tf_prefix}elbow_joint">
|
||||
<command_interface name="position"/>
|
||||
<command_interface name="velocity"/>
|
||||
<state_interface name="position">
|
||||
<!-- initial position for the FakeSystem and simulation -->
|
||||
<param name="initial_value">${initial_positions['elbow_joint']}</param>
|
||||
</state_interface>
|
||||
<state_interface name="velocity"/>
|
||||
<state_interface name="effort"/>
|
||||
</joint>
|
||||
<joint name="${tf_prefix}wrist_1_joint">
|
||||
<command_interface name="position"/>
|
||||
<command_interface name="velocity"/>
|
||||
<state_interface name="position">
|
||||
<!-- initial position for the FakeSystem and simulation -->
|
||||
<param name="initial_value">${initial_positions['wrist_1_joint']}</param>
|
||||
</state_interface>
|
||||
<state_interface name="velocity"/>
|
||||
<state_interface name="effort"/>
|
||||
</joint>
|
||||
<joint name="${tf_prefix}wrist_2_joint">
|
||||
<command_interface name="position"/>
|
||||
<command_interface name="velocity"/>
|
||||
<state_interface name="position">
|
||||
<!-- initial position for the FakeSystem and simulation -->
|
||||
<param name="initial_value">${initial_positions['wrist_2_joint']}</param>
|
||||
</state_interface>
|
||||
<state_interface name="velocity"/>
|
||||
<state_interface name="effort"/>
|
||||
</joint>
|
||||
<joint name="${tf_prefix}wrist_3_joint">
|
||||
<command_interface name="position"/>
|
||||
<command_interface name="velocity"/>
|
||||
<state_interface name="position">
|
||||
<!-- initial position for the FakeSystem and simulation -->
|
||||
<param name="initial_value">${initial_positions['wrist_3_joint']}</param>
|
||||
</state_interface>
|
||||
<state_interface name="velocity"/>
|
||||
<state_interface name="effort"/>
|
||||
</joint>
|
||||
|
||||
<xacro:unless value="${sim_gazebo or sim_ignition}">
|
||||
<sensor name="${tf_prefix}tcp_fts_sensor">
|
||||
<state_interface name="force.x"/>
|
||||
<state_interface name="force.y"/>
|
||||
<state_interface name="force.z"/>
|
||||
<state_interface name="torque.x"/>
|
||||
<state_interface name="torque.y"/>
|
||||
<state_interface name="torque.z"/>
|
||||
</sensor>
|
||||
|
||||
<!-- NOTE The following are joints used only for testing with fake hardware and will change in the future -->
|
||||
<gpio name="${tf_prefix}speed_scaling">
|
||||
<state_interface name="speed_scaling_factor"/>
|
||||
<param name="initial_speed_scaling_factor">1</param>
|
||||
<command_interface name="target_speed_fraction_cmd"/>
|
||||
<command_interface name="target_speed_fraction_async_success"/>
|
||||
</gpio>
|
||||
|
||||
<gpio name="${tf_prefix}gpio">
|
||||
<command_interface name="standard_digital_output_cmd_0"/>
|
||||
<command_interface name="standard_digital_output_cmd_1"/>
|
||||
<command_interface name="standard_digital_output_cmd_2"/>
|
||||
<command_interface name="standard_digital_output_cmd_3"/>
|
||||
<command_interface name="standard_digital_output_cmd_4"/>
|
||||
<command_interface name="standard_digital_output_cmd_5"/>
|
||||
<command_interface name="standard_digital_output_cmd_6"/>
|
||||
<command_interface name="standard_digital_output_cmd_7"/>
|
||||
<command_interface name="standard_digital_output_cmd_8"/>
|
||||
<command_interface name="standard_digital_output_cmd_9"/>
|
||||
<command_interface name="standard_digital_output_cmd_10"/>
|
||||
<command_interface name="standard_digital_output_cmd_11"/>
|
||||
<command_interface name="standard_digital_output_cmd_12"/>
|
||||
<command_interface name="standard_digital_output_cmd_13"/>
|
||||
<command_interface name="standard_digital_output_cmd_14"/>
|
||||
<command_interface name="standard_digital_output_cmd_15"/>
|
||||
|
||||
<command_interface name="configure_digital_output_cmd_0"/>
|
||||
<command_interface name="configure_digital_output_cmd_1"/>
|
||||
<command_interface name="configure_digital_output_cmd_2"/>
|
||||
<command_interface name="configure_digital_output_cmd_3"/>
|
||||
<command_interface name="configure_digital_output_cmd_4"/>
|
||||
<command_interface name="configure_digital_output_cmd_5"/>
|
||||
<command_interface name="configure_digital_output_cmd_6"/>
|
||||
<command_interface name="configure_digital_output_cmd_7"/>
|
||||
|
||||
<command_interface name="tool_digital_output_cmd_0"/>
|
||||
<command_interface name="tool_digital_output_cmd_1"/>
|
||||
<command_interface name="tool_digital_output_cmd_2"/>
|
||||
<command_interface name="tool_digital_output_cmd_3"/>
|
||||
|
||||
<command_interface name="standard_analog_output_type_cmd_0"/>
|
||||
<command_interface name="standard_analog_output_type_cmd_1"/>
|
||||
<command_interface name="standard_analog_output_cmd_0"/>
|
||||
<command_interface name="standard_analog_output_cmd_1"/>
|
||||
|
||||
<command_interface name="tool_voltage_cmd"/>
|
||||
|
||||
<command_interface name="io_async_success"/>
|
||||
|
||||
<state_interface name="standard_digital_output_0"/>
|
||||
<state_interface name="standard_digital_output_1"/>
|
||||
<state_interface name="standard_digital_output_2"/>
|
||||
<state_interface name="standard_digital_output_3"/>
|
||||
<state_interface name="standard_digital_output_4"/>
|
||||
<state_interface name="standard_digital_output_5"/>
|
||||
<state_interface name="standard_digital_output_6"/>
|
||||
<state_interface name="standard_digital_output_7"/>
|
||||
<state_interface name="standard_digital_output_8"/>
|
||||
<state_interface name="standard_digital_output_9"/>
|
||||
<state_interface name="standard_digital_output_10"/>
|
||||
<state_interface name="standard_digital_output_11"/>
|
||||
<state_interface name="standard_digital_output_12"/>
|
||||
<state_interface name="standard_digital_output_13"/>
|
||||
<state_interface name="standard_digital_output_14"/>
|
||||
<state_interface name="standard_digital_output_15"/>
|
||||
|
||||
<state_interface name="configure_digital_output_0"/>
|
||||
<state_interface name="configure_digital_output_1"/>
|
||||
<state_interface name="configure_digital_output_2"/>
|
||||
<state_interface name="configure_digital_output_3"/>
|
||||
<state_interface name="configure_digital_output_4"/>
|
||||
<state_interface name="configure_digital_output_5"/>
|
||||
<state_interface name="configure_digital_output_6"/>
|
||||
<state_interface name="configure_digital_output_7"/>
|
||||
|
||||
<state_interface name="tool_digital_output_0"/>
|
||||
<state_interface name="tool_digital_output_1"/>
|
||||
<state_interface name="tool_digital_output_2"/>
|
||||
<state_interface name="tool_digital_output_3"/>
|
||||
|
||||
<state_interface name="standard_digital_input_0"/>
|
||||
<state_interface name="standard_digital_input_1"/>
|
||||
<state_interface name="standard_digital_input_2"/>
|
||||
<state_interface name="standard_digital_input_3"/>
|
||||
<state_interface name="standard_digital_input_4"/>
|
||||
<state_interface name="standard_digital_input_5"/>
|
||||
<state_interface name="standard_digital_input_6"/>
|
||||
<state_interface name="standard_digital_input_7"/>
|
||||
<state_interface name="standard_digital_input_8"/>
|
||||
<state_interface name="standard_digital_input_9"/>
|
||||
<state_interface name="standard_digital_input_10"/>
|
||||
<state_interface name="standard_digital_input_11"/>
|
||||
<state_interface name="standard_digital_input_12"/>
|
||||
<state_interface name="standard_digital_input_13"/>
|
||||
<state_interface name="standard_digital_input_14"/>
|
||||
<state_interface name="standard_digital_input_15"/>
|
||||
|
||||
<state_interface name="configure_digital_input_0"/>
|
||||
<state_interface name="configure_digital_input_1"/>
|
||||
<state_interface name="configure_digital_input_2"/>
|
||||
<state_interface name="configure_digital_input_3"/>
|
||||
<state_interface name="configure_digital_input_4"/>
|
||||
<state_interface name="configure_digital_input_5"/>
|
||||
<state_interface name="configure_digital_input_6"/>
|
||||
<state_interface name="configure_digital_input_7"/>
|
||||
|
||||
<state_interface name="tool_digital_input_0"/>
|
||||
<state_interface name="tool_digital_input_1"/>
|
||||
<state_interface name="tool_digital_input_2"/>
|
||||
<state_interface name="tool_digital_input_3"/>
|
||||
|
||||
<state_interface name="standard_analog_output_type_0"/>
|
||||
<state_interface name="standard_analog_output_type_1"/>
|
||||
<state_interface name="standard_analog_output_0"/>
|
||||
<state_interface name="standard_analog_output_1"/>
|
||||
|
||||
<state_interface name="standard_analog_input_type_0"/>
|
||||
<state_interface name="standard_analog_input_type_1"/>
|
||||
<state_interface name="standard_analog_input_0"/>
|
||||
<state_interface name="standard_analog_input_1"/>
|
||||
|
||||
<state_interface name="tool_mode"/>
|
||||
<state_interface name="tool_output_voltage"/>
|
||||
<state_interface name="tool_output_current"/>
|
||||
<state_interface name="tool_temperature"/>
|
||||
|
||||
<state_interface name="tool_analog_input"/>
|
||||
<state_interface name="tool_analog_output"/>
|
||||
|
||||
<state_interface name="tool_analog_input_type"/>
|
||||
<state_interface name="tool_analog_output_type"/>
|
||||
|
||||
<state_interface name="robot_mode"/>
|
||||
<state_interface name="robot_status_bit_0"/>
|
||||
<state_interface name="robot_status_bit_1"/>
|
||||
<state_interface name="robot_status_bit_2"/>
|
||||
<state_interface name="robot_status_bit_3"/>
|
||||
|
||||
<state_interface name="safety_mode"/>
|
||||
<state_interface name="safety_status_bit_0"/>
|
||||
<state_interface name="safety_status_bit_1"/>
|
||||
<state_interface name="safety_status_bit_2"/>
|
||||
<state_interface name="safety_status_bit_3"/>
|
||||
<state_interface name="safety_status_bit_4"/>
|
||||
<state_interface name="safety_status_bit_5"/>
|
||||
<state_interface name="safety_status_bit_6"/>
|
||||
<state_interface name="safety_status_bit_7"/>
|
||||
<state_interface name="safety_status_bit_8"/>
|
||||
<state_interface name="safety_status_bit_9"/>
|
||||
<state_interface name="safety_status_bit_10"/>
|
||||
|
||||
<state_interface name="task_running"/>
|
||||
</gpio>
|
||||
|
||||
<gpio name="${tf_prefix}payload">
|
||||
<command_interface name="mass"/>
|
||||
<command_interface name="cog.x"/>
|
||||
<command_interface name="cog.y"/>
|
||||
<command_interface name="cog.z"/>
|
||||
<command_interface name="payload_async_success"/>
|
||||
</gpio>
|
||||
|
||||
<gpio name="${tf_prefix}resend_external_script">
|
||||
<command_interface name="resend_external_script_cmd"/>
|
||||
<command_interface name="resend_external_script_async_success"/>
|
||||
</gpio>
|
||||
|
||||
<gpio name="${tf_prefix}hand_back_control">
|
||||
<command_interface name="hand_back_control_cmd"/>
|
||||
<command_interface name="hand_back_control_async_success"/>
|
||||
</gpio>
|
||||
|
||||
<gpio name="${tf_prefix}zero_ftsensor">
|
||||
<command_interface name="zero_ftsensor_cmd"/>
|
||||
<command_interface name="zero_ftsensor_async_success"/>
|
||||
</gpio>
|
||||
|
||||
<gpio name="${tf_prefix}system_interface">
|
||||
<state_interface name="initialized"/>
|
||||
</gpio>
|
||||
|
||||
</xacro:unless>
|
||||
|
||||
</ros2_control>
|
||||
|
||||
</xacro:macro>
|
||||
|
||||
</robot>
|
||||
118
unilabos/device_mesh/devices/elite_robot/urdf/cs.urdf.xacro
Normal file
118
unilabos/device_mesh/devices/elite_robot/urdf/cs.urdf.xacro
Normal file
@@ -0,0 +1,118 @@
|
||||
<?xml version="1.0"?>
|
||||
<robot xmlns:xacro="http://wiki.ros.org/xacro" name="$(arg name)">
|
||||
<!-- robot name parameter -->
|
||||
<xacro:arg name="name" default="cs"/>
|
||||
<!-- import main macro -->
|
||||
<xacro:include filename="$(find eli_cs_robot_description)/urdf/cs_macro.xacro"/>
|
||||
|
||||
<!-- possible 'cs_type' values: cs63, cs66, cs612, cs616, cs620, cs625 -->
|
||||
<!-- the default value should raise an error in case this was called without defining the type -->
|
||||
<xacro:arg name="cs_type" default="cs63"/>
|
||||
|
||||
<!-- parameters -->
|
||||
<xacro:arg name="tf_prefix" default="" />
|
||||
<xacro:arg name="joint_limit_params" default="$(find eli_cs_robot_description)/config/$(arg cs_type)/joint_limits.yaml"/>
|
||||
<xacro:arg name="kinematics_params" default="$(find eli_cs_robot_description)/config/$(arg cs_type)/default_kinematics.yaml"/>
|
||||
<xacro:arg name="physical_params" default="$(find eli_cs_robot_description)/config/$(arg cs_type)/physical_parameters.yaml"/>
|
||||
<xacro:arg name="visual_params" default="$(find eli_cs_robot_description)/config/$(arg cs_type)/visual_parameters.yaml"/>
|
||||
<xacro:arg name="transmission_hw_interface" default=""/>
|
||||
<xacro:arg name="safety_limits" default="false"/>
|
||||
<xacro:arg name="safety_pos_margin" default="0.15"/>
|
||||
<xacro:arg name="safety_k_position" default="20"/>
|
||||
<!-- ros2_control related parameters -->
|
||||
<xacro:arg name="headless_mode" default="false" />
|
||||
<xacro:arg name="robot_ip" default="0.0.0.0" />
|
||||
<xacro:arg name="script_filename" default=""/>
|
||||
<xacro:arg name="output_recipe_filename" default=""/>
|
||||
<xacro:arg name="input_recipe_filename" default=""/>
|
||||
<xacro:arg name="local_ip" default="0.0.0.0"/>
|
||||
<xacro:arg name="script_command_port" default="50004"/>
|
||||
<xacro:arg name="reverse_port" default="50001"/>
|
||||
<xacro:arg name="script_sender_port" default="50002"/>
|
||||
<xacro:arg name="trajectory_port" default="50003"/>
|
||||
<!-- tool communication related parameters-->
|
||||
<xacro:arg name="use_tool_communication" default="false" />
|
||||
<xacro:arg name="tool_voltage" default="0" />
|
||||
<xacro:arg name="tool_parity" default="0" />
|
||||
<xacro:arg name="tool_baud_rate" default="115200" />
|
||||
<xacro:arg name="tool_stop_bits" default="1" />
|
||||
<xacro:arg name="tool_tcp_port" default="54321" />
|
||||
|
||||
<!-- Simulation parameters -->
|
||||
<xacro:arg name="use_fake_hardware" default="false" />
|
||||
<xacro:arg name="fake_sensor_commands" default="false" />
|
||||
<xacro:arg name="sim_gazebo" default="false" />
|
||||
<xacro:arg name="sim_ignition" default="false" />
|
||||
<xacro:arg name="simulation_controllers" default="" />
|
||||
|
||||
<!-- initial position for simulations (Fake Hardware, Gazebo, Ignition) -->
|
||||
<xacro:arg name="initial_positions_file" default="$(find eli_cs_robot_description)/config/initial_positions.yaml"/>
|
||||
|
||||
<!-- convert to property to use substitution in function -->
|
||||
<xacro:property name="initial_positions_file" default="$(arg initial_positions_file)"/>
|
||||
|
||||
<!-- create link fixed to the "world" -->
|
||||
<link name="world" />
|
||||
|
||||
<!-- arm -->
|
||||
<xacro:cs_robot
|
||||
name="$(arg name)"
|
||||
tf_prefix="$(arg tf_prefix)"
|
||||
parent="world"
|
||||
joint_limits_parameters_file="$(arg joint_limit_params)"
|
||||
kinematics_parameters_file="$(arg kinematics_params)"
|
||||
physical_parameters_file="$(arg physical_params)"
|
||||
visual_parameters_file="$(arg visual_params)"
|
||||
transmission_hw_interface="$(arg transmission_hw_interface)"
|
||||
safety_limits="$(arg safety_limits)"
|
||||
safety_pos_margin="$(arg safety_pos_margin)"
|
||||
safety_k_position="$(arg safety_k_position)"
|
||||
use_fake_hardware="$(arg use_fake_hardware)"
|
||||
fake_sensor_commands="$(arg fake_sensor_commands)"
|
||||
sim_gazebo="$(arg sim_gazebo)"
|
||||
sim_ignition="$(arg sim_ignition)"
|
||||
headless_mode="$(arg headless_mode)"
|
||||
initial_positions="${xacro.load_yaml(initial_positions_file)}"
|
||||
use_tool_communication="$(arg use_tool_communication)"
|
||||
tool_voltage="$(arg tool_voltage)"
|
||||
tool_parity="$(arg tool_parity)"
|
||||
tool_baud_rate="$(arg tool_baud_rate)"
|
||||
tool_stop_bits="$(arg tool_stop_bits)"
|
||||
tool_tcp_port="$(arg tool_tcp_port)"
|
||||
robot_ip="$(arg robot_ip)"
|
||||
script_filename="$(arg script_filename)"
|
||||
output_recipe_filename="$(arg output_recipe_filename)"
|
||||
input_recipe_filename="$(arg input_recipe_filename)"
|
||||
local_ip="$(arg local_ip)"
|
||||
script_command_port="$(arg script_command_port)"
|
||||
reverse_port="$(arg reverse_port)"
|
||||
script_sender_port="$(arg script_sender_port)"
|
||||
trajectory_port="$(arg trajectory_port)"
|
||||
>
|
||||
<origin xyz="0 0 0" rpy="0 0 0" /> <!-- position robot in the world -->
|
||||
</xacro:cs_robot>
|
||||
|
||||
<xacro:if value="$(arg sim_gazebo)">
|
||||
<!-- Gazebo plugins -->
|
||||
<gazebo reference="world">
|
||||
</gazebo>
|
||||
<gazebo>
|
||||
<plugin filename="libgazebo_ros2_control.so" name="gazebo_ros2_control">
|
||||
<parameters>$(arg simulation_controllers)</parameters>
|
||||
</plugin>
|
||||
</gazebo>
|
||||
</xacro:if>
|
||||
|
||||
<xacro:if value="$(arg sim_ignition)">
|
||||
<!-- Gazebo plugins -->
|
||||
<gazebo reference="world">
|
||||
</gazebo>
|
||||
<gazebo>
|
||||
<plugin filename="libign_ros2_control-system.so" name="ign_ros2_control::IgnitionROS2ControlPlugin">
|
||||
<parameters>$(arg simulation_controllers)</parameters>
|
||||
<controller_manager_node_name>$(arg tf_prefix)controller_manager</controller_manager_node_name>
|
||||
</plugin>
|
||||
</gazebo>
|
||||
</xacro:if>
|
||||
|
||||
</robot>
|
||||
339
unilabos/device_mesh/devices/elite_robot/urdf/cs_macro.xacro
Normal file
339
unilabos/device_mesh/devices/elite_robot/urdf/cs_macro.xacro
Normal file
@@ -0,0 +1,339 @@
|
||||
<?xml version="1.0"?>
|
||||
<robot xmlns:xacro="http://wiki.ros.org/xacro">
|
||||
<!--
|
||||
Base ELITE CS robot series xacro macro.
|
||||
|
||||
NOTE this is NOT a URDF. It cannot directly be loaded by consumers
|
||||
expecting a flattened '.urdf' file. See the top-level '.xacro' for that
|
||||
(but note that .xacro must still be processed by the xacro command).
|
||||
|
||||
This file models the base kinematic chain of a CS robot, which then gets
|
||||
parameterised by various configuration files to convert it into a CS63,
|
||||
CS66, CS612, CS616, CS620 or CS625.
|
||||
|
||||
NOTE the default kinematic parameters (i.e., link lengths, frame locations,
|
||||
offsets, etc) do not correspond to any particular robot. They are defaults
|
||||
only.
|
||||
|
||||
For accurate (and robot-specific) transforms, the 'kinematics_parameters_file'
|
||||
parameter MUST point to a .yaml file containing the appropriate values for
|
||||
the targeted robot.
|
||||
|
||||
- Chen Shichao
|
||||
-->
|
||||
|
||||
<xacro:include filename="${mesh_path}/devices/elite_robot/urdf/inc/cs_transmissions.xacro" />
|
||||
<xacro:include filename="${mesh_path}/devices/elite_robot/urdf/inc/cs_common.xacro" />
|
||||
|
||||
<xacro:macro name="cs_robot" params="
|
||||
name
|
||||
tf_prefix
|
||||
parent
|
||||
*origin
|
||||
joint_limits_parameters_file
|
||||
kinematics_parameters_file
|
||||
physical_parameters_file
|
||||
visual_parameters_file
|
||||
generate_ros2_control_tag:=true
|
||||
transmission_hw_interface:=hardware_interface/PositionJointInterface
|
||||
safety_limits:=false
|
||||
safety_pos_margin:=0.15
|
||||
safety_k_position:=20
|
||||
use_fake_hardware:=false
|
||||
fake_sensor_commands:=false
|
||||
sim_gazebo:=false
|
||||
sim_ignition:=false
|
||||
headless_mode:=false
|
||||
initial_positions:=${dict(shoulder_pan_joint=0.0,shoulder_lift_joint=-1.57,elbow_joint=0.0,wrist_1_joint=-1.57,wrist_2_joint=0.0,wrist_3_joint=0.0)}
|
||||
use_tool_communication:=false
|
||||
tool_voltage:=0
|
||||
tool_parity:=0
|
||||
tool_baud_rate:=115200
|
||||
tool_stop_bits:=1
|
||||
tool_tcp_port:=54321
|
||||
robot_ip:=0.0.0.0
|
||||
script_filename:=to_be_filled_by_cs_robot_driver
|
||||
output_recipe_filename:=to_be_filled_by_cs_robot_driver
|
||||
input_recipe_filename:=to_be_filled_by_cs_robot_driver
|
||||
reverse_port:=50001
|
||||
script_sender_port:=50002
|
||||
local_ip:=0.0.0.0
|
||||
script_command_port:=50004
|
||||
trajectory_port:=50003
|
||||
mesh_path"
|
||||
|
||||
>
|
||||
|
||||
<!-- Load configuration data from the provided .yaml files -->
|
||||
<xacro:read_model_data
|
||||
joint_limits_parameters_file="${joint_limits_parameters_file}"
|
||||
kinematics_parameters_file="${kinematics_parameters_file}"
|
||||
physical_parameters_file="${physical_parameters_file}"
|
||||
visual_parameters_file="${visual_parameters_file}"
|
||||
force_abs_paths="true"
|
||||
mesh_path="${mesh_path}"
|
||||
/>
|
||||
|
||||
|
||||
<xacro:if value="${generate_ros2_control_tag}">
|
||||
<!-- ros2 control include -->
|
||||
<xacro:include filename="${mesh_path}/devices/elite_robot/urdf/cs.ros2_control.xacro" />
|
||||
<!-- ros2 control instance -->
|
||||
<xacro:cs_ros2_control
|
||||
name="${name}"
|
||||
use_fake_hardware="${use_fake_hardware}"
|
||||
initial_positions="${initial_positions}"
|
||||
fake_sensor_commands="${fake_sensor_commands}"
|
||||
headless_mode="${headless_mode}"
|
||||
sim_gazebo="${sim_gazebo}"
|
||||
sim_ignition="${sim_ignition}"
|
||||
script_filename="${script_filename}"
|
||||
output_recipe_filename="${output_recipe_filename}"
|
||||
input_recipe_filename="${input_recipe_filename}"
|
||||
tf_prefix="${tf_prefix}"
|
||||
robot_ip="${robot_ip}"
|
||||
use_tool_communication="${use_tool_communication}"
|
||||
tool_voltage="${tool_voltage}"
|
||||
tool_parity="${tool_parity}"
|
||||
tool_baud_rate="${tool_baud_rate}"
|
||||
tool_stop_bits="${tool_stop_bits}"
|
||||
tool_tcp_port="${tool_tcp_port}"
|
||||
reverse_port="${reverse_port}"
|
||||
script_sender_port="${script_sender_port}"
|
||||
local_ip="${local_ip}"
|
||||
script_command_port="${script_command_port}"
|
||||
trajectory_port="${trajectory_port}"
|
||||
/>
|
||||
</xacro:if>
|
||||
|
||||
<!-- Add URDF transmission elements (for ros_control) -->
|
||||
<!--<xacro:cs_arm_transmission prefix="${prefix}" hw_interface="${transmission_hw_interface}" />-->
|
||||
<!-- Placeholder for ros2_control transmission which don't yet exist -->
|
||||
|
||||
<!-- links - main serial chain -->
|
||||
<link name="${tf_prefix}base_link"/>
|
||||
<link name="${tf_prefix}base_link_inertia">
|
||||
<visual>
|
||||
<origin xyz="0 0 0" rpy="0 0 0"/>
|
||||
<geometry>
|
||||
<xacro:get_mesh name="base" type="visual"/>
|
||||
</geometry>
|
||||
</visual>
|
||||
<collision>
|
||||
<origin xyz="0 0 0" rpy="0 0 0"/>
|
||||
<geometry>
|
||||
<xacro:get_mesh name="base" type="collision"/>
|
||||
</geometry>
|
||||
</collision>
|
||||
<xacro:build_inertial mass="${base_mass}" cog="${prop_base_cog}" inertia="${prop_base_inertia}"/>
|
||||
</link>
|
||||
<link name="${tf_prefix}shoulder_link">
|
||||
<visual>
|
||||
<origin xyz="0 0 0" rpy="0 0 0"/>
|
||||
<geometry>
|
||||
<xacro:get_mesh name="shoulder" type="visual"/>
|
||||
</geometry>
|
||||
</visual>
|
||||
<collision>
|
||||
<origin xyz="0 0 0" rpy="0 0 0"/>
|
||||
<geometry>
|
||||
<xacro:get_mesh name="shoulder" type="collision"/>
|
||||
</geometry>
|
||||
</collision>
|
||||
<xacro:build_inertial mass="${shoulder_mass}" cog="${prop_shoulder_cog}" inertia="${prop_shoulder_inertia}"/>
|
||||
</link>
|
||||
<link name="${tf_prefix}upperarm_link">
|
||||
<visual>
|
||||
<origin xyz="0 0 0" rpy="0 0 0"/>
|
||||
<geometry>
|
||||
<xacro:get_mesh name="upperarm" type="visual"/>
|
||||
</geometry>
|
||||
</visual>
|
||||
<collision>
|
||||
<origin xyz="0 0 0" rpy="0 0 0"/>
|
||||
<geometry>
|
||||
<xacro:get_mesh name="upperarm" type="collision"/>
|
||||
</geometry>
|
||||
</collision>
|
||||
<xacro:build_inertial mass="${upperarm_mass}" cog="${prop_upperarm_cog}" inertia="${prop_upperarm_inertia}"/>
|
||||
</link>
|
||||
<link name="${tf_prefix}forearm_link">
|
||||
<visual>
|
||||
<origin xyz="0 0 0" rpy="0 0 0"/>
|
||||
<geometry>
|
||||
<xacro:get_mesh name="forearm" type="visual"/>
|
||||
</geometry>
|
||||
</visual>
|
||||
<collision>
|
||||
<origin xyz="0 0 0" rpy="0 0 0"/>
|
||||
<geometry>
|
||||
<xacro:get_mesh name="forearm" type="collision"/>
|
||||
</geometry>
|
||||
</collision>
|
||||
<xacro:build_inertial mass="${forearm_mass}" cog="${prop_forearm_cog}" inertia="${prop_forearm_inertia}"/>
|
||||
</link>
|
||||
<link name="${tf_prefix}wrist_1_link">
|
||||
<visual>
|
||||
<origin xyz="0 0 0" rpy="0 0 0"/>
|
||||
<geometry>
|
||||
<xacro:get_mesh name="wrist_1" type="visual"/>
|
||||
</geometry>
|
||||
</visual>
|
||||
<collision>
|
||||
<origin xyz="0 0 0" rpy="0 0 0"/>
|
||||
<geometry>
|
||||
<xacro:get_mesh name="wrist_1" type="collision"/>
|
||||
</geometry>
|
||||
</collision>
|
||||
<xacro:build_inertial mass="${wrist_1_mass}" cog="${prop_wrist_1_cog}" inertia="${prop_wrist_1_inertia}"/>
|
||||
</link>
|
||||
<link name="${tf_prefix}wrist_2_link">
|
||||
<visual>
|
||||
<origin xyz="0 0 0" rpy="0 0 0"/>
|
||||
<geometry>
|
||||
<xacro:get_mesh name="wrist_2" type="visual"/>
|
||||
</geometry>
|
||||
</visual>
|
||||
<collision>
|
||||
<origin xyz="0 0 0" rpy="0 0 0"/>
|
||||
<geometry>
|
||||
<xacro:get_mesh name="wrist_2" type="collision"/>
|
||||
</geometry>
|
||||
</collision>
|
||||
<xacro:build_inertial mass="${wrist_2_mass}" cog="${prop_wrist_2_cog}" inertia="${prop_wrist_2_inertia}"/>
|
||||
</link>
|
||||
<link name="${tf_prefix}wrist_3_link">
|
||||
<visual>
|
||||
<origin xyz="0 0 0" rpy="0 0 0"/>
|
||||
<geometry>
|
||||
<xacro:get_mesh name="wrist_3" type="visual"/>
|
||||
</geometry>
|
||||
</visual>
|
||||
<collision>
|
||||
<origin xyz="0 0 0" rpy="0 0 0"/>
|
||||
<geometry>
|
||||
<xacro:get_mesh name="wrist_3" type="collision"/>
|
||||
</geometry>
|
||||
</collision>
|
||||
<xacro:build_inertial mass="${wrist_3_mass}" cog="${prop_wrist_3_cog}" inertia="${prop_wrist_3_inertia}"/>
|
||||
</link>
|
||||
|
||||
<!-- base_joint fixes base_link to the environment -->
|
||||
<joint name="${tf_prefix}base_joint" type="fixed">
|
||||
<xacro:insert_block name="origin" />
|
||||
<parent link="${parent}" />
|
||||
<child link="${tf_prefix}base_link" />
|
||||
</joint>
|
||||
|
||||
<!-- joints - main serial chain -->
|
||||
<joint name="${tf_prefix}base_link-base_link_inertia" type="fixed">
|
||||
<parent link="${tf_prefix}base_link" />
|
||||
<child link="${tf_prefix}base_link_inertia" />
|
||||
<origin xyz="0 0 0" rpy="0 0 0" />
|
||||
</joint>
|
||||
<joint name="${tf_prefix}shoulder_pan_joint" type="revolute">
|
||||
<parent link="${tf_prefix}base_link_inertia" />
|
||||
<child link="${tf_prefix}shoulder_link" />
|
||||
<origin xyz="${shoulder_x} ${shoulder_y} ${shoulder_z}" rpy="${shoulder_roll} ${shoulder_pitch} ${shoulder_yaw}" />
|
||||
<axis xyz="0 0 1" />
|
||||
<limit lower="${shoulder_pan_lower_limit}" upper="${shoulder_pan_upper_limit}"
|
||||
effort="${shoulder_pan_effort_limit}" velocity="${shoulder_pan_velocity_limit}"/>
|
||||
<xacro:if value="${safety_limits}">
|
||||
<safety_controller soft_lower_limit="${shoulder_pan_lower_limit + safety_pos_margin}" soft_upper_limit="${shoulder_pan_upper_limit - safety_pos_margin}" k_position="${safety_k_position}" k_velocity="0.0"/>
|
||||
</xacro:if>
|
||||
<dynamics damping="0" friction="0"/>
|
||||
</joint>
|
||||
<joint name="${tf_prefix}shoulder_lift_joint" type="revolute">
|
||||
<parent link="${tf_prefix}shoulder_link" />
|
||||
<child link="${tf_prefix}upperarm_link" />
|
||||
<origin xyz="${upperarm_x} ${upperarm_y} ${upperarm_z}" rpy="${upperarm_roll} ${upperarm_pitch} ${upperarm_yaw}" />
|
||||
<axis xyz="0 0 1" />
|
||||
<limit lower="${shoulder_lift_lower_limit}" upper="${shoulder_lift_upper_limit}"
|
||||
effort="${shoulder_lift_effort_limit}" velocity="${shoulder_lift_velocity_limit}"/>
|
||||
<xacro:if value="${safety_limits}">
|
||||
<safety_controller soft_lower_limit="${shoulder_lift_lower_limit + safety_pos_margin}" soft_upper_limit="${shoulder_lift_upper_limit - safety_pos_margin}" k_position="${safety_k_position}" k_velocity="0.0"/>
|
||||
</xacro:if>
|
||||
<dynamics damping="0" friction="0"/>
|
||||
</joint>
|
||||
<joint name="${tf_prefix}elbow_joint" type="revolute">
|
||||
<parent link="${tf_prefix}upperarm_link" />
|
||||
<child link="${tf_prefix}forearm_link" />
|
||||
<origin xyz="${forearm_x} ${forearm_y} ${forearm_z}" rpy="${forearm_roll} ${forearm_pitch} ${forearm_yaw}" />
|
||||
<axis xyz="0 0 1" />
|
||||
<limit lower="${elbow_joint_lower_limit}" upper="${elbow_joint_upper_limit}"
|
||||
effort="${elbow_joint_effort_limit}" velocity="${elbow_joint_velocity_limit}"/>
|
||||
<xacro:if value="${safety_limits}">
|
||||
<safety_controller soft_lower_limit="${elbow_joint_lower_limit + safety_pos_margin}" soft_upper_limit="${elbow_joint_upper_limit - safety_pos_margin}" k_position="${safety_k_position}" k_velocity="0.0"/>
|
||||
</xacro:if>
|
||||
<dynamics damping="0" friction="0"/>
|
||||
</joint>
|
||||
<joint name="${tf_prefix}wrist_1_joint" type="revolute">
|
||||
<parent link="${tf_prefix}forearm_link" />
|
||||
<child link="${tf_prefix}wrist_1_link" />
|
||||
<origin xyz="${wrist_1_x} ${wrist_1_y} ${wrist_1_z}" rpy="${wrist_1_roll} ${wrist_1_pitch} ${wrist_1_yaw}" />
|
||||
<axis xyz="0 0 1" />
|
||||
<limit lower="${wrist_1_lower_limit}" upper="${wrist_1_upper_limit}"
|
||||
effort="${wrist_1_effort_limit}" velocity="${wrist_1_velocity_limit}"/>
|
||||
<xacro:if value="${safety_limits}">
|
||||
<safety_controller soft_lower_limit="${wrist_1_lower_limit + safety_pos_margin}" soft_upper_limit="${wrist_1_upper_limit - safety_pos_margin}" k_position="${safety_k_position}" k_velocity="0.0"/>
|
||||
</xacro:if>
|
||||
<dynamics damping="0" friction="0"/>
|
||||
</joint>
|
||||
<joint name="${tf_prefix}wrist_2_joint" type="revolute">
|
||||
<parent link="${tf_prefix}wrist_1_link" />
|
||||
<child link="${tf_prefix}wrist_2_link" />
|
||||
<origin xyz="${wrist_2_x} ${wrist_2_y} ${wrist_2_z}" rpy="${wrist_2_roll} ${wrist_2_pitch} ${wrist_2_yaw}" />
|
||||
<axis xyz="0 0 1" />
|
||||
<limit lower="${wrist_2_lower_limit}" upper="${wrist_2_upper_limit}"
|
||||
effort="${wrist_2_effort_limit}" velocity="${wrist_2_velocity_limit}"/>
|
||||
<xacro:if value="${safety_limits}">
|
||||
<safety_controller soft_lower_limit="${wrist_2_lower_limit + safety_pos_margin}" soft_upper_limit="${wrist_2_upper_limit - safety_pos_margin}" k_position="${safety_k_position}" k_velocity="0.0"/>
|
||||
</xacro:if>
|
||||
<dynamics damping="0" friction="0"/>
|
||||
</joint>
|
||||
<joint name="${tf_prefix}wrist_3_joint" type="revolute">
|
||||
<parent link="${tf_prefix}wrist_2_link" />
|
||||
<child link="${tf_prefix}wrist_3_link" />
|
||||
<origin xyz="${wrist_3_x} ${wrist_3_y} ${wrist_3_z}" rpy="${wrist_3_roll} ${wrist_3_pitch} ${wrist_3_yaw}" />
|
||||
<axis xyz="0 0 1" />
|
||||
<limit lower="${wrist_3_lower_limit}" upper="${wrist_3_upper_limit}"
|
||||
effort="${wrist_3_effort_limit}" velocity="${wrist_3_velocity_limit}"/>
|
||||
<xacro:if value="${safety_limits}">
|
||||
<safety_controller soft_lower_limit="${wrist_3_lower_limit + safety_pos_margin}" soft_upper_limit="${wrist_3_upper_limit - safety_pos_margin}" k_position="${safety_k_position}" k_velocity="0.0"/>
|
||||
</xacro:if>
|
||||
<dynamics damping="0" friction="0"/>
|
||||
</joint>
|
||||
|
||||
<link name="${tf_prefix}ft_frame"/>
|
||||
<joint name="${tf_prefix}wrist_3_link-ft_frame" type="fixed">
|
||||
<parent link="${tf_prefix}wrist_3_link"/>
|
||||
<child link="${tf_prefix}ft_frame"/>
|
||||
<origin xyz="0 0 0" rpy="0 0 0"/>
|
||||
</joint>
|
||||
|
||||
<!-- ROS-Industrial 'base' frame - base_link to CS 'Base' Coordinates transform -->
|
||||
<link name="${tf_prefix}base"/>
|
||||
<joint name="${tf_prefix}base_link-base_fixed_joint" type="fixed">
|
||||
<origin xyz="0 0 0" rpy="0 0 0"/>
|
||||
<parent link="${tf_prefix}base_link"/>
|
||||
<child link="${tf_prefix}base"/>
|
||||
</joint>
|
||||
|
||||
<!-- ROS-Industrial 'flange' frame - attachment point for EEF models -->
|
||||
<link name="${tf_prefix}flange" />
|
||||
<joint name="${tf_prefix}wrist_3-flange" type="fixed">
|
||||
<parent link="${tf_prefix}wrist_3_link" />
|
||||
<child link="${tf_prefix}flange" />
|
||||
<origin xyz="0 0 0" rpy="0 0 0" />
|
||||
</joint>
|
||||
|
||||
<!-- ROS-Industrial 'tool0' frame - all-zeros tool frame -->
|
||||
<link name="${tf_prefix}tool0"/>
|
||||
<joint name="${tf_prefix}flange-tool0" type="fixed">
|
||||
<origin xyz="0 0 0" rpy="0 0 0"/>
|
||||
<parent link="${tf_prefix}flange"/>
|
||||
<child link="${tf_prefix}tool0"/>
|
||||
</joint>
|
||||
|
||||
</xacro:macro>
|
||||
</robot>
|
||||
@@ -0,0 +1,174 @@
|
||||
<?xml version="1.0"?>
|
||||
<robot xmlns:xacro="http://wiki.ros.org/xacro">
|
||||
<!--
|
||||
NOTE the macros defined in this file are NOT part of the public API of this
|
||||
package. Users CANNOT rely on this file being available, or stored in
|
||||
this location. Nor can they rely on the existence of the two macros.
|
||||
The macros store the defined properties in the scope of the caller.
|
||||
However, users MUST NOT rely on these properties, their contents or their
|
||||
names.
|
||||
|
||||
Author: Chen Shichao
|
||||
-->
|
||||
<xacro:macro name="build_inertial" params="mass cog inertia">
|
||||
<inertial>
|
||||
<mass value="${mass}" />
|
||||
<origin
|
||||
xyz="${cog['x']} ${cog['y']} ${cog['z']}"
|
||||
rpy="0 0 0" />
|
||||
<inertia
|
||||
ixx="${inertia['ixx']}"
|
||||
ixy="${inertia['ixy']}"
|
||||
ixz="${inertia['ixz']}"
|
||||
iyy="${inertia['iyy']}"
|
||||
iyz="${inertia['iyz']}"
|
||||
izz="${inertia['izz']}" />
|
||||
</inertial>
|
||||
</xacro:macro>
|
||||
|
||||
<xacro:macro name="get_visual_params" params="name:=^ type:=^" >
|
||||
<xacro:property name="visual_params" value="${sec_mesh_files[name][type]}" scope="parent"/>
|
||||
</xacro:macro>
|
||||
|
||||
<!-- Simplification of getting meshes. Available types can be seen in the visual_parameters.yaml (At the time of writing: visual, collision) -->
|
||||
<xacro:macro name="get_mesh_path" params="name:=^ type:=^" >
|
||||
<xacro:get_visual_params />
|
||||
<xacro:if value="${force_abs_paths}">
|
||||
<xacro:property name="mesh" value="file://${mesh_path}/devices/elite_robot/${visual_params['mesh']['path']}" scope="parent"/>
|
||||
</xacro:if>
|
||||
<xacro:unless value="${force_abs_paths}">
|
||||
<xacro:property name="mesh" value="package://${visual_params['mesh']['package']}/${visual_params['mesh']['path']}" scope="parent"/>
|
||||
</xacro:unless>
|
||||
</xacro:macro>
|
||||
|
||||
<xacro:macro name="get_mesh" params="name type" >
|
||||
<xacro:get_mesh_path/>
|
||||
<mesh filename="${mesh}"/>
|
||||
</xacro:macro>
|
||||
|
||||
<xacro:macro name="read_model_data" params="joint_limits_parameters_file kinematics_parameters_file physical_parameters_file visual_parameters_file force_abs_paths mesh_path">
|
||||
|
||||
<xacro:property name="force_abs_paths" value="${force_abs_paths}" scope="parent"/>
|
||||
<!-- Read .yaml files from disk, load content into properties -->
|
||||
<xacro:property name="config_joint_limit_parameters" value="${xacro.load_yaml(joint_limits_parameters_file)}"/>
|
||||
<xacro:property name="config_kinematics_parameters" value="${xacro.load_yaml(kinematics_parameters_file)}"/>
|
||||
<xacro:property name="config_physical_parameters" value="${xacro.load_yaml(physical_parameters_file)}"/>
|
||||
<xacro:property name="config_visual_parameters" value="${xacro.load_yaml(visual_parameters_file)}"/>
|
||||
|
||||
<xacro:property name="mesh_path" value="${mesh_path}" scope="parent"/>
|
||||
|
||||
<!-- Extract subsections from yaml dictionaries -->
|
||||
<xacro:property name="sec_limits" value="${config_joint_limit_parameters['joint_limits']}"/>
|
||||
<xacro:property name="sec_dh_parameters" value="${config_physical_parameters['dh_parameters']}"/>
|
||||
<xacro:property name="sec_offsets" value="${config_physical_parameters['offsets']}"/>
|
||||
<xacro:property name="sec_inertia_parameters" value="${config_physical_parameters['inertia_parameters']}" />
|
||||
<xacro:property name="sec_mesh_files" value="${config_visual_parameters['mesh_files']}" scope="parent"/>
|
||||
<xacro:property name="sec_kinematics" value="${config_kinematics_parameters['kinematics']}" />
|
||||
|
||||
<!-- JOINTS LIMIT PARAMETERS -->
|
||||
<xacro:property name="shoulder_pan_lower_limit" value="${sec_limits['shoulder_pan_joint']['min_position']}" scope="parent"/>
|
||||
<xacro:property name="shoulder_pan_upper_limit" value="${sec_limits['shoulder_pan_joint']['max_position']}" scope="parent"/>
|
||||
<xacro:property name="shoulder_pan_velocity_limit" value="${sec_limits['shoulder_pan_joint']['max_velocity']}" scope="parent"/>
|
||||
<xacro:property name="shoulder_pan_effort_limit" value="${sec_limits['shoulder_pan_joint']['max_effort']}" scope="parent"/>
|
||||
<xacro:property name="shoulder_lift_lower_limit" value="${sec_limits['shoulder_lift_joint']['min_position']}" scope="parent"/>
|
||||
<xacro:property name="shoulder_lift_upper_limit" value="${sec_limits['shoulder_lift_joint']['max_position']}" scope="parent"/>
|
||||
<xacro:property name="shoulder_lift_velocity_limit" value="${sec_limits['shoulder_lift_joint']['max_velocity']}" scope="parent"/>
|
||||
<xacro:property name="shoulder_lift_effort_limit" value="${sec_limits['shoulder_lift_joint']['max_effort']}" scope="parent"/>
|
||||
<xacro:property name="elbow_joint_lower_limit" value="${sec_limits['elbow_joint']['min_position']}" scope="parent"/>
|
||||
<xacro:property name="elbow_joint_upper_limit" value="${sec_limits['elbow_joint']['max_position']}" scope="parent"/>
|
||||
<xacro:property name="elbow_joint_velocity_limit" value="${sec_limits['elbow_joint']['max_velocity']}" scope="parent"/>
|
||||
<xacro:property name="elbow_joint_effort_limit" value="${sec_limits['elbow_joint']['max_effort']}" scope="parent"/>
|
||||
<xacro:property name="wrist_1_lower_limit" value="${sec_limits['wrist_1_joint']['min_position']}" scope="parent"/>
|
||||
<xacro:property name="wrist_1_upper_limit" value="${sec_limits['wrist_1_joint']['max_position']}" scope="parent"/>
|
||||
<xacro:property name="wrist_1_velocity_limit" value="${sec_limits['wrist_1_joint']['max_velocity']}" scope="parent"/>
|
||||
<xacro:property name="wrist_1_effort_limit" value="${sec_limits['wrist_1_joint']['max_effort']}" scope="parent"/>
|
||||
<xacro:property name="wrist_2_lower_limit" value="${sec_limits['wrist_2_joint']['min_position']}" scope="parent"/>
|
||||
<xacro:property name="wrist_2_upper_limit" value="${sec_limits['wrist_2_joint']['max_position']}" scope="parent"/>
|
||||
<xacro:property name="wrist_2_velocity_limit" value="${sec_limits['wrist_2_joint']['max_velocity']}" scope="parent"/>
|
||||
<xacro:property name="wrist_2_effort_limit" value="${sec_limits['wrist_2_joint']['max_effort']}" scope="parent"/>
|
||||
<xacro:property name="wrist_3_lower_limit" value="${sec_limits['wrist_3_joint']['min_position']}" scope="parent"/>
|
||||
<xacro:property name="wrist_3_upper_limit" value="${sec_limits['wrist_3_joint']['max_position']}" scope="parent"/>
|
||||
<xacro:property name="wrist_3_velocity_limit" value="${sec_limits['wrist_3_joint']['max_velocity']}" scope="parent"/>
|
||||
<xacro:property name="wrist_3_effort_limit" value="${sec_limits['wrist_3_joint']['max_effort']}" scope="parent"/>
|
||||
|
||||
<!-- DH PARAMETERS -->
|
||||
<xacro:property name="d1" value="${sec_dh_parameters['d1']}" scope="parent"/>
|
||||
<xacro:property name="a2" value="${sec_dh_parameters['a2']}" scope="parent"/>
|
||||
<xacro:property name="a3" value="${sec_dh_parameters['a3']}" scope="parent"/>
|
||||
<xacro:property name="d4" value="${sec_dh_parameters['d4']}" scope="parent"/>
|
||||
<xacro:property name="d5" value="${sec_dh_parameters['d5']}" scope="parent"/>
|
||||
<xacro:property name="d6" value="${sec_dh_parameters['d6']}" scope="parent"/>
|
||||
|
||||
<!-- kinematics -->
|
||||
<xacro:property name="shoulder_x" value="${sec_kinematics['shoulder']['x']}" scope="parent"/>
|
||||
<xacro:property name="shoulder_y" value="${sec_kinematics['shoulder']['y']}" scope="parent"/>
|
||||
<xacro:property name="shoulder_z" value="${sec_kinematics['shoulder']['z']}" scope="parent"/>
|
||||
<xacro:property name="shoulder_roll" value="${sec_kinematics['shoulder']['roll']}" scope="parent"/>
|
||||
<xacro:property name="shoulder_pitch" value="${sec_kinematics['shoulder']['pitch']}" scope="parent"/>
|
||||
<xacro:property name="shoulder_yaw" value="${sec_kinematics['shoulder']['yaw']}" scope="parent"/>
|
||||
|
||||
<xacro:property name="upperarm_x" value="${sec_kinematics['upperarm']['x']}" scope="parent"/>
|
||||
<xacro:property name="upperarm_y" value="${sec_kinematics['upperarm']['y']}" scope="parent"/>
|
||||
<xacro:property name="upperarm_z" value="${sec_kinematics['upperarm']['z']}" scope="parent"/>
|
||||
<xacro:property name="upperarm_roll" value="${sec_kinematics['upperarm']['roll']}" scope="parent"/>
|
||||
<xacro:property name="upperarm_pitch" value="${sec_kinematics['upperarm']['pitch']}" scope="parent"/>
|
||||
<xacro:property name="upperarm_yaw" value="${sec_kinematics['upperarm']['yaw']}" scope="parent"/>
|
||||
|
||||
<xacro:property name="forearm_x" value="${sec_kinematics['forearm']['x']}" scope="parent"/>
|
||||
<xacro:property name="forearm_y" value="${sec_kinematics['forearm']['y']}" scope="parent"/>
|
||||
<xacro:property name="forearm_z" value="${sec_kinematics['forearm']['z']}" scope="parent"/>
|
||||
<xacro:property name="forearm_roll" value="${sec_kinematics['forearm']['roll']}" scope="parent"/>
|
||||
<xacro:property name="forearm_pitch" value="${sec_kinematics['forearm']['pitch']}" scope="parent"/>
|
||||
<xacro:property name="forearm_yaw" value="${sec_kinematics['forearm']['yaw']}" scope="parent"/>
|
||||
|
||||
<xacro:property name="wrist_1_x" value="${sec_kinematics['wrist_1']['x']}" scope="parent"/>
|
||||
<xacro:property name="wrist_1_y" value="${sec_kinematics['wrist_1']['y']}" scope="parent"/>
|
||||
<xacro:property name="wrist_1_z" value="${sec_kinematics['wrist_1']['z']}" scope="parent"/>
|
||||
<xacro:property name="wrist_1_roll" value="${sec_kinematics['wrist_1']['roll']}" scope="parent"/>
|
||||
<xacro:property name="wrist_1_pitch" value="${sec_kinematics['wrist_1']['pitch']}" scope="parent"/>
|
||||
<xacro:property name="wrist_1_yaw" value="${sec_kinematics['wrist_1']['yaw']}" scope="parent"/>
|
||||
|
||||
<xacro:property name="wrist_2_x" value="${sec_kinematics['wrist_2']['x']}" scope="parent"/>
|
||||
<xacro:property name="wrist_2_y" value="${sec_kinematics['wrist_2']['y']}" scope="parent"/>
|
||||
<xacro:property name="wrist_2_z" value="${sec_kinematics['wrist_2']['z']}" scope="parent"/>
|
||||
<xacro:property name="wrist_2_roll" value="${sec_kinematics['wrist_2']['roll']}" scope="parent"/>
|
||||
<xacro:property name="wrist_2_pitch" value="${sec_kinematics['wrist_2']['pitch']}" scope="parent"/>
|
||||
<xacro:property name="wrist_2_yaw" value="${sec_kinematics['wrist_2']['yaw']}" scope="parent"/>
|
||||
|
||||
<xacro:property name="wrist_3_x" value="${sec_kinematics['wrist_3']['x']}" scope="parent"/>
|
||||
<xacro:property name="wrist_3_y" value="${sec_kinematics['wrist_3']['y']}" scope="parent"/>
|
||||
<xacro:property name="wrist_3_z" value="${sec_kinematics['wrist_3']['z']}" scope="parent"/>
|
||||
<xacro:property name="wrist_3_roll" value="${sec_kinematics['wrist_3']['roll']}" scope="parent"/>
|
||||
<xacro:property name="wrist_3_pitch" value="${sec_kinematics['wrist_3']['pitch']}" scope="parent"/>
|
||||
<xacro:property name="wrist_3_yaw" value="${sec_kinematics['wrist_3']['yaw']}" scope="parent"/>
|
||||
|
||||
<!-- INERTIA PARAMETERS -->
|
||||
<!-- mass -->
|
||||
<xacro:property name="base_mass" value="${sec_inertia_parameters['base_mass']}" scope="parent"/>
|
||||
<xacro:property name="shoulder_mass" value="${sec_inertia_parameters['shoulder_mass']}" scope="parent"/>
|
||||
<xacro:property name="upperarm_mass" value="${sec_inertia_parameters['upperarm_mass']}" scope="parent"/>
|
||||
<xacro:property name="forearm_mass" value="${sec_inertia_parameters['forearm_mass']}" scope="parent"/>
|
||||
<xacro:property name="wrist_1_mass" value="${sec_inertia_parameters['wrist_1_mass']}" scope="parent"/>
|
||||
<xacro:property name="wrist_2_mass" value="${sec_inertia_parameters['wrist_2_mass']}" scope="parent"/>
|
||||
<xacro:property name="wrist_3_mass" value="${sec_inertia_parameters['wrist_3_mass']}" scope="parent"/>
|
||||
|
||||
<!-- center of mass -->
|
||||
<xacro:property name="prop_base_cog" value="${sec_inertia_parameters['center_of_mass']['base_cog']}" scope="parent"/>
|
||||
<xacro:property name="prop_shoulder_cog" value="${sec_inertia_parameters['center_of_mass']['shoulder_cog']}" scope="parent"/>
|
||||
<xacro:property name="prop_upperarm_cog" value="${sec_inertia_parameters['center_of_mass']['upperarm_cog']}" scope="parent"/>
|
||||
<xacro:property name="prop_forearm_cog" value="${sec_inertia_parameters['center_of_mass']['forearm_cog']}" scope="parent"/>
|
||||
<xacro:property name="prop_wrist_1_cog" value="${sec_inertia_parameters['center_of_mass']['wrist_1_cog']}" scope="parent"/>
|
||||
<xacro:property name="prop_wrist_2_cog" value="${sec_inertia_parameters['center_of_mass']['wrist_2_cog']}" scope="parent"/>
|
||||
<xacro:property name="prop_wrist_3_cog" value="${sec_inertia_parameters['center_of_mass']['wrist_3_cog']}" scope="parent"/>
|
||||
|
||||
<!-- inertia -->
|
||||
<xacro:property name="prop_base_inertia" value="${sec_inertia_parameters['inertia']['base']}" scope="parent"/>
|
||||
<xacro:property name="prop_shoulder_inertia" value="${sec_inertia_parameters['inertia']['shoulder']}" scope="parent"/>
|
||||
<xacro:property name="prop_upperarm_inertia" value="${sec_inertia_parameters['inertia']['upperarm']}" scope="parent"/>
|
||||
<xacro:property name="prop_forearm_inertia" value="${sec_inertia_parameters['inertia']['forearm']}" scope="parent"/>
|
||||
<xacro:property name="prop_wrist_1_inertia" value="${sec_inertia_parameters['inertia']['wrist_1']}" scope="parent"/>
|
||||
<xacro:property name="prop_wrist_2_inertia" value="${sec_inertia_parameters['inertia']['wrist_2']}" scope="parent"/>
|
||||
<xacro:property name="prop_wrist_3_inertia" value="${sec_inertia_parameters['inertia']['wrist_3']}" scope="parent"/>
|
||||
|
||||
</xacro:macro>
|
||||
</robot>
|
||||
@@ -0,0 +1,73 @@
|
||||
<?xml version="1.0"?>
|
||||
<robot xmlns:xacro="http://wiki.ros.org/xacro">
|
||||
<!--
|
||||
NOTE the macro defined in this file is NOT part of the public API of this
|
||||
package. Users CANNOT rely on this file being available, or stored in
|
||||
this location. Nor can they rely on the existence of the macro.
|
||||
-->
|
||||
|
||||
<xacro:macro name="cs_arm_transmission" params="prefix hw_interface">
|
||||
|
||||
<transmission name="${prefix}shoulder_pan_trans">
|
||||
<type>transmission_interface/SimpleTransmission</type>
|
||||
<joint name="${prefix}shoulder_pan_joint">
|
||||
<hardwareInterface>${hw_interface}</hardwareInterface>
|
||||
</joint>
|
||||
<actuator name="${prefix}shoulder_pan_motor">
|
||||
<mechanicalReduction>1</mechanicalReduction>
|
||||
</actuator>
|
||||
</transmission>
|
||||
|
||||
<transmission name="${prefix}shoulder_lift_trans">
|
||||
<type>transmission_interface/SimpleTransmission</type>
|
||||
<joint name="${prefix}shoulder_lift_joint">
|
||||
<hardwareInterface>${hw_interface}</hardwareInterface>
|
||||
</joint>
|
||||
<actuator name="${prefix}shoulder_lift_motor">
|
||||
<mechanicalReduction>1</mechanicalReduction>
|
||||
</actuator>
|
||||
</transmission>
|
||||
|
||||
<transmission name="${prefix}elbow_trans">
|
||||
<type>transmission_interface/SimpleTransmission</type>
|
||||
<joint name="${prefix}elbow_joint">
|
||||
<hardwareInterface>${hw_interface}</hardwareInterface>
|
||||
</joint>
|
||||
<actuator name="${prefix}elbow_motor">
|
||||
<mechanicalReduction>1</mechanicalReduction>
|
||||
</actuator>
|
||||
</transmission>
|
||||
|
||||
<transmission name="${prefix}wrist_1_trans">
|
||||
<type>transmission_interface/SimpleTransmission</type>
|
||||
<joint name="${prefix}wrist_1_joint">
|
||||
<hardwareInterface>${hw_interface}</hardwareInterface>
|
||||
</joint>
|
||||
<actuator name="${prefix}wrist_1_motor">
|
||||
<mechanicalReduction>1</mechanicalReduction>
|
||||
</actuator>
|
||||
</transmission>
|
||||
|
||||
<transmission name="${prefix}wrist_2_trans">
|
||||
<type>transmission_interface/SimpleTransmission</type>
|
||||
<joint name="${prefix}wrist_2_joint">
|
||||
<hardwareInterface>${hw_interface}</hardwareInterface>
|
||||
</joint>
|
||||
<actuator name="${prefix}wrist_2_motor">
|
||||
<mechanicalReduction>1</mechanicalReduction>
|
||||
</actuator>
|
||||
</transmission>
|
||||
|
||||
<transmission name="${prefix}wrist_3_trans">
|
||||
<type>transmission_interface/SimpleTransmission</type>
|
||||
<joint name="${prefix}wrist_3_joint">
|
||||
<hardwareInterface>${hw_interface}</hardwareInterface>
|
||||
</joint>
|
||||
<actuator name="${prefix}wrist_3_motor">
|
||||
<mechanicalReduction>1</mechanicalReduction>
|
||||
</actuator>
|
||||
</transmission>
|
||||
|
||||
</xacro:macro>
|
||||
|
||||
</robot>
|
||||
Reference in New Issue
Block a user