diff --git a/my_dual_robot_cell/my_dual_robot_cell_control/CMakeLists.txt b/my_dual_robot_cell/my_dual_robot_cell_control/CMakeLists.txt new file mode 100644 index 0000000..9641ab9 --- /dev/null +++ b/my_dual_robot_cell/my_dual_robot_cell_control/CMakeLists.txt @@ -0,0 +1,11 @@ +cmake_minimum_required(VERSION 3.8) +project(my_dual_robot_cell_control) + +find_package(ament_cmake REQUIRED) + +install( + DIRECTORY launch config urdf + DESTINATION share/${PROJECT_NAME} +) + +ament_package() diff --git a/my_dual_robot_cell/my_dual_robot_cell_control/LICENSE b/my_dual_robot_cell/my_dual_robot_cell_control/LICENSE new file mode 100644 index 0000000..48fb689 --- /dev/null +++ b/my_dual_robot_cell/my_dual_robot_cell_control/LICENSE @@ -0,0 +1,29 @@ +BSD 3-Clause License + +Copyright (c) 2022, Universal Robots A/S +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/my_dual_robot_cell/my_dual_robot_cell_control/config/alice_calibration.yaml b/my_dual_robot_cell/my_dual_robot_cell_control/config/alice_calibration.yaml new file mode 100644 index 0000000..278abec --- /dev/null +++ b/my_dual_robot_cell/my_dual_robot_cell_control/config/alice_calibration.yaml @@ -0,0 +1,44 @@ +kinematics: + shoulder: + x: 0 + y: 0 + z: 0.15188497379686153 + roll: -0 + pitch: 0 + yaw: 6.0977137363254793e-05 + upper_arm: + x: -5.6533207234432926e-06 + y: 0 + z: 0 + roll: 1.570844251867735 + pitch: 0 + yaw: 2.541818406001163e-05 + forearm: + x: -0.24357369892909492 + y: 0 + z: 0 + roll: 3.1408819727448281 + pitch: 3.1414601607728438 + yaw: -3.1415265155090113 + wrist_1: + x: -0.21292841478821867 + y: 0.00048506402454531479 + z: 0.11301075109662011 + roll: 3.1373004863304383 + pitch: 3.1363886827765697 + yaw: 3.1415791419793657 + wrist_2: + x: 4.074182080180165e-05 + y: -0.085310893242290478 + z: -6.4346805950626749e-05 + roll: 1.5715505891323607 + pitch: 0 + yaw: -1.1414933636491948e-05 + wrist_3: + x: -7.319426521397714e-05 + y: 0.08232894752301384 + z: -5.8521744863255091e-05 + roll: 1.5700854986261004 + pitch: 3.1415926535897931 + yaw: -3.1415870300000677 + hash: calib_3443727564195709335 \ No newline at end of file diff --git a/my_dual_robot_cell/my_dual_robot_cell_control/config/bob_calibration.yaml b/my_dual_robot_cell/my_dual_robot_cell_control/config/bob_calibration.yaml new file mode 100644 index 0000000..07d02f8 --- /dev/null +++ b/my_dual_robot_cell/my_dual_robot_cell_control/config/bob_calibration.yaml @@ -0,0 +1,44 @@ +kinematics: + shoulder: + x: 0 + y: 0 + z: 0.15192390485501492 + roll: -0 + pitch: 0 + yaw: 7.5207672895458863e-05 + upper_arm: + x: 1.1565754681822927e-07 + y: 0 + z: 0 + roll: 1.5701230398196422 + pitch: 0 + yaw: -3.745754755790643e-05 + forearm: + x: -0.24342623565759611 + y: 0 + z: 0 + roll: 0.0062667292139209178 + pitch: -0.0013839232587116385 + yaw: 3.5263175677186283e-05 + wrist_1: + x: -0.21319918045377464 + y: -0.00042101985050556432 + z: 0.11194857450023041 + roll: 0.0037608148871306722 + pitch: 0.00014433964301166516 + yaw: -5.7788592498697277e-05 + wrist_2: + x: 3.3301180434358473e-05 + y: -0.085304702494341758 + z: -2.7251181339165215e-05 + roll: 1.5711157837487961 + pitch: 0 + yaw: -3.3083428877200004e-05 + wrist_3: + x: -4.675513506427485e-05 + y: 0.082256832990903556 + z: -5.7204020078096673e-05 + roll: 1.5701008950748028 + pitch: 3.1415926535897931 + yaw: 3.1415605336065866 + hash: calib_10683367749926797482 \ No newline at end of file diff --git a/my_dual_robot_cell/my_dual_robot_cell_control/config/combined_controllers.yaml b/my_dual_robot_cell/my_dual_robot_cell_control/config/combined_controllers.yaml new file mode 100644 index 0000000..143c150 --- /dev/null +++ b/my_dual_robot_cell/my_dual_robot_cell_control/config/combined_controllers.yaml @@ -0,0 +1,244 @@ +controller_manager: + ros__parameters: + alice_joint_state_broadcaster: + type: joint_state_broadcaster/JointStateBroadcaster + + bob_joint_state_broadcaster: + type: joint_state_broadcaster/JointStateBroadcaster + + alice_io_and_status_controller: + type: ur_controllers/GPIOController + + bob_io_and_status_controller: + type: ur_controllers/GPIOController + + alice_speed_scaling_state_broadcaster: + type: ur_controllers/SpeedScalingStateBroadcaster + + bob_speed_scaling_state_broadcaster: + type: ur_controllers/SpeedScalingStateBroadcaster + + alice_force_torque_sensor_broadcaster: + type: force_torque_sensor_broadcaster/ForceTorqueSensorBroadcaster + + bob_force_torque_sensor_broadcaster: + type: force_torque_sensor_broadcaster/ForceTorqueSensorBroadcaster + + alice_joint_trajectory_controller: + type: joint_trajectory_controller/JointTrajectoryController + + bob_trajectory_controller: + type: joint_trajectory_controller/JointTrajectoryController + + alice_scaled_joint_trajectory_controller: + type: ur_controllers/ScaledJointTrajectoryController + + bob_scaled_joint_trajectory_controller: + type: ur_controllers/ScaledJointTrajectoryController + + forward_velocity_controller: + type: velocity_controllers/JointGroupVelocityController + + alice_forward_position_controller: + type: position_controllers/JointGroupPositionController + + bob_forward_position_controller: + type: position_controllers/JointGroupPositionController + + +alice_speed_scaling_state_broadcaster: + ros__parameters: + state_publish_rate: 100.0 + tf_prefix: "alice_" + +bob_speed_scaling_state_broadcaster: + ros__parameters: + state_publish_rate: 100.0 + tf_prefix: "bob_" + +alice_io_and_status_controller: + ros__parameters: + tf_prefix: "alice_" + +bob_io_and_status_controller: + ros__parameters: + tf_prefix: "bob_" + +alice_force_torque_sensor_broadcaster: + ros__parameters: + sensor_name: alice_tcp_fts_sensor + state_interface_names: + - force.x + - force.y + - force.z + - torque.x + - torque.y + - torque.z + frame_id: bob_tool0 + topic_name: alice_ft_data + +bob_force_torque_sensor_broadcaster: + ros__parameters: + sensor_name: bob_tcp_fts_sensor + state_interface_names: + - force.x + - force.y + - force.z + - torque.x + - torque.y + - torque.z + frame_id: bob_tool0 + topic_name: bob_ft_data + + +alice_joint_trajectory_controller: + ros__parameters: + joints: + - alice_shoulder_pan_joint + - alice_shoulder_lift_joint + - alice_elbow_joint + - alice_wrist_1_joint + - alice_wrist_2_joint + - alice_wrist_3_joint + command_interfaces: + - position + state_interfaces: + - position + - velocity + state_publish_rate: 100.0 + action_monitor_rate: 20.0 + allow_partial_joints_goal: false + constraints: + stopped_velocity_tolerance: 0.2 + goal_time: 0.0 + alice_shoulder_pan_joint: { trajectory: 0.2, goal: 0.1 } + alice_shoulder_lift_joint: { trajectory: 0.2, goal: 0.1 } + alice_elbow_joint: { trajectory: 0.2, goal: 0.1 } + alice_wrist_1_joint: { trajectory: 0.2, goal: 0.1 } + alice_wrist_2_joint: { trajectory: 0.2, goal: 0.1 } + alice_wrist_3_joint: { trajectory: 0.2, goal: 0.1 } + +bob_joint_trajectory_controller: + ros__parameters: + joints: + - bob_shoulder_pan_joint + - bob_shoulder_lift_joint + - bob_elbow_joint + - bob_wrist_1_joint + - bob_wrist_2_joint + - bob_wrist_3_joint + command_interfaces: + - position + state_interfaces: + - position + - velocity + state_publish_rate: 100.0 + action_monitor_rate: 20.0 + allow_partial_joints_goal: false + constraints: + stopped_velocity_tolerance: 0.2 + goal_time: 0.0 + bob_shoulder_pan_joint: { trajectory: 0.2, goal: 0.1 } + bob_shoulder_lift_joint: { trajectory: 0.2, goal: 0.1 } + bob_elbow_joint: { trajectory: 0.2, goal: 0.1 } + bob_wrist_1_joint: { trajectory: 0.2, goal: 0.1 } + bob_wrist_2_joint: { trajectory: 0.2, goal: 0.1 } + bob_wrist_3_joint: { trajectory: 0.2, goal: 0.1 } + +alice_scaled_joint_trajectory_controller: + ros__parameters: + joints: + - alice_shoulder_pan_joint + - alice_shoulder_lift_joint + - alice_elbow_joint + - alice_wrist_1_joint + - alice_wrist_2_joint + - alice_wrist_3_joint + command_interfaces: + - position + state_interfaces: + - position + - velocity + state_publish_rate: 100.0 + action_monitor_rate: 20.0 + allow_partial_joints_goal: false + constraints: + stopped_velocity_tolerance: 0.2 + goal_time: 0.0 + alice_shoulder_pan_joint: { trajectory: 0.2, goal: 0.1 } + alice_shoulder_lift_joint: { trajectory: 0.2, goal: 0.1 } + alice_elbow_joint: { trajectory: 0.2, goal: 0.1 } + alice_wrist_1_joint: { trajectory: 0.2, goal: 0.1 } + alice_wrist_2_joint: { trajectory: 0.2, goal: 0.1 } + alice_wrist_3_joint: { trajectory: 0.2, goal: 0.1 } + speed_scaling_interface_name: alice_speed_scaling/speed_scaling_factor + +bob_scaled_joint_trajectory_controller: + ros__parameters: + joints: + - bob_shoulder_pan_joint + - bob_shoulder_lift_joint + - bob_elbow_joint + - bob_wrist_1_joint + - bob_wrist_2_joint + - bob_wrist_3_joint + command_interfaces: + - position + state_interfaces: + - position + - velocity + state_publish_rate: 100.0 + action_monitor_rate: 20.0 + allow_partial_joints_goal: false + constraints: + stopped_velocity_tolerance: 0.2 + goal_time: 0.0 + bob_shoulder_pan_joint: { trajectory: 0.2, goal: 0.1 } + bob_shoulder_lift_joint: { trajectory: 0.2, goal: 0.1 } + bob_elbow_joint: { trajectory: 0.2, goal: 0.1 } + bob_wrist_1_joint: { trajectory: 0.2, goal: 0.1 } + bob_wrist_2_joint: { trajectory: 0.2, goal: 0.1 } + bob_wrist_3_joint: { trajectory: 0.2, goal: 0.1 } + speed_scaling_interface_name: bob_speed_scaling/speed_scaling_factor + +alice_forward_velocity_controller: + ros__parameters: + joints: + - alice_shoulder_pan_joint + - alice_shoulder_lift_joint + - alice_elbow_joint + - alice_wrist_1_joint + - alice_wrist_2_joint + - alice_wrist_3_joint + interface_name: velocity + +bob_forward_velocity_controller: + ros__parameters: + joints: + - bob_shoulder_pan_joint + - bob_shoulder_lift_joint + - bob_elbow_joint + - bob_wrist_1_joint + - bob_wrist_2_joint + - bob_wrist_3_joint + interface_name: velocity + +alice_forward_position_controller: + ros__parameters: + joints: + - alice_shoulder_pan_joint + - alice_shoulder_lift_joint + - alice_elbow_joint + - alice_wrist_1_joint + - alice_wrist_2_joint + - alice_wrist_3_joint + +bob_forward_position_controller: + ros__parameters: + joints: + - bob_shoulder_pan_joint + - bob_shoulder_lift_joint + - bob_elbow_joint + - bob_wrist_1_joint + - bob_wrist_2_joint + - bob_wrist_3_joint \ No newline at end of file diff --git a/my_dual_robot_cell/my_dual_robot_cell_control/config/update_rate.yaml b/my_dual_robot_cell/my_dual_robot_cell_control/config/update_rate.yaml new file mode 100644 index 0000000..7525e1e --- /dev/null +++ b/my_dual_robot_cell/my_dual_robot_cell_control/config/update_rate.yaml @@ -0,0 +1,3 @@ +controller_manager: + ros__parameters: + update_rate: 125 # Hz diff --git a/my_dual_robot_cell/my_dual_robot_cell_control/launch/rsp.launch.py b/my_dual_robot_cell/my_dual_robot_cell_control/launch/rsp.launch.py new file mode 100644 index 0000000..b02e58f --- /dev/null +++ b/my_dual_robot_cell/my_dual_robot_cell_control/launch/rsp.launch.py @@ -0,0 +1,203 @@ +from launch import LaunchDescription +from launch.actions import DeclareLaunchArgument +from launch.substitutions import (Command, FindExecutable, LaunchConfiguration, + PathJoinSubstitution) +from launch_ros.actions import Node +from launch_ros.substitutions import FindPackageShare + + +def generate_launch_description(): + alice_ur_type = LaunchConfiguration("alice_ur_type") + bob_ur_type = LaunchConfiguration("bob_ur_type") + + alice_robot_ip = LaunchConfiguration("alice_robot_ip") + bob_robot_ip = LaunchConfiguration("bob_robot_ip") + + alice_use_mock_hardware = LaunchConfiguration("alice_use_mock_hardware") + alice_mock_sensor_commands = LaunchConfiguration("alice_mock_sensor_commands") + bob_use_mock_hardware = LaunchConfiguration("bob_use_mock_hardware") + bob_mock_sensor_commands = LaunchConfiguration("bob_mock_sensor_commands") + + headless_mode = LaunchConfiguration("headless_mode") + + alice_kinematics_parameters_file = LaunchConfiguration( + "alice_kinematics_parameters_file" + ) + bob_kinematics_parameters_file = LaunchConfiguration( + "bob_kinematics_parameters_file" + ) + + robot_description_content = Command( + [ + PathJoinSubstitution([FindExecutable(name="xacro")]), + " ", + PathJoinSubstitution( + [ + FindPackageShare("my_dual_robot_cell_control"), + "urdf", + "my_dual_robot_cell_controlled.urdf.xacro", + ] + ), + " ", + "alice_robot_ip:=", + alice_robot_ip, + " ", + "bob_robot_ip:=", + bob_robot_ip, + " ", + "alice_ur_type:=", + alice_ur_type, + " ", + "bob_ur_type:=", + bob_ur_type, + " ", + "alice_use_mock_hardware:=", + alice_use_mock_hardware, + " ", + "bob_use_mock_hardware:=", + bob_use_mock_hardware, + " ", + "alice_kinematics_parameters_file:=", + alice_kinematics_parameters_file, + " ", + "bob_kinematics_parameters_file:=", + bob_kinematics_parameters_file, + " ", + "alice_mock_sensor_commands:=", + alice_mock_sensor_commands, + " ", + "bob_mock_sensor_commands:=", + bob_mock_sensor_commands, + " ", + "headless_mode:=", + headless_mode, + ] + ) + robot_description = {"robot_description": robot_description_content} + + declared_arguments = [] + declared_arguments.append( + DeclareLaunchArgument( + "alice_ur_type", + description="Type/series of used UR robot.", + choices=[ + "ur3", + "ur3e", + "ur5", + "ur5e", + "ur10", + "ur10e", + "ur16e", + "ur20", + "ur30", + ], + default_value="ur3", + ) + ) + declared_arguments.append( + DeclareLaunchArgument( + "bob_ur_type", + description="Type/series of used UR robot.", + choices=[ + "ur3", + "ur3e", + "ur5", + "ur5e", + "ur10", + "ur10e", + "ur16e", + "ur20", + "ur30", + ], + default_value="ur3", + ) + ) + declared_arguments.append( + DeclareLaunchArgument( + "alice_robot_ip", + default_value="192.168.0.101", + description="IP address by which the robot can be reached.", + ) + ) + declared_arguments.append( + DeclareLaunchArgument( + "bob_robot_ip", + default_value="192.168.0.100", + description="IP address by which the robot can be reached.", + ) + ) + declared_arguments.append( + DeclareLaunchArgument( + "alice_kinematics_parameters_file", + default_value=PathJoinSubstitution( + [ + FindPackageShare("my_dual_robot_cell_control"), + "config", + "alice_calibration.yaml", + ] + ), + description="The calibration configuration of the actual robot used.", + ) + ) + declared_arguments.append( + DeclareLaunchArgument( + "bob_kinematics_parameters_file", + default_value=PathJoinSubstitution( + [ + FindPackageShare("my_dual_robot_cell_control"), + "config", + "bob_calibration.yaml", + ] + ), + description="The calibration configuration of the actual robot used.", + ) + ) + declared_arguments.append( + DeclareLaunchArgument( + "alice_use_mock_hardware", + default_value="false", + description="Start robot with mock hardware mirroring command to its states.", + ) + ) + declared_arguments.append( + DeclareLaunchArgument( + "bob_use_mock_hardware", + default_value="false", + description="Start robot with mock hardware mirroring command to its states.", + ) + ) + declared_arguments.append( + DeclareLaunchArgument( + "alice_mock_sensor_commands", + default_value="false", + description="Enable mock command interfaces for sensors used for simple simulations. " + "Used only if 'use_mock_hardware' parameter is true.", + ) + ) + declared_arguments.append( + DeclareLaunchArgument( + "bob_mock_sensor_commands", + default_value="false", + description="Enable mock command interfaces for sensors used for simple simulations. " + "Used only if 'use_mock_hardware' parameter is true.", + ) + ) + declared_arguments.append( + DeclareLaunchArgument( + "headless_mode", + default_value="false", + description="Enable headless mode for robot control", + ) + ) + + return LaunchDescription( + declared_arguments + + [ + Node( + package="robot_state_publisher", + executable="robot_state_publisher", + output="both", + parameters=[robot_description], + ), + ] + ) diff --git a/my_dual_robot_cell/my_dual_robot_cell_control/launch/start_robots.launch.py b/my_dual_robot_cell/my_dual_robot_cell_control/launch/start_robots.launch.py new file mode 100644 index 0000000..0682a55 --- /dev/null +++ b/my_dual_robot_cell/my_dual_robot_cell_control/launch/start_robots.launch.py @@ -0,0 +1,461 @@ +from launch import LaunchDescription +from launch.actions import DeclareLaunchArgument, IncludeLaunchDescription +from launch.conditions import IfCondition, UnlessCondition +from launch.launch_description_sources import AnyLaunchDescriptionSource +from launch.substitutions import LaunchConfiguration, PathJoinSubstitution +from launch_ros.actions import Node +from launch_ros.parameter_descriptions import ParameterFile +from launch_ros.substitutions import FindPackageShare + + +def launch_setup(): + # Initialize Arguments + alice_ur_type = LaunchConfiguration("alice_ur_type") + bob_ur_type = LaunchConfiguration("bob_ur_type") + + alice_robot_ip = LaunchConfiguration("alice_robot_ip") + bob_robot_ip = LaunchConfiguration("bob_robot_ip") + + # General arguments + controllers_file = LaunchConfiguration("controllers_file") + controller_spawner_timeout = LaunchConfiguration("controller_spawner_timeout") + description_launchfile = LaunchConfiguration("description_launchfile") + launch_rviz = LaunchConfiguration("launch_rviz") + rviz_config_file = LaunchConfiguration("rviz_config_file") + headless_mode = LaunchConfiguration("headless_mode") + + # Robot specific arguments + alice_use_mock_hardware = LaunchConfiguration("alice_use_mock_hardware") + alice_mock_sensor_commands = LaunchConfiguration("alice_mock_sensor_commands") + alice_initial_joint_controller = LaunchConfiguration("alice_initial_joint_controller") + alice_activate_joint_controller = LaunchConfiguration("alice_activate_joint_controller") + alice_launch_dashboard_client = LaunchConfiguration("alice_launch_dashboard_client") + + bob_use_mock_hardware = LaunchConfiguration("bob_use_mock_hardware") + bob_mock_sensor_commands = LaunchConfiguration("bob_mock_sensor_commands") + bob_initial_joint_controller = LaunchConfiguration("bob_initial_joint_controller") + bob_activate_joint_controller = LaunchConfiguration("bob_activate_joint_controller") + bob_launch_dashboard_client = LaunchConfiguration("bob_launch_dashboard_client") + + # Single controller manager comprising of controllers for both arms + control_node = Node( + package="controller_manager", + executable="ros2_control_node", + parameters=[ + LaunchConfiguration("update_rate_config_file"), + ParameterFile(controllers_file, allow_substs=True), + # We use the tf_prefix as substitution in there, so that's why we keep it as an + # argument for this launchfile + ], + output="screen", + ) + + alice_dashboard_client_node = Node( + package="ur_robot_driver", + condition=IfCondition(alice_launch_dashboard_client) and UnlessCondition(alice_use_mock_hardware), + executable="dashboard_client", + name="dashboard_client", + namespace="alice", + output="screen", + emulate_tty=True, + parameters=[{"robot_ip": alice_robot_ip}], + ) + + bob_dashboard_client_node = Node( + package="ur_robot_driver", + condition=IfCondition(bob_launch_dashboard_client) and UnlessCondition(bob_use_mock_hardware), + executable="dashboard_client", + name="dashboard_client", + namespace="bob", + output="screen", + emulate_tty=True, + parameters=[{"robot_ip": bob_robot_ip}], + ) + + alice_urscript_interface = Node( + package="ur_robot_driver", + executable="urscript_interface", + namespace="alice", + parameters=[{"robot_ip": alice_robot_ip}], + output="screen", + condition=UnlessCondition(alice_use_mock_hardware), + ) + + bob_urscript_interface = Node( + package="ur_robot_driver", + executable="urscript_interface", + namespace="bob", + parameters=[{"robot_ip": bob_robot_ip}], + output="screen", + condition=UnlessCondition(bob_use_mock_hardware), + ) + + alice_controller_stopper_node = Node( + package="ur_robot_driver", + executable="controller_stopper_node", + namespace="alice", + name="controller_stopper", + output="screen", + emulate_tty=True, + condition=UnlessCondition(alice_use_mock_hardware), + parameters=[ + {"headless_mode": headless_mode}, + {"joint_controller_active": alice_activate_joint_controller}, + { + "consistent_controllers": [ + "alice_io_and_status_controller", + "alice_force_torque_sensor_broadcaster", + "alice_joint_state_broadcaster", + "alice_speed_scaling_state_broadcaster", + ] + }, + ], + ) + + bob_controller_stopper_node = Node( + package="ur_robot_driver", + executable="controller_stopper_node", + namespace="bob", + name="controller_stopper", + output="screen", + emulate_tty=True, + condition=UnlessCondition(bob_use_mock_hardware), + parameters=[ + {"headless_mode": headless_mode}, + {"joint_controller_active": bob_activate_joint_controller}, + { + "consistent_controllers": [ + "bob_io_and_status_controller", + "bob_force_torque_sensor_broadcaster", + "bob_joint_state_broadcaster", + "bob_speed_scaling_state_broadcaster", + ] + }, + ], + ) + + rviz_node = Node( + package="rviz2", + condition=IfCondition(launch_rviz), + executable="rviz2", + name="rviz2", + output="log", + arguments=["-d", rviz_config_file], + ) + + # Spawn controllers + def controller_spawner(controllers, active=True): + inactive_flags = ["--inactive"] if not active else [] + return Node( + package="controller_manager", + executable="spawner", + arguments=[ + "--controller-manager", + "/controller_manager", + "--controller-manager-timeout", + controller_spawner_timeout, + ] + + inactive_flags + + controllers, + ) + + controllers_active = [ + "alice_joint_state_broadcaster", + "bob_joint_state_broadcaster", + "alice_io_and_status_controller", + "bob_io_and_status_controller", + "alice_speed_scaling_state_broadcaster", + "bob_speed_scaling_state_broadcaster", + "alice_force_torque_sensor_broadcaster", + "bob_force_torque_sensor_broadcaster", + ] + controllers_inactive = [ + "alice_forward_position_controller", + "bob_forward_position_controller", + ] + + controller_spawners = [controller_spawner(controllers_active)] + [ + controller_spawner(controllers_inactive, active=False) + ] + + # There may be other controllers of the joints, but this is the initially-started one + alice_initial_joint_controller_spawner_started = Node( + package="controller_manager", + executable="spawner", + arguments=[ + alice_initial_joint_controller, + "-c", + "/controller_manager", + "--controller-manager-timeout", + controller_spawner_timeout, + ], + condition=IfCondition(alice_activate_joint_controller), + ) + bob_initial_joint_controller_spawner_started = Node( + package="controller_manager", + executable="spawner", + arguments=[ + bob_initial_joint_controller, + "-c", + "/controller_manager", + "--controller-manager-timeout", + controller_spawner_timeout, + ], + condition=IfCondition(bob_activate_joint_controller), + ) + alice_initial_joint_controller_spawner_stopped = Node( + package="controller_manager", + executable="spawner", + arguments=[ + alice_initial_joint_controller, + "-c", + "/controller_manager", + "--controller-manager-timeout", + controller_spawner_timeout, + "--inactive", + ], + condition=UnlessCondition(alice_activate_joint_controller), + ) + bob_initial_joint_controller_spawner_stopped = Node( + package="controller_manager", + executable="spawner", + arguments=[ + bob_initial_joint_controller, + "-c", + "/controller_manager", + "--controller-manager-timeout", + controller_spawner_timeout, + "--inactive", + ], + condition=UnlessCondition(bob_activate_joint_controller), + ) + + rsp = IncludeLaunchDescription( + AnyLaunchDescriptionSource(description_launchfile), + launch_arguments={ + "alice_robot_ip": alice_robot_ip, + "bob_robot_ip": bob_robot_ip, + "alice_ur_type": alice_ur_type, + "bob_ur_type": bob_ur_type, + }.items(), + ) + + nodes_to_start = [ + control_node, + alice_dashboard_client_node, + bob_dashboard_client_node, + alice_controller_stopper_node, + bob_controller_stopper_node, + alice_urscript_interface, + bob_urscript_interface, + rsp, + rviz_node, + alice_initial_joint_controller_spawner_stopped, + bob_initial_joint_controller_spawner_stopped, + alice_initial_joint_controller_spawner_started, + bob_initial_joint_controller_spawner_started, + ] + controller_spawners + + return nodes_to_start + + +def generate_launch_description(): + declared_arguments = [] + # UR specific arguments + declared_arguments.append( + DeclareLaunchArgument( + "alice_ur_type", + description="Type/series of used UR robot.", + choices=[ + "ur3", + "ur3e", + "ur5", + "ur5e", + "ur10", + "ur10e", + "ur16e", + "ur20", + "ur30", + ], + default_value="ur3", + ) + ) + declared_arguments.append( + DeclareLaunchArgument( + "bob_ur_type", + description="Type/series of used UR robot.", + choices=[ + "ur3", + "ur3e", + "ur5", + "ur5e", + "ur10", + "ur10e", + "ur16e", + "ur20", + "ur30", + ], + default_value="ur3", + ) + ) + declared_arguments.append( + DeclareLaunchArgument( + "alice_robot_ip", + default_value="192.168.0.101", + description="IP address by which the robot can be reached.", + ) + ) + declared_arguments.append( + DeclareLaunchArgument( + "bob_robot_ip", + default_value="192.168.0.100", + description="IP address by which the robot can be reached.", + ) + ) + + # General arguments + declared_arguments.append( + DeclareLaunchArgument( + "controllers_file", + default_value=PathJoinSubstitution( + [ + FindPackageShare("my_dual_robot_cell_control"), + "config", + "combined_controllers.yaml", + ] + ), + description="YAML file with the controllers configuration.", + ) + ) + declared_arguments.append( + DeclareLaunchArgument( + "description_launchfile", + default_value=PathJoinSubstitution( + [ + FindPackageShare("my_dual_robot_cell_control"), + "launch", + "rsp.launch.py", + ] + ), + description="Launchfile (absolute path) providing the description. " + "The launchfile has to start a robot_state_publisher node that " + "publishes the description topic.", + ) + ) + declared_arguments.append( + DeclareLaunchArgument( + "alice_use_mock_hardware", + default_value="false", + description="Start robot with mock hardware mirroring command to its states.", + ) + ) + declared_arguments.append( + DeclareLaunchArgument( + "bob_use_mock_hardware", + default_value="false", + description="Start robot with mock hardware mirroring command to its states.", + ) + ) + declared_arguments.append( + DeclareLaunchArgument( + "alice_mock_sensor_commands", + default_value="false", + description="Enable mock command interfaces for sensors used for simple simulations. " + "Used only if 'use_mock_hardware' parameter is true.", + ) + ) + declared_arguments.append( + DeclareLaunchArgument( + "bob_mock_sensor_commands", + default_value="false", + description="Enable mock command interfaces for sensors used for simple simulations. " + "Used only if 'use_mock_hardware' parameter is true.", + ) + ) + declared_arguments.append( + DeclareLaunchArgument( + "headless_mode", + default_value="false", + description="Enable headless mode for robot control for both arms.", + ) + ) + declared_arguments.append( + DeclareLaunchArgument( + "controller_spawner_timeout", + default_value="10", + description="Timeout used when spawning controllers.", + ) + ) + declared_arguments.append( + DeclareLaunchArgument( + "alice_initial_joint_controller", + default_value="alice_scaled_joint_trajectory_controller", + description="Initially loaded robot controller for the alice robot arm.", + ) + ) + declared_arguments.append( + DeclareLaunchArgument( + "bob_initial_joint_controller", + default_value="bob_scaled_joint_trajectory_controller", + description="Initially loaded robot controller for the bob robot arm.", + ) + ) + declared_arguments.append( + DeclareLaunchArgument( + "alice_activate_joint_controller", + default_value="true", + description="Activate loaded joint controller for the alice robot arm.", + ) + ) + declared_arguments.append( + DeclareLaunchArgument( + "bob_activate_joint_controller", + default_value="true", + description="Activate loaded joint controller for the bob robot arm.", + ) + ) + declared_arguments.append( + DeclareLaunchArgument( + "launch_rviz", default_value="true", description="Launch RViz?" + ) + ) + declared_arguments.append( + DeclareLaunchArgument( + "rviz_config_file", + default_value=PathJoinSubstitution( + [FindPackageShare("my_dual_robot_cell_description"), "rviz", "urdf.rviz"] + ), + description="RViz config file (absolute path) to use when launching rviz.", + ) + ) + declared_arguments.append( + DeclareLaunchArgument( + "alice_launch_dashboard_client", + default_value="true", + description="Launch Dashboard Client?", + ) + ) + declared_arguments.append( + DeclareLaunchArgument( + "bob_launch_dashboard_client", + default_value="true", + description="Launch Dashboard Client?", + ) + ) + + declared_arguments.append( + DeclareLaunchArgument( + name="update_rate_config_file", + default_value=[ + PathJoinSubstitution( + [ + FindPackageShare("my_dual_robot_cell_control"), + "config", + ] + ), + "/", + "update_rate.yaml", + ], + ) + ) + return LaunchDescription(declared_arguments + launch_setup()) diff --git a/my_dual_robot_cell/my_dual_robot_cell_control/package.xml b/my_dual_robot_cell/my_dual_robot_cell_control/package.xml new file mode 100644 index 0000000..d8abebf --- /dev/null +++ b/my_dual_robot_cell/my_dual_robot_cell_control/package.xml @@ -0,0 +1,28 @@ + + + + my_dual_robot_cell_control + 1.0.0 + ros2_control setup + Felix Durchdewald + BSD-3-Clause + + ament_cmake + + + joint_state_broadcaster + joint_trajectory_controller + position_controllers + robot_state_publisher + my_dual_robot_cell_description + ur_controllers + ur_robot_driver + ur_client_library + xacro + controller_manager + + + + ament_cmake + + diff --git a/my_dual_robot_cell/my_dual_robot_cell_control/urdf/my_dual_robot_cell_controlled.urdf.xacro b/my_dual_robot_cell/my_dual_robot_cell_control/urdf/my_dual_robot_cell_controlled.urdf.xacro new file mode 100644 index 0000000..8a67c77 --- /dev/null +++ b/my_dual_robot_cell/my_dual_robot_cell_control/urdf/my_dual_robot_cell_controlled.urdf.xacro @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/my_dual_robot_cell/my_dual_robot_cell_description/CMakeLists.txt b/my_dual_robot_cell/my_dual_robot_cell_description/CMakeLists.txt new file mode 100644 index 0000000..9062bb4 --- /dev/null +++ b/my_dual_robot_cell/my_dual_robot_cell_description/CMakeLists.txt @@ -0,0 +1,11 @@ +cmake_minimum_required(VERSION 3.5) +project(my_dual_robot_cell_description) + +find_package(ament_cmake REQUIRED) + +install( + DIRECTORY launch meshes rviz urdf + DESTINATION share/${PROJECT_NAME} +) + +ament_package() diff --git a/my_dual_robot_cell/my_dual_robot_cell_description/LICENSE b/my_dual_robot_cell/my_dual_robot_cell_description/LICENSE new file mode 100644 index 0000000..48fb689 --- /dev/null +++ b/my_dual_robot_cell/my_dual_robot_cell_description/LICENSE @@ -0,0 +1,29 @@ +BSD 3-Clause License + +Copyright (c) 2022, Universal Robots A/S +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/my_dual_robot_cell/my_dual_robot_cell_description/UR_LICENSE.txt b/my_dual_robot_cell/my_dual_robot_cell_description/UR_LICENSE.txt new file mode 100644 index 0000000..cba4e38 --- /dev/null +++ b/my_dual_robot_cell/my_dual_robot_cell_description/UR_LICENSE.txt @@ -0,0 +1,84 @@ +TERMS AND CONDITIONS FOR USE OF GRAPHICAL DOCUMENTATION + +Version: 1.01 / release date: 2023-09-12 + +These Terms and Conditions for Use of Graphical Documentation (the “T&Cs”) govern your use of graphical files and documents*, including the contents hereof, (the “Graphical Documentation”) provided or made available to you by Universal Robots A/S (“Universal Robots”) for the purposes of creating simulations, visualizations, digital representations, path planning, collision avoidance and algorithms of or for Universal Robots’ products. The T&Cs constitute a binding agreement between you and Universal Robots. By accessing, storing, copying, sharing, opening, or otherwise using or disposing of the Graphical Documentation, you acknowledge that you are bound by the T&Cs. + +1. PERMITTED USE OF THE GRAPHICAL DOCUMENTATION + +1.1. You may use the Graphical Documentation for the purposes of creating simulations, visualizations, digital representations, path planning, collision avoidance and algorithms of or for Universal Robots’ products, provided that your use does not constitute comparative advertising and is not otherwise unfair, disloyal, or disparaging to Universal Robots. + +1.2. Hobbyists, students and/or researchers are allowed to use the Graphical Documentation to create models or similar solely for non-commercial purposes as part of their hobby, academic studies, or research. However, no one is allowed to use the Graphical Documentation to create a physical model or similar for commercial purposes, nor to create or improve a product that is capable of competing, either directly or indirectly, with any of Universal Robots’ or its affiliates’ current or future robots. + +1.3. You are permitted to create a product or solution that simulates, visualizes, or digitally represents a Universal Robots product, regardless of the origin of the underlying software, and regardless of whether Universal Robots or its affiliates have released a product that competes with the underlying software. However, you may not in any way use the Graphical Documentation to create a product or solution that simulates, visualizes or represents a product that is capable of competing, either directly or indirectly, with any of Universal Robots’ or its affiliates’ current or future products without Universal Robots’ prior written permission. + +1.4. You may share the Graphical Documentation or any whole or partial copies thereof with a third party (i) if and to the extent it is necessary for you to do so in order for you to engage in use permitted pursuant to this Section 1, and (ii) you provide the recipient with a copy of the T&Cs. However, you may only make the Graphical Documentation or any whole or partial copies thereof available to the public via download if it is part of a downloadable software package that includes a copy of the T&Cs. If you download a software package that includes the Graphical Documentation, your use of the Graphical Documentation will be subject to and governed by the latest version of the T&Cs, which can be found here: https://www.universal-robots.com/legal/terms-and-conditions/terms_and_conditions_for_use_of_graphical_documentation.txt , regardless of whether they are included in the software package or not. + +1.4.1. You are not allowed to alter, obscure, remove or replace any copyright or other legal notices, trademarks, business names and/or logos embedded in, superimposed on, affixed to, or otherwise included in, the Graphical Documentation without Universal Robots’ prior written permission. + +1.4.2. You may show the Graphical Documentation in whole or in part to a third party or the public in the course of you engaging in the use permitted pursuant to this Section 1, provided that you display any copyright notice already contained in the Graphical Documentation, cf. also Section 1.4.1. + +1.4.3. You may show graphical representations of Universal Robots’ products based on the Graphical Documentation to a third party or the public in the course of you engaging in the use permitted pursuant to this Section 1, if you, to the extent possible, display the following copyright notice in connection with such use: “© 2023 Universal Robots A/S. Use hereof is subject to Universal Robots A/S’ Terms and Conditions for Use of Graphical Documentation.” If the medium that you use limits or does not support the possibility of displaying the copyright notice, you may in good faith disregard this requirement. + +1.5. You may under no circumstances use the Graphical Documentation for planning, construction, maintenance, operation, or use, directly or indirectly, in nuclear power plants, missile technology, chemical or biological weapons applications or flight, navigation, or communication of aircraft or ground support equipment. + +1.6. Any use of the Graphical Documentation that is not expressly permitted pursuant to this Section 1 constitutes a material breach of the T&Cs. + +1.7. If your intended use of the Graphical Documentation is not permitted pursuant to the T&Cs, you may contact Universal Robots via email at legal@universal-robots.com and request a special permission to engage in your particular intended use. + + +2. INTELLECTUAL PROPERTY RIGHTS + +2.1. You acknowledge and agree that the Graphical Documentation and all intellectual property rights contained and/or embodied therein, including, but not limited to, rights under the Danish Marketing Practices Act or under similar rules of law, patents, utility models, copyrights and related rights, software, trademarks, semiconductors, designs, know-how, rights in databases, trade secrets, and all applications or pending applications for such in all cases, whether or not registrable in any country, and all rights and forms of protection of a similar nature or having equivalent or similar effect anywhere in the world, shall be and remain the sole property of Universal Robots. Nothing in the T&Cs shall be construed as granting you any license to such rights, including, without limitation, any licenses to use Universal Robots’ trademarks, patents, or designs, except as strictly necessary in order for you to engage in the use permitted pursuant to Section 1. + +2.2. If you create any derivative works based on the Graphical Documentation, Universal Robots shall own the intellectual property rights in and to such derivative works. The foregoing notwithstanding, you may use such derivative works in connection with your use of the Graphical Documentation in accordance with Section 1. + + +3. NO WARRANTIES, LIMITATIONS OF LIABILITY + +3.1. THE GRAPHICAL DOCUMENTATION IS PROVIDED ON AN “AS IS” BASIS AND UNIVERSAL ROBOTS MAKES NO WARRANTY OF ANY KIND WITH RESPECT TO THE GRAPHICAL DOCUMENTATION AND WE HEREBY EXPRESSLY EXCLUDE ANY WARRANTIES WITH RESPECT THERETO, WHETHER EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING BUT NOT LIMITED TO ANY IMPLIED WARRANTIES OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE, NONINFRINGEMENT, ACCURACY OR ANY OTHER WARRANTIES OR GUARANTEES THAT MAY ARISE FROM COURSE OF DEALING, USAGE, OR TRADE PRACTICE. NEITHER UNIVERSAL ROBOTS NOR ITS SUPPLIERS, INCLUDING – WITHOUT LIMITATION – ITS LICENSORS, MAKE ANY REPRESENTATION, WARRANTY, OR OTHER COMMITMENT REGARDING (1) THE USE OR INABILITY TO USE THE GRAPHICAL DOCUMENTATION; OR (2) ANY RESULTS OF SUCH USE IN TERMS OF CORRECTNESS, ACCURACY, OR RELIABILITY. YOU UNDERSTAND AND AGREE THAT YOU ASSUME THE ENTIRE RISK AS TO YOUR USE OF THE GRAPHICAL DOCUMENTATION. + +3.2. TO THE EXTENT PERMITTED BY LAW, IN NO EVENT WILL UNIVERSAL ROBOTS BE LIABLE FOR ANY LOSSES OR DAMAGES INCURRED BY YOU, WHETHER DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL, INCLUDING LOST OR ANTICIPATED PROFITS, SAVINGS, INTERRUPTION TO BUSINESS, LOSS OF BUSINESS OPPORTUNITIES, LOSS OF BUSINESS INFORMATION OR OTHER DATA, THE COST OF RECOVERING SUCH LOST INFORMATION OR DATA, THE COST OF SUBSTITUTE INTELLECTUAL PROPERTY OR ANY OTHER PECUNIARY LOSS ARISING FROM THE USE OF, OR THE INABILITY TO USE, THE GRAPHICAL DOCUMENTATION REGARDLESS OF WHETHER UNIVERSAL ROBOTS HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. THE FOREGOING LIMITATIONS APPLY REGARDLESS OF THE CAUSE OR CIRCUMSTANCES GIVING RISE TO SUCH LOSS, DAMAGE OR LIABILITY, EVEN IF SUCH LOSS, DAMAGE OR LIABILITY IS BASED ON NEGLIGENCE OR OTHER TORTS OR BREACH OF CONTRACT. + + +4. INDEMNIFICATION + +4.1. You shall defend, indemnify, and hold Universal Robots and its affiliates, employees, and agents harmless, from and against all sums, claims, costs, duties, liabilities, losses, obligations, suits, actions, damages, penalties, awards, fines, interest, and other expenses (including investigation expenses and attorneys’ fees) that Universal Robots may incur or be obligated to pay as a result of your unauthorized use, modification, resale, transfer, shipment, or export of the Graphical Documentation. + + +5. MISCELLANEOUS + +5.1. Entire Agreement. Except as otherwise explicitly provided for herein, the T&Cs constitute the entire agreement and supersedes all prior negotiations, promises, understandings, and agreements between the parties with respect to the subject matter hereof. + +5.2. Changes to the T&Cs. Universal Robots reserves the right, in its sole and absolute discretion, to change the terms of the T&Cs by providing you with ninety (90) days’ notice. + +5.3. Obligations on Legal Successors. The parties undertake to impose the obligations under the T&Cs on their statutory or contractual legal successors, if any. + +5.4. Export Laws. You agree to comply with all applicable laws and regulations, including export laws of the United States and any other applicable country or jurisdiction. You agree that the Graphical Documentation will not be shipped, transferred, or exported into any country or used in any manner prohibited by the United States Export Administration Act or any other country’s export laws, restrictions, or regulations (collectively the “Export Laws”). In addition, if the Graphical Documentation are identified as export controlled items under the Export Laws, you represent and warrant that you are not a citizen, or otherwise located within, an embargoed nation and that you are not otherwise prohibited under the Export Laws from receiving the Graphical Documentation. + +5.5. No Agency. The parties are independent contractors and nothing in the T&Cs shall be construed as to create an agency, joint venture, partnership, or other form of business association between the parties. + +5.6. Survival. If the contents of individual provisions of the T&Cs are intended to survive the termination or expiration of the T&Cs, such provisions, including but not limited to provisions governing warranties and representations and the transfer of rights, title and interest to Universal Robots, shall to this extent remain in effect and be fully enforceable also after the termination or expiration of the T&Cs for whatever reason. + + +6. TERM AND TERMINATION + +6.1. The T&Cs shall enter into force upon your receipt of, or you accessing, the Graphical Documentation and continue to be in force until terminated in accordance with this Section 6. The T&Cs shall automatically expire at such time as you are no longer permitted to use the Graphical Documentation in accordance with Section 1. + +6.2. You may terminate the T&Cs for convenience at any time by deleting all copies of the Graphical Documentation in your possession. Universal Robots may terminate the T&Cs for convenience by providing you with ninety (90) days’ notice. + +6.3. Universal Robots may terminate the T&Cs for cause with immediate effect in case of your material breach of the T&Cs. + + +7. EFFECTS OF TERMINATION + +7.1. Upon expiration or termination of the T&Cs, for whatever reason, you must immediately cease use of the Graphical Documentation and delete all copies of the Graphical Documentation in your possession. + +8. GOVERNING LAW AND VENUE + +8.1. The T&Cs shall be governed by and construed in accordance with the laws of Denmark, without giving effect to conflict of law provisions thereof. The parties expressly disclaim the applicability of the United Nations Convention on Contracts for the International Sale of Goods. + +8.2. Any and all disputes arising out of or in connection with the T&Cs shall be submitted to the International Chamber of Commerce and shall be settled under the Rules of Arbitration of the International Chamber of Commerce by one (1) arbitrator appointed in accordance with said Rules. The place of arbitration shall be Copenhagen, Denmark. The arbitration shall be conducted in the English language. The foregoing notwithstanding, Universal Robots may seek preliminary, temporary, or permanent injunctive relief and other equitable remedies in any court of competent jurisdiction prior to or during arbitration and may enforce the award of the arbitrator in any court of competent jurisdiction. + + +* E.g., STEP-Files (ISO 10303-21), Collada (.dae), STL files (.stl), GLB files (.glb), GLFT files (.glft) , Jupiter Tessellation files (.jt), E-plan files (.emp), electrical schematics, CAD files, and drawings including the contents of these technical files. “Software”, as defined in Universal Robots End User Software License Agreement, does not constitute “Technical Documentation” and your use thereof is, unless otherwise agreed with Universal Robots in writing, governed by Universal Robots’ End User Software License Agreement. diff --git a/my_dual_robot_cell/my_dual_robot_cell_description/launch/view_robot.launch.py b/my_dual_robot_cell/my_dual_robot_cell_description/launch/view_robot.launch.py new file mode 100644 index 0000000..4a8c477 --- /dev/null +++ b/my_dual_robot_cell/my_dual_robot_cell_description/launch/view_robot.launch.py @@ -0,0 +1,52 @@ +from launch import LaunchDescription +from launch.substitutions import Command, PathJoinSubstitution +from launch_ros.actions import Node +from launch_ros.parameter_descriptions import ParameterValue +from launch_ros.substitutions import FindPackageShare + + +def generate_launch_description(): + description_package = FindPackageShare("my_dual_robot_cell_description") + description_file = PathJoinSubstitution( + [description_package, "urdf", "my_dual_robot_cell.urdf.xacro"] + ) + rvizconfig_file = PathJoinSubstitution([description_package, "rviz", "urdf.rviz"]) + + robot_description = ParameterValue( + Command( + [ + "xacro ", + description_file, + " ", + "alice_ur_type:=", + "ur3", + " ", + "bob_ur_type:=", + "ur3", + ] + ), + value_type=str, + ) + + robot_state_publisher_node = Node( + package="robot_state_publisher", + executable="robot_state_publisher", + parameters=[{"robot_description": robot_description}], + ) + + joint_state_publisher_gui_node = Node( + package="joint_state_publisher_gui", + executable="joint_state_publisher_gui", + ) + + rviz_node = Node( + package="rviz2", + executable="rviz2", + name="rviz2", + output="screen", + arguments=["-d", rvizconfig_file], + ) + + return LaunchDescription( + [joint_state_publisher_gui_node, robot_state_publisher_node, rviz_node] + ) diff --git a/my_dual_robot_cell/my_dual_robot_cell_description/meshes/171005_Motek_Monitor_L.dae b/my_dual_robot_cell/my_dual_robot_cell_description/meshes/171005_Motek_Monitor_L.dae new file mode 100644 index 0000000..97fe0cb --- /dev/null +++ b/my_dual_robot_cell/my_dual_robot_cell_description/meshes/171005_Motek_Monitor_L.dae @@ -0,0 +1,137 @@ + + + + + VCGLab + VCGLib | MeshLab + + Y_UP + So. Okt 8 19:20:17 2017 + So. Okt 8 19:20:17 2017 + + + + notexture.png + + + + + + + + + + + + + texture0 + R8G8B8 + + + + + texture0-surface + LINEAR + LINEAR + + + + + + 0 0 0 1 + + + 0 0 0 1 + + + + + + 0 0 0 1 + + + 0.3 + + + 0 0 0 1 + + + 0.5 + + + 0 0 0 1 + + + 0 + + + 0 + + + + + + + + + + + -0.0916772 -0.0777887 0.00022198 -0.0938519 -0.0795624 0.00655396 -0.0916772 0.0777887 0.00022198 -0.0938519 0.0795624 0.0133077 0.0916772 -0.0777887 0.00022198 0.0938519 -0.0795624 0.00655396 0.0916772 0.0777887 0.00022198 0.0938519 0.0795624 0.0133077 0.0810381 0.0814928 0.00022198 -0.0810381 0.0814928 0.00022198 -0.0829604 0.083351 0.0134685 0.0829604 0.083351 0.0134685 -0.0810381 -0.0814928 0.00022198 0.0810381 -0.0814928 0.00022198 0.0829604 -0.083351 0.00639316 -0.0829604 -0.083351 0.00639316 -0.0944443 0.06763 0.00022198 -0.0944443 -0.06763 0.00022198 -0.0966847 -0.0691721 0.00699495 -0.0966847 0.0691721 0.0128667 0.0944443 -0.06763 0.00022198 0.0944443 0.06763 0.00022198 0.0966847 0.0691721 0.0128667 0.0966847 -0.0691721 0.00699495 0.0829604 0.0691721 0.0128667 0.0829604 -0.0691721 0.00699495 -0.0829604 0.0691721 0.0128667 -0.0829604 -0.0691721 0.00699495 -0.0810381 0.06763 0.00022198 -0.0810381 -0.06763 0.00022198 0.0810381 0.06763 0.00022198 0.0810381 -0.06763 0.00022198 -0.217617 -0.0948323 0.0737222 -0.213925 -0.104036 0.0746289 -0.226733 -0.0721063 0.341554 -0.223042 -0.0813098 0.342461 0.241557 0.089356 0.0737222 0.245249 0.0801525 0.0746289 0.232441 0.112082 0.341554 0.236132 0.102879 0.342461 0.0792243 0.0510807 0.346205 -0.0738337 -0.0103155 0.346205 -0.0701419 -0.019519 0.347112 0.0829161 0.0418771 0.347112 -0.0644009 -0.0338309 0.0690709 0.0886571 0.0275652 0.0690709 0.0923489 0.0183617 0.0699776 -0.0607091 -0.0430345 0.0699776 -0.223747 -0.0795501 0.253827 -0.220603 -0.0873886 0.161449 -0.216911 -0.0965921 0.162356 -0.220056 -0.0887537 0.254734 0.24135 0.0898722 0.0785366 0.235427 0.104638 0.253827 0.239118 0.0954348 0.254734 0.245041 0.0806687 0.0794433 0.218467 0.0951258 0.335695 0.227122 0.0735479 0.0813943 -0.202876 -0.0738871 0.335695 -0.19422 -0.095465 0.0813943 -0.076632 -0.00258662 0.226217 -0.0734878 -0.0104251 0.133839 0.076426 0.0588095 0.226217 0.0795702 0.050971 0.133839 0.232355 0.101821 0.347112 0.238095 0.0875095 0.0690709 0.228663 0.111025 0.346205 0.241787 0.0783059 0.0699776 0.235499 0.0939828 0.254734 0.241422 0.0792168 0.0794433 0.231666 0.103555 0.253174 0.23759 0.0887885 0.0778837 -0.222754 -0.0700519 0.346205 -0.20963 -0.102771 0.0699776 -0.219062 -0.0792554 0.347112 -0.213321 -0.0935674 0.0690709 -0.219791 -0.0774171 0.252988 -0.216646 -0.0852555 0.160609 -0.012588 0.0469129 0.00102476 -0.0176738 0.0595916 0.153964 0.000591163 0.0493907 0.00125001 -0.004623 0.0623894 0.158064 0.013705 0.0466524 0.00189147 0.00812527 0.0605624 0.16974 0.0247568 0.0391149 0.00285147 0.0186301 0.0543886 0.187215 0.0320643 0.0279257 0.00398387 0.0252923 0.0448081 0.207827 -0.031741 0.00233154 0.00398387 -0.038513 0.0192139 0.207827 -0.0341916 0.0154689 0.00285147 -0.0403183 0.0307427 0.187215 -0.0314122 0.0285546 0.00189147 -0.0369919 0.0424646 0.16974 -0.0238261 0.0395962 0.00125001 -0.0290402 0.0525949 0.158064 + + + + + + + + + + -0.94556 0.25756 -0.198945 0.323447 0.929031 -0.179678 0.894287 -0.243594 -0.375383 -0.306659 -0.880811 -0.360738 0 0 -1 8.53192e-08 -0.0424047 0.999101 0 -0.0424046 0.999101 0 -0.0424047 0.999101 0 0 -1 0 0 -1 0.306659 -0.880811 -0.360738 0 -0.957536 -0.288313 -0.323447 0.929031 -0.179678 0 0.990304 -0.138914 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.0424051 0.999101 0 -0.0424048 0.999101 0 -0.042405 0.999101 0 -0.0424048 0.999101 -1.30185e-07 -0.0424051 0.999101 0 -0.0424048 0.999101 0 0 -1 0 0 -1 0.94556 0.25756 -0.198945 0.949406 0 -0.31405 -0.894287 -0.243594 -0.375383 -0.949406 0 -0.31405 -0.928115 -0.372294 3.81545e-07 0.69069 0.33993 0.638275 0.928112 0.372302 -1.44968e-05 -0.647984 -0.327663 -0.687571 -0.296204 0.942658 -0.153813 0.370746 -0.92426 0.0910514 0.378693 -0.919759 0.103124 0.370748 -0.92426 0.0910433 -0.475211 0.874545 -0.0966705 -0.347127 0.865373 -0.361431 0.0338999 -0.0845111 -0.995846 0.0338999 -0.0845111 -0.995846 -0.0338994 0.0845098 0.995846 -0.0338994 0.0845097 0.995846 -0.371425 0.925947 0.0683055 -0.370748 0.92426 -0.0910445 -0.370952 0.924767 -0.0848594 -0.474576 0.875556 -0.0904459 0.370748 -0.92426 0.0910448 0.370748 -0.92426 0.0910445 0.370751 -0.924259 0.091045 0.377655 -0.921524 0.0903881 -0.36552 0.926802 -0.0862228 -0.26141 0.961043 -0.0897891 0.928115 0.372293 -1.61742e-07 0.928115 0.372294 8.3027e-09 -0.928115 -0.372295 2.4054e-07 -0.928116 -0.372292 -1.00824e-06 -0.261289 0.961015 -0.0904375 -0.287233 0.955427 0.0682408 0.370768 -0.924316 0.0903905 0.370746 -0.924261 0.0910453 0.734155 0.231612 -0.638257 0.369835 -0.921982 0.114766 -0.336127 0.869697 -0.36145 -0.0338996 0.0845104 0.995846 -0.487345 0.868529 -0.0902846 -0.487345 0.86853 -0.0902841 -0.694789 -0.210962 0.687578 -0.487351 0.868527 -0.0902836 0.370748 -0.92426 0.0910479 0.0338999 -0.084511 -0.995846 -0.182628 0.979302 -0.0872575 0.207304 0.975476 -0.0739667 0.565686 0.823139 -0.0494104 0.837936 0.545493 -0.0173456 -0.325975 0.812642 0.483068 -0.325975 0.812642 0.483067 -0.325975 0.812641 0.483068 -0.325975 0.812642 0.483068 0.370821 -0.924441 0.0888817 -0.982624 -0.184793 -0.017345 -0.977715 0.204041 -0.0494107 -0.823956 0.561805 -0.0739665 -0.54476 0.83404 -0.0872575 0.370748 -0.92426 0.0910483 0.370748 -0.92426 0.0910432 0.370751 -0.924259 0.0910446 0.370749 -0.92426 0.0910448 -0.94454 0.265705 -0.192991 0.321009 0.930372 -0.177093 0.906475 -0.232166 -0.352708 -0.311908 -0.881664 -0.354093 0 0 -1 0 -0.0424046 0.999101 -8.53192e-08 -0.0424047 0.999101 0 -0.0424047 0.999101 0 0 -1 0 0 -1 0.311908 -0.881664 -0.354093 0 -0.957536 -0.288313 -0.321009 0.930372 -0.177093 0 0.990304 -0.138914 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.0424051 0.999101 0 -0.0424048 0.999101 1.30185e-07 -0.0424051 0.999101 0 -0.0424048 0.999101 0 -0.042405 0.999101 0 -0.0424048 0.999101 0 0 -1 0 0 -1 0.94454 0.265705 -0.192991 0.98448 0.0074419 -0.175339 -0.906475 -0.232166 -0.352708 -0.98448 0.0074419 -0.175339 -0.928115 -0.372294 3.77399e-07 0.690696 0.339941 0.638262 0.928115 0.372294 5.95705e-06 -0.647983 -0.327662 -0.687572 -0.256832 0.959715 -0.113952 0.370749 -0.92426 0.091044 0.370748 -0.92426 0.0910473 -0.347127 0.865373 -0.361431 -0.347127 0.865373 -0.361431 0.0338999 -0.0845111 -0.995846 0.0338999 -0.0845111 -0.995846 -0.0338995 0.08451 0.995846 -0.0338994 0.0845098 0.995846 -0.371425 0.925947 0.0683054 -0.370748 0.92426 -0.0910444 -0.452184 0.889342 0.067831 -0.474576 0.875556 -0.0904458 0.370748 -0.92426 0.0910415 0.370748 -0.92426 0.0910445 0.370748 -0.92426 0.0910483 0.370748 -0.92426 0.0910444 -0.261293 0.961014 -0.0904369 -0.261414 0.961042 -0.0897892 0.928118 0.372286 1.3686e-06 0.928115 0.372293 2.11718e-07 -0.928116 -0.372292 -3.81546e-07 -0.928115 -0.372294 -5.15932e-07 -0.26177 0.960944 -0.089793 -0.370908 0.924658 -0.0862247 0.370771 -0.924315 0.0903906 0.370751 -0.924259 0.091045 0.734144 0.231615 -0.638268 0.356771 -0.928483 0.103118 -0.367842 0.917014 -0.154204 -0.0338994 0.0845098 0.995846 -0.487351 0.868526 -0.0902842 -0.37698 0.922326 -0.0848582 -0.694789 -0.210962 0.687578 -0.376652 0.921228 -0.0973294 0.0338999 -0.084511 -0.995846 -0.182536 0.97932 -0.0872477 0.207514 0.975434 -0.0739379 0.565847 0.82303 -0.0493804 0.837976 0.545433 -0.017334 -0.325975 0.812642 0.483067 -0.325975 0.812642 0.483068 -0.325975 0.812641 0.483068 0.370821 -0.924441 0.0888817 -0.982611 -0.184864 -0.0173334 -0.977756 0.203852 -0.0493808 -0.824079 0.561629 -0.0739375 -0.544838 0.83399 -0.0872477 0.370748 -0.92426 0.0910428 0.37075 -0.924259 0.0910445 -0.94556 0.25756 -0.198945 0.323447 0.929031 -0.179678 0.894287 -0.243594 -0.375383 -0.306659 -0.880811 -0.360738 0 0 -1 8.53192e-08 -0.0424047 0.999101 0 -0.0424046 0.999101 0 -0.0424047 0.999101 0 0 -1 0 0 -1 0.306659 -0.880811 -0.360738 0 -0.957536 -0.288313 -0.323447 0.929031 -0.179678 0 0.990304 -0.138914 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.0424051 0.999101 0 -0.0424048 0.999101 0 -0.042405 0.999101 0 -0.0424048 0.999101 -1.30185e-07 -0.0424051 0.999101 0 -0.0424048 0.999101 0 0 -1 0 0 -1 0.94556 0.25756 -0.198945 0.949406 0 -0.31405 -0.894287 -0.243594 -0.375383 -0.949406 0 -0.31405 -0.928115 -0.372294 3.81545e-07 0.69069 0.33993 0.638275 0.928112 0.372302 -1.44968e-05 -0.647984 -0.327663 -0.687571 -0.296204 0.942658 -0.153813 0.370746 -0.92426 0.0910514 0.378693 -0.919759 0.103124 0.370748 -0.92426 0.0910433 -0.475211 0.874545 -0.0966705 -0.347127 0.865373 -0.361431 0.0338999 -0.0845111 -0.995846 0.0338999 -0.0845111 -0.995846 -0.0338994 0.0845098 0.995846 -0.0338994 0.0845097 0.995846 -0.371425 0.925947 0.0683055 -0.370748 0.92426 -0.0910445 -0.370952 0.924767 -0.0848594 -0.474576 0.875556 -0.0904459 0.370748 -0.92426 0.0910448 0.370748 -0.92426 0.0910445 0.370751 -0.924259 0.091045 0.377655 -0.921524 0.0903881 -0.36552 0.926802 -0.0862228 -0.26141 0.961043 -0.0897891 0.928115 0.372293 -1.61742e-07 0.928115 0.372294 8.3027e-09 -0.928115 -0.372295 2.4054e-07 -0.928116 -0.372292 -1.00824e-06 -0.261289 0.961015 -0.0904375 -0.287233 0.955427 0.0682408 0.370768 -0.924316 0.0903905 0.370746 -0.924261 0.0910453 0.734155 0.231612 -0.638257 0.369835 -0.921982 0.114766 -0.336127 0.869697 -0.36145 -0.0338996 0.0845104 0.995846 -0.487345 0.868529 -0.0902846 -0.487345 0.86853 -0.0902841 -0.694789 -0.210962 0.687578 -0.487351 0.868527 -0.0902836 0.370748 -0.92426 0.0910479 0.0338999 -0.084511 -0.995846 -0.182628 0.979302 -0.0872575 0.207304 0.975476 -0.0739667 0.565686 0.823139 -0.0494104 0.837936 0.545493 -0.0173456 -0.325975 0.812642 0.483068 -0.325975 0.812642 0.483067 -0.325975 0.812641 0.483068 -0.325975 0.812642 0.483068 0.370821 -0.924441 0.0888817 -0.982624 -0.184793 -0.017345 -0.977715 0.204041 -0.0494107 -0.823956 0.561805 -0.0739665 -0.54476 0.83404 -0.0872575 0.370748 -0.92426 0.0910483 0.370748 -0.92426 0.0910432 0.370751 -0.924259 0.0910446 0.370749 -0.92426 0.0910448 -0.94454 0.265705 -0.192991 0.321009 0.930372 -0.177093 0.906475 -0.232166 -0.352708 -0.311908 -0.881664 -0.354093 0 0 -1 0 -0.0424046 0.999101 -8.53192e-08 -0.0424047 0.999101 0 -0.0424047 0.999101 0 0 -1 0 0 -1 0.311908 -0.881664 -0.354093 0 -0.957536 -0.288313 -0.321009 0.930372 -0.177093 0 0.990304 -0.138914 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.0424051 0.999101 0 -0.0424048 0.999101 1.30185e-07 -0.0424051 0.999101 0 -0.0424048 0.999101 0 -0.042405 0.999101 0 -0.0424048 0.999101 0 0 -1 0 0 -1 0.94454 0.265705 -0.192991 0.98448 0.0074419 -0.175339 -0.906475 -0.232166 -0.352708 -0.98448 0.0074419 -0.175339 -0.928115 -0.372294 3.77399e-07 0.690696 0.339941 0.638262 0.928115 0.372294 5.95705e-06 -0.647983 -0.327662 -0.687572 -0.256832 0.959715 -0.113952 0.370749 -0.92426 0.091044 0.370748 -0.92426 0.0910473 -0.347127 0.865373 -0.361431 -0.347127 0.865373 -0.361431 0.0338999 -0.0845111 -0.995846 0.0338999 -0.0845111 -0.995846 -0.0338995 0.08451 0.995846 -0.0338994 0.0845098 0.995846 -0.371425 0.925947 0.0683054 -0.370748 0.92426 -0.0910444 -0.452184 0.889342 0.067831 -0.474576 0.875556 -0.0904458 0.370748 -0.92426 0.0910415 0.370748 -0.92426 0.0910445 0.370748 -0.92426 0.0910483 0.370748 -0.92426 0.0910444 -0.261293 0.961014 -0.0904369 -0.261414 0.961042 -0.0897892 0.928118 0.372286 1.3686e-06 0.928115 0.372293 2.11718e-07 -0.928116 -0.372292 -3.81546e-07 -0.928115 -0.372294 -5.15932e-07 -0.26177 0.960944 -0.089793 -0.370908 0.924658 -0.0862247 0.370771 -0.924315 0.0903906 0.370751 -0.924259 0.091045 0.734144 0.231615 -0.638268 0.356771 -0.928483 0.103118 -0.367842 0.917014 -0.154204 -0.0338994 0.0845098 0.995846 -0.487351 0.868526 -0.0902842 -0.37698 0.922326 -0.0848582 -0.694789 -0.210962 0.687578 -0.376652 0.921228 -0.0973294 0.0338999 -0.084511 -0.995846 -0.182536 0.97932 -0.0872477 0.207514 0.975434 -0.0739379 0.565847 0.82303 -0.0493804 0.837976 0.545433 -0.017334 -0.325975 0.812642 0.483067 -0.325975 0.812642 0.483068 -0.325975 0.812641 0.483068 0.370821 -0.924441 0.0888817 -0.982611 -0.184864 -0.0173334 -0.977756 0.203852 -0.0493808 -0.824079 0.561629 -0.0739375 -0.544838 0.83399 -0.0872477 0.370748 -0.92426 0.0910428 0.37075 -0.924259 0.0910445 + + + + + + + + + + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.182338 0.0220053 0.180292 0.0157126 0.18035 0.0154955 0.179348 0.0159611 0.178019 0.0223002 0.179246 0.0159163 0.178953 0.013746 0.175333 0.00947583 0.178978 0.0134606 0.183098 0.00899959 0.180398 0.0127531 0.180288 0.0125815 0.238394 0.248858 0.267087 0.277552 0.238394 0.277552 0.238394 0.248858 0.267087 0.277552 0.238394 0.277552 0.267087 0.248858 0.238394 0.277552 0.238394 0.248858 0.267087 0.248858 0.238394 0.277552 0.238394 0.248858 0.267087 0.248858 0.238394 0.277552 0.238394 0.248858 0.267087 0.248858 0.238394 0.277552 0.238394 0.248858 0.178978 0.0134606 0.175675 0.00899959 0.179112 0.0133156 0.175675 0.00899959 0.180288 0.0125815 0.179112 0.0133156 0.182251 0.0224536 0.180189 0.0157629 0.180292 0.0157126 0.182129 0.0226858 0.179348 0.0159611 0.180189 0.0157629 0.267087 0.248858 0.238394 0.277552 0.238394 0.248858 0.267087 0.248858 0.238394 0.277552 0.238394 0.248858 0.238394 0.248858 0.267087 0.277552 0.238394 0.277552 0.267087 0.248858 0.238394 0.277552 0.238394 0.248858 0.267087 0.248858 0.238394 0.277552 0.238394 0.248858 0.267087 0.248858 0.238394 0.277552 0.238394 0.248858 0.238394 0.248858 0.267087 0.277552 0.238394 0.277552 0.267087 0.248858 0.238394 0.277552 0.238394 0.248858 0.267087 0.248858 0.238394 0.277552 0.238394 0.248858 0.267087 0.248858 0.238394 0.277552 0.238394 0.248858 0.267087 0.248858 0.238394 0.277552 0.238394 0.248858 0.267087 0.248858 0.238394 0.277552 0.238394 0.248858 0.179246 0.0159163 0.177911 0.0219296 0.17917 0.0157878 0.17917 0.0157878 0.174814 0.00977683 0.178953 0.013746 0.183386 0.00937593 0.180422 0.012965 0.180398 0.0127531 0.183822 0.00960553 0.18035 0.0154955 0.180422 0.012965 0.559422 0.686952 0.558848 0.705089 0.558266 0.687005 0.612804 0.706545 0.612588 0.70401 0.613552 0.705449 0.614351 0.651854 0.613069 0.651864 0.614045 0.65077 0.560373 0.650692 0.558921 0.649972 0.559741 0.648801 0.280992 0.434584 0.280782 0.434931 0.28055 0.43459 0.560043 0.667782 0.55991 0.651447 0.560373 0.650692 0.612785 0.652827 0.61122 0.653312 0.612653 0.651252 0.561959 0.652746 0.59601 0.650885 0.61122 0.653312 0.243092 0.26308 0.236121 0.265976 0.236117 0.261993 0.243092 0.26308 0.250177 0.266084 0.243056 0.26607 0.612653 0.651252 0.596025 0.648787 0.613422 0.64947 0.59601 0.650885 0.577315 0.648722 0.596025 0.648787 0.559635 0.706327 0.57691 0.704759 0.5769 0.706834 0.5769 0.706834 0.59546 0.704887 0.595464 0.706834 0.25019 0.253909 0.243093 0.259093 0.243053 0.253913 0.332766 0.446365 0.361798 0.24251 0.361798 0.446365 0.243053 0.253913 0.236129 0.257977 0.236117 0.253933 0.243093 0.259093 0.236117 0.261993 0.236129 0.257977 0.59546 0.704887 0.561907 0.702497 0.610774 0.702708 7.50045e-05 0.996271 0.999925 0.000420142 0.999731 0.996616 0.612176 0.704716 0.610774 0.702708 0.612659 0.687987 0.612659 0.687987 0.61122 0.653312 0.612785 0.652827 0.294136 0.434978 0.289733 0.43461 0.294369 0.434635 0.289733 0.43461 0.281023 0.434929 0.280992 0.434584 0.613552 0.705449 0.613114 0.688014 0.614287 0.688095 0.614287 0.688095 0.613225 0.652706 0.614351 0.651854 0.55991 0.651447 0.558311 0.667691 0.558921 0.649972 0.559513 0.667758 0.558266 0.687005 0.558311 0.667691 0.257153 0.25799 0.250174 0.263087 0.25017 0.259101 0.25019 0.253909 0.257153 0.25799 0.25017 0.259101 0.560012 0.68132 0.574027 0.608848 0.574026 0.68132 0.574025 0.717591 0.560012 0.68132 0.574026 0.68132 0.614045 0.65077 0.612653 0.651252 0.613422 0.64947 0.560015 0.608848 0.574027 0.606853 0.574027 0.608848 0.257142 0.265623 0.250177 0.266084 0.250174 0.263087 0.595464 0.706834 0.612176 0.704716 0.612804 0.706545 0.162238 0.348671 0.163973 0.313249 0.163973 0.348975 0.163973 0.382902 0.162238 0.348671 0.163973 0.348975 0.559911 0.703718 0.559635 0.706327 0.558848 0.705089 0.162238 0.312944 0.163973 0.27932 0.163973 0.313249 0.560043 0.667782 0.560373 0.650692 0.577314 0.650694 0.577314 0.650694 0.559741 0.648801 0.577315 0.648722 0.165087 0.0186697 0.130177 0.0149243 0.127809 0.0166051 0.166034 0.0148054 0.132001 0.0131707 0.130177 0.0149243 0.169421 0.0111899 0.133647 0.0113906 0.132001 0.0131707 0.174712 0.00834179 0.135247 0.00960141 0.133647 0.0113906 0.585221 0.622029 0.59493 0.628174 0.575511 0.628174 0.56728 0.645672 0.59493 0.628174 0.603161 0.645672 0.559849 0.702751 0.608661 0.67186 0.610592 0.702751 0.56178 0.67186 0.603161 0.645672 0.608661 0.67186 0.135247 0.00960141 0.184882 0.0293623 0.135348 0.0272724 0.135348 0.0272724 0.177428 0.0283761 0.133644 0.0247319 0.133644 0.0247319 0.171162 0.0259579 0.131952 0.0220857 0.131952 0.0220857 0.166868 0.0225131 0.130102 0.0193882 0.130102 0.0193882 0.165087 0.0186697 0.127809 0.0166051 0.559911 0.703718 0.57691 0.704759 0.560313 0.704528 0.612653 0.651252 0.61122 0.653312 0.59601 0.650885 0.559422 0.686952 0.559513 0.667758 0.560043 0.667782 0.565766 0.680803 0.570364 0.711743 0.565766 0.714329 0.182338 0.0220053 0.182251 0.0224536 0.180292 0.0157126 0.179348 0.0159611 0.178143 0.0224742 0.178019 0.0223002 0.178953 0.013746 0.174814 0.00977683 0.175333 0.00947583 0.183098 0.00899959 0.183386 0.00937593 0.180398 0.0127531 0.238394 0.248858 0.267087 0.248858 0.267087 0.277552 0.238394 0.248858 0.267087 0.248858 0.267087 0.277552 0.267087 0.248858 0.267087 0.277552 0.238394 0.277552 0.267087 0.248858 0.267087 0.277552 0.238394 0.277552 0.267087 0.248858 0.267087 0.277552 0.238394 0.277552 0.267087 0.248858 0.267087 0.277552 0.238394 0.277552 0.178978 0.0134606 0.175333 0.00947583 0.175675 0.00899959 0.175675 0.00899959 0.183098 0.00899959 0.180288 0.0125815 0.182251 0.0224536 0.182129 0.0226858 0.180189 0.0157629 0.182129 0.0226858 0.178143 0.0224742 0.179348 0.0159611 0.267087 0.248858 0.267087 0.277552 0.238394 0.277552 0.267087 0.248858 0.267087 0.277552 0.238394 0.277552 0.238394 0.248858 0.267087 0.248858 0.267087 0.277552 0.267087 0.248858 0.267087 0.277552 0.238394 0.277552 0.267087 0.248858 0.267087 0.277552 0.238394 0.277552 0.267087 0.248858 0.267087 0.277552 0.238394 0.277552 0.238394 0.248858 0.267087 0.248858 0.267087 0.277552 0.267087 0.248858 0.267087 0.277552 0.238394 0.277552 0.267087 0.248858 0.267087 0.277552 0.238394 0.277552 0.267087 0.248858 0.267087 0.277552 0.238394 0.277552 0.267087 0.248858 0.267087 0.277552 0.238394 0.277552 0.267087 0.248858 0.267087 0.277552 0.238394 0.277552 0.179246 0.0159163 0.178019 0.0223002 0.177911 0.0219296 0.17917 0.0157878 0.177911 0.0219296 0.174814 0.00977683 0.183386 0.00937593 0.183822 0.00960553 0.180422 0.012965 0.183822 0.00960553 0.182338 0.0220053 0.18035 0.0154955 0.559422 0.686952 0.559911 0.703718 0.558848 0.705089 0.612804 0.706545 0.612176 0.704716 0.612588 0.70401 0.614351 0.651854 0.613225 0.652706 0.613069 0.651864 0.560373 0.650692 0.55991 0.651447 0.558921 0.649972 0.280992 0.434584 0.281023 0.434929 0.280782 0.434931 0.560043 0.667782 0.559513 0.667758 0.55991 0.651447 0.561959 0.652746 0.577314 0.650694 0.59601 0.650885 0.243092 0.26308 0.243056 0.26607 0.236121 0.265976 0.243092 0.26308 0.250174 0.263087 0.250177 0.266084 0.612653 0.651252 0.59601 0.650885 0.596025 0.648787 0.59601 0.650885 0.577314 0.650694 0.577315 0.648722 0.559635 0.706327 0.560313 0.704528 0.57691 0.704759 0.5769 0.706834 0.57691 0.704759 0.59546 0.704887 0.25019 0.253909 0.25017 0.259101 0.243093 0.259093 0.332766 0.446365 0.332766 0.24251 0.361798 0.24251 0.243053 0.253913 0.243093 0.259093 0.236129 0.257977 0.243093 0.259093 0.243092 0.26308 0.236117 0.261993 0.59546 0.704887 0.57691 0.704759 0.561907 0.702497 7.50045e-05 0.996271 0.000269044 7.50045e-05 0.999925 0.000420142 0.612176 0.704716 0.59546 0.704887 0.610774 0.702708 0.612659 0.687987 0.610774 0.702708 0.61122 0.653312 0.294136 0.434978 0.289764 0.434956 0.289733 0.43461 0.289733 0.43461 0.289764 0.434956 0.281023 0.434929 0.613552 0.705449 0.612588 0.70401 0.613114 0.688014 0.614287 0.688095 0.613114 0.688014 0.613225 0.652706 0.55991 0.651447 0.559513 0.667758 0.558311 0.667691 0.559513 0.667758 0.559422 0.686952 0.558266 0.687005 0.257153 0.25799 0.257142 0.265623 0.250174 0.263087 0.25019 0.253909 0.257171 0.253941 0.257153 0.25799 0.560012 0.68132 0.560015 0.608848 0.574027 0.608848 0.574025 0.717591 0.560012 0.719514 0.560012 0.68132 0.614045 0.65077 0.613069 0.651864 0.612653 0.651252 0.560015 0.608848 0.560012 0.60493 0.574027 0.606853 0.257142 0.265623 0.257145 0.266009 0.250177 0.266084 0.595464 0.706834 0.59546 0.704887 0.612176 0.704716 0.162238 0.348671 0.162238 0.312944 0.163973 0.313249 0.163973 0.382902 0.162257 0.384702 0.162238 0.348671 0.559911 0.703718 0.560313 0.704528 0.559635 0.706327 0.162238 0.312944 0.162256 0.277521 0.163973 0.27932 0.577314 0.650694 0.560373 0.650692 0.559741 0.648801 0.165087 0.0186697 0.166034 0.0148054 0.130177 0.0149243 0.166034 0.0148054 0.169421 0.0111899 0.132001 0.0131707 0.169421 0.0111899 0.174712 0.00834179 0.133647 0.0113906 0.174712 0.00834179 0.181172 0.00662851 0.135247 0.00960141 0.56728 0.645672 0.575511 0.628174 0.59493 0.628174 0.559849 0.702751 0.56178 0.67186 0.608661 0.67186 0.56178 0.67186 0.56728 0.645672 0.603161 0.645672 0.135247 0.00960141 0.181172 0.00662851 0.184882 0.0293623 0.135348 0.0272724 0.184882 0.0293623 0.177428 0.0283761 0.133644 0.0247319 0.177428 0.0283761 0.171162 0.0259579 0.131952 0.0220857 0.171162 0.0259579 0.166868 0.0225131 0.130102 0.0193882 0.166868 0.0225131 0.165087 0.0186697 0.559911 0.703718 0.561907 0.702497 0.57691 0.704759 0.565766 0.680803 0.570364 0.61456 0.570364 0.711743 + + + + + + + + + + + + + + +

