Skip to content

Commit 247aaf3

Browse files
author
Dan Zimmerman
committed
Basic block injection example
1 parent 61691b7 commit 247aaf3

File tree

3 files changed

+84
-80
lines changed

3 files changed

+84
-80
lines changed
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
<?xml version="1.0"?>
2+
<robot xmlns:xacro="http://www.ros.org/wiki/xacro">
3+
<xacro:macro name="ur_hardware" params="
4+
name
5+
prefix
6+
use_fake_hardware:=false fake_sensor_commands:=false
7+
sim_gazebo:=false
8+
sim_ignition:=false
9+
headless_mode:=false
10+
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)}
11+
use_tool_communication:=false
12+
script_filename output_recipe_filename
13+
input_recipe_filename tf_prefix
14+
hash_kinematics robot_ip
15+
tool_voltage:=0 tool_parity:=0 tool_baud_rate:=115200 tool_stop_bits:=1
16+
tool_rx_idle_chars:=1.5 tool_tx_idle_chars:=3.5 tool_device_name:=/tmp/ttyUR tool_tcp_port:=54321
17+
reverse_port:=50001
18+
script_sender_port:=50002
19+
reverse_ip:=0.0.0.0
20+
script_command_port:=50004
21+
transmission_hw_interface:=hardware_interface/PositionJointInterface
22+
">
23+
<hardware>
24+
<xacro:if value="${sim_gazebo}">
25+
<plugin>gazebo_ros2_control/GazeboSystem</plugin>
26+
</xacro:if>
27+
<xacro:if value="${sim_ignition}">
28+
<plugin>ign_ros2_control/IgnitionSystem</plugin>
29+
</xacro:if>
30+
<xacro:if value="${use_fake_hardware}">
31+
<plugin>mock_components/GenericSystem</plugin>
32+
<param name="fake_sensor_commands">${fake_sensor_commands}</param>
33+
<param name="state_following_offset">0.0</param>
34+
</xacro:if>
35+
<xacro:unless value="${use_fake_hardware or sim_gazebo or sim_ignition}">
36+
<plugin>ur_robot_driver/URPositionHardwareInterface</plugin>
37+
<param name="robot_ip">${robot_ip}</param>
38+
<param name="script_filename">${script_filename}</param>
39+
<param name="output_recipe_filename">${output_recipe_filename}</param>
40+
<param name="input_recipe_filename">${input_recipe_filename}</param>
41+
<param name="headless_mode">${headless_mode}</param>
42+
<param name="reverse_port">${reverse_port}</param>
43+
<param name="script_sender_port">${script_sender_port}</param>
44+
<param name="reverse_ip">${reverse_ip}</param>
45+
<param name="script_command_port">${script_command_port}</param>
46+
<param name="tf_prefix">"${tf_prefix}"</param>
47+
<param name="non_blocking_read">0</param>
48+
<param name="servoj_gain">2000</param>
49+
<param name="servoj_lookahead_time">0.03</param>
50+
<param name="use_tool_communication">${use_tool_communication}</param>
51+
<param name="kinematics/hash">${hash_kinematics}</param>
52+
<param name="tool_voltage">${tool_voltage}</param>
53+
<param name="tool_parity">${tool_parity}</param>
54+
<param name="tool_baud_rate">${tool_baud_rate}</param>
55+
<param name="tool_stop_bits">${tool_stop_bits}</param>
56+
<param name="tool_rx_idle_chars">${tool_rx_idle_chars}</param>
57+
<param name="tool_tx_idle_chars">${tool_tx_idle_chars}</param>
58+
<param name="tool_device_name">${tool_device_name}</param>
59+
<param name="tool_tcp_port">${tool_tcp_port}</param>
60+
</xacro:unless>
61+
</hardware>
62+
</xacro:macro>
63+
</robot>

urdf/ur.ros2_control.xacro

Lines changed: 6 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -4,67 +4,19 @@
44
<xacro:macro name="ur_ros2_control" params="
55
name
66
prefix
7-
use_fake_hardware:=false fake_sensor_commands:=false
8-
sim_gazebo:=false
9-
sim_ignition:=false
10-
headless_mode:=false
7+
add_state_and_command_interfaces
118
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)}
12-
use_tool_communication:=false
13-
script_filename output_recipe_filename
14-
input_recipe_filename tf_prefix
15-
hash_kinematics robot_ip
16-
tool_voltage:=0 tool_parity:=0 tool_baud_rate:=115200 tool_stop_bits:=1
17-
tool_rx_idle_chars:=1.5 tool_tx_idle_chars:=3.5 tool_device_name:=/tmp/ttyUR tool_tcp_port:=54321
18-
reverse_port:=50001
19-
script_sender_port:=50002
20-
reverse_ip:=0.0.0.0
21-
script_command_port:=50004
229
transmission_hw_interface:=hardware_interface/PositionJointInterface
10+
**hardware_system
2311
">
2412

2513
<!-- Add URDF transmission elements (for ros_control) -->
2614
<!--<xacro:ur_arm_transmission prefix="${prefix}" hw_interface="${transmission_hw_interface}" />-->
2715

