Skip to content

Commit ee9b420

Browse files
author
Felix Exner (fexner)
authored
Add control description and ros2_control tag to driver. (#877)
1 parent fcc9d36 commit ee9b420

File tree

4 files changed

+338
-2
lines changed

4 files changed

+338
-2
lines changed

ur_robot_driver/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ install(PROGRAMS scripts/start_ursim.sh
167167
DESTINATION lib/${PROJECT_NAME}
168168
)
169169

170-
install(DIRECTORY config launch
170+
install(DIRECTORY config launch urdf
171171
DESTINATION share/${PROJECT_NAME}
172172
)
173173

ur_robot_driver/launch/ur_control.launch.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ def launch_setup(context, *args, **kwargs):
101101
[
102102
PathJoinSubstitution([FindExecutable(name="xacro")]),
103103
" ",
104-
PathJoinSubstitution([FindPackageShare(description_package), "urdf", description_file]),
104+
PathJoinSubstitution([FindPackageShare("ur_robot_driver"), "urdf", description_file]),
105105
" ",
106106
"robot_ip:=",
107107
robot_ip,
Lines changed: 230 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,230 @@
1+
<?xml version="1.0"?>
2+
<robot xmlns:xacro="http://www.ros.org/wiki/xacro">
3+
4+
<xacro:include filename="$(find ur_description)/urdf/inc/ur_joint_control.xacro" />
5+
<xacro:include filename="$(find ur_description)/urdf/inc/ur_sensors.xacro" />
6+
7+
<xacro:macro name="ur_ros2_control" params="
8+
name
9+
tf_prefix
10+
kinematics_parameters_file
11+
robot_ip
12+
script_filename
13+
input_recipe_filename
14+
output_recipe_filename
15+
transmission_hw_interface:=hardware_interface/PositionJointInterface
16+
use_mock_hardware:=false mock_sensor_commands:=false
17+
headless_mode:=false
18+
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)}
19+
use_tool_communication:=false
20+
tool_voltage:=0 tool_parity:=0 tool_baud_rate:=115200 tool_stop_bits:=1
21+
tool_rx_idle_chars:=1.5 tool_tx_idle_chars:=3.5 tool_device_name:=/tmp/ttyUR tool_tcp_port:=54321
22+
reverse_port:=50001
23+
script_sender_port:=50002
24+
reverse_ip:=0.0.0.0
25+
script_command_port:=50004
26+
trajectory_port:=50003
27+
non_blocking_read:=true
28+
keep_alive_count:=2
29+
">
30+
31+
<xacro:property name="config_kinematics_parameters" value="${xacro.load_yaml(kinematics_parameters_file)}"/>
32+
<xacro:property name="sec_kinematics" value="${config_kinematics_parameters['kinematics']}" />
33+
<xacro:property name="kinematics_hash" value="${sec_kinematics['hash']}" scope="parent"/>
34+
35+
<!-- Add URDF transmission elements (for ros_control) -->
36+
<!--<xacro:ur_arm_transmission prefix="${prefix}" hw_interface="${transmission_hw_interface}" />-->
37+
<!-- Placeholder for ros2_control transmission which don't yet exist -->
38+
39+
<ros2_control name="${name}" type="system">
40+
<hardware>
41+
<xacro:if value="${use_mock_hardware}">
42+
<plugin>mock_components/GenericSystem</plugin>
43+
<param name="mock_sensor_commands">${mock_sensor_commands}</param>
44+
<param name="state_following_offset">0.0</param>
45+
</xacro:if>
46+
<xacro:unless value="${use_mock_hardware}">
47+
<plugin>ur_robot_driver/URPositionHardwareInterface</plugin>
48+
<param name="robot_ip">${robot_ip}</param>
49+
<param name="script_filename">${script_filename}</param>
50+
<param name="output_recipe_filename">${output_recipe_filename}</param>
51+
<param name="input_recipe_filename">${input_recipe_filename}</param>
52+
<param name="headless_mode">${headless_mode}</param>
53+
<param name="reverse_port">${reverse_port}</param>
54+
<param name="script_sender_port">${script_sender_port}</param>
55+
<param name="reverse_ip">${reverse_ip}</param>
56+
<param name="script_command_port">${script_command_port}</param>
57+
<param name="trajectory_port">${trajectory_port}</param>
58+
<param name="tf_prefix">${tf_prefix}</param>
59+
<param name="non_blocking_read">${non_blocking_read}</param>
60+
<param name="servoj_gain">2000</param>
61+
<param name="servoj_lookahead_time">0.03</param>
62+
<param name="use_tool_communication">${use_tool_communication}</param>
63+
<param name="kinematics/hash">${kinematics_hash}</param>
64+
<param name="tool_voltage">${tool_voltage}</param>
65+
<param name="tool_parity">${tool_parity}</param>
66+
<param name="tool_baud_rate">${tool_baud_rate}</param>
67+
<param name="tool_stop_bits">${tool_stop_bits}</param>
68+
<param name="tool_rx_idle_chars">${tool_rx_idle_chars}</param>
69+
<param name="tool_tx_idle_chars">${tool_tx_idle_chars}</param>
70+
<param name="tool_device_name">${tool_device_name}</param>
71+
<param name="tool_tcp_port">${tool_tcp_port}</param>
72+
<param name="keep_alive_count">${keep_alive_count}</param>
73+
</xacro:unless>
74+
</hardware>
75+
76+
<xacro:ur_joint_control_description
77+
tf_prefix="${tf_prefix}"
78+
initial_positions="${initial_positions}"
79+
/>
80+
81+
<xacro:ur_sensors
82+
tf_prefix="${tf_prefix}"
83+
/>
84+
85+
<!-- NOTE The following are joints used only for testing with mock hardware and will change in the future -->
86+
<gpio name="${tf_prefix}speed_scaling">
87+
<state_interface name="speed_scaling_factor"/>
88+
<param name="initial_speed_scaling_factor">1</param>
89+
<command_interface name="target_speed_fraction_cmd"/>
90+
<command_interface name="target_speed_fraction_async_success"/>
91+
</gpio>
92+
93+
<gpio name="${tf_prefix}gpio">
94+
<command_interface name="standard_digital_output_cmd_0"/>
95+
<command_interface name="standard_digital_output_cmd_1"/>
96+
<command_interface name="standard_digital_output_cmd_2"/>
97+
<command_interface name="standard_digital_output_cmd_3"/>
98+
<command_interface name="standard_digital_output_cmd_4"/>
99+
<command_interface name="standard_digital_output_cmd_5"/>
100+
<command_interface name="standard_digital_output_cmd_6"/>
101+
<command_interface name="standard_digital_output_cmd_7"/>
102+
<command_interface name="standard_digital_output_cmd_8"/>
103+
<command_interface name="standard_digital_output_cmd_9"/>
104+
<command_interface name="standard_digital_output_cmd_10"/>
105+
<command_interface name="standard_digital_output_cmd_11"/>
106+
<command_interface name="standard_digital_output_cmd_12"/>
107+
<command_interface name="standard_digital_output_cmd_13"/>
108+
<command_interface name="standard_digital_output_cmd_14"/>
109+
<command_interface name="standard_digital_output_cmd_15"/>
110+
<command_interface name="standard_digital_output_cmd_16"/>
111+
<command_interface name="standard_digital_output_cmd_17"/>
112+
113+
<command_interface name="standard_analog_output_cmd_0"/>
114+
<command_interface name="standard_analog_output_cmd_1"/>
115+
116+
<command_interface name="tool_voltage_cmd"/>
117+
118+
<command_interface name="io_async_success"/>
119+
120+
<state_interface name="digital_output_0"/>
121+
<state_interface name="digital_output_1"/>
122+
<state_interface name="digital_output_2"/>
123+
<state_interface name="digital_output_3"/>
124+
<state_interface name="digital_output_4"/>
125+
<state_interface name="digital_output_5"/>
126+
<state_interface name="digital_output_6"/>
127+
<state_interface name="digital_output_7"/>
128+
<state_interface name="digital_output_8"/>
129+
<state_interface name="digital_output_9"/>
130+
<state_interface name="digital_output_10"/>
131+
<state_interface name="digital_output_11"/>
132+
<state_interface name="digital_output_12"/>
133+
<state_interface name="digital_output_13"/>
134+
<state_interface name="digital_output_14"/>
135+
<state_interface name="digital_output_15"/>
136+
<state_interface name="digital_output_16"/>
137+
<state_interface name="digital_output_17"/>
138+
139+
<state_interface name="digital_input_0"/>
140+
<state_interface name="digital_input_1"/>
141+
<state_interface name="digital_input_2"/>
142+
<state_interface name="digital_input_3"/>
143+
<state_interface name="digital_input_4"/>
144+
<state_interface name="digital_input_5"/>
145+
<state_interface name="digital_input_6"/>
146+
<state_interface name="digital_input_7"/>
147+
<state_interface name="digital_input_8"/>
148+
<state_interface name="digital_input_9"/>
149+
<state_interface name="digital_input_10"/>
150+
<state_interface name="digital_input_11"/>
151+
<state_interface name="digital_input_12"/>
152+
<state_interface name="digital_input_13"/>
153+
<state_interface name="digital_input_14"/>
154+
<state_interface name="digital_input_15"/>
155+
<state_interface name="digital_input_16"/>
156+
<state_interface name="digital_input_17"/>
157+
158+
<state_interface name="standard_analog_output_0"/>
159+
<state_interface name="standard_analog_output_1"/>
160+
161+
<state_interface name="standard_analog_input_0"/>
162+
<state_interface name="standard_analog_input_1"/>
163+
164+
<state_interface name="analog_io_type_0"/>
165+
<state_interface name="analog_io_type_1"/>
166+
<state_interface name="analog_io_type_2"/>
167+
<state_interface name="analog_io_type_3"/>
168+
169+
<state_interface name="tool_mode"/>
170+
<state_interface name="tool_output_voltage"/>
171+
<state_interface name="tool_output_current"/>
172+
<state_interface name="tool_temperature"/>
173+
174+
<state_interface name="tool_analog_input_0"/>
175+
<state_interface name="tool_analog_input_1"/>
176+
177+
<state_interface name="tool_analog_input_type_0"/>
178+
<state_interface name="tool_analog_input_type_1"/>
179+
180+
<state_interface name="robot_mode"/>
181+
<state_interface name="robot_status_bit_0"/>
182+
<state_interface name="robot_status_bit_1"/>
183+
<state_interface name="robot_status_bit_2"/>
184+
<state_interface name="robot_status_bit_3"/>
185+
186+
<state_interface name="safety_mode"/>
187+
<state_interface name="safety_status_bit_0"/>
188+
<state_interface name="safety_status_bit_1"/>
189+
<state_interface name="safety_status_bit_2"/>
190+
<state_interface name="safety_status_bit_3"/>
191+
<state_interface name="safety_status_bit_4"/>
192+
<state_interface name="safety_status_bit_5"/>
193+
<state_interface name="safety_status_bit_6"/>
194+
<state_interface name="safety_status_bit_7"/>
195+
<state_interface name="safety_status_bit_8"/>
196+
<state_interface name="safety_status_bit_9"/>
197+
<state_interface name="safety_status_bit_10"/>
198+
199+
<state_interface name="program_running"/>
200+
</gpio>
201+
202+
<gpio name="${tf_prefix}payload">
203+
<command_interface name="mass"/>
204+
<command_interface name="cog.x"/>
205+
<command_interface name="cog.y"/>
206+
<command_interface name="cog.z"/>
207+
<command_interface name="payload_async_success"/>
208+
</gpio>
209+
210+
<gpio name="${tf_prefix}resend_robot_program">
211+
<command_interface name="resend_robot_program_cmd"/>
212+
<command_interface name="resend_robot_program_async_success"/>
213+
</gpio>
214+
215+
<gpio name="${tf_prefix}hand_back_control">
216+
<command_interface name="hand_back_control_cmd"/>
217+
<command_interface name="hand_back_control_async_success"/>
218+
</gpio>
219+
220+
<gpio name="${tf_prefix}zero_ftsensor">
221+
<command_interface name="zero_ftsensor_cmd"/>
222+
<command_interface name="zero_ftsensor_async_success"/>
223+
</gpio>
224+
225+
<gpio name="${tf_prefix}system_interface">
226+
<state_interface name="initialized"/>
227+
</gpio>
228+
</ros2_control>
229+
</xacro:macro>
230+
</robot>

ur_robot_driver/urdf/ur.urdf.xacro

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
<?xml version="1.0"?>
2+
<robot xmlns:xacro="http://wiki.ros.org/xacro" name="$(arg name)">
3+
<!-- robot name parameter -->
4+
<xacro:arg name="name" default="ur"/>
5+
6+
<xacro:include filename="$(find ur_description)/urdf/ur_macro.xacro"/>
7+
<!-- ros2 control include -->
8+
<xacro:include filename="$(find ur_robot_driver)/urdf/ur.ros2_control.xacro" />
9+
<xacro:include filename="$(find ur_description)/urdf/inc/ur_transmissions.xacro" />
10+
11+
<!-- possible 'ur_type' values: ur3, ur3e, ur5, ur5e, ur10, ur10e, ur16e, ur20 -->
12+
<!-- the default value should raise an error in case this was called without defining the type -->
13+
<xacro:arg name="ur_type" default="urXe"/>
14+
15+
<!-- parameters -->
16+
<xacro:arg name="tf_prefix" default="" />
17+
<xacro:arg name="joint_limit_params" default="$(find ur_description)/config/$(arg ur_type)/joint_limits.yaml"/>
18+
<xacro:arg name="kinematics_params" default="$(find ur_description)/config/$(arg ur_type)/default_kinematics.yaml"/>
19+
<xacro:arg name="physical_params" default="$(find ur_description)/config/$(arg ur_type)/physical_parameters.yaml"/>
20+
<xacro:arg name="visual_params" default="$(find ur_description)/config/$(arg ur_type)/visual_parameters.yaml"/>
21+
<xacro:arg name="transmission_hw_interface" default=""/>
22+
<xacro:arg name="safety_limits" default="false"/>
23+
<xacro:arg name="safety_pos_margin" default="0.15"/>
24+
<xacro:arg name="safety_k_position" default="20"/>
25+
<!-- ros2_control related parameters -->
26+
<xacro:arg name="headless_mode" default="false" />
27+
<xacro:arg name="robot_ip" default="0.0.0.0" />
28+
<xacro:arg name="script_filename" default=""/>
29+
<xacro:arg name="output_recipe_filename" default=""/>
30+
<xacro:arg name="input_recipe_filename" default=""/>
31+
<xacro:arg name="reverse_ip" default="0.0.0.0"/>
32+
<xacro:arg name="script_command_port" default="50004"/>
33+
<xacro:arg name="reverse_port" default="50001"/>
34+
<xacro:arg name="script_sender_port" default="50002"/>
35+
<xacro:arg name="trajectory_port" default="50003"/>
36+
<!-- tool communication related parameters-->
37+
<xacro:arg name="use_tool_communication" default="false" />
38+
<xacro:arg name="tool_voltage" default="0" />
39+
<xacro:arg name="tool_parity" default="0" />
40+
<xacro:arg name="tool_baud_rate" default="115200" />
41+
<xacro:arg name="tool_stop_bits" default="1" />
42+
<xacro:arg name="tool_rx_idle_chars" default="1.5" />
43+
<xacro:arg name="tool_tx_idle_chars" default="3.5" />
44+
<xacro:arg name="tool_device_name" default="/tmp/ttyUR" />
45+
<xacro:arg name="tool_tcp_port" default="54321" />
46+
47+
<!-- Simulation parameters -->
48+
<xacro:arg name="use_mock_hardware" default="false" />
49+
<xacro:arg name="mock_sensor_commands" default="false" />
50+
<xacro:arg name="simulation_controllers" default="" />
51+
52+
<!-- initial position for simulations (Mock Hardware, Gazebo, Ignition) -->
53+
<xacro:arg name="initial_positions_file" default="$(find ur_description)/config/initial_positions.yaml"/>
54+
55+
<!-- convert to property to use substitution in function -->
56+
<xacro:property name="initial_positions_file" default="$(arg initial_positions_file)"/>
57+
58+
<!-- create link fixed to the "world" -->
59+
<link name="world" />
60+
61+
<xacro:ur_robot
62+
name="$(arg name)"
63+
tf_prefix="$(arg tf_prefix)"
64+
parent="world"
65+
joint_limits_parameters_file="$(arg joint_limit_params)"
66+
kinematics_parameters_file="$(arg kinematics_params)"
67+
physical_parameters_file="$(arg physical_params)"
68+
visual_parameters_file="$(arg visual_params)"
69+
safety_limits="$(arg safety_limits)"
70+
safety_pos_margin="$(arg safety_pos_margin)"
71+
safety_k_position="$(arg safety_k_position)"
72+
>
73+
<origin xyz="0 0 0" rpy="0 0 0" /> <!-- position robot in the world -->
74+
</xacro:ur_robot>
75+
76+
<!-- ros2 control instance -->
77+
<xacro:ur_ros2_control
78+
name="$(arg name)"
79+
tf_prefix="$(arg tf_prefix)"
80+
kinematics_parameters_file="$(arg kinematics_params)"
81+
transmission_hw_interface="$(arg transmission_hw_interface)"
82+
use_mock_hardware="$(arg use_mock_hardware)"
83+
mock_sensor_commands="$(arg mock_sensor_commands)"
84+
headless_mode="$(arg headless_mode)"
85+
initial_positions="${xacro.load_yaml(initial_positions_file)}"
86+
use_tool_communication="$(arg use_tool_communication)"
87+
tool_voltage="$(arg tool_voltage)"
88+
tool_parity="$(arg tool_parity)"
89+
tool_baud_rate="$(arg tool_baud_rate)"
90+
tool_stop_bits="$(arg tool_stop_bits)"
91+
tool_rx_idle_chars="$(arg tool_rx_idle_chars)"
92+
tool_tx_idle_chars="$(arg tool_tx_idle_chars)"
93+
tool_device_name="$(arg tool_device_name)"
94+
tool_tcp_port="$(arg tool_tcp_port)"
95+
robot_ip="$(arg robot_ip)"
96+
script_filename="$(arg script_filename)"
97+
output_recipe_filename="$(arg output_recipe_filename)"
98+
input_recipe_filename="$(arg input_recipe_filename)"
99+
reverse_ip="$(arg reverse_ip)"
100+
script_command_port="$(arg script_command_port)"
101+
reverse_port="$(arg reverse_port)"
102+
script_sender_port="$(arg script_sender_port)"
103+
trajectory_port="$(arg trajectory_port)"
104+
/>
105+
106+
</robot>

0 commit comments

Comments
 (0)