19 0 0 2 0 1 16 0 2 8 1 3 7 1 4 6 1 5 20 2 6 5 2 7 4 2 8 15 3 9 0 3 10 12 3 11 31 4 12 4 4 13 13 4 14 27 5 15 1 5 16 15 5 17 25 6 18 5 6 19 23 6 20 27 7 21 14 7 22 25 7 23 29 8 24 0 8 25 17 8 26 31 9 27 12 9 28 29 9 29 4 10 30 14 10 31 13 10 32 14 11 33 12 11 34 13 11 35 3 12 36 9 12 37 2 12 38 10 13 39 8 13 40 9 13 41 8 14 42 28 14 43 9 14 44 30 15 45 29 15 46 28 15 47 2 16 48 28 16 49 16 16 50 28 17 51 17 17 52 16 17 53 10 18 54 24 18 55 11 18 56 26 19 57 25 19 58 24 19 59 7 20 60 24 20 61 22 20 62 24 21 63 23 21 64 22 21 65 3 22 66 26 22 67 10 22 68 19 23 69 27 23 70 26 23 71 6 24 72 30 24 73 8 24 74 21 25 75 31 25 76 30 25 77 6 26 78 22 26 79 21 26 80 21 27 81 23 27 82 20 27 83 1 28 84 17 28 85 0 28 86 18 29 87 16 29 88 17 29 89 51 30 90 34 30 91 48 30 92 66 31 93 39 31 94 38 31 95 52 32 96 37 32 97 36 32 98 73 33 99 32 33 100 75 33 101 71 34 102 36 34 103 65 34 104 59 35 105 33 35 106 73 35 107 69 36 108 57 36 109 67 36 110 59 37 111 46 37 112 57 37 113 61 38 114 75 38 115 77 38 116 61 39 117 45 39 118 44 39 119 67 40 120 45 40 121 65 40 122 46 41 123 44 41 124 45 41 125 72 42 126 42 42 127 41 42 128 41 43 129 43 43 130 40 43 131 40 44 132 60 44 133 41 44 134 60 45 135 63 45 136 61 45 137 41 46 138 76 46 139 72 46 140 60 47 141 77 47 142 76 47 143 43 48 144 58 48 145 56 48 146 58 49 147 57 49 148 56 49 149 64 50 150 56 50 151 68 50 152 68 51 153 57 51 154 69 51 155 38 52 156 70 52 157 66 52 158 70 53 159 52 53 160 71 53 161 38 54 162 54 54 163 53 54 164 53 55 165 55 55 166 52 55 167 33 56 168 49 56 169 32 56 170 50 57 171 48 57 172 49 57 173 70 58 174 63 58 175 62 58 176 40 59 177 70 59 178 62 59 179 68 60 180 55 60 181 54 60 182 39 61 183 68 61 184 54 61 185 36 62 186 67 62 187 65 62 188 69 63 189 37 63 190 55 63 191 71 64 192 45 64 193 63 64 194 40 65 195 64 65 196 66 65 197 76 66 198 49 66 199 48 66 200 34 67 201 76 67 202 48 67 203 35 68 204 72 68 205 34 68 206 77 69 207 32 69 208 49 69 209 59 70 210 73 70 211 47 70 212 47 71 213 75 71 214 44 71 215 79 72 216 80 72 217 78 72 218 81 73 219 82 73 220 80 73 221 83 74 222 84 74 223 82 74 224 85 75 225 86 75 226 84 75 227 79 76 228 95 76 229 81 76 230 83 77 231 95 77 232 93 77 233 87 78 234 91 78 235 89 78 236 85 79 237 93 79 238 91 79 239 86 80 240 89 80 241 88 80 242 88 81 243 91 81 244 90 81 245 90 82 246 93 82 247 92 82 248 92 83 249 95 83 250 94 83 251 94 84 252 79 84 253 78 84 254 35 85 255 42 85 256 74 85 257 67 86 258 57 86 259 46 86 260 51 87 261 50 87 262 59 87 263 51 88 264 58 88 265 35 88 266 19 89 267 3 89 268 2 89 269 8 90 270 11 90 271 7 90 272 20 91 273 23 91 274 5 91 275 15 92 276 1 92 277 0 92 278 31 93 279 20 93 280 4 93 281 27 94 282 18 94 283 1 94 284 25 95 285 14 95 286 5 95 287 27 96 288 15 96 289 14 96 290 29 97 291 12 97 292 0 97 293 31 98 294 13 98 295 12 98 296 4 99 297 5 99 298 14 99 299 14 100 300 15 100 301 12 100 302 3 101 303 10 101 304 9 101 305 10 102 306 11 102 307 8 102 308 8 103 309 30 103 310 28 103 311 30 104 312 31 104 313 29 104 314 2 105 315 9 105 316 28 105 317 28 106 318 29 106 319 17 106 320 10 107 321 26 107 322 24 107 323 26 108 324 27 108 325 25 108 326 7 109 327 11 109 328 24 109 329 24 110 330 25 110 331 23 110 332 3 111 333 19 111 334 26 111 335 19 112 336 18 112 337 27 112 338 6 113 339 21 113 340 30 113 341 21 114 342 20 114 343 31 114 344 6 115 345 7 115 346 22 115 347 21 116 348 22 116 349 23 116 350 1 117 351 18 117 352 17 117 353 18 118 354 19 118 355 16 118 356 51 119 357 35 119 358 34 119 359 66 120 360 64 120 361 39 120 362 52 121 363 55 121 364 37 121 365 73 122 366 33 122 367 32 122 368 71 123 369 52 123 370 36 123 371 59 124 372 50 124 373 33 124 374 59 125 375 47 125 376 46 125 377 61 126 378 44 126 379 75 126 380 61 127 381 63 127 382 45 127 383 67 128 384 46 128 385 45 128 386 46 129 387 47 129 388 44 129 389 72 130 390 74 130 391 42 130 392 41 131 393 42 131 394 43 131 395 40 132 396 62 132 397 60 132 398 60 133 399 62 133 400 63 133 401 41 134 402 60 134 403 76 134 404 60 135 405 61 135 406 77 135 407 43 136 408 42 136 409 58 136 410 58 137 411 59 137 412 57 137 413 64 138 414 43 138 415 56 138 416 68 139 417 56 139 418 57 139 419 38 140 420 53 140 421 70 140 422 70 141 423 53 141 424 52 141 425 38 142 426 39 142 427 54 142 428 53 143 429 54 143 430 55 143 431 33 144 432 50 144 433 49 144 434 50 145 435 51 145 436 48 145 437 70 146 438 71 146 439 63 146 440 40 147 441 66 147 442 70 147 443 68 148 444 69 148 445 55 148 446 39 149 447 64 149 448 68 149 449 36 150 450 37 150 451 67 150 452 69 151 453 67 151 454 37 151 455 71 152 456 65 152 457 45 152 458 40 153 459 43 153 460 64 153 461 76 154 462 77 154 463 49 154 464 34 155 465 72 155 466 76 155 467 35 156 468 74 156 469 72 156 470 77 157 471 75 157 472 32 157 473 47 158 474 73 158 475 75 158 476 79 159 477 81 159 478 80 159 479 81 160 480 83 160 481 82 160 482 83 161 483 85 161 484 84 161 485 85 162 486 87 162 487 86 162 488 83 163 489 81 163 490 95 163 491 87 164 492 85 164 493 91 164 494 85 165 495 83 165 496 93 165 497 86 166 498 87 166 499 89 166 500 88 167 501 89 167 502 91 167 503 90 168 504 91 168 505 93 168 506 92 169 507 93 169 508 95 169 509 94 170 510 95 170 511 79 170 512 35 171 513 58 171 514 42 171 515 51 172 516 59 172 517 58 172 518 19 173 519 2 173 520 16 173 521 8 174 522 7 174 523 6 174 524 20 175 525 5 175 526 4 175 527 15 176 528 0 176 529 12 176 530 31 177 531 4 177 532 13 177 533 27 178 534 1 178 535 15 178 536 25 179 537 5 179 538 23 179 539 27 180 540 14 180 541 25 180 542 29 181 543 0 181 544 17 181 545 31 182 546 12 182 547 29 182 548 4 183 549 14 183 550 13 183 551 14 184 552 12 184 553 13 184 554 3 185 555 9 185 556 2 185 557 10 186 558 8 186 559 9 186 560 8 187 561 28 187 562 9 187 563 30 188 564 29 188 565 28 188 566 2 189 567 28 189 568 16 189 569 28 190 570 17 190 571 16 190 572 10 191 573 24 191 574 11 191 575 26 192 576 25 192 577 24 192 578 7 193 579 24 193 580 22 193 581 24 194 582 23 194 583 22 194 584 3 195 585 26 195 586 10 195 587 19 196 588 27 196 589 26 196 590 6 197 591 30 197 592 8 197 593 21 198 594 31 198 595 30 198 596 6 199 597 22 199 598 21 199 599 21 200 600 23 200 601 20 200 602 1 201 603 17 201 604 0 201 605 18 202 606 16 202 607 17 202 608 51 203 609 34 203 610 48 203 611 66 204 612 39 204 613 38 204 614 52 205 615 37 205 616 36 205 617 73 206 618 32 206 619 75 206 620 71 207 621 36 207 622 65 207 623 59 208 624 33 208 625 73 208 626 69 209 627 57 209 628 67 209 629 59 210 630 46 210 631 57 210 632 61 211 633 75 211 634 77 211 635 61 212 636 45 212 637 44 212 638 67 213 639 45 213 640 65 213 641 46 214 642 44 214 643 45 214 644 72 215 645 42 215 646 41 215 647 41 216 648 43 216 649 40 216 650 40 217 651 60 217 652 41 217 653 60 218 654 63 218 655 61 218 656 41 219 657 76 219 658 72 219 659 60 220 660 77 220 661 76 220 662 43 221 663 58 221 664 56 221 665 58 222 666 57 222 667 56 222 668 64 223 669 56 223 670 68 223 671 68 224 672 57 224 673 69 224 674 38 225 675 70 225 676 66 225 677 70 226 678 52 226 679 71 226 680 38 227 681 54 227 682 53 227 683 53 228 684 55 228 685 52 228 686 33 229 687 49 229 688 32 229 689 50 230 690 48 230 691 49 230 692 70 231 693 63 231 694 62 231 695 40 232 696 70 232 697 62 232 698 68 233 699 55 233 700 54 233 701 39 234 702 68 234 703 54 234 704 36 235 705 67 235 706 65 235 707 69 236 708 37 236 709 55 236 710 71 237 711 45 237 712 63 237 713 40 238 714 64 238 715 66 238 716 76 239 717 49 239 718 48 239 719 34 240 720 76 240 721 48 240 722 35 241 723 72 241 724 34 241 725 77 242 726 32 242 727 49 242 728 59 243 729 73 243 730 47 243 731 47 244 732 75 244 733 44 244 734 79 245 735 80 245 736 78 245 737 81 246 738 82 246 739 80 246 740 83 247 741 84 247 742 82 247 743 85 248 744 86 248 745 84 248 746 79 249 747 95 249 748 81 249 749 83 250 750 95 250 751 93 250 752 87 251 753 91 251 754 89 251 755 85 252 756 93 252 757 91 252 758 86 253 759 89 253 760 88 253 761 88 254 762 91 254 763 90 254 764 90 255 765 93 255 766 92 255 767 92 256 768 95 256 769 94 256 770 94 257 771 79 257 772 78 257 773 35 258 774 42 258 775 74 258 776 67 259 777 57 259 778 46 259 779 51 260 780 50 260 781 59 260 782 51 261 783 58 261 784 35 261 785 19 262 786 3 262 787 2 262 788 8 263 789 11 263 790 7 263 791 20 264 792 23 264 793 5 264 794 15 265 795 1 265 796 0 265 797 31 266 798 20 266 799 4 266 800 27 267 801 18 267 802 1 267 803 25 268 804 14 268 805 5 268 806 27 269 807 15 269 808 14 269 809 29 270 810 12 270 811 0 270 812 31 271 813 13 271 814 12 271 815 4 272 816 5 272 817 14 272 818 14 273 819 15 273 820 12 273 821 3 274 822 10 274 823 9 274 824 10 275 825 11 275 826 8 275 827 8 276 828 30 276 829 28 276 830 30 277 831 31 277 832 29 277 833 2 278 834 9 278 835 28 278 836 28 279 837 29 279 838 17 279 839 10 280 840 26 280 841 24 280 842 26 281 843 27 281 844 25 281 845 7 282 846 11 282 847 24 282 848 24 283 849 25 283 850 23 283 851 3 284 852 19 284 853 26 284 854 19 285 855 18 285 856 27 285 857 6 286 858 21 286 859 30 286 860 21 287 861 20 287 862 31 287 863 6 288 864 7 288 865 22 288 866 21 289 867 22 289 868 23 289 869 1 290 870 18 290 871 17 290 872 18 291 873 19 291 874 16 291 875 51 292 876 35 292 877 34 292 878 66 293 879 64 293 880 39 293 881 52 294 882 55 294 883 37 294 884 73 295 885 33 295 886 32 295 887 71 296 888 52 296 889 36 296 890 59 297 891 50 297 892 33 297 893 59 298 894 47 298 895 46 298 896 61 299 897 44 299 898 75 299 899 61 300 900 63 300 901 45 300 902 67 301 903 46 301 904 45 301 905 46 302 906 47 302 907 44 302 908 72 303 909 74 303 910 42 303 911 41 304 912 42 304 913 43 304 914 40 305 915 62 305 916 60 305 917 60 306 918 62 306 919 63 306 920 41 307 921 60 307 922 76 307 923 60 308 924 61 308 925 77 308 926 43 309 927 42 309 928 58 309 929 58 310 930 59 310 931 57 310 932 64 311 933 43 311 934 56 311 935 68 312 936 56 312 937 57 312 938 38 313 939 53 313 940 70 313 941 70 314 942 53 314 943 52 314 944 38 315 945 39 315 946 54 315 947 53 316 948 54 316 949 55 316 950 33 317 951 50 317 952 49 317 953 50 318 954 51 318 955 48 318 956 70 319 957 71 319 958 63 319 959 40 320 960 66 320 961 70 320 962 68 321 963 69 321 964 55 321 965 39 322 966 64 322 967 68 322 968 36 323 969 37 323 970 67 323 971 69 324 972 67 324 973 37 324 974 71 325 975 65 325 976 45 325 977 40 326 978 43 326 979 64 326 980 76 327 981 77 327 982 49 327 983 34 328 984 72 328 985 76 328 986 35 329 987 74 329 988 72 329 989 77 330 990 75 330 991 32 330 992 47 331 993 73 331 994 75 331 995 79 332 996 81 332 997 80 332 998 81 333 999 83 333 1000 82 333 1001 83 334 1002 85 334 1003 84 334 1004 85 335 1005 87 335 1006 86 335 1007 83 336 1008 81 336 1009 95 336 1010 87 337 1011 85 337 1012 91 337 1013 85 338 1014 83 338 1015 93 338 1016 86 339 1017 87 339 1018 89 339 1019 88 340 1020 89 340 1021 91 340 1022 90 341 1023 91 341 1024 93 341 1025 92 342 1026 93 342 1027 95 342 1028 94 343 1029 95 343 1030 79 343 1031 35 344 1032 58 344 1033 42 344 1034 51 345 1035 59 345 1036 58 345 1037