2816
<ros2_control name="${name}" type="system">
29-
<hardware>
30-
<xacro:if value="${sim_gazebo}">
31-
<plugin>gazebo_ros2_control/GazeboSystem</plugin>
32-
</xacro:if>
33-
<xacro:if value="${sim_ignition}">
34-
<plugin>ign_ros2_control/IgnitionSystem</plugin>
35-
</xacro:if>
36-
<xacro:if value="${use_fake_hardware}">
37-
<plugin>mock_components/GenericSystem</plugin>
38-
<param name="fake_sensor_commands">${fake_sensor_commands}</param>
39-
<param name="state_following_offset">0.0</param>
40-
</xacro:if>
41-
<xacro:unless value="${use_fake_hardware or sim_gazebo or sim_ignition}">
42-
<plugin>ur_robot_driver/URPositionHardwareInterface</plugin>
43-
<param name="robot_ip">${robot_ip}</param>
44-
<param name="script_filename">${script_filename}</param>
45-
<param name="output_recipe_filename">${output_recipe_filename}</param>
46-
<param name="input_recipe_filename">${input_recipe_filename}</param>
47-
<param name="headless_mode">${headless_mode}</param>
48-
<param name="reverse_port">${reverse_port}</param>
49-
<param name="script_sender_port">${script_sender_port}</param>
50-
<param name="reverse_ip">${reverse_ip}</param>
51-
<param name="script_command_port">${script_command_port}</param>
52-
<param name="tf_prefix">"${tf_prefix}"</param>
53-
<param name="non_blocking_read">0</param>
54-
<param name="servoj_gain">2000</param>
55-
<param name="servoj_lookahead_time">0.03</param>
56-
<param name="use_tool_communication">${use_tool_communication}</param>
57-
<param name="kinematics/hash">${hash_kinematics}</param>
58-
<param name="tool_voltage">${tool_voltage}</param>
59-
<param name="tool_parity">${tool_parity}</param>
60-
<param name="tool_baud_rate">${tool_baud_rate}</param>
61-
<param name="tool_stop_bits">${tool_stop_bits}</param>
62-
<param name="tool_rx_idle_chars">${tool_rx_idle_chars}</param>
63-
<param name="tool_tx_idle_chars">${tool_tx_idle_chars}</param>
64-
<param name="tool_device_name">${tool_device_name}</param>
65-
<param name="tool_tcp_port">${tool_tcp_port}</param>
66-
</xacro:unless>
67-
</hardware>
17+
<!-- Hardware dependency injection from outside the macro-->
18+
<xacro:insert_block name="hardware_system" />
19+
<!-- -->
6820
<joint name="${prefix}shoulder_pan_joint">
6921
<command_interface name="position">
7022
<param name="min">{-2*pi}</param>
@@ -162,7 +114,7 @@
162114
<state_interface name="effort"/>
163115
</joint>
164116

165-
<xacro:unless value="${sim_gazebo or sim_ignition}">
117+
<xacro:unless value="${add_state_and_command_interfaces}">
166118
<sensor name="tcp_fts_sensor">
167119
<state_interface name="force.x"/>
168120
<state_interface name="force.y"/>

urdf/ur.urdf.xacro

Lines changed: 15 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
<xacro:arg name="tool_tcp_port" default="54321" />
4242

4343
<!-- Simulation parameters -->
44-
<xacro:arg name="use_fake_hardware" default="false" />
44+
<xacro:arg name="use_fake_hardware" default="true" />
4545
<xacro:arg name="fake_sensor_commands" default="false" />
4646
<xacro:arg name="sim_gazebo" default="false" />
4747
<xacro:arg name="sim_ignition" default="false" />
@@ -78,35 +78,24 @@
7878
<origin xyz="0 0 0" rpy="0 0 0" /> <!-- position robot in the world -->
7979
</xacro:ur_robot>
8080

81-
82-
<!-- ros2 control instance -->
81+
<!-- ros2 control instance, follow this in your own package, ur_description prepares fake hardware -->
82+
<!-- ur_robot_driver would construct the complicated block with all the real hardware parameters -->
8383
<xacro:ur_ros2_control
8484
name="$(arg name)" prefix="$(arg prefix)"
85-
use_fake_hardware="$(arg use_fake_hardware)"
86-
fake_sensor_commands="$(arg fake_sensor_commands)"
87-
sim_gazebo="$(arg sim_gazebo)"
88-
sim_ignition="$(arg sim_ignition)"
89-
headless_mode="$(arg headless_mode)"
85+
add_state_and_command_interfaces="true"
9086
initial_positions="${xacro.load_yaml(initial_positions_file)}"
91-
use_tool_communication="$(arg use_tool_communication)"
92-
tool_voltage="$(arg tool_voltage)"
93-
tool_parity="$(arg tool_parity)"
94-
tool_baud_rate="$(arg tool_baud_rate)"
95-
tool_stop_bits="$(arg tool_stop_bits)"
96-
tool_rx_idle_chars="$(arg tool_rx_idle_chars)"
97-
tool_tx_idle_chars="$(arg tool_tx_idle_chars)"
98-
tool_device_name="$(arg tool_device_name)"
99-
tool_tcp_port="$(arg tool_tcp_port)"
100-
robot_ip="$(arg robot_ip)"
101-
script_filename="$(arg script_filename)"
102-
output_recipe_filename="$(arg output_recipe_filename)"
103-
input_recipe_filename="$(arg input_recipe_filename)"
104-
reverse_ip="$(arg reverse_ip)"
105-
script_command_port="$(arg script_command_port)"
106-
tf_prefix=""
107-
hash_kinematics="${kinematics_hash}"
108-
/>
87+
>
88+
<hardware_system>
89+
<hardware>
90+
<plugin>mock_components/GenericSystem</plugin>
91+
<param name="fake_sensor_commands">$(arg fake_sensor_commands)</param>
92+
<param name="state_following_offset">0.0</param>
93+
</hardware>
94+
</hardware_system>
95+
</xacro:ur_ros2_control>
10996

97+
98+
<!-- dz: These move to their respective simulation packages -->
11099
<xacro:if value="$(arg sim_gazebo)">
111100
<!-- Gazebo plugins -->
112101
<gazebo reference="world">

0 commit comments

Comments
 (0)