Skip to content

Commit e8e8423

Browse files
authored
Add support for UR15 (#1358)
1 parent d38be8e commit e8e8423

File tree

9 files changed

+114
-3
lines changed

9 files changed

+114
-3
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ For getting started, you'll basically need three steps:
124124
details.
125125

126126
```bash
127-
# Replace ur5e with one of ur3, ur3e, ur5, ur5e, ur7e, ur10, ur10e, ur12e, ur16e, ur20, ur30
127+
# Replace ur5e with one of ur3, ur3e, ur5, ur5e, ur7e, ur10, ur10e, ur12e, ur16e, ur15, ur20, ur30
128128
# Replace the IP address with the IP address of your actual robot / URSim
129129
ros2 launch ur_robot_driver ur_control.launch.py ur_type:=ur5e robot_ip:=192.168.56.101
130130
```

ur_moveit_config/launch/ur_moveit.launch.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ def declare_arguments():
7878
"ur10e",
7979
"ur12e",
8080
"ur16e",
81+
"ur15",
8182
"ur20",
8283
"ur30",
8384
],
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
controller_manager:
2+
ros__parameters:
3+
update_rate: 500 # Hz

ur_robot_driver/doc/usage/startup.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ nodes for UR robots. The only required arguments are the ``ur_type`` and ``robot
2525
$ ros2 launch ur_robot_driver ur_control.launch.py ur_type:=ur5e robot_ip:=192.168.56.101
2626
2727
Allowed ``ur_type`` strings: ``ur3``, ``ur3e``, ``ur5``, ``ur5e``, ``ur7e``, ``ur10``, ``ur10e``,
28-
``ur12e``, ``ur16e``, ``ur20``, ``ur30``.
28+
``ur12e``, ``ur16e``, ``ur15``, ``ur20``, ``ur30``.
2929

3030
Other important arguments are:
3131

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
# Copyright (c) 2021 PickNik, Inc.
2+
#
3+
# Redistribution and use in source and binary forms, with or without
4+
# modification, are permitted provided that the following conditions are met:
5+
#
6+
# * Redistributions of source code must retain the above copyright
7+
# notice, this list of conditions and the following disclaimer.
8+
#
9+
# * Redistributions in binary form must reproduce the above copyright
10+
# notice, this list of conditions and the following disclaimer in the
11+
# documentation and/or other materials provided with the distribution.
12+
#
13+
# * Neither the name of the {copyright_holder} nor the names of its
14+
# contributors may be used to endorse or promote products derived from
15+
# this software without specific prior written permission.
16+
#
17+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18+
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19+
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20+
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
21+
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22+
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23+
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24+
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25+
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26+
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27+
# POSSIBILITY OF SUCH DAMAGE.
28+
29+
#
30+
# Author: Denis Stogl
31+
32+
from launch import LaunchDescription
33+
from launch.actions import DeclareLaunchArgument, IncludeLaunchDescription
34+
from launch.launch_description_sources import PythonLaunchDescriptionSource
35+
from launch.substitutions import LaunchConfiguration, ThisLaunchFileDir
36+
37+
38+
def generate_launch_description():
39+
# Declare arguments
40+
declared_arguments = []
41+
declared_arguments.append(
42+
DeclareLaunchArgument(
43+
"robot_ip",
44+
description="IP address by which the robot can be reached.",
45+
)
46+
)
47+
declared_arguments.append(
48+
DeclareLaunchArgument(
49+
"use_mock_hardware",
50+
default_value="false",
51+
description="Start robot with mock hardware mirroring command to its states.",
52+
)
53+
)
54+
declared_arguments.append(
55+
DeclareLaunchArgument(
56+
"mock_sensor_commands",
57+
default_value="false",
58+
description="Enable mock command interfaces for sensors used for simple simulations. "
59+
"Used only if 'use_mock_hardware' parameter is true.",
60+
)
61+
)
62+
declared_arguments.append(
63+
DeclareLaunchArgument(
64+
"initial_joint_controller",
65+
default_value="scaled_joint_trajectory_controller",
66+
description="Initially loaded robot controller.",
67+
choices=[
68+
"scaled_joint_trajectory_controller",
69+
"joint_trajectory_controller",
70+
"forward_velocity_controller",
71+
"forward_position_controller",
72+
"freedrive_mode_controller",
73+
"passthrough_trajectory_controller",
74+
],
75+
)
76+
)
77+
declared_arguments.append(
78+
DeclareLaunchArgument(
79+
"activate_joint_controller",
80+
default_value="true",
81+
description="Activate loaded joint controller.",
82+
)
83+
)
84+
85+
# Initialize Arguments
86+
robot_ip = LaunchConfiguration("robot_ip")
87+
use_mock_hardware = LaunchConfiguration("use_mock_hardware")
88+
mock_sensor_commands = LaunchConfiguration("mock_sensor_commands")
89+
initial_joint_controller = LaunchConfiguration("initial_joint_controller")
90+
activate_joint_controller = LaunchConfiguration("activate_joint_controller")
91+
92+
base_launch = IncludeLaunchDescription(
93+
PythonLaunchDescriptionSource([ThisLaunchFileDir(), "/ur_control.launch.py"]),
94+
launch_arguments={
95+
"ur_type": "ur15",
96+
"robot_ip": robot_ip,
97+
"use_mock_hardware": use_mock_hardware,
98+
"mock_sensor_commands": mock_sensor_commands,
99+
"initial_joint_controller": initial_joint_controller,
100+
"activate_joint_controller": activate_joint_controller,
101+
}.items(),
102+
)
103+
104+
return LaunchDescription(declared_arguments + [base_launch])

ur_robot_driver/launch/ur_control.launch.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,7 @@ def generate_launch_description():
243243
"ur10e",
244244
"ur12e",
245245
"ur16e",
246+
"ur15",
246247
"ur20",
247248
"ur30",
248249
],

ur_robot_driver/launch/ur_rsp.launch.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,7 @@ def generate_launch_description():
206206
"ur10e",
207207
"ur12e",
208208
"ur16e",
209+
"ur15",
209210
"ur20",
210211
"ur30",
211212
],

ur_robot_driver/test/test_common.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -313,6 +313,7 @@ def _declare_launch_arguments():
313313
"ur10e",
314314
"ur12e",
315315
"ur16e",
316+
"ur15",
316317
"ur20",
317318
"ur30",
318319
],

ur_robot_driver/urdf/ur.urdf.xacro

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
<xacro:include filename="$(find ur_robot_driver)/urdf/ur.ros2_control.xacro" />
99
<xacro:include filename="$(find ur_description)/urdf/inc/ur_transmissions.xacro" />
1010

11-
<!-- possible 'ur_type' values: ur3, ur3e, ur5, ur5e, ur7e, ur10, ur10e, ur12e, ur16e, ur20 -->
11+
<!-- possible 'ur_type' values: ur3, ur3e, ur5, ur5e, ur7e, ur10, ur10e, ur12e, ur16e, ur15, ur20, ur30 -->
1212
<!-- the default value should raise an error in case this was called without defining the type -->
1313
<xacro:arg name="ur_type" default="urXe"/>
1414

0 commit comments

Comments
 (0)