+
+
+
+
+ + + + + + + + + + + + + + + + + + +
diff --git a/my_dual_robot_cell/my_dual_robot_cell_description/meshes/fzi_skyline_v1.png b/my_dual_robot_cell/my_dual_robot_cell_description/meshes/fzi_skyline_v1.png new file mode 100644 index 0000000..67bab4b Binary files /dev/null and b/my_dual_robot_cell/my_dual_robot_cell_description/meshes/fzi_skyline_v1.png differ diff --git a/my_dual_robot_cell/my_dual_robot_cell_description/meshes/fzi_table.dae b/my_dual_robot_cell/my_dual_robot_cell_description/meshes/fzi_table.dae new file mode 100644 index 0000000..d12996b --- /dev/null +++ b/my_dual_robot_cell/my_dual_robot_cell_description/meshes/fzi_table.dae @@ -0,0 +1,372 @@ + + + + + Blender User + Blender 3.6.4 commit date:2023-09-25, commit time:13:24, hash:21bfc5e7fe3f + + 2023-10-05T17:11:52 + 2023-10-05T17:11:52 + + Z_UP + + + + + + + 39.59775 + 1.777778 + 0.1 + 100 + + + + + + 0 + 0 + 10 + + + + + + + + + 1000 1000 1000 + 1 + 0 + 0.00111109 + + + + + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 1000 + 29.99998 + 75 + 0.15 + 0 + 1 + 2 + 0.04999995 + 30.002 + 1 + 2880 + 3 + 1 + 0.1 + 1 + 0.1 + 0.1 + 1 + + + + + + + + + + fzi_skyline_v1_png + + + + + fzi_skyline_v1_png-surface + + + + + + 0 0 0 1 + + + + + + 1.45 + + + + + + + + + + + 0 0 0 1 + + + 0.2882971 0.2882971 0.2882971 1 + + + 1.45 + + + + + + + + + + + 0 0 0 1 + + + 1 1 1 1 + + + 1.45 + + + + + + + + + fzi_skyline_v1.png + + + + + + + + + + + + + + + + + + -1 -1 -1 -1 -1 1 -1 1 -1 -1 1 1 1 -1 -1 1 -1 1 1 1 -1 1 1 1 + + + + + + + + + + -1 0 0 0 1 0 1 0 0 0 -1 0 0 0 -1 0 0 1 + + + + + + + + + + 2 0.9015979 1.65 0.08888447 2 0.08888411 1.65 0.9015982 1 0.08888405 1.65 0.08888447 1 0.9015977 0.65 0.08888411 1 0.08888405 0.65 0.9015977 0 0.08888417 0.65 0.08888411 1 0.08888405 0.65 0.07669693 1 0.07669693 1 0.9074417 0.65 0.9015977 1 0.9015977 2 0.9015979 1.65 0.9015982 1.65 0.08888447 1.65 0.9015982 1 0.9015977 1 0.08888405 1 0.9015977 0.65 0.9015977 0.65 0.08888411 0.65 0.9015977 0 0.9015979 0 0.08888417 1 0.08888405 0.65 0.08888411 0.65 0.07669693 1 0.9074417 0.65 0.9074417 0.65 0.9015977 + + + + + + + + + + + + + + +

1 0 0 2 0 1 0 0 2 3 1 3 6 1 4 2 1 5 7 2 6 4 2 7 6 2 8 5 3 9 0 3 10 4 3 11 6 4 12 0 4 13 2 4 14 3 5 15 5 5 16 7 5 17 1 0 18 3 0 19 2 0 20 3 1 21 7 1 22 6 1 23 7 2 24 5 2 25 4 2 26 5 3 27 1 3 28 0 3 29 6 4 30 4 4 31 0 4 32 3 5 33 1 5 34 5 5 35

+
+
+
+ + + + -1 -1 -1 -1 -1 1 -1 1 -1 -1 1 1 1 -1 -1 1 -1 1 1 1 -1 1 1 1 + + + + + + + + + + -1 0 0 0 1 0 1 0 0 0 -1 0 0 0 -1 0 0 1 + + + + + + + + + + 0.625 0 0.375 0.25 0.375 0 0.625 0.25 0.375 0.5 0.375 0.25 0.625 0.5 0.375 0.75 0.375 0.5 0.625 0.75 0.375 1 0.375 0.75 0.375 0.5 0.125 0.75 0.125 0.5 0.875 0.5 0.625 0.75 0.625 0.5 0.625 0 0.625 0.25 0.375 0.25 0.625 0.25 0.625 0.5 0.375 0.5 0.625 0.5 0.625 0.75 0.375 0.75 0.625 0.75 0.625 1 0.375 1 0.375 0.5 0.375 0.75 0.125 0.75 0.875 0.5 0.875 0.75 0.625 0.75 + + + + + + + + + + + + + + +

1 0 0 2 0 1 0 0 2 3 1 3 6 1 4 2 1 5 7 2 6 4 2 7 6 2 8 5 3 9 0 3 10 4 3 11 6 4 12 0 4 13 2 4 14 3 5 15 5 5 16 7 5 17 1 0 18 3 0 19 2 0 20 3 1 21 7 1 22 6 1 23 7 2 24 5 2 25 4 2 26 5 3 27 1 3 28 0 3 29 6 4 30 4 4 31 0 4 32 3 5 33 1 5 34 5 5 35

+
+
+
+ + + + -1 -1 -1 -1 -1 1 -1 1 -1 -1 1 1 1 -1 -1 1 -1 1 1 1 -1 1 1 1 + + + + + + + + + + -1 0 0 0 1 0 1 0 0 0 -1 0 0 0 -1 0 0 1 + + + + + + + + + + 0.625 0 0.375 0.25 0.375 0 0.625 0.25 0.375 0.5 0.375 0.25 0.625 0.5 0.375 0.75 0.375 0.5 0.625 0.75 0.375 1 0.375 0.75 0.375 0.5 0.125 0.75 0.125 0.5 0.875 0.5 0.625 0.75 0.625 0.5 0.625 0 0.625 0.25 0.375 0.25 0.625 0.25 0.625 0.5 0.375 0.5 0.625 0.5 0.625 0.75 0.375 0.75 0.625 0.75 0.625 1 0.375 1 0.375 0.5 0.375 0.75 0.125 0.75 0.875 0.5 0.875 0.75 0.625 0.75 + + + + + + + + + + + + + + +

1 0 0 2 0 1 0 0 2 3 1 3 6 1 4 2 1 5 7 2 6 4 2 7 6 2 8 5 3 9 0 3 10 4 3 11 6 4 12 0 4 13 2 4 14 3 5 15 5 5 16 7 5 17 1 0 18 3 0 19 2 0 20 3 1 21 7 1 22 6 1 23 7 2 24 5 2 25 4 2 26 5 3 27 1 3 28 0 3 29 6 4 30 4 4 31 0 4 32 3 5 33 1 5 34 5 5 35

+
+
+
+
+ + + + 0.65 0 0 0 0 0.44 0 0 0 0 0.45 0.51 0 0 0 1 + + + + + + + + + + + + 0.0225 0 0 0.625 0 0.0225 0 -0.415 0 0 0.48 0.48 0 0 0 1 + + + + + + + + + + + + 0.0225 0 0 0.625 0 0.0225 0 0.415 0 0 0.48 0.48 0 0 0 1 + + + + + + + + + + + + 0.0225 0 0 -0.625 0 0.0225 0 0.415 0 0 0.48 0.48 0 0 0 1 + + + + + + + + + + + + 0.0225 0 0 -0.625 0 0.0225 0 -0.415 0 0 0.48 0.48 0 0 0 1 + + + + + + + + + + + + 0.75 0 0 0 0 0.5 0 0 0 0 0.02 0.98 0 0 0 1 + + + + + + + + + + + + 0.6859207 -0.3240135 0.6515582 7.358891 0.7276763 0.3054208 -0.6141704 -6.925791 0 0.8953956 0.4452714 4.958309 0 0 0 1 + + + + -0.2908646 -0.7711008 0.5663932 4.076245 0.9551712 -0.1998834 0.2183912 1.005454 -0.05518906 0.6045247 0.7946723 5.903862 0 0 0 1 + + + + + + + +
diff --git a/my_dual_robot_cell/my_dual_robot_cell_description/meshes/notexture.png b/my_dual_robot_cell/my_dual_robot_cell_description/meshes/notexture.png new file mode 100644 index 0000000..8e3a13f Binary files /dev/null and b/my_dual_robot_cell/my_dual_robot_cell_description/meshes/notexture.png differ diff --git a/my_dual_robot_cell/my_dual_robot_cell_description/meshes/ur_background.jpg b/my_dual_robot_cell/my_dual_robot_cell_description/meshes/ur_background.jpg new file mode 100644 index 0000000..520cc13 Binary files /dev/null and b/my_dual_robot_cell/my_dual_robot_cell_description/meshes/ur_background.jpg differ diff --git a/my_dual_robot_cell/my_dual_robot_cell_description/meshes/wall.dae b/my_dual_robot_cell/my_dual_robot_cell_description/meshes/wall.dae new file mode 100644 index 0000000..ce6b8f7 --- /dev/null +++ b/my_dual_robot_cell/my_dual_robot_cell_description/meshes/wall.dae @@ -0,0 +1,115 @@ + + + + + Blender User + Blender 3.6.4 commit date:2023-09-25, commit time:13:24, hash:21bfc5e7fe3f + + 2023-10-18T11:31:46 + 2023-10-18T11:31:46 + + Z_UP + + + + + + + ur_background_jpg + + + + + ur_background_jpg-surface + + + + + + 0 0 0 1 + + + + + + 1.45 + + + + + + + + + ur_background.jpg + + + + + + + + + + + + 1 1 1 1 1 -1 1 -1 1 1 -1 -1 -1 1 1 -1 1 -1 -1 -1 1 -1 -1 -1 + + + + + + + + + + 0 0 1 0 -1 0 -1 0 0 0 0 -1 1 0 0 0 1 0 + + + + + + + + + + 1 1 0 1 1 0.999716 0.9996879 0.9997164 -4.48159e-5 -0.002131581 0.9996881 -0.002131462 2 0.999716 2 0 2 0 1 0 0 0 1 0 1 0.999716 0.999688 0 1 1 2 0.999716 1 0 2 0 1 1 0 1 0 1 0.9996879 0.9997164 -4.4883e-5 0.9997163 -4.48159e-5 -0.002131581 2 0.999716 2 1 2 0 1 0 0 0 0 0 1 0.999716 0.9996879 0.9997164 0.999688 0 2 0.999716 1 1 1 0 + + + + + + + + + + + + + + +

4 0 0 2 0 1 0 0 2 2 1 3 7 1 4 3 1 5 6 2 6 5 2 7 7 2 8 1 3 9 7 3 10 5 3 11 0 4 12 3 4 13 1 4 14 4 5 15 1 5 16 5 5 17 4 0 18 6 0 19 2 0 20 2 1 21 6 1 22 7 1 23 6 2 24 4 2 25 5 2 26 1 3 27 3 3 28 7 3 29 0 4 30 2 4 31 3 4 32 4 5 33 0 5 34 1 5 35

+
+
+
+
+ + + + 2.222213 0 0 0 0 0.05 0 0 0 0 1.25 0 0 0 0 1 + + + + + + + + + + + + + + + +
diff --git a/my_dual_robot_cell/my_dual_robot_cell_description/package.xml b/my_dual_robot_cell/my_dual_robot_cell_description/package.xml new file mode 100644 index 0000000..37701bd --- /dev/null +++ b/my_dual_robot_cell/my_dual_robot_cell_description/package.xml @@ -0,0 +1,29 @@ + + + + my_dual_robot_cell_description + 1.0.0 + + This package contains an urdf of a shared workspace. + Felix Exner + + BSD-3-Clause + + Universal Robots A/S’ Terms and Conditions for Use of Graphical Documentation + + Felix Durchdewald + + ament_cmake + joint_state_publisher + joint_state_publisher_gui + robot_state_publisher + rviz2 + xacro + ur_description + ur_robot_driver + + + + ament_cmake + + diff --git a/my_dual_robot_cell/my_dual_robot_cell_description/rviz/urdf.rviz b/my_dual_robot_cell/my_dual_robot_cell_description/rviz/urdf.rviz new file mode 100644 index 0000000..360c746 --- /dev/null +++ b/my_dual_robot_cell/my_dual_robot_cell_description/rviz/urdf.rviz @@ -0,0 +1,358 @@ +Panels: + - Class: rviz_common/Displays + Help Height: 87 + Name: Displays + Property Tree Widget: + Expanded: + - /RobotModel1 + - /TF1 + - /TF1/Tree1 + Splitter Ratio: 0.5 + Tree Height: 398 + - Class: rviz_common/Views + Expanded: + - /Current View1 + Name: Views + Splitter Ratio: 0.5 +Visualization Manager: + Class: "" + Displays: + - Alpha: 0.5 + Cell Size: 1 + Class: rviz_default_plugins/Grid + Color: 160; 160; 164 + Enabled: true + Line Style: + Line Width: 0.029999999329447746 + Value: Lines + Name: Grid + Normal Cell Count: 0 + Offset: + X: 0 + Y: 0 + Z: 0 + Plane: XY + Plane Cell Count: 10 + Reference Frame: + Value: true + - Alpha: 1 + Class: rviz_default_plugins/RobotModel + Collision Enabled: false + Description File: "" + Description Source: Topic + Description Topic: + Depth: 5 + Durability Policy: Volatile + History Policy: Keep Last + Reliability Policy: Reliable + Value: /robot_description + Enabled: true + Links: + All Links Enabled: true + Expand Joint Details: false + Expand Link Details: false + Expand Tree: false + Link Tree Style: Links in Alphabetic Order + alice_base: + Alpha: 1 + Show Axes: false + Show Trail: false + alice_base_link: + Alpha: 1 + Show Axes: false + Show Trail: false + alice_base_link_inertia: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + alice_flange: + Alpha: 1 + Show Axes: false + Show Trail: false + alice_forearm_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + alice_ft_frame: + Alpha: 1 + Show Axes: false + Show Trail: false + alice_robot_mount: + Alpha: 1 + Show Axes: false + Show Trail: false + alice_shoulder_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + alice_tool0: + Alpha: 1 + Show Axes: false + Show Trail: false + alice_upper_arm_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + alice_wrist_1_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + alice_wrist_2_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + alice_wrist_3_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + bob_base: + Alpha: 1 + Show Axes: false + Show Trail: false + bob_base_link: + Alpha: 1 + Show Axes: false + Show Trail: false + bob_base_link_inertia: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + bob_flange: + Alpha: 1 + Show Axes: false + Show Trail: false + bob_forearm_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + bob_ft_frame: + Alpha: 1 + Show Axes: false + Show Trail: false + bob_robot_mount: + Alpha: 1 + Show Axes: false + Show Trail: false + bob_shoulder_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + bob_tool0: + Alpha: 1 + Show Axes: false + Show Trail: false + bob_upper_arm_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + bob_wrist_1_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + bob_wrist_2_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + bob_wrist_3_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + monitor: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + table: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + wall: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + world: + Alpha: 1 + Show Axes: false + Show Trail: false + Mass Properties: + Inertia: false + Mass: false + Name: RobotModel + TF Prefix: "" + Update Interval: 0 + Value: true + Visual Enabled: true + - Class: rviz_default_plugins/TF + Enabled: true + Frame Timeout: 15 + Frames: + All Enabled: true + alice_base: + Value: true + alice_base_link: + Value: true + alice_base_link_inertia: + Value: true + alice_flange: + Value: true + alice_forearm_link: + Value: true + alice_ft_frame: + Value: true + alice_robot_mount: + Value: true + alice_shoulder_link: + Value: true + alice_tool0: + Value: true + alice_upper_arm_link: + Value: true + alice_wrist_1_link: + Value: true + alice_wrist_2_link: + Value: true + alice_wrist_3_link: + Value: true + bob_base: + Value: true + bob_base_link: + Value: true + bob_base_link_inertia: + Value: true + bob_flange: + Value: true + bob_forearm_link: + Value: true + bob_ft_frame: + Value: true + bob_robot_mount: + Value: true + bob_shoulder_link: + Value: true + bob_tool0: + Value: true + bob_upper_arm_link: + Value: true + bob_wrist_1_link: + Value: true + bob_wrist_2_link: + Value: true + bob_wrist_3_link: + Value: true + monitor: + Value: true + table: + Value: true + wall: + Value: true + world: + Value: true + Marker Scale: 1 + Name: TF + Show Arrows: true + Show Axes: true + Show Names: false + Tree: + world: + table: + alice_robot_mount: + alice_base_link: + alice_base: + {} + alice_base_link_inertia: + alice_shoulder_link: + alice_upper_arm_link: + alice_forearm_link: + alice_wrist_1_link: + alice_wrist_2_link: + alice_wrist_3_link: + alice_flange: + alice_tool0: + {} + alice_ft_frame: + {} + bob_robot_mount: + bob_base_link: + bob_base: + {} + bob_base_link_inertia: + bob_shoulder_link: + bob_upper_arm_link: + bob_forearm_link: + bob_wrist_1_link: + bob_wrist_2_link: + bob_wrist_3_link: + bob_flange: + bob_tool0: + {} + bob_ft_frame: + {} + monitor: + {} + wall: + {} + Update Interval: 0 + Value: true + Enabled: true + Global Options: + Background Color: 48; 48; 48 + Fixed Frame: world + Frame Rate: 30 + Name: root + Tools: + - Class: rviz_default_plugins/MoveCamera + Transformation: + Current: + Class: rviz_default_plugins/TF + Value: true + Views: + Current: + Class: rviz_default_plugins/Orbit + Distance: 4.675174713134766 + Enable Stereo Rendering: + Stereo Eye Separation: 0.05999999865889549 + Stereo Focal Distance: 1 + Swap Stereo Eyes: false + Value: false + Focal Point: + X: 0.9431386590003967 + Y: 0.6480544209480286 + Z: 1.3101682662963867 + Focal Shape Fixed Size: true + Focal Shape Size: 0.05000000074505806 + Invert Z Axis: false + Name: Current View + Near Clip Distance: 0.009999999776482582 + Pitch: 0.49500054121017456 + Target Frame: + Value: Orbit (rviz) + Yaw: 4.259994983673096 + Saved: ~ +Window Geometry: + Displays: + collapsed: false + Height: 1016 + Hide Left Dock: false + Hide Right Dock: false + QMainWindow State: 000000ff00000000fd0000000100000000000001ad0000039efc0200000002fb000000100044006900730070006c006100790073010000003d00000222000000c900fffffffb0000000a00560069006500770073010000026500000176000000a400ffffff000005cd0000039e00000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000 + Views: + collapsed: false + Width: 1920 + X: 0 + Y: 27 diff --git a/my_dual_robot_cell/my_dual_robot_cell_description/urdf/my_dual_robot_cell.urdf.xacro b/my_dual_robot_cell/my_dual_robot_cell_description/urdf/my_dual_robot_cell.urdf.xacro new file mode 100644 index 0000000..0380dc0 --- /dev/null +++ b/my_dual_robot_cell/my_dual_robot_cell_description/urdf/my_dual_robot_cell.urdf.xacro @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/my_dual_robot_cell/my_dual_robot_cell_description/urdf/my_dual_robot_cell_macro.xacro b/my_dual_robot_cell/my_dual_robot_cell_description/urdf/my_dual_robot_cell_macro.xacro new file mode 100644 index 0000000..c743f95 --- /dev/null +++ b/my_dual_robot_cell/my_dual_robot_cell_description/urdf/my_dual_robot_cell_macro.xacro @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/my_dual_robot_cell/my_dual_robot_cell_moveit_config/.setup_assistant b/my_dual_robot_cell/my_dual_robot_cell_moveit_config/.setup_assistant new file mode 100644 index 0000000..23da84d --- /dev/null +++ b/my_dual_robot_cell/my_dual_robot_cell_moveit_config/.setup_assistant @@ -0,0 +1,10 @@ +moveit_setup_assistant_config: + urdf: + package: my_dual_robot_cell_description + relative_path: urdf/my_dual_robot_cell.urdf.xacro + srdf: + relative_path: config/my_dual_robot_cell.srdf + package_settings: + author_name: Vihaan Shah + author_email: vihaan.shah@uconn.edu + generated_timestamp: 1719324402 \ No newline at end of file diff --git a/my_dual_robot_cell/my_dual_robot_cell_moveit_config/CMakeLists.txt b/my_dual_robot_cell/my_dual_robot_cell_moveit_config/CMakeLists.txt new file mode 100644 index 0000000..0cb4e73 --- /dev/null +++ b/my_dual_robot_cell/my_dual_robot_cell_moveit_config/CMakeLists.txt @@ -0,0 +1,11 @@ +cmake_minimum_required(VERSION 3.22) +project(my_dual_robot_cell_moveit_config) + +find_package(ament_cmake REQUIRED) + +ament_package() + +install(DIRECTORY launch DESTINATION share/${PROJECT_NAME} + PATTERN "setup_assistant.launch" EXCLUDE) +install(DIRECTORY config DESTINATION share/${PROJECT_NAME}) +install(FILES .setup_assistant DESTINATION share/${PROJECT_NAME}) diff --git a/my_dual_robot_cell/my_dual_robot_cell_moveit_config/config/initial_positions.yaml b/my_dual_robot_cell/my_dual_robot_cell_moveit_config/config/initial_positions.yaml new file mode 100644 index 0000000..ecb90d7 --- /dev/null +++ b/my_dual_robot_cell/my_dual_robot_cell_moveit_config/config/initial_positions.yaml @@ -0,0 +1,15 @@ +# Default initial positions for my_dual_robot_cell's ros2_control fake system + +initial_positions: + alice_elbow_joint: 0 + alice_shoulder_lift_joint: 0 + alice_shoulder_pan_joint: 0 + alice_wrist_1_joint: 0 + alice_wrist_2_joint: 0 + alice_wrist_3_joint: 0 + bob_elbow_joint: 0 + bob_shoulder_lift_joint: 0 + bob_shoulder_pan_joint: 0 + bob_wrist_1_joint: 0 + bob_wrist_2_joint: 0 + bob_wrist_3_joint: 0 \ No newline at end of file diff --git a/my_dual_robot_cell/my_dual_robot_cell_moveit_config/config/joint_limits.yaml b/my_dual_robot_cell/my_dual_robot_cell_moveit_config/config/joint_limits.yaml new file mode 100644 index 0000000..f5ee057 --- /dev/null +++ b/my_dual_robot_cell/my_dual_robot_cell_moveit_config/config/joint_limits.yaml @@ -0,0 +1,70 @@ +# joint_limits.yaml allows the dynamics properties specified in the URDF to be overwritten or augmented as needed + +# For beginners, we downscale velocity and acceleration limits. +# You can always specify higher scaling factors (<= 1.0) in your motion requests. # Increase the values below to 1.0 to always move at maximum speed. +default_velocity_scaling_factor: 0.1 +default_acceleration_scaling_factor: 0.1 + +# Specific joint properties can be changed with the keys [max_position, min_position, max_velocity, max_acceleration] +# Joint limits can be turned off with [has_velocity_limits, has_acceleration_limits] +joint_limits: + alice_elbow_joint: + has_velocity_limits: true + max_velocity: 3.1415926535897931 + has_acceleration_limits: true + max_acceleration: 5.0 + alice_shoulder_lift_joint: + has_velocity_limits: true + max_velocity: 3.1415926535897931 + has_acceleration_limits: true + max_acceleration: 5.0 + alice_shoulder_pan_joint: + has_velocity_limits: true + max_velocity: 3.1415926535897931 + has_acceleration_limits: true + max_acceleration: 5.0 + alice_wrist_1_joint: + has_velocity_limits: true + max_velocity: 6.2831853071795862 + has_acceleration_limits: true + max_acceleration: 5.0 + alice_wrist_2_joint: + has_velocity_limits: true + max_velocity: 6.2831853071795862 + has_acceleration_limits: true + max_acceleration: 5.0 + alice_wrist_3_joint: + has_velocity_limits: true + max_velocity: 6.2831853071795862 + has_acceleration_limits: true + max_acceleration: 5.0 + bob_elbow_joint: + has_velocity_limits: true + max_velocity: 3.1415926535897931 + has_acceleration_limits: true + max_acceleration: 5.0 + bob_shoulder_lift_joint: + has_velocity_limits: true + max_velocity: 3.1415926535897931 + has_acceleration_limits: true + max_acceleration: 5.0 + bob_shoulder_pan_joint: + has_velocity_limits: true + max_velocity: 3.1415926535897931 + has_acceleration_limits: true + max_acceleration: 5.0 + bob_wrist_1_joint: + has_velocity_limits: true + max_velocity: 6.2831853071795862 + has_acceleration_limits: true + max_acceleration: 5.0 + bob_wrist_2_joint: + has_velocity_limits: true + max_velocity: 6.2831853071795862 + has_acceleration_limits: true + max_acceleration: 5.0 + bob_wrist_3_joint: + has_velocity_limits: true + max_velocity: 6.2831853071795862 + has_acceleration_limits: true + max_acceleration: 5.0 \ No newline at end of file diff --git a/my_dual_robot_cell/my_dual_robot_cell_moveit_config/config/kinematics.yaml b/my_dual_robot_cell/my_dual_robot_cell_moveit_config/config/kinematics.yaml new file mode 100644 index 0000000..87cc61c --- /dev/null +++ b/my_dual_robot_cell/my_dual_robot_cell_moveit_config/config/kinematics.yaml @@ -0,0 +1,8 @@ +alice_manipulator: + kinematics_solver: kdl_kinematics_plugin/KDLKinematicsPlugin + kinematics_solver_search_resolution: 0.0050000000000000001 + kinematics_solver_timeout: 0.0050000000000000001 +bob_manipulator: + kinematics_solver: kdl_kinematics_plugin/KDLKinematicsPlugin + kinematics_solver_search_resolution: 0.0050000000000000001 + kinematics_solver_timeout: 0.0050000000000000001 \ No newline at end of file diff --git a/my_dual_robot_cell/my_dual_robot_cell_moveit_config/config/moveit.rviz b/my_dual_robot_cell/my_dual_robot_cell_moveit_config/config/moveit.rviz new file mode 100644 index 0000000..2cbcdc6 --- /dev/null +++ b/my_dual_robot_cell/my_dual_robot_cell_moveit_config/config/moveit.rviz @@ -0,0 +1,484 @@ +Panels: + - Class: rviz_common/Displays + Help Height: 87 + Name: Displays + Property Tree Widget: + Expanded: ~ + Splitter Ratio: 0.4957627058029175 + Tree Height: 380 + - Class: rviz_common/Selection + Name: Selection + - Class: rviz_common/Tool Properties + Expanded: + - /2D Goal Pose1 + - /Publish Point1 + Name: Tool Properties + Splitter Ratio: 0.5886790156364441 + - Class: rviz_common/Views + Expanded: + - /Current View1 + Name: Views + Splitter Ratio: 0.5 +Visualization Manager: + Class: "" + Displays: + - Alpha: 0.5 + Cell Size: 1 + Class: rviz_default_plugins/Grid + Color: 160; 160; 164 + Enabled: true + Line Style: + Line Width: 0.029999999329447746 + Value: Lines + Name: Grid + Normal Cell Count: 0 + Offset: + X: 0 + Y: 0 + Z: 0 + Plane: XY + Plane Cell Count: 10 + Reference Frame: + Value: true + - Acceleration_Scaling_Factor: 0.1 + Class: moveit_rviz_plugin/MotionPlanning + Enabled: true + Move Group Namespace: "" + MoveIt_Allow_Approximate_IK: false + MoveIt_Allow_External_Program: false + MoveIt_Allow_Replanning: false + MoveIt_Allow_Sensor_Positioning: false + MoveIt_Planning_Attempts: 10 + MoveIt_Planning_Time: 5 + MoveIt_Use_Cartesian_Path: false + MoveIt_Use_Constraint_Aware_IK: false + MoveIt_Workspace: + Center: + X: 0 + Y: 0 + Z: 0 + Size: + X: 2 + Y: 2 + Z: 2 + Name: MotionPlanning + Planned Path: + Color Enabled: true + Interrupt Display: true + Links: + All Links Enabled: true + Expand Joint Details: false + Expand Link Details: false + Expand Tree: false + Link Tree Style: Links in Alphabetic Order + alice_base: + Alpha: 1 + Show Axes: false + Show Trail: false + alice_base_link: + Alpha: 1 + Show Axes: false + Show Trail: false + alice_base_link_inertia: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + alice_flange: + Alpha: 1 + Show Axes: false + Show Trail: false + alice_forearm_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + alice_ft_frame: + Alpha: 1 + Show Axes: false + Show Trail: false + alice_robot_mount: + Alpha: 1 + Show Axes: false + Show Trail: false + alice_shoulder_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + alice_tool0: + Alpha: 1 + Show Axes: false + Show Trail: false + alice_upper_arm_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + alice_wrist_1_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + alice_wrist_2_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + alice_wrist_3_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + bob_base: + Alpha: 1 + Show Axes: false + Show Trail: false + bob_base_link: + Alpha: 1 + Show Axes: false + Show Trail: false + bob_base_link_inertia: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + bob_flange: + Alpha: 1 + Show Axes: false + Show Trail: false + bob_forearm_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + bob_ft_frame: + Alpha: 1 + Show Axes: false + Show Trail: false + bob_robot_mount: + Alpha: 1 + Show Axes: false + Show Trail: false + bob_shoulder_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + bob_tool0: + Alpha: 1 + Show Axes: false + Show Trail: false + bob_upper_arm_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + bob_wrist_1_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + bob_wrist_2_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + bob_wrist_3_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + monitor: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + table: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + wall: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + world: + Alpha: 1 + Show Axes: false + Show Trail: false + Loop Animation: false + Robot Alpha: 0.5 + Robot Color: 150; 50; 150 + Show Robot Collision: false + Show Robot Visual: true + Show Trail: false + State Display Time: 0.05 s + Trail Step Size: 1 + Trajectory Topic: /display_planned_path + Use Sim Time: false + Planning Metrics: + Payload: 1 + Show Joint Torques: false + Show Manipulability: false + Show Manipulability Index: false + Show Weight Limit: false + TextHeight: 0.07999999821186066 + Planning Request: + Colliding Link Color: 255; 0; 0 + Goal State Alpha: 1 + Goal State Color: 250; 128; 0 + Interactive Marker Size: 0 + Joint Violation Color: 255; 0; 255 + Planning Group: alice_manipulator + Query Goal State: true + Query Start State: false + Show Workspace: false + Start State Alpha: 1 + Start State Color: 0; 255; 0 + Planning Scene Topic: monitored_planning_scene + Robot Description: robot_description + Scene Geometry: + Scene Alpha: 0.8999999761581421 + Scene Color: 50; 230; 50 + Scene Display Time: 0.009999999776482582 + Show Scene Geometry: true + Voxel Coloring: Z-Axis + Voxel Rendering: Occupied Voxels + Scene Robot: + Attached Body Color: 150; 50; 150 + Links: + All Links Enabled: true + Expand Joint Details: false + Expand Link Details: false + Expand Tree: false + Link Tree Style: Links in Alphabetic Order + alice_base: + Alpha: 1 + Show Axes: false + Show Trail: false + alice_base_link: + Alpha: 1 + Show Axes: false + Show Trail: false + alice_base_link_inertia: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + alice_flange: + Alpha: 1 + Show Axes: false + Show Trail: false + alice_forearm_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + alice_ft_frame: + Alpha: 1 + Show Axes: false + Show Trail: false + alice_robot_mount: + Alpha: 1 + Show Axes: false + Show Trail: false + alice_shoulder_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + alice_tool0: + Alpha: 1 + Show Axes: false + Show Trail: false + alice_upper_arm_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + alice_wrist_1_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + alice_wrist_2_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + alice_wrist_3_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + bob_base: + Alpha: 1 + Show Axes: false + Show Trail: false + bob_base_link: + Alpha: 1 + Show Axes: false + Show Trail: false + bob_base_link_inertia: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + bob_flange: + Alpha: 1 + Show Axes: false + Show Trail: false + bob_forearm_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + bob_ft_frame: + Alpha: 1 + Show Axes: false + Show Trail: false + bob_robot_mount: + Alpha: 1 + Show Axes: false + Show Trail: false + bob_shoulder_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + bob_tool0: + Alpha: 1 + Show Axes: false + Show Trail: false + bob_upper_arm_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + bob_wrist_1_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + bob_wrist_2_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + bob_wrist_3_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + monitor: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + table: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + wall: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + world: + Alpha: 1 + Show Axes: false + Show Trail: false + Robot Alpha: 1 + Show Robot Collision: false + Show Robot Visual: true + Value: true + Velocity_Scaling_Factor: 0.1 + Enabled: true + Global Options: + Background Color: 48; 48; 48 + Fixed Frame: world + Frame Rate: 30 + Name: root + Tools: + - Class: rviz_default_plugins/Interact + Hide Inactive Objects: true + - Class: rviz_default_plugins/MoveCamera + - Class: rviz_default_plugins/Select + - Class: rviz_default_plugins/FocusCamera + - Class: rviz_default_plugins/Measure + Line color: 128; 128; 0 + - Class: rviz_default_plugins/SetInitialPose + Covariance x: 0.25 + Covariance y: 0.25 + Covariance yaw: 0.06853891909122467 + Topic: + Depth: 5 + Durability Policy: Volatile + History Policy: Keep Last + Reliability Policy: Reliable + Value: /initialpose + - Class: rviz_default_plugins/SetGoal + Topic: + Depth: 5 + Durability Policy: Volatile + History Policy: Keep Last + Reliability Policy: Reliable + Value: /goal_pose + - Class: rviz_default_plugins/PublishPoint + Single click: true + Topic: + Depth: 5 + Durability Policy: Volatile + History Policy: Keep Last + Reliability Policy: Reliable + Value: /clicked_point + Transformation: + Current: + Class: rviz_default_plugins/TF + Value: true + Views: + Current: + Class: rviz_default_plugins/Orbit + Distance: 4.587055683135986 + Enable Stereo Rendering: + Stereo Eye Separation: 0.05999999865889549 + Stereo Focal Distance: 1 + Swap Stereo Eyes: false + Value: false + Focal Point: + X: 0.4825928509235382 + Y: 0.6104342937469482 + Z: 1.4097795486450195 + Focal Shape Fixed Size: true + Focal Shape Size: 0.05000000074505806 + Invert Z Axis: false + Name: Current View + Near Clip Distance: 0.009999999776482582 + Pitch: 0.41039803624153137 + Target Frame: + Value: Orbit (rviz) + Yaw: 4.133575916290283 + Saved: ~ +Window Geometry: + Displays: + collapsed: false + Height: 1016 + Hide Left Dock: false + Hide Right Dock: false + MotionPlanning: + collapsed: false + MotionPlanning - Trajectory Slider: + collapsed: false + QMainWindow State: 000000ff00000000fd0000000400000000000001f30000039efc020000000bfb0000001200530065006c0065006300740069006f006e00000001e10000009b0000005c00fffffffb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000001ed000001df00000185000000a3fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb000000100044006900730070006c006100790073010000003d00000210000000c900fffffffb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261fb000000280020002d0020005400720061006a006500630074006f0072007900200053006c00690064006500720000000000ffffffff0000000000000000fb00000044004d006f00740069006f006e0050006c0061006e006e0069006e00670020002d0020005400720061006a006500630074006f0072007900200053006c00690064006500720000000000ffffffff0000004100fffffffb0000001c004d006f00740069006f006e0050006c0061006e006e0069006e00670100000253000001880000017d00ffffff00000001000001100000039efc0200000003fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a00560069006500770073010000003d0000039e000000a400fffffffb0000001200530065006c0065006300740069006f006e010000025a000000b200000000000000000000000200000490000000a9fc0100000001fb0000000a00560069006500770073030000004e00000080000002e10000019700000003000004420000003efc0100000002fb0000000800540069006d00650100000000000004420000000000000000fb0000000800540069006d00650100000000000004500000000000000000000004710000039e00000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000 + Selection: + collapsed: false + Tool Properties: + collapsed: false + Views: + collapsed: false + Width: 1920 + X: 0 + Y: 27 diff --git a/my_dual_robot_cell/my_dual_robot_cell_moveit_config/config/moveit_controllers.yaml b/my_dual_robot_cell/my_dual_robot_cell_moveit_config/config/moveit_controllers.yaml new file mode 100644 index 0000000..dace306 --- /dev/null +++ b/my_dual_robot_cell/my_dual_robot_cell_moveit_config/config/moveit_controllers.yaml @@ -0,0 +1,32 @@ +# MoveIt uses this configuration for controller management + +moveit_controller_manager: moveit_simple_controller_manager/MoveItSimpleControllerManager + +moveit_simple_controller_manager: + controller_names: + - alice_scaled_joint_trajectory_controller + - bob_scaled_joint_trajectory_controller + + alice_scaled_joint_trajectory_controller: + type: FollowJointTrajectory + action_ns: follow_joint_trajectory + default: true + joints: + - alice_shoulder_pan_joint + - alice_shoulder_lift_joint + - alice_elbow_joint + - alice_wrist_1_joint + - alice_wrist_2_joint + - alice_wrist_3_joint + + bob_scaled_joint_trajectory_controller: + type: FollowJointTrajectory + action_ns: follow_joint_trajectory + default: true + joints: + - bob_shoulder_pan_joint + - bob_shoulder_lift_joint + - bob_elbow_joint + - bob_wrist_1_joint + - bob_wrist_2_joint + - bob_wrist_3_joint \ No newline at end of file diff --git a/my_dual_robot_cell/my_dual_robot_cell_moveit_config/config/my_dual_robot_cell.srdf b/my_dual_robot_cell/my_dual_robot_cell_moveit_config/config/my_dual_robot_cell.srdf new file mode 100644 index 0000000..70480a0 --- /dev/null +++ b/my_dual_robot_cell/my_dual_robot_cell_moveit_config/config/my_dual_robot_cell.srdf @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/my_dual_robot_cell/my_dual_robot_cell_moveit_config/config/pilz_cartesian_limits.yaml b/my_dual_robot_cell/my_dual_robot_cell_moveit_config/config/pilz_cartesian_limits.yaml new file mode 100644 index 0000000..b2997ca --- /dev/null +++ b/my_dual_robot_cell/my_dual_robot_cell_moveit_config/config/pilz_cartesian_limits.yaml @@ -0,0 +1,6 @@ +# Limits for the Pilz planner +cartesian_limits: + max_trans_vel: 1.0 + max_trans_acc: 2.25 + max_trans_dec: -5.0 + max_rot_vel: 1.57 diff --git a/my_dual_robot_cell/my_dual_robot_cell_moveit_config/launch/dual_ur_moveit.launch.py b/my_dual_robot_cell/my_dual_robot_cell_moveit_config/launch/dual_ur_moveit.launch.py new file mode 100644 index 0000000..de5a476 --- /dev/null +++ b/my_dual_robot_cell/my_dual_robot_cell_moveit_config/launch/dual_ur_moveit.launch.py @@ -0,0 +1,79 @@ +import os +from pathlib import Path + +import yaml +from ament_index_python.packages import get_package_share_directory +from launch import LaunchDescription +from launch.actions import (DeclareLaunchArgument, ExecuteProcess, + RegisterEventHandler) +from launch.conditions import IfCondition +from launch.event_handlers import OnProcessExit +from launch.substitutions import LaunchConfiguration, PathJoinSubstitution +from launch_ros.actions import Node +from launch_ros.substitutions import FindPackageShare +from moveit_configs_utils import MoveItConfigsBuilder + + +def load_yaml(package_name, file_path): + package_path = get_package_share_directory(package_name) + absolute_file_path = os.path.join(package_path, file_path) + + try: + with open(absolute_file_path) as file: + return yaml.safe_load(file) + except OSError: # parent of IOError, OSError *and* WindowsError where available + return None + + +def generate_launch_description(): + moveit_config = MoveItConfigsBuilder( + "my_dual_robot_cell", package_name="my_dual_robot_cell_moveit_config" + ).to_moveit_configs() + + move_group_configuration = { + "publish_robot_description_semantic": True, + "allow_trajectory_execution": True, + "publish_planning_scene": True, + "publish_geometry_updates": True, + "publish_state_updates": True, + "publish_transforms_updates": True, + } + + move_group_params = [ + moveit_config.to_dict(), + move_group_configuration, + ] + + move_group_node = Node( + package="moveit_ros_move_group", + executable="move_group", + output="screen", + parameters=move_group_params, + additional_env={"DISPLAY": ":0"}, + ) + + rviz_config_file = PathJoinSubstitution( + [FindPackageShare("my_dual_robot_cell_moveit_config"), "config", "moveit.rviz"] + ) + + rviz_node = Node( + package="rviz2", + executable="rviz2", + name="rviz2_moveit", + output="log", + arguments=["-d", rviz_config_file], + parameters=[ + moveit_config.robot_description, + moveit_config.robot_description_semantic, + moveit_config.robot_description_kinematics, + moveit_config.planning_pipelines, + moveit_config.joint_limits, + ], + ) + + return LaunchDescription( + [ + move_group_node, + rviz_node, + ] + ) diff --git a/my_dual_robot_cell/my_dual_robot_cell_moveit_config/package.xml b/my_dual_robot_cell/my_dual_robot_cell_moveit_config/package.xml new file mode 100644 index 0000000..ae4308f --- /dev/null +++ b/my_dual_robot_cell/my_dual_robot_cell_moveit_config/package.xml @@ -0,0 +1,41 @@ + + + + my_dual_robot_cell_moveit_config + 0.3.0 + + An automatically generated package with all the configuration and launch files for using the my_dual_robot_cell with the MoveIt Motion Planning Framework + + Vihaan Shah + + BSD-3-Clause + + http://moveit.ros.org/ + https://github.com/ros-planning/moveit2/issues + https://github.com/ros-planning/moveit2 + + Vihaan Shah + + ament_cmake + + moveit_ros_move_group + moveit_kinematics + moveit_planners + moveit_simple_controller_manager + joint_state_publisher + joint_state_publisher_gui + tf2_ros + xacro + moveit_configs_utils + moveit_ros_move_group + moveit_ros_visualization + my_dual_robot_cell_description + rviz2 + rviz_common + rviz_default_plugins + + + + ament_cmake + +